Snap for 6435660 from ff61c416b7161a2ffe04c68af0c40f675a566cb2 to sdk-release

Change-Id: Iecf7dd4a5cbad1235d0431477299347bf6f3b267
diff --git a/.appveyor.yml b/.appveyor.yml
index 5765d9e..44d5f04 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -17,6 +17,20 @@
   only:
     - master
 
+# changes to these files don't need to trigger testing
+skip_commits:
+  files:
+    - README.md
+    - README-spirv-remap.txt
+    - LICENSE.txt
+    - CODE_OF_CONDUCT.md
+    - BUILD.*
+    - WORKSPACE
+    - kokoro/*
+    - make-revision
+    - Android.mk
+    - _config.yml
+
 # Travis advances the master-tot tag to current top of the tree after
 # each push into the master branch, because it relies on that tag to
 # upload build artifacts to the master-tot release. This will cause
@@ -32,6 +46,7 @@
 # scripts that run after cloning repository
 install:
   - C:/Python27/python.exe update_glslang_sources.py
+  - set PATH=C:\ninja;C:\Python36;%PATH%
   - git clone https://github.com/google/googletest.git External/googletest
   - cd External/googletest
   - git checkout 440527a61e1c91188195f7de212c63c77e8f0a45
@@ -65,7 +80,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/.clang-format b/.clang-format
index daf8798..8c73a52 100644
--- a/.clang-format
+++ b/.clang-format
@@ -1,7 +1,8 @@
 Language: Cpp
 IndentWidth: 4
+PointerAlignment: Left
 BreakBeforeBraces: Custom
-BraceWrapping: { AfterFunction: true, AfterControlStatement: true }
+BraceWrapping: { AfterFunction: true, AfterControlStatement: false }
 IndentCaseLabels: false
 ReflowComments: false
 ColumnLimit: 120
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..5930608
--- /dev/null
+++ b/BUILD.bazel
@@ -0,0 +1,247 @@
+package(
+    default_visibility = ["//visibility:public"],
+)
+
+# Description:
+#
+# Khronos reference front-end for GLSL and ESSL, and sample SPIR-V generator.
+
+licenses(["notice"])
+
+exports_files(["LICENSE"])
+
+COMMON_COPTS = select({
+    "@bazel_tools//src/conditions:windows": [""],
+    "//conditions:default": [
+        "-Wall",
+        "-Wuninitialized",
+        "-Wunused",
+        "-Wunused-local-typedefs",
+        "-Wunused-parameter",
+        "-Wunused-value",
+        "-Wunused-variable",
+        "-Wno-reorder",
+        "-std=c++11",
+        "-fvisibility=hidden",
+        "-fvisibility-inlines-hidden",
+        "-fno-exceptions",
+        "-fno-rtti",
+    ],
+})
+
+cc_library(
+    name = "glslang",
+    srcs = glob(
+        [
+            "glslang/GenericCodeGen/*.cpp",
+            "glslang/MachineIndependent/*.cpp",
+            "glslang/MachineIndependent/preprocessor/*.cpp",
+            "hlsl/*.cpp",
+        ],
+        exclude = [
+            "glslang/MachineIndependent/pch.cpp",
+            "glslang/MachineIndependent/pch.h",
+            "hlsl/pch.cpp",
+            "hlsl/pch.h",
+        ],
+    ) + [
+        "OGLCompilersDLL/InitializeDll.cpp",
+    ] + select({
+        "@bazel_tools//src/conditions:windows":
+            ["glslang/OSDependent/Windows/ossource.cpp"],
+        "//conditions:default":
+            ["glslang/OSDependent/Unix/ossource.cpp"],
+    }),
+    hdrs = glob([
+        "glslang/Include/*.h",
+        "glslang/MachineIndependent/*.h",
+        "glslang/MachineIndependent/preprocessor/*.h",
+        "hlsl/*.h",
+    ]) + [
+        "OGLCompilersDLL/InitializeDll.h",
+        "StandAlone/DirStackFileIncluder.h",
+        "glslang/OSDependent/osinclude.h",
+        "glslang/Public/ShaderLang.h",
+    ],
+    copts = COMMON_COPTS,
+    defines = [
+        "AMD_EXTENSIONS",
+        "ENABLE_HLSL=0",
+        "ENABLE_OPT=0",
+        "NV_EXTENSIONS",
+    ],
+    linkopts = select({
+        "@bazel_tools//src/conditions:windows": [""],
+        "//conditions:default": ["-lm", "-lpthread"],
+    }),
+    linkstatic = 1,
+)
+
+genrule(
+    name = "export_spirv_headers",
+    srcs = [
+        "SPIRV/GLSL.ext.AMD.h",
+        "SPIRV/GLSL.ext.EXT.h",
+        "SPIRV/GLSL.ext.KHR.h",
+        "SPIRV/GLSL.ext.NV.h",
+        "SPIRV/GLSL.std.450.h",
+        "SPIRV/NonSemanticDebugPrintf.h",
+        "SPIRV/spirv.hpp",
+    ],
+    outs = [
+        "include/SPIRV/GLSL.ext.AMD.h",
+        "include/SPIRV/GLSL.ext.EXT.h",
+        "include/SPIRV/GLSL.ext.KHR.h",
+        "include/SPIRV/GLSL.ext.NV.h",
+        "include/SPIRV/GLSL.std.450.h",
+        "include/SPIRV/NonSemanticDebugPrintf.h",
+        "include/SPIRV/spirv.hpp",
+    ],
+    cmd = "mkdir -p $(@D)/include/SPIRV && cp $(SRCS) $(@D)/include/SPIRV/",
+)
+
+cc_library(
+    name = "SPIRV_headers",
+    hdrs = [":export_spirv_headers"],
+    copts = COMMON_COPTS,
+    includes = [
+        "include",
+        "include/SPIRV",
+    ],
+    linkstatic = 1,
+)
+
+cc_library(
+    name = "SPIRV",
+    srcs = glob(
+        ["SPIRV/*.cpp"],
+        exclude = [
+            "SPIRV/SpvTools.cpp",
+        ],
+    ),
+    hdrs = [
+        "SPIRV/GlslangToSpv.h",
+        "SPIRV/Logger.h",
+        "SPIRV/SPVRemapper.h",
+        "SPIRV/SpvBuilder.h",
+        "SPIRV/SpvTools.h",
+        "SPIRV/bitutils.h",
+        "SPIRV/disassemble.h",
+        "SPIRV/doc.h",
+        "SPIRV/hex_float.h",
+        "SPIRV/spvIR.h",
+    ],
+    copts = COMMON_COPTS,
+    includes = ["SPIRV"],
+    linkopts = select({
+        "@bazel_tools//src/conditions:windows": [""],
+        "//conditions:default": ["-lm"],
+    }),
+    linkstatic = 1,
+    deps = [
+        ":SPIRV_headers",
+        ":glslang",
+    ],
+)
+
+cc_library(
+    name = "glslang-default-resource-limits",
+    srcs = ["StandAlone/ResourceLimits.cpp"],
+    hdrs = ["StandAlone/ResourceLimits.h"],
+    copts = COMMON_COPTS,
+    linkstatic = 1,
+    deps = [":glslang"],
+)
+
+cc_binary(
+    name = "glslangValidator",
+    srcs = [
+        "StandAlone/StandAlone.cpp",
+        "StandAlone/Worklist.h",
+    ],
+    copts = COMMON_COPTS,
+    deps = [
+        ":SPIRV",
+        ":glslang",
+        ":glslang-default-resource-limits",
+    ],
+)
+
+cc_binary(
+    name = "spirv-remap",
+    srcs = ["StandAlone/spirv-remap.cpp"],
+    copts = COMMON_COPTS,
+    deps = [
+        ":SPIRV",
+        ":glslang",
+        ":glslang-default-resource-limits",
+    ],
+)
+
+filegroup(
+    name = "test_files",
+    srcs = glob(
+        ["Test/**"],
+        exclude = [
+            "Test/bump",
+            "Test/glslangValidator",
+            "Test/runtests",
+        ],
+    ),
+)
+
+cc_library(
+    name = "glslang_test_lib",
+    testonly = 1,
+    srcs = [
+        "gtests/HexFloat.cpp",
+        "gtests/Initializer.h",
+        "gtests/Settings.cpp",
+        "gtests/Settings.h",
+        "gtests/TestFixture.cpp",
+        "gtests/TestFixture.h",
+        "gtests/main.cpp",
+    ],
+    copts = COMMON_COPTS,
+    data = [":test_files"],
+    defines = select({
+        # Unfortunately we can't use $(location) in cc_library at the moment.
+        # See https://github.com/bazelbuild/bazel/issues/1023
+        # So we'll specify the path manually.
+        "@bazel_tools//src/conditions:windows":
+            ["GLSLANG_TEST_DIRECTORY='\"../../../../../Test\"'"],
+        "//conditions:default":
+            ["GLSLANG_TEST_DIRECTORY='\"Test\"'"],
+    }),
+    linkstatic = 1,
+    deps = [
+        ":SPIRV",
+        ":glslang",
+        ":glslang-default-resource-limits",
+        "@com_google_googletest//:gtest",
+    ],
+)
+
+GLSLANG_TESTS = glob(
+    ["gtests/*.FromFile.cpp"],
+    # Since we are not building the SPIRV-Tools dependency, the following tests
+    # cannot be performed.
+    exclude = [
+        "gtests/Hlsl.FromFile.cpp",
+        "gtests/Spv.FromFile.cpp",
+    ],
+)
+
+[cc_test(
+    name = test_file.replace("gtests/", "").replace(".FromFile.cpp", "") + "_test",
+    srcs = [test_file],
+    copts = COMMON_COPTS,
+    data = [
+        ":test_files",
+    ],
+    deps = [
+        ":SPIRV",
+        ":glslang",
+        ":glslang_test_lib",
+    ],
+) for test_file in GLSLANG_TESTS]
diff --git a/BUILD.gn b/BUILD.gn
index 5d5b150..49b4b0a 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -33,10 +33,25 @@
 
 import("//build_overrides/glslang.gni")
 
+# Both Chromium and Fuchsia use by default a set of warning errors
+# that is far too strict to compile this project. These are also
+# typically appended after |cflags|, overriding target-specific
+# definitions. To work around this, determine which configs to
+# add and remove in order to succesfully build the project.
+if (defined(is_fuchsia_tree) && is_fuchsia_tree) {
+  _configs_to_remove = [ "//build/config:default_warnings" ]
+  _configs_to_add = []
+} else {
+  _configs_to_remove = [ "//build/config/compiler:chromium_code" ]
+  _configs_to_add = [ "//build/config/compiler:no_chromium_code" ]
+}
+
 spirv_tools_dir = glslang_spirv_tools_dir
 
 config("glslang_public") {
   include_dirs = [ "." ]
+
+  defines = [ "ENABLE_HLSL=1" ]
 }
 
 source_set("glslang_sources") {
@@ -45,19 +60,24 @@
   sources = [
     "OGLCompilersDLL/InitializeDll.cpp",
     "OGLCompilersDLL/InitializeDll.h",
+    "SPIRV/GLSL.ext.AMD.h",
     "SPIRV/GLSL.ext.EXT.h",
     "SPIRV/GLSL.ext.KHR.h",
+    "SPIRV/GLSL.ext.NV.h",
     "SPIRV/GLSL.std.450.h",
     "SPIRV/GlslangToSpv.cpp",
     "SPIRV/GlslangToSpv.h",
     "SPIRV/InReadableOrder.cpp",
     "SPIRV/Logger.cpp",
     "SPIRV/Logger.h",
+    "SPIRV/NonSemanticDebugPrintf.h",
     "SPIRV/SPVRemapper.cpp",
     "SPIRV/SPVRemapper.h",
     "SPIRV/SpvBuilder.cpp",
     "SPIRV/SpvBuilder.h",
     "SPIRV/SpvPostProcess.cpp",
+    "SPIRV/SpvTools.cpp",
+    "SPIRV/SpvTools.h",
     "SPIRV/bitutils.h",
     "SPIRV/disassemble.cpp",
     "SPIRV/disassemble.h",
@@ -104,7 +124,6 @@
     "glslang/MachineIndependent/attribute.cpp",
     "glslang/MachineIndependent/attribute.h",
     "glslang/MachineIndependent/gl_types.h",
-    "glslang/MachineIndependent/glslang.y",
     "glslang/MachineIndependent/glslang_tab.cpp",
     "glslang/MachineIndependent/glslang_tab.cpp.h",
     "glslang/MachineIndependent/intermOut.cpp",
@@ -128,9 +147,25 @@
     "glslang/MachineIndependent/reflection.h",
     "glslang/OSDependent/osinclude.h",
     "glslang/Public/ShaderLang.h",
+    "hlsl/hlslAttributes.cpp",
+    "hlsl/hlslAttributes.h",
+    "hlsl/hlslGrammar.cpp",
+    "hlsl/hlslGrammar.h",
+    "hlsl/hlslOpMap.cpp",
+    "hlsl/hlslOpMap.h",
+    "hlsl/hlslParseHelper.cpp",
+    "hlsl/hlslParseHelper.h",
+    "hlsl/hlslParseables.cpp",
+    "hlsl/hlslParseables.h",
+    "hlsl/hlslScanContext.cpp",
+    "hlsl/hlslScanContext.h",
+    "hlsl/hlslTokenStream.cpp",
+    "hlsl/hlslTokenStream.h",
+    "hlsl/hlslTokens.h",
   ]
 
-  defines = []
+  defines = [ "ENABLE_OPT=1" ]
+
   if (is_win) {
     sources += [ "glslang/OSDependent/Windows/ossource.cpp" ]
     defines += [ "GLSLANG_OSINCLUDE_WIN32" ]
@@ -140,14 +175,74 @@
   }
 
   if (is_clang) {
-    cflags_cc = [
-      "-Wno-implicit-fallthrough",
+    cflags = [
+      "-Wno-extra-semi",
       "-Wno-ignored-qualifiers",
+      "-Wno-implicit-fallthrough",
+      "-Wno-inconsistent-missing-override",
+      "-Wno-sign-compare",
       "-Wno-unused-variable",
+      "-Wno-missing-field-initializers",
+      "-Wno-newline-eof",
+    ]
+  }
+  if (is_win && !is_clang) {
+    cflags = [
+      "/wd4018",  # signed/unsigned mismatch
+      "/wd4189",  # local variable is initialized but not referenced
     ]
   }
 
   deps = [
     "${spirv_tools_dir}:spvtools_opt",
+    "${spirv_tools_dir}:spvtools_val",
   ]
+
+  configs -= _configs_to_remove
+  configs += _configs_to_add
+}
+
+source_set("glslang_default_resource_limits_sources") {
+  sources = [
+    "StandAlone/ResourceLimits.cpp",
+    "StandAlone/ResourceLimits.h",
+  ]
+  deps = [
+    ":glslang_sources",
+  ]
+  public_configs = [ ":glslang_public" ]
+
+  configs -= _configs_to_remove
+  configs += _configs_to_add
+}
+
+executable("glslang_validator") {
+  sources = [
+    "StandAlone/DirStackFileIncluder.h",
+    "StandAlone/StandAlone.cpp",
+  ]
+  if (!is_win) {
+    cflags = [ "-Woverflow" ]
+  }
+  defines = [ "ENABLE_OPT=1" ]
+  deps = [
+    ":glslang_default_resource_limits_sources",
+    ":glslang_sources",
+  ]
+
+  configs -= _configs_to_remove
+  configs += _configs_to_add
+}
+
+executable("spirv-remap") {
+  sources = [
+    "StandAlone/spirv-remap.cpp",
+  ]
+  defines = [ "ENABLE_OPT=1" ]
+  deps = [
+    ":glslang_sources",
+  ]
+
+  configs -= _configs_to_remove
+  configs += _configs_to_add
 }
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5dc9c66..cd9baf8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,10 +6,17 @@
 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)
 
+# Needed for CMAKE_DEPENDENT_OPTION macro
+include(CMakeDependentOption)
+
 option(BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
+option(BUILD_EXTERNAL "Build external dependencies in /External" ON)
 
 set(LIB_TYPE STATIC)
 
@@ -23,14 +30,36 @@
 endif()
 option(ENABLE_SPVREMAPPER "Enables building of SPVRemapper" ON)
 
-option(ENABLE_AMD_EXTENSIONS "Enables support of AMD-specific extensions" ON)
 option(ENABLE_GLSLANG_BINARIES "Builds glslangValidator and spirv-remap" ON)
 
-option(ENABLE_NV_EXTENSIONS "Enables support of Nvidia-specific extensions" ON)
+option(ENABLE_GLSLANG_JS
+    "If using Emscripten, build glslang.js. Otherwise, builds a sample executable for binary-size testing." OFF)
+CMAKE_DEPENDENT_OPTION(ENABLE_GLSLANG_WEBMIN
+    "Reduces glslang to minimum needed for web use"
+    OFF "ENABLE_GLSLANG_JS"
+    OFF)
+CMAKE_DEPENDENT_OPTION(ENABLE_GLSLANG_WEBMIN_DEVEL
+    "For ENABLE_GLSLANG_WEBMIN builds, enables compilation error messages"
+    OFF "ENABLE_GLSLANG_WEBMIN"
+    OFF)
+CMAKE_DEPENDENT_OPTION(ENABLE_EMSCRIPTEN_SINGLE_FILE
+    "If using Emscripten, enables SINGLE_FILE build"
+    OFF "ENABLE_GLSLANG_JS AND EMSCRIPTEN"
+    OFF)
+CMAKE_DEPENDENT_OPTION(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE
+    "If using Emscripten, builds to run on Node instead of Web"
+    OFF "ENABLE_GLSLANG_JS AND EMSCRIPTEN"
+    OFF)
 
-option(ENABLE_HLSL "Enables HLSL input support" ON)
+CMAKE_DEPENDENT_OPTION(ENABLE_HLSL
+    "Enables HLSL input support"
+    ON "NOT ENABLE_GLSLANG_WEBMIN"
+    OFF)
 
+option(ENABLE_RTTI "Enables RTTI" OFF)
 option(ENABLE_OPT "Enables spirv-opt capability if present" ON)
+option(ENABLE_PCH "Enables Precompiled header" ON)
+option(ENABLE_CTEST "Enables testing" ON)
 
 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32)
     set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "..." FORCE)
@@ -46,7 +75,7 @@
 
 # Precompiled header macro. Parameters are source file list and filename for pch cpp file.
 macro(glslang_pch SRCS PCHCPP)
-  if(MSVC AND CMAKE_GENERATOR MATCHES "^Visual Studio")
+  if(MSVC AND CMAKE_GENERATOR MATCHES "^Visual Studio" AND NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND ENABLE_PCH)
     set(PCH_NAME "$(IntDir)\\pch.pch")
     # make source files use/depend on PCH_NAME
     set_source_files_properties(${${SRCS}} PROPERTIES COMPILE_FLAGS "/Yupch.h /FIpch.h /Fp${PCH_NAME} /Zm300" OBJECT_DEPENDS "${PCH_NAME}")
@@ -57,23 +86,24 @@
 endmacro(glslang_pch)
 
 project(glslang)
-# make testing optional
-include(CTest)
 
-if(ENABLE_AMD_EXTENSIONS)
-    add_definitions(-DAMD_EXTENSIONS)
-endif(ENABLE_AMD_EXTENSIONS)
-
-if(ENABLE_NV_EXTENSIONS)
-    add_definitions(-DNV_EXTENSIONS)
-endif(ENABLE_NV_EXTENSIONS)
+if(ENABLE_CTEST)
+    include(CTest)
+endif()
 
 if(ENABLE_HLSL)
     add_definitions(-DENABLE_HLSL)
 endif(ENABLE_HLSL)
 
+if(ENABLE_GLSLANG_WEBMIN)
+    add_definitions(-DGLSLANG_WEB)
+    if(ENABLE_GLSLANG_WEBMIN_DEVEL)
+        add_definitions(-DGLSLANG_WEB_DEVEL)
+    endif(ENABLE_GLSLANG_WEBMIN_DEVEL)
+endif(ENABLE_GLSLANG_WEBMIN)
+
 if(WIN32)
-    set(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Adds a postfix for debug-built libraries.")
+    set(CMAKE_DEBUG_POSTFIX "d")
     if(MSVC)
         include(ChooseMSVCCRT.cmake)
     endif(MSVC)
@@ -88,17 +118,42 @@
     add_compile_options(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs
                         -Wunused-parameter -Wunused-value  -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable -fno-exceptions)
     add_compile_options(-Wno-reorder)  # disable this from -Wall, since it happens all over.
-elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
+    if(NOT ENABLE_RTTI)
+        add_compile_options(-fno-rtti)
+    endif()
+    if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0.0")
+        add_compile_options(-Werror=deprecated-copy)
+    endif()
+elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND NOT MSVC)
     add_compile_options(-Wall -Wuninitialized -Wunused -Wunused-local-typedefs
                         -Wunused-parameter -Wunused-value  -Wunused-variable)
     add_compile_options(-Wno-reorder)  # disable this from -Wall, since it happens all over.
+    if(NOT ENABLE_RTTI)
+        add_compile_options(-fno-rtti)
+    endif()
+elseif(MSVC)
+    if(NOT ENABLE_RTTI)
+        add_compile_options(/GR-) # Disable RTTI
+    endif()
 endif()
 
+if(ENABLE_GLSLANG_JS)
+    if(MSVC)
+        add_compile_options(/Os /GR-)
+    else()
+        add_compile_options(-Os -fno-exceptions)
+        if(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND NOT MSVC)
+            add_compile_options(-Wno-unused-parameter)
+            add_compile_options(-Wno-unused-variable -Wno-unused-const-variable)
+        endif()
+    endif()
+endif(ENABLE_GLSLANG_JS)
+
 # Request C++11
 if(${CMAKE_VERSION} VERSION_LESS 3.1)
     # CMake versions before 3.1 do not understand CMAKE_CXX_STANDARD
     # remove this block once CMake >=3.1 has fixated in the ecosystem
-    add_compile_options(-std=c++11)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 else()
     set(CMAKE_CXX_STANDARD 11)
     set(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -114,8 +169,14 @@
     endif()
 endfunction(glslang_set_link_args)
 
-# We depend on these for later projects, so they should come first.
-add_subdirectory(External)
+# CMake needs to find the right version of python, right from the beginning,
+# otherwise, it will find the wrong version and fail later
+if(BUILD_EXTERNAL AND IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External)
+    find_package(PythonInterp 3 REQUIRED)
+
+	# 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)
@@ -140,4 +201,29 @@
 if(ENABLE_HLSL)
     add_subdirectory(hlsl)
 endif(ENABLE_HLSL)
-add_subdirectory(gtests)
+if(ENABLE_CTEST)
+    add_subdirectory(gtests)
+endif()
+
+if(BUILD_TESTING)
+    # glslang-testsuite runs a bash script on Windows.
+    # Make sure to use '-o igncr' flag to ignore carriage returns (\r).
+    set(IGNORE_CR_FLAG "")
+    if(WIN32)
+        set(IGNORE_CR_FLAG -o igncr)
+    endif()
+
+    if (CMAKE_CONFIGURATION_TYPES)
+        set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/localResults)
+        set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIGURATION>/glslangValidator)
+        set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIGURATION>/spirv-remap)
+    else(CMAKE_CONFIGURATION_TYPES)
+        set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/localResults)
+        set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/glslangValidator)
+        set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/spirv-remap)
+    endif(CMAKE_CONFIGURATION_TYPES)
+
+    add_test(NAME glslang-testsuite
+        COMMAND bash ${IGNORE_CR_FLAG} runtests ${RESULTS_PATH} ${VALIDATOR_PATH} ${REMAP_PATH}
+        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Test/)
+endif(BUILD_TESTING)
diff --git a/External/CMakeLists.txt b/External/CMakeLists.txt
index 4d96901..6ff4f47 100644
--- a/External/CMakeLists.txt
+++ b/External/CMakeLists.txt
@@ -10,7 +10,8 @@
         if(WIN32)
             set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
         endif(WIN32)
-        add_subdirectory(googletest)
+        # EXCLUDE_FROM_ALL keeps the install target from installing GTEST files.
+        add_subdirectory(googletest EXCLUDE_FROM_ALL)
         set(GTEST_TARGETS
             gtest
             gtest_main
diff --git a/LICENSE.txt b/LICENSE.txt
old mode 100755
new mode 100644
diff --git a/METADATA b/METADATA
index 64eb8c6..263906b 100644
--- a/METADATA
+++ b/METADATA
@@ -8,5 +8,6 @@
     value: "https://github.com/KhronosGroup/glslang.git"
   }
   version: "e9405d0b443a1849fa55b7bfeaceda586a1c37af"
+  license_type: NOTICE
   last_upgrade_date { year: 2018 month: 12 day: 14 }
 }
diff --git a/OGLCompilersDLL/CMakeLists.txt b/OGLCompilersDLL/CMakeLists.txt
index 5bb3f0e..e009674 100644
--- a/OGLCompilersDLL/CMakeLists.txt
+++ b/OGLCompilersDLL/CMakeLists.txt
@@ -9,6 +9,7 @@
 endif(WIN32)
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS OGLCompiler
+    install(TARGETS OGLCompiler EXPORT OGLCompilerTargets
             ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+	install(EXPORT OGLCompilerTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/README.md b/README.md
index 7d4fe3a..ff844c0 100755
--- a/README.md
+++ b/README.md
@@ -1,35 +1,70 @@
-Also see the Khronos landing page for glslang as a reference front end:
-
-https://www.khronos.org/opengles/sdk/tools/Reference-Compiler/
-
-The above page includes where to get binaries, and is kept up to date
-regarding the feature level of glslang.
-
-glslang
-=======
+# News
 
 [![Build Status](https://travis-ci.org/KhronosGroup/glslang.svg?branch=master)](https://travis-ci.org/KhronosGroup/glslang)
 [![Build status](https://ci.appveyor.com/api/projects/status/q6fi9cb0qnhkla68/branch/master?svg=true)](https://ci.appveyor.com/project/Khronoswebmaster/glslang/branch/master)
 
-An OpenGL and OpenGL ES shader front end and validator.
+## Planned Deprecations/Removals
+
+1. **SPIRV Folder, 1-May, 2020.** Glslang, when installed through CMake,
+will install a `SPIRV` folder into `${CMAKE_INSTALL_INCLUDEDIR}`.
+This `SPIRV` folder is being moved to `glslang/SPIRV`.
+During the transition the `SPIRV` folder will be installed into both locations.
+The old install of `SPIRV/` will be removed as a CMake install target no sooner than May 1, 2020.
+See issue #1964.
+
+2. **Visual Studio 2013, 20-July, 2020.** Keeping code compiling for MS Visual Studio 2013 will no longer be
+a goal as of July 20, 2020, the fifth anniversary of the release of Visual Studio 2015.
+
+# Glslang Components and Status
 
 There are several components:
 
-1. A GLSL/ESSL front-end for reference validation and translation of GLSL/ESSL into an AST.
+### Reference Validator and GLSL/ESSL -> AST Front End
 
-2. An HLSL front-end for translation of a broad generic HLL into the AST. See [issue 362](https://github.com/KhronosGroup/glslang/issues/362) and [issue 701](https://github.com/KhronosGroup/glslang/issues/701) for current status.
+An OpenGL GLSL and OpenGL|ES GLSL (ESSL) front-end for reference validation and translation of GLSL/ESSL into an internal abstract syntax tree (AST).
 
-3. A SPIR-V back end for translating the AST to SPIR-V.
+**Status**: Virtually complete, with results carrying similar weight as the specifications.
 
-4. A standalone wrapper, `glslangValidator`, that can be used as a command-line tool for the above.
+### HLSL -> AST Front End
 
-How to add a feature protected by a version/extension/stage/profile:  See the
-comment in `glslang/MachineIndependent/Versions.cpp`.
+An HLSL front-end for translation of an approximation of HLSL to glslang's AST form.
+
+**Status**: Partially complete. Semantics are not reference quality and input is not validated.
+This is in contrast to the [DXC project](https://github.com/Microsoft/DirectXShaderCompiler), which receives a much larger investment and attempts to have definitive/reference-level semantics.
+
+See [issue 362](https://github.com/KhronosGroup/glslang/issues/362) and [issue 701](https://github.com/KhronosGroup/glslang/issues/701) for current status.
+
+### AST -> SPIR-V Back End
+
+Translates glslang's AST to the Khronos-specified SPIR-V intermediate language.
+
+**Status**: Virtually complete.
+
+### Reflector
+
+An API for getting reflection information from the AST, reflection types/variables/etc. from the HLL source (not the SPIR-V).
+
+**Status**: There is a large amount of functionality present, but no specification/goal to measure completeness against.  It is accurate for the input HLL and AST, but only approximate for what would later be emitted for SPIR-V.
+
+### Standalone Wrapper
+
+`glslangValidator` is command-line tool for accessing the functionality above.
+
+Status: Complete.
 
 Tasks waiting to be done are documented as GitHub issues.
 
-Execution of Standalone Wrapper
--------------------------------
+## Other References
+
+Also see the Khronos landing page for glslang as a reference front end:
+
+https://www.khronos.org/opengles/sdk/tools/Reference-Compiler/
+
+The above page, while not kept up to date, includes additional information regarding glslang as a reference validator.
+
+# How to Use Glslang
+
+## Execution of Standalone Wrapper
 
 To use the standalone binary form, execute `glslangValidator`, and it will print
 a usage statement.  Basic operation is to give it a file containing a shader,
@@ -46,8 +81,7 @@
 There is also a non-shader extension
 * `.conf` for a configuration file of limits, see usage statement for example
 
-Building
---------
+## Building
 
 Instead of building manually, you can also download the binaries for your
 platform directly from the [master-tot release][master-tot-release] on GitHub.
@@ -61,7 +95,7 @@
   (For MSVS: 2015 is recommended, 2013 is fully supported/tested, and 2010 support is attempted, but not tested.)
 * [CMake][cmake]: for generating compilation targets.
 * make: _Linux_, ninja is an alternative, if configured.
-* [Python 2.7][python]: for executing SPIRV-Tools scripts. (Optional if not using SPIRV-Tools.)
+* [Python 3.x][python]: for executing SPIRV-Tools scripts. (Optional if not using SPIRV-Tools and the 'External' subdirectory does not exist.)
 * [bison][bison]: _optional_, but needed when changing the grammar (glslang.y).
 * [googletest][googletest]: _optional_, but should use if making any changes to glslang.
 
@@ -70,7 +104,7 @@
 The following steps assume a Bash shell. On Windows, that could be the Git Bash
 shell or some other shell of your choosing.
 
-#### 1) Check-Out this project 
+#### 1) Check-Out this project
 
 ```bash
 cd <parent of where you want glslang to be>
@@ -94,8 +128,8 @@
 ```
 
 If you wish to assure that SPIR-V generated from HLSL is legal for Vulkan,
-or wish to invoke -Os to reduce SPIR-V size from HLSL or GLSL, install
-spirv-tools with this:
+wish to invoke -Os to reduce SPIR-V size from HLSL or GLSL, or wish to run the
+integrated test suite, install spirv-tools with this:
 
 ```bash
 ./update_glslang_sources.py
@@ -118,6 +152,14 @@
 # "Release" (for CMAKE_BUILD_TYPE) could also be "Debug" or "RelWithDebInfo"
 ```
 
+For building on Android:
+```bash
+cmake $SOURCE_DIR -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DANDROID_ABI=arm64-v8a -DCMAKE_BUILD_TYPE=Release -DANDROID_STL=c++_static -DANDROID_PLATFORM=android-24 -DCMAKE_SYSTEM_NAME=Android -DANDROID_TOOLCHAIN=clang -DANDROID_ARM_MODE=arm -DCMAKE_MAKE_PROGRAM=$ANDROID_NDK_ROOT/prebuilt/linux-x86_64/bin/make -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake
+# If on Windows will be -DCMAKE_MAKE_PROGRAM=%ANDROID_NDK_ROOT%\prebuilt\windows-x86_64\bin\make.exe
+# -G is needed for building on Windows
+# -DANDROID_ABI can also be armeabi-v7a for 32 bit
+```
+
 For building on Windows:
 
 ```bash
@@ -155,16 +197,57 @@
 The command to rebuild is:
 
 ```bash
+m4 -P MachineIndependent/glslang.m4 > MachineIndependent/glslang.y
 bison --defines=MachineIndependent/glslang_tab.cpp.h
       -t MachineIndependent/glslang.y
       -o MachineIndependent/glslang_tab.cpp
 ```
 
-The above command is also available in the bash script at
-`glslang/updateGrammar`.
+The above commands are also available in the bash script in `updateGrammar`,
+when executed from the glslang subdirectory of the glslang repository.
+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).
 
-Testing
--------
+### Building to WASM for the Web and Node
+### Building a standalone JS/WASM library for the Web and Node
+
+Use the steps in [Build Steps](#build-steps), with the following notes/exceptions:
+* `emsdk` needs to be present in your executable search path, *PATH* for
+  Bash-like environments:
+  + [Instructions located here](https://emscripten.org/docs/getting_started/downloads.html#sdk-download-and-install)
+* Wrap cmake call: `emcmake cmake`
+* Set `-DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF`.
+* Set `-DENABLE_HLSL=OFF` if HLSL is not needed.
+* For a standalone JS/WASM library, turn on `-DENABLE_GLSLANG_JS=ON`.
+* For building a minimum-size web subset of core glslang:
+  + turn on `-DENABLE_GLSLANG_WEBMIN=ON` (disables HLSL)
+  + execute `updateGrammar web` from the glslang subdirectory
+    (or if using your own scripts, `m4` needs a `-DGLSLANG_WEB` argument)
+  + optionally, for GLSL compilation error messages, turn on
+    `-DENABLE_GLSLANG_WEBMIN_DEVEL=ON`
+* To get a fully minimized build, make sure to use `brotli` to compress the .js
+  and .wasm files
+
+Example:
+
+```sh
+emcmake cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GLSLANG_JS=ON \
+    -DENABLE_HLSL=OFF -DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF ..
+```
+
+## Building glslang - Using vcpkg
+
+You can download and install glslang using the [vcpkg](https://github.com/Microsoft/vcpkg) dependency manager:
+
+    git clone https://github.com/Microsoft/vcpkg.git
+    cd vcpkg
+    ./bootstrap-vcpkg.sh
+    ./vcpkg integrate install
+    ./vcpkg install glslang
+
+The glslang port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.
+
+## Testing
 
 Right now, there are two test harnesses existing in glslang: one is [Google
 Test](gtests/), one is the [`runtests` script](Test/runtests). The former
@@ -200,6 +283,11 @@
 cd $SOURCE_DIR/Test && ./runtests
 ```
 
+If some tests fail with validation errors, there may be a mismatch between the
+version of `spirv-val` on the system and the version of glslang.  In this
+case, it is necessary to run `update_glslang_sources.py`.  See "Check-Out
+External Projects" above for more details.
+
 ### Contributing tests
 
 Test results should always be included with a pull request that modifies
@@ -231,8 +319,7 @@
 `localtestlist` to list non-tracked tests.  This is automatically read
 by `runtests` and included in the `diff` and `bump` process.
 
-Programmatic Interfaces
------------------------
+## Programmatic Interfaces
 
 Another piece of software can programmatically translate shaders to an AST
 using one of two different interfaces:
@@ -244,7 +331,8 @@
 ### C++ Class Interface (new, preferred)
 
 This interface is in roughly the last 1/3 of `ShaderLang.h`.  It is in the
-glslang namespace and contains the following.
+glslang namespace and contains the following, here with suggested calls
+for generating SPIR-V:
 
 ```cxx
 const char* GetEsslVersionString();
@@ -267,16 +355,25 @@
     Reflection queries
 ```
 
-See `ShaderLang.h` and the usage of it in `StandAlone/StandAlone.cpp` for more
-details.
+For just validating (not generating code), substitute these calls:
 
-### C Functional Interface (orignal)
+```cxx
+    setEnvInput(EShSourceHlsl or EShSourceGlsl, stage,  EShClientNone, 0);
+    setEnvClient(EShClientNone, 0);
+    setEnvTarget(EShTargetNone, 0);
+```
+
+See `ShaderLang.h` and the usage of it in `StandAlone/StandAlone.cpp` for more
+details. There is a block comment giving more detail above the calls for
+`setEnvInput, setEnvClient, and setEnvTarget`.
+
+### C Functional Interface (original)
 
 This interface is in roughly the first 2/3 of `ShaderLang.h`, and referred to
 as the `Sh*()` interface, as all the entry points start `Sh`.
 
 The `Sh*()` interface takes a "compiler" call-back object, which it calls after
-building call back that is passed the AST and can then execute a backend on it.
+building call back that is passed the AST and can then execute a back end on it.
 
 The following is a simplified resulting run-time call stack:
 
@@ -287,8 +384,7 @@
 In practice, `ShCompile()` takes shader strings, default version, and
 warning/error and other options for controlling compilation.
 
-Basic Internal Operation
-------------------------
+## Basic Internal Operation
 
 * Initial lexical analysis is done by the preprocessor in
   `MachineIndependent/Preprocessor`, and then refined by a GLSL scanner
@@ -303,7 +399,7 @@
 * The intermediate representation is very high-level, and represented
   as an in-memory tree.   This serves to lose no information from the
   original program, and to have efficient transfer of the result from
-  parsing to the back-end.  In the AST, constants are propogated and
+  parsing to the back-end.  In the AST, constants are propagated and
   folded, and a very small amount of dead code is eliminated.
 
   To aid linking and reflection, the last top-level branch in the AST
@@ -335,6 +431,8 @@
   - the object does not come from the pool, and you have to do normal
     C++ memory management of what you `new`
 
+* Features can be protected by version/extension/stage/profile:
+  See the comment in `glslang/MachineIndependent/Versions.cpp`.
 
 [cmake]: https://cmake.org/
 [python]: https://www.python.org/
diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt
index 1997e74..9040609 100644
--- a/SPIRV/CMakeLists.txt
+++ b/SPIRV/CMakeLists.txt
@@ -25,28 +25,21 @@
     spvIR.h
     doc.h
     SpvTools.h
-    disassemble.h)
+    disassemble.h
+    GLSL.ext.AMD.h
+    GLSL.ext.NV.h
+    NonSemanticDebugPrintf.h)
 
 set(SPVREMAP_HEADERS
     SPVRemapper.h
     doc.h)
 
-if(ENABLE_AMD_EXTENSIONS)
-    list(APPEND
-         HEADERS
-         GLSL.ext.AMD.h)
-endif(ENABLE_AMD_EXTENSIONS)
-
-if(ENABLE_NV_EXTENSIONS)
-    list(APPEND
-         HEADERS
-         GLSL.ext.NV.h)
-endif(ENABLE_NV_EXTENSIONS)
-
 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})
@@ -67,7 +60,9 @@
         PRIVATE ${spirv-tools_SOURCE_DIR}/source
     )
     target_link_libraries(SPIRV glslang SPIRV-Tools-opt)
-    target_include_directories(SPIRV PUBLIC ../External)
+    target_include_directories(SPIRV PUBLIC
+		$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>
+		$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
 else()
     target_link_libraries(SPIRV glslang)
 endif(ENABLE_OPT)
@@ -80,21 +75,29 @@
 if(ENABLE_GLSLANG_INSTALL)
     if(BUILD_SHARED_LIBS)
         if (ENABLE_SPVREMAPPER)
-            install(TARGETS SPVRemapper
+            install(TARGETS SPVRemapper EXPORT SPVRemapperTargets
                     ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
                     LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
         endif()
-        install(TARGETS SPIRV
+        install(TARGETS SPIRV EXPORT SPIRVTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-                LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+                LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+                RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
     else()
         if (ENABLE_SPVREMAPPER)
-            install(TARGETS SPVRemapper
+            install(TARGETS SPVRemapper EXPORT SPVRemapperTargets
                     ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
         endif()
-        install(TARGETS SPIRV
+        install(TARGETS SPIRV EXPORT SPIRVTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endif()
 
+    if (ENABLE_SPVREMAPPER)
+        install(EXPORT SPVRemapperTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+    endif()
+
+    install(EXPORT SPIRVTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+
     install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/SPIRV/)
+    install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/SPIRV/)
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/SPIRV/GLSL.ext.EXT.h b/SPIRV/GLSL.ext.EXT.h
index e29c055..40164b6 100644
--- a/SPIRV/GLSL.ext.EXT.h
+++ b/SPIRV/GLSL.ext.EXT.h
@@ -34,5 +34,6 @@
 static const char* const E_SPV_EXT_shader_viewport_index_layer  = "SPV_EXT_shader_viewport_index_layer";
 static const char* const E_SPV_EXT_fragment_fully_covered = "SPV_EXT_fragment_fully_covered";
 static const char* const E_SPV_EXT_fragment_invocation_density = "SPV_EXT_fragment_invocation_density";
+static const char* const E_SPV_EXT_demote_to_helper_invocation = "SPV_EXT_demote_to_helper_invocation";
 
 #endif  // #ifndef GLSLextEXT_H
diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h
index 333442b..d783a8f 100644
--- a/SPIRV/GLSL.ext.KHR.h
+++ b/SPIRV/GLSL.ext.KHR.h
@@ -1,5 +1,6 @@
 /*
-** Copyright (c) 2014-2016 The Khronos Group Inc.
+** Copyright (c) 2014-2020 The Khronos Group Inc.
+** Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 **
 ** Permission is hereby granted, free of charge, to any person obtaining a copy
 ** of this software and/or associated documentation files (the "Materials"),
@@ -41,5 +42,10 @@
 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";
+static const char* const E_SPV_KHR_non_semantic_info            = "SPV_KHR_non_semantic_info";
+static const char* const E_SPV_KHR_ray_tracing                  = "SPV_KHR_ray_tracing";
+static const char* const E_SPV_KHR_ray_query                    = "SPV_KHR_ray_query";
 #endif  // #ifndef GLSLextKHR_H
diff --git a/SPIRV/GLSL.ext.NV.h b/SPIRV/GLSL.ext.NV.h
index 102d645..50146da 100644
--- a/SPIRV/GLSL.ext.NV.h
+++ b/SPIRV/GLSL.ext.NV.h
@@ -72,4 +72,10 @@
 //SPV_NV_shading_rate
 const char* const E_SPV_NV_shading_rate = "SPV_NV_shading_rate";
 
+//SPV_NV_cooperative_matrix
+const char* const E_SPV_NV_cooperative_matrix = "SPV_NV_cooperative_matrix";
+
+//SPV_NV_shader_sm_builtins
+const char* const E_SPV_NV_shader_sm_builtins = "SPV_NV_shader_sm_builtins";
+
 #endif  // #ifndef GLSLextNV_H
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index c7cab84..071dad3 100644
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -1,7 +1,8 @@
 //
 // Copyright (C) 2014-2016 LunarG, Inc.
-// Copyright (C) 2015-2018 Google, Inc.
+// Copyright (C) 2015-2020 Google, Inc.
 // Copyright (C) 2017 ARM Limited.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -46,12 +47,9 @@
     #include "GLSL.std.450.h"
     #include "GLSL.ext.KHR.h"
     #include "GLSL.ext.EXT.h"
-#ifdef AMD_EXTENSIONS
     #include "GLSL.ext.AMD.h"
-#endif
-#ifdef NV_EXTENSIONS
     #include "GLSL.ext.NV.h"
-#endif
+    #include "NonSemanticDebugPrintf.h"
 }
 
 // Glslang includes
@@ -91,9 +89,29 @@
 };
 
 struct OpDecorations {
+    public:
+        OpDecorations(spv::Decoration precision, spv::Decoration noContraction, spv::Decoration nonUniform) :
+            precision(precision)
+#ifndef GLSLANG_WEB
+            ,
+            noContraction(noContraction),
+            nonUniform(nonUniform)
+#endif
+        { }
+
     spv::Decoration precision;
-    spv::Decoration noContraction;
-    spv::Decoration nonUniform;
+
+#ifdef GLSLANG_WEB
+        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); }
+    protected:
+        spv::Decoration noContraction;
+        spv::Decoration nonUniform;
+#endif
+
 };
 
 } // namespace
@@ -137,10 +155,10 @@
     spv::ImageFormat TranslateImageFormat(const glslang::TType& type);
     spv::SelectionControlMask TranslateSelectionControl(const glslang::TIntermSelection&) const;
     spv::SelectionControlMask TranslateSwitchControl(const glslang::TIntermSwitch&) const;
-    spv::LoopControlMask TranslateLoopControl(const glslang::TIntermLoop&, unsigned int& dependencyLength) const;
+    spv::LoopControlMask TranslateLoopControl(const glslang::TIntermLoop&, std::vector<unsigned int>& operands) const;
     spv::StorageClass TranslateStorageClass(const glslang::TType&);
     void addIndirectionIndexCapabilities(const glslang::TType& baseType, const glslang::TType& indexType);
-    spv::Id createSpvVariable(const glslang::TIntermSymbol*);
+    spv::Id createSpvVariable(const glslang::TIntermSymbol*, spv::Id forcedType);
     spv::Id getSampledType(const glslang::TSampler&);
     spv::Id getInvertedSwizzleType(const glslang::TIntermTyped&);
     spv::Id createInvertedSwizzle(spv::Decoration precision, const glslang::TIntermTyped&, spv::Id parentResult);
@@ -171,7 +189,8 @@
     void makeGlobalInitializers(const glslang::TIntermSequence&);
     void visitFunctions(const glslang::TIntermSequence&);
     void handleFunctionEntry(const glslang::TIntermAggregate* node);
-    void translateArguments(const glslang::TIntermAggregate& node, std::vector<spv::Id>& arguments);
+    void translateArguments(const glslang::TIntermAggregate& node, std::vector<spv::Id>& arguments,
+        spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags);
     void translateArguments(glslang::TIntermUnary& node, std::vector<spv::Id>& arguments);
     spv::Id createImageTextureFunctionCall(glslang::TIntermOperator* node);
     spv::Id handleUserFunctionCall(const glslang::TIntermAggregate*);
@@ -180,45 +199,38 @@
                                   glslang::TBasicType typeProxy, bool reduceComparison = true);
     spv::Id createBinaryMatrixOperation(spv::Op, OpDecorations&, spv::Id typeId, spv::Id left, spv::Id right);
     spv::Id createUnaryOperation(glslang::TOperator op, OpDecorations&, spv::Id typeId, spv::Id operand,
-                                 glslang::TBasicType typeProxy);
+                                 glslang::TBasicType typeProxy,
+                                 const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags);
     spv::Id createUnaryMatrixOperation(spv::Op op, OpDecorations&, spv::Id typeId, spv::Id operand,
                                        glslang::TBasicType typeProxy);
     spv::Id createConversion(glslang::TOperator op, OpDecorations&, spv::Id destTypeId, spv::Id operand,
                              glslang::TBasicType typeProxy);
     spv::Id createIntWidthConversion(glslang::TOperator op, spv::Id operand, int vectorSize);
     spv::Id makeSmearedConstant(spv::Id constant, int vectorSize);
-    spv::Id createAtomicOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
-    spv::Id createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
-    spv::Id CreateInvocationsVectorOperation(spv::Op op, spv::GroupOperation groupOperation, spv::Id typeId, std::vector<spv::Id>& operands);
-    spv::Id createSubgroupOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
-    spv::Id createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
+    spv::Id createAtomicOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId,
+        std::vector<spv::Id>& operands, glslang::TBasicType typeProxy,
+        const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags);
+    spv::Id createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands,
+        glslang::TBasicType typeProxy);
+    spv::Id CreateInvocationsVectorOperation(spv::Op op, spv::GroupOperation groupOperation,
+        spv::Id typeId, std::vector<spv::Id>& operands);
+    spv::Id createSubgroupOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands,
+        glslang::TBasicType typeProxy);
+    spv::Id createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId,
+        std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
     spv::Id createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId);
     spv::Id getSymbolId(const glslang::TIntermSymbol* node);
-#ifdef NV_EXTENSIONS
     void addMeshNVDecoration(spv::Id id, int member, const glslang::TQualifier & qualifier);
-#endif
     spv::Id createSpvConstant(const glslang::TIntermTyped&);
-    spv::Id createSpvConstantFromConstUnionArray(const glslang::TType& type, const glslang::TConstUnionArray&, int& nextConst, bool specConstant);
+    spv::Id createSpvConstantFromConstUnionArray(const glslang::TType& type, const glslang::TConstUnionArray&,
+        int& nextConst, bool specConstant);
     bool isTrivialLeaf(const glslang::TIntermTyped* node);
     bool isTrivial(const glslang::TIntermTyped* node);
     spv::Id createShortCircuit(glslang::TOperator, glslang::TIntermTyped& left, glslang::TIntermTyped& right);
-#ifdef AMD_EXTENSIONS
     spv::Id getExtBuiltins(const char* name);
-#endif
-    void addPre13Extension(const char* ext)
-    {
-        if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
-            builder.addExtension(ext);
-    }
-
-    unsigned int getBufferReferenceAlignment(const glslang::TType &type) const {
-        if (type.getBasicType() == glslang::EbtReference) {
-            return type.getReferentType()->getQualifier().hasBufferReferenceAlign() ?
-                        (1u << type.getReferentType()->getQualifier().layoutBufferReferenceAlign) : 16u;
-        } else {
-            return 0;
-        }
-    }
+    std::pair<spv::Id, spv::Id> getForcedType(glslang::TBuiltInVariable builtIn, const glslang::TType&);
+    spv::Id translateForcedType(spv::Id object);
+    spv::Id createCompositeConstruct(spv::Id typeId, std::vector<spv::Id> constituents);
 
     glslang::SpvOptions& options;
     spv::Function* shaderEntry;
@@ -232,22 +244,32 @@
     spv::Builder builder;
     bool inEntryPoint;
     bool entryPointTerminated;
-    bool linkageOnly;                  // true when visiting the set of objects in the AST present only for establishing interface, whether or not they were statically used
+    bool linkageOnly;                  // true when visiting the set of objects in the AST present only for
+                                       // establishing interface, whether or not they were statically used
     std::set<spv::Id> iOSet;           // all input/output variables from either static use or declaration of interface
     const glslang::TIntermediate* glslangIntermediate;
+    bool nanMinMaxClamp;               // true if use NMin/NMax/NClamp instead of FMin/FMax/FClamp
     spv::Id stdBuiltins;
+    spv::Id nonSemanticDebugPrintf;
     std::unordered_map<const char*, spv::Id> extBuiltinMap;
 
     std::unordered_map<int, spv::Id> symbolValues;
-    std::unordered_set<int> rValueParameters;  // set of formal function parameters passed as rValues, rather than a pointer
+    std::unordered_set<int> rValueParameters;  // set of formal function parameters passed as rValues,
+                                               // rather than a pointer
     std::unordered_map<std::string, spv::Function*> functionMap;
     std::unordered_map<const glslang::TTypeList*, spv::Id> structMap[glslang::ElpCount][glslang::ElmCount];
     // for mapping glslang block indices to spv indices (e.g., due to hidden members):
-    std::unordered_map<const glslang::TTypeList*, std::vector<int> > memberRemapper;
+    std::unordered_map<int, std::vector<int>> memberRemapper;
+    // for mapping glslang symbol struct to symbol Id
+    std::unordered_map<const glslang::TTypeList*, int> glslangTypeToIdMap;
     std::stack<bool> breakForLoop;  // false means break for switch
     std::unordered_map<std::string, const glslang::TIntermSymbol*> counterOriginator;
     // Map pointee types for EbtReference to their forward pointers
     std::map<const glslang::TType *, spv::Id> forwardPointers;
+    // Type forcing, for when SPIR-V wants a different type than the AST,
+    // requiring local translation to and from SPIR-V type on every access.
+    // Maps <builtin-variable-id -> AST-required-type-id>
+    std::unordered_map<spv::Id, spv::Id> forceType;
 };
 
 //
@@ -257,6 +279,10 @@
 // Translate glslang profile to SPIR-V source language.
 spv::SourceLanguage TranslateSourceLanguage(glslang::EShSource source, EProfile profile)
 {
+#ifdef GLSLANG_WEB
+    return spv::SourceLanguageESSL;
+#endif
+
     switch (source) {
     case glslang::EShSourceGlsl:
         switch (profile) {
@@ -281,18 +307,18 @@
 {
     switch (stage) {
     case EShLangVertex:           return spv::ExecutionModelVertex;
+    case EShLangFragment:         return spv::ExecutionModelFragment;
+    case EShLangCompute:          return spv::ExecutionModelGLCompute;
+#ifndef GLSLANG_WEB
     case EShLangTessControl:      return spv::ExecutionModelTessellationControl;
     case EShLangTessEvaluation:   return spv::ExecutionModelTessellationEvaluation;
     case EShLangGeometry:         return spv::ExecutionModelGeometry;
-    case EShLangFragment:         return spv::ExecutionModelFragment;
-    case EShLangCompute:          return spv::ExecutionModelGLCompute;
-#ifdef NV_EXTENSIONS
-    case EShLangRayGenNV:         return spv::ExecutionModelRayGenerationNV;
-    case EShLangIntersectNV:      return spv::ExecutionModelIntersectionNV;
-    case EShLangAnyHitNV:         return spv::ExecutionModelAnyHitNV;
-    case EShLangClosestHitNV:     return spv::ExecutionModelClosestHitNV;
-    case EShLangMissNV:           return spv::ExecutionModelMissNV;
-    case EShLangCallableNV:       return spv::ExecutionModelCallableNV;
+    case EShLangRayGen:           return spv::ExecutionModelRayGenerationKHR;
+    case EShLangIntersect:        return spv::ExecutionModelIntersectionKHR;
+    case EShLangAnyHit:           return spv::ExecutionModelAnyHitKHR;
+    case EShLangClosestHit:       return spv::ExecutionModelClosestHitKHR;
+    case EShLangMiss:             return spv::ExecutionModelMissKHR;
+    case EShLangCallable:         return spv::ExecutionModelCallableKHR;
     case EShLangTaskNV:           return spv::ExecutionModelTaskNV;
     case EShLangMeshNV:           return spv::ExecutionModelMeshNV;
 #endif
@@ -345,12 +371,12 @@
         case glslang::EvqBuffer:       return useStorageBuffer ? spv::DecorationBlock : spv::DecorationBufferBlock;
         case glslang::EvqVaryingIn:    return spv::DecorationBlock;
         case glslang::EvqVaryingOut:   return spv::DecorationBlock;
-#ifdef NV_EXTENSIONS
-        case glslang::EvqPayloadNV:    return spv::DecorationBlock;
-        case glslang::EvqPayloadInNV:  return spv::DecorationBlock;
-        case glslang::EvqHitAttrNV:    return spv::DecorationBlock;
-        case glslang::EvqCallableDataNV:   return spv::DecorationBlock;
-        case glslang::EvqCallableDataInNV: return spv::DecorationBlock;
+#ifndef GLSLANG_WEB
+        case glslang::EvqPayload:      return spv::DecorationBlock;
+        case glslang::EvqPayloadIn:    return spv::DecorationBlock;
+        case glslang::EvqHitAttr:      return spv::DecorationBlock;
+        case glslang::EvqCallableData:   return spv::DecorationBlock;
+        case glslang::EvqCallableDataIn: return spv::DecorationBlock;
 #endif
         default:
             assert(0);
@@ -362,21 +388,22 @@
 }
 
 // Translate glslang type to SPIR-V memory decorations.
-void TranslateMemoryDecoration(const glslang::TQualifier& qualifier, std::vector<spv::Decoration>& memory, bool useVulkanMemoryModel)
+void TranslateMemoryDecoration(const glslang::TQualifier& qualifier, std::vector<spv::Decoration>& memory,
+    bool useVulkanMemoryModel)
 {
     if (!useVulkanMemoryModel) {
-        if (qualifier.coherent)
+        if (qualifier.isCoherent())
             memory.push_back(spv::DecorationCoherent);
-        if (qualifier.volatil) {
+        if (qualifier.isVolatile()) {
             memory.push_back(spv::DecorationVolatile);
             memory.push_back(spv::DecorationCoherent);
         }
     }
-    if (qualifier.restrict)
+    if (qualifier.isRestrict())
         memory.push_back(spv::DecorationRestrict);
-    if (qualifier.readonly)
+    if (qualifier.isReadOnly())
         memory.push_back(spv::DecorationNonWritable);
-    if (qualifier.writeonly)
+    if (qualifier.isWriteOnly())
        memory.push_back(spv::DecorationNonReadable);
 }
 
@@ -420,12 +447,12 @@
                     assert(type.getQualifier().layoutPacking == glslang::ElpNone);
                 }
                 return spv::DecorationMax;
-#ifdef NV_EXTENSIONS
-            case glslang::EvqPayloadNV:
-            case glslang::EvqPayloadInNV:
-            case glslang::EvqHitAttrNV:
-            case glslang::EvqCallableDataNV:
-            case glslang::EvqCallableDataInNV:
+#ifndef GLSLANG_WEB
+            case glslang::EvqPayload:
+            case glslang::EvqPayloadIn:
+            case glslang::EvqHitAttr:
+            case glslang::EvqCallableData:
+            case glslang::EvqCallableDataIn:
                 return spv::DecorationMax;
 #endif
             default:
@@ -444,16 +471,14 @@
     if (qualifier.smooth)
         // Smooth decoration doesn't exist in SPIR-V 1.0
         return spv::DecorationMax;
-    else if (qualifier.nopersp)
+    else if (qualifier.isNonPerspective())
         return spv::DecorationNoPerspective;
     else if (qualifier.flat)
         return spv::DecorationFlat;
-#ifdef AMD_EXTENSIONS
-    else if (qualifier.explicitInterp) {
+    else if (qualifier.isExplicitInterpolation()) {
         builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
         return spv::DecorationExplicitInterpAMD;
     }
-#endif
     else
         return spv::DecorationMax;
 }
@@ -463,15 +488,18 @@
 // should be applied.
 spv::Decoration TGlslangToSpvTraverser::TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier)
 {
-    if (qualifier.patch)
-        return spv::DecorationPatch;
-    else if (qualifier.centroid)
+    if (qualifier.centroid)
         return spv::DecorationCentroid;
+#ifndef GLSLANG_WEB
+    else if (qualifier.patch)
+        return spv::DecorationPatch;
     else if (qualifier.sample) {
         builder.addCapability(spv::CapabilitySampleRateShading);
         return spv::DecorationSample;
-    } else
-        return spv::DecorationMax;
+    }
+#endif
+
+    return spv::DecorationMax;
 }
 
 // If glslang type is invariant, return SPIR-V invariant decoration.
@@ -486,38 +514,41 @@
 // If glslang type is noContraction, return SPIR-V NoContraction decoration.
 spv::Decoration TranslateNoContractionDecoration(const glslang::TQualifier& qualifier)
 {
-    if (qualifier.noContraction)
+#ifndef GLSLANG_WEB
+    if (qualifier.isNoContraction())
         return spv::DecorationNoContraction;
     else
+#endif
         return spv::DecorationMax;
 }
 
 // If glslang type is nonUniform, return SPIR-V NonUniform decoration.
 spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration(const glslang::TQualifier& qualifier)
 {
+#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
+#endif
         return spv::DecorationMax;
 }
 
-spv::MemoryAccessMask TGlslangToSpvTraverser::TranslateMemoryAccess(const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
+spv::MemoryAccessMask TGlslangToSpvTraverser::TranslateMemoryAccess(
+    const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
 {
-    if (!glslangIntermediate->usingVulkanMemoryModel() || coherentFlags.isImage) {
-        return spv::MemoryAccessMaskNone;
-    }
     spv::MemoryAccessMask mask = spv::MemoryAccessMaskNone;
-    if (coherentFlags.volatil ||
-        coherentFlags.coherent ||
-        coherentFlags.devicecoherent ||
-        coherentFlags.queuefamilycoherent ||
-        coherentFlags.workgroupcoherent ||
-        coherentFlags.subgroupcoherent) {
+
+#ifndef GLSLANG_WEB
+    if (!glslangIntermediate->usingVulkanMemoryModel() || coherentFlags.isImage)
+        return mask;
+
+    if (coherentFlags.isVolatile() || coherentFlags.anyCoherent()) {
         mask = mask | spv::MemoryAccessMakePointerAvailableKHRMask |
                       spv::MemoryAccessMakePointerVisibleKHRMask;
     }
+
     if (coherentFlags.nonprivate) {
         mask = mask | spv::MemoryAccessNonPrivatePointerKHRMask;
     }
@@ -527,21 +558,22 @@
     if (mask != spv::MemoryAccessMaskNone) {
         builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
     }
+#endif
+
     return mask;
 }
 
-spv::ImageOperandsMask TGlslangToSpvTraverser::TranslateImageOperands(const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
+spv::ImageOperandsMask TGlslangToSpvTraverser::TranslateImageOperands(
+    const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
 {
-    if (!glslangIntermediate->usingVulkanMemoryModel()) {
-        return spv::ImageOperandsMaskNone;
-    }
     spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone;
+
+#ifndef GLSLANG_WEB
+    if (!glslangIntermediate->usingVulkanMemoryModel())
+        return mask;
+
     if (coherentFlags.volatil ||
-        coherentFlags.coherent ||
-        coherentFlags.devicecoherent ||
-        coherentFlags.queuefamilycoherent ||
-        coherentFlags.workgroupcoherent ||
-        coherentFlags.subgroupcoherent) {
+        coherentFlags.anyCoherent()) {
         mask = mask | spv::ImageOperandsMakeTexelAvailableKHRMask |
                       spv::ImageOperandsMakeTexelVisibleKHRMask;
     }
@@ -554,12 +586,15 @@
     if (mask != spv::ImageOperandsMaskNone) {
         builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
     }
+#endif
+
     return mask;
 }
 
 spv::Builder::AccessChain::CoherentFlags TGlslangToSpvTraverser::TranslateCoherent(const glslang::TType& type)
 {
-    spv::Builder::AccessChain::CoherentFlags flags;
+    spv::Builder::AccessChain::CoherentFlags flags = {};
+#ifndef GLSLANG_WEB
     flags.coherent = type.getQualifier().coherent;
     flags.devicecoherent = type.getQualifier().devicecoherent;
     flags.queuefamilycoherent = type.getQualifier().queuefamilycoherent;
@@ -567,22 +602,24 @@
     flags.workgroupcoherent = type.getQualifier().workgroupcoherent ||
                               type.getQualifier().storage == glslang::EvqShared;
     flags.subgroupcoherent = type.getQualifier().subgroupcoherent;
+    flags.shadercallcoherent = type.getQualifier().shadercallcoherent;
+    flags.volatil = type.getQualifier().volatil;
     // *coherent variables are implicitly nonprivate in GLSL
     flags.nonprivate = type.getQualifier().nonprivate ||
-                       flags.subgroupcoherent ||
-                       flags.workgroupcoherent ||
-                       flags.queuefamilycoherent ||
-                       flags.devicecoherent ||
-                       flags.coherent;
-    flags.volatil = type.getQualifier().volatil;
+                       flags.anyCoherent() ||
+                       flags.volatil;
     flags.isImage = type.getBasicType() == glslang::EbtSampler;
+#endif
     return flags;
 }
 
-spv::Scope TGlslangToSpvTraverser::TranslateMemoryScope(const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
+spv::Scope TGlslangToSpvTraverser::TranslateMemoryScope(
+    const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
 {
-    spv::Scope scope;
-    if (coherentFlags.coherent) {
+    spv::Scope scope = spv::ScopeMax;
+
+#ifndef GLSLANG_WEB
+    if (coherentFlags.volatil || coherentFlags.coherent) {
         // coherent defaults to Device scope in the old model, QueueFamilyKHR scope in the new model
         scope = glslangIntermediate->usingVulkanMemoryModel() ? spv::ScopeQueueFamilyKHR : spv::ScopeDevice;
     } else if (coherentFlags.devicecoherent) {
@@ -593,12 +630,14 @@
         scope = spv::ScopeWorkgroup;
     } else if (coherentFlags.subgroupcoherent) {
         scope = spv::ScopeSubgroup;
-    } else {
-        scope = spv::ScopeMax;
+    } else if (coherentFlags.shadercallcoherent) {
+        scope = spv::ScopeShaderCallKHR;
     }
     if (glslangIntermediate->usingVulkanMemoryModel() && scope == spv::ScopeDevice) {
         builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
     }
+#endif
+
     return scope;
 }
 
@@ -607,10 +646,12 @@
 // is generated only when using the variable in an executable instruction, but not when
 // just declaring a struct member variable with it.  This is true for PointSize,
 // ClipDistance, and CullDistance.
-spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltInVariable builtIn, bool memberDeclaration)
+spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltInVariable builtIn,
+    bool memberDeclaration)
 {
     switch (builtIn) {
     case glslang::EbvPointSize:
+#ifndef GLSLANG_WEB
         // Defer adding the capability until the built-in is actually used.
         if (! memberDeclaration) {
             switch (glslangIntermediate->getStage()) {
@@ -625,8 +666,28 @@
                 break;
             }
         }
+#endif
         return spv::BuiltInPointSize;
 
+    case glslang::EbvPosition:             return spv::BuiltInPosition;
+    case glslang::EbvVertexId:             return spv::BuiltInVertexId;
+    case glslang::EbvInstanceId:           return spv::BuiltInInstanceId;
+    case glslang::EbvVertexIndex:          return spv::BuiltInVertexIndex;
+    case glslang::EbvInstanceIndex:        return spv::BuiltInInstanceIndex;
+
+    case glslang::EbvFragCoord:            return spv::BuiltInFragCoord;
+    case glslang::EbvPointCoord:           return spv::BuiltInPointCoord;
+    case glslang::EbvFace:                 return spv::BuiltInFrontFacing;
+    case glslang::EbvFragDepth:            return spv::BuiltInFragDepth;
+
+    case glslang::EbvNumWorkGroups:        return spv::BuiltInNumWorkgroups;
+    case glslang::EbvWorkGroupSize:        return spv::BuiltInWorkgroupSize;
+    case glslang::EbvWorkGroupId:          return spv::BuiltInWorkgroupId;
+    case glslang::EbvLocalInvocationId:    return spv::BuiltInLocalInvocationId;
+    case glslang::EbvLocalInvocationIndex: return spv::BuiltInLocalInvocationIndex;
+    case glslang::EbvGlobalInvocationId:   return spv::BuiltInGlobalInvocationId;
+
+#ifndef GLSLANG_WEB
     // These *Distance capabilities logically belong here, but if the member is declared and
     // then never used, consumers of SPIR-V prefer the capability not be declared.
     // They are now generated when used, rather than here when declared.
@@ -649,7 +710,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;
@@ -666,39 +727,31 @@
         return spv::BuiltInSampleMask;
 
     case glslang::EbvLayer:
-#ifdef NV_EXTENSIONS
         if (glslangIntermediate->getStage() == EShLangMeshNV) {
             return spv::BuiltInLayer;
         }
-#endif
         builder.addCapability(spv::CapabilityGeometry);
         if (glslangIntermediate->getStage() == EShLangVertex ||
             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::EbvPosition:             return spv::BuiltInPosition;
-    case glslang::EbvVertexId:             return spv::BuiltInVertexId;
-    case glslang::EbvInstanceId:           return spv::BuiltInInstanceId;
-    case glslang::EbvVertexIndex:          return spv::BuiltInVertexIndex;
-    case glslang::EbvInstanceIndex:        return spv::BuiltInInstanceIndex;
-
     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;
 
@@ -717,17 +770,7 @@
     case glslang::EbvTessLevelOuter:       return spv::BuiltInTessLevelOuter;
     case glslang::EbvTessCoord:            return spv::BuiltInTessCoord;
     case glslang::EbvPatchVertices:        return spv::BuiltInPatchVertices;
-    case glslang::EbvFragCoord:            return spv::BuiltInFragCoord;
-    case glslang::EbvPointCoord:           return spv::BuiltInPointCoord;
-    case glslang::EbvFace:                 return spv::BuiltInFrontFacing;
-    case glslang::EbvFragDepth:            return spv::BuiltInFragDepth;
     case glslang::EbvHelperInvocation:     return spv::BuiltInHelperInvocation;
-    case glslang::EbvNumWorkGroups:        return spv::BuiltInNumWorkgroups;
-    case glslang::EbvWorkGroupSize:        return spv::BuiltInWorkgroupSize;
-    case glslang::EbvWorkGroupId:          return spv::BuiltInWorkgroupId;
-    case glslang::EbvLocalInvocationId:    return spv::BuiltInLocalInvocationId;
-    case glslang::EbvLocalInvocationIndex: return spv::BuiltInLocalInvocationIndex;
-    case glslang::EbvGlobalInvocationId:   return spv::BuiltInGlobalInvocationId;
 
     case glslang::EbvSubGroupSize:
         builder.addExtension(spv::E_SPV_KHR_shader_ballot);
@@ -742,27 +785,27 @@
     case glslang::EbvSubGroupEqMask:
         builder.addExtension(spv::E_SPV_KHR_shader_ballot);
         builder.addCapability(spv::CapabilitySubgroupBallotKHR);
-        return spv::BuiltInSubgroupEqMaskKHR;
+        return spv::BuiltInSubgroupEqMask;
 
     case glslang::EbvSubGroupGeMask:
         builder.addExtension(spv::E_SPV_KHR_shader_ballot);
         builder.addCapability(spv::CapabilitySubgroupBallotKHR);
-        return spv::BuiltInSubgroupGeMaskKHR;
+        return spv::BuiltInSubgroupGeMask;
 
     case glslang::EbvSubGroupGtMask:
         builder.addExtension(spv::E_SPV_KHR_shader_ballot);
         builder.addCapability(spv::CapabilitySubgroupBallotKHR);
-        return spv::BuiltInSubgroupGtMaskKHR;
+        return spv::BuiltInSubgroupGtMask;
 
     case glslang::EbvSubGroupLeMask:
         builder.addExtension(spv::E_SPV_KHR_shader_ballot);
         builder.addCapability(spv::CapabilitySubgroupBallotKHR);
-        return spv::BuiltInSubgroupLeMaskKHR;
+        return spv::BuiltInSubgroupLeMask;
 
     case glslang::EbvSubGroupLtMask:
         builder.addExtension(spv::E_SPV_KHR_shader_ballot);
         builder.addCapability(spv::CapabilitySubgroupBallotKHR);
-        return spv::BuiltInSubgroupLtMaskKHR;
+        return spv::BuiltInSubgroupLtMask;
 
     case glslang::EbvNumSubgroups:
         builder.addCapability(spv::CapabilityGroupNonUniform);
@@ -804,7 +847,7 @@
         builder.addCapability(spv::CapabilityGroupNonUniform);
         builder.addCapability(spv::CapabilityGroupNonUniformBallot);
         return spv::BuiltInSubgroupLtMask;
-#ifdef AMD_EXTENSIONS
+
     case glslang::EbvBaryCoordNoPersp:
         builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
         return spv::BuiltInBaryCoordNoPerspAMD;
@@ -832,15 +875,14 @@
     case glslang::EbvBaryCoordPullModel:
         builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
         return spv::BuiltInBaryCoordPullModelAMD;
-#endif
 
     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;
 
@@ -854,7 +896,6 @@
         builder.addCapability(spv::CapabilityFragmentDensityEXT);
         return spv::BuiltInFragInvocationCountEXT;
 
-#ifdef NV_EXTENSIONS
     case glslang::EbvViewportMaskNV:
         if (!memberDeclaration) {
             builder.addExtension(spv::E_SPV_NV_viewport_array2);
@@ -898,35 +939,41 @@
         builder.addCapability(spv::CapabilityShadingRateNV);
         return spv::BuiltInInvocationsPerPixelNV;
 
-    // raytracing
-    case glslang::EbvLaunchIdNV:
-        return spv::BuiltInLaunchIdNV;
-    case glslang::EbvLaunchSizeNV:
-        return spv::BuiltInLaunchSizeNV;
-    case glslang::EbvWorldRayOriginNV:
-        return spv::BuiltInWorldRayOriginNV;
-    case glslang::EbvWorldRayDirectionNV:
-        return spv::BuiltInWorldRayDirectionNV;
-    case glslang::EbvObjectRayOriginNV:
-        return spv::BuiltInObjectRayOriginNV;
-    case glslang::EbvObjectRayDirectionNV:
-        return spv::BuiltInObjectRayDirectionNV;
-    case glslang::EbvRayTminNV:
-        return spv::BuiltInRayTminNV;
-    case glslang::EbvRayTmaxNV:
-        return spv::BuiltInRayTmaxNV;
-    case glslang::EbvInstanceCustomIndexNV:
-        return spv::BuiltInInstanceCustomIndexNV;
-    case glslang::EbvHitTNV:
-        return spv::BuiltInHitTNV;
-    case glslang::EbvHitKindNV:
-        return spv::BuiltInHitKindNV;
-    case glslang::EbvObjectToWorldNV:
-        return spv::BuiltInObjectToWorldNV;
-    case glslang::EbvWorldToObjectNV:
-        return spv::BuiltInWorldToObjectNV;
-    case glslang::EbvIncomingRayFlagsNV:
-        return spv::BuiltInIncomingRayFlagsNV;
+    // ray tracing
+    case glslang::EbvLaunchId:
+        return spv::BuiltInLaunchIdKHR;
+    case glslang::EbvLaunchSize:
+        return spv::BuiltInLaunchSizeKHR;
+    case glslang::EbvWorldRayOrigin:
+        return spv::BuiltInWorldRayOriginKHR;
+    case glslang::EbvWorldRayDirection:
+        return spv::BuiltInWorldRayDirectionKHR;
+    case glslang::EbvObjectRayOrigin:
+        return spv::BuiltInObjectRayOriginKHR;
+    case glslang::EbvObjectRayDirection:
+        return spv::BuiltInObjectRayDirectionKHR;
+    case glslang::EbvRayTmin:
+        return spv::BuiltInRayTminKHR;
+    case glslang::EbvRayTmax:
+        return spv::BuiltInRayTmaxKHR;
+    case glslang::EbvInstanceCustomIndex:
+        return spv::BuiltInInstanceCustomIndexKHR;
+    case glslang::EbvHitT:
+        return spv::BuiltInHitTKHR;
+    case glslang::EbvHitKind:
+        return spv::BuiltInHitKindKHR;
+    case glslang::EbvObjectToWorld:
+    case glslang::EbvObjectToWorld3x4:
+        return spv::BuiltInObjectToWorldKHR;
+    case glslang::EbvWorldToObject:
+    case glslang::EbvWorldToObject3x4:
+        return spv::BuiltInWorldToObjectKHR;
+    case glslang::EbvIncomingRayFlags:
+        return spv::BuiltInIncomingRayFlagsKHR;
+    case glslang::EbvGeometryIndex:
+        return spv::BuiltInRayGeometryIndexKHR;
+
+    // barycentrics
     case glslang::EbvBaryCoordNV:
         builder.addExtension(spv::E_SPV_NV_fragment_shader_barycentric);
         builder.addCapability(spv::CapabilityFragmentBarycentricNV);
@@ -935,23 +982,44 @@
         builder.addExtension(spv::E_SPV_NV_fragment_shader_barycentric);
         builder.addCapability(spv::CapabilityFragmentBarycentricNV);
         return spv::BuiltInBaryCoordNoPerspNV;
-     case glslang::EbvTaskCountNV:
+
+    // mesh shaders
+    case glslang::EbvTaskCountNV:
         return spv::BuiltInTaskCountNV;
-     case glslang::EbvPrimitiveCountNV:
+    case glslang::EbvPrimitiveCountNV:
         return spv::BuiltInPrimitiveCountNV;
-     case glslang::EbvPrimitiveIndicesNV:
+    case glslang::EbvPrimitiveIndicesNV:
         return spv::BuiltInPrimitiveIndicesNV;
-     case glslang::EbvClipDistancePerViewNV:
+    case glslang::EbvClipDistancePerViewNV:
         return spv::BuiltInClipDistancePerViewNV;
-     case glslang::EbvCullDistancePerViewNV:
+    case glslang::EbvCullDistancePerViewNV:
         return spv::BuiltInCullDistancePerViewNV;
-     case glslang::EbvLayerPerViewNV:
+    case glslang::EbvLayerPerViewNV:
         return spv::BuiltInLayerPerViewNV;
-     case glslang::EbvMeshViewCountNV:
+    case glslang::EbvMeshViewCountNV:
         return spv::BuiltInMeshViewCountNV;
-     case glslang::EbvMeshViewIndicesNV:
+    case glslang::EbvMeshViewIndicesNV:
         return spv::BuiltInMeshViewIndicesNV;
-#endif 
+
+    // sm builtins
+    case glslang::EbvWarpsPerSM:
+        builder.addExtension(spv::E_SPV_NV_shader_sm_builtins);
+        builder.addCapability(spv::CapabilityShaderSMBuiltinsNV);
+        return spv::BuiltInWarpsPerSMNV;
+    case glslang::EbvSMCount:
+        builder.addExtension(spv::E_SPV_NV_shader_sm_builtins);
+        builder.addCapability(spv::CapabilityShaderSMBuiltinsNV);
+        return spv::BuiltInSMCountNV;
+    case glslang::EbvWarpID:
+        builder.addExtension(spv::E_SPV_NV_shader_sm_builtins);
+        builder.addCapability(spv::CapabilityShaderSMBuiltinsNV);
+        return spv::BuiltInWarpIDNV;
+    case glslang::EbvSMID:
+        builder.addExtension(spv::E_SPV_NV_shader_sm_builtins);
+        builder.addCapability(spv::CapabilityShaderSMBuiltinsNV);
+        return spv::BuiltInSMIDNV;
+#endif
+
     default:
         return spv::BuiltInMax;
     }
@@ -962,8 +1030,12 @@
 {
     assert(type.getBasicType() == glslang::EbtSampler);
 
+#ifdef GLSLANG_WEB
+    return spv::ImageFormatUnknown;
+#endif
+
     // Check for capabilities
-    switch (type.getQualifier().layoutFormat) {
+    switch (type.getQualifier().getFormat()) {
     case glslang::ElfRg32f:
     case glslang::ElfRg16f:
     case glslang::ElfR11fG11fB10f:
@@ -1000,7 +1072,7 @@
     }
 
     // do the translation
-    switch (type.getQualifier().layoutFormat) {
+    switch (type.getQualifier().getFormat()) {
     case glslang::ElfNone:          return spv::ImageFormatUnknown;
     case glslang::ElfRgba32f:       return spv::ImageFormatRgba32f;
     case glslang::ElfRgba16f:       return spv::ImageFormatRgba16f;
@@ -1045,7 +1117,8 @@
     }
 }
 
-spv::SelectionControlMask TGlslangToSpvTraverser::TranslateSelectionControl(const glslang::TIntermSelection& selectionNode) const
+spv::SelectionControlMask TGlslangToSpvTraverser::TranslateSelectionControl(
+    const glslang::TIntermSelection& selectionNode) const
 {
     if (selectionNode.getFlatten())
         return spv::SelectionControlFlattenMask;
@@ -1054,7 +1127,8 @@
     return spv::SelectionControlMaskNone;
 }
 
-spv::SelectionControlMask TGlslangToSpvTraverser::TranslateSwitchControl(const glslang::TIntermSwitch& switchNode) const
+spv::SelectionControlMask TGlslangToSpvTraverser::TranslateSwitchControl(const glslang::TIntermSwitch& switchNode)
+    const
 {
     if (switchNode.getFlatten())
         return spv::SelectionControlFlattenMask;
@@ -1065,7 +1139,7 @@
 
 // return a non-0 dependency if the dependency argument must be set
 spv::LoopControlMask TGlslangToSpvTraverser::TranslateLoopControl(const glslang::TIntermLoop& loopNode,
-    unsigned int& dependencyLength) const
+    std::vector<unsigned int>& operands) const
 {
     spv::LoopControlMask control = spv::LoopControlMaskNone;
 
@@ -1077,7 +1151,29 @@
         control = control | spv::LoopControlDependencyInfiniteMask;
     else if (loopNode.getLoopDependency() > 0) {
         control = control | spv::LoopControlDependencyLengthMask;
-        dependencyLength = loopNode.getLoopDependency();
+        operands.push_back((unsigned int)loopNode.getLoopDependency());
+    }
+    if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4) {
+        if (loopNode.getMinIterations() > 0) {
+            control = control | spv::LoopControlMinIterationsMask;
+            operands.push_back(loopNode.getMinIterations());
+        }
+        if (loopNode.getMaxIterations() < glslang::TIntermLoop::iterationsInfinite) {
+            control = control | spv::LoopControlMaxIterationsMask;
+            operands.push_back(loopNode.getMaxIterations());
+        }
+        if (loopNode.getIterationMultiple() > 1) {
+            control = control | spv::LoopControlIterationMultipleMask;
+            operands.push_back(loopNode.getIterationMultiple());
+        }
+        if (loopNode.getPeelCount() > 0) {
+            control = control | spv::LoopControlPeelCountMask;
+            operands.push_back(loopNode.getPeelCount());
+        }
+        if (loopNode.getPartialCount() > 0) {
+            control = control | spv::LoopControlPartialCountMask;
+            operands.push_back(loopNode.getPartialCount());
+        }
     }
 
     return control;
@@ -1086,33 +1182,33 @@
 // Translate glslang type to SPIR-V storage class.
 spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::TType& type)
 {
+    if (type.getBasicType() == glslang::EbtRayQuery)
+        return spv::StorageClassFunction;
     if (type.getQualifier().isPipeInput())
         return spv::StorageClassInput;
     if (type.getQualifier().isPipeOutput())
         return spv::StorageClassOutput;
 
     if (glslangIntermediate->getSource() != glslang::EShSourceHlsl ||
-        type.getQualifier().storage == glslang::EvqUniform) {
-        if (type.getBasicType() == glslang::EbtAtomicUint)
+            type.getQualifier().storage == glslang::EvqUniform) {
+        if (type.isAtomic())
             return spv::StorageClassAtomicCounter;
         if (type.containsOpaque())
             return spv::StorageClassUniformConstant;
     }
 
-#ifdef NV_EXTENSIONS
     if (type.getQualifier().isUniformOrBuffer() &&
-        type.getQualifier().layoutShaderRecordNV) {
-        return spv::StorageClassShaderRecordBufferNV;
+        type.getQualifier().isShaderRecord()) {
+        return spv::StorageClassShaderRecordBufferKHR;
     }
-#endif
 
     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;
     }
 
     if (type.getQualifier().isUniformOrBuffer()) {
-        if (type.getQualifier().layoutPushConstant)
+        if (type.getQualifier().isPushConstant())
             return spv::StorageClassPushConstant;
         if (type.getBasicType() == glslang::EbtBlock)
             return spv::StorageClassUniform;
@@ -1120,16 +1216,16 @@
     }
 
     switch (type.getQualifier().storage) {
-    case glslang::EvqShared:        return spv::StorageClassWorkgroup;
     case glslang::EvqGlobal:        return spv::StorageClassPrivate;
     case glslang::EvqConstReadOnly: return spv::StorageClassFunction;
     case glslang::EvqTemporary:     return spv::StorageClassFunction;
-#ifdef NV_EXTENSIONS
-    case glslang::EvqPayloadNV:        return spv::StorageClassRayPayloadNV;
-    case glslang::EvqPayloadInNV:      return spv::StorageClassIncomingRayPayloadNV;
-    case glslang::EvqHitAttrNV:        return spv::StorageClassHitAttributeNV;
-    case glslang::EvqCallableDataNV:   return spv::StorageClassCallableDataNV;
-    case glslang::EvqCallableDataInNV: return spv::StorageClassIncomingCallableDataNV;
+    case glslang::EvqShared:           return spv::StorageClassWorkgroup;
+#ifndef GLSLANG_WEB
+    case glslang::EvqPayload:        return spv::StorageClassRayPayloadKHR;
+    case glslang::EvqPayloadIn:      return spv::StorageClassIncomingRayPayloadKHR;
+    case glslang::EvqHitAttr:        return spv::StorageClassHitAttributeKHR;
+    case glslang::EvqCallableData:   return spv::StorageClassCallableDataKHR;
+    case glslang::EvqCallableDataIn: return spv::StorageClassIncomingCallableDataKHR;
 #endif
     default:
         assert(0);
@@ -1143,15 +1239,16 @@
 void TGlslangToSpvTraverser::addIndirectionIndexCapabilities(const glslang::TType& baseType,
                                                              const glslang::TType& indexType)
 {
+#ifndef GLSLANG_WEB
     if (indexType.getQualifier().isNonUniform()) {
         // deal with an asserted non-uniform index
         // SPV_EXT_descriptor_indexing already added in TranslateNonUniformDecoration
         if (baseType.getBasicType() == glslang::EbtSampler) {
             if (baseType.getQualifier().hasAttachment())
                 builder.addCapability(spv::CapabilityInputAttachmentArrayNonUniformIndexingEXT);
-            else if (baseType.isImage() && baseType.getSampler().dim == glslang::EsdBuffer)
+            else if (baseType.isImage() && baseType.getSampler().isBuffer())
                 builder.addCapability(spv::CapabilityStorageTexelBufferArrayNonUniformIndexingEXT);
-            else if (baseType.isTexture() && baseType.getSampler().dim == glslang::EsdBuffer)
+            else if (baseType.isTexture() && baseType.getSampler().isBuffer())
                 builder.addCapability(spv::CapabilityUniformTexelBufferArrayNonUniformIndexingEXT);
             else if (baseType.isImage())
                 builder.addCapability(spv::CapabilityStorageImageArrayNonUniformIndexingEXT);
@@ -1167,17 +1264,18 @@
         // 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().dim == glslang::EsdBuffer) {
-                builder.addExtension("SPV_EXT_descriptor_indexing");
+            } else if (baseType.isImage() && baseType.getSampler().isBuffer()) {
+                builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
                 builder.addCapability(spv::CapabilityStorageTexelBufferArrayDynamicIndexingEXT);
-            } else if (baseType.isTexture() && baseType.getSampler().dim == glslang::EsdBuffer) {
-                builder.addExtension("SPV_EXT_descriptor_indexing");
+            } else if (baseType.isTexture() && baseType.getSampler().isBuffer()) {
+                builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
                 builder.addCapability(spv::CapabilityUniformTexelBufferArrayDynamicIndexingEXT);
             }
         }
     }
+#endif
 }
 
 // Return whether or not the given type is something that should be tied to a
@@ -1187,10 +1285,8 @@
     // uniform and buffer blocks are included, unless it is a push_constant
     if (type.getBasicType() == glslang::EbtBlock)
         return type.getQualifier().isUniformOrBuffer() &&
-#ifdef NV_EXTENSIONS
-        ! type.getQualifier().layoutShaderRecordNV &&
-#endif
-        ! type.getQualifier().layoutPushConstant;
+        ! type.getQualifier().isShaderRecord() &&
+        ! type.getQualifier().isPushConstant();
 
     // non block...
     // basically samplerXXX/subpass/sampler/texture are all included
@@ -1210,16 +1306,21 @@
 
     if (parent.invariant)
         child.invariant = true;
-    if (parent.nopersp)
-        child.nopersp = true;
-#ifdef AMD_EXTENSIONS
-    if (parent.explicitInterp)
-        child.explicitInterp = true;
-#endif
     if (parent.flat)
         child.flat = true;
     if (parent.centroid)
         child.centroid = true;
+#ifndef GLSLANG_WEB
+    if (parent.nopersp)
+        child.nopersp = true;
+    if (parent.explicitInterp)
+        child.explicitInterp = true;
+    if (parent.perPrimitiveNV)
+        child.perPrimitiveNV = true;
+    if (parent.perViewNV)
+        child.perViewNV = true;
+    if (parent.perTaskNV)
+        child.perTaskNV = true;
     if (parent.patch)
         child.patch = true;
     if (parent.sample)
@@ -1234,6 +1335,8 @@
         child.workgroupcoherent = true;
     if (parent.subgroupcoherent)
         child.subgroupcoherent = true;
+    if (parent.shadercallcoherent)
+        child.shadercallcoherent = true;
     if (parent.nonprivate)
         child.nonprivate = true;
     if (parent.volatil)
@@ -1244,13 +1347,6 @@
         child.readonly = true;
     if (parent.writeonly)
         child.writeonly = true;
-#ifdef NV_EXTENSIONS
-    if (parent.perPrimitiveNV)
-        child.perPrimitiveNV = true;
-    if (parent.perViewNV)
-        child.perViewNV = true;
-    if (parent.perTaskNV)
-        child.perTaskNV = true;
 #endif
 }
 
@@ -1271,15 +1367,18 @@
 // Implement the TGlslangToSpvTraverser class.
 //
 
-TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, const glslang::TIntermediate* glslangIntermediate,
-                                               spv::SpvBuildLogger* buildLogger, glslang::SpvOptions& options)
-    : TIntermTraverser(true, false, true),
-      options(options),
-      shaderEntry(nullptr), currentFunction(nullptr),
-      sequenceDepth(0), logger(buildLogger),
-      builder(spvVersion, (glslang::GetKhronosToolId() << 16) | glslang::GetSpirvGeneratorVersion(), logger),
-      inEntryPoint(false), entryPointTerminated(false), linkageOnly(false),
-      glslangIntermediate(glslangIntermediate)
+TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
+    const glslang::TIntermediate* glslangIntermediate,
+    spv::SpvBuildLogger* buildLogger, glslang::SpvOptions& options) :
+        TIntermTraverser(true, false, true),
+        options(options),
+        shaderEntry(nullptr), currentFunction(nullptr),
+        sequenceDepth(0), logger(buildLogger),
+        builder(spvVersion, (glslang::GetKhronosToolId() << 16) | glslang::GetSpirvGeneratorVersion(), logger),
+        inEntryPoint(false), entryPointTerminated(false), linkageOnly(false),
+        glslangIntermediate(glslangIntermediate),
+        nanMinMaxClamp(glslangIntermediate->getNanMinMaxClamp()),
+        nonSemanticDebugPrintf(0)
 {
     spv::ExecutionModel executionModel = TranslateExecutionModel(glslangIntermediate->getStage());
 
@@ -1320,16 +1419,20 @@
 
     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);
 
+    if (glslangIntermediate->usingVariablePointers()) {
+        builder.addCapability(spv::CapabilityVariablePointers);
+    }
+
     shaderEntry = builder.makeEntryPoint(glslangIntermediate->getEntryPointName().c_str());
     entryPoint = builder.addEntryPoint(executionModel, shaderEntry, glslangIntermediate->getEntryPointName().c_str());
 
@@ -1345,12 +1448,95 @@
         builder.addExecutionMode(shaderEntry, spv::ExecutionModeXfb);
     }
 
+    if (sourceExtensions.find("GL_EXT_ray_flags_primitive_culling") != sourceExtensions.end()) {
+        builder.addCapability(spv::CapabilityRayTraversalPrimitiveCullingProvisionalKHR);
+    }
+
     unsigned int mode;
     switch (glslangIntermediate->getStage()) {
     case EShLangVertex:
         builder.addCapability(spv::CapabilityShader);
         break;
 
+    case EShLangFragment:
+        builder.addCapability(spv::CapabilityShader);
+        if (glslangIntermediate->getPixelCenterInteger())
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModePixelCenterInteger);
+
+        if (glslangIntermediate->getOriginUpperLeft())
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOriginUpperLeft);
+        else
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOriginLowerLeft);
+
+        if (glslangIntermediate->getEarlyFragmentTests())
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeEarlyFragmentTests);
+
+        if (glslangIntermediate->getPostDepthCoverage()) {
+            builder.addCapability(spv::CapabilitySampleMaskPostDepthCoverage);
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModePostDepthCoverage);
+            builder.addExtension(spv::E_SPV_KHR_post_depth_coverage);
+        }
+
+        if (glslangIntermediate->getDepth() != glslang::EldUnchanged && glslangIntermediate->isDepthReplacing())
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeDepthReplacing);
+
+#ifndef GLSLANG_WEB
+
+        switch(glslangIntermediate->getDepth()) {
+        case glslang::EldGreater:  mode = spv::ExecutionModeDepthGreater; break;
+        case glslang::EldLess:     mode = spv::ExecutionModeDepthLess;    break;
+        default:                   mode = spv::ExecutionModeMax;          break;
+        }
+        if (mode != spv::ExecutionModeMax)
+            builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode);
+        switch (glslangIntermediate->getInterlockOrdering()) {
+        case glslang::EioPixelInterlockOrdered:         mode = spv::ExecutionModePixelInterlockOrderedEXT;
+            break;
+        case glslang::EioPixelInterlockUnordered:       mode = spv::ExecutionModePixelInterlockUnorderedEXT;
+            break;
+        case glslang::EioSampleInterlockOrdered:        mode = spv::ExecutionModeSampleInterlockOrderedEXT;
+            break;
+        case glslang::EioSampleInterlockUnordered:      mode = spv::ExecutionModeSampleInterlockUnorderedEXT;
+            break;
+        case glslang::EioShadingRateInterlockOrdered:   mode = spv::ExecutionModeShadingRateInterlockOrderedEXT;
+            break;
+        case glslang::EioShadingRateInterlockUnordered: mode = spv::ExecutionModeShadingRateInterlockUnorderedEXT;
+            break;
+        default:                                        mode = spv::ExecutionModeMax;
+            break;
+        }
+        if (mode != spv::ExecutionModeMax) {
+            builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode);
+            if (mode == spv::ExecutionModeShadingRateInterlockOrderedEXT ||
+                mode == spv::ExecutionModeShadingRateInterlockUnorderedEXT) {
+                builder.addCapability(spv::CapabilityFragmentShaderShadingRateInterlockEXT);
+            } else if (mode == spv::ExecutionModePixelInterlockOrderedEXT ||
+                       mode == spv::ExecutionModePixelInterlockUnorderedEXT) {
+                builder.addCapability(spv::CapabilityFragmentShaderPixelInterlockEXT);
+            } else {
+                builder.addCapability(spv::CapabilityFragmentShaderSampleInterlockEXT);
+            }
+            builder.addExtension(spv::E_SPV_EXT_fragment_shader_interlock);
+        }
+#endif
+    break;
+
+    case EShLangCompute:
+        builder.addCapability(spv::CapabilityShader);
+        builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0),
+                                                                           glslangIntermediate->getLocalSize(1),
+                                                                           glslangIntermediate->getLocalSize(2));
+        if (glslangIntermediate->getLayoutDerivativeModeNone() == glslang::LayoutDerivativeGroupQuads) {
+            builder.addCapability(spv::CapabilityComputeDerivativeGroupQuadsNV);
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeDerivativeGroupQuadsNV);
+            builder.addExtension(spv::E_SPV_NV_compute_shader_derivatives);
+        } else if (glslangIntermediate->getLayoutDerivativeModeNone() == glslang::LayoutDerivativeGroupLinear) {
+            builder.addCapability(spv::CapabilityComputeDerivativeGroupLinearNV);
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeDerivativeGroupLinearNV);
+            builder.addExtension(spv::E_SPV_NV_compute_shader_derivatives);
+        }
+        break;
+#ifndef GLSLANG_WEB
     case EShLangTessEvaluation:
     case EShLangTessControl:
         builder.addCapability(spv::CapabilityTessellation);
@@ -1358,7 +1544,8 @@
         glslang::TLayoutGeometry primitive;
 
         if (glslangIntermediate->getStage() == EShLangTessControl) {
-            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices, glslangIntermediate->getVertices());
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices,
+                glslangIntermediate->getVertices());
             primitive = glslangIntermediate->getOutputPrimitive();
         } else {
             primitive = glslangIntermediate->getInputPrimitive();
@@ -1420,65 +1607,24 @@
         builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices, glslangIntermediate->getVertices());
         break;
 
-    case EShLangFragment:
-        builder.addCapability(spv::CapabilityShader);
-        if (glslangIntermediate->getPixelCenterInteger())
-            builder.addExecutionMode(shaderEntry, spv::ExecutionModePixelCenterInteger);
-
-        if (glslangIntermediate->getOriginUpperLeft())
-            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOriginUpperLeft);
-        else
-            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOriginLowerLeft);
-
-        if (glslangIntermediate->getEarlyFragmentTests())
-            builder.addExecutionMode(shaderEntry, spv::ExecutionModeEarlyFragmentTests);
-
-        if (glslangIntermediate->getPostDepthCoverage()) {
-            builder.addCapability(spv::CapabilitySampleMaskPostDepthCoverage);
-            builder.addExecutionMode(shaderEntry, spv::ExecutionModePostDepthCoverage);
-            builder.addExtension(spv::E_SPV_KHR_post_depth_coverage);
+    case EShLangRayGen:
+    case EShLangIntersect:
+    case EShLangAnyHit:
+    case EShLangClosestHit:
+    case EShLangMiss:
+    case EShLangCallable: 
+    {
+        auto& extensions = glslangIntermediate->getRequestedExtensions();
+        if (extensions.find("GL_NV_ray_tracing") == extensions.end()) {
+            builder.addCapability(spv::CapabilityRayTracingProvisionalKHR);
+            builder.addExtension("SPV_KHR_ray_tracing");
         }
-
-        switch(glslangIntermediate->getDepth()) {
-        case glslang::EldGreater:  mode = spv::ExecutionModeDepthGreater; break;
-        case glslang::EldLess:     mode = spv::ExecutionModeDepthLess;    break;
-        default:                   mode = spv::ExecutionModeMax;          break;
+        else {
+            builder.addCapability(spv::CapabilityRayTracingNV);
+            builder.addExtension("SPV_NV_ray_tracing");
         }
-        if (mode != spv::ExecutionModeMax)
-            builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode);
-
-        if (glslangIntermediate->getDepth() != glslang::EldUnchanged && glslangIntermediate->isDepthReplacing())
-            builder.addExecutionMode(shaderEntry, spv::ExecutionModeDepthReplacing);
         break;
-
-    case EShLangCompute:
-        builder.addCapability(spv::CapabilityShader);
-        builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0),
-                                                                           glslangIntermediate->getLocalSize(1),
-                                                                           glslangIntermediate->getLocalSize(2));
-#ifdef NV_EXTENSIONS
-        if (glslangIntermediate->getLayoutDerivativeModeNone() == glslang::LayoutDerivativeGroupQuads) {
-            builder.addCapability(spv::CapabilityComputeDerivativeGroupQuadsNV);
-            builder.addExecutionMode(shaderEntry, spv::ExecutionModeDerivativeGroupQuadsNV);
-            builder.addExtension(spv::E_SPV_NV_compute_shader_derivatives);
-        } else if (glslangIntermediate->getLayoutDerivativeModeNone() == glslang::LayoutDerivativeGroupLinear) {
-            builder.addCapability(spv::CapabilityComputeDerivativeGroupLinearNV);
-            builder.addExecutionMode(shaderEntry, spv::ExecutionModeDerivativeGroupLinearNV);
-            builder.addExtension(spv::E_SPV_NV_compute_shader_derivatives);
-        }
-#endif
-        break;
-
-#ifdef NV_EXTENSIONS
-    case EShLangRayGenNV:
-    case EShLangIntersectNV:
-    case EShLangAnyHitNV:
-    case EShLangClosestHitNV:
-    case EShLangMissNV:
-    case EShLangCallableNV:
-        builder.addCapability(spv::CapabilityRayTracingNV);
-        builder.addExtension("SPV_NV_ray_tracing");
-        break;
+    }
     case EShLangTaskNV:
     case EShLangMeshNV:
         builder.addCapability(spv::CapabilityMeshShadingNV);
@@ -1487,8 +1633,10 @@
                                                                            glslangIntermediate->getLocalSize(1),
                                                                            glslangIntermediate->getLocalSize(2));
         if (glslangIntermediate->getStage() == EShLangMeshNV) {
-            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices, glslangIntermediate->getVertices());
-            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputPrimitivesNV, glslangIntermediate->getPrimitives());
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices,
+                glslangIntermediate->getVertices());
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputPrimitivesNV,
+                glslangIntermediate->getPrimitives());
 
             switch (glslangIntermediate->getOutputPrimitive()) {
             case glslang::ElgPoints:        mode = spv::ExecutionModeOutputPoints;      break;
@@ -1520,8 +1668,10 @@
     for (auto it = iOSet.cbegin(); it != iOSet.cend(); ++it)
         entryPoint->addIdOperand(*it);
 
-    // Add capabilities, extensions, remove unneeded decorations, etc., 
+    // Add capabilities, extensions, remove unneeded decorations, etc.,
     // based on the resulting SPIR-V.
+    // Note: WebGPU code generation must have the opportunity to aggressively
+    // prune unreachable merge blocks and continue targets.
     builder.postProcess();
 }
 
@@ -1549,6 +1699,9 @@
 void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
 {
     SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder);
+    if (symbol->getType().isStruct())
+        glslangTypeToIdMap[symbol->getType().getStruct()] = symbol->getId();
+
     if (symbol->getType().getQualifier().isSpecConstant())
         spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
 
@@ -1556,13 +1709,28 @@
     // Formal function parameters were mapped during makeFunctions().
     spv::Id id = getSymbolId(symbol);
 
-    // Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction
     if (builder.isPointer(id)) {
-        spv::StorageClass sc = builder.getStorageClass(id);
-        if (sc == spv::StorageClassInput || sc == spv::StorageClassOutput) {
-            if (!symbol->getType().isStruct() || symbol->getType().getStruct()->size() > 0)
+        // Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction
+        // Consider adding to the OpEntryPoint interface list.
+        // Only looking at structures if they have at least one member.
+        if (!symbol->getType().isStruct() || symbol->getType().getStruct()->size() > 0) {
+            spv::StorageClass sc = builder.getStorageClass(id);
+            // Before SPIR-V 1.4, we only want to include Input and Output.
+            // Starting with SPIR-V 1.4, we want all globals.
+            if ((glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4 && sc != spv::StorageClassFunction) ||
+                (sc == spv::StorageClassInput || sc == spv::StorageClassOutput)) {
                 iOSet.insert(id);
+            }
         }
+
+        // If the SPIR-V type is required to be different than the AST type
+        // (for ex SubgroupMasks or 3x4 ObjectToWorld/WorldToObject matrices),
+        // translate now from the SPIR-V type to the AST type, for the consuming
+        // operation.
+        // Note this turns it from an l-value to an r-value.
+        // Currently, all symbols needing this are inputs; avoid the map lookup when non-input.
+        if (symbol->getType().getQualifier().storage == glslang::EvqVaryingIn)
+            id = translateForcedType(id);
     }
 
     // Only process non-linkage-only nodes for generating actual static uses
@@ -1580,13 +1748,16 @@
         //    See comments in handleUserFunctionCall().
         // B) Specialization constants (normal constants don't even come in as a variable),
         //    These are also pure R-values.
+        // C) R-Values from type translation, see above call to translateForcedType()
         glslang::TQualifier qualifier = symbol->getQualifier();
-        if (qualifier.isSpecConstant() || rValueParameters.find(symbol->getId()) != rValueParameters.end())
+        if (qualifier.isSpecConstant() || rValueParameters.find(symbol->getId()) != rValueParameters.end() ||
+            !builder.isPointerType(builder.getTypeId(id)))
             builder.setAccessChainRValue(id);
         else
             builder.setAccessChainLValue(id);
     }
 
+#ifdef ENABLE_HLSL
     // Process linkage-only nodes for any special additional interface work.
     if (linkageOnly) {
         if (glslangIntermediate->getHlslFunctionality1()) {
@@ -1618,11 +1789,18 @@
             }
         }
     }
+#endif
 }
 
 bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::TIntermBinary* node)
 {
     builder.setLine(node->getLoc().line, node->getLoc().getFilename());
+    if (node->getLeft()->getAsSymbolNode() != nullptr && node->getLeft()->getType().isStruct()) {
+        glslangTypeToIdMap[node->getLeft()->getType().getStruct()] = node->getLeft()->getAsSymbolNode()->getId();
+    }
+    if (node->getRight()->getAsSymbolNode() != nullptr && node->getRight()->getType().isStruct()) {
+        glslangTypeToIdMap[node->getRight()->getType().getStruct()] = node->getRight()->getAsSymbolNode()->getId();
+    }
 
     SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder);
     if (node->getType().getQualifier().isSpecConstant())
@@ -1689,6 +1867,7 @@
     case glslang::EOpIndexDirect:
     case glslang::EOpIndexDirectStruct:
         {
+            // Structure, array, matrix, or vector indirection with statically known index.
             // Get the left part of the access chain.
             node->getLeft()->traverse(this);
 
@@ -1705,13 +1884,14 @@
                 int dummySize;
                 builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType()),
                                                TranslateCoherent(node->getLeft()->getType()),
-                                               glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(), dummySize));
+                                               glslangIntermediate->getBaseAlignmentScalar(
+                                                   node->getLeft()->getType(), dummySize));
             } else {
 
                 // Load through a block reference is performed with a dot operator that
                 // is mapped to EOpIndexDirectStruct. When we get to the actual reference,
                 // do a load and reset the access chain.
-                if (node->getLeft()->getBasicType() == glslang::EbtReference &&
+                if (node->getLeft()->isReference() &&
                     !node->getLeft()->getType().isArray() &&
                     node->getOp() == glslang::EOpIndexDirectStruct)
                 {
@@ -1726,13 +1906,18 @@
                 {
                     // This may be, e.g., an anonymous block-member selection, which generally need
                     // index remapping due to hidden members in anonymous blocks.
-                    std::vector<int>& remapper = memberRemapper[node->getLeft()->getType().getStruct()];
-                    assert(remapper.size() > 0);
-                    spvIndex = remapper[glslangIndex];
+                    int glslangId = glslangTypeToIdMap[node->getLeft()->getType().getStruct()];
+                    if (memberRemapper.find(glslangId) != memberRemapper.end()) {
+                        std::vector<int>& remapper = memberRemapper[glslangId];
+                        assert(remapper.size() > 0);
+                        spvIndex = remapper[glslangIndex];
+                    }
                 }
 
                 // normal case for indexing array or structure or block
-                builder.accessChainPush(builder.makeIntConstant(spvIndex), TranslateCoherent(node->getLeft()->getType()), getBufferReferenceAlignment(node->getLeft()->getType()));
+                builder.accessChainPush(builder.makeIntConstant(spvIndex),
+                    TranslateCoherent(node->getLeft()->getType()),
+                        node->getLeft()->getType().getBufferReferenceAlignment());
 
                 // Add capabilities here for accessing PointSize and clip/cull distance.
                 // We have deferred generation of associated capabilities until now.
@@ -1743,8 +1928,8 @@
         return false;
     case glslang::EOpIndexIndirect:
         {
-            // Structure or array or vector indirection.
-            // Will use native SPIR-V access-chain for struct and array indirection;
+            // Array, matrix, or vector indirection with variable index.
+            // Will use native SPIR-V access-chain for and array indirection;
             // matrices are arrays of vectors, so will also work for a matrix.
             // Will use the access chain's 'component' for variable index into a vector.
 
@@ -1769,9 +1954,11 @@
                 int dummySize;
                 builder.accessChainPushComponent(index, convertGlslangToSpvType(node->getLeft()->getType()),
                                                 TranslateCoherent(node->getLeft()->getType()),
-                                                glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(), dummySize));
+                                                glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(),
+                                                dummySize));
             } else
-                builder.accessChainPush(index, TranslateCoherent(node->getLeft()->getType()), getBufferReferenceAlignment(node->getLeft()->getType()));
+                builder.accessChainPush(index, TranslateCoherent(node->getLeft()->getType()),
+                    node->getLeft()->getType().getBufferReferenceAlignment());
         }
         return false;
     case glslang::EOpVectorSwizzle:
@@ -1782,7 +1969,8 @@
             int dummySize;
             builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType()),
                                            TranslateCoherent(node->getLeft()->getType()),
-                                           glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(), dummySize));
+                                           glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(),
+                                               dummySize));
         }
         return false;
     case glslang::EOpMatrixSwizzle:
@@ -1798,7 +1986,8 @@
             if (isTrivial(node->getRight()->getAsTyped()))
                 break; // handle below as a normal binary operation
             // otherwise, we need to do dynamic short circuiting on the right operand
-            spv::Id result = createShortCircuit(node->getOp(), *node->getLeft()->getAsTyped(), *node->getRight()->getAsTyped());
+            spv::Id result = createShortCircuit(node->getOp(), *node->getLeft()->getAsTyped(),
+                *node->getRight()->getAsTyped());
             builder.clearAccessChain();
             builder.setAccessChainRValue(result);
         }
@@ -1837,6 +2026,88 @@
     }
 }
 
+// Figure out what, if any, type changes are needed when accessing a specific built-in.
+// Returns <the type SPIR-V requires for declarion, the type to translate to on use>.
+// Also see comment for 'forceType', regarding tracking SPIR-V-required types.
+std::pair<spv::Id, spv::Id> TGlslangToSpvTraverser::getForcedType(glslang::TBuiltInVariable glslangBuiltIn,
+    const glslang::TType& glslangType)
+{
+    switch(glslangBuiltIn)
+    {
+        case glslang::EbvSubGroupEqMask:
+        case glslang::EbvSubGroupGeMask:
+        case glslang::EbvSubGroupGtMask:
+        case glslang::EbvSubGroupLeMask:
+        case glslang::EbvSubGroupLtMask: {
+            // these require changing a 64-bit scaler -> a vector of 32-bit components
+            if (glslangType.isVector())
+                break;
+            std::pair<spv::Id, spv::Id> ret(builder.makeVectorType(builder.makeUintType(32), 4),
+                                            builder.makeUintType(64));
+            return ret;
+        }
+        // There are no SPIR-V builtins defined for these and map onto original non-transposed
+        // builtins. During visitBinary we insert a transpose
+        case glslang::EbvWorldToObject3x4:
+        case glslang::EbvObjectToWorld3x4: {
+            std::pair<spv::Id, spv::Id> ret(builder.makeMatrixType(builder.makeFloatType(32), 4, 3),
+                builder.makeMatrixType(builder.makeFloatType(32), 3, 4)
+            );
+            return ret;
+        }
+        default:
+            break;
+    }
+
+    std::pair<spv::Id, spv::Id> ret(spv::NoType, spv::NoType);
+    return ret;
+}
+
+// For an object previously identified (see getForcedType() and forceType)
+// as needing type translations, do the translation needed for a load, turning
+// an L-value into in R-value.
+spv::Id TGlslangToSpvTraverser::translateForcedType(spv::Id object)
+{
+    const auto forceIt = forceType.find(object);
+    if (forceIt == forceType.end())
+        return object;
+
+    spv::Id desiredTypeId = forceIt->second;
+    spv::Id objectTypeId = builder.getTypeId(object);
+    assert(builder.isPointerType(objectTypeId));
+    objectTypeId = builder.getContainedTypeId(objectTypeId);
+    if (builder.isVectorType(objectTypeId) &&
+        builder.getScalarTypeWidth(builder.getContainedTypeId(objectTypeId)) == 32) {
+        if (builder.getScalarTypeWidth(desiredTypeId) == 64) {
+            // handle 32-bit v.xy* -> 64-bit
+            builder.clearAccessChain();
+            builder.setAccessChainLValue(object);
+            object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, objectTypeId);
+            std::vector<spv::Id> components;
+            components.push_back(builder.createCompositeExtract(object, builder.getContainedTypeId(objectTypeId), 0));
+            components.push_back(builder.createCompositeExtract(object, builder.getContainedTypeId(objectTypeId), 1));
+
+            spv::Id vecType = builder.makeVectorType(builder.getContainedTypeId(objectTypeId), 2);
+            return builder.createUnaryOp(spv::OpBitcast, desiredTypeId,
+                                         builder.createCompositeConstruct(vecType, components));
+        } else {
+            logger->missingFunctionality("forcing 32-bit vector type to non 64-bit scalar");
+        }
+    } else if (builder.isMatrixType(objectTypeId)) {
+            // There are no SPIR-V builtins defined for 3x4 variants of ObjectToWorld/WorldToObject
+            // and we insert a transpose after loading the original non-transposed builtins
+            builder.clearAccessChain();
+            builder.setAccessChainLValue(object);
+            object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, objectTypeId);
+            return builder.createUnaryOp(spv::OpTranspose, desiredTypeId, object);
+
+    } else  {
+        logger->missingFunctionality("forcing non 32-bit vector type");
+    }
+
+    return object;
+}
+
 bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TIntermUnary* node)
 {
     builder.setLine(node->getLoc().line, node->getLoc().getFilename());
@@ -1870,16 +2141,32 @@
         // So, this has to be block.lastMember.length().
         // SPV wants "block" and member number as the operands, go get them.
 
-        glslang::TIntermTyped* block = node->getOperand()->getAsBinaryNode()->getLeft();
-        block->traverse(this);
-        unsigned int member = node->getOperand()->getAsBinaryNode()->getRight()->getAsConstantUnion()->getConstArray()[0].getUConst();
-        spv::Id length = builder.createArrayLength(builder.accessChainGetLValue(), member);
+        spv::Id length;
+        if (node->getOperand()->getType().isCoopMat()) {
+            spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
+
+            spv::Id typeId = convertGlslangToSpvType(node->getOperand()->getType());
+            assert(builder.isCooperativeMatrixType(typeId));
+
+            length = builder.createCooperativeMatrixLength(typeId);
+        } else {
+            glslang::TIntermTyped* block = node->getOperand()->getAsBinaryNode()->getLeft();
+            block->traverse(this);
+            unsigned int member = node->getOperand()->getAsBinaryNode()->getRight()->getAsConstantUnion()
+                ->getConstArray()[0].getUConst();
+            length = builder.createArrayLength(builder.accessChainGetLValue(), member);
+        }
 
         // GLSL semantics say the result of .length() is an int, while SPIR-V says
         // signedness must be 0. So, convert from SPIR-V unsigned back to GLSL's
         // AST expectation of a signed result.
-        if (glslangIntermediate->getSource() == glslang::EShSourceGlsl)
-            length = builder.createUnaryOp(spv::OpBitcast, builder.makeIntType(32), length);
+        if (glslangIntermediate->getSource() == glslang::EShSourceGlsl) {
+            if (builder.isInSpecConstCodeGenMode()) {
+                length = builder.createBinOp(spv::OpIAdd, builder.makeIntType(32), length, builder.makeIntConstant(0));
+            } else {
+                length = builder.createUnaryOp(spv::OpBitcast, builder.makeIntType(32), length);
+            }
+        }
 
         builder.clearAccessChain();
         builder.setAccessChainRValue(length);
@@ -1892,25 +2179,45 @@
     // Does it need a swizzle inversion?  If so, evaluation is inverted;
     // operate first on the swizzle base, then apply the swizzle.
     spv::Id invertedType = spv::NoType;
-    auto resultType = [&invertedType, &node, this](){ return invertedType != spv::NoType ? invertedType : convertGlslangToSpvType(node->getType()); };
+    auto resultType = [&invertedType, &node, this](){ return invertedType != spv::NoType ?
+        invertedType : convertGlslangToSpvType(node->getType()); };
     if (node->getOp() == glslang::EOpInterpolateAtCentroid)
         invertedType = getInvertedSwizzleType(*node->getOperand());
 
     builder.clearAccessChain();
+    TIntermNode *operandNode;
     if (invertedType != spv::NoType)
-        node->getOperand()->getAsBinaryNode()->getLeft()->traverse(this);
+        operandNode = node->getOperand()->getAsBinaryNode()->getLeft();
     else
-        node->getOperand()->traverse(this);
+        operandNode = node->getOperand();
+    
+    operandNode->traverse(this);
 
     spv::Id operand = spv::NoResult;
 
+    spv::Builder::AccessChain::CoherentFlags lvalueCoherentFlags;
+
+#ifndef GLSLANG_WEB
     if (node->getOp() == glslang::EOpAtomicCounterIncrement ||
         node->getOp() == glslang::EOpAtomicCounterDecrement ||
         node->getOp() == glslang::EOpAtomicCounter          ||
-        node->getOp() == glslang::EOpInterpolateAtCentroid)
+        node->getOp() == glslang::EOpInterpolateAtCentroid  ||
+        node->getOp() == glslang::EOpRayQueryProceed        ||
+        node->getOp() == glslang::EOpRayQueryGetRayTMin     ||
+        node->getOp() == glslang::EOpRayQueryGetRayFlags    ||
+        node->getOp() == glslang::EOpRayQueryGetWorldRayOrigin ||
+        node->getOp() == glslang::EOpRayQueryGetWorldRayDirection ||
+        node->getOp() == glslang::EOpRayQueryGetIntersectionCandidateAABBOpaque ||
+        node->getOp() == glslang::EOpRayQueryTerminate ||
+        node->getOp() == glslang::EOpRayQueryConfirmIntersection) {
         operand = builder.accessChainGetLValue(); // Special case l-value operands
-    else
+        lvalueCoherentFlags = builder.getAccessChain().coherentFlags;
+        lvalueCoherentFlags |= TranslateCoherent(operandNode->getAsTyped()->getType());
+    } else
+#endif
+    {
         operand = accessChainLoad(node->getOperand()->getType());
+    }
 
     OpDecorations decorations = { TranslatePrecisionDecoration(node->getOperationPrecision()),
                                   TranslateNoContractionDecoration(node->getType().getQualifier()),
@@ -1918,16 +2225,18 @@
 
     // it could be a conversion
     if (! result)
-        result = createConversion(node->getOp(), decorations, resultType(), operand, node->getOperand()->getBasicType());
+        result = createConversion(node->getOp(), decorations, resultType(), operand,
+            node->getOperand()->getBasicType());
 
     // if not, then possibly an operation
     if (! result)
-        result = createUnaryOperation(node->getOp(), decorations, resultType(), operand, node->getOperand()->getBasicType());
+        result = createUnaryOperation(node->getOp(), decorations, resultType(), operand,
+            node->getOperand()->getBasicType(), lvalueCoherentFlags);
 
     if (result) {
         if (invertedType) {
             result = createInvertedSwizzle(decorations.precision, *node->getOperand(), result);
-            builder.addDecoration(result, decorations.nonUniform);
+            decorations.addNonUniform(builder, result);
         }
 
         builder.clearAccessChain();
@@ -1947,6 +2256,7 @@
             spv::Id one = 0;
             if (node->getBasicType() == glslang::EbtFloat)
                 one = builder.makeFloatConstant(1.0F);
+#ifndef GLSLANG_WEB
             else if (node->getBasicType() == glslang::EbtDouble)
                 one = builder.makeDoubleConstant(1.0);
             else if (node->getBasicType() == glslang::EbtFloat16)
@@ -1957,6 +2267,7 @@
                 one = builder.makeInt16Constant(1);
             else if (node->getBasicType() == glslang::EbtInt64 || node->getBasicType() == glslang::EbtUint64)
                 one = builder.makeInt64Constant(1);
+#endif
             else
                 one = builder.makeIntConstant(1);
             glslang::TOperator op;
@@ -1984,12 +2295,20 @@
 
         return false;
 
+#ifndef GLSLANG_WEB
     case glslang::EOpEmitStreamVertex:
         builder.createNoResultOp(spv::OpEmitStreamVertex, operand);
         return false;
     case glslang::EOpEndStreamPrimitive:
         builder.createNoResultOp(spv::OpEndStreamPrimitive, operand);
         return false;
+    case glslang::EOpRayQueryTerminate:
+        builder.createNoResultOp(spv::OpRayQueryTerminateKHR, operand);
+        return false;
+    case glslang::EOpRayQueryConfirmIntersection:
+        builder.createNoResultOp(spv::OpRayQueryConfirmIntersectionKHR, operand);
+        return false;
+#endif
 
     default:
         logger->missingFunctionality("unknown glslang unary");
@@ -1997,6 +2316,40 @@
     }
 }
 
+// Construct a composite object, recursively copying members if their types don't match
+spv::Id TGlslangToSpvTraverser::createCompositeConstruct(spv::Id resultTypeId, std::vector<spv::Id> constituents)
+{
+    for (int c = 0; c < (int)constituents.size(); ++c) {
+        spv::Id& constituent = constituents[c];
+        spv::Id lType = builder.getContainedTypeId(resultTypeId, c);
+        spv::Id rType = builder.getTypeId(constituent);
+        if (lType != rType) {
+            if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4) {
+                constituent = builder.createUnaryOp(spv::OpCopyLogical, lType, constituent);
+            } else if (builder.isStructType(rType)) {
+                std::vector<spv::Id> rTypeConstituents;
+                int numrTypeConstituents = builder.getNumTypeConstituents(rType);
+                for (int i = 0; i < numrTypeConstituents; ++i) {
+                    rTypeConstituents.push_back(builder.createCompositeExtract(constituent,
+                        builder.getContainedTypeId(rType, i), i));
+                }
+                constituents[c] = createCompositeConstruct(lType, rTypeConstituents);
+            } else {
+                assert(builder.isArrayType(rType));
+                std::vector<spv::Id> rTypeConstituents;
+                int numrTypeConstituents = builder.getNumTypeConstituents(rType);
+
+                spv::Id elementRType = builder.getContainedTypeId(rType);
+                for (int i = 0; i < numrTypeConstituents; ++i) {
+                    rTypeConstituents.push_back(builder.createCompositeExtract(constituent, elementRType, i));
+                }
+                constituents[c] = createCompositeConstruct(lType, rTypeConstituents);
+            }
+        }
+    }
+    return builder.createCompositeConstruct(resultTypeId, constituents);
+}
+
 bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TIntermAggregate* node)
 {
     SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder);
@@ -2004,8 +2357,14 @@
         spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
 
     spv::Id result = spv::NoResult;
-    spv::Id invertedType = spv::NoType;  // to use to override the natural type of the node
-    auto resultType = [&invertedType, &node, this](){ return invertedType != spv::NoType ? invertedType : convertGlslangToSpvType(node->getType()); };
+    spv::Id invertedType = spv::NoType;                     // to use to override the natural type of the node
+    std::vector<spv::Builder::AccessChain> complexLvalues;  // for holding swizzling l-values too complex for
+                                                            // SPIR-V, for an out parameter
+    std::vector<spv::Id> temporaryLvalues;                  // temporaries to pass, as proxies for complexLValues
+
+    auto resultType = [&invertedType, &node, this](){ return invertedType != spv::NoType ?
+        invertedType :
+        convertGlslangToSpvType(node->getType()); };
 
     // try texturing
     result = createImageTextureFunctionCall(node);
@@ -2014,14 +2373,15 @@
         builder.setAccessChainRValue(result);
 
         return false;
-    } else if (node->getOp() == glslang::EOpImageStore ||
-#ifdef AMD_EXTENSIONS
+    }
+#ifndef GLSLANG_WEB
+    else if (node->getOp() == glslang::EOpImageStore ||
         node->getOp() == glslang::EOpImageStoreLod ||
-#endif
         node->getOp() == glslang::EOpImageAtomicStore) {
         // "imageStore" is a special case, which has no result
         return false;
     }
+#endif
 
     glslang::TOperator binOp = glslang::EOpNull;
     bool reduceComparison = true;
@@ -2029,6 +2389,8 @@
     bool noReturnValue = false;
     bool atomic = false;
 
+    spv::Builder::AccessChain::CoherentFlags lvalueCoherentFlags;
+
     assert(node->getOp());
 
     spv::Decoration precision = TranslatePrecisionDecoration(node->getOperationPrecision());
@@ -2106,7 +2468,6 @@
         builder.setLine(node->getLoc().line, node->getLoc().getFilename());
         if (node->isUserDefined())
             result = handleUserFunctionCall(node);
-        // assert(result);  // this can happen for bad shaders because the call graph completeness checking is not yet done
         if (result) {
             builder.clearAccessChain();
             builder.setAccessChainRValue(result);
@@ -2222,18 +2583,21 @@
     case glslang::EOpConstructStruct:
     case glslang::EOpConstructTextureSampler:
     case glslang::EOpConstructReference:
+    case glslang::EOpConstructCooperativeMatrix:
     {
         builder.setLine(node->getLoc().line, node->getLoc().getFilename());
         std::vector<spv::Id> arguments;
-        translateArguments(*node, arguments);
+        translateArguments(*node, arguments, lvalueCoherentFlags);
         spv::Id constructed;
         if (node->getOp() == glslang::EOpConstructTextureSampler)
             constructed = builder.createOp(spv::OpSampledImage, resultType(), arguments);
-        else if (node->getOp() == glslang::EOpConstructStruct || node->getType().isArray()) {
+        else if (node->getOp() == glslang::EOpConstructStruct ||
+                 node->getOp() == glslang::EOpConstructCooperativeMatrix ||
+                 node->getType().isArray()) {
             std::vector<spv::Id> constituents;
             for (int c = 0; c < (int)arguments.size(); ++c)
                 constituents.push_back(arguments[c]);
-            constructed = builder.createCompositeConstruct(resultType(), constituents);
+            constructed = createCompositeConstruct(resultType(), constituents);
         } else if (isMatrix)
             constructed = builder.createMatrixConstructor(precision, arguments, resultType());
         else
@@ -2286,6 +2650,7 @@
         // which can be emitted by the one in createBinaryOperation()
         binOp = glslang::EOpMod;
         break;
+
     case glslang::EOpEmitVertex:
     case glslang::EOpEndPrimitive:
     case glslang::EOpBarrier:
@@ -2309,10 +2674,6 @@
         // These all have 0 operands and will naturally finish up in the code below for 0 operands
         break;
 
-    case glslang::EOpAtomicStore:
-        noReturnValue = true;
-        // fallthrough
-    case glslang::EOpAtomicLoad:
     case glslang::EOpAtomicAdd:
     case glslang::EOpAtomicMin:
     case glslang::EOpAtomicMax:
@@ -2324,6 +2685,14 @@
         atomic = true;
         break;
 
+#ifndef GLSLANG_WEB
+    case glslang::EOpAtomicStore:
+        noReturnValue = true;
+        // fallthrough
+    case glslang::EOpAtomicLoad:
+        atomic = true;
+        break;
+
     case glslang::EOpAtomicCounterAdd:
     case glslang::EOpAtomicCounterSubtract:
     case glslang::EOpAtomicCounterMin:
@@ -2338,16 +2707,69 @@
         atomic = true;
         break;
 
-#ifdef NV_EXTENSIONS
-    case glslang::EOpIgnoreIntersectionNV:
-    case glslang::EOpTerminateRayNV:
-    case glslang::EOpTraceNV:
-    case glslang::EOpExecuteCallableNV:
+    case glslang::EOpAbsDifference:
+    case glslang::EOpAddSaturate:
+    case glslang::EOpSubSaturate:
+    case glslang::EOpAverage:
+    case glslang::EOpAverageRounded:
+    case glslang::EOpMul32x16:
+        builder.addCapability(spv::CapabilityIntegerFunctions2INTEL);
+        builder.addExtension("SPV_INTEL_shader_integer_functions2");
+        binOp = node->getOp();
+        break;
+
+    case glslang::EOpIgnoreIntersection:
+    case glslang::EOpTerminateRay:
+    case glslang::EOpTrace:
+    case glslang::EOpExecuteCallable:
     case glslang::EOpWritePackedPrimitiveIndices4x8NV:
         noReturnValue = true;
         break;
+    case glslang::EOpRayQueryInitialize:
+    case glslang::EOpRayQueryTerminate:
+    case glslang::EOpRayQueryGenerateIntersection:
+    case glslang::EOpRayQueryConfirmIntersection:
+        builder.addExtension("SPV_KHR_ray_query");
+        builder.addCapability(spv::CapabilityRayQueryProvisionalKHR);
+        noReturnValue = true;
+        break;
+    case glslang::EOpRayQueryProceed:
+    case glslang::EOpRayQueryGetIntersectionType:
+    case glslang::EOpRayQueryGetRayTMin:
+    case glslang::EOpRayQueryGetRayFlags:
+    case glslang::EOpRayQueryGetIntersectionT:
+    case glslang::EOpRayQueryGetIntersectionInstanceCustomIndex:
+    case glslang::EOpRayQueryGetIntersectionInstanceId:
+    case glslang::EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset:
+    case glslang::EOpRayQueryGetIntersectionGeometryIndex:
+    case glslang::EOpRayQueryGetIntersectionPrimitiveIndex:
+    case glslang::EOpRayQueryGetIntersectionBarycentrics:
+    case glslang::EOpRayQueryGetIntersectionFrontFace:
+    case glslang::EOpRayQueryGetIntersectionCandidateAABBOpaque:
+    case glslang::EOpRayQueryGetIntersectionObjectRayDirection:
+    case glslang::EOpRayQueryGetIntersectionObjectRayOrigin:
+    case glslang::EOpRayQueryGetWorldRayDirection:
+    case glslang::EOpRayQueryGetWorldRayOrigin:
+    case glslang::EOpRayQueryGetIntersectionObjectToWorld:
+    case glslang::EOpRayQueryGetIntersectionWorldToObject:
+        builder.addExtension("SPV_KHR_ray_query");
+        builder.addCapability(spv::CapabilityRayQueryProvisionalKHR);
+        break;
+    case glslang::EOpCooperativeMatrixLoad:
+    case glslang::EOpCooperativeMatrixStore:
+        noReturnValue = true;
+        break;
+    case glslang::EOpBeginInvocationInterlock:
+    case glslang::EOpEndInvocationInterlock:
+        builder.addExtension(spv::E_SPV_EXT_fragment_shader_interlock);
+        noReturnValue = true;
+        break;
 #endif
 
+    case glslang::EOpDebugPrintf:
+        noReturnValue = true;
+        break;
+
     default:
         break;
     }
@@ -2389,30 +2811,38 @@
     //
     glslang::TIntermSequence& glslangOperands = node->getSequence();
     std::vector<spv::Id> operands;
+    std::vector<spv::IdImmediate> memoryAccessOperands;
     for (int arg = 0; arg < (int)glslangOperands.size(); ++arg) {
         // special case l-value operands; there are just a few
         bool lvalue = false;
         switch (node->getOp()) {
-        case glslang::EOpFrexp:
         case glslang::EOpModf:
             if (arg == 1)
                 lvalue = true;
             break;
-        case glslang::EOpInterpolateAtSample:
-        case glslang::EOpInterpolateAtOffset:
-#ifdef AMD_EXTENSIONS
-        case glslang::EOpInterpolateAtVertex:
-#endif
-            if (arg == 0) {
-                lvalue = true;
 
-                // Does it need a swizzle inversion?  If so, evaluation is inverted;
-                // operate first on the swizzle base, then apply the swizzle.
-                if (glslangOperands[0]->getAsOperator() &&
-                    glslangOperands[0]->getAsOperator()->getOp() == glslang::EOpVectorSwizzle)
-                    invertedType = convertGlslangToSpvType(glslangOperands[0]->getAsBinaryNode()->getLeft()->getType());
-            }
+        case glslang::EOpRayQueryInitialize:
+        case glslang::EOpRayQueryTerminate:
+        case glslang::EOpRayQueryConfirmIntersection:
+        case glslang::EOpRayQueryProceed:
+        case glslang::EOpRayQueryGenerateIntersection:
+        case glslang::EOpRayQueryGetIntersectionType:
+        case glslang::EOpRayQueryGetIntersectionT:
+        case glslang::EOpRayQueryGetIntersectionInstanceCustomIndex:
+        case glslang::EOpRayQueryGetIntersectionInstanceId:
+        case glslang::EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset:
+        case glslang::EOpRayQueryGetIntersectionGeometryIndex:
+        case glslang::EOpRayQueryGetIntersectionPrimitiveIndex:
+        case glslang::EOpRayQueryGetIntersectionBarycentrics:
+        case glslang::EOpRayQueryGetIntersectionFrontFace:
+        case glslang::EOpRayQueryGetIntersectionObjectRayDirection:
+        case glslang::EOpRayQueryGetIntersectionObjectRayOrigin:
+        case glslang::EOpRayQueryGetIntersectionObjectToWorld:
+        case glslang::EOpRayQueryGetIntersectionWorldToObject:
+            if (arg == 0)
+                lvalue = true;
             break;
+
         case glslang::EOpAtomicAdd:
         case glslang::EOpAtomicMin:
         case glslang::EOpAtomicMax:
@@ -2421,6 +2851,33 @@
         case glslang::EOpAtomicXor:
         case glslang::EOpAtomicExchange:
         case glslang::EOpAtomicCompSwap:
+            if (arg == 0)
+                lvalue = true;
+            break;
+
+#ifndef GLSLANG_WEB
+        case glslang::EOpFrexp:
+            if (arg == 1)
+                lvalue = true;
+            break;
+        case glslang::EOpInterpolateAtSample:
+        case glslang::EOpInterpolateAtOffset:
+        case glslang::EOpInterpolateAtVertex:
+            if (arg == 0) {
+                lvalue = true;
+
+                // Does it need a swizzle inversion?  If so, evaluation is inverted;
+                // operate first on the swizzle base, then apply the swizzle.
+                // That is, we transform
+                //
+                //    interpolate(v.zy)  ->  interpolate(v).zy
+                //
+                if (glslangOperands[0]->getAsOperator() &&
+                    glslangOperands[0]->getAsOperator()->getOp() == glslang::EOpVectorSwizzle)
+                    invertedType = convertGlslangToSpvType(
+                        glslangOperands[0]->getAsBinaryNode()->getLeft()->getType());
+            }
+            break;
         case glslang::EOpAtomicLoad:
         case glslang::EOpAtomicStore:
         case glslang::EOpAtomicCounterAdd:
@@ -2445,6 +2902,15 @@
             if (arg >= 2)
                 lvalue = true;
             break;
+        case glslang::EOpCooperativeMatrixLoad:
+            if (arg == 0 || arg == 1)
+                lvalue = true;
+            break;
+        case glslang::EOpCooperativeMatrixStore:
+            if (arg == 1)
+                lvalue = true;
+            break;
+#endif
         default:
             break;
         }
@@ -2453,18 +2919,140 @@
             glslangOperands[0]->getAsBinaryNode()->getLeft()->traverse(this);
         else
             glslangOperands[arg]->traverse(this);
-        if (lvalue)
-            operands.push_back(builder.accessChainGetLValue());
-        else {
+
+#ifndef GLSLANG_WEB
+        if (node->getOp() == glslang::EOpCooperativeMatrixLoad ||
+            node->getOp() == glslang::EOpCooperativeMatrixStore) {
+
+            if (arg == 1) {
+                // fold "element" parameter into the access chain
+                spv::Builder::AccessChain save = builder.getAccessChain();
+                builder.clearAccessChain();
+                glslangOperands[2]->traverse(this);
+
+                spv::Id elementId = accessChainLoad(glslangOperands[2]->getAsTyped()->getType());
+
+                builder.setAccessChain(save);
+
+                // Point to the first element of the array.
+                builder.accessChainPush(elementId,
+                    TranslateCoherent(glslangOperands[arg]->getAsTyped()->getType()),
+                                      glslangOperands[arg]->getAsTyped()->getType().getBufferReferenceAlignment());
+
+                spv::Builder::AccessChain::CoherentFlags coherentFlags = builder.getAccessChain().coherentFlags;
+                unsigned int alignment = builder.getAccessChain().alignment;
+
+                int memoryAccess = TranslateMemoryAccess(coherentFlags);
+                if (node->getOp() == glslang::EOpCooperativeMatrixLoad)
+                    memoryAccess &= ~spv::MemoryAccessMakePointerAvailableKHRMask;
+                if (node->getOp() == glslang::EOpCooperativeMatrixStore)
+                    memoryAccess &= ~spv::MemoryAccessMakePointerVisibleKHRMask;
+                if (builder.getStorageClass(builder.getAccessChain().base) ==
+                    spv::StorageClassPhysicalStorageBufferEXT) {
+                    memoryAccess = (spv::MemoryAccessMask)(memoryAccess | spv::MemoryAccessAlignedMask);
+                }
+
+                memoryAccessOperands.push_back(spv::IdImmediate(false, memoryAccess));
+
+                if (memoryAccess & spv::MemoryAccessAlignedMask) {
+                    memoryAccessOperands.push_back(spv::IdImmediate(false, alignment));
+                }
+
+                if (memoryAccess &
+                    (spv::MemoryAccessMakePointerAvailableKHRMask | spv::MemoryAccessMakePointerVisibleKHRMask)) {
+                    memoryAccessOperands.push_back(spv::IdImmediate(true,
+                        builder.makeUintConstant(TranslateMemoryScope(coherentFlags))));
+                }
+            } else if (arg == 2) {
+                continue;
+            }
+        }
+#endif
+
+        // for l-values, pass the address, for r-values, pass the value
+        if (lvalue) {
+            if (invertedType == spv::NoType && !builder.isSpvLvalue()) {
+                // SPIR-V cannot represent an l-value containing a swizzle that doesn't
+                // reduce to a simple access chain.  So, we need a temporary vector to
+                // receive the result, and must later swizzle that into the original
+                // l-value.
+                complexLvalues.push_back(builder.getAccessChain());
+                temporaryLvalues.push_back(builder.createVariable(spv::StorageClassFunction,
+                    builder.accessChainGetInferredType(), "swizzleTemp"));
+                operands.push_back(temporaryLvalues.back());
+            } else {
+                operands.push_back(builder.accessChainGetLValue());
+            }
+            lvalueCoherentFlags = builder.getAccessChain().coherentFlags;
+            lvalueCoherentFlags |= TranslateCoherent(glslangOperands[arg]->getAsTyped()->getType());
+        } else {
             builder.setLine(node->getLoc().line, node->getLoc().getFilename());
-            operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType()));
+             glslang::TOperator glslangOp = node->getOp();
+             if (arg == 1 &&
+                (glslangOp == glslang::EOpRayQueryGetIntersectionType ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionT ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionInstanceCustomIndex ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionInstanceId ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionGeometryIndex ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionPrimitiveIndex ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionBarycentrics ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionFrontFace ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionObjectRayDirection ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionObjectRayOrigin ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionObjectToWorld ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionWorldToObject
+                    )) {
+                bool cond = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getBConst();
+                operands.push_back(builder.makeIntConstant(cond ? 1 : 0));
+            }
+            else {
+                operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType()));
+            }
+
         }
     }
 
     builder.setLine(node->getLoc().line, node->getLoc().getFilename());
+#ifndef GLSLANG_WEB
+    if (node->getOp() == glslang::EOpCooperativeMatrixLoad) {
+        std::vector<spv::IdImmediate> idImmOps;
+
+        idImmOps.push_back(spv::IdImmediate(true, operands[1])); // buf
+        idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride
+        idImmOps.push_back(spv::IdImmediate(true, operands[3])); // colMajor
+        idImmOps.insert(idImmOps.end(), memoryAccessOperands.begin(), memoryAccessOperands.end());
+        // get the pointee type
+        spv::Id typeId = builder.getContainedTypeId(builder.getTypeId(operands[0]));
+        assert(builder.isCooperativeMatrixType(typeId));
+        // do the op
+        spv::Id result = builder.createOp(spv::OpCooperativeMatrixLoadNV, typeId, idImmOps);
+        // store the result to the pointer (out param 'm')
+        builder.createStore(result, operands[0]);
+        result = 0;
+    } else if (node->getOp() == glslang::EOpCooperativeMatrixStore) {
+        std::vector<spv::IdImmediate> idImmOps;
+
+        idImmOps.push_back(spv::IdImmediate(true, operands[1])); // buf
+        idImmOps.push_back(spv::IdImmediate(true, operands[0])); // object
+        idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride
+        idImmOps.push_back(spv::IdImmediate(true, operands[3])); // colMajor
+        idImmOps.insert(idImmOps.end(), memoryAccessOperands.begin(), memoryAccessOperands.end());
+
+        builder.createNoResultOp(spv::OpCooperativeMatrixStoreNV, idImmOps);
+        result = 0;
+    } else
+#endif
     if (atomic) {
         // Handle all atomics
-        result = createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType());
+        result = createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType(),
+            lvalueCoherentFlags);
+    } else if (node->getOp() == glslang::EOpDebugPrintf) {
+        if (!nonSemanticDebugPrintf) {
+            nonSemanticDebugPrintf = builder.import("NonSemantic.DebugPrintf");
+        }
+        result = builder.createBuiltinCall(builder.makeVoidType(), nonSemanticDebugPrintf, spv::NonSemanticDebugPrintfDebugPrintf, operands);
+        builder.addExtension(spv::E_SPV_KHR_non_semantic_info);
     } else {
         // Pass through to generic operations.
         switch (glslangOperands.size()) {
@@ -2479,15 +3067,21 @@
                 result = createUnaryOperation(
                     node->getOp(), decorations,
                     resultType(), operands.front(),
-                    glslangOperands[0]->getAsTyped()->getBasicType());
+                    glslangOperands[0]->getAsTyped()->getBasicType(), lvalueCoherentFlags);
             }
             break;
         default:
             result = createMiscOperation(node->getOp(), precision, resultType(), operands, node->getBasicType());
             break;
         }
-        if (invertedType)
+
+        if (invertedType != spv::NoResult)
             result = createInvertedSwizzle(precision, *glslangOperands[0]->getAsBinaryNode(), result);
+
+        for (unsigned int i = 0; i < temporaryLvalues.size(); ++i) {
+            builder.setAccessChain(complexLvalues[i]);
+            builder.accessChainStore(builder.createLoad(temporaryLvalues[i]));
+        }
     }
 
     if (noReturnValue)
@@ -2514,6 +3108,19 @@
 // next layer copies r-values into memory to use the access-chain mechanism
 bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang::TIntermSelection* node)
 {
+    // see if OpSelect can handle it
+    const auto isOpSelectable = [&]() {
+        if (node->getBasicType() == glslang::EbtVoid)
+            return false;
+        // OpSelect can do all other types starting with SPV 1.4
+        if (glslangIntermediate->getSpv().spv < glslang::EShTargetSpv_1_4) {
+            // pre-1.4, only scalars and vectors can be handled
+            if ((!node->getType().isScalar() && !node->getType().isVector()))
+                return false;
+        }
+        return true;
+    };
+
     // See if it simple and safe, or required, to execute both sides.
     // Crucially, side effects must be either semantically required or avoided,
     // and there are performance trade-offs.
@@ -2532,9 +3139,7 @@
 
         // if not required to execute both, decide based on performance/practicality...
 
-        // see if OpSelect can handle it
-        if ((!node->getType().isScalar() && !node->getType().isVector()) ||
-            node->getBasicType() == glslang::EbtVoid)
+        if (!isOpSelectable())
             return false;
 
         assert(node->getType() == node->getTrueBlock() ->getAsTyped()->getType() &&
@@ -2571,14 +3176,16 @@
         // emit code to select between trueValue and falseValue
 
         // see if OpSelect can handle it
-        if (node->getType().isScalar() || node->getType().isVector()) {
+        if (isOpSelectable()) {
             // Emit OpSelect for this selection.
 
             // smear condition to vector, if necessary (AST is always scalar)
-            if (builder.isVector(trueValue))
+            // Before 1.4, smear like for mix(), starting with 1.4, keep it scalar
+            if (glslangIntermediate->getSpv().spv < glslang::EShTargetSpv_1_4 && builder.isVector(trueValue)) {
                 condition = builder.smearScalar(spv::NoPrecision, condition, 
                                                 builder.makeVectorType(builder.makeBoolType(),
                                                                        builder.getNumComponents(trueValue)));
+            }
 
             // OpSelect
             result = builder.createTriOp(spv::OpSelect,
@@ -2681,7 +3288,8 @@
             defaultSegment = (int)codeSegments.size();
         else if (child->getAsBranchNode() && child->getAsBranchNode()->getFlowOp() == glslang::EOpCase) {
             valueIndexToSegment[caseValues.size()] = (int)codeSegments.size();
-            caseValues.push_back(child->getAsBranchNode()->getExpression()->getAsConstantUnion()->getConstArray()[0].getIConst());
+            caseValues.push_back(child->getAsBranchNode()->getExpression()->getAsConstantUnion()
+                ->getConstArray()[0].getIConst());
         } else
             codeSegments.push_back(child);
     }
@@ -2694,7 +3302,8 @@
 
     // make the switch statement
     std::vector<spv::Block*> segmentBlocks; // returned, as the blocks allocated in the call
-    builder.makeSwitch(selector, control, (int)codeSegments.size(), caseValues, valueIndexToSegment, defaultSegment, segmentBlocks);
+    builder.makeSwitch(selector, control, (int)codeSegments.size(), caseValues, valueIndexToSegment, defaultSegment,
+        segmentBlocks);
 
     // emit all the code in the segments
     breakForLoop.push(false);
@@ -2727,8 +3336,8 @@
     builder.createBranch(&blocks.head);
 
     // Loop control:
-    unsigned int dependencyLength = glslang::TIntermLoop::dependencyInfinite;
-    const spv::LoopControlMask control = TranslateLoopControl(*node, dependencyLength);
+    std::vector<unsigned int> operands;
+    const spv::LoopControlMask control = TranslateLoopControl(*node, operands);
 
     // Spec requires back edges to target header blocks, and every header block
     // must dominate its merge block.  Make a header block first to ensure these
@@ -2738,7 +3347,7 @@
     // including merges of its own.
     builder.setLine(node->getLoc().line, node->getLoc().getFilename());
     builder.setBuildPoint(&blocks.head);
-    builder.createLoopMerge(&blocks.merge, &blocks.continue_target, control, dependencyLength);
+    builder.createLoopMerge(&blocks.merge, &blocks.continue_target, control, operands);
     if (node->testFirst() && node->getTest()) {
         spv::Block& test = builder.makeNewBlock();
         builder.createBranch(&test);
@@ -2828,6 +3437,14 @@
         builder.clearAccessChain();
         break;
 
+#ifndef GLSLANG_WEB
+    case glslang::EOpDemote:
+        builder.createNoResultOp(spv::OpDemoteToHelperInvocationEXT);
+        builder.addExtension(spv::E_SPV_EXT_demote_to_helper_invocation);
+        builder.addCapability(spv::CapabilityDemoteToHelperInvocationEXT);
+        break;
+#endif
+
     default:
         assert(0);
         break;
@@ -2836,7 +3453,7 @@
     return false;
 }
 
-spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* node)
+spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* node, spv::Id forcedType)
 {
     // First, steer off constants, which are not SPIR-V variables, but
     // can still have a mapping to a SPIR-V Id.
@@ -2849,51 +3466,57 @@
 
     // Now, handle actual variables
     spv::StorageClass storageClass = TranslateStorageClass(node->getType());
-    spv::Id spvType = convertGlslangToSpvType(node->getType());
+    spv::Id spvType = forcedType == spv::NoType ? convertGlslangToSpvType(node->getType())
+                                                : forcedType;
 
-    const bool contains16BitType = node->getType().containsBasicType(glslang::EbtFloat16) ||
-                                   node->getType().containsBasicType(glslang::EbtInt16)   ||
-                                   node->getType().containsBasicType(glslang::EbtUint16);
+    const bool contains16BitType = node->getType().contains16BitFloat() ||
+                                   node->getType().contains16BitInt();
     if (contains16BitType) {
         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::StorageClassPushConstant:
-            addPre13Extension(spv::E_SPV_KHR_16bit_storage);
-            builder.addCapability(spv::CapabilityStoragePushConstant16);
-            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
                 builder.addCapability(spv::CapabilityStorageUniform16);
             break;
+#ifndef GLSLANG_WEB
+        case spv::StorageClassPushConstant:
+            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
         default:
+            if (node->getType().contains16BitFloat())
+                builder.addCapability(spv::CapabilityFloat16);
+            if (node->getType().contains16BitInt())
+                builder.addCapability(spv::CapabilityInt16);
             break;
         }
     }
 
-    const bool contains8BitType = node->getType().containsBasicType(glslang::EbtInt8)   ||
-                                  node->getType().containsBasicType(glslang::EbtUint8);
-    if (contains8BitType) {
+    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);
         }
     }
 
@@ -2908,15 +3531,15 @@
 spv::Id TGlslangToSpvTraverser::getSampledType(const glslang::TSampler& sampler)
 {
     switch (sampler.type) {
+        case glslang::EbtInt:      return builder.makeIntType(32);
+        case glslang::EbtUint:     return builder.makeUintType(32);
         case glslang::EbtFloat:    return builder.makeFloatType(32);
-#ifdef AMD_EXTENSIONS
+#ifndef GLSLANG_WEB
         case glslang::EbtFloat16:
             builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float_fetch);
             builder.addCapability(spv::CapabilityFloat16ImageAMD);
             return builder.makeFloatType(16);
 #endif
-        case glslang::EbtInt:      return builder.makeIntType(32);
-        case glslang::EbtUint:     return builder.makeUintType(32);
         default:
             assert(0);
             return builder.makeFloatType(32);
@@ -2937,7 +3560,8 @@
 
 // When inverting a swizzle with a parent op, this function
 // will apply the swizzle operation to a completed parent operation.
-spv::Id TGlslangToSpvTraverser::createInvertedSwizzle(spv::Decoration precision, const glslang::TIntermTyped& node, spv::Id parentResult)
+spv::Id TGlslangToSpvTraverser::createInvertedSwizzle(spv::Decoration precision, const glslang::TIntermTyped& node,
+    spv::Id parentResult)
 {
     std::vector<unsigned> swizzle;
     convertSwizzle(*node.getAsBinaryNode()->getRight()->getAsAggregate(), swizzle);
@@ -2974,15 +3598,6 @@
         spvType = builder.makeVoidType();
         assert (! type.isArray());
         break;
-    case glslang::EbtFloat:
-        spvType = builder.makeFloatType(32);
-        break;
-    case glslang::EbtDouble:
-        spvType = builder.makeFloatType(64);
-        break;
-    case glslang::EbtFloat16:
-        spvType = builder.makeFloatType(16);
-        break;
     case glslang::EbtBool:
         // "transparent" bool doesn't exist in SPIR-V.  The GLSL convention is
         // a 32-bit int where non-0 means true.
@@ -2991,6 +3606,22 @@
         else
             spvType = builder.makeBoolType();
         break;
+    case glslang::EbtInt:
+        spvType = builder.makeIntType(32);
+        break;
+    case glslang::EbtUint:
+        spvType = builder.makeUintType(32);
+        break;
+    case glslang::EbtFloat:
+        spvType = builder.makeFloatType(32);
+        break;
+#ifndef GLSLANG_WEB
+    case glslang::EbtDouble:
+        spvType = builder.makeFloatType(64);
+        break;
+    case glslang::EbtFloat16:
+        spvType = builder.makeFloatType(16);
+        break;
     case glslang::EbtInt8:
         spvType = builder.makeIntType(8);
         break;
@@ -3003,12 +3634,6 @@
     case glslang::EbtUint16:
         spvType = builder.makeUintType(16);
         break;
-    case glslang::EbtInt:
-        spvType = builder.makeIntType(32);
-        break;
-    case glslang::EbtUint:
-        spvType = builder.makeUintType(32);
-        break;
     case glslang::EbtInt64:
         spvType = builder.makeIntType(64);
         break;
@@ -3019,22 +3644,41 @@
         builder.addCapability(spv::CapabilityAtomicStorage);
         spvType = builder.makeUintType(32);
         break;
-#ifdef NV_EXTENSIONS
-    case glslang::EbtAccStructNV:
-        spvType = builder.makeAccelerationStructureNVType();
+    case glslang::EbtAccStruct:
+        spvType = builder.makeAccelerationStructureType();
+        break;
+    case glslang::EbtRayQuery:
+        spvType = builder.makeRayQueryType();
+        break;
+    case glslang::EbtReference:
+        {
+            // Make the forward pointer, then recurse to convert the structure type, then
+            // patch up the forward pointer with a real pointer type.
+            if (forwardPointers.find(type.getReferentType()) == forwardPointers.end()) {
+                spv::Id forwardId = builder.makeForwardPointer(spv::StorageClassPhysicalStorageBufferEXT);
+                forwardPointers[type.getReferentType()] = forwardId;
+            }
+            spvType = forwardPointers[type.getReferentType()];
+            if (!forwardReferenceOnly) {
+                spv::Id referentType = convertGlslangToSpvType(*type.getReferentType());
+                builder.makePointerFromForwardPointer(spv::StorageClassPhysicalStorageBufferEXT,
+                                                      forwardPointers[type.getReferentType()],
+                                                      referentType);
+            }
+        }
         break;
 #endif
     case glslang::EbtSampler:
         {
             const glslang::TSampler& sampler = type.getSampler();
-            if (sampler.sampler) {
-                // pure sampler
+            if (sampler.isPureSampler()) {
                 spvType = builder.makeSamplerType();
             } else {
                 // an image is present, make its type
-                spvType = builder.makeImageType(getSampledType(sampler), TranslateDimensionality(sampler), sampler.shadow, sampler.arrayed, sampler.ms,
-                                                sampler.image ? 2 : 1, TranslateImageFormat(type));
-                if (sampler.combined) {
+                spvType = builder.makeImageType(getSampledType(sampler), TranslateDimensionality(sampler),
+                                                sampler.isShadow(), sampler.isArrayed(), sampler.isMultiSample(),
+                                                sampler.isImageClass() ? 2 : 1, TranslateImageFormat(type));
+                if (sampler.isCombined()) {
                     // already has both image and sampler, make the combined type
                     spvType = builder.makeSampledImageType(spvType);
                 }
@@ -3056,27 +3700,13 @@
 
             // else, we haven't seen it...
             if (type.getBasicType() == glslang::EbtBlock)
-                memberRemapper[glslangMembers].resize(glslangMembers->size());
+                memberRemapper[glslangTypeToIdMap[glslangMembers]].resize(glslangMembers->size());
             spvType = convertGlslangStructToSpvType(type, glslangMembers, explicitLayout, qualifier);
         }
         break;
-    case glslang::EbtReference:
-        {
-            // Make the forward pointer, then recurse to convert the structure type, then
-            // patch up the forward pointer with a real pointer type.
-            if (forwardPointers.find(type.getReferentType()) == forwardPointers.end()) {
-                spv::Id forwardId = builder.makeForwardPointer(spv::StorageClassPhysicalStorageBufferEXT);
-                forwardPointers[type.getReferentType()] = forwardId;
-            }
-            spvType = forwardPointers[type.getReferentType()];
-            if (!forwardReferenceOnly) {
-                spv::Id referentType = convertGlslangToSpvType(*type.getReferentType());
-                builder.makePointerFromForwardPointer(spv::StorageClassPhysicalStorageBufferEXT,
-                                                      forwardPointers[type.getReferentType()],
-                                                      referentType);
-            }
-        }
-        break;
+    case glslang::EbtString:
+        // no type used for OpString
+        return 0;
     default:
         assert(0);
         break;
@@ -3090,6 +3720,23 @@
             spvType = builder.makeVectorType(spvType, type.getVectorSize());
     }
 
+    if (type.isCoopMat()) {
+        builder.addCapability(spv::CapabilityCooperativeMatrixNV);
+        builder.addExtension(spv::E_SPV_NV_cooperative_matrix);
+        if (type.getBasicType() == glslang::EbtFloat16)
+            builder.addCapability(spv::CapabilityFloat16);
+        if (type.getBasicType() == glslang::EbtUint8 ||
+            type.getBasicType() == glslang::EbtInt8) {
+            builder.addCapability(spv::CapabilityInt8);
+        }
+
+        spv::Id scope = makeArraySizeId(*type.getTypeParameters(), 1);
+        spv::Id rows = makeArraySizeId(*type.getTypeParameters(), 2);
+        spv::Id cols = makeArraySizeId(*type.getTypeParameters(), 3);
+
+        spvType = builder.makeCooperativeMatrixType(spvType, scope, rows, cols);
+    }
+
     if (type.isArray()) {
         int stride = 0;  // keep this 0 unless doing an explicit layout; 0 will mean no decoration, no stride
 
@@ -3128,10 +3775,12 @@
         if (type.isSizedArray())
             spvType = builder.makeArrayType(spvType, makeArraySizeId(*type.getArraySizes(), 0), stride);
         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);
             }
+#endif
             spvType = builder.makeRuntimeArray(spvType);
         }
         if (stride > 0)
@@ -3147,7 +3796,7 @@
 //
 bool TGlslangToSpvTraverser::filterMember(const glslang::TType& member)
 {
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
     auto& extensions = glslangIntermediate->getRequestedExtensions();
 
     if (member.getFieldName() == "gl_SecondaryViewportMaskNV" &&
@@ -3183,19 +3832,23 @@
 {
     // Create a vector of struct types for SPIR-V to consume
     std::vector<spv::Id> spvMembers;
-    int memberDelta = 0;  // how much the member's index changes from glslang to SPIR-V, normally 0, except sometimes for blocks
+    int memberDelta = 0;  // how much the member's index changes from glslang to SPIR-V, normally 0,
+                          // except sometimes for blocks
     std::vector<std::pair<glslang::TType*, glslang::TQualifier> > deferredForwardPointers;
     for (int i = 0; i < (int)glslangMembers->size(); i++) {
         glslang::TType& glslangMember = *(*glslangMembers)[i].type;
         if (glslangMember.hiddenMember()) {
             ++memberDelta;
             if (type.getBasicType() == glslang::EbtBlock)
-                memberRemapper[glslangMembers][i] = -1;
+                memberRemapper[glslangTypeToIdMap[glslangMembers]][i] = -1;
         } else {
             if (type.getBasicType() == glslang::EbtBlock) {
-                memberRemapper[glslangMembers][i] = i - memberDelta;
-                if (filterMember(glslangMember))
+                if (filterMember(glslangMember)) {
+                    memberDelta++;
+                    memberRemapper[glslangTypeToIdMap[glslangMembers]][i] = -1;
                     continue;
+                }
+                memberRemapper[glslangTypeToIdMap[glslangMembers]][i] = i - memberDelta;
             }
             // modify just this child's view of the qualifier
             glslang::TQualifier memberQualifier = glslangMember.getQualifier();
@@ -3211,15 +3864,17 @@
 
             // Make forward pointers for any pointer members, and create a list of members to
             // convert to spirv types after creating the struct.
-            if (glslangMember.getBasicType() == glslang::EbtReference) {
+            if (glslangMember.isReference()) {
                 if (forwardPointers.find(glslangMember.getReferentType()) == forwardPointers.end()) {
                     deferredForwardPointers.push_back(std::make_pair(&glslangMember, memberQualifier));
                 }
                 spvMembers.push_back(
-                    convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier, lastBufferBlockMember, true));
+                    convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier, lastBufferBlockMember,
+                        true));
             } else {
                 spvMembers.push_back(
-                    convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier, lastBufferBlockMember, false));
+                    convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier, lastBufferBlockMember,
+                        false));
             }
         }
     }
@@ -3232,7 +3887,7 @@
     // Decorate it
     decorateStructType(type, glslangMembers, explicitLayout, qualifier, spvType);
 
-    for (int i = 0; i < deferredForwardPointers.size(); ++i) {
+    for (int i = 0; i < (int)deferredForwardPointers.size(); ++i) {
         auto it = deferredForwardPointers[i];
         convertGlslangToSpvType(*it.first, explicitLayout, it.second, false);
     }
@@ -3253,7 +3908,7 @@
         glslang::TType& glslangMember = *(*glslangMembers)[i].type;
         int member = i;
         if (type.getBasicType() == glslang::EbtBlock) {
-            member = memberRemapper[glslangMembers][i];
+            member = memberRemapper[glslangTypeToIdMap[glslangMembers]][i];
             if (filterMember(glslangMember))
                 continue;
         }
@@ -3278,13 +3933,14 @@
                 glslangIntermediate->getSource() == glslang::EShSourceHlsl) {
                 builder.addMemberDecoration(spvType, member, TranslateInterpolationDecoration(memberQualifier));
                 builder.addMemberDecoration(spvType, member, TranslateAuxiliaryStorageDecoration(memberQualifier));
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
                 addMeshNVDecoration(spvType, member, memberQualifier);
 #endif
             }
         }
         builder.addMemberDecoration(spvType, member, TranslateInvariantDecoration(memberQualifier));
 
+#ifndef GLSLANG_WEB
         if (type.getBasicType() == glslang::EbtBlock &&
             qualifier.storage == glslang::EvqBuffer) {
             // Add memory decorations only to top-level members of shader storage block
@@ -3294,6 +3950,8 @@
                 builder.addMemberDecoration(spvType, member, memory[i]);
         }
 
+#endif
+
         // Location assignment was already completed correctly by the front end,
         // just track whether a member needs to be decorated.
         // Ignore member locations if the container is an array, as that's
@@ -3330,6 +3988,7 @@
         if (builtIn != spv::BuiltInMax)
             builder.addMemberDecoration(spvType, member, spv::DecorationBuiltIn, (int)builtIn);
 
+#ifndef GLSLANG_WEB
         // nonuniform
         builder.addMemberDecoration(spvType, member, TranslateNonUniformDecoration(glslangMember.getQualifier()));
 
@@ -3339,7 +3998,6 @@
                                         memberQualifier.semanticName);
         }
 
-#ifdef NV_EXTENSIONS
         if (builtIn == spv::BuiltInLayer) {
             // SPV_NV_viewport_array2 extension
             if (glslangMember.getQualifier().layoutViewportRelative){
@@ -3401,14 +4059,14 @@
     coherentFlags |= TranslateCoherent(type);
 
     unsigned int alignment = builder.getAccessChain().alignment;
-    alignment |= getBufferReferenceAlignment(type);
+    alignment |= type.getBufferReferenceAlignment();
 
     spv::Id loadedId = builder.accessChainLoad(TranslatePrecisionDecoration(type),
-                                               TranslateNonUniformDecoration(type.getQualifier()),
-                                               nominalTypeId,
-                                               spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerAvailableKHRMask),
-                                               TranslateMemoryScope(coherentFlags),
-                                               alignment);
+        TranslateNonUniformDecoration(type.getQualifier()),
+        nominalTypeId,
+        spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerAvailableKHRMask),
+        TranslateMemoryScope(coherentFlags),
+        alignment);
 
     // Need to convert to abstract types when necessary
     if (type.getBasicType() == glslang::EbtBool) {
@@ -3422,7 +4080,8 @@
             int vecSize = builder.getNumTypeComponents(nominalTypeId);
             spv::Id bvecType = builder.makeVectorType(builder.makeBoolType(), vecSize);
             if (nominalTypeId != bvecType)
-                loadedId = builder.createBinOp(spv::OpINotEqual, bvecType, loadedId, makeSmearedConstant(builder.makeUintConstant(0), vecSize));
+                loadedId = builder.createBinOp(spv::OpINotEqual, bvecType, loadedId,
+                    makeSmearedConstant(builder.makeUintConstant(0), vecSize));
         }
     }
 
@@ -3468,10 +4127,11 @@
     coherentFlags |= TranslateCoherent(type);
 
     unsigned int alignment = builder.getAccessChain().alignment;
-    alignment |= getBufferReferenceAlignment(type);
+    alignment |= type.getBufferReferenceAlignment();
 
     builder.accessChainStore(rvalue,
-                             spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerVisibleKHRMask),
+                             spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) &
+                                ~spv::MemoryAccessMakePointerVisibleKHRMask),
                              TranslateMemoryScope(coherentFlags), alignment);
 }
 
@@ -3507,6 +4167,20 @@
     // where the two types were the same type in GLSL. This requires member
     // by member copy, recursively.
 
+    // SPIR-V 1.4 added an instruction to do help do this.
+    if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4) {
+        // However, bool in uniform space is changed to int, so
+        // OpCopyLogical does not work for that.
+        // TODO: It would be more robust to do a full recursive verification of the types satisfying SPIR-V rules.
+        bool rBool = builder.containsType(builder.getTypeId(rValue), spv::OpTypeBool, 0);
+        bool lBool = builder.containsType(lType, spv::OpTypeBool, 0);
+        if (lBool == rBool) {
+            spv::Id logicalCopy = builder.createUnaryOp(spv::OpCopyLogical, lType, rValue);
+            accessChainStore(type, logicalCopy);
+            return;
+        }
+    }
+
     // If an array, copy element by element.
     if (type.isArray()) {
         glslang::TType glslangElementType(type, 0);
@@ -3518,7 +4192,8 @@
             // set up the target storage
             builder.clearAccessChain();
             builder.setAccessChainLValue(lValue);
-            builder.accessChainPush(builder.makeIntConstant(index), TranslateCoherent(type), getBufferReferenceAlignment(type));
+            builder.accessChainPush(builder.makeIntConstant(index), TranslateCoherent(type),
+                type.getBufferReferenceAlignment());
 
             // store the member
             multiTypeStore(glslangElementType, elementRValue);
@@ -3538,7 +4213,8 @@
             // set up the target storage
             builder.clearAccessChain();
             builder.setAccessChainLValue(lValue);
-            builder.accessChainPush(builder.makeIntConstant(m), TranslateCoherent(type), getBufferReferenceAlignment(type));
+            builder.accessChainPush(builder.makeIntConstant(m), TranslateCoherent(type),
+                type.getBufferReferenceAlignment());
 
             // store the member
             multiTypeStore(glslangMemberType, memberRValue);
@@ -3573,18 +4249,21 @@
 }
 
 // Given an array type, returns the integer stride required for that array
-int TGlslangToSpvTraverser::getArrayStride(const glslang::TType& arrayType, glslang::TLayoutPacking explicitLayout, glslang::TLayoutMatrix matrixLayout)
+int TGlslangToSpvTraverser::getArrayStride(const glslang::TType& arrayType, glslang::TLayoutPacking explicitLayout,
+    glslang::TLayoutMatrix matrixLayout)
 {
     int size;
     int stride;
-    glslangIntermediate->getMemberAlignment(arrayType, size, stride, explicitLayout, matrixLayout == glslang::ElmRowMajor);
+    glslangIntermediate->getMemberAlignment(arrayType, size, stride, explicitLayout,
+        matrixLayout == glslang::ElmRowMajor);
 
     return stride;
 }
 
 // Given a matrix type, or array (of array) of matrixes type, returns the integer stride required for that matrix
 // when used as a member of an interface block
-int TGlslangToSpvTraverser::getMatrixStride(const glslang::TType& matrixType, glslang::TLayoutPacking explicitLayout, glslang::TLayoutMatrix matrixLayout)
+int TGlslangToSpvTraverser::getMatrixStride(const glslang::TType& matrixType, glslang::TLayoutPacking explicitLayout,
+    glslang::TLayoutMatrix matrixLayout)
 {
     glslang::TType elementType;
     elementType.shallowCopy(matrixType);
@@ -3592,7 +4271,8 @@
 
     int size;
     int stride;
-    glslangIntermediate->getMemberAlignment(elementType, size, stride, explicitLayout, matrixLayout == glslang::ElmRowMajor);
+    glslangIntermediate->getMemberAlignment(elementType, size, stride, explicitLayout,
+        matrixLayout == glslang::ElmRowMajor);
 
     return stride;
 }
@@ -3603,8 +4283,8 @@
 // 'currentOffset' should be passed in already initialized, ready to modify, and reflecting
 // the migration of data from nextOffset -> currentOffset.  It should be -1 on the first call.
 // -1 means a non-forced member offset (no decoration needed).
-void TGlslangToSpvTraverser::updateMemberOffset(const glslang::TType& structType, const glslang::TType& memberType, int& currentOffset, int& nextOffset,
-                                                glslang::TLayoutPacking explicitLayout, glslang::TLayoutMatrix matrixLayout)
+void TGlslangToSpvTraverser::updateMemberOffset(const glslang::TType& structType, const glslang::TType& memberType,
+    int& currentOffset, int& nextOffset, glslang::TLayoutPacking explicitLayout, glslang::TLayoutMatrix matrixLayout)
 {
     // this will get a positive value when deemed necessary
     nextOffset = -1;
@@ -3634,7 +4314,8 @@
 
     int memberSize;
     int dummyStride;
-    int memberAlignment = glslangIntermediate->getMemberAlignment(memberType, memberSize, dummyStride, explicitLayout, matrixLayout == glslang::ElmRowMajor);
+    int memberAlignment = glslangIntermediate->getMemberAlignment(memberType, memberSize, dummyStride, explicitLayout,
+        matrixLayout == glslang::ElmRowMajor);
 
     // Adjust alignment for HLSL rules
     // TODO: make this consistent in early phases of code:
@@ -3653,7 +4334,8 @@
     glslang::RoundToPow2(currentOffset, memberAlignment);
 
     // Bump up to vec4 if there is a bad straddle
-    if (explicitLayout != glslang::ElpScalar && glslangIntermediate->improperStraddle(memberType, memberSize, currentOffset))
+    if (explicitLayout != glslang::ElpScalar && glslangIntermediate->improperStraddle(memberType, memberSize,
+        currentOffset))
         glslang::RoundToPow2(currentOffset, 16);
 
     nextOffset = currentOffset + memberSize;
@@ -3664,10 +4346,10 @@
     const glslang::TBuiltInVariable glslangBuiltIn = members[glslangMember].type->getQualifier().builtIn;
     switch (glslangBuiltIn)
     {
+    case glslang::EbvPointSize:
+#ifndef GLSLANG_WEB
     case glslang::EbvClipDistance:
     case glslang::EbvCullDistance:
-    case glslang::EbvPointSize:
-#ifdef NV_EXTENSIONS
     case glslang::EbvViewportMaskNV:
     case glslang::EbvSecondaryPositionNV:
     case glslang::EbvSecondaryViewportMaskNV:
@@ -3725,20 +4407,23 @@
 // Make all the functions, skeletally, without actually visiting their bodies.
 void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslFunctions)
 {
-    const auto getParamDecorations = [&](std::vector<spv::Decoration>& decorations, const glslang::TType& type, bool useVulkanMemoryModel) {
+    const auto getParamDecorations = [&](std::vector<spv::Decoration>& decorations, const glslang::TType& type,
+        bool useVulkanMemoryModel) {
         spv::Decoration paramPrecision = TranslatePrecisionDecoration(type);
         if (paramPrecision != spv::NoPrecision)
             decorations.push_back(paramPrecision);
         TranslateMemoryDecoration(type.getQualifier(), decorations, useVulkanMemoryModel);
-        if (type.getBasicType() == glslang::EbtReference) {
+        if (type.isReference()) {
             // Original and non-writable params pass the pointer directly and
             // use restrict/aliased, others are stored to a pointer in Function
             // memory and use RestrictPointer/AliasedPointer.
             if (originalParam(type.getQualifier().storage, type, false) ||
                 !writableParam(type.getQualifier().storage)) {
-                decorations.push_back(type.getQualifier().restrict ? spv::DecorationRestrict : spv::DecorationAliased);
+                decorations.push_back(type.getQualifier().isRestrict() ? spv::DecorationRestrict :
+                                                                         spv::DecorationAliased);
             } else {
-                decorations.push_back(type.getQualifier().restrict ? spv::DecorationRestrictPointerEXT : spv::DecorationAliasedPointerEXT);
+                decorations.push_back(type.getQualifier().isRestrict() ? spv::DecorationRestrictPointerEXT :
+                                                                         spv::DecorationAliasedPointerEXT);
             }
         }
     };
@@ -3766,8 +4451,12 @@
         std::vector<std::vector<spv::Decoration>> paramDecorations; // list of decorations per parameter
         glslang::TIntermSequence& parameters = glslFunction->getSequence()[0]->getAsAggregate()->getSequence();
 
+#ifdef ENABLE_HLSL
         bool implicitThis = (int)parameters.size() > 0 && parameters[0]->getAsSymbolNode()->getName() ==
                                                           glslangIntermediate->implicitThisName;
+#else
+        bool implicitThis = false;
+#endif
 
         paramDecorations.resize(parameters.size());
         for (int p = 0; p < (int)parameters.size(); ++p) {
@@ -3799,6 +4488,14 @@
             symbolValues[parameters[p]->getAsSymbolNode()->getId()] = function->getParamId(p);
             // give a name too
             builder.addName(function->getParamId(p), parameters[p]->getAsSymbolNode()->getName().c_str());
+
+            const glslang::TType& paramType = parameters[p]->getAsTyped()->getType();
+            if (paramType.contains8BitInt())
+                builder.addCapability(spv::CapabilityInt8);
+            if (paramType.contains16BitInt())
+                builder.addCapability(spv::CapabilityInt16);
+            if (paramType.contains16BitFloat())
+                builder.addCapability(spv::CapabilityFloat16);
         }
     }
 }
@@ -3809,7 +4506,8 @@
     builder.setBuildPoint(shaderEntry->getLastBlock());
     for (int i = 0; i < (int)initializers.size(); ++i) {
         glslang::TIntermAggregate* initializer = initializers[i]->getAsAggregate();
-        if (initializer && initializer->getOp() != glslang::EOpFunction && initializer->getOp() != glslang::EOpLinkerObjects) {
+        if (initializer && initializer->getOp() != glslang::EOpFunction && initializer->getOp() !=
+            glslang::EOpLinkerObjects) {
 
             // We're on a top-level node that's not a function.  Treat as an initializer, whose
             // code goes into the beginning of the entry point.
@@ -3837,20 +4535,22 @@
     builder.setBuildPoint(functionBlock);
 }
 
-void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& node, std::vector<spv::Id>& arguments)
+void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& node, std::vector<spv::Id>& arguments,
+    spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags)
 {
     const glslang::TIntermSequence& glslangArguments = node.getSequence();
 
     glslang::TSampler sampler = {};
     bool cubeCompare = false;
-#ifdef AMD_EXTENSIONS
+#ifndef GLSLANG_WEB
     bool f16ShadowCompare = false;
 #endif
     if (node.isTexture() || node.isImage()) {
         sampler = glslangArguments[0]->getAsTyped()->getType().getSampler();
         cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow;
-#ifdef AMD_EXTENSIONS
-        f16ShadowCompare = sampler.shadow && glslangArguments[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16;
+#ifndef GLSLANG_WEB
+        f16ShadowCompare = sampler.shadow &&
+            glslangArguments[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16;
 #endif
     }
 
@@ -3858,6 +4558,7 @@
         builder.clearAccessChain();
         glslangArguments[i]->traverse(this);
 
+#ifndef GLSLANG_WEB
         // Special case l-value operands
         bool lvalue = false;
         switch (node.getOp()) {
@@ -3878,7 +4579,6 @@
             if ((sampler.ms && i == 3) || (! sampler.ms && i == 2))
                 lvalue = true;
             break;
-#ifdef AMD_EXTENSIONS
         case glslang::EOpSparseTexture:
             if (((cubeCompare || f16ShadowCompare) && i == 3) || (! (cubeCompare || f16ShadowCompare) && i == 2))
                 lvalue = true;
@@ -3892,21 +4592,6 @@
             if  ((f16ShadowCompare && i == 4) || (! f16ShadowCompare && i == 3))
                 lvalue = true;
             break;
-#else
-        case glslang::EOpSparseTexture:
-            if ((cubeCompare && i == 3) || (! cubeCompare && i == 2))
-                lvalue = true;
-            break;
-        case glslang::EOpSparseTextureClamp:
-            if ((cubeCompare && i == 4) || (! cubeCompare && i == 3))
-                lvalue = true;
-            break;
-        case glslang::EOpSparseTextureLod:
-        case glslang::EOpSparseTextureOffset:
-            if (i == 3)
-                lvalue = true;
-            break;
-#endif
         case glslang::EOpSparseTextureFetch:
             if ((sampler.dim != glslang::EsdRect && i == 3) || (sampler.dim == glslang::EsdRect && i == 2))
                 lvalue = true;
@@ -3915,7 +4600,6 @@
             if ((sampler.dim != glslang::EsdRect && i == 4) || (sampler.dim == glslang::EsdRect && i == 3))
                 lvalue = true;
             break;
-#ifdef AMD_EXTENSIONS
         case glslang::EOpSparseTextureLodOffset:
         case glslang::EOpSparseTextureGrad:
         case glslang::EOpSparseTextureOffsetClamp:
@@ -3931,23 +4615,6 @@
             if ((f16ShadowCompare && i == 7) || (! f16ShadowCompare && i == 6))
                 lvalue = true;
             break;
-#else
-        case glslang::EOpSparseTextureLodOffset:
-        case glslang::EOpSparseTextureGrad:
-        case glslang::EOpSparseTextureOffsetClamp:
-            if (i == 4)
-                lvalue = true;
-            break;
-        case glslang::EOpSparseTextureGradOffset:
-        case glslang::EOpSparseTextureGradClamp:
-            if (i == 5)
-                lvalue = true;
-            break;
-        case glslang::EOpSparseTextureGradOffsetClamp:
-            if (i == 6)
-                lvalue = true;
-            break;
-#endif
         case glslang::EOpSparseTextureGather:
             if ((sampler.shadow && i == 3) || (! sampler.shadow && i == 2))
                 lvalue = true;
@@ -3957,7 +4624,6 @@
             if ((sampler.shadow && i == 4) || (! sampler.shadow && i == 3))
                 lvalue = true;
             break;
-#ifdef AMD_EXTENSIONS
         case glslang::EOpSparseTextureGatherLod:
             if (i == 3)
                 lvalue = true;
@@ -3971,8 +4637,6 @@
             if (i == 3)
                 lvalue = true;
             break;
-#endif
-#ifdef NV_EXTENSIONS
         case glslang::EOpImageSampleFootprintNV:
             if (i == 4)
                 lvalue = true;
@@ -3990,14 +4654,16 @@
             if (i == 7)
                 lvalue = true;
             break;
-#endif
         default:
             break;
         }
 
-        if (lvalue)
+        if (lvalue) {
             arguments.push_back(builder.accessChainGetLValue());
-        else
+            lvalueCoherentFlags = builder.getAccessChain().coherentFlags;
+            lvalueCoherentFlags |= TranslateCoherent(glslangArguments[i]->getAsTyped()->getType());
+        } else
+#endif
             arguments.push_back(accessChainLoad(glslangArguments[i]->getAsTyped()->getType()));
     }
 }
@@ -4018,18 +4684,33 @@
 
     // Process a GLSL texturing op (will be SPV image)
 
-    const glslang::TType &imageType = node->getAsAggregate() ? node->getAsAggregate()->getSequence()[0]->getAsTyped()->getType()
-                                                             : node->getAsUnaryNode()->getOperand()->getAsTyped()->getType();
+    const glslang::TType &imageType = node->getAsAggregate()
+                                        ? node->getAsAggregate()->getSequence()[0]->getAsTyped()->getType()
+                                        : node->getAsUnaryNode()->getOperand()->getAsTyped()->getType();
     const glslang::TSampler sampler = imageType.getSampler();
-#ifdef AMD_EXTENSIONS
+#ifdef GLSLANG_WEB
+    const bool f16ShadowCompare = false;
+#else
     bool f16ShadowCompare = (sampler.shadow && node->getAsAggregate())
-                                ? node->getAsAggregate()->getSequence()[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16
-                                : false;
+            ? node->getAsAggregate()->getSequence()[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16
+            : false;
 #endif
 
+    const auto signExtensionMask = [&]() {
+        if (builder.getSpvVersion() >= spv::Spv_1_4) {
+            if (sampler.type == glslang::EbtUint)
+                return spv::ImageOperandsZeroExtendMask;
+            else if (sampler.type == glslang::EbtInt)
+                return spv::ImageOperandsSignExtendMask;
+        }
+        return spv::ImageOperandsMaskNone;
+    };
+
+    spv::Builder::AccessChain::CoherentFlags lvalueCoherentFlags;
+
     std::vector<spv::Id> arguments;
     if (node->getAsAggregate())
-        translateArguments(*node->getAsAggregate(), arguments);
+        translateArguments(*node->getAsAggregate(), arguments, lvalueCoherentFlags);
     else
         translateArguments(*node->getAsUnaryNode(), arguments);
     spv::Decoration precision = TranslatePrecisionDecoration(node->getOperationPrecision());
@@ -4056,6 +4737,7 @@
                 return builder.createTextureQueryCall(spv::OpImageQuerySizeLod, params, isUnsignedResult);
             } else
                 return builder.createTextureQueryCall(spv::OpImageQuerySize, params, isUnsignedResult);
+#ifndef GLSLANG_WEB
         case glslang::EOpImageQuerySamples:
         case glslang::EOpTextureQuerySamples:
             return builder.createTextureQueryCall(spv::OpImageQuerySamples, params, isUnsignedResult);
@@ -4066,6 +4748,7 @@
             return builder.createTextureQueryCall(spv::OpImageQueryLevels, params, isUnsignedResult);
         case glslang::EOpSparseTexelsResident:
             return builder.createUnaryOp(spv::OpImageSparseTexelsResident, builder.makeBoolType(), arguments[0]);
+#endif
         default:
             assert(0);
             break;
@@ -4105,11 +4788,17 @@
             spv::IdImmediate coord = { true,
                 builder.makeCompositeConstant(builder.makeVectorType(builder.makeIntType(32), 2), comps) };
             operands.push_back(coord);
-            if (sampler.ms) {
-                spv::IdImmediate imageOperands = { false, spv::ImageOperandsSampleMask };
+            spv::IdImmediate imageOperands = { false, spv::ImageOperandsMaskNone };
+            imageOperands.word = imageOperands.word | signExtensionMask();
+            if (sampler.isMultiSample()) {
+                imageOperands.word = imageOperands.word | spv::ImageOperandsSampleMask;
+            }
+            if (imageOperands.word != spv::ImageOperandsMaskNone) {
                 operands.push_back(imageOperands);
-                spv::IdImmediate imageOperand = { true, *(opIt++) };
-                operands.push_back(imageOperand);
+                if (sampler.isMultiSample()) {
+                    spv::IdImmediate imageOperand = { true, *(opIt++) };
+                    operands.push_back(imageOperand);
+                }
             }
             spv::Id result = builder.createOp(spv::OpImageRead, resultType(), operands);
             builder.setPrecision(result, precision);
@@ -4118,25 +4807,20 @@
 
         spv::IdImmediate coord = { true, *(opIt++) };
         operands.push_back(coord);
-#ifdef AMD_EXTENSIONS
         if (node->getOp() == glslang::EOpImageLoad || node->getOp() == glslang::EOpImageLoadLod) {
-#else
-        if (node->getOp() == glslang::EOpImageLoad) {
-#endif
             spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone;
-            if (sampler.ms) {
+            if (sampler.isMultiSample()) {
                 mask = mask | spv::ImageOperandsSampleMask;
             }
-#ifdef AMD_EXTENSIONS
             if (cracked.lod) {
                 builder.addExtension(spv::E_SPV_AMD_shader_image_load_store_lod);
                 builder.addCapability(spv::CapabilityImageReadWriteLodAMD);
                 mask = mask | spv::ImageOperandsLodMask;
             }
-#endif
             mask = mask | TranslateImageOperands(TranslateCoherent(imageType));
             mask = (spv::ImageOperandsMask)(mask & ~spv::ImageOperandsMakeTexelAvailableKHRMask);
-            if (mask) {
+            mask = mask | signExtensionMask();
+            if (mask != spv::ImageOperandsMaskNone) {
                 spv::IdImmediate imageOperands = { false, (unsigned int)mask };
                 operands.push_back(imageOperands);
             }
@@ -4144,14 +4828,13 @@
                 spv::IdImmediate imageOperand = { true, *opIt++ };
                 operands.push_back(imageOperand);
             }
-#ifdef AMD_EXTENSIONS
             if (mask & spv::ImageOperandsLodMask) {
                 spv::IdImmediate imageOperand = { true, *opIt++ };
                 operands.push_back(imageOperand);
             }
-#endif
             if (mask & spv::ImageOperandsMakeTexelVisibleKHRMask) {
-                spv::IdImmediate imageOperand = { true, builder.makeUintConstant(TranslateMemoryScope(TranslateCoherent(imageType))) };
+                spv::IdImmediate imageOperand = { true,
+                                    builder.makeUintConstant(TranslateMemoryScope(TranslateCoherent(imageType))) };
                 operands.push_back(imageOperand);
             }
 
@@ -4166,18 +4849,10 @@
                 result[0] = builder.createConstructor(precision, result, convertGlslangToSpvType(node->getType()));
 
             return result[0];
-#ifdef AMD_EXTENSIONS
         } else if (node->getOp() == glslang::EOpImageStore || node->getOp() == glslang::EOpImageStoreLod) {
-#else
-        } else if (node->getOp() == glslang::EOpImageStore) {
-#endif
 
             // Push the texel value before the operands
-#ifdef AMD_EXTENSIONS
-            if (sampler.ms || cracked.lod) {
-#else
-            if (sampler.ms) {
-#endif
+            if (sampler.isMultiSample() || cracked.lod) {
                 spv::IdImmediate texel = { true, *(opIt + 1) };
                 operands.push_back(texel);
             } else {
@@ -4186,19 +4861,18 @@
             }
 
             spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone;
-            if (sampler.ms) {
+            if (sampler.isMultiSample()) {
                 mask = mask | spv::ImageOperandsSampleMask;
             }
-#ifdef AMD_EXTENSIONS
             if (cracked.lod) {
                 builder.addExtension(spv::E_SPV_AMD_shader_image_load_store_lod);
                 builder.addCapability(spv::CapabilityImageReadWriteLodAMD);
                 mask = mask | spv::ImageOperandsLodMask;
             }
-#endif
             mask = mask | TranslateImageOperands(TranslateCoherent(imageType));
             mask = (spv::ImageOperandsMask)(mask & ~spv::ImageOperandsMakeTexelVisibleKHRMask);
-            if (mask) {
+            mask = mask | signExtensionMask();
+            if (mask != spv::ImageOperandsMaskNone) {
                 spv::IdImmediate imageOperands = { false, (unsigned int)mask };
                 operands.push_back(imageOperands);
             }
@@ -4206,14 +4880,13 @@
                 spv::IdImmediate imageOperand = { true, *opIt++ };
                 operands.push_back(imageOperand);
             }
-#ifdef AMD_EXTENSIONS
             if (mask & spv::ImageOperandsLodMask) {
                 spv::IdImmediate imageOperand = { true, *opIt++ };
                 operands.push_back(imageOperand);
             }
-#endif
             if (mask & spv::ImageOperandsMakeTexelAvailableKHRMask) {
-                spv::IdImmediate imageOperand = { true, builder.makeUintConstant(TranslateMemoryScope(TranslateCoherent(imageType))) };
+                spv::IdImmediate imageOperand = { true,
+                    builder.makeUintConstant(TranslateMemoryScope(TranslateCoherent(imageType))) };
                 operands.push_back(imageOperand);
             }
 
@@ -4221,30 +4894,26 @@
             if (builder.getImageTypeFormat(builder.getImageType(operands.front().word)) == spv::ImageFormatUnknown)
                 builder.addCapability(spv::CapabilityStorageImageWriteWithoutFormat);
             return spv::NoResult;
-#ifdef AMD_EXTENSIONS
-        } else if (node->getOp() == glslang::EOpSparseImageLoad || node->getOp() == glslang::EOpSparseImageLoadLod) {
-#else
-        } else if (node->getOp() == glslang::EOpSparseImageLoad) {
-#endif
+        } else if (node->getOp() == glslang::EOpSparseImageLoad ||
+                   node->getOp() == glslang::EOpSparseImageLoadLod) {
             builder.addCapability(spv::CapabilitySparseResidency);
             if (builder.getImageTypeFormat(builder.getImageType(operands.front().word)) == spv::ImageFormatUnknown)
                 builder.addCapability(spv::CapabilityStorageImageReadWithoutFormat);
 
             spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone;
-            if (sampler.ms) {
+            if (sampler.isMultiSample()) {
                 mask = mask | spv::ImageOperandsSampleMask;
             }
-#ifdef AMD_EXTENSIONS
             if (cracked.lod) {
                 builder.addExtension(spv::E_SPV_AMD_shader_image_load_store_lod);
                 builder.addCapability(spv::CapabilityImageReadWriteLodAMD);
 
                 mask = mask | spv::ImageOperandsLodMask;
             }
-#endif
             mask = mask | TranslateImageOperands(TranslateCoherent(imageType));
             mask = (spv::ImageOperandsMask)(mask & ~spv::ImageOperandsMakeTexelAvailableKHRMask);
-            if (mask) {
+            mask = mask | signExtensionMask();
+            if (mask != spv::ImageOperandsMaskNone) {
                 spv::IdImmediate imageOperands = { false, (unsigned int)mask };
                 operands.push_back(imageOperands);
             }
@@ -4252,14 +4921,13 @@
                 spv::IdImmediate imageOperand = { true, *opIt++ };
                 operands.push_back(imageOperand);
             }
-#ifdef AMD_EXTENSIONS
             if (mask & spv::ImageOperandsLodMask) {
                 spv::IdImmediate imageOperand = { true, *opIt++ };
                 operands.push_back(imageOperand);
             }
-#endif
             if (mask & spv::ImageOperandsMakeTexelVisibleKHRMask) {
-                spv::IdImmediate imageOperand = { true, builder.makeUintConstant(TranslateMemoryScope(TranslateCoherent(imageType))) };
+                spv::IdImmediate imageOperand = { true, builder.makeUintConstant(TranslateMemoryScope(
+                    TranslateCoherent(imageType))) };
                 operands.push_back(imageOperand);
             }
 
@@ -4280,29 +4948,33 @@
             // GLSL "IMAGE_PARAMS" will involve in constructing an image texel pointer and this pointer,
             // as the first source operand, is required by SPIR-V atomic operations.
             // For non-MS, the sample value should be 0
-            spv::IdImmediate sample = { true, sampler.ms ? *(opIt++) : builder.makeUintConstant(0) };
+            spv::IdImmediate sample = { true, sampler.isMultiSample() ? *(opIt++) : builder.makeUintConstant(0) };
             operands.push_back(sample);
 
             spv::Id resultTypeId;
             // imageAtomicStore has a void return type so base the pointer type on
             // the type of the value operand.
             if (node->getOp() == glslang::EOpImageAtomicStore) {
-                resultTypeId = builder.makePointer(spv::StorageClassImage, builder.getTypeId(operands[2].word));                
+                resultTypeId = builder.makePointer(spv::StorageClassImage, builder.getTypeId(*opIt));
             } else {
                 resultTypeId = builder.makePointer(spv::StorageClassImage, resultType());
             }
             spv::Id pointer = builder.createOp(spv::OpImageTexelPointer, resultTypeId, operands);
+            if (imageType.getQualifier().nonUniform) {
+                builder.addDecoration(pointer, spv::DecorationNonUniformEXT);
+            }
 
             std::vector<spv::Id> operands;
             operands.push_back(pointer);
             for (; opIt != arguments.end(); ++opIt)
                 operands.push_back(*opIt);
 
-            return createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType());
+            return createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType(),
+                lvalueCoherentFlags);
         }
     }
 
-#ifdef AMD_EXTENSIONS
+#ifndef GLSLANG_WEB
     // Check for fragment mask functions other than queries
     if (cracked.fragMask) {
         assert(sampler.ms);
@@ -4323,7 +4995,8 @@
             std::vector<spv::Id> comps;
             comps.push_back(zero);
             comps.push_back(zero);
-            operands.push_back(builder.makeCompositeConstant(builder.makeVectorType(builder.makeIntType(32), 2), comps));
+            operands.push_back(builder.makeCompositeConstant(
+                builder.makeVectorType(builder.makeIntType(32), 2), comps));
         }
 
         for (; opIt != arguments.end(); ++opIt)
@@ -4343,45 +5016,32 @@
 
     // Check for texture functions other than queries
     bool sparse = node->isSparseTexture();
-#ifdef NV_EXTENSIONS
     bool imageFootprint = node->isImageFootprint();
-#endif
-
-    bool cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow;
+    bool cubeCompare = sampler.dim == glslang::EsdCube && sampler.isArrayed() && sampler.isShadow();
 
     // check for bias argument
     bool bias = false;
-#ifdef AMD_EXTENSIONS
     if (! cracked.lod && ! cracked.grad && ! cracked.fetch && ! cubeCompare) {
-#else
-    if (! cracked.lod && ! cracked.gather && ! cracked.grad && ! cracked.fetch && ! cubeCompare) {
-#endif
         int nonBiasArgCount = 2;
-#ifdef AMD_EXTENSIONS
         if (cracked.gather)
             ++nonBiasArgCount; // comp argument should be present when bias argument is present
 
         if (f16ShadowCompare)
             ++nonBiasArgCount;
-#endif
         if (cracked.offset)
             ++nonBiasArgCount;
-#ifdef AMD_EXTENSIONS
         else if (cracked.offsets)
             ++nonBiasArgCount;
-#endif
         if (cracked.grad)
             nonBiasArgCount += 2;
         if (cracked.lodClamp)
             ++nonBiasArgCount;
         if (sparse)
             ++nonBiasArgCount;
-#ifdef NV_EXTENSIONS
         if (imageFootprint)
             //Following three extra arguments
             // int granularity, bool coarse, out gl_TextureFootprint2DNV footprint
             nonBiasArgCount += 3;
-#endif
         if ((int)arguments.size() > nonBiasArgCount)
             bias = true;
     }
@@ -4393,7 +5053,7 @@
             params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler);
     }
 
-#ifdef AMD_EXTENSIONS
+#ifndef GLSLANG_WEB
     if (cracked.gather) {
         const auto& sourceExtensions = glslangIntermediate->getRequestedExtensions();
         if (bias || cracked.lod ||
@@ -4411,11 +5071,7 @@
     bool noImplicitLod = false;
 
     // sort out where Dref is coming from
-#ifdef AMD_EXTENSIONS
     if (cubeCompare || f16ShadowCompare) {
-#else
-    if (cubeCompare) {
-#endif
         params.Dref = arguments[2];
         ++extraArgs;
     } else if (sampler.shadow && cracked.gather) {
@@ -4429,26 +5085,23 @@
         else
             dRefComp = builder.getNumComponents(params.coords) - 1;
         indexes.push_back(dRefComp);
-        params.Dref = builder.createCompositeExtract(params.coords, builder.getScalarTypeId(builder.getTypeId(params.coords)), indexes);
+        params.Dref = builder.createCompositeExtract(params.coords,
+            builder.getScalarTypeId(builder.getTypeId(params.coords)), indexes);
     }
 
     // lod
     if (cracked.lod) {
         params.lod = arguments[2 + extraArgs];
         ++extraArgs;
-    } else if (glslangIntermediate->getStage() != EShLangFragment
-#ifdef NV_EXTENSIONS
-        // NV_compute_shader_derivatives layout qualifiers allow for implicit LODs
-           && !(glslangIntermediate->getStage() == EShLangCompute &&
-                (glslangIntermediate->getLayoutDerivativeModeNone() != glslang::LayoutDerivativeNone))
-#endif
-        ) {
+    } else if (glslangIntermediate->getStage() != EShLangFragment &&
+               !(glslangIntermediate->getStage() == EShLangCompute &&
+                 glslangIntermediate->hasLayoutDerivativeModeNone())) {
         // we need to invent the default lod for an explicit lod instruction for a non-fragment stage
         noImplicitLod = true;
     }
 
     // multisample
-    if (sampler.ms) {
+    if (sampler.isMultiSample()) {
         params.sample = arguments[2 + extraArgs]; // For MS, "sample" should be specified
         ++extraArgs;
     }
@@ -4469,6 +5122,7 @@
         ++extraArgs;
     }
 
+#ifndef GLSLANG_WEB
     // lod clamp
     if (cracked.lodClamp) {
         params.lodClamp = arguments[2 + extraArgs];
@@ -4479,7 +5133,6 @@
         params.texelOut = arguments[2 + extraArgs];
         ++extraArgs;
     }
-
     // gather component
     if (cracked.gather && ! sampler.shadow) {
         // default component is 0, if missing, otherwise an argument
@@ -4489,7 +5142,6 @@
         } else
             params.component = builder.makeIntConstant(0);
     }
-#ifdef NV_EXTENSIONS
     spv::Id  resultStruct = spv::NoResult;
     if (imageFootprint) {
         //Following three extra arguments
@@ -4506,7 +5158,7 @@
         ++extraArgs;
     }
 
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
     if (imageFootprint) {
         builder.addExtension(spv::E_SPV_NV_shader_image_footprint);
         builder.addCapability(spv::CapabilityImageFootprintNV);
@@ -4546,7 +5198,8 @@
         spv::Id resType = builder.makeStructType(members, "ResType");
 
         //call ImageFootprintNV
-        spv::Id res = builder.createTextureCall(precision, resType, sparse, cracked.fetch, cracked.proj, cracked.gather, noImplicitLod, params);
+        spv::Id res = builder.createTextureCall(precision, resType, sparse, cracked.fetch, cracked.proj,
+                                                cracked.gather, noImplicitLod, params, signExtensionMask());
         
         //copy resType (SPIR-V type) to resultStructType(OpenGL type)
         for (int i = 0; i < 5; i++) {
@@ -4558,7 +5211,8 @@
             flags.clear();
 
             builder.accessChainPush(builder.makeIntConstant(i), flags, 0);
-            builder.accessChainStore(builder.createCompositeExtract(res, builder.getContainedTypeId(resType, i+1), i+1));
+            builder.accessChainStore(builder.createCompositeExtract(res, builder.getContainedTypeId(resType, i+1),
+                i+1));
         }
         return builder.createCompositeExtract(res, resultType(), 0);
     }
@@ -4581,13 +5235,13 @@
         // copy the projective coordinate if we have to
         if (projTargetComp != projSourceComp) {
             spv::Id projComp = builder.createCompositeExtract(params.coords,
-                                                              builder.getScalarTypeId(builder.getTypeId(params.coords)),
-                                                              projSourceComp);
+                                    builder.getScalarTypeId(builder.getTypeId(params.coords)), projSourceComp);
             params.coords = builder.createCompositeInsert(projComp, params.coords,
-                                                          builder.getTypeId(params.coords), projTargetComp);
+                                    builder.getTypeId(params.coords), projTargetComp);
         }
     }
 
+#ifndef GLSLANG_WEB
     // nonprivate
     if (imageType.getQualifier().nonprivate) {
         params.nonprivate = true;
@@ -4597,9 +5251,11 @@
     if (imageType.getQualifier().volatil) {
         params.volatil = true;
     }
+#endif
 
     std::vector<spv::Id> result( 1, 
-        builder.createTextureCall(precision, resultType(), sparse, cracked.fetch, cracked.proj, cracked.gather, noImplicitLod, params)
+        builder.createTextureCall(precision, resultType(), sparse, cracked.fetch, cracked.proj, cracked.gather,
+                                  noImplicitLod, params, signExtensionMask())
     );
 
     if (components != node->getType().getVectorSize())
@@ -4661,7 +5317,8 @@
             ++lValueCount;
         } else if (writableParam(qualifiers[a])) {
             // need space to hold the copy
-            arg = builder.createVariable(spv::StorageClassFunction, builder.getContainedTypeId(function->getParamType(a)), "param");
+            arg = builder.createVariable(spv::StorageClassFunction,
+                builder.getContainedTypeId(function->getParamType(a)), "param");
             if (qualifiers[a] == glslang::EvqIn || qualifiers[a] == glslang::EvqInOut) {
                 // need to copy the input into output space
                 builder.setAccessChain(lValues[lValueCount]);
@@ -4830,6 +5487,30 @@
         binOp = spv::OpLogicalNotEqual;
         break;
 
+    case glslang::EOpAbsDifference:
+        binOp = isUnsigned ? spv::OpAbsUSubINTEL : spv::OpAbsISubINTEL;
+        break;
+
+    case glslang::EOpAddSaturate:
+        binOp = isUnsigned ? spv::OpUAddSatINTEL : spv::OpIAddSatINTEL;
+        break;
+
+    case glslang::EOpSubSaturate:
+        binOp = isUnsigned ? spv::OpUSubSatINTEL : spv::OpISubSatINTEL;
+        break;
+
+    case glslang::EOpAverage:
+        binOp = isUnsigned ? spv::OpUAverageINTEL : spv::OpIAverageINTEL;
+        break;
+
+    case glslang::EOpAverageRounded:
+        binOp = isUnsigned ? spv::OpUAverageRoundedINTEL : spv::OpIAverageRoundedINTEL;
+        break;
+
+    case glslang::EOpMul32x16:
+        binOp = isUnsigned ? spv::OpUMul32x16INTEL : spv::OpIMul32x16INTEL;
+        break;
+
     case glslang::EOpLessThan:
     case glslang::EOpGreaterThan:
     case glslang::EOpLessThanEqual:
@@ -4847,7 +5528,8 @@
     // handle mapped binary operations (should be non-comparison)
     if (binOp != spv::OpNop) {
         assert(comparison == false);
-        if (builder.isMatrix(left) || builder.isMatrix(right))
+        if (builder.isMatrix(left) || builder.isMatrix(right) ||
+            builder.isCooperativeMatrix(left) || builder.isCooperativeMatrix(right))
             return createBinaryMatrixOperation(binOp, decorations, typeId, left, right);
 
         // No matrix involved; make both operands be the same number of components, if needed
@@ -4855,8 +5537,8 @@
             builder.promoteScalar(decorations.precision, left, right);
 
         spv::Id result = builder.createBinOp(binOp, typeId, left, right);
-        builder.addDecoration(result, decorations.noContraction);
-        builder.addDecoration(result, decorations.nonUniform);
+        decorations.addNoContraction(builder, result);
+        decorations.addNonUniform(builder, result);
         return builder.setPrecision(result, decorations.precision);
     }
 
@@ -4868,7 +5550,7 @@
     if (reduceComparison && (op == glslang::EOpEqual || op == glslang::EOpNotEqual)
                          && (builder.isVector(left) || builder.isMatrix(left) || builder.isAggregate(left))) {
         spv::Id result = builder.createCompositeCompare(decorations.precision, left, right, op == glslang::EOpEqual);
-        builder.addDecoration(result, decorations.nonUniform);
+        decorations.addNonUniform(builder, result);
         return result;
     }
 
@@ -4929,8 +5611,8 @@
 
     if (binOp != spv::OpNop) {
         spv::Id result = builder.createBinOp(binOp, typeId, left, right);
-        builder.addDecoration(result, decorations.noContraction);
-        builder.addDecoration(result, decorations.nonUniform);
+        decorations.addNoContraction(builder, result);
+        decorations.addNonUniform(builder, result);
         return builder.setPrecision(result, decorations.precision);
     }
 
@@ -4968,7 +5650,7 @@
             firstClass = false;
         break;
     case spv::OpMatrixTimesScalar:
-        if (builder.isMatrix(right))
+        if (builder.isMatrix(right) || builder.isCooperativeMatrix(right))
             std::swap(left, right);
         assert(builder.isScalar(right));
         break;
@@ -4989,10 +5671,13 @@
         break;
     }
 
+    if (builder.isCooperativeMatrix(left) || builder.isCooperativeMatrix(right))
+        firstClass = true;
+
     if (firstClass) {
         spv::Id result = builder.createBinOp(op, typeId, left, right);
-        builder.addDecoration(result, decorations.noContraction);
-        builder.addDecoration(result, decorations.nonUniform);
+        decorations.addNoContraction(builder, result);
+        decorations.addNonUniform(builder, result);
         return builder.setPrecision(result, decorations.precision);
     }
 
@@ -5031,14 +5716,14 @@
             spv::Id  leftVec =  leftMat ? builder.createCompositeExtract( left, vecType, indexes) : smearVec;
             spv::Id rightVec = rightMat ? builder.createCompositeExtract(right, vecType, indexes) : smearVec;
             spv::Id result = builder.createBinOp(op, vecType, leftVec, rightVec);
-            builder.addDecoration(result, decorations.noContraction);
-            builder.addDecoration(result, decorations.nonUniform);
+            decorations.addNoContraction(builder, result);
+            decorations.addNonUniform(builder, result);
             results.push_back(builder.setPrecision(result, decorations.precision));
         }
 
         // put the pieces together
         spv::Id result = builder.setPrecision(builder.createCompositeConstruct(typeId, results), decorations.precision);
-        builder.addDecoration(result, decorations.nonUniform);
+        decorations.addNonUniform(builder, result);
         return result;
     }
     default:
@@ -5048,7 +5733,7 @@
 }
 
 spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDecorations& decorations, spv::Id typeId,
-                                                     spv::Id operand, glslang::TBasicType typeProxy)
+    spv::Id operand, glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags)
 {
     spv::Op unaryOp = spv::OpNop;
     int extBuiltins = -1;
@@ -5216,6 +5901,7 @@
     case glslang::EOpUnpackHalf2x16:
         libCall = spv::GLSLstd450UnpackHalf2x16;
         break;
+#ifndef GLSLANG_WEB
     case glslang::EOpPackSnorm4x8:
         libCall = spv::GLSLstd450PackSnorm4x8;
         break;
@@ -5234,6 +5920,7 @@
     case glslang::EOpUnpackDouble2x32:
         libCall = spv::GLSLstd450UnpackDouble2x32;
         break;
+#endif
 
     case glslang::EOpPackInt2x32:
     case glslang::EOpUnpackInt2x32:
@@ -5267,31 +5954,7 @@
     case glslang::EOpFwidth:
         unaryOp = spv::OpFwidth;
         break;
-    case glslang::EOpDPdxFine:
-        unaryOp = spv::OpDPdxFine;
-        break;
-    case glslang::EOpDPdyFine:
-        unaryOp = spv::OpDPdyFine;
-        break;
-    case glslang::EOpFwidthFine:
-        unaryOp = spv::OpFwidthFine;
-        break;
-    case glslang::EOpDPdxCoarse:
-        unaryOp = spv::OpDPdxCoarse;
-        break;
-    case glslang::EOpDPdyCoarse:
-        unaryOp = spv::OpDPdyCoarse;
-        break;
-    case glslang::EOpFwidthCoarse:
-        unaryOp = spv::OpFwidthCoarse;
-        break;
-    case glslang::EOpInterpolateAtCentroid:
-#ifdef AMD_EXTENSIONS
-        if (typeProxy == glslang::EbtFloat16)
-            builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
-#endif
-        libCall = spv::GLSLstd450InterpolateAtCentroid;
-        break;
+
     case glslang::EOpAny:
         unaryOp = spv::OpAny;
         break;
@@ -5312,6 +5975,48 @@
             libCall = spv::GLSLstd450SSign;
         break;
 
+#ifndef GLSLANG_WEB
+    case glslang::EOpDPdxFine:
+        unaryOp = spv::OpDPdxFine;
+        break;
+    case glslang::EOpDPdyFine:
+        unaryOp = spv::OpDPdyFine;
+        break;
+    case glslang::EOpFwidthFine:
+        unaryOp = spv::OpFwidthFine;
+        break;
+    case glslang::EOpDPdxCoarse:
+        unaryOp = spv::OpDPdxCoarse;
+        break;
+    case glslang::EOpDPdyCoarse:
+        unaryOp = spv::OpDPdyCoarse;
+        break;
+    case glslang::EOpFwidthCoarse:
+        unaryOp = spv::OpFwidthCoarse;
+        break;
+    case glslang::EOpRayQueryProceed:
+        unaryOp = spv::OpRayQueryProceedKHR;
+        break;
+    case glslang::EOpRayQueryGetRayTMin:
+        unaryOp = spv::OpRayQueryGetRayTMinKHR;
+        break;
+    case glslang::EOpRayQueryGetRayFlags:
+        unaryOp = spv::OpRayQueryGetRayFlagsKHR;
+        break;
+    case glslang::EOpRayQueryGetWorldRayOrigin:
+        unaryOp = spv::OpRayQueryGetWorldRayOriginKHR;
+        break;
+    case glslang::EOpRayQueryGetWorldRayDirection:
+        unaryOp = spv::OpRayQueryGetWorldRayDirectionKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionCandidateAABBOpaque:
+        unaryOp = spv::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR;
+        break;
+    case glslang::EOpInterpolateAtCentroid:
+        if (typeProxy == glslang::EbtFloat16)
+            builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
+        libCall = spv::GLSLstd450InterpolateAtCentroid;
+        break;
     case glslang::EOpAtomicCounterIncrement:
     case glslang::EOpAtomicCounterDecrement:
     case glslang::EOpAtomicCounter:
@@ -5319,7 +6024,7 @@
         // Handle all of the atomics in one place, in createAtomicOperation()
         std::vector<spv::Id> operands;
         operands.push_back(operand);
-        return createAtomicOperation(op, decorations.precision, typeId, operands, typeProxy);
+        return createAtomicOperation(op, decorations.precision, typeId, operands, typeProxy, lvalueCoherentFlags);
     }
 
     case glslang::EOpBitFieldReverse:
@@ -5338,12 +6043,23 @@
             libCall = spv::GLSLstd450FindSMsb;
         break;
 
+    case glslang::EOpCountLeadingZeros:
+        builder.addCapability(spv::CapabilityIntegerFunctions2INTEL);
+        builder.addExtension("SPV_INTEL_shader_integer_functions2");
+        unaryOp = spv::OpUCountLeadingZerosINTEL;
+        break;
+
+    case glslang::EOpCountTrailingZeros:
+        builder.addCapability(spv::CapabilityIntegerFunctions2INTEL);
+        builder.addExtension("SPV_INTEL_shader_integer_functions2");
+        unaryOp = spv::OpUCountTrailingZerosINTEL;
+        break;
+
     case glslang::EOpBallot:
     case glslang::EOpReadFirstInvocation:
     case glslang::EOpAnyInvocation:
     case glslang::EOpAllInvocations:
     case glslang::EOpAllInvocationsEqual:
-#ifdef AMD_EXTENSIONS
     case glslang::EOpMinInvocations:
     case glslang::EOpMaxInvocations:
     case glslang::EOpAddInvocations:
@@ -5362,7 +6078,6 @@
     case glslang::EOpMinInvocationsExclusiveScanNonUniform:
     case glslang::EOpMaxInvocationsExclusiveScanNonUniform:
     case glslang::EOpAddInvocationsExclusiveScanNonUniform:
-#endif
     {
         std::vector<spv::Id> operands;
         operands.push_back(operand);
@@ -5407,7 +6122,6 @@
         operands.push_back(operand);
         return createSubgroupOperation(op, typeId, operands, typeProxy);
     }
-#ifdef AMD_EXTENSIONS
     case glslang::EOpMbcnt:
         extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_ballot);
         libCall = spv::MbcntAMD;
@@ -5422,15 +6136,18 @@
         extBuiltins = getExtBuiltins(spv::E_SPV_AMD_gcn_shader);
         libCall = spv::CubeFaceCoordAMD;
         break;
-#endif
-#ifdef NV_EXTENSIONS
     case glslang::EOpSubgroupPartition:
         unaryOp = spv::OpGroupNonUniformPartitionNV;
         break;
-#endif
     case glslang::EOpConstructReference:
         unaryOp = spv::OpBitcast;
         break;
+#endif
+
+    case glslang::EOpCopyObject:
+        unaryOp = spv::OpCopyObject;
+        break;
+
     default:
         return 0;
     }
@@ -5444,8 +6161,8 @@
         id = builder.createUnaryOp(unaryOp, typeId, operand);
     }
 
-    builder.addDecoration(id, decorations.noContraction);
-    builder.addDecoration(id, decorations.nonUniform);
+    decorations.addNoContraction(builder, id);
+    decorations.addNonUniform(builder, id);
     return builder.setPrecision(id, decorations.precision);
 }
 
@@ -5473,14 +6190,14 @@
         indexes.push_back(c);
         spv::Id srcVec  = builder.createCompositeExtract(operand, srcVecType, indexes);
         spv::Id destVec = builder.createUnaryOp(op, destVecType, srcVec);
-        builder.addDecoration(destVec, decorations.noContraction);
-        builder.addDecoration(destVec, decorations.nonUniform);
+        decorations.addNoContraction(builder, destVec);
+        decorations.addNonUniform(builder, destVec);
         results.push_back(builder.setPrecision(destVec, decorations.precision));
     }
 
     // put the pieces together
     spv::Id result = builder.setPrecision(builder.createCompositeConstruct(typeId, results), decorations.precision);
-    builder.addDecoration(result, decorations.nonUniform);
+    decorations.addNonUniform(builder, result);
     return result;
 }
 
@@ -5572,110 +6289,49 @@
     int vectorSize = builder.isVectorType(destType) ? builder.getNumTypeComponents(destType) : 0;
 
     switch (op) {
-    case glslang::EOpConvInt8ToBool:
-    case glslang::EOpConvUint8ToBool:
-        zero = builder.makeUint8Constant(0);
-        zero = makeSmearedConstant(zero, vectorSize);
-        return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
-    case glslang::EOpConvInt16ToBool:
-    case glslang::EOpConvUint16ToBool:
-        zero = builder.makeUint16Constant(0);
-        zero = makeSmearedConstant(zero, vectorSize);
-        return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
     case glslang::EOpConvIntToBool:
     case glslang::EOpConvUintToBool:
         zero = builder.makeUintConstant(0);
         zero = makeSmearedConstant(zero, vectorSize);
         return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
-    case glslang::EOpConvInt64ToBool:
-    case glslang::EOpConvUint64ToBool:
-        zero = builder.makeUint64Constant(0);
-        zero = makeSmearedConstant(zero, vectorSize);
-        return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
-
     case glslang::EOpConvFloatToBool:
         zero = builder.makeFloatConstant(0.0F);
         zero = makeSmearedConstant(zero, vectorSize);
         return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero);
-
-    case glslang::EOpConvDoubleToBool:
-        zero = builder.makeDoubleConstant(0.0);
-        zero = makeSmearedConstant(zero, vectorSize);
-        return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero);
-
-    case glslang::EOpConvFloat16ToBool:
-        zero = builder.makeFloat16Constant(0.0F);
-        zero = makeSmearedConstant(zero, vectorSize);
-        return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero);
-
     case glslang::EOpConvBoolToFloat:
         convOp = spv::OpSelect;
         zero = builder.makeFloatConstant(0.0F);
         one  = builder.makeFloatConstant(1.0F);
         break;
 
-    case glslang::EOpConvBoolToDouble:
-        convOp = spv::OpSelect;
-        zero = builder.makeDoubleConstant(0.0);
-        one  = builder.makeDoubleConstant(1.0);
-        break;
-
-    case glslang::EOpConvBoolToFloat16:
-        convOp = spv::OpSelect;
-        zero = builder.makeFloat16Constant(0.0F);
-        one = builder.makeFloat16Constant(1.0F);
-        break;
-
-    case glslang::EOpConvBoolToInt8:
-        zero = builder.makeInt8Constant(0);
-        one  = builder.makeInt8Constant(1);
-        convOp = spv::OpSelect;
-        break;
-
-    case glslang::EOpConvBoolToUint8:
-        zero = builder.makeUint8Constant(0);
-        one  = builder.makeUint8Constant(1);
-        convOp = spv::OpSelect;
-        break;
-
-    case glslang::EOpConvBoolToInt16:
-        zero = builder.makeInt16Constant(0);
-        one  = builder.makeInt16Constant(1);
-        convOp = spv::OpSelect;
-        break;
-
-    case glslang::EOpConvBoolToUint16:
-        zero = builder.makeUint16Constant(0);
-        one  = builder.makeUint16Constant(1);
-        convOp = spv::OpSelect;
-        break;
-
     case glslang::EOpConvBoolToInt:
     case glslang::EOpConvBoolToInt64:
-        if (op == glslang::EOpConvBoolToInt64)
+#ifndef GLSLANG_WEB
+        if (op == glslang::EOpConvBoolToInt64) {
             zero = builder.makeInt64Constant(0);
-        else
-            zero = builder.makeIntConstant(0);
-
-        if (op == glslang::EOpConvBoolToInt64)
             one = builder.makeInt64Constant(1);
-        else
+        } else
+#endif
+        {
+            zero = builder.makeIntConstant(0);
             one = builder.makeIntConstant(1);
+        }
 
         convOp = spv::OpSelect;
         break;
 
     case glslang::EOpConvBoolToUint:
     case glslang::EOpConvBoolToUint64:
-        if (op == glslang::EOpConvBoolToUint64)
+#ifndef GLSLANG_WEB
+        if (op == glslang::EOpConvBoolToUint64) {
             zero = builder.makeUint64Constant(0);
-        else
-            zero = builder.makeUintConstant(0);
-
-        if (op == glslang::EOpConvBoolToUint64)
             one = builder.makeUint64Constant(1);
-        else
+        } else
+#endif
+        {
+            zero = builder.makeUintConstant(0);
             one = builder.makeUintConstant(1);
+        }
 
         convOp = spv::OpSelect;
         break;
@@ -5710,17 +6366,6 @@
         convOp = spv::OpConvertUToF;
         break;
 
-    case glslang::EOpConvDoubleToFloat:
-    case glslang::EOpConvFloatToDouble:
-    case glslang::EOpConvDoubleToFloat16:
-    case glslang::EOpConvFloat16ToDouble:
-    case glslang::EOpConvFloatToFloat16:
-    case glslang::EOpConvFloat16ToFloat:
-        convOp = spv::OpFConvert;
-        if (builder.isMatrixType(destType))
-            return createUnaryMatrixOperation(convOp, decorations, destType, operand, typeProxy);
-        break;
-
     case glslang::EOpConvFloat16ToInt8:
     case glslang::EOpConvFloatToInt8:
     case glslang::EOpConvDoubleToInt8:
@@ -5746,13 +6391,16 @@
     case glslang::EOpConvInt64ToUint64:
         if (builder.isInSpecConstCodeGenMode()) {
             // Build zero scalar or vector for OpIAdd.
+#ifndef GLSLANG_WEB
             if(op == glslang::EOpConvUint8ToInt8 || op == glslang::EOpConvInt8ToUint8) {
                 zero = builder.makeUint8Constant(0);
             } else if (op == glslang::EOpConvUint16ToInt16 || op == glslang::EOpConvInt16ToUint16) {
                 zero = builder.makeUint16Constant(0);
             } else if (op == glslang::EOpConvUint64ToInt64 || op == glslang::EOpConvInt64ToUint64) {
                 zero = builder.makeUint64Constant(0);
-            } else {
+            } else
+#endif
+            {
                 zero = builder.makeUintConstant(0);
             }
             zero = makeSmearedConstant(zero, vectorSize);
@@ -5779,6 +6427,71 @@
         convOp = spv::OpConvertFToU;
         break;
 
+#ifndef GLSLANG_WEB
+    case glslang::EOpConvInt8ToBool:
+    case glslang::EOpConvUint8ToBool:
+        zero = builder.makeUint8Constant(0);
+        zero = makeSmearedConstant(zero, vectorSize);
+        return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
+    case glslang::EOpConvInt16ToBool:
+    case glslang::EOpConvUint16ToBool:
+        zero = builder.makeUint16Constant(0);
+        zero = makeSmearedConstant(zero, vectorSize);
+        return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
+    case glslang::EOpConvInt64ToBool:
+    case glslang::EOpConvUint64ToBool:
+        zero = builder.makeUint64Constant(0);
+        zero = makeSmearedConstant(zero, vectorSize);
+        return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
+    case glslang::EOpConvDoubleToBool:
+        zero = builder.makeDoubleConstant(0.0);
+        zero = makeSmearedConstant(zero, vectorSize);
+        return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero);
+    case glslang::EOpConvFloat16ToBool:
+        zero = builder.makeFloat16Constant(0.0F);
+        zero = makeSmearedConstant(zero, vectorSize);
+        return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero);
+    case glslang::EOpConvBoolToDouble:
+        convOp = spv::OpSelect;
+        zero = builder.makeDoubleConstant(0.0);
+        one  = builder.makeDoubleConstant(1.0);
+        break;
+    case glslang::EOpConvBoolToFloat16:
+        convOp = spv::OpSelect;
+        zero = builder.makeFloat16Constant(0.0F);
+        one = builder.makeFloat16Constant(1.0F);
+        break;
+    case glslang::EOpConvBoolToInt8:
+        zero = builder.makeInt8Constant(0);
+        one  = builder.makeInt8Constant(1);
+        convOp = spv::OpSelect;
+        break;
+    case glslang::EOpConvBoolToUint8:
+        zero = builder.makeUint8Constant(0);
+        one  = builder.makeUint8Constant(1);
+        convOp = spv::OpSelect;
+        break;
+    case glslang::EOpConvBoolToInt16:
+        zero = builder.makeInt16Constant(0);
+        one  = builder.makeInt16Constant(1);
+        convOp = spv::OpSelect;
+        break;
+    case glslang::EOpConvBoolToUint16:
+        zero = builder.makeUint16Constant(0);
+        one  = builder.makeUint16Constant(1);
+        convOp = spv::OpSelect;
+        break;
+    case glslang::EOpConvDoubleToFloat:
+    case glslang::EOpConvFloatToDouble:
+    case glslang::EOpConvDoubleToFloat16:
+    case glslang::EOpConvFloat16ToDouble:
+    case glslang::EOpConvFloatToFloat16:
+    case glslang::EOpConvFloat16ToFloat:
+        convOp = spv::OpFConvert;
+        if (builder.isMatrixType(destType))
+            return createUnaryMatrixOperation(convOp, decorations, destType, operand, typeProxy);
+        break;
+
     case glslang::EOpConvInt8ToInt16:
     case glslang::EOpConvInt8ToInt:
     case glslang::EOpConvInt8ToInt64:
@@ -5889,6 +6602,15 @@
     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:
         break;
     }
@@ -5905,7 +6627,7 @@
         result = builder.createUnaryOp(convOp, destType, operand);
 
     result = builder.setPrecision(result, decorations.precision);
-    builder.addDecoration(result, decorations.nonUniform);
+    decorations.addNonUniform(builder, result);
     return result;
 }
 
@@ -5922,7 +6644,9 @@
 }
 
 // For glslang ops that map to SPV atomic opCodes
-spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv::Decoration /*precision*/, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
+spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv::Decoration /*precision*/,
+    spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy,
+    const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags)
 {
     spv::Op opCode = spv::OpNop;
 
@@ -5938,12 +6662,14 @@
     case glslang::EOpAtomicMin:
     case glslang::EOpImageAtomicMin:
     case glslang::EOpAtomicCounterMin:
-        opCode = (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) ? spv::OpAtomicUMin : spv::OpAtomicSMin;
+        opCode = (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) ?
+            spv::OpAtomicUMin : spv::OpAtomicSMin;
         break;
     case glslang::EOpAtomicMax:
     case glslang::EOpImageAtomicMax:
     case glslang::EOpAtomicCounterMax:
-        opCode = (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) ? spv::OpAtomicUMax : spv::OpAtomicSMax;
+        opCode = (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) ?
+            spv::OpAtomicUMax : spv::OpAtomicSMax;
         break;
     case glslang::EOpAtomicAnd:
     case glslang::EOpImageAtomicAnd:
@@ -6008,7 +6734,10 @@
         scopeId = builder.makeUintConstant(spv::ScopeDevice);
     }
     // semantics default to relaxed 
-    spv::Id semanticsId = builder.makeUintConstant(spv::MemorySemanticsMaskNone);
+    spv::Id semanticsId = builder.makeUintConstant(lvalueCoherentFlags.isVolatile() &&
+        glslangIntermediate->usingVulkanMemoryModel() ?
+                                                    spv::MemorySemanticsVolatileMask :
+                                                    spv::MemorySemanticsMaskNone);
     spv::Id semanticsId2 = semanticsId;
 
     pointerId = operands[0];
@@ -6019,26 +6748,33 @@
         valueId = operands[2];
         if (operands.size() > 3) {
             scopeId = operands[3];
-            semanticsId = builder.makeUintConstant(builder.getConstantScalar(operands[4]) | builder.getConstantScalar(operands[5]));
-            semanticsId2 = builder.makeUintConstant(builder.getConstantScalar(operands[6]) | builder.getConstantScalar(operands[7]));
+            semanticsId = builder.makeUintConstant(
+                builder.getConstantScalar(operands[4]) | builder.getConstantScalar(operands[5]));
+            semanticsId2 = builder.makeUintConstant(
+                builder.getConstantScalar(operands[6]) | builder.getConstantScalar(operands[7]));
         }
     } else if (opCode == spv::OpAtomicLoad) {
         if (operands.size() > 1) {
             scopeId = operands[1];
-            semanticsId = builder.makeUintConstant(builder.getConstantScalar(operands[2]) | builder.getConstantScalar(operands[3]));
+            semanticsId = builder.makeUintConstant(
+                builder.getConstantScalar(operands[2]) | builder.getConstantScalar(operands[3]));
         }
     } else {
         // atomic store or RMW
         valueId = operands[1];
         if (operands.size() > 2) {
             scopeId = operands[2];
-            semanticsId = builder.makeUintConstant(builder.getConstantScalar(operands[3]) | builder.getConstantScalar(operands[4]));
+            semanticsId = builder.makeUintConstant
+                (builder.getConstantScalar(operands[3]) | builder.getConstantScalar(operands[4]));
         }
     }
 
     // Check for capabilities
     unsigned semanticsImmediate = builder.getConstantScalar(semanticsId) | builder.getConstantScalar(semanticsId2);
-    if (semanticsImmediate & (spv::MemorySemanticsMakeAvailableKHRMask | spv::MemorySemanticsMakeVisibleKHRMask | spv::MemorySemanticsOutputMemoryKHRMask)) {
+    if (semanticsImmediate & (spv::MemorySemanticsMakeAvailableKHRMask |
+                              spv::MemorySemanticsMakeVisibleKHRMask |
+                              spv::MemorySemanticsOutputMemoryKHRMask |
+                              spv::MemorySemanticsVolatileMask)) {
         builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
     }
 
@@ -6074,12 +6810,11 @@
 }
 
 // Create group invocation operations.
-spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
+spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op, spv::Id typeId,
+    std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
 {
-#ifdef AMD_EXTENSIONS
     bool isUnsigned = isTypeUnsignedInt(typeProxy);
     bool isFloat = isTypeFloat(typeProxy);
-#endif
 
     spv::Op opCode = spv::OpNop;
     std::vector<spv::IdImmediate> spvGroupOperands;
@@ -6096,7 +6831,6 @@
         builder.addCapability(spv::CapabilitySubgroupVoteKHR);
     } else {
         builder.addCapability(spv::CapabilityGroups);
-#ifdef AMD_EXTENSIONS
         if (op == glslang::EOpMinInvocationsNonUniform ||
             op == glslang::EOpMaxInvocationsNonUniform ||
             op == glslang::EOpAddInvocationsNonUniform ||
@@ -6107,9 +6841,7 @@
             op == glslang::EOpMaxInvocationsExclusiveScanNonUniform ||
             op == glslang::EOpAddInvocationsExclusiveScanNonUniform)
             builder.addExtension(spv::E_SPV_AMD_shader_ballot);
-#endif
 
-#ifdef AMD_EXTENSIONS
         switch (op) {
         case glslang::EOpMinInvocations:
         case glslang::EOpMaxInvocations:
@@ -6144,7 +6876,6 @@
             spv::IdImmediate groupOp = { false, (unsigned)groupOperation };
             spvGroupOperands.push_back(groupOp);
         }
-#endif
     }
 
     for (auto opIt = operands.begin(); opIt != operands.end(); ++opIt) {
@@ -6191,7 +6922,6 @@
                                      builder.createCompositeConstruct(uvec2Type, components));
     }
 
-#ifdef AMD_EXTENSIONS
     case glslang::EOpMinInvocations:
     case glslang::EOpMaxInvocations:
     case glslang::EOpAddInvocations:
@@ -6278,7 +7008,6 @@
             return CreateInvocationsVectorOperation(opCode, groupOperation, typeId, operands);
 
         break;
-#endif
     default:
         logger->missingFunctionality("invocation operation");
         return spv::NoResult;
@@ -6292,20 +7021,15 @@
 spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv::GroupOperation groupOperation,
     spv::Id typeId, std::vector<spv::Id>& operands)
 {
-#ifdef AMD_EXTENSIONS
     assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin ||
            op == spv::OpGroupFMax || op == spv::OpGroupUMax || op == spv::OpGroupSMax ||
            op == spv::OpGroupFAdd || op == spv::OpGroupIAdd || op == spv::OpGroupBroadcast ||
            op == spv::OpSubgroupReadInvocationKHR ||
-           op == spv::OpGroupFMinNonUniformAMD || op == spv::OpGroupUMinNonUniformAMD || op == spv::OpGroupSMinNonUniformAMD ||
-           op == spv::OpGroupFMaxNonUniformAMD || op == spv::OpGroupUMaxNonUniformAMD || op == spv::OpGroupSMaxNonUniformAMD ||
+           op == spv::OpGroupFMinNonUniformAMD || op == spv::OpGroupUMinNonUniformAMD ||
+           op == spv::OpGroupSMinNonUniformAMD ||
+           op == spv::OpGroupFMaxNonUniformAMD || op == spv::OpGroupUMaxNonUniformAMD ||
+           op == spv::OpGroupSMaxNonUniformAMD ||
            op == spv::OpGroupFAddNonUniformAMD || op == spv::OpGroupIAddNonUniformAMD);
-#else
-    assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin ||
-           op == spv::OpGroupFMax || op == spv::OpGroupUMax || op == spv::OpGroupSMax ||
-           op == spv::OpGroupFAdd || op == spv::OpGroupIAdd || op == spv::OpGroupBroadcast ||
-           op == spv::OpSubgroupReadInvocationKHR);
-#endif
 
     // Handle group invocation operations scalar by scalar.
     // The result type is the same type as the original type.
@@ -6429,7 +7153,6 @@
         builder.addCapability(spv::CapabilityGroupNonUniform);
         builder.addCapability(spv::CapabilityGroupNonUniformQuad);
         break;
-#ifdef NV_EXTENSIONS
     case glslang::EOpSubgroupPartitionedAdd:
     case glslang::EOpSubgroupPartitionedMul:
     case glslang::EOpSubgroupPartitionedMin:
@@ -6454,12 +7177,12 @@
         builder.addExtension(spv::E_SPV_NV_shader_subgroup_partitioned);
         builder.addCapability(spv::CapabilityGroupNonUniformPartitionedNV);
         break;
-#endif
     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;
@@ -6488,11 +7211,9 @@
     case glslang::EOpSubgroupInclusiveAdd:
     case glslang::EOpSubgroupExclusiveAdd:
     case glslang::EOpSubgroupClusteredAdd:
-#ifdef NV_EXTENSIONS
     case glslang::EOpSubgroupPartitionedAdd:
     case glslang::EOpSubgroupPartitionedInclusiveAdd:
     case glslang::EOpSubgroupPartitionedExclusiveAdd:
-#endif
         if (isFloat) {
             opCode = spv::OpGroupNonUniformFAdd;
         } else {
@@ -6503,11 +7224,9 @@
     case glslang::EOpSubgroupInclusiveMul:
     case glslang::EOpSubgroupExclusiveMul:
     case glslang::EOpSubgroupClusteredMul:
-#ifdef NV_EXTENSIONS
     case glslang::EOpSubgroupPartitionedMul:
     case glslang::EOpSubgroupPartitionedInclusiveMul:
     case glslang::EOpSubgroupPartitionedExclusiveMul:
-#endif
         if (isFloat) {
             opCode = spv::OpGroupNonUniformFMul;
         } else {
@@ -6518,11 +7237,9 @@
     case glslang::EOpSubgroupInclusiveMin:
     case glslang::EOpSubgroupExclusiveMin:
     case glslang::EOpSubgroupClusteredMin:
-#ifdef NV_EXTENSIONS
     case glslang::EOpSubgroupPartitionedMin:
     case glslang::EOpSubgroupPartitionedInclusiveMin:
     case glslang::EOpSubgroupPartitionedExclusiveMin:
-#endif
         if (isFloat) {
             opCode = spv::OpGroupNonUniformFMin;
         } else if (isUnsigned) {
@@ -6535,11 +7252,9 @@
     case glslang::EOpSubgroupInclusiveMax:
     case glslang::EOpSubgroupExclusiveMax:
     case glslang::EOpSubgroupClusteredMax:
-#ifdef NV_EXTENSIONS
     case glslang::EOpSubgroupPartitionedMax:
     case glslang::EOpSubgroupPartitionedInclusiveMax:
     case glslang::EOpSubgroupPartitionedExclusiveMax:
-#endif
         if (isFloat) {
             opCode = spv::OpGroupNonUniformFMax;
         } else if (isUnsigned) {
@@ -6552,11 +7267,9 @@
     case glslang::EOpSubgroupInclusiveAnd:
     case glslang::EOpSubgroupExclusiveAnd:
     case glslang::EOpSubgroupClusteredAnd:
-#ifdef NV_EXTENSIONS
     case glslang::EOpSubgroupPartitionedAnd:
     case glslang::EOpSubgroupPartitionedInclusiveAnd:
     case glslang::EOpSubgroupPartitionedExclusiveAnd:
-#endif
         if (isBool) {
             opCode = spv::OpGroupNonUniformLogicalAnd;
         } else {
@@ -6567,11 +7280,9 @@
     case glslang::EOpSubgroupInclusiveOr:
     case glslang::EOpSubgroupExclusiveOr:
     case glslang::EOpSubgroupClusteredOr:
-#ifdef NV_EXTENSIONS
     case glslang::EOpSubgroupPartitionedOr:
     case glslang::EOpSubgroupPartitionedInclusiveOr:
     case glslang::EOpSubgroupPartitionedExclusiveOr:
-#endif
         if (isBool) {
             opCode = spv::OpGroupNonUniformLogicalOr;
         } else {
@@ -6582,11 +7293,9 @@
     case glslang::EOpSubgroupInclusiveXor:
     case glslang::EOpSubgroupExclusiveXor:
     case glslang::EOpSubgroupClusteredXor:
-#ifdef NV_EXTENSIONS
     case glslang::EOpSubgroupPartitionedXor:
     case glslang::EOpSubgroupPartitionedInclusiveXor:
     case glslang::EOpSubgroupPartitionedExclusiveXor:
-#endif
         if (isBool) {
             opCode = spv::OpGroupNonUniformLogicalXor;
         } else {
@@ -6644,7 +7353,6 @@
     case glslang::EOpSubgroupClusteredXor:
         groupOperation = spv::GroupOperationClusteredReduce;
         break;
-#ifdef NV_EXTENSIONS
     case glslang::EOpSubgroupPartitionedAdd:
     case glslang::EOpSubgroupPartitionedMul:
     case glslang::EOpSubgroupPartitionedMin:
@@ -6672,7 +7380,6 @@
     case glslang::EOpSubgroupPartitionedExclusiveXor:
         groupOperation = spv::GroupOperationPartitionedExclusiveScanNV;
         break;
-#endif
     }
 
     // build the instruction
@@ -6710,7 +7417,8 @@
     return builder.createOp(opCode, typeId, spvGroupOperands);
 }
 
-spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
+spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::Decoration precision,
+    spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
 {
     bool isUnsigned = isTypeUnsignedInt(typeProxy);
     bool isFloat = isTypeFloat(typeProxy);
@@ -6730,7 +7438,7 @@
     switch (op) {
     case glslang::EOpMin:
         if (isFloat)
-            libCall = spv::GLSLstd450FMin;
+            libCall = nanMinMaxClamp ? spv::GLSLstd450NMin : spv::GLSLstd450FMin;
         else if (isUnsigned)
             libCall = spv::GLSLstd450UMin;
         else
@@ -6742,7 +7450,7 @@
         break;
     case glslang::EOpMax:
         if (isFloat)
-            libCall = spv::GLSLstd450FMax;
+            libCall = nanMinMaxClamp ? spv::GLSLstd450NMax : spv::GLSLstd450FMax;
         else if (isUnsigned)
             libCall = spv::GLSLstd450UMax;
         else
@@ -6761,7 +7469,7 @@
 
     case glslang::EOpClamp:
         if (isFloat)
-            libCall = spv::GLSLstd450FClamp;
+            libCall = nanMinMaxClamp ? spv::GLSLstd450NClamp : spv::GLSLstd450FClamp;
         else if (isUnsigned)
             libCall = spv::GLSLstd450UClamp;
         else
@@ -6804,18 +7512,59 @@
     case glslang::EOpRefract:
         libCall = spv::GLSLstd450Refract;
         break;
+    case glslang::EOpBarrier:
+        {
+            // This is for the extended controlBarrier function, with four operands.
+            // The unextended barrier() goes through createNoArgOperation.
+            assert(operands.size() == 4);
+            unsigned int executionScope = builder.getConstantScalar(operands[0]);
+            unsigned int memoryScope = builder.getConstantScalar(operands[1]);
+            unsigned int semantics = builder.getConstantScalar(operands[2]) | builder.getConstantScalar(operands[3]);
+            builder.createControlBarrier((spv::Scope)executionScope, (spv::Scope)memoryScope,
+                (spv::MemorySemanticsMask)semantics);
+            if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask |
+                             spv::MemorySemanticsMakeVisibleKHRMask |
+                             spv::MemorySemanticsOutputMemoryKHRMask |
+                             spv::MemorySemanticsVolatileMask)) {
+                builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
+            }
+            if (glslangIntermediate->usingVulkanMemoryModel() && (executionScope == spv::ScopeDevice ||
+                memoryScope == spv::ScopeDevice)) {
+                builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
+            }
+            return 0;
+        }
+        break;
+    case glslang::EOpMemoryBarrier:
+        {
+            // This is for the extended memoryBarrier function, with three operands.
+            // The unextended memoryBarrier() goes through createNoArgOperation.
+            assert(operands.size() == 3);
+            unsigned int memoryScope = builder.getConstantScalar(operands[0]);
+            unsigned int semantics = builder.getConstantScalar(operands[1]) | builder.getConstantScalar(operands[2]);
+            builder.createMemoryBarrier((spv::Scope)memoryScope, (spv::MemorySemanticsMask)semantics);
+            if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask |
+                             spv::MemorySemanticsMakeVisibleKHRMask |
+                             spv::MemorySemanticsOutputMemoryKHRMask |
+                             spv::MemorySemanticsVolatileMask)) {
+                builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
+            }
+            if (glslangIntermediate->usingVulkanMemoryModel() && memoryScope == spv::ScopeDevice) {
+                builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
+            }
+            return 0;
+        }
+        break;
+
+#ifndef GLSLANG_WEB
     case glslang::EOpInterpolateAtSample:
-#ifdef AMD_EXTENSIONS
         if (typeProxy == glslang::EbtFloat16)
             builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
-#endif
         libCall = spv::GLSLstd450InterpolateAtSample;
         break;
     case glslang::EOpInterpolateAtOffset:
-#ifdef AMD_EXTENSIONS
         if (typeProxy == glslang::EbtFloat16)
             builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
-#endif
         libCall = spv::GLSLstd450InterpolateAtOffset;
         break;
     case glslang::EOpAddCarry:
@@ -6857,15 +7606,14 @@
             assert(builder.isPointerType(typeId1));
             typeId1 = builder.getContainedTypeId(typeId1);
             int width = builder.getScalarTypeWidth(typeId1);
-#ifdef AMD_EXTENSIONS
             if (width == 16)
                 // Using 16-bit exp operand, enable extension SPV_AMD_gpu_shader_int16
                 builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
-#endif
             if (builder.getNumComponents(operands[0]) == 1)
                 frexpIntType = builder.makeIntegerType(width, true);
             else
-                frexpIntType = builder.makeVectorType(builder.makeIntegerType(width, true), builder.getNumComponents(operands[0]));
+                frexpIntType = builder.makeVectorType(builder.makeIntegerType(width, true),
+                    builder.getNumComponents(operands[0]));
             typeId = builder.makeStructResultType(typeId0, frexpIntType);
             consumedOperands = 1;
         }
@@ -6891,7 +7639,6 @@
     case glslang::EOpSubgroupClusteredOr:
     case glslang::EOpSubgroupClusteredXor:
     case glslang::EOpSubgroupQuadBroadcast:
-#ifdef NV_EXTENSIONS
     case glslang::EOpSubgroupPartitionedAdd:
     case glslang::EOpSubgroupPartitionedMul:
     case glslang::EOpSubgroupPartitionedMin:
@@ -6913,10 +7660,8 @@
     case glslang::EOpSubgroupPartitionedExclusiveAnd:
     case glslang::EOpSubgroupPartitionedExclusiveOr:
     case glslang::EOpSubgroupPartitionedExclusiveXor:
-#endif
         return createSubgroupOperation(op, typeId, operands, typeProxy);
 
-#ifdef AMD_EXTENSIONS
     case glslang::EOpSwizzleInvocations:
         extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_ballot);
         libCall = spv::SwizzleInvocationsAMD;
@@ -6970,66 +7715,113 @@
         extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
         libCall = spv::InterpolateAtVertexAMD;
         break;
-#endif
-    case glslang::EOpBarrier:
-        {
-            // This is for the extended controlBarrier function, with four operands.
-            // The unextended barrier() goes through createNoArgOperation.
-            assert(operands.size() == 4);
-            unsigned int executionScope = builder.getConstantScalar(operands[0]);
-            unsigned int memoryScope = builder.getConstantScalar(operands[1]);
-            unsigned int semantics = builder.getConstantScalar(operands[2]) | builder.getConstantScalar(operands[3]);
-            builder.createControlBarrier((spv::Scope)executionScope, (spv::Scope)memoryScope, (spv::MemorySemanticsMask)semantics);
-            if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask | spv::MemorySemanticsMakeVisibleKHRMask | spv::MemorySemanticsOutputMemoryKHRMask)) {
-                builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
-            }
-            if (glslangIntermediate->usingVulkanMemoryModel() && (executionScope == spv::ScopeDevice || memoryScope == spv::ScopeDevice)) {
-                builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
-            }
-            return 0;
-        }
-        break;
-    case glslang::EOpMemoryBarrier:
-        {
-            // This is for the extended memoryBarrier function, with three operands.
-            // The unextended memoryBarrier() goes through createNoArgOperation.
-            assert(operands.size() == 3);
-            unsigned int memoryScope = builder.getConstantScalar(operands[0]);
-            unsigned int semantics = builder.getConstantScalar(operands[1]) | builder.getConstantScalar(operands[2]);
-            builder.createMemoryBarrier((spv::Scope)memoryScope, (spv::MemorySemanticsMask)semantics);
-            if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask | spv::MemorySemanticsMakeVisibleKHRMask | spv::MemorySemanticsOutputMemoryKHRMask)) {
-                builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
-            }
-            if (glslangIntermediate->usingVulkanMemoryModel() && memoryScope == spv::ScopeDevice) {
-                builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
-            }
-            return 0;
-        }
-        break;
 
-#ifdef NV_EXTENSIONS
-    case glslang::EOpReportIntersectionNV:
-    {
+    case glslang::EOpReportIntersection:
         typeId = builder.makeBoolType();
-        opCode = spv::OpReportIntersectionNV;
-    }
-    break;
-    case glslang::EOpTraceNV:
-    {
-        builder.createNoResultOp(spv::OpTraceNV, operands);
+        opCode = spv::OpReportIntersectionKHR;
+        break;
+    case glslang::EOpTrace:
+        builder.createNoResultOp(spv::OpTraceRayKHR, operands);
         return 0;
-    }
-    break;
-    case glslang::EOpExecuteCallableNV:
-    {
-        builder.createNoResultOp(spv::OpExecuteCallableNV, operands);
+    case glslang::EOpExecuteCallable:
+        builder.createNoResultOp(spv::OpExecuteCallableKHR, operands);
         return 0;
-    }
-    break;
+
+    case glslang::EOpRayQueryInitialize:
+        builder.createNoResultOp(spv::OpRayQueryInitializeKHR, operands);
+        return 0;
+    case glslang::EOpRayQueryTerminate:
+        builder.createNoResultOp(spv::OpRayQueryTerminateKHR, operands);
+        return 0;
+    case glslang::EOpRayQueryGenerateIntersection:
+        builder.createNoResultOp(spv::OpRayQueryGenerateIntersectionKHR, operands);
+        return 0;
+    case glslang::EOpRayQueryConfirmIntersection:
+        builder.createNoResultOp(spv::OpRayQueryConfirmIntersectionKHR, operands);
+        return 0;
+    case glslang::EOpRayQueryProceed:
+        typeId = builder.makeBoolType();
+        opCode = spv::OpRayQueryProceedKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionType:
+        typeId = builder.makeUintType(32);
+        opCode = spv::OpRayQueryGetIntersectionTypeKHR;
+        break;
+    case glslang::EOpRayQueryGetRayTMin:
+        typeId = builder.makeFloatType(32);
+        opCode = spv::OpRayQueryGetRayTMinKHR;
+        break;
+    case glslang::EOpRayQueryGetRayFlags:
+        typeId = builder.makeIntType(32);
+        opCode = spv::OpRayQueryGetRayFlagsKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionT:
+        typeId = builder.makeFloatType(32);
+        opCode = spv::OpRayQueryGetIntersectionTKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionInstanceCustomIndex:
+        typeId = builder.makeIntType(32);
+        opCode = spv::OpRayQueryGetIntersectionInstanceCustomIndexKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionInstanceId:
+        typeId = builder.makeIntType(32);
+        opCode = spv::OpRayQueryGetIntersectionInstanceIdKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset:
+        typeId = builder.makeIntType(32);
+        opCode = spv::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionGeometryIndex:
+        typeId = builder.makeIntType(32);
+        opCode = spv::OpRayQueryGetIntersectionGeometryIndexKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionPrimitiveIndex:
+        typeId = builder.makeIntType(32);
+        opCode = spv::OpRayQueryGetIntersectionPrimitiveIndexKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionBarycentrics:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 2);
+        opCode = spv::OpRayQueryGetIntersectionBarycentricsKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionFrontFace:
+        typeId = builder.makeBoolType();
+        opCode = spv::OpRayQueryGetIntersectionFrontFaceKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionCandidateAABBOpaque:
+        typeId = builder.makeBoolType();
+        opCode = spv::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionObjectRayDirection:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 3);
+        opCode = spv::OpRayQueryGetIntersectionObjectRayDirectionKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionObjectRayOrigin:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 3);
+        opCode = spv::OpRayQueryGetIntersectionObjectRayOriginKHR;
+        break;
+    case glslang::EOpRayQueryGetWorldRayDirection:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 3);
+        opCode = spv::OpRayQueryGetWorldRayDirectionKHR;
+        break;
+    case glslang::EOpRayQueryGetWorldRayOrigin:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 3);
+        opCode = spv::OpRayQueryGetWorldRayOriginKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionObjectToWorld:
+        typeId = builder.makeMatrixType(builder.makeFloatType(32), 4, 3);
+        opCode = spv::OpRayQueryGetIntersectionObjectToWorldKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionWorldToObject:
+        typeId = builder.makeMatrixType(builder.makeFloatType(32), 4, 3);
+        opCode = spv::OpRayQueryGetIntersectionWorldToObjectKHR;
+        break;
     case glslang::EOpWritePackedPrimitiveIndices4x8NV:
         builder.createNoResultOp(spv::OpWritePackedPrimitiveIndices4x8NV, operands);
         return 0;
-#endif
+    case glslang::EOpCooperativeMatrixMulAdd:
+        opCode = spv::OpCooperativeMatrixMulAddNV;
+        break;
+#endif // GLSLANG_WEB
     default:
         return 0;
     }
@@ -7050,7 +7842,7 @@
         id = builder.createCompositeExtract(mulOp, typeId, 0);
         for (int i = 1; i < componentCount; ++i) {
             builder.setPrecision(id, precision);
-            id = builder.createBinOp(spv::OpIAdd, typeId, id, builder.createCompositeExtract(operands[0], typeId, i));
+            id = builder.createBinOp(spv::OpIAdd, typeId, id, builder.createCompositeExtract(mulOp, typeId, i));
         }
     } else {
         switch (consumedOperands) {
@@ -7073,6 +7865,7 @@
         }
     }
 
+#ifndef GLSLANG_WEB
     // Decode the return types that were structures
     switch (op) {
     case glslang::EOpAddCarry:
@@ -7102,6 +7895,7 @@
     default:
         break;
     }
+#endif
 
     return builder.setPrecision(id, precision);
 }
@@ -7110,15 +7904,10 @@
 spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId)
 {
     // GLSL memory barriers use queuefamily scope in new model, device scope in old model
-    spv::Scope memoryBarrierScope = glslangIntermediate->usingVulkanMemoryModel() ? spv::ScopeQueueFamilyKHR : spv::ScopeDevice;
+    spv::Scope memoryBarrierScope = glslangIntermediate->usingVulkanMemoryModel() ?
+        spv::ScopeQueueFamilyKHR : spv::ScopeDevice;
 
     switch (op) {
-    case glslang::EOpEmitVertex:
-        builder.createNoResultOp(spv::OpEmitVertex);
-        return 0;
-    case glslang::EOpEndPrimitive:
-        builder.createNoResultOp(spv::OpEndPrimitive);
-        return 0;
     case glslang::EOpBarrier:
         if (glslangIntermediate->getStage() == EShLangTessControl) {
             if (glslangIntermediate->usingVulkanMemoryModel()) {
@@ -7139,18 +7928,10 @@
         builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsAllMemory |
                                                         spv::MemorySemanticsAcquireReleaseMask);
         return 0;
-    case glslang::EOpMemoryBarrierAtomicCounter:
-        builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsAtomicCounterMemoryMask |
-                                                        spv::MemorySemanticsAcquireReleaseMask);
-        return 0;
     case glslang::EOpMemoryBarrierBuffer:
         builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsUniformMemoryMask |
                                                         spv::MemorySemanticsAcquireReleaseMask);
         return 0;
-    case glslang::EOpMemoryBarrierImage:
-        builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsImageMemoryMask |
-                                                        spv::MemorySemanticsAcquireReleaseMask);
-        return 0;
     case glslang::EOpMemoryBarrierShared:
         builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsWorkgroupMemoryMask |
                                                         spv::MemorySemanticsAcquireReleaseMask);
@@ -7159,6 +7940,15 @@
         builder.createMemoryBarrier(spv::ScopeWorkgroup, spv::MemorySemanticsAllMemory |
                                                          spv::MemorySemanticsAcquireReleaseMask);
         return 0;
+#ifndef GLSLANG_WEB
+    case glslang::EOpMemoryBarrierAtomicCounter:
+        builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsAtomicCounterMemoryMask |
+                                                        spv::MemorySemanticsAcquireReleaseMask);
+        return 0;
+    case glslang::EOpMemoryBarrierImage:
+        builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsImageMemoryMask |
+                                                        spv::MemorySemanticsAcquireReleaseMask);
+        return 0;
     case glslang::EOpAllMemoryBarrierWithGroupSync:
         builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeDevice,
                                         spv::MemorySemanticsAllMemory |
@@ -7203,30 +7993,80 @@
         builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsWorkgroupMemoryMask |
                                                         spv::MemorySemanticsAcquireReleaseMask);
         return spv::NoResult;
+
+    case glslang::EOpEmitVertex:
+        builder.createNoResultOp(spv::OpEmitVertex);
+        return 0;
+    case glslang::EOpEndPrimitive:
+        builder.createNoResultOp(spv::OpEndPrimitive);
+        return 0;
+
     case glslang::EOpSubgroupElect: {
         std::vector<spv::Id> operands;
         return createSubgroupOperation(op, typeId, operands, glslang::EbtVoid);
     }
-#ifdef AMD_EXTENSIONS
     case glslang::EOpTime:
     {
         std::vector<spv::Id> args; // Dummy arguments
         spv::Id id = builder.createBuiltinCall(typeId, getExtBuiltins(spv::E_SPV_AMD_gcn_shader), spv::TimeAMD, args);
         return builder.setPrecision(id, precision);
     }
-#endif
-#ifdef NV_EXTENSIONS
-    case glslang::EOpIgnoreIntersectionNV:
-        builder.createNoResultOp(spv::OpIgnoreIntersectionNV);
+    case glslang::EOpIgnoreIntersection:
+        builder.createNoResultOp(spv::OpIgnoreIntersectionKHR);
         return 0;
-    case glslang::EOpTerminateRayNV:
-        builder.createNoResultOp(spv::OpTerminateRayNV);
+    case glslang::EOpTerminateRay:
+        builder.createNoResultOp(spv::OpTerminateRayKHR);
         return 0;
+    case glslang::EOpRayQueryInitialize:
+        builder.createNoResultOp(spv::OpRayQueryInitializeKHR);
+        return 0;
+    case glslang::EOpRayQueryTerminate:
+        builder.createNoResultOp(spv::OpRayQueryTerminateKHR);
+        return 0;
+    case glslang::EOpRayQueryGenerateIntersection:
+        builder.createNoResultOp(spv::OpRayQueryGenerateIntersectionKHR);
+        return 0;
+    case glslang::EOpRayQueryConfirmIntersection:
+        builder.createNoResultOp(spv::OpRayQueryConfirmIntersectionKHR);
+        return 0;
+    case glslang::EOpBeginInvocationInterlock:
+        builder.createNoResultOp(spv::OpBeginInvocationInterlockEXT);
+        return 0;
+    case glslang::EOpEndInvocationInterlock:
+        builder.createNoResultOp(spv::OpEndInvocationInterlockEXT);
+        return 0;
+
+    case glslang::EOpIsHelperInvocation:
+    {
+        std::vector<spv::Id> args; // Dummy arguments
+        builder.addExtension(spv::E_SPV_EXT_demote_to_helper_invocation);
+        builder.addCapability(spv::CapabilityDemoteToHelperInvocationEXT);
+        return builder.createOp(spv::OpIsHelperInvocationEXT, typeId, args);
+    }
+
+    case glslang::EOpReadClockSubgroupKHR: {
+        std::vector<spv::Id> args;
+        args.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
+        builder.addExtension(spv::E_SPV_KHR_shader_clock);
+        builder.addCapability(spv::CapabilityShaderClockKHR);
+        return builder.createOp(spv::OpReadClockKHR, typeId, args);
+    }
+
+    case glslang::EOpReadClockDeviceKHR: {
+        std::vector<spv::Id> args;
+        args.push_back(builder.makeUintConstant(spv::ScopeDevice));
+        builder.addExtension(spv::E_SPV_KHR_shader_clock);
+        builder.addCapability(spv::CapabilityShaderClockKHR);
+        return builder.createOp(spv::OpReadClockKHR, typeId, args);
+    }
 #endif
     default:
-        logger->missingFunctionality("unknown operation with no arguments");
-        return 0;
+        break;
     }
+
+    logger->missingFunctionality("unknown operation with no arguments");
+
+    return 0;
 }
 
 spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol)
@@ -7239,22 +8079,26 @@
     }
 
     // it was not found, create it
-    id = createSpvVariable(symbol);
+    spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false);
+    auto forcedType = getForcedType(symbol->getQualifier().builtIn, symbol->getType());
+    id = createSpvVariable(symbol, forcedType.first);
     symbolValues[symbol->getId()] = id;
+    if (forcedType.second != spv::NoType)
+        forceType[id] = forcedType.second;
 
     if (symbol->getBasicType() != glslang::EbtBlock) {
         builder.addDecoration(id, TranslatePrecisionDecoration(symbol->getType()));
         builder.addDecoration(id, TranslateInterpolationDecoration(symbol->getType().getQualifier()));
         builder.addDecoration(id, TranslateAuxiliaryStorageDecoration(symbol->getType().getQualifier()));
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
         addMeshNVDecoration(id, /*member*/ -1, symbol->getType().getQualifier());
+        if (symbol->getQualifier().hasComponent())
+            builder.addDecoration(id, spv::DecorationComponent, symbol->getQualifier().layoutComponent);
+        if (symbol->getQualifier().hasIndex())
+            builder.addDecoration(id, spv::DecorationIndex, symbol->getQualifier().layoutIndex);
 #endif
         if (symbol->getType().getQualifier().hasSpecConstantId())
             builder.addDecoration(id, spv::DecorationSpecId, symbol->getType().getQualifier().layoutSpecConstantId);
-        if (symbol->getQualifier().hasIndex())
-            builder.addDecoration(id, spv::DecorationIndex, symbol->getQualifier().layoutIndex);
-        if (symbol->getQualifier().hasComponent())
-            builder.addDecoration(id, spv::DecorationComponent, symbol->getQualifier().layoutComponent);
         // atomic counters use this:
         if (symbol->getQualifier().hasOffset())
             builder.addDecoration(id, spv::DecorationOffset, symbol->getQualifier().layoutOffset);
@@ -7293,22 +8137,23 @@
             builder.addDecoration(id, spv::DecorationOffset, symbol->getQualifier().layoutXfbOffset);
     }
 
+    // add built-in variable decoration
+    if (builtIn != spv::BuiltInMax) {
+        builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn);
+    }
+
+#ifndef GLSLANG_WEB
     if (symbol->getType().isImage()) {
         std::vector<spv::Decoration> memory;
-        TranslateMemoryDecoration(symbol->getType().getQualifier(), memory, glslangIntermediate->usingVulkanMemoryModel());
+        TranslateMemoryDecoration(symbol->getType().getQualifier(), memory,
+            glslangIntermediate->usingVulkanMemoryModel());
         for (unsigned int i = 0; i < memory.size(); ++i)
             builder.addDecoration(id, memory[i]);
     }
 
-    // built-in variable decorations
-    spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false);
-    if (builtIn != spv::BuiltInMax)
-        builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn);
-
     // nonuniform
     builder.addDecoration(id, TranslateNonUniformDecoration(symbol->getType().getQualifier()));
 
-#ifdef NV_EXTENSIONS
     if (builtIn == spv::BuiltInSampleMask) {
           spv::Decoration decoration;
           // GL_NV_sample_mask_override_coverage extension
@@ -7318,6 +8163,7 @@
               decoration = (spv::Decoration)spv::DecorationMax;
         builder.addDecoration(id, decoration);
         if (decoration != spv::DecorationMax) {
+            builder.addCapability(spv::CapabilitySampleMaskOverrideCoverageNV);
             builder.addExtension(spv::E_SPV_NV_sample_mask_override_coverage);
         }
     }
@@ -7346,7 +8192,6 @@
         builder.addCapability(spv::CapabilityFragmentBarycentricNV);
         builder.addExtension(spv::E_SPV_NV_fragment_shader_barycentric);
     }
-#endif
 
     if (glslangIntermediate->getHlslFunctionality1() && symbol->getType().getQualifier().semanticName != nullptr) {
         builder.addExtension("SPV_GOOGLE_hlsl_functionality1");
@@ -7354,14 +8199,16 @@
                               symbol->getType().getQualifier().semanticName);
     }
 
-    if (symbol->getBasicType() == glslang::EbtReference) {
-        builder.addDecoration(id, symbol->getType().getQualifier().restrict ? spv::DecorationRestrictPointerEXT : spv::DecorationAliasedPointerEXT);
+    if (symbol->isReference()) {
+        builder.addDecoration(id, symbol->getType().getQualifier().restrict ?
+            spv::DecorationRestrictPointerEXT : spv::DecorationAliasedPointerEXT);
     }
+#endif
 
     return id;
 }
 
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
 // add per-primitive, per-view. per-task decorations to a struct member (member >= 0) or an object
 void TGlslangToSpvTraverser::addMeshNVDecoration(spv::Id id, int member, const glslang::TQualifier& qualifier)
 {
@@ -7416,8 +8263,9 @@
         // hand off to the non-spec-constant path
         assert(node.getAsConstantUnion() != nullptr || node.getAsSymbolNode() != nullptr);
         int nextConst = 0;
-        return createSpvConstantFromConstUnionArray(node.getType(), node.getAsConstantUnion() ? node.getAsConstantUnion()->getConstArray() : node.getAsSymbolNode()->getConstArray(),
-                                 nextConst, false);
+        return createSpvConstantFromConstUnionArray(node.getType(), node.getAsConstantUnion() ?
+            node.getAsConstantUnion()->getConstArray() : node.getAsSymbolNode()->getConstArray(),
+            nextConst, false);
     }
 
     // We now know we have a specialization constant to build
@@ -7470,7 +8318,8 @@
 // If there are not enough elements present in 'consts', 0 will be substituted;
 // an empty 'consts' can be used to create a fully zeroed SPIR-V constant.
 //
-spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glslang::TType& glslangType, const glslang::TConstUnionArray& consts, int& nextConst, bool specConstant)
+spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glslang::TType& glslangType,
+    const glslang::TConstUnionArray& consts, int& nextConst, bool specConstant)
 {
     // vector of constants for SPIR-V
     std::vector<spv::Id> spvConsts;
@@ -7486,6 +8335,9 @@
         glslang::TType vectorType(glslangType, 0);
         for (int col = 0; col < glslangType.getMatrixCols(); ++col)
             spvConsts.push_back(createSpvConstantFromConstUnionArray(vectorType, consts, nextConst, false));
+    } else if (glslangType.isCoopMat()) {
+        glslang::TType componentType(glslangType.getBasicType());
+        spvConsts.push_back(createSpvConstantFromConstUnionArray(componentType, consts, nextConst, false));
     } else if (glslangType.isStruct()) {
         glslang::TVector<glslang::TTypeLoc>::const_iterator iter;
         for (iter = glslangType.getStruct()->begin(); iter != glslangType.getStruct()->end(); ++iter)
@@ -7494,6 +8346,19 @@
         for (unsigned int i = 0; i < (unsigned int)glslangType.getVectorSize(); ++i) {
             bool zero = nextConst >= consts.size();
             switch (glslangType.getBasicType()) {
+            case glslang::EbtInt:
+                spvConsts.push_back(builder.makeIntConstant(zero ? 0 : consts[nextConst].getIConst()));
+                break;
+            case glslang::EbtUint:
+                spvConsts.push_back(builder.makeUintConstant(zero ? 0 : consts[nextConst].getUConst()));
+                break;
+            case glslang::EbtFloat:
+                spvConsts.push_back(builder.makeFloatConstant(zero ? 0.0F : (float)consts[nextConst].getDConst()));
+                break;
+            case glslang::EbtBool:
+                spvConsts.push_back(builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst()));
+                break;
+#ifndef GLSLANG_WEB
             case glslang::EbtInt8:
                 spvConsts.push_back(builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const()));
                 break;
@@ -7506,30 +8371,19 @@
             case glslang::EbtUint16:
                 spvConsts.push_back(builder.makeUint16Constant(zero ? 0 : consts[nextConst].getU16Const()));
                 break;
-            case glslang::EbtInt:
-                spvConsts.push_back(builder.makeIntConstant(zero ? 0 : consts[nextConst].getIConst()));
-                break;
-            case glslang::EbtUint:
-                spvConsts.push_back(builder.makeUintConstant(zero ? 0 : consts[nextConst].getUConst()));
-                break;
             case glslang::EbtInt64:
                 spvConsts.push_back(builder.makeInt64Constant(zero ? 0 : consts[nextConst].getI64Const()));
                 break;
             case glslang::EbtUint64:
                 spvConsts.push_back(builder.makeUint64Constant(zero ? 0 : consts[nextConst].getU64Const()));
                 break;
-            case glslang::EbtFloat:
-                spvConsts.push_back(builder.makeFloatConstant(zero ? 0.0F : (float)consts[nextConst].getDConst()));
-                break;
             case glslang::EbtDouble:
                 spvConsts.push_back(builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst()));
                 break;
             case glslang::EbtFloat16:
                 spvConsts.push_back(builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst()));
                 break;
-            case glslang::EbtBool:
-                spvConsts.push_back(builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst()));
-                break;
+#endif
             default:
                 assert(0);
                 break;
@@ -7541,6 +8395,19 @@
         bool zero = nextConst >= consts.size();
         spv::Id scalar = 0;
         switch (glslangType.getBasicType()) {
+        case glslang::EbtInt:
+            scalar = builder.makeIntConstant(zero ? 0 : consts[nextConst].getIConst(), specConstant);
+            break;
+        case glslang::EbtUint:
+            scalar = builder.makeUintConstant(zero ? 0 : consts[nextConst].getUConst(), specConstant);
+            break;
+        case glslang::EbtFloat:
+            scalar = builder.makeFloatConstant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant);
+            break;
+        case glslang::EbtBool:
+            scalar = builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst(), specConstant);
+            break;
+#ifndef GLSLANG_WEB
         case glslang::EbtInt8:
             scalar = builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const(), specConstant);
             break;
@@ -7553,29 +8420,25 @@
         case glslang::EbtUint16:
             scalar = builder.makeUint16Constant(zero ? 0 : consts[nextConst].getU16Const(), specConstant);
             break;
-        case glslang::EbtInt:
-            scalar = builder.makeIntConstant(zero ? 0 : consts[nextConst].getIConst(), specConstant);
-            break;
-        case glslang::EbtUint:
-            scalar = builder.makeUintConstant(zero ? 0 : consts[nextConst].getUConst(), specConstant);
-            break;
         case glslang::EbtInt64:
             scalar = builder.makeInt64Constant(zero ? 0 : consts[nextConst].getI64Const(), specConstant);
             break;
         case glslang::EbtUint64:
             scalar = builder.makeUint64Constant(zero ? 0 : consts[nextConst].getU64Const(), specConstant);
             break;
-        case glslang::EbtFloat:
-            scalar = builder.makeFloatConstant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant);
-            break;
         case glslang::EbtDouble:
             scalar = builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst(), specConstant);
             break;
         case glslang::EbtFloat16:
             scalar = builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant);
             break;
-        case glslang::EbtBool:
-            scalar = builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst(), specConstant);
+        case glslang::EbtReference:
+            scalar = builder.makeUint64Constant(zero ? 0 : consts[nextConst].getU64Const(), specConstant);
+            scalar = builder.createUnaryOp(spv::OpBitcast, typeId, scalar);
+            break;
+#endif
+        case glslang::EbtString:
+            scalar = builder.getStringId(consts[nextConst].getSConst()->c_str());
             break;
         default:
             assert(0);
@@ -7677,7 +8540,8 @@
 
 // Emit short-circuiting code, where 'right' is never evaluated unless
 // the left side is true (for &&) or false (for ||).
-spv::Id TGlslangToSpvTraverser::createShortCircuit(glslang::TOperator op, glslang::TIntermTyped& left, glslang::TIntermTyped& right)
+spv::Id TGlslangToSpvTraverser::createShortCircuit(glslang::TOperator op, glslang::TIntermTyped& left,
+    glslang::TIntermTyped& right)
 {
     spv::Id boolTypeId = builder.makeBoolType();
 
@@ -7720,7 +8584,7 @@
     return builder.createOp(spv::OpPhi, boolTypeId, phiOperands);
 }
 
-#ifdef AMD_EXTENSIONS
+#ifndef GLSLANG_WEB
 // Return type Id of the imported set of extended instructions corresponds to the name.
 // Import this set if it has not been imported yet.
 spv::Id TGlslangToSpvTraverser::getExtBuiltins(const char* name)
@@ -7760,7 +8624,8 @@
     // return 5; // make OpArrayLength result type be an int with signedness of 0
     // return 6; // revert version 5 change, which makes a different (new) kind of incorrect code,
                  // versions 4 and 6 each generate OpArrayLength as it has long been done
-    return 7; // GLSL volatile keyword maps to both SPIR-V decorations Volatile and Coherent
+    // return 7; // GLSL volatile keyword maps to both SPIR-V decorations Volatile and Coherent
+    return 8; // switch to new dead block eliminator; use OpUnreachable
 }
 
 // Write SPIR-V out to a binary file
@@ -7780,6 +8645,7 @@
 // Write SPIR-V out to a text file with 32-bit hexadecimal words
 void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName, const char* varName)
 {
+#ifndef GLSLANG_WEB
     std::ofstream out;
     out.open(baseName, std::ios::binary | std::ios::out);
     if (out.fail())
@@ -7807,6 +8673,7 @@
         out << "};";
     }
     out.close();
+#endif
 }
 
 //
@@ -7840,11 +8707,14 @@
 #if ENABLE_OPT
     // If from HLSL, run spirv-opt to "legalize" the SPIR-V for Vulkan
     // eg. forward and remove memory writes of opaque types.
-    if ((intermediate.getSource() == EShSourceHlsl || options->optimizeSize) && !options->disableOptimizer)
+    bool prelegalization = intermediate.getSource() == EShSourceHlsl;
+    if ((intermediate.getSource() == EShSourceHlsl || options->optimizeSize) && !options->disableOptimizer) {
         SpirvToolsLegalize(intermediate, spirv, logger, options);
+        prelegalization = false;
+    }
 
     if (options->validate)
-        SpirvToolsValidate(intermediate, spirv, logger);
+        SpirvToolsValidate(intermediate, spirv, logger, prelegalization);
 
     if (options->disassemble)
         SpirvToolsDisassemble(std::cout, spirv);
diff --git a/SPIRV/GlslangToSpv.h b/SPIRV/GlslangToSpv.h
index 86e1c23..3907be4 100755
--- a/SPIRV/GlslangToSpv.h
+++ b/SPIRV/GlslangToSpv.h
@@ -40,7 +40,7 @@
 #endif
 
 #include "SpvTools.h"
-#include "../glslang/Include/intermediate.h"
+#include "glslang/Include/intermediate.h"
 
 #include <string>
 #include <vector>
diff --git a/SPIRV/InReadableOrder.cpp b/SPIRV/InReadableOrder.cpp
index 52b2961..9d9410b 100644
--- a/SPIRV/InReadableOrder.cpp
+++ b/SPIRV/InReadableOrder.cpp
@@ -61,17 +61,22 @@
 // Use by calling visit() on the root block.
 class ReadableOrderTraverser {
 public:
-    explicit ReadableOrderTraverser(std::function<void(Block*)> callback) : callback_(callback) {}
+    ReadableOrderTraverser(std::function<void(Block*, spv::ReachReason, Block*)> callback)
+      : callback_(callback) {}
     // Visits the block if it hasn't been visited already and isn't currently
-    // being delayed.  Invokes callback(block), then descends into its
+    // being delayed.  Invokes callback(block, why, header), then descends into its
     // successors.  Delays merge-block and continue-block processing until all
-    // the branches have been completed.
-    void visit(Block* block)
+    // the branches have been completed.  If |block| is an unreachable merge block or
+    // an unreachable continue target, then |header| is the corresponding header block.
+    void visit(Block* block, spv::ReachReason why, Block* header)
     {
         assert(block);
+        if (why == spv::ReachViaControlFlow) {
+            reachableViaControlFlow_.insert(block);
+        }
         if (visited_.count(block) || delayed_.count(block))
             return;
-        callback_(block);
+        callback_(block, why, header);
         visited_.insert(block);
         Block* mergeBlock = nullptr;
         Block* continueBlock = nullptr;
@@ -87,27 +92,40 @@
                 delayed_.insert(continueBlock);
             }
         }
-        const auto successors = block->getSuccessors();
-        for (auto it = successors.cbegin(); it != successors.cend(); ++it)
-            visit(*it);
+        if (why == spv::ReachViaControlFlow) {
+            const auto& successors = block->getSuccessors();
+            for (auto it = successors.cbegin(); it != successors.cend(); ++it)
+                visit(*it, why, nullptr);
+        }
         if (continueBlock) {
+            const spv::ReachReason continueWhy =
+                (reachableViaControlFlow_.count(continueBlock) > 0)
+                    ? spv::ReachViaControlFlow
+                    : spv::ReachDeadContinue;
             delayed_.erase(continueBlock);
-            visit(continueBlock);
+            visit(continueBlock, continueWhy, block);
         }
         if (mergeBlock) {
+            const spv::ReachReason mergeWhy =
+                (reachableViaControlFlow_.count(mergeBlock) > 0)
+                    ? spv::ReachViaControlFlow
+                    : spv::ReachDeadMerge;
             delayed_.erase(mergeBlock);
-            visit(mergeBlock);
+            visit(mergeBlock, mergeWhy, block);
         }
     }
 
 private:
-    std::function<void(Block*)> callback_;
+    std::function<void(Block*, spv::ReachReason, Block*)> callback_;
     // Whether a block has already been visited or is being delayed.
     std::unordered_set<Block *> visited_, delayed_;
+
+    // The set of blocks that actually are reached via control flow.
+    std::unordered_set<Block *> reachableViaControlFlow_;
 };
 }
 
-void spv::inReadableOrder(Block* root, std::function<void(Block*)> callback)
+void spv::inReadableOrder(Block* root, std::function<void(Block*, spv::ReachReason, Block*)> callback)
 {
-    ReadableOrderTraverser(callback).visit(root);
+    ReadableOrderTraverser(callback).visit(root, spv::ReachViaControlFlow, nullptr);
 }
diff --git a/SPIRV/Logger.cpp b/SPIRV/Logger.cpp
index 48bd4e3..cdc8469 100644
--- a/SPIRV/Logger.cpp
+++ b/SPIRV/Logger.cpp
@@ -32,6 +32,8 @@
 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 
+#ifndef GLSLANG_WEB
+
 #include "Logger.h"
 
 #include <algorithm>
@@ -66,3 +68,5 @@
 }
 
 } // end spv namespace
+
+#endif
diff --git a/SPIRV/Logger.h b/SPIRV/Logger.h
index 2e4ddaf..411367c 100644
--- a/SPIRV/Logger.h
+++ b/SPIRV/Logger.h
@@ -46,6 +46,14 @@
 public:
     SpvBuildLogger() {}
 
+#ifdef GLSLANG_WEB
+    void tbdFunctionality(const std::string& f) { }
+    void missingFunctionality(const std::string& f) { }
+    void warning(const std::string& w) { }
+    void error(const std::string& e) { errors.push_back(e); }
+    std::string getAllMessages() { return ""; }
+#else
+
     // Registers a TBD functionality.
     void tbdFunctionality(const std::string& f);
     // Registers a missing functionality.
@@ -59,6 +67,7 @@
     // Returns all messages accumulated in the order of:
     // TBD functionalities, missing functionalities, warnings, errors.
     std::string getAllMessages() const;
+#endif
 
 private:
     SpvBuildLogger(const SpvBuildLogger&);
diff --git a/SPIRV/NonSemanticDebugPrintf.h b/SPIRV/NonSemanticDebugPrintf.h
new file mode 100644
index 0000000..83796d7
--- /dev/null
+++ b/SPIRV/NonSemanticDebugPrintf.h
@@ -0,0 +1,50 @@
+// Copyright (c) 2020 The Khronos Group Inc.
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and/or associated documentation files (the
+// "Materials"), to deal in the Materials without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Materials, and to
+// permit persons to whom the Materials are furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Materials.
+// 
+// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
+// KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
+// SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
+//    https://www.khronos.org/registry/
+// 
+// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+// MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+// 
+
+#ifndef SPIRV_UNIFIED1_NonSemanticDebugPrintf_H_
+#define SPIRV_UNIFIED1_NonSemanticDebugPrintf_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum {
+    NonSemanticDebugPrintfRevision = 1,
+    NonSemanticDebugPrintfRevision_BitWidthPadding = 0x7fffffff
+};
+
+enum NonSemanticDebugPrintfInstructions {
+    NonSemanticDebugPrintfDebugPrintf = 1,
+    NonSemanticDebugPrintfInstructionsMax = 0x7fffffff
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // SPIRV_UNIFIED1_NonSemanticDebugPrintf_H_
diff --git a/SPIRV/SPVRemapper.h b/SPIRV/SPVRemapper.h
index 97e3f31..d6b9c34 100644
--- a/SPIRV/SPVRemapper.h
+++ b/SPIRV/SPVRemapper.h
@@ -45,7 +45,7 @@
 
 // MSVC defines __cplusplus as an older value, even when it supports almost all of 11.
 // We handle that here by making our own symbol.
-#if __cplusplus >= 201103L || _MSC_VER >= 1700
+#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1700)
 #   define use_cpp11 1
 #endif
 
@@ -195,7 +195,7 @@
    // Header access & set methods
    spirword_t  magic()    const       { return spv[0]; } // return magic number
    spirword_t  bound()    const       { return spv[3]; } // return Id bound from header
-   spirword_t  bound(spirword_t b)    { return spv[3] = b; };
+   spirword_t  bound(spirword_t b)    { return spv[3] = b; }
    spirword_t  genmagic() const       { return spv[2]; } // generator magic
    spirword_t  genmagic(spirword_t m) { return spv[2] = m; }
    spirword_t  schemaNum() const      { return spv[4]; } // schema number from header
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
old mode 100755
new mode 100644
index 8355d83..6cf70a1
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2014-2015 LunarG, Inc.
 // Copyright (C) 2015-2018 Google, Inc.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -46,7 +47,9 @@
 
 #include "SpvBuilder.h"
 
+#ifndef GLSLANG_WEB
 #include "hex_float.h"
+#endif
 
 #ifndef _WIN32
     #include <cstdio>
@@ -230,6 +233,11 @@
 
 Id Builder::makeIntegerType(int width, bool hasSign)
 {
+#ifdef GLSLANG_WEB
+    assert(width == 32);
+    width = 32;
+#endif
+
     // try to find it
     Instruction* type;
     for (int t = 0; t < (int)groupedTypes[OpTypeInt].size(); ++t) {
@@ -265,6 +273,11 @@
 
 Id Builder::makeFloatType(int width)
 {
+#ifdef GLSLANG_WEB
+    assert(width == 32);
+    width = 32;
+#endif
+
     // try to find it
     Instruction* type;
     for (int t = 0; t < (int)groupedTypes[OpTypeFloat].size(); ++t) {
@@ -388,6 +401,33 @@
     return type->getResultId();
 }
 
+Id Builder::makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols)
+{
+    // try to find it
+    Instruction* type;
+    for (int t = 0; t < (int)groupedTypes[OpTypeCooperativeMatrixNV].size(); ++t) {
+        type = groupedTypes[OpTypeCooperativeMatrixNV][t];
+        if (type->getIdOperand(0) == component &&
+            type->getIdOperand(1) == scope &&
+            type->getIdOperand(2) == rows &&
+            type->getIdOperand(3) == cols)
+            return type->getResultId();
+    }
+
+    // not found, make it
+    type = new Instruction(getUniqueId(), NoType, OpTypeCooperativeMatrixNV);
+    type->addIdOperand(component);
+    type->addIdOperand(scope);
+    type->addIdOperand(rows);
+    type->addIdOperand(cols);
+    groupedTypes[OpTypeCooperativeMatrixNV].push_back(type);
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+    module.mapInstruction(type);
+
+    return type->getResultId();
+}
+
+
 // TODO: performance: track arrays per stride
 // If a stride is supplied (non-zero) make an array.
 // If no stride (0), reuse previous array types.
@@ -457,7 +497,8 @@
     return type->getResultId();
 }
 
-Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, bool ms, unsigned sampled, ImageFormat format)
+Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, bool ms, unsigned sampled,
+    ImageFormat format)
 {
     assert(sampled == 1 || sampled == 2);
 
@@ -489,6 +530,7 @@
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
     module.mapInstruction(type);
 
+#ifndef GLSLANG_WEB
     // deal with capabilities
     switch (dim) {
     case DimBuffer:
@@ -534,6 +576,7 @@
                 addCapability(CapabilityImageMSArray);
         }
     }
+#endif
 
     return type->getResultId();
 }
@@ -559,22 +602,38 @@
     return type->getResultId();
 }
 
-#ifdef NV_EXTENSIONS
-Id Builder::makeAccelerationStructureNVType()
+#ifndef GLSLANG_WEB
+Id Builder::makeAccelerationStructureType()
 {
     Instruction *type;
-    if (groupedTypes[OpTypeAccelerationStructureNV].size() == 0) {
-        type = new Instruction(getUniqueId(), NoType, OpTypeAccelerationStructureNV);
-        groupedTypes[OpTypeAccelerationStructureNV].push_back(type);
+    if (groupedTypes[OpTypeAccelerationStructureKHR].size() == 0) {
+        type = new Instruction(getUniqueId(), NoType, OpTypeAccelerationStructureKHR);
+        groupedTypes[OpTypeAccelerationStructureKHR].push_back(type);
         constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
         module.mapInstruction(type);
     } else {
-        type = groupedTypes[OpTypeAccelerationStructureNV].back();
+        type = groupedTypes[OpTypeAccelerationStructureKHR].back();
+    }
+
+    return type->getResultId();
+}
+
+Id Builder::makeRayQueryType()
+{
+    Instruction *type;
+    if (groupedTypes[OpTypeRayQueryProvisionalKHR].size() == 0) {
+        type = new Instruction(getUniqueId(), NoType, OpTypeRayQueryProvisionalKHR);
+        groupedTypes[OpTypeRayQueryProvisionalKHR].push_back(type);
+        constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+        module.mapInstruction(type);
+    } else {
+        type = groupedTypes[OpTypeRayQueryProvisionalKHR].back();
     }
 
     return type->getResultId();
 }
 #endif
+
 Id Builder::getDerefTypeId(Id resultId) const
 {
     Id typeId = getTypeId(resultId);
@@ -623,6 +682,9 @@
     }
     case OpTypeStruct:
         return instr->getNumOperands();
+    case OpTypeCooperativeMatrixNV:
+        // has only one constituent when used with OpCompositeConstruct.
+        return 1;
     default:
         assert(0);
         return 1;
@@ -669,6 +731,7 @@
     case OpTypeMatrix:
     case OpTypeArray:
     case OpTypeRuntimeArray:
+    case OpTypeCooperativeMatrixNV:
         return instr->getIdOperand(0);
     case OpTypePointer:
         return instr->getIdOperand(1);
@@ -908,6 +971,10 @@
 
 Id Builder::makeDoubleConstant(double d, bool specConstant)
 {
+#ifdef GLSLANG_WEB
+    assert(0);
+    return NoResult;
+#else
     Op opcode = specConstant ? OpSpecConstant : OpConstant;
     Id typeId = makeFloatType(64);
     union { double db; unsigned long long ull; } u;
@@ -932,10 +999,15 @@
     module.mapInstruction(c);
 
     return c->getResultId();
+#endif
 }
 
 Id Builder::makeFloat16Constant(float f16, bool specConstant)
 {
+#ifdef GLSLANG_WEB
+    assert(0);
+    return NoResult;
+#else
     Op opcode = specConstant ? OpSpecConstant : OpConstant;
     Id typeId = makeFloatType(16);
 
@@ -960,36 +1032,43 @@
     module.mapInstruction(c);
 
     return c->getResultId();
+#endif
 }
 
 Id Builder::makeFpConstant(Id type, double d, bool specConstant)
 {
-        assert(isFloatType(type));
+#ifdef GLSLANG_WEB
+    const int width = 32;
+    assert(width == getScalarTypeWidth(type));
+#else
+    const int width = getScalarTypeWidth(type);
+#endif
 
-        switch (getScalarTypeWidth(type)) {
-        case 16:
-                return makeFloat16Constant((float)d, specConstant);
-        case 32:
-                return makeFloatConstant((float)d, specConstant);
-        case 64:
-                return makeDoubleConstant(d, specConstant);
-        default:
-                break;
-        }
+    assert(isFloatType(type));
 
-        assert(false);
-        return NoResult;
+    switch (width) {
+    case 16:
+            return makeFloat16Constant((float)d, specConstant);
+    case 32:
+            return makeFloatConstant((float)d, specConstant);
+    case 64:
+            return makeDoubleConstant(d, specConstant);
+    default:
+            break;
+    }
+
+    assert(false);
+    return NoResult;
 }
 
-Id Builder::findCompositeConstant(Op typeClass, const std::vector<Id>& comps)
+Id Builder::findCompositeConstant(Op typeClass, Id typeId, const std::vector<Id>& comps)
 {
     Instruction* constant = 0;
     bool found = false;
     for (int i = 0; i < (int)groupedConstants[typeClass].size(); ++i) {
         constant = groupedConstants[typeClass][i];
 
-        // same shape?
-        if (constant->getNumOperands() != (int)comps.size())
+        if (constant->getTypeId() != typeId)
             continue;
 
         // same contents?
@@ -1044,8 +1123,9 @@
     case OpTypeVector:
     case OpTypeArray:
     case OpTypeMatrix:
+    case OpTypeCooperativeMatrixNV:
         if (! specConstant) {
-            Id existing = findCompositeConstant(typeClass, members);
+            Id existing = findCompositeConstant(typeClass, typeId, members);
             if (existing)
                 return existing;
         }
@@ -1207,7 +1287,8 @@
 
 // Comments in header
 Function* Builder::makeFunctionEntry(Decoration precision, Id returnType, const char* name,
-                                     const std::vector<Id>& paramTypes, const std::vector<std::vector<Decoration>>& decorations, Block **entry)
+                                     const std::vector<Id>& paramTypes,
+                                     const std::vector<std::vector<Decoration>>& decorations, Block **entry)
 {
     // Make the function and initial instructions in it
     Id typeId = makeFunctionType(returnType, paramTypes);
@@ -1275,11 +1356,13 @@
 }
 
 // Comments in header
-Id Builder::createVariable(StorageClass storageClass, Id type, const char* name)
+Id Builder::createVariable(StorageClass storageClass, Id type, const char* name, Id initializer)
 {
     Id pointerType = makePointer(storageClass, type);
     Instruction* inst = new Instruction(getUniqueId(), pointerType, OpVariable);
     inst->addImmediateOperand(storageClass);
+    if (initializer != NoResult)
+        inst->addIdOperand(initializer);
 
     switch (storageClass) {
     case StorageClassFunction:
@@ -1308,7 +1391,8 @@
 }
 
 // av/vis/nonprivate are unnecessary and illegal for some storage classes.
-spv::MemoryAccessMask Builder::sanitizeMemoryAccessForStorageClass(spv::MemoryAccessMask memoryAccess, StorageClass sc) const
+spv::MemoryAccessMask Builder::sanitizeMemoryAccessForStorageClass(spv::MemoryAccessMask memoryAccess, StorageClass sc)
+    const
 {
     switch (sc) {
     case spv::StorageClassUniform:
@@ -1327,7 +1411,8 @@
 }
 
 // Comments in header
-void Builder::createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment)
+void Builder::createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAccess, spv::Scope scope,
+    unsigned int alignment)
 {
     Instruction* store = new Instruction(OpStore);
     store->addIdOperand(lValue);
@@ -1408,12 +1493,30 @@
     return length->getResultId();
 }
 
+Id Builder::createCooperativeMatrixLength(Id type)
+{
+    spv::Id intType = makeUintType(32);
+
+    // Generate code for spec constants if in spec constant operation
+    // generation mode.
+    if (generatingOpCodeForSpecConst) {
+        return createSpecConstantOp(OpCooperativeMatrixLengthNV, intType, std::vector<Id>(1, type), std::vector<Id>());
+    }
+
+    Instruction* length = new Instruction(getUniqueId(), intType, OpCooperativeMatrixLengthNV);
+    length->addIdOperand(type);
+    buildPoint->addInstruction(std::unique_ptr<Instruction>(length));
+
+    return length->getResultId();
+}
+
 Id Builder::createCompositeExtract(Id composite, Id typeId, unsigned index)
 {
     // Generate code for spec constants if in spec constant operation
     // generation mode.
     if (generatingOpCodeForSpecConst) {
-        return createSpecConstantOp(OpCompositeExtract, typeId, std::vector<Id>(1, composite), std::vector<Id>(1, index));
+        return createSpecConstantOp(OpCompositeExtract, typeId, std::vector<Id>(1, composite),
+            std::vector<Id>(1, index));
     }
     Instruction* extract = new Instruction(getUniqueId(), typeId, OpCompositeExtract);
     extract->addIdOperand(composite);
@@ -1615,7 +1718,8 @@
     return op->getResultId();
 }
 
-Id Builder::createSpecConstantOp(Op opCode, Id typeId, const std::vector<Id>& operands, const std::vector<unsigned>& literals)
+Id Builder::createSpecConstantOp(Op opCode, Id typeId, const std::vector<Id>& operands,
+    const std::vector<unsigned>& literals)
 {
     Instruction* op = new Instruction(getUniqueId(), typeId, OpSpecConstantOp);
     op->addImmediateOperand((unsigned) opCode);
@@ -1758,7 +1862,7 @@
 // Accept all parameters needed to create a texture instruction.
 // Create the correct instruction based on the inputs, and make the call.
 Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse, bool fetch, bool proj, bool gather,
-    bool noImplicitLod, const TextureParameters& parameters)
+    bool noImplicitLod, const TextureParameters& parameters, ImageOperandsMask signExtensionMask)
 {
     static const int maxTextureArgs = 10;
     Id texArgs[maxTextureArgs] = {};
@@ -1775,7 +1879,7 @@
     if (parameters.component != NoResult)
         texArgs[numArgs++] = parameters.component;
 
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
     if (parameters.granularity != NoResult)
         texArgs[numArgs++] = parameters.granularity;
     if (parameters.coarse != NoResult)
@@ -1785,8 +1889,8 @@
     //
     // Set up the optional arguments
     //
-    int optArgNum = numArgs;                        // track which operand, if it exists, is the mask of optional arguments
-    ++numArgs;                                      // speculatively make room for the mask operand
+    int optArgNum = numArgs;    // track which operand, if it exists, is the mask of optional arguments
+    ++numArgs;                  // speculatively make room for the mask operand
     ImageOperandsMask mask = ImageOperandsMaskNone; // the mask operand
     if (parameters.bias) {
         mask = (ImageOperandsMask)(mask | ImageOperandsBiasMask);
@@ -1822,6 +1926,7 @@
         mask = (ImageOperandsMask)(mask | ImageOperandsConstOffsetsMask);
         texArgs[numArgs++] = parameters.offsets;
     }
+#ifndef GLSLANG_WEB
     if (parameters.sample) {
         mask = (ImageOperandsMask)(mask | ImageOperandsSampleMask);
         texArgs[numArgs++] = parameters.sample;
@@ -1839,6 +1944,8 @@
     if (parameters.volatil) {
         mask = mask | ImageOperandsVolatileTexelKHRMask;
     }
+#endif
+    mask = mask | signExtensionMask;
     if (mask == ImageOperandsMaskNone)
         --numArgs;  // undo speculative reservation for the mask argument
     else
@@ -1853,10 +1960,9 @@
             opCode = OpImageSparseFetch;
         else
             opCode = OpImageFetch;
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
     } else if (parameters.granularity && parameters.coarse) {
         opCode = OpImageSampleFootprintNV;
-#endif
     } else if (gather) {
         if (parameters.Dref)
             if (sparse)
@@ -1868,6 +1974,7 @@
                 opCode = OpImageSparseGather;
             else
                 opCode = OpImageGather;
+#endif
     } else if (explicitLod) {
         if (parameters.Dref) {
             if (proj)
@@ -2016,11 +2123,7 @@
         break;
     }
     case OpImageQueryLod:
-#ifdef AMD_EXTENSIONS
         resultType = makeVectorType(getScalarTypeId(getTypeId(parameters.coords)), 2);
-#else
-        resultType = makeVectorType(makeFloatType(32), 2);
-#endif
         break;
     case OpImageQueryLevels:
     case OpImageQuerySamples:
@@ -2038,6 +2141,7 @@
     if (parameters.lod)
         query->addIdOperand(parameters.lod);
     buildPoint->addInstruction(std::unique_ptr<Instruction>(query));
+    addCapability(CapabilityImageQuery);
 
     return query->getResultId();
 }
@@ -2105,7 +2209,8 @@
         if (constituent == 0)
             resultId = subResultId;
         else
-            resultId = setPrecision(createBinOp(equal ? OpLogicalAnd : OpLogicalOr, boolType, resultId, subResultId), precision);
+            resultId = setPrecision(createBinOp(equal ? OpLogicalAnd : OpLogicalOr, boolType, resultId, subResultId),
+                                    precision);
     }
 
     return resultId;
@@ -2114,7 +2219,8 @@
 // OpCompositeConstruct
 Id Builder::createCompositeConstruct(Id typeId, const std::vector<Id>& constituents)
 {
-    assert(isAggregateType(typeId) || (getNumTypeConstituents(typeId) > 1 && getNumTypeConstituents(typeId) == (int)constituents.size()));
+    assert(isAggregateType(typeId) || (getNumTypeConstituents(typeId) > 1 &&
+           getNumTypeConstituents(typeId) == (int)constituents.size()));
 
     if (generatingOpCodeForSpecConst) {
         // Sometime, even in spec-constant-op mode, the constant composite to be
@@ -2231,7 +2337,12 @@
     int numRows = getTypeNumRows(resultTypeId);
 
     Instruction* instr = module.getInstruction(componentTypeId);
-    unsigned bitCount = instr->getImmediateOperand(0);
+#ifdef GLSLANG_WEB
+    const unsigned bitCount = 32;
+    assert(bitCount == instr->getImmediateOperand(0));
+#else
+    const unsigned bitCount = instr->getImmediateOperand(0);
+#endif
 
     // Optimize matrix constructed from a bigger matrix
     if (isMatrix(sources[0]) && getNumColumns(sources[0]) >= numCols && getNumRows(sources[0]) >= numRows) {
@@ -2522,7 +2633,8 @@
 }
 
 // Comments in header
-void Builder::accessChainPushSwizzle(std::vector<unsigned>& swizzle, Id preSwizzleBaseType, AccessChain::CoherentFlags coherentFlags, unsigned int alignment)
+void Builder::accessChainPushSwizzle(std::vector<unsigned>& swizzle, Id preSwizzleBaseType,
+    AccessChain::CoherentFlags coherentFlags, unsigned int alignment)
 {
     accessChain.coherentFlags |= coherentFlags;
     accessChain.alignment |= alignment;
@@ -2576,7 +2688,8 @@
 }
 
 // Comments in header
-Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resultType, spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment)
+Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resultType,
+    spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment)
 {
     Id id;
 
@@ -2598,15 +2711,22 @@
                 }
             }
 
-            if (constant)
+            if (constant) {
                 id = createCompositeExtract(accessChain.base, swizzleBase, indexes);
-            else {
-                // make a new function variable for this r-value
-                Id lValue = createVariable(StorageClassFunction, getTypeId(accessChain.base), "indexable");
-
-                // store into it
-                createStore(accessChain.base, lValue);
-
+            } else {
+                Id lValue = NoResult;
+                if (spvVersion >= Spv_1_4) {
+                    // make a new function variable for this r-value, using an initializer,
+                    // and mark it as NonWritable so that downstream it can be detected as a lookup
+                    // table
+                    lValue = createVariable(StorageClassFunction, getTypeId(accessChain.base), "indexable",
+                        accessChain.base);
+                    addDecoration(lValue, DecorationNonWritable);
+                } else {
+                    lValue = createVariable(StorageClassFunction, getTypeId(accessChain.base), "indexable");
+                    // store into it
+                    createStore(accessChain.base, lValue);
+                }
                 // move base to the new variable
                 accessChain.base = lValue;
                 accessChain.isRValue = false;
@@ -2627,7 +2747,13 @@
         }
 
         // load through the access chain
-        id = createLoad(collapseAccessChain(), memoryAccess, scope, alignment);
+        id = collapseAccessChain();
+        // Apply nonuniform both to the access chain and the loaded value.
+        // Buffer accesses need the access chain decorated, and this is where
+        // loaded image types get decorated. TODO: This should maybe move to
+        // createImageTextureFunctionCall.
+        addDecoration(id, nonUniform);
+        id = createLoad(id, memoryAccess, scope, alignment);
         setPrecision(id, precision);
         addDecoration(id, nonUniform);
     }
@@ -2908,14 +3034,14 @@
 }
 
 void Builder::createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control,
-                              unsigned int dependencyLength)
+                              const std::vector<unsigned int>& operands)
 {
     Instruction* merge = new Instruction(OpLoopMerge);
     merge->addIdOperand(mergeBlock->getId());
     merge->addIdOperand(continueBlock->getId());
     merge->addImmediateOperand(control);
-    if ((control & LoopControlDependencyLengthMask) != 0)
-        merge->addImmediateOperand(dependencyLength);
+    for (int op = 0; op < (int)operands.size(); ++op)
+        merge->addImmediateOperand(operands[op]);
     buildPoint->addInstruction(std::unique_ptr<Instruction>(merge));
 }
 
@@ -2981,7 +3107,8 @@
         dumpSourceInstructions(iItr->first, *iItr->second, out);
 }
 
-void Builder::dumpInstructions(std::vector<unsigned int>& out, const std::vector<std::unique_ptr<Instruction> >& instructions) const
+void Builder::dumpInstructions(std::vector<unsigned int>& out,
+    const std::vector<std::unique_ptr<Instruction> >& instructions) const
 {
     for (int i = 0; i < (int)instructions.size(); ++i) {
         instructions[i]->dump(out);
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
old mode 100755
new mode 100644
index edeac1b..71b90d6
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -1,7 +1,8 @@
 //
 // Copyright (C) 2014-2015 LunarG, Inc.
-// Copyright (C) 2015-2018 Google, Inc.
+// Copyright (C) 2015-2020 Google, Inc.
 // Copyright (C) 2017 ARM Limited.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -61,6 +62,15 @@
 
 namespace spv {
 
+typedef enum {
+    Spv_1_0 = (1 << 16),
+    Spv_1_1 = (1 << 16) | (1 << 8),
+    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 {
 public:
     Builder(unsigned int spvVersion, unsigned int userNumber, SpvBuildLogger* logger);
@@ -85,6 +95,7 @@
         const char* file_c_str = str.c_str();
         fileString->addStringOperand(file_c_str);
         strings.push_back(std::unique_ptr<Instruction>(fileString));
+        module.mapInstruction(fileString);
         stringIds[file_c_str] = strId;
         return strId;
     }
@@ -97,6 +108,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);
@@ -155,9 +180,12 @@
     Id makeImageType(Id sampledType, Dim, bool depth, bool arrayed, bool ms, unsigned sampled, ImageFormat format);
     Id makeSamplerType();
     Id makeSampledImageType(Id imageType);
+    Id makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols);
 
     // accelerationStructureNV type
-    Id makeAccelerationStructureNVType();
+    Id makeAccelerationStructureType();
+    // rayQueryEXT type
+    Id makeRayQueryType();
 
     // For querying about types.
     Id getTypeId(Id resultId) const { return module.getTypeId(resultId); }
@@ -172,26 +200,39 @@
     Id getContainedTypeId(Id typeId) const;
     Id getContainedTypeId(Id typeId, int) const;
     StorageClass getTypeStorageClass(Id typeId) const { return module.getStorageClass(typeId); }
-    ImageFormat getImageTypeFormat(Id typeId) const { return (ImageFormat)module.getInstruction(typeId)->getImmediateOperand(6); }
+    ImageFormat getImageTypeFormat(Id typeId) const
+        { return (ImageFormat)module.getInstruction(typeId)->getImmediateOperand(6); }
 
     bool isPointer(Id resultId)      const { return isPointerType(getTypeId(resultId)); }
     bool isScalar(Id resultId)       const { return isScalarType(getTypeId(resultId)); }
     bool isVector(Id resultId)       const { return isVectorType(getTypeId(resultId)); }
     bool isMatrix(Id resultId)       const { return isMatrixType(getTypeId(resultId)); }
+    bool isCooperativeMatrix(Id resultId)const { return isCooperativeMatrixType(getTypeId(resultId)); }
     bool isAggregate(Id resultId)    const { return isAggregateType(getTypeId(resultId)); }
     bool isSampledImage(Id resultId) const { return isSampledImageType(getTypeId(resultId)); }
 
-    bool isBoolType(Id typeId)               { return groupedTypes[OpTypeBool].size() > 0 && typeId == groupedTypes[OpTypeBool].back()->getResultId(); }
-    bool isIntType(Id typeId)          const { return getTypeClass(typeId) == OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) != 0; }
-    bool isUintType(Id typeId)         const { return getTypeClass(typeId) == OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) == 0; }
+    bool isBoolType(Id typeId)
+        { return groupedTypes[OpTypeBool].size() > 0 && typeId == groupedTypes[OpTypeBool].back()->getResultId(); }
+    bool isIntType(Id typeId)          const
+        { return getTypeClass(typeId) == OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) != 0; }
+    bool isUintType(Id typeId)         const
+        { return getTypeClass(typeId) == OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) == 0; }
     bool isFloatType(Id typeId)        const { return getTypeClass(typeId) == OpTypeFloat; }
     bool isPointerType(Id typeId)      const { return getTypeClass(typeId) == OpTypePointer; }
-    bool isScalarType(Id typeId)       const { return getTypeClass(typeId) == OpTypeFloat  || getTypeClass(typeId) == OpTypeInt || getTypeClass(typeId) == OpTypeBool; }
+    bool isScalarType(Id typeId)       const
+        { return getTypeClass(typeId) == OpTypeFloat || getTypeClass(typeId) == OpTypeInt ||
+          getTypeClass(typeId) == OpTypeBool; }
     bool isVectorType(Id typeId)       const { return getTypeClass(typeId) == OpTypeVector; }
     bool isMatrixType(Id typeId)       const { return getTypeClass(typeId) == OpTypeMatrix; }
     bool isStructType(Id typeId)       const { return getTypeClass(typeId) == OpTypeStruct; }
     bool isArrayType(Id typeId)        const { return getTypeClass(typeId) == OpTypeArray; }
-    bool isAggregateType(Id typeId)    const { return isArrayType(typeId) || isStructType(typeId); }
+#ifdef GLSLANG_WEB
+    bool isCooperativeMatrixType(Id typeId)const { return false; }
+#else
+    bool isCooperativeMatrixType(Id typeId)const { return getTypeClass(typeId) == OpTypeCooperativeMatrixNV; }
+#endif
+    bool isAggregateType(Id typeId)    const
+        { return isArrayType(typeId) || isStructType(typeId) || isCooperativeMatrixType(typeId); }
     bool isImageType(Id typeId)        const { return getTypeClass(typeId) == OpTypeImage; }
     bool isSamplerType(Id typeId)      const { return getTypeClass(typeId) == OpTypeSampler; }
     bool isSampledImageType(Id typeId) const { return getTypeClass(typeId) == OpTypeSampledImage; }
@@ -203,7 +244,8 @@
     bool isConstant(Id resultId) const { return isConstantOpCode(getOpCode(resultId)); }
     bool isConstantScalar(Id resultId) const { return getOpCode(resultId) == OpConstant; }
     bool isSpecConstant(Id resultId) const { return isSpecConstantOpCode(getOpCode(resultId)); }
-    unsigned int getConstantScalar(Id resultId) const { return module.getInstruction(resultId)->getImmediateOperand(0); }
+    unsigned int getConstantScalar(Id resultId) const
+        { return module.getInstruction(resultId)->getImmediateOperand(0); }
     StorageClass getStorageClass(Id resultId) const { return getTypeStorageClass(getTypeId(resultId)); }
 
     int getScalarTypeWidth(Id typeId) const
@@ -245,14 +287,22 @@
 
     // For making new constants (will return old constant if the requested one was already made).
     Id makeBoolConstant(bool b, bool specConstant = false);
-    Id makeInt8Constant(int i, bool specConstant = false)        { return makeIntConstant(makeIntType(8),  (unsigned)i, specConstant); }
-    Id makeUint8Constant(unsigned u, bool specConstant = false)  { return makeIntConstant(makeUintType(8),           u, specConstant); }
-    Id makeInt16Constant(int i, bool specConstant = false)       { return makeIntConstant(makeIntType(16),  (unsigned)i, specConstant); }
-    Id makeUint16Constant(unsigned u, bool specConstant = false) { return makeIntConstant(makeUintType(16),           u, specConstant); }
-    Id makeIntConstant(int i, bool specConstant = false)         { return makeIntConstant(makeIntType(32),  (unsigned)i, specConstant); }
-    Id makeUintConstant(unsigned u, bool specConstant = false)   { return makeIntConstant(makeUintType(32),           u, specConstant); }
-    Id makeInt64Constant(long long i, bool specConstant = false)            { return makeInt64Constant(makeIntType(64),  (unsigned long long)i, specConstant); }
-    Id makeUint64Constant(unsigned long long u, bool specConstant = false)  { return makeInt64Constant(makeUintType(64),                     u, specConstant); }
+    Id makeInt8Constant(int i, bool specConstant = false)
+        { return makeIntConstant(makeIntType(8),  (unsigned)i, specConstant); }
+    Id makeUint8Constant(unsigned u, bool specConstant = false)
+        { return makeIntConstant(makeUintType(8),           u, specConstant); }
+    Id makeInt16Constant(int i, bool specConstant = false)
+        { return makeIntConstant(makeIntType(16),  (unsigned)i, specConstant); }
+    Id makeUint16Constant(unsigned u, bool specConstant = false)
+        { return makeIntConstant(makeUintType(16),           u, specConstant); }
+    Id makeIntConstant(int i, bool specConstant = false)
+        { return makeIntConstant(makeIntType(32),  (unsigned)i, specConstant); }
+    Id makeUintConstant(unsigned u, bool specConstant = false)
+        { return makeIntConstant(makeUintType(32),           u, specConstant); }
+    Id makeInt64Constant(long long i, bool specConstant = false)
+        { return makeInt64Constant(makeIntType(64),  (unsigned long long)i, specConstant); }
+    Id makeUint64Constant(unsigned long long u, bool specConstant = false)
+        { return makeInt64Constant(makeUintType(64),                     u, specConstant); }
     Id makeFloatConstant(float f, bool specConstant = false);
     Id makeDoubleConstant(double d, bool specConstant = false);
     Id makeFloat16Constant(float f16, bool specConstant = false);
@@ -283,8 +333,8 @@
     // Make a shader-style function, and create its entry block if entry is non-zero.
     // Return the function, pass back the entry.
     // The returned pointer is only valid for the lifetime of this builder.
-    Function* makeFunctionEntry(Decoration precision, Id returnType, const char* name, const std::vector<Id>& paramTypes,
-                                const std::vector<std::vector<Decoration>>& precisions, Block **entry = 0);
+    Function* makeFunctionEntry(Decoration precision, Id returnType, const char* name,
+        const std::vector<Id>& paramTypes, const std::vector<std::vector<Decoration>>& precisions, Block **entry = 0);
 
     // Create a return. An 'implicit' return is one not appearing in the source
     // code.  In the case of an implicit return, no post-return block is inserted.
@@ -297,16 +347,18 @@
     void makeDiscard();
 
     // Create a global or function local or IO variable.
-    Id createVariable(StorageClass, Id type, const char* name = 0);
+    Id createVariable(StorageClass, Id type, const char* name = 0, Id initializer = NoResult);
 
     // Create an intermediate with an undefined value.
     Id createUndefined(Id type);
 
     // Store into an Id and return the l-value
-    void createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
+    void createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone,
+        spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
 
     // Load from an Id and return it
-    Id createLoad(Id lValue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
+    Id createLoad(Id lValue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone,
+        spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
 
     // Create an OpAccessChain instruction
     Id createAccessChain(StorageClass, Id base, const std::vector<Id>& offsets);
@@ -314,6 +366,9 @@
     // Create an OpArrayLength instruction
     Id createArrayLength(Id base, unsigned int member);
 
+    // Create an OpCooperativeMatrixLengthNV instruction
+    Id createCooperativeMatrixLength(Id type);
+
     // Create an OpCompositeExtract instruction
     Id createCompositeExtract(Id composite, Id typeId, unsigned index);
     Id createCompositeExtract(Id composite, Id typeId, const std::vector<unsigned>& indexes);
@@ -402,7 +457,8 @@
     };
 
     // Select the correct texture operation based on all inputs, and emit the correct instruction
-    Id createTextureCall(Decoration precision, Id resultType, bool sparse, bool fetch, bool proj, bool gather, bool noImplicit, const TextureParameters&);
+    Id createTextureCall(Decoration precision, Id resultType, bool sparse, bool fetch, bool proj, bool gather,
+        bool noImplicit, const TextureParameters&, ImageOperandsMask);
 
     // Emit the OpTextureQuery* instruction that was passed in.
     // Figure out the right return value and type, and return it.
@@ -461,7 +517,7 @@
     // recursion stack can hold the memory for it.
     //
     void makeSwitch(Id condition, unsigned int control, int numSegments, const std::vector<int>& caseValues,
-                    const std::vector<int>& valueToSegment, int defaultSegment, std::vector<Block*>& segmentBB); // return argument
+                    const std::vector<int>& valueToSegment, int defaultSegment, std::vector<Block*>& segmentBB);
 
     // Add a branch to the innermost switch's merge block.
     void addSwitchBreak();
@@ -478,7 +534,7 @@
         Block &head, &body, &merge, &continue_target;
     private:
         LoopBlocks();
-        LoopBlocks& operator=(const LoopBlocks&);
+        LoopBlocks& operator=(const LoopBlocks&) = delete;
     };
 
     // Start a new loop and prepare the builder to generate code for it.  Until
@@ -535,18 +591,34 @@
         std::vector<Id> indexChain;
         Id instr;                      // cache the instruction that generates this access chain
         std::vector<unsigned> swizzle; // each std::vector element selects the next GLSL component number
-        Id component;                  // a dynamic component index, can coexist with a swizzle, done after the swizzle, NoResult if not present
-        Id preSwizzleBaseType;         // dereferenced type, before swizzle or component is applied; NoType unless a swizzle or component is present
+        Id component;                  // a dynamic component index, can coexist with a swizzle,
+                                       // done after the swizzle, NoResult if not present
+        Id preSwizzleBaseType;         // dereferenced type, before swizzle or component is applied;
+                                       // NoType unless a swizzle or component is present
         bool isRValue;                 // true if 'base' is an r-value, otherwise, base is an l-value
-        unsigned int alignment;        // bitwise OR of alignment values passed in. Accumulates worst alignment. Only tracks base and (optional) component selection alignment.
+        unsigned int alignment;        // bitwise OR of alignment values passed in. Accumulates worst alignment.
+                                       // Only tracks base and (optional) component selection alignment.
 
         // Accumulate whether anything in the chain of structures has coherent decorations.
         struct CoherentFlags {
+            CoherentFlags() { clear(); }
+#ifdef GLSLANG_WEB
+            void clear() { }
+            bool isVolatile() const { return false; }
+            CoherentFlags operator |=(const CoherentFlags &other) { return *this; }
+#else
+            bool isVolatile() const { return volatil; }
+            bool anyCoherent() const {
+                return coherent || devicecoherent || queuefamilycoherent || workgroupcoherent ||
+                    subgroupcoherent || shadercallcoherent;
+            }
+
             unsigned coherent : 1;
             unsigned devicecoherent : 1;
             unsigned queuefamilycoherent : 1;
             unsigned workgroupcoherent : 1;
             unsigned subgroupcoherent : 1;
+            unsigned shadercallcoherent : 1;
             unsigned nonprivate : 1;
             unsigned volatil : 1;
             unsigned isImage : 1;
@@ -557,23 +629,25 @@
                 queuefamilycoherent = 0;
                 workgroupcoherent = 0;
                 subgroupcoherent = 0;
+                shadercallcoherent = 0;
                 nonprivate = 0;
                 volatil = 0;
                 isImage = 0;
             }
 
-            CoherentFlags() { clear(); }
             CoherentFlags operator |=(const CoherentFlags &other) {
                 coherent |= other.coherent;
                 devicecoherent |= other.devicecoherent;
                 queuefamilycoherent |= other.queuefamilycoherent;
                 workgroupcoherent |= other.workgroupcoherent;
                 subgroupcoherent |= other.subgroupcoherent;
+                shadercallcoherent |= other.shadercallcoherent;
                 nonprivate |= other.nonprivate;
                 volatil |= other.volatil;
                 isImage |= other.isImage;
                 return *this;
             }
+#endif
         };
         CoherentFlags coherentFlags;
     };
@@ -613,11 +687,13 @@
     }
 
     // push new swizzle onto the end of any existing swizzle, merging into a single swizzle
-    void accessChainPushSwizzle(std::vector<unsigned>& swizzle, Id preSwizzleBaseType, AccessChain::CoherentFlags coherentFlags, unsigned int alignment);
+    void accessChainPushSwizzle(std::vector<unsigned>& swizzle, Id preSwizzleBaseType,
+        AccessChain::CoherentFlags coherentFlags, unsigned int alignment);
 
     // push a dynamic component selection onto the access chain, only applicable with a
     // non-trivial swizzle or no swizzle
-    void accessChainPushComponent(Id component, Id preSwizzleBaseType, AccessChain::CoherentFlags coherentFlags, unsigned int alignment)
+    void accessChainPushComponent(Id component, Id preSwizzleBaseType, AccessChain::CoherentFlags coherentFlags,
+        unsigned int alignment)
     {
         if (accessChain.swizzle.size() != 1) {
             accessChain.component = component;
@@ -629,10 +705,18 @@
     }
 
     // use accessChain and swizzle to store value
-    void accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
+    void accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone,
+        spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
 
     // use accessChain and swizzle to load an r-value
-    Id accessChainLoad(Decoration precision, Decoration nonUniform, Id ResultType, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
+    Id accessChainLoad(Decoration precision, Decoration nonUniform, Id ResultType,
+        spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax,
+            unsigned int alignment = 0);
+
+    // Return whether or not the access chain can be represented in SPIR-V
+    // as an l-value.
+    // E.g., a[3].yx cannot be, while a[3].y and a[3].y[x] can be.
+    bool isSpvLvalue() const { return accessChain.swizzle.size() <= 1; }
 
     // get the direct pointer for an l-value
     Id accessChainGetLValue();
@@ -641,22 +725,28 @@
     // based on the type of the base and the chain of dereferences.
     Id accessChainGetInferredType();
 
-    // Add capabilities, extensions, remove unneeded decorations, etc., 
+    // Add capabilities, extensions, remove unneeded decorations, etc.,
     // based on the resulting SPIR-V.
     void postProcess();
 
+    // Prune unreachable blocks in the CFG and remove unneeded decorations.
+    void postProcessCFG();
+
+#ifndef GLSLANG_WEB
+    // Add capabilities, extensions based on instructions in the module.
+    void postProcessFeatures();
     // Hook to visit each instruction in a block in a function
     void postProcess(Instruction&);
-    // Hook to visit each instruction in a reachable block in a function.
-    void postProcessReachable(const Instruction&);
     // Hook to visit each non-32-bit sized float/int operation in a block.
     void postProcessType(const Instruction&, spv::Id typeId);
+#endif
 
     void dump(std::vector<unsigned int>&) const;
 
     void createBranch(Block* block);
     void createConditionalBranch(Id condition, Block* thenBlock, Block* elseBlock);
-    void createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control, unsigned int dependencyLength);
+    void createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control,
+        const std::vector<unsigned int>& operands);
 
     // Sets to generate opcode for specialization constants.
     void setToSpecConstCodeGenMode() { generatingOpCodeForSpecConst = true; }
@@ -670,7 +760,7 @@
     Id makeInt64Constant(Id typeId, unsigned long long value, bool specConstant);
     Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned value);
     Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, unsigned v2);
-    Id findCompositeConstant(Op typeClass, const std::vector<Id>& comps);
+    Id findCompositeConstant(Op typeClass, Id typeId, const std::vector<Id>& comps);
     Id findStructConstant(Id typeId, const std::vector<Id>& comps);
     Id collapseAccessChain();
     void remapDynamicSwizzle();
@@ -682,7 +772,8 @@
     void dumpSourceInstructions(const spv::Id fileId, const std::string& text, std::vector<unsigned int>&) const;
     void dumpInstructions(std::vector<unsigned int>&, const std::vector<std::unique_ptr<Instruction> >&) const;
     void dumpModuleProcesses(std::vector<unsigned int>&) const;
-    spv::MemoryAccessMask sanitizeMemoryAccessForStorageClass(spv::MemoryAccessMask memoryAccess, StorageClass sc) const;
+    spv::MemoryAccessMask sanitizeMemoryAccessForStorageClass(spv::MemoryAccessMask memoryAccess, StorageClass sc)
+        const;
 
     unsigned int spvVersion;     // the version of SPIR-V to emit in the header
     SourceLanguage source;
@@ -717,10 +808,14 @@
     std::vector<std::unique_ptr<Instruction> > externals;
     std::vector<std::unique_ptr<Function> > functions;
 
-     // not output, internally used for quick & dirty canonical (unique) creation
-    std::unordered_map<unsigned int, std::vector<Instruction*>> groupedConstants;       // map type opcodes to constant inst.
-    std::unordered_map<unsigned int, std::vector<Instruction*>> groupedStructConstants; // map struct-id to constant instructions
-    std::unordered_map<unsigned int, std::vector<Instruction*>> groupedTypes;           // map type opcodes to type instructions
+    // not output, internally used for quick & dirty canonical (unique) creation
+
+    // map type opcodes to constant inst.
+    std::unordered_map<unsigned int, std::vector<Instruction*>> groupedConstants;
+    // map struct-id to constant instructions
+    std::unordered_map<unsigned int, std::vector<Instruction*>> groupedStructConstants;
+    // map type opcodes to type instructions
+    std::unordered_map<unsigned int, std::vector<Instruction*>> groupedTypes;
 
     // stack of switches
     std::stack<Block*> switchMerges;
diff --git a/SPIRV/SpvPostProcess.cpp b/SPIRV/SpvPostProcess.cpp
old mode 100755
new mode 100644
index 04d594c..d40174d
--- a/SPIRV/SpvPostProcess.cpp
+++ b/SPIRV/SpvPostProcess.cpp
@@ -39,6 +39,7 @@
 #include <cassert>
 #include <cstdlib>
 
+#include <unordered_map>
 #include <unordered_set>
 #include <algorithm>
 
@@ -51,16 +52,13 @@
     #include "GLSL.std.450.h"
     #include "GLSL.ext.KHR.h"
     #include "GLSL.ext.EXT.h"
-#ifdef AMD_EXTENSIONS
     #include "GLSL.ext.AMD.h"
-#endif
-#ifdef NV_EXTENSIONS
     #include "GLSL.ext.NV.h"
-#endif
 }
 
 namespace spv {
 
+#ifndef GLSLANG_WEB
 // Hook to visit each operand type and result type of an instruction.
 // Will be called multiple times for one instruction, once for each typed
 // operand and the result.
@@ -118,12 +116,48 @@
     case OpAccessChain:
     case OpPtrAccessChain:
     case OpCopyObject:
+        break;
     case OpFConvert:
     case OpSConvert:
     case OpUConvert:
+        // Look for any 8/16-bit storage capabilities. If there are none, assume that
+        // the convert instruction requires the Float16/Int8/16 capability.
+        if (containsType(typeId, OpTypeFloat, 16) || containsType(typeId, OpTypeInt, 16)) {
+            bool foundStorage = false;
+            for (auto it = capabilities.begin(); it != capabilities.end(); ++it) {
+                spv::Capability cap = *it;
+                if (cap == spv::CapabilityStorageInputOutput16 ||
+                    cap == spv::CapabilityStoragePushConstant16 ||
+                    cap == spv::CapabilityStorageUniformBufferBlock16 ||
+                    cap == spv::CapabilityStorageUniform16) {
+                    foundStorage = true;
+                    break;
+                }
+            }
+            if (!foundStorage) {
+                if (containsType(typeId, OpTypeFloat, 16))
+                    addCapability(CapabilityFloat16);
+                if (containsType(typeId, OpTypeInt, 16))
+                    addCapability(CapabilityInt16);
+            }
+        }
+        if (containsType(typeId, OpTypeInt, 8)) {
+            bool foundStorage = false;
+            for (auto it = capabilities.begin(); it != capabilities.end(); ++it) {
+                spv::Capability cap = *it;
+                if (cap == spv::CapabilityStoragePushConstant8 ||
+                    cap == spv::CapabilityUniformAndStorageBuffer8BitAccess ||
+                    cap == spv::CapabilityStorageBuffer8BitAccess) {
+                    foundStorage = true;
+                    break;
+                }
+            }
+            if (!foundStorage) {
+                addCapability(CapabilityInt8);
+            }
+        }
         break;
     case OpExtInst:
-#if AMD_EXTENSIONS
         switch (inst.getImmediateOperand(1)) {
         case GLSLstd450Frexp:
         case GLSLstd450FrexpStruct:
@@ -139,7 +173,6 @@
         default:
             break;
         }
-#endif
         break;
     default:
         if (basicTypeOp == OpTypeFloat && width == 16)
@@ -185,12 +218,10 @@
         addCapability(CapabilityImageQuery);
         break;
 
-#ifdef NV_EXTENSIONS
     case OpGroupNonUniformPartitionNV:
         addExtension(E_SPV_NV_shader_subgroup_partitioned);
         addCapability(CapabilityGroupNonUniformPartitionedNV);
         break;
-#endif
 
     case OpLoad:
     case OpStore:
@@ -222,7 +253,7 @@
                     Instruction *idx = module.getInstruction(accessChain->getIdOperand(i));
                     if (type->getOpCode() == OpTypeStruct) {
                         assert(idx->getOpCode() == OpConstant);
-                        int c = idx->getImmediateOperand(0);
+                        unsigned int c = idx->getImmediateOperand(0);
 
                         const auto function = [&](const std::unique_ptr<Instruction>& decoration) {
                             if (decoration.get()->getOpCode() == OpMemberDecorate &&
@@ -258,10 +289,9 @@
                 assert(inst.getNumOperands() >= 3);
                 unsigned int memoryAccess = inst.getImmediateOperand((inst.getOpCode() == OpStore) ? 2 : 1);
                 assert(memoryAccess & MemoryAccessAlignedMask);
+                static_cast<void>(memoryAccess);
                 // Compute the index of the alignment operand.
                 int alignmentIdx = 2;
-                if (memoryAccess & MemoryAccessVolatileMask)
-                    alignmentIdx++;
                 if (inst.getOpCode() == OpStore)
                     alignmentIdx++;
                 // Merge new and old (mis)alignment
@@ -290,17 +320,16 @@
         }
     }
 }
-
-// Called for each instruction in a reachable block.
-void Builder::postProcessReachable(const Instruction&)
-{
-    // did have code here, but questionable to do so without deleting the instructions
-}
+#endif
 
 // comment in header
-void Builder::postProcess()
+void Builder::postProcessCFG()
 {
+    // reachableBlocks is the set of blockss reached via control flow, or which are
+    // unreachable continue targert or unreachable merge.
     std::unordered_set<const Block*> reachableBlocks;
+    std::unordered_map<Block*, Block*> headerForUnreachableContinue;
+    std::unordered_set<Block*> unreachableMerges;
     std::unordered_set<Id> unreachableDefinitions;
     // Collect IDs defined in unreachable blocks. For each function, label the
     // reachable blocks first. Then for each unreachable block, collect the
@@ -308,16 +337,41 @@
     for (auto fi = module.getFunctions().cbegin(); fi != module.getFunctions().cend(); fi++) {
         Function* f = *fi;
         Block* entry = f->getEntryBlock();
-        inReadableOrder(entry, [&reachableBlocks](const Block* b) { reachableBlocks.insert(b); });
+        inReadableOrder(entry,
+            [&reachableBlocks, &unreachableMerges, &headerForUnreachableContinue]
+            (Block* b, ReachReason why, Block* header) {
+               reachableBlocks.insert(b);
+               if (why == ReachDeadContinue) headerForUnreachableContinue[b] = header;
+               if (why == ReachDeadMerge) unreachableMerges.insert(b);
+            });
         for (auto bi = f->getBlocks().cbegin(); bi != f->getBlocks().cend(); bi++) {
             Block* b = *bi;
-            if (reachableBlocks.count(b) == 0) {
-                for (auto ii = b->getInstructions().cbegin(); ii != b->getInstructions().cend(); ii++)
+            if (unreachableMerges.count(b) != 0 || headerForUnreachableContinue.count(b) != 0) {
+                auto ii = b->getInstructions().cbegin();
+                ++ii; // Keep potential decorations on the label.
+                for (; ii != b->getInstructions().cend(); ++ii)
+                    unreachableDefinitions.insert(ii->get()->getResultId());
+            } else if (reachableBlocks.count(b) == 0) {
+                // The normal case for unreachable code.  All definitions are considered dead.
+                for (auto ii = b->getInstructions().cbegin(); ii != b->getInstructions().cend(); ++ii)
                     unreachableDefinitions.insert(ii->get()->getResultId());
             }
         }
     }
 
+    // Modify unreachable merge blocks and unreachable continue targets.
+    // Delete their contents.
+    for (auto mergeIter = unreachableMerges.begin(); mergeIter != unreachableMerges.end(); ++mergeIter) {
+        (*mergeIter)->rewriteAsCanonicalUnreachableMerge();
+    }
+    for (auto continueIter = headerForUnreachableContinue.begin();
+         continueIter != headerForUnreachableContinue.end();
+         ++continueIter) {
+        Block* continue_target = continueIter->first;
+        Block* header = continueIter->second;
+        continue_target->rewriteAsCanonicalUnreachableContinue(header);
+    }
+
     // Remove unneeded decorations, for unreachable instructions
     decorations.erase(std::remove_if(decorations.begin(), decorations.end(),
         [&unreachableDefinitions](std::unique_ptr<Instruction>& I) -> bool {
@@ -325,14 +379,29 @@
             return unreachableDefinitions.count(decoration_id) != 0;
         }),
         decorations.end());
+}
 
+#ifndef GLSLANG_WEB
+// comment in header
+void Builder::postProcessFeatures() {
     // Add per-instruction capabilities, extensions, etc.,
 
-    // process all reachable instructions...
-    for (auto bi = reachableBlocks.cbegin(); bi != reachableBlocks.cend(); ++bi) {
-        const Block* block = *bi;
-        const auto function = [this](const std::unique_ptr<Instruction>& inst) { postProcessReachable(*inst.get()); };
-        std::for_each(block->getInstructions().begin(), block->getInstructions().end(), function);
+    // Look for any 8/16 bit type in physical storage buffer class, and set the
+    // appropriate capability. This happens in createSpvVariable for other storage
+    // classes, but there isn't always a variable for physical storage buffer.
+    for (int t = 0; t < (int)groupedTypes[OpTypePointer].size(); ++t) {
+        Instruction* type = groupedTypes[OpTypePointer][t];
+        if (type->getImmediateOperand(0) == (unsigned)StorageClassPhysicalStorageBufferEXT) {
+            if (containsType(type->getIdOperand(1), OpTypeInt, 8)) {
+                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)) {
+                addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3);
+                addCapability(spv::CapabilityStorageBuffer16BitAccess);
+            }
+        }
     }
 
     // process all block-contained instructions
@@ -367,24 +436,15 @@
             }
         }
     }
+}
+#endif
 
-    // Look for any 8/16 bit type in physical storage buffer class, and set the
-    // appropriate capability. This happens in createSpvVariable for other storage
-    // classes, but there isn't always a variable for physical storage buffer.
-    for (int t = 0; t < (int)groupedTypes[OpTypePointer].size(); ++t) {
-        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);
-                addCapability(spv::CapabilityStorageBuffer8BitAccess);
-            }
-            if (containsType(type->getIdOperand(1), OpTypeInt, 16) ||
-                containsType(type->getIdOperand(1), OpTypeFloat, 16)) {
-                addExtension(spv::E_SPV_KHR_16bit_storage);
-                addCapability(spv::CapabilityStorageBuffer16BitAccess);
-            }
-        }
-    }
+// comment in header
+void Builder::postProcess() {
+  postProcessCFG();
+#ifndef GLSLANG_WEB
+  postProcessFeatures();
+#endif
 }
 
 }; // end spv namespace
diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp
index eec06e0..1e968ba 100644
--- a/SPIRV/SpvTools.cpp
+++ b/SPIRV/SpvTools.cpp
@@ -1,6 +1,6 @@
 //
 // Copyright (C) 2014-2016 LunarG, Inc.
-// Copyright (C) 2018 Google, Inc.
+// Copyright (C) 2018-2020 Google, Inc.
 //
 // All rights reserved.
 //
@@ -52,8 +52,23 @@
 spv_target_env MapToSpirvToolsEnv(const SpvVersion& spvVersion, spv::SpvBuildLogger* logger)
 {
     switch (spvVersion.vulkan) {
-    case glslang::EShTargetVulkan_1_0: return spv_target_env::SPV_ENV_VULKAN_1_0;
-    case glslang::EShTargetVulkan_1_1: return spv_target_env::SPV_ENV_VULKAN_1_1;
+    case glslang::EShTargetVulkan_1_0:
+        return spv_target_env::SPV_ENV_VULKAN_1_0;
+    case glslang::EShTargetVulkan_1_1:
+        switch (spvVersion.spv) {
+        case EShTargetSpv_1_0:
+        case EShTargetSpv_1_1:
+        case EShTargetSpv_1_2:
+        case EShTargetSpv_1_3:
+            return spv_target_env::SPV_ENV_VULKAN_1_1;
+        case EShTargetSpv_1_4:
+            return spv_target_env::SPV_ENV_VULKAN_1_1_SPIRV_1_4;
+        default:
+            logger->missingFunctionality("Target version for SPIRV-Tools validator");
+            return spv_target_env::SPV_ENV_VULKAN_1_1;
+        }
+    case glslang::EShTargetVulkan_1_2:
+        return spv_target_env::SPV_ENV_VULKAN_1_2;
     default:
         break;
     }
@@ -90,7 +105,7 @@
 
 // Apply the SPIRV-Tools validator to generated SPIR-V.
 void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
-                        spv::SpvBuildLogger* logger)
+                        spv::SpvBuildLogger* logger, bool prelegalization)
 {
     // validate
     spv_context context = spvContextCreate(MapToSpirvToolsEnv(intermediate.getSpv(), logger));
@@ -98,6 +113,7 @@
     spv_diagnostic diagnostic = nullptr;
     spv_validator_options options = spvValidatorOptionsCreate();
     spvValidatorOptionsSetRelaxBlockLayout(options, intermediate.usingHlslOffsets());
+    spvValidatorOptionsSetBeforeHlslLegalization(options, prelegalization);
     spvValidateWithOptions(context, options, &binary, &diagnostic);
 
     // report
@@ -114,8 +130,8 @@
 
 // Apply the SPIRV-Tools optimizer to generated SPIR-V, for the purpose of
 // legalizing HLSL SPIR-V.
-void SpirvToolsLegalize(const glslang::TIntermediate&, std::vector<unsigned int>& spirv,
-                        spv::SpvBuildLogger*, const SpvOptions* options)
+void SpirvToolsLegalize(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
+                        spv::SpvBuildLogger* logger, const SpvOptions* options)
 {
     spv_target_env target_env = SPV_ENV_UNIVERSAL_1_2;
 
@@ -159,6 +175,7 @@
     if (options->generateDebugInfo) {
         optimizer.RegisterPass(spvtools::CreatePropagateLineInfoPass());
     }
+    optimizer.RegisterPass(spvtools::CreateWrapOpKillPass());
     optimizer.RegisterPass(spvtools::CreateDeadBranchElimPass());
     optimizer.RegisterPass(spvtools::CreateMergeReturnPass());
     optimizer.RegisterPass(spvtools::CreateInlineExhaustivePass());
@@ -182,8 +199,6 @@
     optimizer.RegisterPass(spvtools::CreateDeadInsertElimPass());
     if (options->optimizeSize) {
         optimizer.RegisterPass(spvtools::CreateRedundancyEliminationPass());
-        // TODO(greg-lunarg): Add this when AMD driver issues are resolved
-        // optimizer.RegisterPass(CreateCommonUniformElimPass());
     }
     optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
     optimizer.RegisterPass(spvtools::CreateCFGCleanupPass());
@@ -191,7 +206,10 @@
         optimizer.RegisterPass(spvtools::CreateRedundantLineInfoElimPass());
     }
 
-    optimizer.Run(spirv.data(), spirv.size(), &spirv);
+    spvtools::OptimizerOptions spvOptOptions;
+    optimizer.SetTargetEnv(MapToSpirvToolsEnv(intermediate.getSpv(), logger));
+    spvOptOptions.set_run_validator(false); // The validator may run as a separate step later on
+    optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions);
 }
 
 }; // end namespace glslang
diff --git a/SPIRV/SpvTools.h b/SPIRV/SpvTools.h
index 08bcf3a..59c914d 100644
--- a/SPIRV/SpvTools.h
+++ b/SPIRV/SpvTools.h
@@ -41,10 +41,12 @@
 #ifndef GLSLANG_SPV_TOOLS_H
 #define GLSLANG_SPV_TOOLS_H
 
+#ifdef ENABLE_OPT
 #include <vector>
 #include <ostream>
+#endif
 
-#include "../glslang/MachineIndependent/localintermediate.h"
+#include "glslang/MachineIndependent/localintermediate.h"
 #include "Logger.h"
 
 namespace glslang {
@@ -59,14 +61,14 @@
     bool validate;
 };
 
-#if ENABLE_OPT
+#ifdef ENABLE_OPT
 
 // Use the SPIRV-Tools disassembler to print SPIR-V.
 void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv);
 
 // Apply the SPIRV-Tools validator to generated SPIR-V.
 void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
-                        spv::SpvBuildLogger*);
+                        spv::SpvBuildLogger*, bool prelegalization);
 
 // Apply the SPIRV-Tools optimizer to generated SPIR-V, for the purpose of
 // legalizing HLSL SPIR-V.
@@ -75,6 +77,6 @@
 
 #endif
 
-}; // end namespace glslang
+} // end namespace glslang
 
-#endif // GLSLANG_SPV_TOOLS_H
\ No newline at end of file
+#endif // GLSLANG_SPV_TOOLS_H
diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp
index 631173c..4faa89e 100644
--- a/SPIRV/disassemble.cpp
+++ b/SPIRV/disassemble.cpp
@@ -52,26 +52,16 @@
     extern "C" {
         // Include C-based headers that don't have a namespace
         #include "GLSL.std.450.h"
-#ifdef AMD_EXTENSIONS
         #include "GLSL.ext.AMD.h"
-#endif
-
-#ifdef NV_EXTENSIONS
         #include "GLSL.ext.NV.h"
-#endif
     }
 }
 const char* GlslStd450DebugNames[spv::GLSLstd450Count];
 
 namespace spv {
 
-#ifdef AMD_EXTENSIONS
 static const char* GLSLextAMDGetDebugNames(const char*, unsigned);
-#endif
-
-#ifdef NV_EXTENSIONS
 static const char* GLSLextNVGetDebugNames(const char*, unsigned);
-#endif
 
 static void Kill(std::ostream& out, const char* message)
 {
@@ -82,16 +72,10 @@
 // used to identify the extended instruction library imported when printing
 enum ExtInstSet {
     GLSL450Inst,
-
-#ifdef AMD_EXTENSIONS
     GLSLextAMDInst,
-#endif
-
-#ifdef NV_EXTENSIONS
     GLSLextNVInst,
-#endif
-
     OpenCLExtInst,
+    NonSemanticDebugPrintfExtInst,
 };
 
 // Container class for a single instance of a SPIR-V stream, with methods for disassembly.
@@ -497,39 +481,37 @@
             if (opCode == OpExtInst) {
                 ExtInstSet extInstSet = GLSL450Inst;
                 const char* name = idDescriptor[stream[word - 2]].c_str();
-                if (0 == memcmp("OpenCL", name, 6)) {
+                if (strcmp("OpenCL.std", name) == 0) {
                     extInstSet = OpenCLExtInst;
-#ifdef AMD_EXTENSIONS
+                } else if (strcmp("OpenCL.DebugInfo.100", name) == 0) {
+                    extInstSet = OpenCLExtInst;
+                } else if (strcmp("NonSemantic.DebugPrintf", name) == 0) {
+                    extInstSet = NonSemanticDebugPrintfExtInst;
                 } else if (strcmp(spv::E_SPV_AMD_shader_ballot, name) == 0 ||
                            strcmp(spv::E_SPV_AMD_shader_trinary_minmax, name) == 0 ||
                            strcmp(spv::E_SPV_AMD_shader_explicit_vertex_parameter, name) == 0 ||
                            strcmp(spv::E_SPV_AMD_gcn_shader, name) == 0) {
                     extInstSet = GLSLextAMDInst;
-#endif
-#ifdef NV_EXTENSIONS
-                }else if (strcmp(spv::E_SPV_NV_sample_mask_override_coverage, name) == 0 ||
+                } else if (strcmp(spv::E_SPV_NV_sample_mask_override_coverage, name) == 0 ||
                           strcmp(spv::E_SPV_NV_geometry_shader_passthrough, name) == 0 ||
                           strcmp(spv::E_SPV_NV_viewport_array2, name) == 0 ||
                           strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0 || 
                           strcmp(spv::E_SPV_NV_fragment_shader_barycentric, name) == 0 ||
                           strcmp(spv::E_SPV_NV_mesh_shader, name) == 0) {
                     extInstSet = GLSLextNVInst;
-#endif
                 }
                 unsigned entrypoint = stream[word - 1];
                 if (extInstSet == GLSL450Inst) {
                     if (entrypoint < GLSLstd450Count) {
                         out << "(" << GlslStd450DebugNames[entrypoint] << ")";
                     }
-#ifdef AMD_EXTENSIONS
                 } else if (extInstSet == GLSLextAMDInst) {
                     out << "(" << GLSLextAMDGetDebugNames(name, entrypoint) << ")";
-#endif
-#ifdef NV_EXTENSIONS
                 }
                 else if (extInstSet == GLSLextNVInst) {
                     out << "(" << GLSLextNVGetDebugNames(name, entrypoint) << ")";
-#endif
+                } else if (extInstSet == NonSemanticDebugPrintfExtInst) {
+                    out << "(DebugPrintf)";
                 }
             }
             break;
@@ -648,9 +630,11 @@
     names[GLSLstd450InterpolateAtCentroid]   = "InterpolateAtCentroid";
     names[GLSLstd450InterpolateAtSample]     = "InterpolateAtSample";
     names[GLSLstd450InterpolateAtOffset]     = "InterpolateAtOffset";
+    names[GLSLstd450NMin]                    = "NMin";
+    names[GLSLstd450NMax]                    = "NMax";
+    names[GLSLstd450NClamp]                  = "NClamp";
 }
 
-#ifdef AMD_EXTENSIONS
 static const char* GLSLextAMDGetDebugNames(const char* name, unsigned entrypoint)
 {
     if (strcmp(name, spv::E_SPV_AMD_shader_ballot) == 0) {
@@ -692,18 +676,17 @@
 
     return "Bad";
 }
-#endif
 
-#ifdef NV_EXTENSIONS
 static const char* GLSLextNVGetDebugNames(const char* name, unsigned entrypoint)
 {
     if (strcmp(name, spv::E_SPV_NV_sample_mask_override_coverage) == 0 ||
         strcmp(name, spv::E_SPV_NV_geometry_shader_passthrough) == 0 ||
         strcmp(name, spv::E_ARB_shader_viewport_layer_array) == 0 ||
         strcmp(name, spv::E_SPV_NV_viewport_array2) == 0 ||
-        strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0 ||
-        strcmp(spv::E_SPV_NV_fragment_shader_barycentric, name) == 0 ||
-        strcmp(name, spv::E_SPV_NV_mesh_shader) == 0) {
+        strcmp(name, spv::E_SPV_NVX_multiview_per_view_attributes) == 0 ||
+        strcmp(name, spv::E_SPV_NV_fragment_shader_barycentric) == 0 ||
+        strcmp(name, spv::E_SPV_NV_mesh_shader) == 0 ||
+        strcmp(name, spv::E_SPV_NV_shader_image_footprint) == 0) {
         switch (entrypoint) {
         // NV builtins
         case BuiltInViewportMaskNV:                 return "ViewportMaskNV";
@@ -729,6 +712,8 @@
         case CapabilityPerViewAttributesNV:         return "PerViewAttributesNV";
         case CapabilityFragmentBarycentricNV:       return "FragmentBarycentricNV";
         case CapabilityMeshShadingNV:               return "MeshShadingNV";
+        case CapabilityImageFootprintNV:            return "ImageFootprintNV";
+        case CapabilitySampleMaskOverrideCoverageNV:return "SampleMaskOverrideCoverageNV";
 
         // NV Decorations
         case DecorationOverrideCoverageNV:          return "OverrideCoverageNV";
@@ -745,7 +730,6 @@
     }
     return "Bad";
 }
-#endif
 
 void Disassemble(std::ostream& out, const std::vector<unsigned int>& stream)
 {
diff --git a/SPIRV/disassemble.h b/SPIRV/disassemble.h
index 2a9a89b..b6a4635 100644
--- a/SPIRV/disassemble.h
+++ b/SPIRV/disassemble.h
@@ -48,6 +48,6 @@
     // disassemble with glslang custom disassembler
     void Disassemble(std::ostream& out, const std::vector<unsigned int>&);
 
-};  // end namespace spv
+}  // end namespace spv
 
 #endif // disassembler_H
diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp
index bd6df10..b1f2b82 100644
--- a/SPIRV/doc.cpp
+++ b/SPIRV/doc.cpp
@@ -1,5 +1,6 @@
 //
 // Copyright (C) 2014-2015 LunarG, Inc.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -50,12 +51,8 @@
         // Include C-based headers that don't have a namespace
         #include "GLSL.ext.KHR.h"
         #include "GLSL.ext.EXT.h"
-#ifdef AMD_EXTENSIONS
         #include "GLSL.ext.AMD.h"
-#endif
-#ifdef NV_EXTENSIONS
         #include "GLSL.ext.NV.h"
-#endif
     }
 }
 
@@ -98,22 +95,17 @@
     case 4:  return "Fragment";
     case 5:  return "GLCompute";
     case 6:  return "Kernel";
-#ifdef NV_EXTENSIONS
     case ExecutionModelTaskNV: return "TaskNV";
     case ExecutionModelMeshNV: return "MeshNV";
-#endif
 
     default: return "Bad";
 
-#ifdef NV_EXTENSIONS
-    case ExecutionModelRayGenerationNV: return "RayGenerationNV";
-    case ExecutionModelIntersectionNV:  return "IntersectionNV";
-    case ExecutionModelAnyHitNV:        return "AnyHitNV";
-    case ExecutionModelClosestHitNV:    return "ClosestHitNV";
-    case ExecutionModelMissNV:          return "MissNV";
-    case ExecutionModelCallableNV:      return "CallableNV";
-#endif
-
+    case ExecutionModelRayGenerationKHR: return "RayGenerationKHR";
+    case ExecutionModelIntersectionKHR:  return "IntersectionKHR";
+    case ExecutionModelAnyHitKHR:        return "AnyHitKHR";
+    case ExecutionModelClosestHitKHR:    return "ClosestHitKHR";
+    case ExecutionModelMissKHR:          return "MissKHR";
+    case ExecutionModelCallableKHR:      return "CallableKHR";
     }
 }
 
@@ -183,13 +175,18 @@
 
     case 4446:  return "PostDepthCoverage";
 
-#ifdef NV_EXTENSIONS
     case ExecutionModeOutputLinesNV:            return "OutputLinesNV";
     case ExecutionModeOutputPrimitivesNV:       return "OutputPrimitivesNV";
     case ExecutionModeOutputTrianglesNV:        return "OutputTrianglesNV";
     case ExecutionModeDerivativeGroupQuadsNV:   return "DerivativeGroupQuadsNV";
     case ExecutionModeDerivativeGroupLinearNV:  return "DerivativeGroupLinearNV";
-#endif
+
+    case ExecutionModePixelInterlockOrderedEXT:         return "PixelInterlockOrderedEXT";
+    case ExecutionModePixelInterlockUnorderedEXT:       return "PixelInterlockUnorderedEXT";
+    case ExecutionModeSampleInterlockOrderedEXT:        return "SampleInterlockOrderedEXT";
+    case ExecutionModeSampleInterlockUnorderedEXT:      return "SampleInterlockUnorderedEXT";
+    case ExecutionModeShadingRateInterlockOrderedEXT:   return "ShadingRateInterlockOrderedEXT";
+    case ExecutionModeShadingRateInterlockUnorderedEXT: return "ShadingRateInterlockUnorderedEXT";
 
     case ExecutionModeCeiling:
     default: return "Bad";
@@ -213,14 +210,12 @@
     case 11: return "Image";
     case 12: return "StorageBuffer";
 
-#ifdef NV_EXTENSIONS
-    case StorageClassRayPayloadNV:            return "RayPayloadNV";
-    case StorageClassHitAttributeNV:          return "HitAttributeNV";
-    case StorageClassIncomingRayPayloadNV:    return "IncomingRayPayloadNV";
-    case StorageClassShaderRecordBufferNV:    return "ShaderRecordBufferNV";
-    case StorageClassCallableDataNV:          return "CallableDataNV";
-    case StorageClassIncomingCallableDataNV:  return "IncomingCallableDataNV";
-#endif
+    case StorageClassRayPayloadKHR:            return "RayPayloadKHR";
+    case StorageClassHitAttributeKHR:          return "HitAttributeKHR";
+    case StorageClassIncomingRayPayloadKHR:    return "IncomingRayPayloadKHR";
+    case StorageClassShaderRecordBufferKHR:    return "ShaderRecordBufferKHR";
+    case StorageClassCallableDataKHR:          return "CallableDataKHR";
+    case StorageClassIncomingCallableDataKHR:  return "IncomingCallableDataKHR";
 
     case StorageClassPhysicalStorageBufferEXT: return "PhysicalStorageBufferEXT";
 
@@ -282,10 +277,7 @@
     case DecorationCeiling:
     default:  return "Bad";
 
-#ifdef AMD_EXTENSIONS
     case DecorationExplicitInterpAMD: return "ExplicitInterpAMD";
-#endif
-#ifdef NV_EXTENSIONS
     case DecorationOverrideCoverageNV:          return "OverrideCoverageNV";
     case DecorationPassthroughNV:               return "PassthroughNV";
     case DecorationViewportRelativeNV:          return "ViewportRelativeNV";
@@ -294,7 +286,6 @@
     case DecorationPerViewNV:                   return "PerViewNV";
     case DecorationPerTaskNV:                   return "PerTaskNV";
     case DecorationPerVertexNV:                 return "PerVertexNV";
-#endif
 
     case DecorationNonUniformEXT:           return "DecorationNonUniformEXT";
     case DecorationHlslCounterBufferGOOGLE: return "DecorationHlslCounterBufferGOOGLE";
@@ -364,7 +355,6 @@
     case 4426: return "DrawIndex";
     case 5014: return "FragStencilRefEXT";
 
-#ifdef AMD_EXTENSIONS
     case 4992: return "BaryCoordNoPerspAMD";
     case 4993: return "BaryCoordNoPerspCentroidAMD";
     case 4994: return "BaryCoordNoPerspSampleAMD";
@@ -372,41 +362,36 @@
     case 4996: return "BaryCoordSmoothCentroidAMD";
     case 4997: return "BaryCoordSmoothSampleAMD";
     case 4998: return "BaryCoordPullModelAMD";
-#endif
-
-#ifdef NV_EXTENSIONS
-    case BuiltInLaunchIdNV:                 return "LaunchIdNV";
-    case BuiltInLaunchSizeNV:               return "LaunchSizeNV";
-    case BuiltInWorldRayOriginNV:           return "WorldRayOriginNV";
-    case BuiltInWorldRayDirectionNV:        return "WorldRayDirectionNV";
-    case BuiltInObjectRayOriginNV:          return "ObjectRayOriginNV";
-    case BuiltInObjectRayDirectionNV:       return "ObjectRayDirectionNV";
-    case BuiltInRayTminNV:                  return "RayTminNV";
-    case BuiltInRayTmaxNV:                  return "RayTmaxNV";
-    case BuiltInInstanceCustomIndexNV:      return "InstanceCustomIndexNV";
-    case BuiltInObjectToWorldNV:            return "ObjectToWorldNV";
-    case BuiltInWorldToObjectNV:            return "WorldToObjectNV";
-    case BuiltInHitTNV:                     return "HitTNV";
-    case BuiltInHitKindNV:                  return "HitKindNV";
-    case BuiltInIncomingRayFlagsNV:         return "IncomingRayFlagsNV";
-    case BuiltInViewportMaskNV:             return "ViewportMaskNV";
-    case BuiltInSecondaryPositionNV:        return "SecondaryPositionNV";
-    case BuiltInSecondaryViewportMaskNV:    return "SecondaryViewportMaskNV";
-    case BuiltInPositionPerViewNV:          return "PositionPerViewNV";
-    case BuiltInViewportMaskPerViewNV:      return "ViewportMaskPerViewNV";
+    case BuiltInLaunchIdKHR:                 return "LaunchIdKHR";
+    case BuiltInLaunchSizeKHR:               return "LaunchSizeKHR";
+    case BuiltInWorldRayOriginKHR:           return "WorldRayOriginKHR";
+    case BuiltInWorldRayDirectionKHR:        return "WorldRayDirectionKHR";
+    case BuiltInObjectRayOriginKHR:          return "ObjectRayOriginKHR";
+    case BuiltInObjectRayDirectionKHR:       return "ObjectRayDirectionKHR";
+    case BuiltInRayTminKHR:                  return "RayTminKHR";
+    case BuiltInRayTmaxKHR:                  return "RayTmaxKHR";
+    case BuiltInInstanceCustomIndexKHR:      return "InstanceCustomIndexKHR";
+    case BuiltInRayGeometryIndexKHR:         return "RayGeometryIndexKHR";
+    case BuiltInObjectToWorldKHR:            return "ObjectToWorldKHR";
+    case BuiltInWorldToObjectKHR:            return "WorldToObjectKHR";
+    case BuiltInHitTKHR:                     return "HitTKHR";
+    case BuiltInHitKindKHR:                  return "HitKindKHR";
+    case BuiltInIncomingRayFlagsKHR:         return "IncomingRayFlagsKHR";
+    case BuiltInViewportMaskNV:              return "ViewportMaskNV";
+    case BuiltInSecondaryPositionNV:         return "SecondaryPositionNV";
+    case BuiltInSecondaryViewportMaskNV:     return "SecondaryViewportMaskNV";
+    case BuiltInPositionPerViewNV:           return "PositionPerViewNV";
+    case BuiltInViewportMaskPerViewNV:       return "ViewportMaskPerViewNV";
 //    case BuiltInFragmentSizeNV:             return "FragmentSizeNV";        // superseded by BuiltInFragSizeEXT
 //    case BuiltInInvocationsPerPixelNV:      return "InvocationsPerPixelNV"; // superseded by BuiltInFragInvocationCountEXT
-    case BuiltInBaryCoordNV:                return "BaryCoordNV";
-    case BuiltInBaryCoordNoPerspNV:         return "BaryCoordNoPerspNV";
-#endif
+    case BuiltInBaryCoordNV:                 return "BaryCoordNV";
+    case BuiltInBaryCoordNoPerspNV:          return "BaryCoordNoPerspNV";
 
-    case BuiltInFragSizeEXT:                return "FragSizeEXT";
-    case BuiltInFragInvocationCountEXT:     return "FragInvocationCountEXT";
+    case BuiltInFragSizeEXT:                 return "FragSizeEXT";
+    case BuiltInFragInvocationCountEXT:      return "FragInvocationCountEXT";
 
     case 5264: return "FullyCoveredEXT";
 
-
-#ifdef NV_EXTENSIONS
     case BuiltInTaskCountNV:           return "TaskCountNV";
     case BuiltInPrimitiveCountNV:      return "PrimitiveCountNV";
     case BuiltInPrimitiveIndicesNV:    return "PrimitiveIndicesNV";
@@ -415,7 +400,10 @@
     case BuiltInLayerPerViewNV:        return "LayerPerViewNV";
     case BuiltInMeshViewCountNV:       return "MeshViewCountNV";
     case BuiltInMeshViewIndicesNV:     return "MeshViewIndicesNV";
-#endif
+    case BuiltInWarpsPerSMNV:           return "WarpsPerSMNV";
+    case BuiltInSMCountNV:              return "SMCountNV";
+    case BuiltInWarpIDNV:               return "WarpIDNV";
+    case BuiltInSMIDNV:                 return "SMIDNV";
 
     default: return "Bad";
     }
@@ -575,7 +563,7 @@
     }
 }
 
-const int ImageOperandsCeiling = 12;
+const int ImageOperandsCeiling = 14;
 
 const char* ImageOperandsString(int format)
 {
@@ -592,6 +580,8 @@
     case ImageOperandsMakeTexelVisibleKHRShift:     return "MakeTexelVisibleKHR";
     case ImageOperandsNonPrivateTexelKHRShift:      return "NonPrivateTexelKHR";
     case ImageOperandsVolatileTexelKHRShift:        return "VolatileTexelKHR";
+    case ImageOperandsSignExtendShift:              return "SignExtend";
+    case ImageOperandsZeroExtendShift:              return "ZeroExtend";
 
     case ImageOperandsCeiling:
     default:
@@ -674,15 +664,20 @@
     }
 }
 
-const int LoopControlCeiling = 4;
+const int LoopControlCeiling = LoopControlPartialCountShift + 1;
 
 const char* LoopControlString(int cont)
 {
     switch (cont) {
-    case 0:  return "Unroll";
-    case 1:  return "DontUnroll";
-    case 2:  return "DependencyInfinite";
-    case 3:  return "DependencyLength";
+    case LoopControlUnrollShift:             return "Unroll";
+    case LoopControlDontUnrollShift:         return "DontUnroll";
+    case LoopControlDependencyInfiniteShift: return "DependencyInfinite";
+    case LoopControlDependencyLengthShift:   return "DependencyLength";
+    case LoopControlMinIterationsShift:      return "MinIterations";
+    case LoopControlMaxIterationsShift:      return "MaxIterations";
+    case LoopControlIterationMultipleShift:  return "IterationMultiple";
+    case LoopControlPeelCountShift:          return "PeelCount";
+    case LoopControlPartialCountShift:       return "PartialCount";
 
     case LoopControlCeiling:
     default: return "Bad";
@@ -763,11 +758,9 @@
     case GroupOperationInclusiveScan:  return "InclusiveScan";
     case GroupOperationExclusiveScan:  return "ExclusiveScan";
     case GroupOperationClusteredReduce:  return "ClusteredReduce";
-#ifdef NV_EXTENSIONS
     case GroupOperationPartitionedReduceNV:  return "PartitionedReduceNV";
     case GroupOperationPartitionedInclusiveScanNV:  return "PartitionedInclusiveScanNV";
     case GroupOperationPartitionedExclusiveScanNV:  return "PartitionedExclusiveScanNV";
-#endif
 
     default: return "Bad";
     }
@@ -875,26 +868,23 @@
     case CapabilityStoragePushConstant16:       return "StoragePushConstant16";
     case CapabilityStorageInputOutput16:        return "StorageInputOutput16";
 
-    case CapabilityStorageBuffer8BitAccess:             return "CapabilityStorageBuffer8BitAccess";
-    case CapabilityUniformAndStorageBuffer8BitAccess:   return "CapabilityUniformAndStorageBuffer8BitAccess";
-    case CapabilityStoragePushConstant8:                return "CapabilityStoragePushConstant8";
+    case CapabilityStorageBuffer8BitAccess:             return "StorageBuffer8BitAccess";
+    case CapabilityUniformAndStorageBuffer8BitAccess:   return "UniformAndStorageBuffer8BitAccess";
+    case CapabilityStoragePushConstant8:                return "StoragePushConstant8";
 
     case CapabilityDeviceGroup: return "DeviceGroup";
     case CapabilityMultiView:   return "MultiView";
 
     case CapabilityStencilExportEXT: return "StencilExportEXT";
 
-#ifdef AMD_EXTENSIONS
     case CapabilityFloat16ImageAMD:       return "Float16ImageAMD";
     case CapabilityImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD";
     case CapabilityFragmentMaskAMD:       return "FragmentMaskAMD";
     case CapabilityImageReadWriteLodAMD:  return "ImageReadWriteLodAMD";
-#endif
 
     case CapabilityAtomicStorageOps:             return "AtomicStorageOps";
 
     case CapabilitySampleMaskPostDepthCoverage:  return "SampleMaskPostDepthCoverage";
-#ifdef NV_EXTENSIONS
     case CapabilityGeometryShaderPassthroughNV:     return "GeometryShaderPassthroughNV";
     case CapabilityShaderViewportIndexLayerNV:      return "ShaderViewportIndexLayerNV";
     case CapabilityShaderViewportMaskNV:            return "ShaderViewportMaskNV";
@@ -902,33 +892,51 @@
     case CapabilityPerViewAttributesNV:             return "PerViewAttributesNV";
     case CapabilityGroupNonUniformPartitionedNV:    return "GroupNonUniformPartitionedNV";
     case CapabilityRayTracingNV:                    return "RayTracingNV";
+    case CapabilityRayTracingProvisionalKHR:        return "RayTracingProvisionalKHR";
+    case CapabilityRayQueryProvisionalKHR:          return "RayQueryProvisionalKHR";
+    case CapabilityRayTraversalPrimitiveCullingProvisionalKHR: return "RayTraversalPrimitiveCullingProvisionalKHR";
     case CapabilityComputeDerivativeGroupQuadsNV:   return "ComputeDerivativeGroupQuadsNV";
     case CapabilityComputeDerivativeGroupLinearNV:  return "ComputeDerivativeGroupLinearNV";
     case CapabilityFragmentBarycentricNV:           return "FragmentBarycentricNV";
     case CapabilityMeshShadingNV:                   return "MeshShadingNV";
-//    case CapabilityShadingRateNV:                   return "ShadingRateNV";  // superseded by CapabilityFragmentDensityEXT
-#endif
+    case CapabilityImageFootprintNV:                return "ImageFootprintNV";
+//    case CapabilityShadingRateNV:                   return "ShadingRateNV";  // superseded by FragmentDensityEXT
+    case CapabilitySampleMaskOverrideCoverageNV:    return "SampleMaskOverrideCoverageNV";
     case CapabilityFragmentDensityEXT:              return "FragmentDensityEXT";
 
     case CapabilityFragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT";
 
-    case CapabilityShaderNonUniformEXT:                          return "CapabilityShaderNonUniformEXT";
-    case CapabilityRuntimeDescriptorArrayEXT:                    return "CapabilityRuntimeDescriptorArrayEXT";
-    case CapabilityInputAttachmentArrayDynamicIndexingEXT:       return "CapabilityInputAttachmentArrayDynamicIndexingEXT";
-    case CapabilityUniformTexelBufferArrayDynamicIndexingEXT:    return "CapabilityUniformTexelBufferArrayDynamicIndexingEXT";
-    case CapabilityStorageTexelBufferArrayDynamicIndexingEXT:    return "CapabilityStorageTexelBufferArrayDynamicIndexingEXT";
-    case CapabilityUniformBufferArrayNonUniformIndexingEXT:      return "CapabilityUniformBufferArrayNonUniformIndexingEXT";
-    case CapabilitySampledImageArrayNonUniformIndexingEXT:       return "CapabilitySampledImageArrayNonUniformIndexingEXT";
-    case CapabilityStorageBufferArrayNonUniformIndexingEXT:      return "CapabilityStorageBufferArrayNonUniformIndexingEXT";
-    case CapabilityStorageImageArrayNonUniformIndexingEXT:       return "CapabilityStorageImageArrayNonUniformIndexingEXT";
-    case CapabilityInputAttachmentArrayNonUniformIndexingEXT:    return "CapabilityInputAttachmentArrayNonUniformIndexingEXT";
-    case CapabilityUniformTexelBufferArrayNonUniformIndexingEXT: return "CapabilityUniformTexelBufferArrayNonUniformIndexingEXT";
-    case CapabilityStorageTexelBufferArrayNonUniformIndexingEXT: return "CapabilityStorageTexelBufferArrayNonUniformIndexingEXT";
+    case CapabilityShaderNonUniformEXT:                          return "ShaderNonUniformEXT";
+    case CapabilityRuntimeDescriptorArrayEXT:                    return "RuntimeDescriptorArrayEXT";
+    case CapabilityInputAttachmentArrayDynamicIndexingEXT:       return "InputAttachmentArrayDynamicIndexingEXT";
+    case CapabilityUniformTexelBufferArrayDynamicIndexingEXT:    return "UniformTexelBufferArrayDynamicIndexingEXT";
+    case CapabilityStorageTexelBufferArrayDynamicIndexingEXT:    return "StorageTexelBufferArrayDynamicIndexingEXT";
+    case CapabilityUniformBufferArrayNonUniformIndexingEXT:      return "UniformBufferArrayNonUniformIndexingEXT";
+    case CapabilitySampledImageArrayNonUniformIndexingEXT:       return "SampledImageArrayNonUniformIndexingEXT";
+    case CapabilityStorageBufferArrayNonUniformIndexingEXT:      return "StorageBufferArrayNonUniformIndexingEXT";
+    case CapabilityStorageImageArrayNonUniformIndexingEXT:       return "StorageImageArrayNonUniformIndexingEXT";
+    case CapabilityInputAttachmentArrayNonUniformIndexingEXT:    return "InputAttachmentArrayNonUniformIndexingEXT";
+    case CapabilityUniformTexelBufferArrayNonUniformIndexingEXT: return "UniformTexelBufferArrayNonUniformIndexingEXT";
+    case CapabilityStorageTexelBufferArrayNonUniformIndexingEXT: return "StorageTexelBufferArrayNonUniformIndexingEXT";
 
-    case CapabilityVulkanMemoryModelKHR:                return "CapabilityVulkanMemoryModelKHR";
-    case CapabilityVulkanMemoryModelDeviceScopeKHR:     return "CapabilityVulkanMemoryModelDeviceScopeKHR";
+    case CapabilityVulkanMemoryModelKHR:                return "VulkanMemoryModelKHR";
+    case CapabilityVulkanMemoryModelDeviceScopeKHR:     return "VulkanMemoryModelDeviceScopeKHR";
 
-    case CapabilityPhysicalStorageBufferAddressesEXT:   return "CapabilityPhysicalStorageBufferAddressesEXT";
+    case CapabilityPhysicalStorageBufferAddressesEXT:   return "PhysicalStorageBufferAddressesEXT";
+
+    case CapabilityVariablePointers:                    return "VariablePointers";
+
+    case CapabilityCooperativeMatrixNV:     return "CooperativeMatrixNV";
+    case CapabilityShaderSMBuiltinsNV:      return "ShaderSMBuiltinsNV";
+
+    case CapabilityFragmentShaderSampleInterlockEXT:        return "CapabilityFragmentShaderSampleInterlockEXT";
+    case CapabilityFragmentShaderPixelInterlockEXT:         return "CapabilityFragmentShaderPixelInterlockEXT";
+    case CapabilityFragmentShaderShadingRateInterlockEXT:   return "CapabilityFragmentShaderShadingRateInterlockEXT";
+
+    case CapabilityDemoteToHelperInvocationEXT:             return "DemoteToHelperInvocationEXT";
+    case CapabilityShaderClockKHR:                          return "ShaderClockKHR";
+
+    case CapabilityIntegerFunctions2INTEL:              return "CapabilityIntegerFunctions2INTEL";
 
     default: return "Bad";
     }
@@ -1022,6 +1030,7 @@
     case 82:  return "OpCompositeInsert";
     case 83:  return "OpCopyObject";
     case 84:  return "OpTranspose";
+    case OpCopyLogical: return "OpCopyLogical";
     case 85:  return "Bad";
     case 86:  return "OpSampledImage";
     case 87:  return "OpImageSampleImplicitLod";
@@ -1304,7 +1313,6 @@
     case 4430: return "OpSubgroupAllEqualKHR";
     case 4432: return "OpSubgroupReadInvocationKHR";
 
-#ifdef AMD_EXTENSIONS
     case 5000: return "OpGroupIAddNonUniformAMD";
     case 5001: return "OpGroupFAddNonUniformAMD";
     case 5002: return "OpGroupFMinNonUniformAMD";
@@ -1316,22 +1324,57 @@
 
     case 5011: return "OpFragmentMaskFetchAMD";
     case 5012: return "OpFragmentFetchAMD";
-#endif
+
+    case OpReadClockKHR:               return "OpReadClockKHR";
 
     case OpDecorateStringGOOGLE:       return "OpDecorateStringGOOGLE";
     case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE";
 
-#ifdef NV_EXTENSIONS
     case OpGroupNonUniformPartitionNV:       return "OpGroupNonUniformPartitionNV";
-    case OpReportIntersectionNV:             return "OpReportIntersectionNV";
-    case OpIgnoreIntersectionNV:             return "OpIgnoreIntersectionNV";
-    case OpTerminateRayNV:                   return "OpTerminateRayNV";
-    case OpTraceNV:                          return "OpTraceNV";
-    case OpTypeAccelerationStructureNV:      return "OpTypeAccelerationStructureNV";
-    case OpExecuteCallableNV:                return "OpExecuteCallableNV";
+    case OpReportIntersectionKHR:            return "OpReportIntersectionKHR";
+    case OpIgnoreIntersectionKHR:            return "OpIgnoreIntersectionKHR";
+    case OpTerminateRayKHR:                  return "OpTerminateRayKHR";
+    case OpTraceRayKHR:                      return "OpTraceRayKHR";
+    case OpTypeAccelerationStructureKHR:     return "OpTypeAccelerationStructureKHR";
+    case OpExecuteCallableKHR:               return "OpExecuteCallableKHR";
     case OpImageSampleFootprintNV:           return "OpImageSampleFootprintNV";
     case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV";
-#endif
+
+    case OpTypeRayQueryProvisionalKHR:                                        return "OpTypeRayQueryProvisionalKHR";
+    case OpRayQueryInitializeKHR:                                             return "OpRayQueryInitializeKHR";
+    case OpRayQueryTerminateKHR:                                              return "OpRayQueryTerminateKHR";
+    case OpRayQueryGenerateIntersectionKHR:                                   return "OpRayQueryGenerateIntersectionKHR";
+    case OpRayQueryConfirmIntersectionKHR:                                    return "OpRayQueryConfirmIntersectionKHR";
+    case OpRayQueryProceedKHR:                                                return "OpRayQueryProceedKHR";
+    case OpRayQueryGetIntersectionTypeKHR:                                    return "OpRayQueryGetIntersectionTypeKHR";
+    case OpRayQueryGetRayTMinKHR:                                             return "OpRayQueryGetRayTMinKHR";
+    case OpRayQueryGetRayFlagsKHR:                                            return "OpRayQueryGetRayFlagsKHR";
+    case OpRayQueryGetIntersectionTKHR:                                       return "OpRayQueryGetIntersectionTKHR";
+    case OpRayQueryGetIntersectionInstanceCustomIndexKHR:                     return "OpRayQueryGetIntersectionInstanceCustomIndexKHR";
+    case OpRayQueryGetIntersectionInstanceIdKHR:                              return "OpRayQueryGetIntersectionInstanceIdKHR";
+    case OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR:  return "OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR";
+    case OpRayQueryGetIntersectionGeometryIndexKHR:                           return "OpRayQueryGetIntersectionGeometryIndexKHR";
+    case OpRayQueryGetIntersectionPrimitiveIndexKHR:                          return "OpRayQueryGetIntersectionPrimitiveIndexKHR";
+    case OpRayQueryGetIntersectionBarycentricsKHR:                            return "OpRayQueryGetIntersectionBarycentricsKHR";
+    case OpRayQueryGetIntersectionFrontFaceKHR:                               return "OpRayQueryGetIntersectionFrontFaceKHR";
+    case OpRayQueryGetIntersectionCandidateAABBOpaqueKHR:                     return "OpRayQueryGetIntersectionCandidateAABBOpaqueKHR";
+    case OpRayQueryGetIntersectionObjectRayDirectionKHR:                      return "OpRayQueryGetIntersectionObjectRayDirectionKHR";
+    case OpRayQueryGetIntersectionObjectRayOriginKHR:                         return "OpRayQueryGetIntersectionObjectRayOriginKHR";
+    case OpRayQueryGetWorldRayDirectionKHR:                                   return "OpRayQueryGetWorldRayDirectionKHR";
+    case OpRayQueryGetWorldRayOriginKHR:                                      return "OpRayQueryGetWorldRayOriginKHR";
+    case OpRayQueryGetIntersectionObjectToWorldKHR:                           return "OpRayQueryGetIntersectionObjectToWorldKHR";
+    case OpRayQueryGetIntersectionWorldToObjectKHR:                           return "OpRayQueryGetIntersectionWorldToObjectKHR";
+
+    case OpTypeCooperativeMatrixNV:         return "OpTypeCooperativeMatrixNV";
+    case OpCooperativeMatrixLoadNV:         return "OpCooperativeMatrixLoadNV";
+    case OpCooperativeMatrixStoreNV:        return "OpCooperativeMatrixStoreNV";
+    case OpCooperativeMatrixMulAddNV:       return "OpCooperativeMatrixMulAddNV";
+    case OpCooperativeMatrixLengthNV:       return "OpCooperativeMatrixLengthNV";
+    case OpDemoteToHelperInvocationEXT:     return "OpDemoteToHelperInvocationEXT";
+    case OpIsHelperInvocationEXT:           return "OpIsHelperInvocationEXT";
+
+    case OpBeginInvocationInterlockEXT:     return "OpBeginInvocationInterlockEXT";
+    case OpEndInvocationInterlockEXT:       return "OpEndInvocationInterlockEXT";
 
     default:
         return "Bad";
@@ -1444,6 +1487,10 @@
     InstructionDesc[OpGroupWaitEvents].setResultAndType(false, false);
     InstructionDesc[OpAtomicFlagClear].setResultAndType(false, false);
     InstructionDesc[OpModuleProcessed].setResultAndType(false, false);
+    InstructionDesc[OpTypeCooperativeMatrixNV].setResultAndType(true, false);
+    InstructionDesc[OpCooperativeMatrixStoreNV].setResultAndType(false, false);
+    InstructionDesc[OpBeginInvocationInterlockEXT].setResultAndType(false, false);
+    InstructionDesc[OpEndInvocationInterlockEXT].setResultAndType(false, false);
 
     // Specific additional context-dependent operands
 
@@ -1921,6 +1968,8 @@
 
     InstructionDesc[OpTranspose].operands.push(OperandId, "'Matrix'");
 
+    InstructionDesc[OpCopyLogical].operands.push(OperandId, "'Operand'");
+
     InstructionDesc[OpIsNan].operands.push(OperandId, "'x'");
 
     InstructionDesc[OpIsInf].operands.push(OperandId, "'x'");
@@ -2634,7 +2683,6 @@
 
     InstructionDesc[OpModuleProcessed].operands.push(OperandLiteralString, "'process'");
 
-#ifdef AMD_EXTENSIONS
     InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandId, "'X'");
@@ -2673,36 +2721,128 @@
     InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Image'");
     InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Fragment Index'");
-#endif
 
-#ifdef NV_EXTENSIONS
     InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X");
 
-    InstructionDesc[OpTypeAccelerationStructureNV].setResultAndType(true, false);
+    InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
 
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'NV Acceleration Structure'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Flags'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Cull Mask'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Offset'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Stride'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Miss Index'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Origin'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMin'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Direction'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMax'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Payload'");
-    InstructionDesc[OpTraceNV].setResultAndType(false, false);
+    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'NV Acceleration Structure'");
+    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Flags'");
+    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Cull Mask'");
+    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Offset'");
+    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Stride'");
+    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Miss Index'");
+    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Origin'");
+    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMin'");
+    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Direction'");
+    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMax'");
+    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Payload'");
+    InstructionDesc[OpTraceRayKHR].setResultAndType(false, false);
 
-    InstructionDesc[OpReportIntersectionNV].operands.push(OperandId, "'Hit Parameter'");
-    InstructionDesc[OpReportIntersectionNV].operands.push(OperandId, "'Hit Kind'");
+    InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Parameter'");
+    InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Kind'");
 
-    InstructionDesc[OpIgnoreIntersectionNV].setResultAndType(false, false);
+    InstructionDesc[OpIgnoreIntersectionKHR].setResultAndType(false, false);
 
-    InstructionDesc[OpTerminateRayNV].setResultAndType(false, false);
+    InstructionDesc[OpTerminateRayKHR].setResultAndType(false, false);
     
-    InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "SBT Record Index");
-    InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "CallableData ID");
-    InstructionDesc[OpExecuteCallableNV].setResultAndType(false, false);
+    InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "SBT Record Index");
+    InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData ID");
+    InstructionDesc[OpExecuteCallableKHR].setResultAndType(false, false);
+
+    // Ray Query
+    InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
+    InstructionDesc[OpTypeRayQueryProvisionalKHR].setResultAndType(true, false);
+
+    InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'AccelerationS'");
+    InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayFlags'");
+    InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'CullMask'");
+    InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Origin'");
+    InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmin'");
+    InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Direction'");
+    InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmax'");
+    InstructionDesc[OpRayQueryInitializeKHR].setResultAndType(false, false);
+
+    InstructionDesc[OpRayQueryTerminateKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryTerminateKHR].setResultAndType(false, false);
+
+    InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'THit'");
+    InstructionDesc[OpRayQueryGenerateIntersectionKHR].setResultAndType(false, false);
+
+    InstructionDesc[OpRayQueryConfirmIntersectionKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryConfirmIntersectionKHR].setResultAndType(false, false);
+
+    InstructionDesc[OpRayQueryProceedKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryProceedKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionTypeKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetRayTMinKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetRayTMinKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetRayFlagsKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetRayFlagsKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionTKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetWorldRayOriginKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetWorldRayOriginKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].setResultAndType(true, true);
 
     InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coordinate'");
@@ -2713,7 +2853,36 @@
     
     InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Index Offset'");
     InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Packed Indices'");
-#endif
+
+    InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Component Type'");
+    InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Scope'");
+    InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Rows'");
+    InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Columns'");
+
+    InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Pointer'");
+    InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Stride'");
+    InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Column Major'");
+    InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandMemoryAccess, "'Memory Access'");
+    InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandLiteralNumber, "", true);
+    InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "", true);
+
+    InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Pointer'");
+    InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Object'");
+    InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Stride'");
+    InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Column Major'");
+    InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandMemoryAccess, "'Memory Access'");
+    InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandLiteralNumber, "", true);
+    InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "", true);
+
+    InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'A'");
+    InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'B'");
+    InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'C'");
+
+    InstructionDesc[OpCooperativeMatrixLengthNV].operands.push(OperandId, "'Type'");
+
+    InstructionDesc[OpDemoteToHelperInvocationEXT].setResultAndType(false, false);
+
+    InstructionDesc[OpReadClockKHR].operands.push(OperandScope, "'Scope'");
 }
 
 }; // end spv namespace
diff --git a/SPIRV/doc.h b/SPIRV/doc.h
index 7d0475d..293256a 100644
--- a/SPIRV/doc.h
+++ b/SPIRV/doc.h
@@ -255,4 +255,4 @@
 
 void PrintOperands(const OperandParameters& operands, int reservedOperands);
 
-};  // end namespace spv
+}  // end namespace spv
diff --git a/SPIRV/hex_float.h b/SPIRV/hex_float.h
index 905b21a..8be8e9f 100644
--- a/SPIRV/hex_float.h
+++ b/SPIRV/hex_float.h
@@ -784,8 +784,8 @@
   if (val.isInfinity()) {
     // Fail the parse.  Emulate standard behaviour by setting the value to
     // the closest normal value, and set the fail bit on the stream.
-    value.set_value((value.isNegative() | negate_value) ? T::lowest()
-                                                        : T::max());
+    value.set_value((value.isNegative() || negate_value) ? T::lowest()
+                                                         : T::max());
     is.setstate(std::ios_base::failbit);
   }
   return is;
diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp
index 44d0616..70c75d0 100644
--- a/SPIRV/spirv.hpp
+++ b/SPIRV/spirv.hpp
@@ -1,4 +1,4 @@
-// Copyright (c) 2014-2019 The Khronos Group Inc.
+// Copyright (c) 2014-2020 The Khronos Group Inc.
 // 
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and/or associated documentation files (the "Materials"),
@@ -49,12 +49,12 @@
 
 typedef unsigned int Id;
 
-#define SPV_VERSION 0x10300
-#define SPV_REVISION 6
+#define SPV_VERSION 0x10500
+#define SPV_REVISION 1
 
 static const unsigned int MagicNumber = 0x07230203;
-static const unsigned int Version = 0x00010300;
-static const unsigned int Revision = 6;
+static const unsigned int Version = 0x00010500;
+static const unsigned int Revision = 1;
 static const unsigned int OpCodeMask = 0xffff;
 static const unsigned int WordCountShift = 16;
 
@@ -78,11 +78,17 @@
     ExecutionModelKernel = 6,
     ExecutionModelTaskNV = 5267,
     ExecutionModelMeshNV = 5268,
+    ExecutionModelRayGenerationKHR = 5313,
     ExecutionModelRayGenerationNV = 5313,
+    ExecutionModelIntersectionKHR = 5314,
     ExecutionModelIntersectionNV = 5314,
+    ExecutionModelAnyHitKHR = 5315,
     ExecutionModelAnyHitNV = 5315,
+    ExecutionModelClosestHitKHR = 5316,
     ExecutionModelClosestHitNV = 5316,
+    ExecutionModelMissKHR = 5317,
     ExecutionModelMissNV = 5317,
+    ExecutionModelCallableKHR = 5318,
     ExecutionModelCallableNV = 5318,
     ExecutionModelMax = 0x7fffffff,
 };
@@ -91,6 +97,7 @@
     AddressingModelLogical = 0,
     AddressingModelPhysical32 = 1,
     AddressingModelPhysical64 = 2,
+    AddressingModelPhysicalStorageBuffer64 = 5348,
     AddressingModelPhysicalStorageBuffer64EXT = 5348,
     AddressingModelMax = 0x7fffffff,
 };
@@ -99,6 +106,7 @@
     MemoryModelSimple = 0,
     MemoryModelGLSL450 = 1,
     MemoryModelOpenCL = 2,
+    MemoryModelVulkan = 3,
     MemoryModelVulkanKHR = 3,
     MemoryModelMax = 0x7fffffff,
 };
@@ -154,6 +162,12 @@
     ExecutionModeDerivativeGroupQuadsNV = 5289,
     ExecutionModeDerivativeGroupLinearNV = 5290,
     ExecutionModeOutputTrianglesNV = 5298,
+    ExecutionModePixelInterlockOrderedEXT = 5366,
+    ExecutionModePixelInterlockUnorderedEXT = 5367,
+    ExecutionModeSampleInterlockOrderedEXT = 5368,
+    ExecutionModeSampleInterlockUnorderedEXT = 5369,
+    ExecutionModeShadingRateInterlockOrderedEXT = 5370,
+    ExecutionModeShadingRateInterlockUnorderedEXT = 5371,
     ExecutionModeMax = 0x7fffffff,
 };
 
@@ -171,12 +185,19 @@
     StorageClassAtomicCounter = 10,
     StorageClassImage = 11,
     StorageClassStorageBuffer = 12,
+    StorageClassCallableDataKHR = 5328,
     StorageClassCallableDataNV = 5328,
+    StorageClassIncomingCallableDataKHR = 5329,
     StorageClassIncomingCallableDataNV = 5329,
+    StorageClassRayPayloadKHR = 5338,
     StorageClassRayPayloadNV = 5338,
+    StorageClassHitAttributeKHR = 5339,
     StorageClassHitAttributeNV = 5339,
+    StorageClassIncomingRayPayloadKHR = 5342,
     StorageClassIncomingRayPayloadNV = 5342,
+    StorageClassShaderRecordBufferKHR = 5343,
     StorageClassShaderRecordBufferNV = 5343,
+    StorageClassPhysicalStorageBuffer = 5349,
     StorageClassPhysicalStorageBufferEXT = 5349,
     StorageClassMax = 0x7fffffff,
 };
@@ -305,10 +326,16 @@
     ImageOperandsConstOffsetsShift = 5,
     ImageOperandsSampleShift = 6,
     ImageOperandsMinLodShift = 7,
+    ImageOperandsMakeTexelAvailableShift = 8,
     ImageOperandsMakeTexelAvailableKHRShift = 8,
+    ImageOperandsMakeTexelVisibleShift = 9,
     ImageOperandsMakeTexelVisibleKHRShift = 9,
+    ImageOperandsNonPrivateTexelShift = 10,
     ImageOperandsNonPrivateTexelKHRShift = 10,
+    ImageOperandsVolatileTexelShift = 11,
     ImageOperandsVolatileTexelKHRShift = 11,
+    ImageOperandsSignExtendShift = 12,
+    ImageOperandsZeroExtendShift = 13,
     ImageOperandsMax = 0x7fffffff,
 };
 
@@ -322,10 +349,16 @@
     ImageOperandsConstOffsetsMask = 0x00000020,
     ImageOperandsSampleMask = 0x00000040,
     ImageOperandsMinLodMask = 0x00000080,
+    ImageOperandsMakeTexelAvailableMask = 0x00000100,
     ImageOperandsMakeTexelAvailableKHRMask = 0x00000100,
+    ImageOperandsMakeTexelVisibleMask = 0x00000200,
     ImageOperandsMakeTexelVisibleKHRMask = 0x00000200,
+    ImageOperandsNonPrivateTexelMask = 0x00000400,
     ImageOperandsNonPrivateTexelKHRMask = 0x00000400,
+    ImageOperandsVolatileTexelMask = 0x00000800,
     ImageOperandsVolatileTexelKHRMask = 0x00000800,
+    ImageOperandsSignExtendMask = 0x00001000,
+    ImageOperandsZeroExtendMask = 0x00002000,
 };
 
 enum FPFastMathModeShift {
@@ -406,6 +439,7 @@
     DecorationNonWritable = 24,
     DecorationNonReadable = 25,
     DecorationUniform = 26,
+    DecorationUniformId = 27,
     DecorationSaturatedConversion = 28,
     DecorationStream = 29,
     DecorationLocation = 30,
@@ -437,11 +471,17 @@
     DecorationPerViewNV = 5272,
     DecorationPerTaskNV = 5273,
     DecorationPerVertexNV = 5285,
+    DecorationNonUniform = 5300,
     DecorationNonUniformEXT = 5300,
+    DecorationRestrictPointer = 5355,
     DecorationRestrictPointerEXT = 5355,
+    DecorationAliasedPointer = 5356,
     DecorationAliasedPointerEXT = 5356,
+    DecorationCounterBuffer = 5634,
     DecorationHlslCounterBufferGOOGLE = 5634,
     DecorationHlslSemanticGOOGLE = 5635,
+    DecorationUserSemantic = 5635,
+    DecorationUserTypeGOOGLE = 5636,
     DecorationMax = 0x7fffffff,
 };
 
@@ -530,20 +570,39 @@
     BuiltInFragmentSizeNV = 5292,
     BuiltInFragInvocationCountEXT = 5293,
     BuiltInInvocationsPerPixelNV = 5293,
+    BuiltInLaunchIdKHR = 5319,
     BuiltInLaunchIdNV = 5319,
+    BuiltInLaunchSizeKHR = 5320,
     BuiltInLaunchSizeNV = 5320,
+    BuiltInWorldRayOriginKHR = 5321,
     BuiltInWorldRayOriginNV = 5321,
+    BuiltInWorldRayDirectionKHR = 5322,
     BuiltInWorldRayDirectionNV = 5322,
+    BuiltInObjectRayOriginKHR = 5323,
     BuiltInObjectRayOriginNV = 5323,
+    BuiltInObjectRayDirectionKHR = 5324,
     BuiltInObjectRayDirectionNV = 5324,
+    BuiltInRayTminKHR = 5325,
     BuiltInRayTminNV = 5325,
+    BuiltInRayTmaxKHR = 5326,
     BuiltInRayTmaxNV = 5326,
+    BuiltInInstanceCustomIndexKHR = 5327,
     BuiltInInstanceCustomIndexNV = 5327,
+    BuiltInObjectToWorldKHR = 5330,
     BuiltInObjectToWorldNV = 5330,
+    BuiltInWorldToObjectKHR = 5331,
     BuiltInWorldToObjectNV = 5331,
+    BuiltInHitTKHR = 5332,
     BuiltInHitTNV = 5332,
+    BuiltInHitKindKHR = 5333,
     BuiltInHitKindNV = 5333,
+    BuiltInIncomingRayFlagsKHR = 5351,
     BuiltInIncomingRayFlagsNV = 5351,
+    BuiltInRayGeometryIndexKHR = 5352,
+    BuiltInWarpsPerSMNV = 5374,
+    BuiltInSMCountNV = 5375,
+    BuiltInWarpIDNV = 5376,
+    BuiltInSMIDNV = 5377,
     BuiltInMax = 0x7fffffff,
 };
 
@@ -564,6 +623,11 @@
     LoopControlDontUnrollShift = 1,
     LoopControlDependencyInfiniteShift = 2,
     LoopControlDependencyLengthShift = 3,
+    LoopControlMinIterationsShift = 4,
+    LoopControlMaxIterationsShift = 5,
+    LoopControlIterationMultipleShift = 6,
+    LoopControlPeelCountShift = 7,
+    LoopControlPartialCountShift = 8,
     LoopControlMax = 0x7fffffff,
 };
 
@@ -573,6 +637,11 @@
     LoopControlDontUnrollMask = 0x00000002,
     LoopControlDependencyInfiniteMask = 0x00000004,
     LoopControlDependencyLengthMask = 0x00000008,
+    LoopControlMinIterationsMask = 0x00000010,
+    LoopControlMaxIterationsMask = 0x00000020,
+    LoopControlIterationMultipleMask = 0x00000040,
+    LoopControlPeelCountMask = 0x00000080,
+    LoopControlPartialCountMask = 0x00000100,
 };
 
 enum FunctionControlShift {
@@ -602,9 +671,13 @@
     MemorySemanticsCrossWorkgroupMemoryShift = 9,
     MemorySemanticsAtomicCounterMemoryShift = 10,
     MemorySemanticsImageMemoryShift = 11,
+    MemorySemanticsOutputMemoryShift = 12,
     MemorySemanticsOutputMemoryKHRShift = 12,
+    MemorySemanticsMakeAvailableShift = 13,
     MemorySemanticsMakeAvailableKHRShift = 13,
+    MemorySemanticsMakeVisibleShift = 14,
     MemorySemanticsMakeVisibleKHRShift = 14,
+    MemorySemanticsVolatileShift = 15,
     MemorySemanticsMax = 0x7fffffff,
 };
 
@@ -620,17 +693,24 @@
     MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,
     MemorySemanticsAtomicCounterMemoryMask = 0x00000400,
     MemorySemanticsImageMemoryMask = 0x00000800,
+    MemorySemanticsOutputMemoryMask = 0x00001000,
     MemorySemanticsOutputMemoryKHRMask = 0x00001000,
+    MemorySemanticsMakeAvailableMask = 0x00002000,
     MemorySemanticsMakeAvailableKHRMask = 0x00002000,
+    MemorySemanticsMakeVisibleMask = 0x00004000,
     MemorySemanticsMakeVisibleKHRMask = 0x00004000,
+    MemorySemanticsVolatileMask = 0x00008000,
 };
 
 enum MemoryAccessShift {
     MemoryAccessVolatileShift = 0,
     MemoryAccessAlignedShift = 1,
     MemoryAccessNontemporalShift = 2,
+    MemoryAccessMakePointerAvailableShift = 3,
     MemoryAccessMakePointerAvailableKHRShift = 3,
+    MemoryAccessMakePointerVisibleShift = 4,
     MemoryAccessMakePointerVisibleKHRShift = 4,
+    MemoryAccessNonPrivatePointerShift = 5,
     MemoryAccessNonPrivatePointerKHRShift = 5,
     MemoryAccessMax = 0x7fffffff,
 };
@@ -640,8 +720,11 @@
     MemoryAccessVolatileMask = 0x00000001,
     MemoryAccessAlignedMask = 0x00000002,
     MemoryAccessNontemporalMask = 0x00000004,
+    MemoryAccessMakePointerAvailableMask = 0x00000008,
     MemoryAccessMakePointerAvailableKHRMask = 0x00000008,
+    MemoryAccessMakePointerVisibleMask = 0x00000010,
     MemoryAccessMakePointerVisibleKHRMask = 0x00000010,
+    MemoryAccessNonPrivatePointerMask = 0x00000020,
     MemoryAccessNonPrivatePointerKHRMask = 0x00000020,
 };
 
@@ -651,7 +734,9 @@
     ScopeWorkgroup = 2,
     ScopeSubgroup = 3,
     ScopeInvocation = 4,
+    ScopeQueueFamily = 5,
     ScopeQueueFamilyKHR = 5,
+    ScopeShaderCallKHR = 6,
     ScopeMax = 0x7fffffff,
 };
 
@@ -751,6 +836,8 @@
     CapabilityGroupNonUniformShuffleRelative = 66,
     CapabilityGroupNonUniformClustered = 67,
     CapabilityGroupNonUniformQuad = 68,
+    CapabilityShaderLayer = 69,
+    CapabilityShaderViewportIndex = 70,
     CapabilitySubgroupBallotKHR = 4423,
     CapabilityDrawParameters = 4427,
     CapabilitySubgroupVoteKHR = 4431,
@@ -774,11 +861,14 @@
     CapabilitySignedZeroInfNanPreserve = 4466,
     CapabilityRoundingModeRTE = 4467,
     CapabilityRoundingModeRTZ = 4468,
+    CapabilityRayQueryProvisionalKHR = 4471,
+    CapabilityRayTraversalPrimitiveCullingProvisionalKHR = 4478,
     CapabilityFloat16ImageAMD = 5008,
     CapabilityImageGatherBiasLodAMD = 5009,
     CapabilityFragmentMaskAMD = 5010,
     CapabilityStencilExportEXT = 5013,
     CapabilityImageReadWriteLodAMD = 5015,
+    CapabilityShaderClockKHR = 5055,
     CapabilitySampleMaskOverrideCoverageNV = 5249,
     CapabilityGeometryShaderPassthroughNV = 5251,
     CapabilityShaderViewportIndexLayerEXT = 5254,
@@ -794,29 +884,103 @@
     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,
+    CapabilityRayTracingProvisionalKHR = 5353,
+    CapabilityCooperativeMatrixNV = 5357,
+    CapabilityFragmentShaderSampleInterlockEXT = 5363,
+    CapabilityFragmentShaderShadingRateInterlockEXT = 5372,
+    CapabilityShaderSMBuiltinsNV = 5373,
+    CapabilityFragmentShaderPixelInterlockEXT = 5378,
+    CapabilityDemoteToHelperInvocationEXT = 5379,
     CapabilitySubgroupShuffleINTEL = 5568,
     CapabilitySubgroupBufferBlockIOINTEL = 5569,
     CapabilitySubgroupImageBlockIOINTEL = 5570,
+    CapabilitySubgroupImageMediaBlockIOINTEL = 5579,
+    CapabilityIntegerFunctions2INTEL = 5584,
+    CapabilitySubgroupAvcMotionEstimationINTEL = 5696,
+    CapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697,
+    CapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698,
     CapabilityMax = 0x7fffffff,
 };
 
+enum RayFlagsShift {
+    RayFlagsOpaqueKHRShift = 0,
+    RayFlagsNoOpaqueKHRShift = 1,
+    RayFlagsTerminateOnFirstHitKHRShift = 2,
+    RayFlagsSkipClosestHitShaderKHRShift = 3,
+    RayFlagsCullBackFacingTrianglesKHRShift = 4,
+    RayFlagsCullFrontFacingTrianglesKHRShift = 5,
+    RayFlagsCullOpaqueKHRShift = 6,
+    RayFlagsCullNoOpaqueKHRShift = 7,
+    RayFlagsSkipTrianglesKHRShift = 8,
+    RayFlagsSkipAABBsKHRShift = 9,
+    RayFlagsMax = 0x7fffffff,
+};
+
+enum RayFlagsMask {
+    RayFlagsMaskNone = 0,
+    RayFlagsOpaqueKHRMask = 0x00000001,
+    RayFlagsNoOpaqueKHRMask = 0x00000002,
+    RayFlagsTerminateOnFirstHitKHRMask = 0x00000004,
+    RayFlagsSkipClosestHitShaderKHRMask = 0x00000008,
+    RayFlagsCullBackFacingTrianglesKHRMask = 0x00000010,
+    RayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020,
+    RayFlagsCullOpaqueKHRMask = 0x00000040,
+    RayFlagsCullNoOpaqueKHRMask = 0x00000080,
+    RayFlagsSkipTrianglesKHRMask = 0x00000100,
+    RayFlagsSkipAABBsKHRMask = 0x00000200,
+};
+
+enum RayQueryIntersection {
+    RayQueryIntersectionRayQueryCandidateIntersectionKHR = 0,
+    RayQueryIntersectionRayQueryCommittedIntersectionKHR = 1,
+    RayQueryIntersectionMax = 0x7fffffff,
+};
+
+enum RayQueryCommittedIntersectionType {
+    RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR = 0,
+    RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR = 1,
+    RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR = 2,
+    RayQueryCommittedIntersectionTypeMax = 0x7fffffff,
+};
+
+enum RayQueryCandidateIntersectionType {
+    RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR = 0,
+    RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR = 1,
+    RayQueryCandidateIntersectionTypeMax = 0x7fffffff,
+};
+
 enum Op {
     OpNop = 0,
     OpUndef = 1,
@@ -1158,12 +1322,23 @@
     OpGroupNonUniformLogicalXor = 364,
     OpGroupNonUniformQuadBroadcast = 365,
     OpGroupNonUniformQuadSwap = 366,
+    OpCopyLogical = 400,
+    OpPtrEqual = 401,
+    OpPtrNotEqual = 402,
+    OpPtrDiff = 403,
     OpSubgroupBallotKHR = 4421,
     OpSubgroupFirstInvocationKHR = 4422,
     OpSubgroupAllKHR = 4428,
     OpSubgroupAnyKHR = 4429,
     OpSubgroupAllEqualKHR = 4430,
     OpSubgroupReadInvocationKHR = 4432,
+    OpTypeRayQueryProvisionalKHR = 4472,
+    OpRayQueryInitializeKHR = 4473,
+    OpRayQueryTerminateKHR = 4474,
+    OpRayQueryGenerateIntersectionKHR = 4475,
+    OpRayQueryConfirmIntersectionKHR = 4476,
+    OpRayQueryProceedKHR = 4477,
+    OpRayQueryGetIntersectionTypeKHR = 4479,
     OpGroupIAddNonUniformAMD = 5000,
     OpGroupFAddNonUniformAMD = 5001,
     OpGroupFMinNonUniformAMD = 5002,
@@ -1174,15 +1349,31 @@
     OpGroupSMaxNonUniformAMD = 5007,
     OpFragmentMaskFetchAMD = 5011,
     OpFragmentFetchAMD = 5012,
+    OpReadClockKHR = 5056,
     OpImageSampleFootprintNV = 5283,
     OpGroupNonUniformPartitionNV = 5296,
     OpWritePackedPrimitiveIndices4x8NV = 5299,
+    OpReportIntersectionKHR = 5334,
     OpReportIntersectionNV = 5334,
+    OpIgnoreIntersectionKHR = 5335,
     OpIgnoreIntersectionNV = 5335,
+    OpTerminateRayKHR = 5336,
     OpTerminateRayNV = 5336,
     OpTraceNV = 5337,
+    OpTraceRayKHR = 5337,
+    OpTypeAccelerationStructureKHR = 5341,
     OpTypeAccelerationStructureNV = 5341,
+    OpExecuteCallableKHR = 5344,
     OpExecuteCallableNV = 5344,
+    OpTypeCooperativeMatrixNV = 5358,
+    OpCooperativeMatrixLoadNV = 5359,
+    OpCooperativeMatrixStoreNV = 5360,
+    OpCooperativeMatrixMulAddNV = 5361,
+    OpCooperativeMatrixLengthNV = 5362,
+    OpBeginInvocationInterlockEXT = 5364,
+    OpEndInvocationInterlockEXT = 5365,
+    OpDemoteToHelperInvocationEXT = 5380,
+    OpIsHelperInvocationEXT = 5381,
     OpSubgroupShuffleINTEL = 5571,
     OpSubgroupShuffleDownINTEL = 5572,
     OpSubgroupShuffleUpINTEL = 5573,
@@ -1191,11 +1382,720 @@
     OpSubgroupBlockWriteINTEL = 5576,
     OpSubgroupImageBlockReadINTEL = 5577,
     OpSubgroupImageBlockWriteINTEL = 5578,
+    OpSubgroupImageMediaBlockReadINTEL = 5580,
+    OpSubgroupImageMediaBlockWriteINTEL = 5581,
+    OpUCountLeadingZerosINTEL = 5585,
+    OpUCountTrailingZerosINTEL = 5586,
+    OpAbsISubINTEL = 5587,
+    OpAbsUSubINTEL = 5588,
+    OpIAddSatINTEL = 5589,
+    OpUAddSatINTEL = 5590,
+    OpIAverageINTEL = 5591,
+    OpUAverageINTEL = 5592,
+    OpIAverageRoundedINTEL = 5593,
+    OpUAverageRoundedINTEL = 5594,
+    OpISubSatINTEL = 5595,
+    OpUSubSatINTEL = 5596,
+    OpIMul32x16INTEL = 5597,
+    OpUMul32x16INTEL = 5598,
+    OpDecorateString = 5632,
     OpDecorateStringGOOGLE = 5632,
+    OpMemberDecorateString = 5633,
     OpMemberDecorateStringGOOGLE = 5633,
+    OpVmeImageINTEL = 5699,
+    OpTypeVmeImageINTEL = 5700,
+    OpTypeAvcImePayloadINTEL = 5701,
+    OpTypeAvcRefPayloadINTEL = 5702,
+    OpTypeAvcSicPayloadINTEL = 5703,
+    OpTypeAvcMcePayloadINTEL = 5704,
+    OpTypeAvcMceResultINTEL = 5705,
+    OpTypeAvcImeResultINTEL = 5706,
+    OpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707,
+    OpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708,
+    OpTypeAvcImeSingleReferenceStreaminINTEL = 5709,
+    OpTypeAvcImeDualReferenceStreaminINTEL = 5710,
+    OpTypeAvcRefResultINTEL = 5711,
+    OpTypeAvcSicResultINTEL = 5712,
+    OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713,
+    OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714,
+    OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715,
+    OpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716,
+    OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717,
+    OpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718,
+    OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719,
+    OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720,
+    OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721,
+    OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722,
+    OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723,
+    OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724,
+    OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725,
+    OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726,
+    OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727,
+    OpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728,
+    OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729,
+    OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730,
+    OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731,
+    OpSubgroupAvcMceConvertToImePayloadINTEL = 5732,
+    OpSubgroupAvcMceConvertToImeResultINTEL = 5733,
+    OpSubgroupAvcMceConvertToRefPayloadINTEL = 5734,
+    OpSubgroupAvcMceConvertToRefResultINTEL = 5735,
+    OpSubgroupAvcMceConvertToSicPayloadINTEL = 5736,
+    OpSubgroupAvcMceConvertToSicResultINTEL = 5737,
+    OpSubgroupAvcMceGetMotionVectorsINTEL = 5738,
+    OpSubgroupAvcMceGetInterDistortionsINTEL = 5739,
+    OpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740,
+    OpSubgroupAvcMceGetInterMajorShapeINTEL = 5741,
+    OpSubgroupAvcMceGetInterMinorShapeINTEL = 5742,
+    OpSubgroupAvcMceGetInterDirectionsINTEL = 5743,
+    OpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744,
+    OpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745,
+    OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746,
+    OpSubgroupAvcImeInitializeINTEL = 5747,
+    OpSubgroupAvcImeSetSingleReferenceINTEL = 5748,
+    OpSubgroupAvcImeSetDualReferenceINTEL = 5749,
+    OpSubgroupAvcImeRefWindowSizeINTEL = 5750,
+    OpSubgroupAvcImeAdjustRefOffsetINTEL = 5751,
+    OpSubgroupAvcImeConvertToMcePayloadINTEL = 5752,
+    OpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753,
+    OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754,
+    OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755,
+    OpSubgroupAvcImeSetWeightedSadINTEL = 5756,
+    OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757,
+    OpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758,
+    OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759,
+    OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760,
+    OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761,
+    OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762,
+    OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763,
+    OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764,
+    OpSubgroupAvcImeConvertToMceResultINTEL = 5765,
+    OpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766,
+    OpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767,
+    OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768,
+    OpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769,
+    OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770,
+    OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771,
+    OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772,
+    OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773,
+    OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774,
+    OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775,
+    OpSubgroupAvcImeGetBorderReachedINTEL = 5776,
+    OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777,
+    OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778,
+    OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779,
+    OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780,
+    OpSubgroupAvcFmeInitializeINTEL = 5781,
+    OpSubgroupAvcBmeInitializeINTEL = 5782,
+    OpSubgroupAvcRefConvertToMcePayloadINTEL = 5783,
+    OpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784,
+    OpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785,
+    OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786,
+    OpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787,
+    OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788,
+    OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789,
+    OpSubgroupAvcRefConvertToMceResultINTEL = 5790,
+    OpSubgroupAvcSicInitializeINTEL = 5791,
+    OpSubgroupAvcSicConfigureSkcINTEL = 5792,
+    OpSubgroupAvcSicConfigureIpeLumaINTEL = 5793,
+    OpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794,
+    OpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795,
+    OpSubgroupAvcSicConvertToMcePayloadINTEL = 5796,
+    OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797,
+    OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798,
+    OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799,
+    OpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800,
+    OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801,
+    OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802,
+    OpSubgroupAvcSicEvaluateIpeINTEL = 5803,
+    OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804,
+    OpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805,
+    OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806,
+    OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807,
+    OpSubgroupAvcSicConvertToMceResultINTEL = 5808,
+    OpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809,
+    OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810,
+    OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811,
+    OpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812,
+    OpSubgroupAvcSicGetIpeChromaModeINTEL = 5813,
+    OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814,
+    OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815,
+    OpSubgroupAvcSicGetInterRawSadsINTEL = 5816,
+    OpRayQueryGetRayTMinKHR = 6016,
+    OpRayQueryGetRayFlagsKHR = 6017,
+    OpRayQueryGetIntersectionTKHR = 6018,
+    OpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019,
+    OpRayQueryGetIntersectionInstanceIdKHR = 6020,
+    OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021,
+    OpRayQueryGetIntersectionGeometryIndexKHR = 6022,
+    OpRayQueryGetIntersectionPrimitiveIndexKHR = 6023,
+    OpRayQueryGetIntersectionBarycentricsKHR = 6024,
+    OpRayQueryGetIntersectionFrontFaceKHR = 6025,
+    OpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026,
+    OpRayQueryGetIntersectionObjectRayDirectionKHR = 6027,
+    OpRayQueryGetIntersectionObjectRayOriginKHR = 6028,
+    OpRayQueryGetWorldRayDirectionKHR = 6029,
+    OpRayQueryGetWorldRayOriginKHR = 6030,
+    OpRayQueryGetIntersectionObjectToWorldKHR = 6031,
+    OpRayQueryGetIntersectionWorldToObjectKHR = 6032,
     OpMax = 0x7fffffff,
 };
 
+#ifdef SPV_ENABLE_UTILITY_CODE
+inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
+    *hasResult = *hasResultType = false;
+    switch (opcode) {
+    default: /* unknown opcode */ break;
+    case OpNop: *hasResult = false; *hasResultType = false; break;
+    case OpUndef: *hasResult = true; *hasResultType = true; break;
+    case OpSourceContinued: *hasResult = false; *hasResultType = false; break;
+    case OpSource: *hasResult = false; *hasResultType = false; break;
+    case OpSourceExtension: *hasResult = false; *hasResultType = false; break;
+    case OpName: *hasResult = false; *hasResultType = false; break;
+    case OpMemberName: *hasResult = false; *hasResultType = false; break;
+    case OpString: *hasResult = true; *hasResultType = false; break;
+    case OpLine: *hasResult = false; *hasResultType = false; break;
+    case OpExtension: *hasResult = false; *hasResultType = false; break;
+    case OpExtInstImport: *hasResult = true; *hasResultType = false; break;
+    case OpExtInst: *hasResult = true; *hasResultType = true; break;
+    case OpMemoryModel: *hasResult = false; *hasResultType = false; break;
+    case OpEntryPoint: *hasResult = false; *hasResultType = false; break;
+    case OpExecutionMode: *hasResult = false; *hasResultType = false; break;
+    case OpCapability: *hasResult = false; *hasResultType = false; break;
+    case OpTypeVoid: *hasResult = true; *hasResultType = false; break;
+    case OpTypeBool: *hasResult = true; *hasResultType = false; break;
+    case OpTypeInt: *hasResult = true; *hasResultType = false; break;
+    case OpTypeFloat: *hasResult = true; *hasResultType = false; break;
+    case OpTypeVector: *hasResult = true; *hasResultType = false; break;
+    case OpTypeMatrix: *hasResult = true; *hasResultType = false; break;
+    case OpTypeImage: *hasResult = true; *hasResultType = false; break;
+    case OpTypeSampler: *hasResult = true; *hasResultType = false; break;
+    case OpTypeSampledImage: *hasResult = true; *hasResultType = false; break;
+    case OpTypeArray: *hasResult = true; *hasResultType = false; break;
+    case OpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break;
+    case OpTypeStruct: *hasResult = true; *hasResultType = false; break;
+    case OpTypeOpaque: *hasResult = true; *hasResultType = false; break;
+    case OpTypePointer: *hasResult = true; *hasResultType = false; break;
+    case OpTypeFunction: *hasResult = true; *hasResultType = false; break;
+    case OpTypeEvent: *hasResult = true; *hasResultType = false; break;
+    case OpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break;
+    case OpTypeReserveId: *hasResult = true; *hasResultType = false; break;
+    case OpTypeQueue: *hasResult = true; *hasResultType = false; break;
+    case OpTypePipe: *hasResult = true; *hasResultType = false; break;
+    case OpTypeForwardPointer: *hasResult = false; *hasResultType = false; break;
+    case OpConstantTrue: *hasResult = true; *hasResultType = true; break;
+    case OpConstantFalse: *hasResult = true; *hasResultType = true; break;
+    case OpConstant: *hasResult = true; *hasResultType = true; break;
+    case OpConstantComposite: *hasResult = true; *hasResultType = true; break;
+    case OpConstantSampler: *hasResult = true; *hasResultType = true; break;
+    case OpConstantNull: *hasResult = true; *hasResultType = true; break;
+    case OpSpecConstantTrue: *hasResult = true; *hasResultType = true; break;
+    case OpSpecConstantFalse: *hasResult = true; *hasResultType = true; break;
+    case OpSpecConstant: *hasResult = true; *hasResultType = true; break;
+    case OpSpecConstantComposite: *hasResult = true; *hasResultType = true; break;
+    case OpSpecConstantOp: *hasResult = true; *hasResultType = true; break;
+    case OpFunction: *hasResult = true; *hasResultType = true; break;
+    case OpFunctionParameter: *hasResult = true; *hasResultType = true; break;
+    case OpFunctionEnd: *hasResult = false; *hasResultType = false; break;
+    case OpFunctionCall: *hasResult = true; *hasResultType = true; break;
+    case OpVariable: *hasResult = true; *hasResultType = true; break;
+    case OpImageTexelPointer: *hasResult = true; *hasResultType = true; break;
+    case OpLoad: *hasResult = true; *hasResultType = true; break;
+    case OpStore: *hasResult = false; *hasResultType = false; break;
+    case OpCopyMemory: *hasResult = false; *hasResultType = false; break;
+    case OpCopyMemorySized: *hasResult = false; *hasResultType = false; break;
+    case OpAccessChain: *hasResult = true; *hasResultType = true; break;
+    case OpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break;
+    case OpPtrAccessChain: *hasResult = true; *hasResultType = true; break;
+    case OpArrayLength: *hasResult = true; *hasResultType = true; break;
+    case OpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break;
+    case OpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break;
+    case OpDecorate: *hasResult = false; *hasResultType = false; break;
+    case OpMemberDecorate: *hasResult = false; *hasResultType = false; break;
+    case OpDecorationGroup: *hasResult = true; *hasResultType = false; break;
+    case OpGroupDecorate: *hasResult = false; *hasResultType = false; break;
+    case OpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break;
+    case OpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break;
+    case OpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break;
+    case OpVectorShuffle: *hasResult = true; *hasResultType = true; break;
+    case OpCompositeConstruct: *hasResult = true; *hasResultType = true; break;
+    case OpCompositeExtract: *hasResult = true; *hasResultType = true; break;
+    case OpCompositeInsert: *hasResult = true; *hasResultType = true; break;
+    case OpCopyObject: *hasResult = true; *hasResultType = true; break;
+    case OpTranspose: *hasResult = true; *hasResultType = true; break;
+    case OpSampledImage: *hasResult = true; *hasResultType = true; break;
+    case OpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageFetch: *hasResult = true; *hasResultType = true; break;
+    case OpImageGather: *hasResult = true; *hasResultType = true; break;
+    case OpImageDrefGather: *hasResult = true; *hasResultType = true; break;
+    case OpImageRead: *hasResult = true; *hasResultType = true; break;
+    case OpImageWrite: *hasResult = false; *hasResultType = false; break;
+    case OpImage: *hasResult = true; *hasResultType = true; break;
+    case OpImageQueryFormat: *hasResult = true; *hasResultType = true; break;
+    case OpImageQueryOrder: *hasResult = true; *hasResultType = true; break;
+    case OpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageQuerySize: *hasResult = true; *hasResultType = true; break;
+    case OpImageQueryLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageQueryLevels: *hasResult = true; *hasResultType = true; break;
+    case OpImageQuerySamples: *hasResult = true; *hasResultType = true; break;
+    case OpConvertFToU: *hasResult = true; *hasResultType = true; break;
+    case OpConvertFToS: *hasResult = true; *hasResultType = true; break;
+    case OpConvertSToF: *hasResult = true; *hasResultType = true; break;
+    case OpConvertUToF: *hasResult = true; *hasResultType = true; break;
+    case OpUConvert: *hasResult = true; *hasResultType = true; break;
+    case OpSConvert: *hasResult = true; *hasResultType = true; break;
+    case OpFConvert: *hasResult = true; *hasResultType = true; break;
+    case OpQuantizeToF16: *hasResult = true; *hasResultType = true; break;
+    case OpConvertPtrToU: *hasResult = true; *hasResultType = true; break;
+    case OpSatConvertSToU: *hasResult = true; *hasResultType = true; break;
+    case OpSatConvertUToS: *hasResult = true; *hasResultType = true; break;
+    case OpConvertUToPtr: *hasResult = true; *hasResultType = true; break;
+    case OpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break;
+    case OpGenericCastToPtr: *hasResult = true; *hasResultType = true; break;
+    case OpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break;
+    case OpBitcast: *hasResult = true; *hasResultType = true; break;
+    case OpSNegate: *hasResult = true; *hasResultType = true; break;
+    case OpFNegate: *hasResult = true; *hasResultType = true; break;
+    case OpIAdd: *hasResult = true; *hasResultType = true; break;
+    case OpFAdd: *hasResult = true; *hasResultType = true; break;
+    case OpISub: *hasResult = true; *hasResultType = true; break;
+    case OpFSub: *hasResult = true; *hasResultType = true; break;
+    case OpIMul: *hasResult = true; *hasResultType = true; break;
+    case OpFMul: *hasResult = true; *hasResultType = true; break;
+    case OpUDiv: *hasResult = true; *hasResultType = true; break;
+    case OpSDiv: *hasResult = true; *hasResultType = true; break;
+    case OpFDiv: *hasResult = true; *hasResultType = true; break;
+    case OpUMod: *hasResult = true; *hasResultType = true; break;
+    case OpSRem: *hasResult = true; *hasResultType = true; break;
+    case OpSMod: *hasResult = true; *hasResultType = true; break;
+    case OpFRem: *hasResult = true; *hasResultType = true; break;
+    case OpFMod: *hasResult = true; *hasResultType = true; break;
+    case OpVectorTimesScalar: *hasResult = true; *hasResultType = true; break;
+    case OpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break;
+    case OpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break;
+    case OpMatrixTimesVector: *hasResult = true; *hasResultType = true; break;
+    case OpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break;
+    case OpOuterProduct: *hasResult = true; *hasResultType = true; break;
+    case OpDot: *hasResult = true; *hasResultType = true; break;
+    case OpIAddCarry: *hasResult = true; *hasResultType = true; break;
+    case OpISubBorrow: *hasResult = true; *hasResultType = true; break;
+    case OpUMulExtended: *hasResult = true; *hasResultType = true; break;
+    case OpSMulExtended: *hasResult = true; *hasResultType = true; break;
+    case OpAny: *hasResult = true; *hasResultType = true; break;
+    case OpAll: *hasResult = true; *hasResultType = true; break;
+    case OpIsNan: *hasResult = true; *hasResultType = true; break;
+    case OpIsInf: *hasResult = true; *hasResultType = true; break;
+    case OpIsFinite: *hasResult = true; *hasResultType = true; break;
+    case OpIsNormal: *hasResult = true; *hasResultType = true; break;
+    case OpSignBitSet: *hasResult = true; *hasResultType = true; break;
+    case OpLessOrGreater: *hasResult = true; *hasResultType = true; break;
+    case OpOrdered: *hasResult = true; *hasResultType = true; break;
+    case OpUnordered: *hasResult = true; *hasResultType = true; break;
+    case OpLogicalEqual: *hasResult = true; *hasResultType = true; break;
+    case OpLogicalNotEqual: *hasResult = true; *hasResultType = true; break;
+    case OpLogicalOr: *hasResult = true; *hasResultType = true; break;
+    case OpLogicalAnd: *hasResult = true; *hasResultType = true; break;
+    case OpLogicalNot: *hasResult = true; *hasResultType = true; break;
+    case OpSelect: *hasResult = true; *hasResultType = true; break;
+    case OpIEqual: *hasResult = true; *hasResultType = true; break;
+    case OpINotEqual: *hasResult = true; *hasResultType = true; break;
+    case OpUGreaterThan: *hasResult = true; *hasResultType = true; break;
+    case OpSGreaterThan: *hasResult = true; *hasResultType = true; break;
+    case OpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
+    case OpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
+    case OpULessThan: *hasResult = true; *hasResultType = true; break;
+    case OpSLessThan: *hasResult = true; *hasResultType = true; break;
+    case OpULessThanEqual: *hasResult = true; *hasResultType = true; break;
+    case OpSLessThanEqual: *hasResult = true; *hasResultType = true; break;
+    case OpFOrdEqual: *hasResult = true; *hasResultType = true; break;
+    case OpFUnordEqual: *hasResult = true; *hasResultType = true; break;
+    case OpFOrdNotEqual: *hasResult = true; *hasResultType = true; break;
+    case OpFUnordNotEqual: *hasResult = true; *hasResultType = true; break;
+    case OpFOrdLessThan: *hasResult = true; *hasResultType = true; break;
+    case OpFUnordLessThan: *hasResult = true; *hasResultType = true; break;
+    case OpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break;
+    case OpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break;
+    case OpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break;
+    case OpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break;
+    case OpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
+    case OpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
+    case OpShiftRightLogical: *hasResult = true; *hasResultType = true; break;
+    case OpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break;
+    case OpShiftLeftLogical: *hasResult = true; *hasResultType = true; break;
+    case OpBitwiseOr: *hasResult = true; *hasResultType = true; break;
+    case OpBitwiseXor: *hasResult = true; *hasResultType = true; break;
+    case OpBitwiseAnd: *hasResult = true; *hasResultType = true; break;
+    case OpNot: *hasResult = true; *hasResultType = true; break;
+    case OpBitFieldInsert: *hasResult = true; *hasResultType = true; break;
+    case OpBitFieldSExtract: *hasResult = true; *hasResultType = true; break;
+    case OpBitFieldUExtract: *hasResult = true; *hasResultType = true; break;
+    case OpBitReverse: *hasResult = true; *hasResultType = true; break;
+    case OpBitCount: *hasResult = true; *hasResultType = true; break;
+    case OpDPdx: *hasResult = true; *hasResultType = true; break;
+    case OpDPdy: *hasResult = true; *hasResultType = true; break;
+    case OpFwidth: *hasResult = true; *hasResultType = true; break;
+    case OpDPdxFine: *hasResult = true; *hasResultType = true; break;
+    case OpDPdyFine: *hasResult = true; *hasResultType = true; break;
+    case OpFwidthFine: *hasResult = true; *hasResultType = true; break;
+    case OpDPdxCoarse: *hasResult = true; *hasResultType = true; break;
+    case OpDPdyCoarse: *hasResult = true; *hasResultType = true; break;
+    case OpFwidthCoarse: *hasResult = true; *hasResultType = true; break;
+    case OpEmitVertex: *hasResult = false; *hasResultType = false; break;
+    case OpEndPrimitive: *hasResult = false; *hasResultType = false; break;
+    case OpEmitStreamVertex: *hasResult = false; *hasResultType = false; break;
+    case OpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break;
+    case OpControlBarrier: *hasResult = false; *hasResultType = false; break;
+    case OpMemoryBarrier: *hasResult = false; *hasResultType = false; break;
+    case OpAtomicLoad: *hasResult = true; *hasResultType = true; break;
+    case OpAtomicStore: *hasResult = false; *hasResultType = false; break;
+    case OpAtomicExchange: *hasResult = true; *hasResultType = true; break;
+    case OpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break;
+    case OpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break;
+    case OpAtomicIIncrement: *hasResult = true; *hasResultType = true; break;
+    case OpAtomicIDecrement: *hasResult = true; *hasResultType = true; break;
+    case OpAtomicIAdd: *hasResult = true; *hasResultType = true; break;
+    case OpAtomicISub: *hasResult = true; *hasResultType = true; break;
+    case OpAtomicSMin: *hasResult = true; *hasResultType = true; break;
+    case OpAtomicUMin: *hasResult = true; *hasResultType = true; break;
+    case OpAtomicSMax: *hasResult = true; *hasResultType = true; break;
+    case OpAtomicUMax: *hasResult = true; *hasResultType = true; break;
+    case OpAtomicAnd: *hasResult = true; *hasResultType = true; break;
+    case OpAtomicOr: *hasResult = true; *hasResultType = true; break;
+    case OpAtomicXor: *hasResult = true; *hasResultType = true; break;
+    case OpPhi: *hasResult = true; *hasResultType = true; break;
+    case OpLoopMerge: *hasResult = false; *hasResultType = false; break;
+    case OpSelectionMerge: *hasResult = false; *hasResultType = false; break;
+    case OpLabel: *hasResult = true; *hasResultType = false; break;
+    case OpBranch: *hasResult = false; *hasResultType = false; break;
+    case OpBranchConditional: *hasResult = false; *hasResultType = false; break;
+    case OpSwitch: *hasResult = false; *hasResultType = false; break;
+    case OpKill: *hasResult = false; *hasResultType = false; break;
+    case OpReturn: *hasResult = false; *hasResultType = false; break;
+    case OpReturnValue: *hasResult = false; *hasResultType = false; break;
+    case OpUnreachable: *hasResult = false; *hasResultType = false; break;
+    case OpLifetimeStart: *hasResult = false; *hasResultType = false; break;
+    case OpLifetimeStop: *hasResult = false; *hasResultType = false; break;
+    case OpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break;
+    case OpGroupWaitEvents: *hasResult = false; *hasResultType = false; break;
+    case OpGroupAll: *hasResult = true; *hasResultType = true; break;
+    case OpGroupAny: *hasResult = true; *hasResultType = true; break;
+    case OpGroupBroadcast: *hasResult = true; *hasResultType = true; break;
+    case OpGroupIAdd: *hasResult = true; *hasResultType = true; break;
+    case OpGroupFAdd: *hasResult = true; *hasResultType = true; break;
+    case OpGroupFMin: *hasResult = true; *hasResultType = true; break;
+    case OpGroupUMin: *hasResult = true; *hasResultType = true; break;
+    case OpGroupSMin: *hasResult = true; *hasResultType = true; break;
+    case OpGroupFMax: *hasResult = true; *hasResultType = true; break;
+    case OpGroupUMax: *hasResult = true; *hasResultType = true; break;
+    case OpGroupSMax: *hasResult = true; *hasResultType = true; break;
+    case OpReadPipe: *hasResult = true; *hasResultType = true; break;
+    case OpWritePipe: *hasResult = true; *hasResultType = true; break;
+    case OpReservedReadPipe: *hasResult = true; *hasResultType = true; break;
+    case OpReservedWritePipe: *hasResult = true; *hasResultType = true; break;
+    case OpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
+    case OpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
+    case OpCommitReadPipe: *hasResult = false; *hasResultType = false; break;
+    case OpCommitWritePipe: *hasResult = false; *hasResultType = false; break;
+    case OpIsValidReserveId: *hasResult = true; *hasResultType = true; break;
+    case OpGetNumPipePackets: *hasResult = true; *hasResultType = true; break;
+    case OpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break;
+    case OpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
+    case OpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
+    case OpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break;
+    case OpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break;
+    case OpEnqueueMarker: *hasResult = true; *hasResultType = true; break;
+    case OpEnqueueKernel: *hasResult = true; *hasResultType = true; break;
+    case OpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break;
+    case OpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break;
+    case OpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break;
+    case OpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break;
+    case OpRetainEvent: *hasResult = false; *hasResultType = false; break;
+    case OpReleaseEvent: *hasResult = false; *hasResultType = false; break;
+    case OpCreateUserEvent: *hasResult = true; *hasResultType = true; break;
+    case OpIsValidEvent: *hasResult = true; *hasResultType = true; break;
+    case OpSetUserEventStatus: *hasResult = false; *hasResultType = false; break;
+    case OpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break;
+    case OpGetDefaultQueue: *hasResult = true; *hasResultType = true; break;
+    case OpBuildNDRange: *hasResult = true; *hasResultType = true; break;
+    case OpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
+    case OpImageSparseFetch: *hasResult = true; *hasResultType = true; break;
+    case OpImageSparseGather: *hasResult = true; *hasResultType = true; break;
+    case OpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break;
+    case OpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break;
+    case OpNoLine: *hasResult = false; *hasResultType = false; break;
+    case OpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break;
+    case OpAtomicFlagClear: *hasResult = false; *hasResultType = false; break;
+    case OpImageSparseRead: *hasResult = true; *hasResultType = true; break;
+    case OpSizeOf: *hasResult = true; *hasResultType = true; break;
+    case OpTypePipeStorage: *hasResult = true; *hasResultType = false; break;
+    case OpConstantPipeStorage: *hasResult = true; *hasResultType = true; break;
+    case OpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break;
+    case OpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break;
+    case OpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break;
+    case OpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break;
+    case OpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break;
+    case OpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break;
+    case OpModuleProcessed: *hasResult = false; *hasResultType = false; break;
+    case OpExecutionModeId: *hasResult = false; *hasResultType = false; break;
+    case OpDecorateId: *hasResult = false; *hasResultType = false; break;
+    case OpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break;
+    case OpCopyLogical: *hasResult = true; *hasResultType = true; break;
+    case OpPtrEqual: *hasResult = true; *hasResultType = true; break;
+    case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break;
+    case OpPtrDiff: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break;
+    case OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+    case OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+    case OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+    case OpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+    case OpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+    case OpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+    case OpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+    case OpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+    case OpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break;
+    case OpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break;
+    case OpReadClockKHR: *hasResult = true; *hasResultType = true; break;
+    case OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break;
+    case OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break;
+    case OpReportIntersectionNV: *hasResult = true; *hasResultType = true; break;
+    case OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;
+    case OpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
+    case OpTraceNV: *hasResult = false; *hasResultType = false; break;
+    case OpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break;
+    case OpTypeRayQueryProvisionalKHR: *hasResult = true; *hasResultType = false; break;
+    case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
+    case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
+    case OpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break;
+    case OpRayQueryConfirmIntersectionKHR: *hasResult = false; *hasResultType = false; break;
+    case OpRayQueryProceedKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetIntersectionTypeKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetIntersectionInstanceCustomIndexKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetIntersectionInstanceIdKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetIntersectionGeometryIndexKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetIntersectionPrimitiveIndexKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetIntersectionBarycentricsKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetIntersectionFrontFaceKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetIntersectionObjectRayDirectionKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetIntersectionObjectRayOriginKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetWorldRayDirectionKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break;
+    case OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
+    case OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break;
+    case OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break;
+    case OpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break;
+    case OpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break;
+    case OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
+    case OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
+    case OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
+    case OpDemoteToHelperInvocationEXT: *hasResult = false; *hasResultType = false; break;
+    case OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
+    case OpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
+    case OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
+    case OpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpAbsISubINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpIAddSatINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpUAddSatINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpIAverageINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpUAverageINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpISubSatINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
+    case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
+    case OpDecorateString: *hasResult = false; *hasResultType = false; break;
+    case OpMemberDecorateString: *hasResult = false; *hasResultType = false; break;
+    case OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break;
+    case OpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break;
+    case OpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break;
+    case OpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break;
+    case OpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break;
+    case OpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break;
+    case OpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break;
+    case OpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
+    case OpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
+    case OpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
+    case OpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
+    case OpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break;
+    case OpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break;
+    case OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break;
+    }
+}
+#endif /* SPV_ENABLE_UTILITY_CODE */
+
 // Overload operator| for mask bit combining
 
 inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }
@@ -1206,8 +2106,8 @@
 inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); }
 inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); }
 inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); }
+inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); }
 
 }  // end namespace spv
 
 #endif  // #ifndef spirv_HPP
-
diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h
index 8c2d0b6..6523035 100755
--- a/SPIRV/spvIR.h
+++ b/SPIRV/spvIR.h
@@ -83,6 +83,7 @@
 struct IdImmediate {
     bool isId;      // true if word is an Id, false if word is an immediate
     unsigned word;
+    IdImmediate(bool i, unsigned w) : isId(i), word(w) {}
 };
 
 //
@@ -225,6 +226,35 @@
         return nullptr;
     }
 
+    // Change this block into a canonical dead merge block.  Delete instructions
+    // as necessary.  A canonical dead merge block has only an OpLabel and an
+    // OpUnreachable.
+    void rewriteAsCanonicalUnreachableMerge() {
+        assert(localVariables.empty());
+        // Delete all instructions except for the label.
+        assert(instructions.size() > 0);
+        instructions.resize(1);
+        successors.clear();
+        addInstruction(std::unique_ptr<Instruction>(new Instruction(OpUnreachable)));
+    }
+    // Change this block into a canonical dead continue target branching to the
+    // given header ID.  Delete instructions as necessary.  A canonical dead continue
+    // target has only an OpLabel and an unconditional branch back to the corresponding
+    // header.
+    void rewriteAsCanonicalUnreachableContinue(Block* header) {
+        assert(localVariables.empty());
+        // Delete all instructions except for the label.
+        assert(instructions.size() > 0);
+        instructions.resize(1);
+        successors.clear();
+        // Add OpBranch back to the header.
+        assert(header != nullptr);
+        Instruction* branch = new Instruction(OpBranch);
+        branch->addIdOperand(header->getId());
+        addInstruction(std::unique_ptr<Instruction>(branch));
+        successors.push_back(header);
+    }
+
     bool isTerminated() const
     {
         switch (instructions.back()->getOpCode()) {
@@ -234,6 +264,7 @@
         case OpKill:
         case OpReturn:
         case OpReturnValue:
+        case OpUnreachable:
             return true;
         default:
             return false;
@@ -267,10 +298,24 @@
     bool unreachable;
 };
 
+// The different reasons for reaching a block in the inReadableOrder traversal.
+enum ReachReason {
+    // Reachable from the entry block via transfers of control, i.e. branches.
+    ReachViaControlFlow = 0,
+    // A continue target that is not reachable via control flow.
+    ReachDeadContinue,
+    // A merge block that is not reachable via control flow.
+    ReachDeadMerge
+};
+
 // Traverses the control-flow graph rooted at root in an order suited for
 // readable code generation.  Invokes callback at every node in the traversal
-// order.
-void inReadableOrder(Block* root, std::function<void(Block*)> callback);
+// order.  The callback arguments are:
+// - the block,
+// - the reason we reached the block,
+// - if the reason was that block is an unreachable continue or unreachable merge block
+//   then the last parameter is the corresponding header block.
+void inReadableOrder(Block* root, std::function<void(Block*, ReachReason, Block* header)> callback);
 
 //
 // SPIR-V IR Function.
@@ -320,7 +365,7 @@
             parameterInstructions[p]->dump(out);
 
         // Blocks
-        inReadableOrder(blocks[0], [&out](const Block* b) { b->dump(out); });
+        inReadableOrder(blocks[0], [&out](const Block* b, ReachReason, Block*) { b->dump(out); });
         Instruction end(0, 0, OpFunctionEnd);
         end.dump(out);
     }
@@ -435,6 +480,6 @@
         parent.getParent().mapInstruction(raw_instruction);
 }
 
-};  // end spv namespace
+}  // end spv namespace
 
 #endif // spvIR_H
diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt
index 5cea53d..591ac34 100644
--- a/StandAlone/CMakeLists.txt
+++ b/StandAlone/CMakeLists.txt
@@ -1,28 +1,29 @@
 add_library(glslang-default-resource-limits
-            ${CMAKE_CURRENT_SOURCE_DIR}/ResourceLimits.cpp)
+            ${CMAKE_CURRENT_SOURCE_DIR}/ResourceLimits.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/resource_limits_c.cpp)
 set_property(TARGET glslang-default-resource-limits PROPERTY FOLDER glslang)
 set_property(TARGET glslang-default-resource-limits PROPERTY POSITION_INDEPENDENT_CODE ON)
 
 target_include_directories(glslang-default-resource-limits
-                           PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
-                           PUBLIC ${PROJECT_SOURCE_DIR})
+                           PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+                           PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>)
+
 
 set(SOURCES StandAlone.cpp DirStackFileIncluder.h)
-set(REMAPPER_SOURCES spirv-remap.cpp)
 
 add_executable(glslangValidator ${SOURCES})
-add_executable(spirv-remap ${REMAPPER_SOURCES})
 set_property(TARGET glslangValidator PROPERTY FOLDER tools)
-set_property(TARGET spirv-remap PROPERTY FOLDER tools)
 glslang_set_link_args(glslangValidator)
-glslang_set_link_args(spirv-remap)
 
 set(LIBRARIES
     glslang
     SPIRV
-    SPVRemapper
     glslang-default-resource-limits)
 
+if(ENABLE_SPVREMAPPER)
+    set(LIBRARIES ${LIBRARIES} SPVRemapper)
+endif()
+
 if(WIN32)
     set(LIBRARIES ${LIBRARIES} psapi)
 elseif(UNIX)
@@ -32,22 +33,36 @@
 endif(WIN32)
 
 target_link_libraries(glslangValidator ${LIBRARIES})
-target_link_libraries(spirv-remap ${LIBRARIES})
-target_include_directories(glslangValidator PUBLIC ../External)
+target_include_directories(glslangValidator PUBLIC
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>
+    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
+
+if(ENABLE_SPVREMAPPER)
+    set(REMAPPER_SOURCES spirv-remap.cpp)
+    add_executable(spirv-remap ${REMAPPER_SOURCES})
+    set_property(TARGET spirv-remap PROPERTY FOLDER tools)
+    glslang_set_link_args(spirv-remap)
+    target_link_libraries(spirv-remap ${LIBRARIES})
+endif()
 
 if(WIN32)
     source_group("Source" FILES ${SOURCES})
 endif(WIN32)
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS glslangValidator
+    install(TARGETS glslangValidator EXPORT glslangValidatorTargets
             RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+    install(EXPORT glslangValidatorTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
 
-    install(TARGETS spirv-remap
+    if(ENABLE_SPVREMAPPER)
+        install(TARGETS spirv-remap EXPORT spirv-remapTargets
             RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
-            
+        install(EXPORT spirv-remapTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+    endif()
+
     if(BUILD_SHARED_LIBS)
-        install(TARGETS glslang-default-resource-limits
+        install(TARGETS glslang-default-resource-limits EXPORT glslang-default-resource-limitsTargets
                 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+        install(EXPORT glslang-default-resource-limitsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
     endif()
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/StandAlone/ResourceLimits.cpp b/StandAlone/ResourceLimits.cpp
index 66e79af..028caa6 100644
--- a/StandAlone/ResourceLimits.cpp
+++ b/StandAlone/ResourceLimits.cpp
@@ -234,7 +234,6 @@
             << "MaxCullDistances "                          << DefaultTBuiltInResource.maxCullDistances << "\n"
             << "MaxCombinedClipAndCullDistances "           << DefaultTBuiltInResource.maxCombinedClipAndCullDistances << "\n"
             << "MaxSamples "                                << DefaultTBuiltInResource.maxSamples << "\n"
-#ifdef NV_EXTENSIONS
             << "MaxMeshOutputVerticesNV "                   << DefaultTBuiltInResource.maxMeshOutputVerticesNV << "\n"
             << "MaxMeshOutputPrimitivesNV "                 << DefaultTBuiltInResource.maxMeshOutputPrimitivesNV << "\n"
             << "MaxMeshWorkGroupSizeX_NV "                  << DefaultTBuiltInResource.maxMeshWorkGroupSizeX_NV << "\n"
@@ -244,7 +243,6 @@
             << "MaxTaskWorkGroupSizeY_NV "                  << DefaultTBuiltInResource.maxTaskWorkGroupSizeY_NV << "\n"
             << "MaxTaskWorkGroupSizeZ_NV "                  << DefaultTBuiltInResource.maxTaskWorkGroupSizeZ_NV << "\n"
             << "MaxMeshViewCountNV "                        << DefaultTBuiltInResource.maxMeshViewCountNV << "\n"
-#endif
             << "nonInductiveForLoops "                      << DefaultTBuiltInResource.limits.nonInductiveForLoops << "\n"
             << "whileLoops "                                << DefaultTBuiltInResource.limits.whileLoops << "\n"
             << "doWhileLoops "                              << DefaultTBuiltInResource.limits.doWhileLoops << "\n"
@@ -451,7 +449,6 @@
             resources->maxCombinedClipAndCullDistances = value;
         else if (tokenStr == "MaxSamples")
             resources->maxSamples = value;
-#ifdef NV_EXTENSIONS
         else if (tokenStr == "MaxMeshOutputVerticesNV")
             resources->maxMeshOutputVerticesNV = value;
         else if (tokenStr == "MaxMeshOutputPrimitivesNV")
@@ -470,7 +467,6 @@
             resources->maxTaskWorkGroupSizeZ_NV = value;
         else if (tokenStr == "MaxMeshViewCountNV")
             resources->maxMeshViewCountNV = value;
-#endif
         else if (tokenStr == "nonInductiveForLoops")
             resources->limits.nonInductiveForLoops = (value != 0);
         else if (tokenStr == "whileLoops")
diff --git a/StandAlone/ResourceLimits.h b/StandAlone/ResourceLimits.h
index 9c3eb3e..736248e 100644
--- a/StandAlone/ResourceLimits.h
+++ b/StandAlone/ResourceLimits.h
@@ -37,7 +37,7 @@
 
 #include <string>
 
-#include "glslang/Include/ResourceLimits.h"
+#include "../glslang/Include/ResourceLimits.h"
 
 namespace glslang {
 
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index 42a46ce..a7ce53d 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2013-2016 LunarG, Inc.
+// Copyright (C) 2016-2020 Google, Inc.
 //
 // All rights reserved.
 //
@@ -104,6 +105,7 @@
 bool targetHlslFunctionality1 = false;
 bool SpvToolsDisassembler = false;
 bool SpvToolsValidate = false;
+bool NaNClamp = false;
 
 //
 // Return codes from main/exit().
@@ -145,13 +147,16 @@
 {
     if (ConfigFile.size() == 0)
         Resources = glslang::DefaultTBuiltInResource;
+#ifndef GLSLANG_WEB
     else {
         char* configString = ReadFileData(ConfigFile.c_str());
         glslang::DecodeResourceLimits(&Resources,  configString);
         FreeFileData(configString);
     }
+#endif
 }
 
+int ReflectOptions = EShReflectionDefault;
 int Options = 0;
 const char* ExecutableName = nullptr;
 const char* binaryFileName = nullptr;
@@ -161,6 +166,7 @@
 const char* variableName = nullptr;
 bool HlslEnable16BitTypes = false;
 bool HlslDX9compatible = false;
+bool DumpBuiltinSymbols = false;
 std::vector<std::string> IncludeDirectoryList;
 
 // Source environment
@@ -199,7 +205,7 @@
         text.append("#define ");
         fixLine(def);
 
-        Processes.push_back("D");
+        Processes.push_back("define-macro ");
         Processes.back().append(def);
 
         // The first "=" needs to turn into a space
@@ -217,7 +223,7 @@
         text.append("#undef ");
         fixLine(undef);
 
-        Processes.push_back("U");
+        Processes.push_back("undef-macro ");
         Processes.back().append(undef);
 
         text.append(undef);
@@ -236,6 +242,7 @@
     std::string text;  // contents of preamble
 };
 
+// Track the user's #define and #undef from the command line.
 TPreamble UserPreamble;
 
 //
@@ -252,16 +259,14 @@
         case EShLangGeometry:        name = "geom.spv";    break;
         case EShLangFragment:        name = "frag.spv";    break;
         case EShLangCompute:         name = "comp.spv";    break;
-#ifdef NV_EXTENSIONS
-        case EShLangRayGenNV:        name = "rgen.spv";    break;
-        case EShLangIntersectNV:     name = "rint.spv";    break;
-        case EShLangAnyHitNV:        name = "rahit.spv";   break;
-        case EShLangClosestHitNV:    name = "rchit.spv";   break;
-        case EShLangMissNV:          name = "rmiss.spv";   break;
-        case EShLangCallableNV:      name = "rcall.spv";   break;
+        case EShLangRayGen:          name = "rgen.spv";    break;
+        case EShLangIntersect:       name = "rint.spv";    break;
+        case EShLangAnyHit:          name = "rahit.spv";   break;
+        case EShLangClosestHit:      name = "rchit.spv";   break;
+        case EShLangMiss:            name = "rmiss.spv";   break;
+        case EShLangCallable:        name = "rcall.spv";   break;
         case EShLangMeshNV:          name = "mesh.spv";    break;
         case EShLangTaskNV:          name = "task.spv";    break;
-#endif
         default:                     name = "unknown";     break;
         }
     } else
@@ -289,9 +294,12 @@
 //
 // Give error and exit with failure code.
 //
-void Error(const char* message)
+void Error(const char* message, const char* detail = nullptr)
 {
-    fprintf(stderr, "%s: Error %s (use -h for usage)\n", ExecutableName, message);
+    fprintf(stderr, "%s: Error: ", ExecutableName);
+    if (detail != nullptr)
+        fprintf(stderr, "%s: ", detail);
+    fprintf(stderr, "%s (use -h for usage)\n", message);
     exit(EFailUsage);
 }
 
@@ -479,7 +487,7 @@
                         Options |= EOptionAutoMapLocations;
                     } else if (lowerword == "uniform-base") {
                         if (argc <= 1)
-                            Error("no <base> provided for --uniform-base");
+                            Error("no <base> provided", lowerword.c_str());
                         uniformBase = ::strtol(argv[1], NULL, 10);
                         bumpArg();
                         break;
@@ -490,13 +498,23 @@
                             else if (strcmp(argv[1], "opengl100") == 0)
                                 setOpenGlSpv();
                             else
-                                Error("--client expects vulkan100 or opengl100");
-                        }
+                                Error("expects vulkan100 or opengl100", lowerword.c_str());
+                        } else
+                            Error("expects vulkan100 or opengl100", lowerword.c_str());
                         bumpArg();
+                    } else if (lowerword == "define-macro" ||
+                               lowerword == "d") {
+                        if (argc > 1)
+                            UserPreamble.addDef(argv[1]);
+                        else
+                            Error("expects <name[=def]>", argv[0]);
+                        bumpArg();
+                    } else if (lowerword == "dump-builtin-symbols") {
+                        DumpBuiltinSymbols = true;
                     } else if (lowerword == "entry-point") {
                         entryPointName = argv[1];
                         if (argc <= 1)
-                            Error("no <name> provided for --entry-point");
+                            Error("no <name> provided", lowerword.c_str());
                         bumpArg();
                     } else if (lowerword == "flatten-uniform-arrays" || // synonyms
                                lowerword == "flatten-uniform-array"  ||
@@ -518,11 +536,25 @@
                     } else if (lowerword == "keep-uncalled" || // synonyms
                                lowerword == "ku") {
                         Options |= EOptionKeepUncalled;
+                    } else if (lowerword == "nan-clamp") {
+                        NaNClamp = true;
                     } else if (lowerword == "no-storage-format" || // synonyms
                                lowerword == "nsf") {
                         Options |= EOptionNoStorageFormat;
                     } else if (lowerword == "relaxed-errors") {
                         Options |= EOptionRelaxedErrors;
+                    } else if (lowerword == "reflect-strict-array-suffix") {
+                        ReflectOptions |= EShReflectionStrictArraySuffix;
+                    } else if (lowerword == "reflect-basic-array-suffix") {
+                        ReflectOptions |= EShReflectionBasicArraySuffix;
+                    } else if (lowerword == "reflect-intermediate-io") {
+                        ReflectOptions |= EShReflectionIntermediateIO;
+                    } else if (lowerword == "reflect-separate-buffers") {
+                        ReflectOptions |= EShReflectionSeparateBuffers;
+                    } else if (lowerword == "reflect-all-block-variables") {
+                        ReflectOptions |= EShReflectionAllBlockVariables;
+                    } else if (lowerword == "reflect-unwrap-io-blocks") {
+                        ReflectOptions |= EShReflectionUnwrapIOBlocks;
                     } else if (lowerword == "resource-set-bindings" ||  // synonyms
                                lowerword == "resource-set-binding"  ||
                                lowerword == "rsb") {
@@ -557,7 +589,7 @@
                     } else if (lowerword == "source-entrypoint" || // synonyms
                                lowerword == "sep") {
                         if (argc <= 1)
-                            Error("no <entry-point> provided for --source-entrypoint");
+                            Error("no <entry-point> provided", lowerword.c_str());
                         sourceEntryPointName = argv[1];
                         bumpArg();
                         break;
@@ -578,6 +610,9 @@
                             } else if (strcmp(argv[1], "vulkan1.1") == 0) {
                                 setVulkanSpv();
                                 ClientVersion = glslang::EShTargetVulkan_1_1;
+                            } else if (strcmp(argv[1], "vulkan1.2") == 0) {
+                                setVulkanSpv();
+                                ClientVersion = glslang::EShTargetVulkan_1_2;
                             } else if (strcmp(argv[1], "opengl") == 0) {
                                 setOpenGlSpv();
                                 ClientVersion = glslang::EShTargetOpenGL_450;
@@ -596,22 +631,36 @@
                             } 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, vulkan1.2, opengl,\n"
+                                      "spirv1.0, spirv1.1, spirv1.2, spirv1.3, spirv1.4, or spirv1.5");
                         }
                         bumpArg();
+                    } else if (lowerword == "undef-macro" ||
+                               lowerword == "u") {
+                        if (argc > 1)
+                            UserPreamble.addUndef(argv[1]);
+                        else
+                            Error("expects <name>", argv[0]);
+                        bumpArg();
                     } else if (lowerword == "variable-name" || // synonyms
                                lowerword == "vn") {
                         Options |= EOptionOutputHexadecimal;
                         if (argc <= 1)
-                            Error("no <C-variable-name> provided for --variable-name");
+                            Error("no <C-variable-name> provided", lowerword.c_str());
                         variableName = argv[1];
                         bumpArg();
                         break;
                     } else if (lowerword == "version") {
                         Options |= EOptionDumpVersions;
-                    } else {
+                    } else if (lowerword == "help") {
                         usage();
+                        break;
+                    } else {
+                        Error("unrecognized command-line option", argv[0]);
                     }
                 }
                 break;
@@ -622,7 +671,7 @@
                 if (argv[0][2] == 0)
                     Options |= EOptionReadHlsl;
                 else
-                    UserPreamble.addDef(getStringOperand("-D<macro> macro name"));
+                    UserPreamble.addDef(getStringOperand("-D<name[=def]>"));
                 break;
             case 'u':
                 uniformLocationOverrides.push_back(getUniformOverride());
@@ -665,7 +714,7 @@
                 bumpArg();
                 break;
             case 'U':
-                UserPreamble.addUndef(getStringOperand("-U<macro>: macro name"));
+                UserPreamble.addUndef(getStringOperand("-U<name>"));
                 break;
             case 'V':
                 setVulkanSpv();
@@ -737,7 +786,7 @@
                 Options |= EOptionOutputHexadecimal;
                 break;
             default:
-                usage();
+                Error("unrecognized command-line option", argv[0]);
                 break;
             }
         } else {
@@ -753,8 +802,17 @@
         Error("must provide -S when --stdin is given");
 
     // Make sure that -E is not specified alongside linking (which includes SPV generation)
-    if ((Options & EOptionOutputPreprocessed) && (Options & EOptionLinkProgram))
-        Error("can't use -E when linking is selected");
+    // Or things that require linking
+    if (Options & EOptionOutputPreprocessed) {
+        if (Options & EOptionLinkProgram)
+            Error("can't use -E when linking is selected");
+        if (Options & EOptionDumpReflection)
+            Error("reflection requires linking, which can't be used when -E when is selected");
+    }
+
+    // reflection requires linking
+    if ((Options & EOptionDumpReflection) && !(Options & EOptionLinkProgram))
+        Error("reflection requires -l for linking");
 
     // -o or -x makes no sense if there is no target binary
     if (binaryFileName && (Options & EOptionSpv) == 0)
@@ -775,6 +833,10 @@
             TargetLanguage = glslang::EShTargetSpv;
             TargetVersion = glslang::EShTargetSpv_1_3;
             break;
+        case glslang::EShTargetVulkan_1_2:
+            TargetLanguage = glslang::EShTargetSpv;
+            TargetVersion = glslang::EShTargetSpv_1_5;
+            break;
         case glslang::EShTargetOpenGL_450:
             TargetLanguage = glslang::EShTargetSpv;
             TargetVersion = glslang::EShTargetSpv_1_0;
@@ -820,6 +882,8 @@
         messages = (EShMessages)(messages | EShMsgHlslLegalization);
     if (HlslDX9compatible)
         messages = (EShMessages)(messages | EShMsgHlslDX9Compatible);
+    if (DumpBuiltinSymbols)
+        messages = (EShMessages)(messages | EShMsgBuiltinSymbolTable);
 }
 
 //
@@ -947,42 +1011,47 @@
             shader->setPreamble(UserPreamble.get());
         shader->addProcesses(Processes);
 
+#ifndef GLSLANG_WEB
         // Set IO mapper binding shift values
         for (int r = 0; r < glslang::EResCount; ++r) {
             const glslang::TResourceType res = glslang::TResourceType(r);
 
             // Set base bindings
             shader->setShiftBinding(res, baseBinding[res][compUnit.stage]);
-            
+
             // Set bindings for particular resource sets
             // TODO: use a range based for loop here, when available in all environments.
             for (auto i = baseBindingForSet[res][compUnit.stage].begin();
                  i != baseBindingForSet[res][compUnit.stage].end(); ++i)
                 shader->setShiftBindingForSet(res, i->second, i->first);
         }
-
-        shader->setFlattenUniformArrays((Options & EOptionFlattenUniformArrays) != 0);
         shader->setNoStorageFormat((Options & EOptionNoStorageFormat) != 0);
         shader->setResourceSetBinding(baseResourceSetBinding[compUnit.stage]);
 
-        if (Options & EOptionHlslIoMapping)
-            shader->setHlslIoMapping(true);
-
         if (Options & EOptionAutoMapBindings)
             shader->setAutoMapBindings(true);
 
         if (Options & EOptionAutoMapLocations)
             shader->setAutoMapLocations(true);
 
-        if (Options & EOptionInvertY)
-            shader->setInvertY(true);
-
         for (auto& uniOverride : uniformLocationOverrides) {
             shader->addUniformLocationOverride(uniOverride.first.c_str(),
                                                uniOverride.second);
         }
 
         shader->setUniformLocationBase(uniformBase);
+#endif
+
+        shader->setNanMinMaxClamp(NaNClamp);
+
+#ifdef ENABLE_HLSL
+        shader->setFlattenUniformArrays((Options & EOptionFlattenUniformArrays) != 0);
+        if (Options & EOptionHlslIoMapping)
+            shader->setHlslIoMapping(true);
+#endif
+
+        if (Options & EOptionInvertY)
+            shader->setInvertY(true);
 
         // Set up the environment, some subsettings take precedence over earlier
         // ways of setting things.
@@ -992,8 +1061,10 @@
                                 compUnit.stage, Client, ClientInputSemanticsVersion);
             shader->setEnvClient(Client, ClientVersion);
             shader->setEnvTarget(TargetLanguage, TargetVersion);
+#ifdef ENABLE_HLSL
             if (targetHlslFunctionality1)
                 shader->setEnvTargetHlslFunctionality1();
+#endif
         }
 
         shaders.push_back(shader);
@@ -1003,6 +1074,7 @@
         DirStackFileIncluder includer;
         std::for_each(IncludeDirectoryList.rbegin(), IncludeDirectoryList.rend(), [&includer](const std::string& dir) {
             includer.pushExternalLocalDirectory(dir); });
+#ifndef GLSLANG_WEB
         if (Options & EOptionOutputPreprocessed) {
             std::string str;
             if (shader->preprocess(&Resources, defaultVersion, ENoProfile, false, false, messages, &str, includer)) {
@@ -1014,6 +1086,7 @@
             StderrIfNonEmpty(shader->getInfoDebugLog());
             continue;
         }
+#endif
 
         if (! shader->parse(&Resources, defaultVersion, false, messages, includer))
             CompileFailed = true;
@@ -1036,11 +1109,13 @@
     if (! (Options & EOptionOutputPreprocessed) && ! program.link(messages))
         LinkFailed = true;
 
+#ifndef GLSLANG_WEB
     // Map IO
     if (Options & EOptionSpv) {
         if (!program.mapIO())
             LinkFailed = true;
     }
+#endif
 
     // Report
     if (! (Options & EOptionSuppressInfolog) &&
@@ -1049,11 +1124,13 @@
         PutsIfNonEmpty(program.getInfoDebugLog());
     }
 
+#ifndef GLSLANG_WEB
     // Reflect
     if (Options & EOptionDumpReflection) {
-        program.buildReflection();
+        program.buildReflection(ReflectOptions);
         program.dumpReflection();
     }
+#endif
 
     // Dump SPIR-V
     if (Options & EOptionSpv) {
@@ -1063,7 +1140,6 @@
             for (int stage = 0; stage < EShLangCount; ++stage) {
                 if (program.getIntermediate((EShLanguage)stage)) {
                     std::vector<unsigned int> spirv;
-                    std::string warningsErrors;
                     spv::SpvBuildLogger logger;
                     glslang::SpvOptions spvOptions;
                     if (Options & EOptionDebug)
@@ -1083,8 +1159,10 @@
                         } else {
                             glslang::OutputSpvBin(spirv, GetBinaryName((EShLanguage)stage));
                         }
+#ifndef GLSLANG_WEB
                         if (!SpvToolsDisassembler && (Options & EOptionHumanReadableSpv))
                             spv::Disassemble(std::cout, spirv);
+#endif
                     }
                 }
             }
@@ -1172,11 +1250,13 @@
         workList.add(item.get());
     });
 
+#ifndef GLSLANG_WEB
     if (Options & EOptionDumpConfig) {
         printf("%s", glslang::GetDefaultTBuiltInResourceString().c_str());
         if (workList.empty())
             return ESuccess;
     }
+#endif
 
     if (Options & EOptionDumpBareVersion) {
         printf("%d.%d.%d\n",
@@ -1212,7 +1292,7 @@
     ProcessConfigFile();
 
     if ((Options & EOptionReadHlsl) && !((Options & EOptionOutputPreprocessed) || (Options & EOptionSpv)))
-        Error("ERROR: HLSL requires SPIR-V code generation (or preprocessing only)");
+        Error("HLSL requires SPIR-V code generation (or preprocessing only)");
 
     //
     // Two modes:
@@ -1348,24 +1428,22 @@
         return EShLangFragment;
     else if (stageName == "comp")
         return EShLangCompute;
-#ifdef NV_EXTENSIONS
     else if (stageName == "rgen")
-        return EShLangRayGenNV;
+        return EShLangRayGen;
     else if (stageName == "rint")
-        return EShLangIntersectNV;
+        return EShLangIntersect;
     else if (stageName == "rahit")
-        return EShLangAnyHitNV;
+        return EShLangAnyHit;
     else if (stageName == "rchit")
-        return EShLangClosestHitNV;
+        return EShLangClosestHit;
     else if (stageName == "rmiss")
-        return EShLangMissNV;
+        return EShLangMiss;
     else if (stageName == "rcall")
-        return EShLangCallableNV;
+        return EShLangCallable;
     else if (stageName == "mesh")
         return EShLangMeshNV;
     else if (stageName == "task")
         return EShLangTaskNV;
-#endif
 
     usage();
     return EShLangVertex;
@@ -1435,7 +1513,6 @@
            "    .geom   for a geometry shader\n"
            "    .frag   for a fragment shader\n"
            "    .comp   for a compute shader\n"
-#ifdef NV_EXTENSIONS
            "    .mesh   for a mesh shader\n"
            "    .task   for a task shader\n"
            "    .rgen    for a ray generation shader\n"
@@ -1444,15 +1521,14 @@
            "    .rchit   for a ray closest hit shader\n"
            "    .rmiss   for a ray miss shader\n"
            "    .rcall   for a ray callable shader\n"
-#endif
            "    .glsl   for .vert.glsl, .tesc.glsl, ..., .comp.glsl compound suffixes\n"
            "    .hlsl   for .vert.hlsl, .tesc.hlsl, ..., .comp.hlsl compound suffixes\n"
            "\n"
            "Options:\n"
            "  -C          cascading errors; risk crash from accumulation of error recoveries\n"
            "  -D          input is HLSL (this is the default when any suffix is .hlsl)\n"
-           "  -D<macro=def>\n"
-           "  -D<macro>   define a pre-processor macro\n"
+           "  -D<name[=def]> | --define-macro <name[=def]> | --D <name[=def]>\n"
+           "              define a pre-processor macro\n"
            "  -E          print pre-processed GLSL; cannot be used with -l;\n"
            "              errors will appear on stderr\n"
            "  -G[ver]     create SPIR-V binary, under OpenGL semantics; turns on -l;\n"
@@ -1468,7 +1544,8 @@
            "  -Os         optimizes SPIR-V to minimize size\n"
            "  -S <stage>  uses specified stage rather than parsing the file extension\n"
            "              choices for <stage> are vert, tesc, tese, geom, frag, or comp\n"
-           "  -U<macro>   undefine a pre-processor macro\n"
+           "  -U<name> | --undef-macro <name> | --U <name>\n"
+           "              undefine a pre-processor macro\n"
            "  -V[ver]     create SPIR-V binary, under Vulkan semantics; turns on -l;\n"
            "              default file name is <stage>.spv (-o overrides this)\n"
            "              'ver', when present, is the version of the input semantics,\n"
@@ -1490,7 +1567,7 @@
            "  -l          link all input files together to form a single module\n"
            "  -m          memory leak mode\n"
            "  -o <file>   save binary to <file>, requires a binary option (e.g., -V)\n"
-           "  -q          dump reflection query database\n"
+           "  -q          dump reflection query database; requires -l for linking\n"
            "  -r | --relaxed-errors"
            "              relaxed GLSL semantic error-checking mode\n"
            "  -s          silence syntax and semantic error reporting\n"
@@ -1507,6 +1584,7 @@
            "  --auto-map-locations | --aml      automatically locate input/output lacking\n"
            "                                    'location' (fragile, not cross stage)\n"
            "  --client {vulkan<ver>|opengl<ver>} see -V and -G\n"
+           "  --dump-builtin-symbols            prints builtin symbol table prior each compile\n"
            "  -dumpfullversion | -dumpversion   print bare major.minor.patchlevel\n"
            "  --flatten-uniform-arrays | --fua  flatten uniform texture/sampler arrays to\n"
            "                                    scalars\n"
@@ -1514,10 +1592,23 @@
            "                                    works independently of source language\n"
            "  --hlsl-iomap                      perform IO mapping in HLSL register space\n"
            "  --hlsl-enable-16bit-types         allow 16-bit types in SPIR-V for HLSL\n"
-           "  --hlsl-dx9-compatible             interprets sampler declarations as a texture/sampler combo like DirectX9 would."
+           "  --hlsl-dx9-compatible             interprets sampler declarations as a\n"
+           "                                    texture/sampler combo like DirectX9 would.\n"
            "  --invert-y | --iy                 invert position.Y output in vertex shader\n"
            "  --keep-uncalled | --ku            don't eliminate uncalled functions\n"
+           "  --nan-clamp                       favor non-NaN operand in min, max, and clamp\n"
            "  --no-storage-format | --nsf       use Unknown image format\n"
+           "  --reflect-strict-array-suffix     use strict array suffix rules when\n"
+           "                                    reflecting\n"
+           "  --reflect-basic-array-suffix      arrays of basic types will have trailing [0]\n"
+           "  --reflect-intermediate-io         reflection includes inputs/outputs of linked\n"
+           "                                    shaders rather than just vertex/fragment\n"
+           "  --reflect-separate-buffers        reflect buffer variables and blocks\n"
+           "                                    separately to uniforms\n"
+           "  --reflect-all-block-variables     reflect all variables in blocks, whether\n"
+           "                                    inactive or active\n"
+           "  --reflect-unwrap-io-blocks        unwrap input/output blocks the same as\n"
+           "                                    uniform blocks\n"
            "  --resource-set-binding [stage] name set binding\n"
            "                                    set descriptor set and binding for\n"
            "                                    individual resources\n"
@@ -1560,16 +1651,17 @@
            "  --sep                             synonym for --source-entrypoint\n"
            "  --stdin                           read from stdin instead of from a file;\n"
            "                                    requires providing the shader stage using -S\n"
-           "  --target-env {vulkan1.0 | vulkan1.1 | opengl | \n"
-           "                spirv1.0 | spirv1.1 | spirv1.2 | spirv1.3}\n"
-           "                                    set execution environment that emitted code\n"
-           "                                    will execute in (versus source language\n"
-           "                                    semantics selected by --client) defaults:\n"
-           "                                     * 'vulkan1.0' under '--client vulkan<ver>'\n"
-           "                                     * 'opengl' under '--client opengl<ver>'\n"
-           "                                     * 'spirv1.0' under --target-env vulkan1.0\n"
-           "                                     * 'spirv1.3' under --target-env vulkan1.1\n"
-           "                                    multiple --targen-env can be specified.\n"
+           "  --target-env {vulkan1.0 | vulkan1.1 | vulkan1.2 | opengl | \n"
+           "                spirv1.0 | spirv1.1 | spirv1.2 | spirv1.3 | spirv1.4 | spirv1.5}\n"
+           "                                    Set the execution environment that the\n"
+           "                                    generated code will be executed in.\n"
+           "                                    Defaults to:\n"
+           "                                     * vulkan1.0 under --client vulkan<ver>\n"
+           "                                     * opengl    under --client opengl<ver>\n"
+           "                                     * spirv1.0  under --target-env vulkan1.0\n"
+           "                                     * spirv1.3  under --target-env vulkan1.1\n"
+           "                                     * spirv1.5  under --target-env vulkan1.2\n"
+           "                                    Multiple --target-env can be specified.\n"
            "  --variable-name <name>\n"
            "  --vn <name>                       creates a C header file that contains a\n"
            "                                    uint32_t array named <name>\n"
diff --git a/StandAlone/resource_limits_c.cpp b/StandAlone/resource_limits_c.cpp
new file mode 100644
index 0000000..a1f681c
--- /dev/null
+++ b/StandAlone/resource_limits_c.cpp
@@ -0,0 +1,65 @@
+/**
+BSD 2-Clause License
+
+Copyright (c) 2020, Travis Fort
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**/
+
+#include "resource_limits_c.h"
+#include "ResourceLimits.h"
+#include <stdlib.h>
+#include <string.h>
+#include <string>
+
+const glslang_resource_t* glslang_default_resource(void)
+{
+    return reinterpret_cast<const glslang_resource_t*>(&glslang::DefaultTBuiltInResource);
+}
+
+#if defined(__clang__) || defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#elif defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4996)
+#endif
+
+const char* glslang_default_resource_string()
+{
+    std::string cpp_str = glslang::GetDefaultTBuiltInResourceString();
+    char* c_str = (char*)malloc(cpp_str.length() + 1);
+    strcpy(c_str, cpp_str.c_str());
+    return c_str;
+}
+
+#if defined(__clang__) || defined(__GNUC__)
+#pragma GCC diagnostic pop
+#elif defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+void glslang_decode_resource_limits(glslang_resource_t* resources, char* config)
+{
+    glslang::DecodeResourceLimits(reinterpret_cast<TBuiltInResource*>(resources), config);
+}
diff --git a/StandAlone/resource_limits_c.h b/StandAlone/resource_limits_c.h
new file mode 100644
index 0000000..108fd5e
--- /dev/null
+++ b/StandAlone/resource_limits_c.h
@@ -0,0 +1,54 @@
+/**
+BSD 2-Clause License
+
+Copyright (c) 2020, Travis Fort
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**/
+
+#ifndef _STAND_ALONE_RESOURCE_LIMITS_C_INCLUDED_
+#define _STAND_ALONE_RESOURCE_LIMITS_C_INCLUDED_
+
+#include "../glslang/Include/glslang_c_interface.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// These are the default resources for TBuiltInResources, used for both
+//  - parsing this string for the case where the user didn't supply one,
+//  - dumping out a template for user construction of a config file.
+const glslang_resource_t* glslang_default_resource(void);
+
+// Returns the DefaultTBuiltInResource as a human-readable string.
+// NOTE: User is responsible for freeing this string.
+const char* glslang_default_resource_string();
+
+// Decodes the resource limits from |config| to |resources|.
+void glslang_decode_resource_limits(glslang_resource_t* resources, char* config);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // _STAND_ALONE_RESOURCE_LIMITS_C_INCLUDED_
diff --git a/StandAlone/spirv-remap.cpp b/StandAlone/spirv-remap.cpp
index 998f742..48878c3 100644
--- a/StandAlone/spirv-remap.cpp
+++ b/StandAlone/spirv-remap.cpp
@@ -227,7 +227,7 @@
                 }
             }
             else if (arg == "--version" || arg == "-V") {
-                std::cout << basename(argv[0]) << " version 0.97 " << __DATE__ << " " << __TIME__ << std::endl;
+                std::cout << basename(argv[0]) << " version 0.97" << std::endl;
                 exit(0);
             } else if (arg == "--input" || arg == "-i") {
                 // Collect input files
@@ -334,8 +334,6 @@
     if (outputDir.empty())
         usage(argv[0], "Output directory required");
 
-    std::string errmsg;
-
     // Main operations: read, remap, and write.
     execute(inputFile, outputDir, opts, verbosity);
 
diff --git a/Test/100.frag b/Test/100.frag
index 4f0c69b..0508ea9 100644
--- a/Test/100.frag
+++ b/Test/100.frag
@@ -219,6 +219,9 @@
 

 int init2 = gl_FrontFacing ? 1 : 2;

 

+#define A__B // error

+int a__b;    // error

+

 #pragma STDGL invariant(all)

 

 #line 3000

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

 {

    return gl_PrimitiveID;

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

+}

+

+in double type1;    // ERROR

+#extension GL_ARB_gpu_shader_fp64 : enable

+double type2;

+double type3 = 2.0;

+int absTest = sqrt(type3);

+double absTest2 = sqrt(type3);

+double absTest3 = sqrt(2);

+float dk = sqrt(11);

+

+#extension GL_ARB_shader_bit_encoding: enable

+

+float f;

+vec4 v4;

+ivec4 iv4a;

+uvec2 uv2c;

+void bitEncodingPass()

+{

+    int i = floatBitsToInt(f);

+    uvec4 uv11 = floatBitsToUint(v4);

+    vec4 v14 = intBitsToFloat(iv4a);

+    vec2 v15 = uintBitsToFloat(uv2c);

+}

+

+#extension GL_ARB_shader_bit_encoding: disable

+

+void bitEncodingFail()

+{

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

 }

diff --git a/Test/300samplerExternalYUV.frag b/Test/300samplerExternalYUV.frag
new file mode 100644
index 0000000..add2128
--- /dev/null
+++ b/Test/300samplerExternalYUV.frag
@@ -0,0 +1,38 @@
+#version 300 es

+

+#extension GL_EXT_YUV_target : enable

+

+uniform __samplerExternal2DY2YEXT sExt;

+precision mediump __samplerExternal2DY2YEXT;

+uniform __samplerExternal2DY2YEXT mediumExt;

+uniform highp __samplerExternal2DY2YEXT highExt;

+

+void main()

+{

+    texture2D(sExt, vec2(0.2));  // ERROR

+    texture2D(mediumExt, vec2(0.2));  // ERROR

+    texture2D(highExt, vec2(0.2));  // ERROR

+    texture2DProj(sExt, vec3(0.3));  // ERROR

+    texture2DProj(sExt, vec4(0.3));  // ERROR

+

+    int lod = 0;

+    highp float bias = 0.01;

+    textureSize(sExt, lod);

+    texture(sExt, vec2(0.2));

+    texture(sExt, vec2(0.2), bias);

+    textureProj(sExt, vec3(0.2));

+    textureProj(sExt, vec3(0.2), bias);

+    textureProj(sExt, vec4(0.2));

+    textureProj(sExt, vec4(0.2), bias);

+    texelFetch(sExt, ivec2(4), lod);

+

+    texture3D(sExt, vec3(0.3));  // ERROR

+    texture2DProjLod(sExt, vec3(0.3), 0.3);  // ERROR

+    texture(sExt, vec3(0.3));  // ERROR

+    textureProjLod(sExt, vec3(0.3), 0.3);  // ERROR

+}

+

+#extension GL_EXT_YUV_target : disable

+

+uniform __samplerExternal2DY2YEXT badExt;  // ERROR

+

diff --git a/Test/310.comp b/Test/310.comp
index 9ca8eaa..33ecbf0 100644
--- a/Test/310.comp
+++ b/Test/310.comp
@@ -106,9 +106,9 @@
 

 void passrc()

 {

-    passr(qualim1);

-    passr(qualim2);   // ERROR, drops restrict

-    passr(iimg2D);

+    passr(qualim1);   // ERROR, changing formats

+    passr(qualim2);   // ERROR, drops restrict, ERROR, changing formats

+    passr(iimg2D);    // ERROR, changing formats

 }

 

 highp layout(rg8i)     uniform readonly uimage2D i1bad; // ERROR, type mismatch

diff --git a/Test/310.frag b/Test/310.frag
old mode 100644
new mode 100755
index 6814e6c..8a11f67
--- a/Test/310.frag
+++ b/Test/310.frag
@@ -58,8 +58,8 @@
     b1 = mix(b2, b3, b);

     uvec3 um3 = mix(uvec3(i), uvec3(i), bvec3(b));

     ivec4 im4 = mix(ivec4(i), ivec4(i), bvec4(b));

+    1 << mix(1u, 1u, false);  // does not require folding
 }

-

 layout(binding=3) uniform sampler2D s1;

 layout(binding=3) uniform sampler2D s2; // ERROR: overlapping bindings?  Don't see that in the 310 spec.

 highp layout(binding=2) uniform writeonly image2D      i2D;

@@ -440,7 +440,7 @@
 #extension GL_EXT_device_group : enable
 #endif
 
-#ifdef GL_EXT_device_group
+#ifdef GL_EXT_multiview
 #extension GL_EXT_multiview : enable
 #endif
 
diff --git a/Test/310.inheritMemory.frag b/Test/310.inheritMemory.frag
new file mode 100644
index 0000000..bdf1283
--- /dev/null
+++ b/Test/310.inheritMemory.frag
@@ -0,0 +1,43 @@
+#version 310 es

+precision mediump float;

+

+struct S {

+    float buff[10];

+};

+

+layout(std430, binding=2) readonly buffer RoBuff {

+    float buff_ro[10];

+    S s_ro;

+} ro_buffer;

+

+layout(std430, binding=2) buffer Buff {

+    float buff[10];

+    S s;

+} non_ro_buffer;

+

+void non_ro_fun(float[10] buff) { }

+void non_ro_funf(float el) { }

+void non_ro_funS(S s) { }

+

+out vec4 fragColor;

+

+void main()

+{

+    S s;

+

+    non_ro_fun(s.buff);

+    non_ro_funf(s.buff[3]);

+    non_ro_funS(s);

+

+    non_ro_fun(non_ro_buffer.buff);

+    non_ro_fun(non_ro_buffer.s.buff);

+    non_ro_funf(non_ro_buffer.buff[3]);

+    non_ro_funf(non_ro_buffer.s.buff[3]);

+    non_ro_funS(non_ro_buffer.s);

+

+    non_ro_fun(ro_buffer.buff_ro);

+    non_ro_fun(ro_buffer.s_ro.buff);

+    non_ro_funf(ro_buffer.buff_ro[3]);

+    non_ro_funf(ro_buffer.s_ro.buff[3]);

+    non_ro_funS(ro_buffer.s_ro);

+}

diff --git a/Test/310.tesc b/Test/310.tesc
index 29c3932..7b8d0db 100644
--- a/Test/310.tesc
+++ b/Test/310.tesc
@@ -128,6 +128,21 @@
     d = fma(d, d, d);

 }

 

+void bbextBad()

+{

+    gl_BoundingBoxEXT;  // ERROR without GL_EXT_primitive_bounding_box

+    gl_BoundingBox;  // ERROR, version < 320

+}

+

+#extension GL_EXT_primitive_bounding_box : enable

+

+void bbext()

+{

+    gl_BoundingBoxEXT[0] = vec4(0.0);

+    gl_BoundingBoxEXT[1] = vec4(1.0);

+    gl_BoundingBoxEXT[2] = vec4(2.0);  // ERROR, overflow

+}

+

 void bbBad()

 {

     gl_BoundingBoxOES;  // ERROR without GL_OES_primitive_bounding_box 

diff --git a/Test/320.comp b/Test/320.comp
index c31b047..5b38995 100644
--- a/Test/320.comp
+++ b/Test/320.comp
@@ -1,5 +1,17 @@
 #version 320 es

+
+float fX;
+float fY;
 

 void main()
 {
+    dFdx(fX);
+    dFdy(fY);
+    fwidth(fX);
+    dFdxCoarse(fX);
+    dFdyCoarse(fY);
+    fwidthCoarse(fX);
+    dFdxFine(fX);
+    dFdyFine(fY);
+    fwidthFine(fX);
 }
diff --git a/Test/320.tesc b/Test/320.tesc
index 4fa20f6..fbe0463 100644
--- a/Test/320.tesc
+++ b/Test/320.tesc
@@ -118,9 +118,20 @@
 

 void bb()

 {

-    gl_BoundingBoxOES[0] = vec4(0.0);

-    gl_BoundingBoxOES[1] = vec4(1.0);

-    gl_BoundingBoxOES[2] = vec4(2.0);  // ERROR, overflow

+    gl_BoundingBoxEXT[0] = vec4(0.0); // ERROR without GL_EXT_primitive_bounding_box 

+    gl_BoundingBoxOES[0] = vec4(0.0); // ERROR without GL_OES_primitive_bounding_box 

+    gl_BoundingBox[0] = vec4(1.0);

+    gl_BoundingBox[1] = vec4(1.0);

+    gl_BoundingBox[2] = vec4(2.0);  // ERROR, overflow

+}

+

+#extension GL_EXT_primitive_bounding_box : enable

+#extension GL_OES_primitive_bounding_box : enable

+

+void bbext()

+{

+    gl_BoundingBoxEXT[1] = vec4(0.0);

+    gl_BoundingBoxOES[1] = vec4(0.0);

 }

 

 out patch badpatchBName {  // ERROR, array size required

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/400.tesc b/Test/400.tesc
index 415d7f7..6d609d5 100644
--- a/Test/400.tesc
+++ b/Test/400.tesc
@@ -114,7 +114,7 @@
 #extension GL_EXT_device_group : enable
 #endif
 
-#ifdef GL_EXT_device_group
+#ifdef GL_EXT_multiview
 #extension GL_EXT_multiview : enable
 #endif
 
diff --git a/Test/400.tese b/Test/400.tese
index c110a1c..a3d30fe 100644
--- a/Test/400.tese
+++ b/Test/400.tese
@@ -114,7 +114,7 @@
 #extension GL_EXT_device_group : enable
 #endif
 
-#ifdef GL_EXT_device_group
+#ifdef GL_EXT_multiview
 #extension GL_EXT_multiview : enable
 #endif
 
diff --git a/Test/410.vert b/Test/410.vert
index 0ecf476..1891a67 100644
--- a/Test/410.vert
+++ b/Test/410.vert
@@ -6,4 +6,5 @@
 
 void main()
 {
+    int test = gl_MaxFragmentUniformVectors;
 }
diff --git a/Test/420.frag b/Test/420.frag
index 1444758..51f35ff 100644
--- a/Test/420.frag
+++ b/Test/420.frag
@@ -12,3 +12,8 @@
 layout(depth_any) out float gl_FragDepth;  // ERROR, done after use
 
 layout(binding=0) uniform atomic_uint a[];
+
+uniform writeonly image2D      i2D;
+ivec2 iv2dim = imageSize(i2D); // ERROR: imageSize called without enabling GL_ARB_shader_image_size extension
+#extension GL_ARB_shader_image_size : enable
+ivec2 iv2dim1 = imageSize(i2D);
diff --git a/Test/420.vert b/Test/420.vert
index ab28140..c7ffa90 100644
--- a/Test/420.vert
+++ b/Test/420.vert
@@ -131,9 +131,9 @@
 
 void passrc()
 {
-    passr(qualim1);
-    passr(qualim2);   // ERROR, drops volatile
-    passr(iimg2D);
+    passr(qualim1);   // ERROR, changing formats
+    passr(qualim2);   // ERROR, drops volatile, ERROR, changing formats
+    passr(iimg2D);    // ERROR, changing formats
 }
 
 layout(rg8i) uniform uimage2D i1bad;     // ERROR, type mismatch
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/450.comp b/Test/450.comp
index fb2b56a..316674d 100644
--- a/Test/450.comp
+++ b/Test/450.comp
@@ -1,5 +1,8 @@
 #version 450 core

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

+

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

+

 void main()

 {

     shared float f;   // ERROR shared must be global

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

 {

     bool b1;

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

     b1 = anyInvocation(b1);

     b1 = allInvocations(b1);

     b1 = allInvocationsEqual(b1);

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

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

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

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

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

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

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

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

diff --git a/Test/baseLegalResults/hlsl.aliasOpaque.frag.out b/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
index 2e58bdd..887e4ac 100644
--- a/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
+++ b/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
@@ -1,6 +1,6 @@
 hlsl.aliasOpaque.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 87
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.flattenOpaque.frag.out b/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
index d334b7e..ad9e6c1 100644
--- a/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
+++ b/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
@@ -1,6 +1,6 @@
 hlsl.flattenOpaque.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 185
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
index 921cb96..6ed8da2 100644
--- a/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
+++ b/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
@@ -1,6 +1,6 @@
 hlsl.flattenOpaqueInit.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 134
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
index 39770f4..81ab5e6 100644
--- a/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
+++ b/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
@@ -1,6 +1,6 @@
 hlsl.flattenOpaqueInitMix.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 97
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.flattenSubset.frag.out b/Test/baseLegalResults/hlsl.flattenSubset.frag.out
index 4628479..562070d 100644
--- a/Test/baseLegalResults/hlsl.flattenSubset.frag.out
+++ b/Test/baseLegalResults/hlsl.flattenSubset.frag.out
@@ -1,6 +1,6 @@
 hlsl.flattenSubset.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.flattenSubset2.frag.out b/Test/baseLegalResults/hlsl.flattenSubset2.frag.out
index 0d7ab56..5cc280b 100644
--- a/Test/baseLegalResults/hlsl.flattenSubset2.frag.out
+++ b/Test/baseLegalResults/hlsl.flattenSubset2.frag.out
@@ -1,6 +1,6 @@
 hlsl.flattenSubset2.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out b/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out
index 27482b3..f4c9c5a 100644
--- a/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out
+++ b/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out
@@ -1,6 +1,6 @@
 hlsl.partialFlattenLocal.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 158
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out b/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out
index e54fb7e..7be570b 100644
--- a/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out
+++ b/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out
@@ -1,6 +1,6 @@
 hlsl.partialFlattenMixed.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/100.frag.out b/Test/baseResults/100.frag.out
index 5e702e8..8dd31e3 100644
--- a/Test/baseResults/100.frag.out
+++ b/Test/baseResults/100.frag.out
@@ -83,9 +83,11 @@
 ERROR: 0:194: '.' : cannot apply to an array: method
 ERROR: 0:194: 'a' : can't use function syntax on variable 
 ERROR: 0:214: 'non-constant global initializer (needs GL_EXT_shader_non_constant_global_initializers)' : not supported for this version or the enabled extensions 
+ERROR: 0:222: '#define' : names containing consecutive underscores are reserved, and an error if version < 300: A__B
+ERROR: 0:223: 'a__b' : identifiers containing consecutive underscores ("__") are reserved, and an error if version < 300 
 ERROR: 0:3000: '#error' : line of this error should be 3000  
 ERROR: 0:3002: '' :  syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
-ERROR: 77 compilation errors.  No code generated.
+ERROR: 79 compilation errors.  No code generated.
 
 
 Shader version: 100
@@ -421,6 +423,7 @@
 0:?       5.000000
 0:?     'init1' ( global mediump int)
 0:?     'init2' ( global mediump int)
+0:?     'a__b' ( global mediump int)
 
 
 Linked fragment stage:
@@ -573,4 +576,5 @@
 0:?       5.000000
 0:?     'init1' ( global mediump int)
 0:?     'init2' ( global mediump int)
+0:?     'a__b' ( global mediump int)
 
diff --git a/Test/baseResults/120.vert.out b/Test/baseResults/120.vert.out
index 5a91ed6..6c42b75 100644
--- a/Test/baseResults/120.vert.out
+++ b/Test/baseResults/120.vert.out
@@ -79,7 +79,8 @@
 ERROR: 0:195: 'gl_ModelViewMatrix' : identifiers starting with "gl_" are reserved 
 ERROR: 0:200: 'token pasting (##)' : not supported for this version or the enabled extensions 
 ERROR: 0:203: 'token pasting (##)' : not supported for this version or the enabled extensions 
-ERROR: 80 compilation errors.  No code generated.
+ERROR: 0:205: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 81 compilation errors.  No code generated.
 
 
 Shader version: 120
diff --git a/Test/baseResults/130.frag.out b/Test/baseResults/130.frag.out
index 81d055b..6115f69 100644
--- a/Test/baseResults/130.frag.out
+++ b/Test/baseResults/130.frag.out
@@ -7,33 +7,38 @@
 ERROR: 0:62: '<' :  wrong operand types: no operation '<' exists that takes a left-hand operand of type ' temp 3-component vector of bool' and a right operand of type ' temp 3-component vector of bool' (or there is no acceptable conversion)
 ERROR: 0:63: '>' :  wrong operand types: no operation '>' exists that takes a left-hand operand of type ' temp 3-component vector of uint' and a right operand of type ' temp 3-component vector of uint' (or there is no acceptable conversion)
 ERROR: 0:64: '>=' :  wrong operand types: no operation '>=' exists that takes a left-hand operand of type ' const 2-component vector of uint' and a right operand of type ' const 2-component vector of uint' (or there is no acceptable conversion)
-ERROR: 0:80: 'textureGatherOffset' : no matching overloaded function found 
-ERROR: 0:80: 'assign' :  cannot convert from ' const float' to ' temp 4-component vector of float'
-ERROR: 0:81: 'textureGatherOffset(...)' : not supported for this version or the enabled extensions 
-ERROR: 0:84: 'textureGatherOffset(...)' : not supported for this version or the enabled extensions 
-ERROR: 0:85: 'textureGatherOffset(...)' : not supported for this version or the enabled extensions 
-WARNING: 0:88: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
-ERROR: 0:120: 'line continuation' : not supported for this version or the enabled extensions 
-ERROR: 0:126: 'uniform block' : not supported for this version or the enabled extensions 
-ERROR: 0:140: 'length' : does not operate on this type:  temp bool
-ERROR: 0:140: 'boolb' : can't use function syntax on variable 
-ERROR: 0:141: 'length' : does not operate on this type:  temp float
-ERROR: 0:141: '' : function call, method, or subroutine call expected 
-ERROR: 0:141: '' : no matching overloaded function found 
-ERROR: 0:142: 'length' : incomplete method syntax 
-ERROR: 0:143: 'length' : method does not accept any arguments 
-ERROR: 0:146: 'gl_FogFragCoord' : identifiers starting with "gl_" are reserved 
-ERROR: 0:151: 'int' : must be qualified as flat in
-ERROR: 0:151: 'redeclaration' : cannot change the type of gl_FogFragCoord
-ERROR: 0:153: 'early_fragment_tests' : not supported for this version or the enabled extensions 
-ERROR: 0:154: 'image load store' : not supported for this version or the enabled extensions 
-ERROR: 0:154: 'iimage2D' : Reserved word. 
-ERROR: 0:169: 'early_fragment_tests' : can only apply to 'in' 
-ERROR: 28 compilation errors.  No code generated.
+ERROR: 0:65: 'gl_NumSamples' : required extension not requested: GL_ARB_sample_shading
+ERROR: 0:82: 'textureGatherOffset' : no matching overloaded function found 
+ERROR: 0:82: 'assign' :  cannot convert from ' const float' to ' temp 4-component vector of float'
+ERROR: 0:83: 'textureGatherOffset(...)' : not supported for this version or the enabled extensions 
+ERROR: 0:86: 'textureGatherOffset(...)' : not supported for this version or the enabled extensions 
+ERROR: 0:87: 'textureGatherOffset(...)' : not supported for this version or the enabled extensions 
+WARNING: 0:91: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
+ERROR: 0:123: 'line continuation' : not supported for this version or the enabled extensions 
+ERROR: 0:129: 'uniform block' : not supported for this version or the enabled extensions 
+ERROR: 0:143: 'length' : does not operate on this type:  temp bool
+ERROR: 0:143: 'boolb' : can't use function syntax on variable 
+ERROR: 0:144: 'length' : does not operate on this type:  temp float
+ERROR: 0:144: '' : function call, method, or subroutine call expected 
+ERROR: 0:144: '' : no matching overloaded function found 
+ERROR: 0:145: 'length' : incomplete method syntax 
+ERROR: 0:146: 'length' : method does not accept any arguments 
+ERROR: 0:149: 'gl_FogFragCoord' : identifiers starting with "gl_" are reserved 
+ERROR: 0:154: 'int' : must be qualified as flat in
+ERROR: 0:154: 'redeclaration' : cannot change the type of gl_FogFragCoord
+ERROR: 0:156: 'early_fragment_tests' : not supported for this version or the enabled extensions 
+ERROR: 0:157: 'image load store' : not supported for this version or the enabled extensions 
+ERROR: 0:157: 'iimage2D' : Reserved word. 
+ERROR: 0:172: 'early_fragment_tests' : can only apply to 'in' 
+ERROR: 0:176: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
+ERROR: 30 compilation errors.  No code generated.
 
 
 Shader version: 130
+Requested GL_ARB_explicit_attrib_location
+Requested GL_ARB_explicit_uniform_location
 Requested GL_ARB_gpu_shader5
+Requested GL_ARB_sample_shading
 Requested GL_ARB_separate_shader_objects
 Requested GL_ARB_shader_image_load_store
 Requested GL_ARB_shading_language_420pack
@@ -119,259 +124,267 @@
 0:63        false (const bool)
 0:64      Constant:
 0:64        false (const bool)
-0:65      Constant:
-0:65        true (const bool)
+0:65      Sequence
+0:65        move second child to first child ( temp int)
+0:65          'samples' ( temp int)
+0:65          'gl_NumSamples' ( uniform int SampleMaskIn)
 0:66      Constant:
-0:66        false (const bool)
-0:77  Function Definition: bar23( ( global void)
-0:77    Function Parameters: 
+0:66        true (const bool)
+0:67      Constant:
+0:67        false (const bool)
+0:79  Function Definition: bar23( ( global void)
+0:79    Function Parameters: 
 0:?     Sequence
-0:80      's' ( temp 4-component vector of float)
-0:81      move second child to first child ( temp 4-component vector of float)
-0:81        's' ( temp 4-component vector of float)
-0:81        textureGatherOffset ( global 4-component vector of float)
-0:81          'samp2DR' ( uniform sampler2DRect)
-0:81          Constant:
-0:81            0.300000
-0:81            0.300000
-0:81          Constant:
-0:81            1 (const int)
-0:81            1 (const int)
-0:82      move second child to first child ( temp 4-component vector of float)
-0:82        's' ( temp 4-component vector of float)
-0:82        textureGatherOffset ( global 4-component vector of float)
-0:82          'samp2D' ( uniform sampler2D)
-0:82          Constant:
-0:82            0.300000
-0:82            0.300000
-0:82          Constant:
-0:82            1 (const int)
-0:82            1 (const int)
+0:82      's' ( temp 4-component vector of float)
 0:83      move second child to first child ( temp 4-component vector of float)
 0:83        's' ( temp 4-component vector of float)
 0:83        textureGatherOffset ( global 4-component vector of float)
-0:83          'samp2DA' ( uniform sampler2DArray)
+0:83          'samp2DR' ( uniform sampler2DRect)
 0:83          Constant:
 0:83            0.300000
 0:83            0.300000
-0:83            0.300000
 0:83          Constant:
 0:83            1 (const int)
 0:83            1 (const int)
 0:84      move second child to first child ( temp 4-component vector of float)
 0:84        's' ( temp 4-component vector of float)
 0:84        textureGatherOffset ( global 4-component vector of float)
-0:84          'samp2DS' ( uniform sampler2DShadow)
+0:84          'samp2D' ( uniform sampler2D)
 0:84          Constant:
 0:84            0.300000
 0:84            0.300000
 0:84          Constant:
-0:84            1.300000
-0:84          Constant:
 0:84            1 (const int)
 0:84            1 (const int)
 0:85      move second child to first child ( temp 4-component vector of float)
 0:85        's' ( temp 4-component vector of float)
 0:85        textureGatherOffset ( global 4-component vector of float)
-0:85          'samp2D' ( uniform sampler2D)
+0:85          'samp2DA' ( uniform sampler2DArray)
 0:85          Constant:
 0:85            0.300000
 0:85            0.300000
+0:85            0.300000
 0:85          Constant:
 0:85            1 (const int)
 0:85            1 (const int)
-0:85          Constant:
-0:85            2 (const int)
-0:90  Function Definition: bar234( ( global void)
-0:90    Function Parameters: 
+0:86      move second child to first child ( temp 4-component vector of float)
+0:86        's' ( temp 4-component vector of float)
+0:86        textureGatherOffset ( global 4-component vector of float)
+0:86          'samp2DS' ( uniform sampler2DShadow)
+0:86          Constant:
+0:86            0.300000
+0:86            0.300000
+0:86          Constant:
+0:86            1.300000
+0:86          Constant:
+0:86            1 (const int)
+0:86            1 (const int)
+0:87      move second child to first child ( temp 4-component vector of float)
+0:87        's' ( temp 4-component vector of float)
+0:87        textureGatherOffset ( global 4-component vector of float)
+0:87          'samp2D' ( uniform sampler2D)
+0:87          Constant:
+0:87            0.300000
+0:87            0.300000
+0:87          Constant:
+0:87            1 (const int)
+0:87            1 (const int)
+0:87          Constant:
+0:87            2 (const int)
+0:88      Sequence
+0:88        move second child to first child ( temp int)
+0:88          'samples' ( temp int)
+0:88          'gl_NumSamples' ( uniform int SampleMaskIn)
+0:93  Function Definition: bar234( ( global void)
+0:93    Function Parameters: 
 0:?     Sequence
-0:93      move second child to first child ( temp 4-component vector of float)
-0:93        's' ( temp 4-component vector of float)
-0:93        textureGatherOffset ( global 4-component vector of float)
-0:93          'samp2D' ( uniform sampler2D)
-0:93          Constant:
-0:93            0.300000
-0:93            0.300000
-0:93          Constant:
-0:93            1 (const int)
-0:93            1 (const int)
-0:94      move second child to first child ( temp 4-component vector of float)
-0:94        's' ( temp 4-component vector of float)
-0:94        textureGatherOffset ( global 4-component vector of float)
-0:94          'samp2DA' ( uniform sampler2DArray)
-0:94          Constant:
-0:94            0.300000
-0:94            0.300000
-0:94            0.300000
-0:94          Constant:
-0:94            1 (const int)
-0:94            1 (const int)
-0:95      move second child to first child ( temp 4-component vector of float)
-0:95        's' ( temp 4-component vector of float)
-0:95        textureGatherOffset ( global 4-component vector of float)
-0:95          'samp2DR' ( uniform sampler2DRect)
-0:95          Constant:
-0:95            0.300000
-0:95            0.300000
-0:95          Constant:
-0:95            1 (const int)
-0:95            1 (const int)
 0:96      move second child to first child ( temp 4-component vector of float)
 0:96        's' ( temp 4-component vector of float)
 0:96        textureGatherOffset ( global 4-component vector of float)
-0:96          'samp2DS' ( uniform sampler2DShadow)
+0:96          'samp2D' ( uniform sampler2D)
 0:96          Constant:
 0:96            0.300000
 0:96            0.300000
 0:96          Constant:
-0:96            1.300000
-0:96          Constant:
 0:96            1 (const int)
 0:96            1 (const int)
 0:97      move second child to first child ( temp 4-component vector of float)
 0:97        's' ( temp 4-component vector of float)
 0:97        textureGatherOffset ( global 4-component vector of float)
-0:97          'samp2D' ( uniform sampler2D)
+0:97          'samp2DA' ( uniform sampler2DArray)
 0:97          Constant:
 0:97            0.300000
 0:97            0.300000
+0:97            0.300000
 0:97          Constant:
 0:97            1 (const int)
 0:97            1 (const int)
-0:97          Constant:
-0:97            2 (const int)
-0:107  Function Definition: bar235( ( global void)
-0:107    Function Parameters: 
-0:109    Sequence
-0:109      Sequence
-0:109        move second child to first child ( temp 3-component vector of int)
-0:109          'a' ( temp 3-component vector of int)
-0:109          textureSize ( global 3-component vector of int)
-0:109            'Sca' ( uniform samplerCubeArray)
-0:109            Constant:
-0:109              3 (const int)
-0:110      Sequence
-0:110        move second child to first child ( temp 4-component vector of float)
-0:110          'b' ( temp 4-component vector of float)
-0:110          texture ( global 4-component vector of float)
-0:110            'Sca' ( uniform samplerCubeArray)
-0:110            'i' ( smooth in 4-component vector of float)
-0:111      Sequence
-0:111        move second child to first child ( temp 4-component vector of int)
-0:111          'c' ( temp 4-component vector of int)
-0:111          texture ( global 4-component vector of int)
-0:111            'Isca' ( uniform isamplerCubeArray)
-0:111            'i' ( smooth in 4-component vector of float)
-0:111            Constant:
-0:111              0.700000
+0:98      move second child to first child ( temp 4-component vector of float)
+0:98        's' ( temp 4-component vector of float)
+0:98        textureGatherOffset ( global 4-component vector of float)
+0:98          'samp2DR' ( uniform sampler2DRect)
+0:98          Constant:
+0:98            0.300000
+0:98            0.300000
+0:98          Constant:
+0:98            1 (const int)
+0:98            1 (const int)
+0:99      move second child to first child ( temp 4-component vector of float)
+0:99        's' ( temp 4-component vector of float)
+0:99        textureGatherOffset ( global 4-component vector of float)
+0:99          'samp2DS' ( uniform sampler2DShadow)
+0:99          Constant:
+0:99            0.300000
+0:99            0.300000
+0:99          Constant:
+0:99            1.300000
+0:99          Constant:
+0:99            1 (const int)
+0:99            1 (const int)
+0:100      move second child to first child ( temp 4-component vector of float)
+0:100        's' ( temp 4-component vector of float)
+0:100        textureGatherOffset ( global 4-component vector of float)
+0:100          'samp2D' ( uniform sampler2D)
+0:100          Constant:
+0:100            0.300000
+0:100            0.300000
+0:100          Constant:
+0:100            1 (const int)
+0:100            1 (const int)
+0:100          Constant:
+0:100            2 (const int)
+0:110  Function Definition: bar235( ( global void)
+0:110    Function Parameters: 
+0:112    Sequence
 0:112      Sequence
-0:112        move second child to first child ( temp 4-component vector of uint)
-0:112          'd' ( temp 4-component vector of uint)
-0:112          texture ( global 4-component vector of uint)
-0:112            'Usca' ( uniform usamplerCubeArray)
-0:112            'i' ( smooth in 4-component vector of float)
-0:114      move second child to first child ( temp 4-component vector of float)
-0:114        'b' ( temp 4-component vector of float)
-0:114        textureLod ( global 4-component vector of float)
-0:114          'Sca' ( uniform samplerCubeArray)
-0:114          'i' ( smooth in 4-component vector of float)
-0:114          Constant:
-0:114            1.700000
-0:115      move second child to first child ( temp 3-component vector of int)
-0:115        'a' ( temp 3-component vector of int)
-0:115        textureSize ( global 3-component vector of int)
-0:115          'Scas' ( uniform samplerCubeArrayShadow)
-0:115          direct index ( temp int)
-0:115            'a' ( temp 3-component vector of int)
-0:115            Constant:
-0:115              0 (const int)
-0:116      Sequence
-0:116        move second child to first child ( temp float)
-0:116          'f' ( temp float)
-0:116          texture ( global float)
-0:116            'Scas' ( uniform samplerCubeArrayShadow)
-0:116            'i' ( smooth in 4-component vector of float)
-0:116            direct index ( temp float)
-0:116              'b' ( temp 4-component vector of float)
-0:116              Constant:
-0:116                1 (const int)
-0:117      move second child to first child ( temp 4-component vector of int)
-0:117        'c' ( temp 4-component vector of int)
-0:117        textureGrad ( global 4-component vector of int)
-0:117          'Isca' ( uniform isamplerCubeArray)
+0:112        move second child to first child ( temp 3-component vector of int)
+0:112          'a' ( temp 3-component vector of int)
+0:112          textureSize ( global 3-component vector of int)
+0:112            'Sca' ( uniform samplerCubeArray)
+0:112            Constant:
+0:112              3 (const int)
+0:113      Sequence
+0:113        move second child to first child ( temp 4-component vector of float)
+0:113          'b' ( temp 4-component vector of float)
+0:113          texture ( global 4-component vector of float)
+0:113            'Sca' ( uniform samplerCubeArray)
+0:113            'i' ( smooth in 4-component vector of float)
+0:114      Sequence
+0:114        move second child to first child ( temp 4-component vector of int)
+0:114          'c' ( temp 4-component vector of int)
+0:114          texture ( global 4-component vector of int)
+0:114            'Isca' ( uniform isamplerCubeArray)
+0:114            'i' ( smooth in 4-component vector of float)
+0:114            Constant:
+0:114              0.700000
+0:115      Sequence
+0:115        move second child to first child ( temp 4-component vector of uint)
+0:115          'd' ( temp 4-component vector of uint)
+0:115          texture ( global 4-component vector of uint)
+0:115            'Usca' ( uniform usamplerCubeArray)
+0:115            'i' ( smooth in 4-component vector of float)
+0:117      move second child to first child ( temp 4-component vector of float)
+0:117        'b' ( temp 4-component vector of float)
+0:117        textureLod ( global 4-component vector of float)
+0:117          'Sca' ( uniform samplerCubeArray)
 0:117          'i' ( smooth in 4-component vector of float)
 0:117          Constant:
-0:117            0.100000
-0:117            0.100000
-0:117            0.100000
-0:117          Constant:
-0:117            0.200000
-0:117            0.200000
-0:117            0.200000
-0:129  Function Definition: bar23444( ( global void)
-0:129    Function Parameters: 
+0:117            1.700000
+0:118      move second child to first child ( temp 3-component vector of int)
+0:118        'a' ( temp 3-component vector of int)
+0:118        textureSize ( global 3-component vector of int)
+0:118          'Scas' ( uniform samplerCubeArrayShadow)
+0:118          direct index ( temp int)
+0:118            'a' ( temp 3-component vector of int)
+0:118            Constant:
+0:118              0 (const int)
+0:119      Sequence
+0:119        move second child to first child ( temp float)
+0:119          'f' ( temp float)
+0:119          texture ( global float)
+0:119            'Scas' ( uniform samplerCubeArrayShadow)
+0:119            'i' ( smooth in 4-component vector of float)
+0:119            direct index ( temp float)
+0:119              'b' ( temp 4-component vector of float)
+0:119              Constant:
+0:119                1 (const int)
+0:120      move second child to first child ( temp 4-component vector of int)
+0:120        'c' ( temp 4-component vector of int)
+0:120        textureGrad ( global 4-component vector of int)
+0:120          'Isca' ( uniform isamplerCubeArray)
+0:120          'i' ( smooth in 4-component vector of float)
+0:120          Constant:
+0:120            0.100000
+0:120            0.100000
+0:120            0.100000
+0:120          Constant:
+0:120            0.200000
+0:120            0.200000
+0:120            0.200000
+0:132  Function Definition: bar23444( ( global void)
+0:132    Function Parameters: 
 0:?     Sequence
-0:132      Sequence
-0:132        move second child to first child ( temp float)
-0:132          'a1' ( temp float)
-0:132          direct index ( temp float)
-0:132            direct index ( temp 3-component vector of float)
-0:132              'm43' ( temp 4X3 matrix of float)
-0:132              Constant:
-0:132                3 (const int)
-0:132            Constant:
-0:132              1 (const int)
-0:134      Sequence
-0:134        move second child to first child ( temp int)
-0:134          'a2' ( temp int)
-0:134          Constant:
-0:134            4 (const int)
-0:135      add second child into first child ( temp int)
-0:135        'a2' ( temp int)
-0:135        Constant:
-0:135          3 (const int)
-0:136      add second child into first child ( temp int)
-0:136        'a2' ( temp int)
-0:136        Constant:
-0:136          3 (const int)
+0:135      Sequence
+0:135        move second child to first child ( temp float)
+0:135          'a1' ( temp float)
+0:135          direct index ( temp float)
+0:135            direct index ( temp 3-component vector of float)
+0:135              'm43' ( temp 4X3 matrix of float)
+0:135              Constant:
+0:135                3 (const int)
+0:135            Constant:
+0:135              1 (const int)
 0:137      Sequence
-0:137        move second child to first child ( temp float)
-0:137          'b' ( const (read only) float)
-0:137          component-wise multiply ( temp float)
-0:137            Constant:
-0:137              2.000000
-0:137            'a1' ( temp float)
-0:138      move second child to first child ( temp float)
-0:138        direct index ( temp float)
-0:138          'a' ( global 3-component vector of float)
-0:138          Constant:
-0:138            0 (const int)
+0:137        move second child to first child ( temp int)
+0:137          'a2' ( temp int)
+0:137          Constant:
+0:137            4 (const int)
+0:138      add second child into first child ( temp int)
+0:138        'a2' ( temp int)
 0:138        Constant:
-0:138          -1.000000
-0:140      Constant:
-0:140        0.000000
-0:141      Constant:
-0:141        0.000000
+0:138          3 (const int)
+0:139      add second child into first child ( temp int)
+0:139        'a2' ( temp int)
+0:139        Constant:
+0:139          3 (const int)
+0:140      Sequence
+0:140        move second child to first child ( temp float)
+0:140          'b' ( const (read only) float)
+0:140          component-wise multiply ( temp float)
+0:140            Constant:
+0:140              2.000000
+0:140            'a1' ( temp float)
+0:141      move second child to first child ( temp float)
+0:141        direct index ( temp float)
+0:141          'a' ( global 3-component vector of float)
+0:141          Constant:
+0:141            0 (const int)
+0:141        Constant:
+0:141          -1.000000
 0:143      Constant:
-0:143        1 (const int)
-0:162  Function Definition: qux2( ( global void)
-0:162    Function Parameters: 
+0:143        0.000000
+0:144      Constant:
+0:144        0.000000
+0:146      Constant:
+0:146        1 (const int)
+0:165  Function Definition: qux2( ( global void)
+0:165    Function Parameters: 
 0:?     Sequence
-0:165      imageAtomicCompSwap ( global int)
-0:165        'iimg2D' (layout( r32i) uniform iimage2D)
-0:165        Construct ivec2 ( temp 2-component vector of int)
-0:165          'i' ( temp int)
-0:165          'i' ( temp int)
-0:165        'i' ( temp int)
-0:165        'i' ( temp int)
-0:166      Sequence
-0:166        move second child to first child ( temp 4-component vector of int)
-0:166          'pos' ( temp 4-component vector of int)
-0:166          imageLoad ( global 4-component vector of int)
-0:166            'iimg2D' (layout( r32i) uniform iimage2D)
-0:166            Construct ivec2 ( temp 2-component vector of int)
-0:166              'i' ( temp int)
-0:166              'i' ( temp int)
+0:168      imageAtomicCompSwap ( global int)
+0:168        'iimg2D' (layout( r32i) uniform iimage2D)
+0:168        Construct ivec2 ( temp 2-component vector of int)
+0:168          'i' ( temp int)
+0:168          'i' ( temp int)
+0:168        'i' ( temp int)
+0:168        'i' ( temp int)
+0:169      Sequence
+0:169        move second child to first child ( temp 4-component vector of int)
+0:169          'pos' ( temp 4-component vector of int)
+0:169          imageLoad ( global 4-component vector of int)
+0:169            'iimg2D' (layout( r32i) uniform iimage2D)
+0:169            Construct ivec2 ( temp 2-component vector of int)
+0:169              'i' ( temp int)
+0:169              'i' ( temp int)
 0:?   Linker Objects
 0:?     'a' ( global 3-component vector of float)
 0:?     'b' ( global float)
@@ -402,13 +415,18 @@
 0:?     'gl_FogFragCoord' ( smooth in float)
 0:?     'iimg2Dbad' (layout( r32i) uniform iimage2D)
 0:?     'iimg2D' (layout( r32i) uniform iimage2D)
+0:?     'ucolor0' (layout( location=3) uniform 4-component vector of float)
+0:?     'ucolor1' (layout( location=4) uniform 4-component vector of float)
 
 
 Linked fragment stage:
 
 
 Shader version: 130
+Requested GL_ARB_explicit_attrib_location
+Requested GL_ARB_explicit_uniform_location
 Requested GL_ARB_gpu_shader5
+Requested GL_ARB_sample_shading
 Requested GL_ARB_separate_shader_objects
 Requested GL_ARB_shader_image_load_store
 Requested GL_ARB_shading_language_420pack
@@ -457,4 +475,6 @@
 0:?     'gl_FogFragCoord' ( smooth in float)
 0:?     'iimg2Dbad' (layout( r32i) uniform iimage2D)
 0:?     'iimg2D' (layout( r32i) uniform iimage2D)
+0:?     'ucolor0' (layout( location=3) uniform 4-component vector of float)
+0:?     'ucolor1' (layout( location=4) uniform 4-component vector of float)
 
diff --git a/Test/baseResults/140.frag.out b/Test/baseResults/140.frag.out
index 7ce2170..702718a 100644
--- a/Test/baseResults/140.frag.out
+++ b/Test/baseResults/140.frag.out
@@ -1,14 +1,15 @@
 140.frag
 WARNING: 0:3: varying deprecated in version 130; may be removed in future release
 ERROR: 0:17: '#error' : GL_ES is not set  
-ERROR: 0:20: 'fragment-shader struct input' : not supported for this version or the enabled extensions 
-ERROR: 0:24: 'location' : not supported for this version or the enabled extensions 
-ERROR: 0:24: 'location qualifier on input' : not supported for this version or the enabled extensions 
-ERROR: 0:26: 'location' : not supported for this version or the enabled extensions 
-ERROR: 0:26: 'location qualifier on output' : not supported for this version or the enabled extensions 
-ERROR: 0:40: 'assign' :  l-value required "v" (can't modify shader input)
-ERROR: 0:40: 'out' : Non-L-value cannot be passed for 'out' or 'inout' parameters. 
-ERROR: 8 compilation errors.  No code generated.
+ERROR: 0:21: 'fragment-shader struct input' : not supported for this version or the enabled extensions 
+ERROR: 0:25: 'location' : not supported for this version or the enabled extensions 
+ERROR: 0:25: 'location qualifier on input' : not supported for this version or the enabled extensions 
+ERROR: 0:27: 'location' : not supported for this version or the enabled extensions 
+ERROR: 0:27: 'location qualifier on output' : not supported for this version or the enabled extensions 
+ERROR: 0:41: 'assign' :  l-value required "v" (can't modify shader input)
+ERROR: 0:41: 'out' : Non-L-value cannot be passed for 'out' or 'inout' parameters. 
+ERROR: 0:56: '' :  syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
+ERROR: 9 compilation errors.  No code generated.
 
 
 Shader version: 140
@@ -25,80 +26,80 @@
 0:12            'gl_ClipDistance' ( smooth in 5-element array of float ClipDistance)
 0:12            Constant:
 0:12              2 (const int)
-0:22  Sequence
-0:22    move second child to first child ( temp float)
-0:22      'patch' ( global float)
-0:22      Constant:
-0:22        3.100000
-0:38  Function Definition: foo( ( global void)
-0:38    Function Parameters: 
-0:40    Sequence
-0:40      Sequence
-0:40        move second child to first child ( temp 2-component vector of float)
-0:40          'r1' ( temp 2-component vector of float)
-0:40          modf ( global 2-component vector of float)
-0:40            vector swizzle ( temp 2-component vector of float)
-0:40              'v' ( smooth in 4-component vector of float)
-0:40              Sequence
-0:40                Constant:
-0:40                  0 (const int)
-0:40                Constant:
-0:40                  1 (const int)
-0:40            vector swizzle ( temp 2-component vector of float)
-0:40              'v' ( smooth in 4-component vector of float)
-0:40              Sequence
-0:40                Constant:
-0:40                  2 (const int)
-0:40                Constant:
-0:40                  3 (const int)
+0:23  Sequence
+0:23    move second child to first child ( temp float)
+0:23      'patch' ( global float)
+0:23      Constant:
+0:23        3.100000
+0:39  Function Definition: foo( ( global void)
+0:39    Function Parameters: 
+0:41    Sequence
 0:41      Sequence
 0:41        move second child to first child ( temp 2-component vector of float)
-0:41          'r2' ( temp 2-component vector of float)
+0:41          'r1' ( temp 2-component vector of float)
 0:41          modf ( global 2-component vector of float)
 0:41            vector swizzle ( temp 2-component vector of float)
-0:41              'o' ( out 4-component vector of float)
+0:41              'v' ( smooth in 4-component vector of float)
 0:41              Sequence
 0:41                Constant:
 0:41                  0 (const int)
 0:41                Constant:
 0:41                  1 (const int)
 0:41            vector swizzle ( temp 2-component vector of float)
-0:41              'o' ( out 4-component vector of float)
+0:41              'v' ( smooth in 4-component vector of float)
 0:41              Sequence
 0:41                Constant:
 0:41                  2 (const int)
 0:41                Constant:
 0:41                  3 (const int)
-0:42      move second child to first child ( temp float)
-0:42        direct index ( temp float)
-0:42          'o' ( out 4-component vector of float)
-0:42          Constant:
-0:42            2 (const int)
-0:42        Function Call: fooi( ( global float)
-0:47  Sequence
-0:47    move second child to first child ( temp float)
-0:47      'i1' ( global float)
-0:47      Test condition and select ( temp float)
-0:47        Condition
-0:47        'gl_FrontFacing' ( gl_FrontFacing bool Face)
-0:47        true case
-0:47        Constant:
-0:47          -2.000000
-0:47        false case
-0:47        Constant:
-0:47          2.000000
+0:42      Sequence
+0:42        move second child to first child ( temp 2-component vector of float)
+0:42          'r2' ( temp 2-component vector of float)
+0:42          modf ( global 2-component vector of float)
+0:42            vector swizzle ( temp 2-component vector of float)
+0:42              'o' ( out 4-component vector of float)
+0:42              Sequence
+0:42                Constant:
+0:42                  0 (const int)
+0:42                Constant:
+0:42                  1 (const int)
+0:42            vector swizzle ( temp 2-component vector of float)
+0:42              'o' ( out 4-component vector of float)
+0:42              Sequence
+0:42                Constant:
+0:42                  2 (const int)
+0:42                Constant:
+0:42                  3 (const int)
+0:43      move second child to first child ( temp float)
+0:43        direct index ( temp float)
+0:43          'o' ( out 4-component vector of float)
+0:43          Constant:
+0:43            2 (const int)
+0:43        Function Call: fooi( ( global float)
 0:48  Sequence
 0:48    move second child to first child ( temp float)
-0:48      'i2' ( global float)
-0:48      Constant:
-0:48        102.000000
-0:50  Function Definition: fooi( ( global float)
-0:50    Function Parameters: 
-0:52    Sequence
-0:52      Branch: Return with expression
-0:52        add ( temp float)
-0:52          'i1' ( global float)
-0:52          'i2' ( global float)
+0:48      'i1' ( global float)
+0:48      Test condition and select ( temp float)
+0:48        Condition
+0:48        'gl_FrontFacing' ( gl_FrontFacing bool Face)
+0:48        true case
+0:48        Constant:
+0:48          -2.000000
+0:48        false case
+0:48        Constant:
+0:48          2.000000
+0:49  Sequence
+0:49    move second child to first child ( temp float)
+0:49      'i2' ( global float)
+0:49      Constant:
+0:49        102.000000
+0:51  Function Definition: fooi( ( global float)
+0:51    Function Parameters: 
+0:53    Sequence
+0:53      Branch: Return with expression
+0:53        add ( temp float)
+0:53          'i1' ( global float)
+0:53          'i2' ( global float)
 0:?   Linker Objects
 0:?     'v' ( smooth in 4-component vector of float)
 0:?     'i' ( smooth in 4-component vector of float)
@@ -131,28 +132,28 @@
 0:12            'gl_ClipDistance' ( smooth in 5-element array of float ClipDistance)
 0:12            Constant:
 0:12              2 (const int)
-0:22  Sequence
-0:22    move second child to first child ( temp float)
-0:22      'patch' ( global float)
-0:22      Constant:
-0:22        3.100000
-0:47  Sequence
-0:47    move second child to first child ( temp float)
-0:47      'i1' ( global float)
-0:47      Test condition and select ( temp float)
-0:47        Condition
-0:47        'gl_FrontFacing' ( gl_FrontFacing bool Face)
-0:47        true case
-0:47        Constant:
-0:47          -2.000000
-0:47        false case
-0:47        Constant:
-0:47          2.000000
+0:23  Sequence
+0:23    move second child to first child ( temp float)
+0:23      'patch' ( global float)
+0:23      Constant:
+0:23        3.100000
 0:48  Sequence
 0:48    move second child to first child ( temp float)
-0:48      'i2' ( global float)
-0:48      Constant:
-0:48        102.000000
+0:48      'i1' ( global float)
+0:48      Test condition and select ( temp float)
+0:48        Condition
+0:48        'gl_FrontFacing' ( gl_FrontFacing bool Face)
+0:48        true case
+0:48        Constant:
+0:48          -2.000000
+0:48        false case
+0:48        Constant:
+0:48          2.000000
+0:49  Sequence
+0:49    move second child to first child ( temp float)
+0:49      'i2' ( global float)
+0:49      Constant:
+0:49        102.000000
 0:?   Linker Objects
 0:?     'v' ( smooth in 4-component vector of float)
 0:?     'i' ( smooth in 4-component vector of float)
diff --git a/Test/baseResults/150.frag.out b/Test/baseResults/150.frag.out
index 1454b55..4a55ea4 100644
--- a/Test/baseResults/150.frag.out
+++ b/Test/baseResults/150.frag.out
@@ -3,10 +3,19 @@
 ERROR: 0:5: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord
 ERROR: 0:6: 'layout qualifier' : can only apply origin_upper_left and pixel_center_origin to gl_FragCoord 
 ERROR: 0:14: 'gl_FragCoord' : cannot redeclare after use 
-ERROR: 4 compilation errors.  No code generated.
+ERROR: 0:50: 'gl_PerFragment' : cannot be used (maybe an instance name is needed) 
+ERROR: 0:50: 'gl_PerFragment' : undeclared identifier 
+ERROR: 0:53: 'double' : Reserved word. 
+ERROR: 0:53: 'double' : not supported for this version or the enabled extensions 
+ERROR: 0:53: 'double' : must be qualified as flat in
+ERROR: 0:57: '=' :  cannot convert from ' global double' to ' global int'
+ERROR: 0:80: 'floatBitsToInt' : required extension not requested: GL_ARB_shader_bit_encoding
+ERROR: 11 compilation errors.  No code generated.
 
 
 Shader version: 150
+Requested GL_ARB_gpu_shader_fp64
+Requested GL_ARB_shader_bit_encoding
 gl_FragCoord pixel center is integer
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
@@ -106,6 +115,58 @@
 0:49    Sequence
 0:49      Branch: Return with expression
 0:49        'gl_PrimitiveID' ( flat in int PrimitiveID)
+0:50      'gl_PerFragment' ( temp float)
+0:56  Sequence
+0:56    move second child to first child ( temp double)
+0:56      'type3' ( global double)
+0:56      Constant:
+0:56        2.000000
+0:58  Sequence
+0:58    move second child to first child ( temp double)
+0:58      'absTest2' ( global double)
+0:58      sqrt ( global double)
+0:58        'type3' ( global double)
+0:59  Sequence
+0:59    move second child to first child ( temp double)
+0:59      'absTest3' ( global double)
+0:59      Constant:
+0:59        1.414214
+0:60  Sequence
+0:60    move second child to first child ( temp float)
+0:60      'dk' ( global float)
+0:60      Constant:
+0:60        3.316625
+0:68  Function Definition: bitEncodingPass( ( global void)
+0:68    Function Parameters: 
+0:70    Sequence
+0:70      Sequence
+0:70        move second child to first child ( temp int)
+0:70          'i' ( temp int)
+0:70          floatBitsToInt ( global int)
+0:70            'f' ( global float)
+0:71      Sequence
+0:71        move second child to first child ( temp 4-component vector of uint)
+0:71          'uv11' ( temp 4-component vector of uint)
+0:71          floatBitsToUint ( global 4-component vector of uint)
+0:71            'v4' ( global 4-component vector of float)
+0:72      Sequence
+0:72        move second child to first child ( temp 4-component vector of float)
+0:72          'v14' ( temp 4-component vector of float)
+0:72          intBitsToFloat ( global 4-component vector of float)
+0:72            'iv4a' ( global 4-component vector of int)
+0:73      Sequence
+0:73        move second child to first child ( temp 2-component vector of float)
+0:73          'v15' ( temp 2-component vector of float)
+0:73          uintBitsToFloat ( global 2-component vector of float)
+0:73            'uv2c' ( global 2-component vector of uint)
+0:78  Function Definition: bitEncodingFail( ( global void)
+0:78    Function Parameters: 
+0:80    Sequence
+0:80      Sequence
+0:80        move second child to first child ( temp int)
+0:80          'i' ( temp int)
+0:80          floatBitsToInt ( global int)
+0:80            'f' ( global float)
 0:?   Linker Objects
 0:?     'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
 0:?     'foo' ( smooth in 4-component vector of float)
@@ -120,12 +181,25 @@
 0:?     'p2' ( flat in 2-component vector of int)
 0:?     'p3' ( flat in 3-component vector of int)
 0:?     'samp' ( flat in int)
+0:?     'type1' ( smooth in double)
+0:?     'type2' ( global double)
+0:?     'type3' ( global double)
+0:?     'absTest' ( global int)
+0:?     'absTest2' ( global double)
+0:?     'absTest3' ( global double)
+0:?     'dk' ( global float)
+0:?     'f' ( global float)
+0:?     'v4' ( global 4-component vector of float)
+0:?     'iv4a' ( global 4-component vector of int)
+0:?     'uv2c' ( global 2-component vector of uint)
 
 
 Linked fragment stage:
 
 
 Shader version: 150
+Requested GL_ARB_gpu_shader_fp64
+Requested GL_ARB_shader_bit_encoding
 gl_FragCoord pixel center is integer
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
@@ -141,6 +215,26 @@
 0:18      'patch' ( global float)
 0:18      Constant:
 0:18        3.100000
+0:56  Sequence
+0:56    move second child to first child ( temp double)
+0:56      'type3' ( global double)
+0:56      Constant:
+0:56        2.000000
+0:58  Sequence
+0:58    move second child to first child ( temp double)
+0:58      'absTest2' ( global double)
+0:58      sqrt ( global double)
+0:58        'type3' ( global double)
+0:59  Sequence
+0:59    move second child to first child ( temp double)
+0:59      'absTest3' ( global double)
+0:59      Constant:
+0:59        1.414214
+0:60  Sequence
+0:60    move second child to first child ( temp float)
+0:60      'dk' ( global float)
+0:60      Constant:
+0:60        3.316625
 0:?   Linker Objects
 0:?     'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
 0:?     'foo' ( smooth in 4-component vector of float)
@@ -155,4 +249,15 @@
 0:?     'p2' ( flat in 2-component vector of int)
 0:?     'p3' ( flat in 3-component vector of int)
 0:?     'samp' ( flat in int)
+0:?     'type1' ( smooth in double)
+0:?     'type2' ( global double)
+0:?     'type3' ( global double)
+0:?     'absTest' ( global int)
+0:?     'absTest2' ( global double)
+0:?     'absTest3' ( global double)
+0:?     'dk' ( global float)
+0:?     'f' ( global float)
+0:?     'v4' ( global 4-component vector of float)
+0:?     'iv4a' ( global 4-component vector of int)
+0:?     'uv2c' ( global 2-component vector of uint)
 
diff --git a/Test/baseResults/300BuiltIns.frag.out b/Test/baseResults/300BuiltIns.frag.out
index 84d4d08..54ecfa5 100644
--- a/Test/baseResults/300BuiltIns.frag.out
+++ b/Test/baseResults/300BuiltIns.frag.out
@@ -1,9 +1,9 @@
 300BuiltIns.frag
 ERROR: 0:6: 'float' : type requires declaration of default precision qualifier 
 ERROR: 0:70: 'noise2' : no matching overloaded function found 
-ERROR: 0:72: 't__' : identifiers containing consecutive underscores ("__") are reserved, and an error if version <= 300 
-ERROR: 0:75: '#define' : names containing consecutive underscores are reserved, and an error if version <= 300: __D
-ERROR: 4 compilation errors.  No code generated.
+WARNING: 0:72: 't__' : identifiers containing consecutive underscores ("__") are reserved 
+WARNING: 0:75: '#define' : names containing consecutive underscores are reserved: __D
+ERROR: 2 compilation errors.  No code generated.
 
 
 Shader version: 300
diff --git a/Test/baseResults/300samplerExternalYUV.frag.out b/Test/baseResults/300samplerExternalYUV.frag.out
new file mode 100644
index 0000000..b76e706
--- /dev/null
+++ b/Test/baseResults/300samplerExternalYUV.frag.out
@@ -0,0 +1,192 @@
+300samplerExternalYUV.frag
+ERROR: 0:12: 'texture2D' : no matching overloaded function found 
+ERROR: 0:13: 'texture2D' : no matching overloaded function found 
+ERROR: 0:14: 'texture2D' : no matching overloaded function found 
+ERROR: 0:15: 'texture2DProj' : no matching overloaded function found 
+ERROR: 0:16: 'texture2DProj' : no matching overloaded function found 
+ERROR: 0:29: 'texture3D' : no matching overloaded function found 
+ERROR: 0:30: 'texture2DProjLod' : no matching overloaded function found 
+ERROR: 0:31: 'texture' : no matching overloaded function found 
+ERROR: 0:32: 'textureProjLod' : no matching overloaded function found 
+ERROR: 0:37: '' :  syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
+ERROR: 10 compilation errors.  No code generated.
+
+
+Shader version: 300
+Requested GL_EXT_YUV_target
+ERROR: node is still EOpNull!
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      Constant:
+0:12        0.000000
+0:13      Constant:
+0:13        0.000000
+0:14      Constant:
+0:14        0.000000
+0:15      Constant:
+0:15        0.000000
+0:16      Constant:
+0:16        0.000000
+0:18      Sequence
+0:18        move second child to first child ( temp mediump int)
+0:18          'lod' ( temp mediump int)
+0:18          Constant:
+0:18            0 (const int)
+0:19      Sequence
+0:19        move second child to first child ( temp highp float)
+0:19          'bias' ( temp highp float)
+0:19          Constant:
+0:19            0.010000
+0:20      textureSize ( global highp 2-component vector of int, operation at mediump)
+0:20        'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:20        'lod' ( temp mediump int)
+0:21      texture ( global lowp 4-component vector of float)
+0:21        'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:21        Constant:
+0:21          0.200000
+0:21          0.200000
+0:22      texture ( global lowp 4-component vector of float, operation at highp)
+0:22        'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:22        Constant:
+0:22          0.200000
+0:22          0.200000
+0:22        'bias' ( temp highp float)
+0:23      textureProj ( global lowp 4-component vector of float)
+0:23        'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:23        Constant:
+0:23          0.200000
+0:23          0.200000
+0:23          0.200000
+0:24      textureProj ( global lowp 4-component vector of float, operation at highp)
+0:24        'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:24        Constant:
+0:24          0.200000
+0:24          0.200000
+0:24          0.200000
+0:24        'bias' ( temp highp float)
+0:25      textureProj ( global lowp 4-component vector of float)
+0:25        'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:25        Constant:
+0:25          0.200000
+0:25          0.200000
+0:25          0.200000
+0:25          0.200000
+0:26      textureProj ( global lowp 4-component vector of float, operation at highp)
+0:26        'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:26        Constant:
+0:26          0.200000
+0:26          0.200000
+0:26          0.200000
+0:26          0.200000
+0:26        'bias' ( temp highp float)
+0:27      textureFetch ( global lowp 4-component vector of float, operation at mediump)
+0:27        'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:27        Constant:
+0:27          4 (const int)
+0:27          4 (const int)
+0:27        'lod' ( temp mediump int)
+0:29      Constant:
+0:29        0.000000
+0:30      Constant:
+0:30        0.000000
+0:31      Constant:
+0:31        0.000000
+0:32      Constant:
+0:32        0.000000
+0:?   Linker Objects
+0:?     'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:?     'mediumExt' ( uniform mediump __samplerExternal2DY2YEXT)
+0:?     'highExt' ( uniform highp __samplerExternal2DY2YEXT)
+
+
+Linked fragment stage:
+
+
+Shader version: 300
+Requested GL_EXT_YUV_target
+ERROR: node is still EOpNull!
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      Constant:
+0:12        0.000000
+0:13      Constant:
+0:13        0.000000
+0:14      Constant:
+0:14        0.000000
+0:15      Constant:
+0:15        0.000000
+0:16      Constant:
+0:16        0.000000
+0:18      Sequence
+0:18        move second child to first child ( temp mediump int)
+0:18          'lod' ( temp mediump int)
+0:18          Constant:
+0:18            0 (const int)
+0:19      Sequence
+0:19        move second child to first child ( temp highp float)
+0:19          'bias' ( temp highp float)
+0:19          Constant:
+0:19            0.010000
+0:20      textureSize ( global highp 2-component vector of int, operation at mediump)
+0:20        'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:20        'lod' ( temp mediump int)
+0:21      texture ( global lowp 4-component vector of float)
+0:21        'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:21        Constant:
+0:21          0.200000
+0:21          0.200000
+0:22      texture ( global lowp 4-component vector of float, operation at highp)
+0:22        'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:22        Constant:
+0:22          0.200000
+0:22          0.200000
+0:22        'bias' ( temp highp float)
+0:23      textureProj ( global lowp 4-component vector of float)
+0:23        'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:23        Constant:
+0:23          0.200000
+0:23          0.200000
+0:23          0.200000
+0:24      textureProj ( global lowp 4-component vector of float, operation at highp)
+0:24        'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:24        Constant:
+0:24          0.200000
+0:24          0.200000
+0:24          0.200000
+0:24        'bias' ( temp highp float)
+0:25      textureProj ( global lowp 4-component vector of float)
+0:25        'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:25        Constant:
+0:25          0.200000
+0:25          0.200000
+0:25          0.200000
+0:25          0.200000
+0:26      textureProj ( global lowp 4-component vector of float, operation at highp)
+0:26        'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:26        Constant:
+0:26          0.200000
+0:26          0.200000
+0:26          0.200000
+0:26          0.200000
+0:26        'bias' ( temp highp float)
+0:27      textureFetch ( global lowp 4-component vector of float, operation at mediump)
+0:27        'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:27        Constant:
+0:27          4 (const int)
+0:27          4 (const int)
+0:27        'lod' ( temp mediump int)
+0:29      Constant:
+0:29        0.000000
+0:30      Constant:
+0:30        0.000000
+0:31      Constant:
+0:31        0.000000
+0:32      Constant:
+0:32        0.000000
+0:?   Linker Objects
+0:?     'sExt' ( uniform lowp __samplerExternal2DY2YEXT)
+0:?     'mediumExt' ( uniform mediump __samplerExternal2DY2YEXT)
+0:?     'highExt' ( uniform highp __samplerExternal2DY2YEXT)
+
diff --git a/Test/baseResults/310.comp.out b/Test/baseResults/310.comp.out
index 5a926f6..538b750 100644
--- a/Test/baseResults/310.comp.out
+++ b/Test/baseResults/310.comp.out
@@ -28,6 +28,9 @@
 ERROR: 0:94: 'writeonly' : argument cannot drop memory qualifier when passed to formal parameter 
 ERROR: 0:97: '' : memory qualifiers cannot be used on this type 
 ERROR: 0:98: '' : memory qualifiers cannot be used on this type 
+ERROR: 0:109: 'format' : image formats must match 
+ERROR: 0:110: 'format' : image formats must match 
+ERROR: 0:111: 'format' : image formats must match 
 ERROR: 0:114: 'image load-store format' : not supported with this profile: es
 ERROR: 0:114: 'rg8i' : does not apply to unsigned integer images 
 ERROR: 0:115: 'rgba32i' : does not apply to floating point images 
@@ -83,7 +86,7 @@
 ERROR: 0:244: 'gl_DeviceIndex' : required extension not requested: GL_EXT_device_group
 ERROR: 0:245: 'gl_ViewIndex' : undeclared identifier 
 ERROR: 0:255: 'gl_ViewIndex' : undeclared identifier 
-ERROR: 82 compilation errors.  No code generated.
+ERROR: 85 compilation errors.  No code generated.
 
 
 Shader version: 310
@@ -116,9 +119,9 @@
 0:59    Function Parameters: 
 0:61    Sequence
 0:61      move second child to first child ( temp highp float)
-0:61        direct index (layout( column_major shared) temp highp float)
-0:61          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
-0:61            'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:61        direct index (layout( column_major shared) readonly temp highp float)
+0:61          values: direct index for structure (layout( column_major shared) readonly buffer unsized 3-element array of highp float)
+0:61            'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) readonly buffer unsized 3-element array of highp float values})
 0:61            Constant:
 0:61              1 (const int)
 0:61          Constant:
@@ -126,8 +129,8 @@
 0:61        Constant:
 0:61          4.700000
 0:62      array length ( temp int)
-0:62        values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
-0:62          'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:62        values: direct index for structure (layout( column_major shared) readonly buffer unsized 3-element array of highp float)
+0:62          'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) readonly buffer unsized 3-element array of highp float values})
 0:62          Constant:
 0:62            1 (const int)
 0:63      Pre-Increment ( temp highp 4-component vector of float)
@@ -279,9 +282,9 @@
 0:?     Sequence
 0:194      move second child to first child ( temp highp float)
 0:194        'g' ( temp highp float)
-0:194        direct index (layout( column_major shared) temp highp float)
-0:194          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
-0:194            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:194        direct index (layout( column_major shared) writeonly temp highp float)
+0:194          values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:194            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:194            Constant:
 0:194              1 (const int)
 0:194          Constant:
@@ -289,42 +292,42 @@
 0:195      Sequence
 0:195        move second child to first child ( temp highp float)
 0:195          'f' ( temp highp float)
-0:195          direct index (layout( column_major shared) temp highp float)
-0:195            values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
-0:195              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:195          direct index (layout( column_major shared) writeonly temp highp float)
+0:195            values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:195              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:195              Constant:
 0:195                1 (const int)
 0:195            Constant:
 0:195              2 (const int)
 0:196      Pre-Increment ( temp highp float)
-0:196        direct index (layout( column_major shared) temp highp float)
-0:196          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
-0:196            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:196        direct index (layout( column_major shared) writeonly temp highp float)
+0:196          values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:196            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:196            Constant:
 0:196              1 (const int)
 0:196          Constant:
 0:196            2 (const int)
 0:197      Post-Decrement ( temp highp float)
-0:197        direct index (layout( column_major shared) temp highp float)
-0:197          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
-0:197            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:197        direct index (layout( column_major shared) writeonly temp highp float)
+0:197          values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:197            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:197            Constant:
 0:197              1 (const int)
 0:197          Constant:
 0:197            2 (const int)
 0:198      add ( temp highp float)
 0:198        'f' ( temp highp float)
-0:198        direct index (layout( column_major shared) temp highp float)
-0:198          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
-0:198            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:198        direct index (layout( column_major shared) writeonly temp highp float)
+0:198          values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:198            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:198            Constant:
 0:198              1 (const int)
 0:198          Constant:
 0:198            2 (const int)
 0:199      subtract ( temp highp float)
-0:199        direct index (layout( column_major shared) temp highp float)
-0:199          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
-0:199            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:199        direct index (layout( column_major shared) writeonly temp highp float)
+0:199          values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:199            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:199            Constant:
 0:199              1 (const int)
 0:199          Constant:
@@ -336,9 +339,9 @@
 0:201        true case
 0:201        'f' ( temp highp float)
 0:201        false case
-0:201        direct index (layout( column_major shared) temp highp float)
-0:201          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
-0:201            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:201        direct index (layout( column_major shared) writeonly temp highp float)
+0:201          values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:201            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:201            Constant:
 0:201              1 (const int)
 0:201          Constant:
@@ -347,9 +350,9 @@
 0:202        Condition
 0:202        'b' ( temp bool)
 0:202        true case
-0:202        direct index (layout( column_major shared) temp highp float)
-0:202          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
-0:202            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:202        direct index (layout( column_major shared) writeonly temp highp float)
+0:202          values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:202            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:202            Constant:
 0:202              1 (const int)
 0:202          Constant:
@@ -360,9 +363,9 @@
 0:203        Condition
 0:203        Compare Equal ( temp bool)
 0:203          'f' ( temp highp float)
-0:203          direct index (layout( column_major shared) temp highp float)
-0:203            values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
-0:203              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:203          direct index (layout( column_major shared) writeonly temp highp float)
+0:203            values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:203              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:203              Constant:
 0:203                1 (const int)
 0:203            Constant:
@@ -374,9 +377,9 @@
 0:205        Condition
 0:205        Compare Greater Than or Equal ( temp bool)
 0:205          'f' ( temp highp float)
-0:205          direct index (layout( column_major shared) temp highp float)
-0:205            values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
-0:205              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:205          direct index (layout( column_major shared) writeonly temp highp float)
+0:205            values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:205              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:205              Constant:
 0:205                1 (const int)
 0:205            Constant:
@@ -388,9 +391,9 @@
 0:207        'f' ( temp highp float)
 0:207        direct index ( temp highp float)
 0:207          Construct vec3 ( temp highp 3-component vector of float)
-0:207            direct index (layout( column_major shared) temp highp float)
-0:207              values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
-0:207                'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:207            direct index (layout( column_major shared) writeonly temp highp float)
+0:207              values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:207                'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:207                Constant:
 0:207                  1 (const int)
 0:207              Constant:
@@ -398,14 +401,14 @@
 0:207          Constant:
 0:207            0 (const int)
 0:208      Bitwise not ( temp highp int)
-0:208        value: direct index for structure (layout( column_major shared) buffer highp int)
-0:208          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:208        value: direct index for structure (layout( column_major shared) writeonly buffer highp int)
+0:208          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:208          Constant:
 0:208            0 (const int)
 0:209      move second child to first child ( temp highp float)
-0:209        direct index (layout( column_major shared) temp highp float)
-0:209          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
-0:209            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:209        direct index (layout( column_major shared) writeonly temp highp float)
+0:209          values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:209            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:209            Constant:
 0:209              1 (const int)
 0:209          Constant:
@@ -417,22 +420,22 @@
 0:?     Sequence
 0:221      move second child to first child ( temp highp float)
 0:221        'g' ( temp highp float)
-0:221        direct index (layout( column_major shared) temp highp float)
-0:221          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
-0:221            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:221        direct index (layout( column_major shared) writeonly temp highp float)
+0:221          values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:221            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:221            Constant:
 0:221              1 (const int)
 0:221          Constant:
 0:221            2 (const int)
 0:222      Bitwise not ( temp highp int)
-0:222        value: direct index for structure (layout( column_major shared) buffer highp int)
-0:222          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:222        value: direct index for structure (layout( column_major shared) writeonly buffer highp int)
+0:222          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:222          Constant:
 0:222            0 (const int)
 0:223      move second child to first child ( temp highp float)
-0:223        direct index (layout( column_major shared) temp highp float)
-0:223          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
-0:223            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:223        direct index (layout( column_major shared) writeonly temp highp float)
+0:223          values: direct index for structure (layout( column_major shared) writeonly buffer unsized 3-element array of highp float)
+0:223            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:223            Constant:
 0:223              1 (const int)
 0:223          Constant:
@@ -440,8 +443,8 @@
 0:223        Constant:
 0:223          3.400000
 0:224      move second child to first child ( temp highp int)
-0:224        value: direct index for structure (layout( column_major shared) buffer highp int)
-0:224          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:224        value: direct index for structure (layout( column_major shared) writeonly buffer highp int)
+0:224          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:224          Constant:
 0:224            0 (const int)
 0:224        Constant:
@@ -474,7 +477,7 @@
 0:?     'arrX' ( global 2-element array of highp int)
 0:?     'arrY' ( global 1-element array of highp int)
 0:?     'arrZ' ( global 4096-element array of highp int)
-0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) readonly buffer unsized 3-element array of highp float values})
 0:?     'v' ( buffer highp 4-component vector of float)
 0:?     'us2dbad' ( uniform mediump usampler2D)
 0:?     'us2d' ( uniform highp usampler2D)
@@ -513,7 +516,7 @@
 0:?     'badQ1' (layout( rgba32f) coherent volatile restrict uniform highp image2D)
 0:?     'badQ2' (layout( rgba8i) coherent volatile restrict uniform highp iimage2D)
 0:?     'badQ3' (layout( rgba16ui) coherent volatile restrict uniform highp uimage2D)
-0:?     'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:?     'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:?     'multio' (layout( column_major shared) buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 1-element array of highp float values})
 0:?     'inbi' ( in block{ in highp int a})
 0:?     'outbi' ( out block{ out highp int a})
@@ -568,7 +571,7 @@
 0:?     'arrX' ( global 2-element array of highp int)
 0:?     'arrY' ( global 1-element array of highp int)
 0:?     'arrZ' ( global 4096-element array of highp int)
-0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) readonly buffer unsized 3-element array of highp float values})
 0:?     'v' ( buffer highp 4-component vector of float)
 0:?     'us2dbad' ( uniform mediump usampler2D)
 0:?     'us2d' ( uniform highp usampler2D)
@@ -607,7 +610,7 @@
 0:?     'badQ1' (layout( rgba32f) coherent volatile restrict uniform highp image2D)
 0:?     'badQ2' (layout( rgba8i) coherent volatile restrict uniform highp iimage2D)
 0:?     'badQ3' (layout( rgba16ui) coherent volatile restrict uniform highp uimage2D)
-0:?     'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:?     'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) writeonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 3-element array of highp float values})
 0:?     'multio' (layout( column_major shared) buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 1-element array of highp float values})
 0:?     'inbi' ( in block{ in highp int a})
 0:?     'outbi' ( out block{ out highp int a})
diff --git a/Test/baseResults/310.frag.out b/Test/baseResults/310.frag.out
index 6763c0a..fab3d46 100644
--- a/Test/baseResults/310.frag.out
+++ b/Test/baseResults/310.frag.out
@@ -337,6 +337,16 @@
 0:60              'i' ( uniform mediump int)
 0:60            Construct bvec4 ( temp 4-component vector of bool)
 0:60              'b' ( temp bool)
+0:61      left-shift ( temp int)
+0:61        Constant:
+0:61          1 (const int)
+0:61        mix ( global uint)
+0:61          Constant:
+0:61            1 (const uint)
+0:61          Constant:
+0:61            1 (const uint)
+0:61          Constant:
+0:61            false (const bool)
 0:98  Function Definition: foots( ( global void)
 0:98    Function Parameters: 
 0:100    Sequence
diff --git a/Test/baseResults/310.inheritMemory.frag.out b/Test/baseResults/310.inheritMemory.frag.out
new file mode 100644
index 0000000..6d5528b
--- /dev/null
+++ b/Test/baseResults/310.inheritMemory.frag.out
@@ -0,0 +1,221 @@
+310.inheritMemory.frag
+Shader version: 310
+0:? Sequence
+0:18  Function Definition: non_ro_fun(f1[10]; ( global void)
+0:18    Function Parameters: 
+0:18      'buff' ( in 10-element array of mediump float)
+0:19  Function Definition: non_ro_funf(f1; ( global void)
+0:19    Function Parameters: 
+0:19      'el' ( in mediump float)
+0:20  Function Definition: non_ro_funS(struct-S-f1[10]1; ( global void)
+0:20    Function Parameters: 
+0:20      's' ( in structure{ global 10-element array of mediump float buff})
+0:24  Function Definition: main( ( global void)
+0:24    Function Parameters: 
+0:?     Sequence
+0:28      Function Call: non_ro_fun(f1[10]; ( global void)
+0:28        buff: direct index for structure ( global 10-element array of mediump float)
+0:28          's' ( temp structure{ global 10-element array of mediump float buff})
+0:28          Constant:
+0:28            0 (const int)
+0:29      Function Call: non_ro_funf(f1; ( global void)
+0:29        direct index ( temp mediump float)
+0:29          buff: direct index for structure ( global 10-element array of mediump float)
+0:29            's' ( temp structure{ global 10-element array of mediump float buff})
+0:29            Constant:
+0:29              0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:30      Function Call: non_ro_funS(struct-S-f1[10]1; ( global void)
+0:30        's' ( temp structure{ global 10-element array of mediump float buff})
+0:32      Function Call: non_ro_fun(f1[10]; ( global void)
+0:32        buff: direct index for structure (layout( column_major std430 offset=0) buffer 10-element array of mediump float)
+0:32          'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:32          Constant:
+0:32            0 (const int)
+0:33      Function Call: non_ro_fun(f1[10]; ( global void)
+0:33        buff: direct index for structure ( global 10-element array of mediump float)
+0:33          s: direct index for structure (layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff})
+0:33            'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:33            Constant:
+0:33              1 (const int)
+0:33          Constant:
+0:33            0 (const int)
+0:34      Function Call: non_ro_funf(f1; ( global void)
+0:34        direct index (layout( column_major std430 offset=0) temp mediump float)
+0:34          buff: direct index for structure (layout( column_major std430 offset=0) buffer 10-element array of mediump float)
+0:34            'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:34            Constant:
+0:34              0 (const int)
+0:34          Constant:
+0:34            3 (const int)
+0:35      Function Call: non_ro_funf(f1; ( global void)
+0:35        direct index ( temp mediump float)
+0:35          buff: direct index for structure ( global 10-element array of mediump float)
+0:35            s: direct index for structure (layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff})
+0:35              'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:35              Constant:
+0:35                1 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            3 (const int)
+0:36      Function Call: non_ro_funS(struct-S-f1[10]1; ( global void)
+0:36        s: direct index for structure (layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff})
+0:36          'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:36          Constant:
+0:36            1 (const int)
+0:38      Function Call: non_ro_fun(f1[10]; ( global void)
+0:38        buff_ro: direct index for structure (layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float)
+0:38          'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:38          Constant:
+0:38            0 (const int)
+0:39      Function Call: non_ro_fun(f1[10]; ( global void)
+0:39        buff: direct index for structure ( readonly global 10-element array of mediump float)
+0:39          s_ro: direct index for structure (layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff})
+0:39            'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:39            Constant:
+0:39              1 (const int)
+0:39          Constant:
+0:39            0 (const int)
+0:40      Function Call: non_ro_funf(f1; ( global void)
+0:40        direct index (layout( column_major std430 offset=0) readonly temp mediump float)
+0:40          buff_ro: direct index for structure (layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float)
+0:40            'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:40            Constant:
+0:40              0 (const int)
+0:40          Constant:
+0:40            3 (const int)
+0:41      Function Call: non_ro_funf(f1; ( global void)
+0:41        direct index ( readonly temp mediump float)
+0:41          buff: direct index for structure ( readonly global 10-element array of mediump float)
+0:41            s_ro: direct index for structure (layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff})
+0:41              'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:41              Constant:
+0:41                1 (const int)
+0:41            Constant:
+0:41              0 (const int)
+0:41          Constant:
+0:41            3 (const int)
+0:42      Function Call: non_ro_funS(struct-S-f1[10]1; ( global void)
+0:42        s_ro: direct index for structure (layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff})
+0:42          'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:42          Constant:
+0:42            1 (const int)
+0:?   Linker Objects
+0:?     'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:?     'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:?     'fragColor' ( out mediump 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 310
+0:? Sequence
+0:18  Function Definition: non_ro_fun(f1[10]; ( global void)
+0:18    Function Parameters: 
+0:18      'buff' ( in 10-element array of mediump float)
+0:19  Function Definition: non_ro_funf(f1; ( global void)
+0:19    Function Parameters: 
+0:19      'el' ( in mediump float)
+0:20  Function Definition: non_ro_funS(struct-S-f1[10]1; ( global void)
+0:20    Function Parameters: 
+0:20      's' ( in structure{ global 10-element array of mediump float buff})
+0:24  Function Definition: main( ( global void)
+0:24    Function Parameters: 
+0:?     Sequence
+0:28      Function Call: non_ro_fun(f1[10]; ( global void)
+0:28        buff: direct index for structure ( global 10-element array of mediump float)
+0:28          's' ( temp structure{ global 10-element array of mediump float buff})
+0:28          Constant:
+0:28            0 (const int)
+0:29      Function Call: non_ro_funf(f1; ( global void)
+0:29        direct index ( temp mediump float)
+0:29          buff: direct index for structure ( global 10-element array of mediump float)
+0:29            's' ( temp structure{ global 10-element array of mediump float buff})
+0:29            Constant:
+0:29              0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:30      Function Call: non_ro_funS(struct-S-f1[10]1; ( global void)
+0:30        's' ( temp structure{ global 10-element array of mediump float buff})
+0:32      Function Call: non_ro_fun(f1[10]; ( global void)
+0:32        buff: direct index for structure (layout( column_major std430 offset=0) buffer 10-element array of mediump float)
+0:32          'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:32          Constant:
+0:32            0 (const int)
+0:33      Function Call: non_ro_fun(f1[10]; ( global void)
+0:33        buff: direct index for structure ( global 10-element array of mediump float)
+0:33          s: direct index for structure (layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff})
+0:33            'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:33            Constant:
+0:33              1 (const int)
+0:33          Constant:
+0:33            0 (const int)
+0:34      Function Call: non_ro_funf(f1; ( global void)
+0:34        direct index (layout( column_major std430 offset=0) temp mediump float)
+0:34          buff: direct index for structure (layout( column_major std430 offset=0) buffer 10-element array of mediump float)
+0:34            'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:34            Constant:
+0:34              0 (const int)
+0:34          Constant:
+0:34            3 (const int)
+0:35      Function Call: non_ro_funf(f1; ( global void)
+0:35        direct index ( temp mediump float)
+0:35          buff: direct index for structure ( global 10-element array of mediump float)
+0:35            s: direct index for structure (layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff})
+0:35              'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:35              Constant:
+0:35                1 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            3 (const int)
+0:36      Function Call: non_ro_funS(struct-S-f1[10]1; ( global void)
+0:36        s: direct index for structure (layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff})
+0:36          'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:36          Constant:
+0:36            1 (const int)
+0:38      Function Call: non_ro_fun(f1[10]; ( global void)
+0:38        buff_ro: direct index for structure (layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float)
+0:38          'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:38          Constant:
+0:38            0 (const int)
+0:39      Function Call: non_ro_fun(f1[10]; ( global void)
+0:39        buff: direct index for structure ( readonly global 10-element array of mediump float)
+0:39          s_ro: direct index for structure (layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff})
+0:39            'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:39            Constant:
+0:39              1 (const int)
+0:39          Constant:
+0:39            0 (const int)
+0:40      Function Call: non_ro_funf(f1; ( global void)
+0:40        direct index (layout( column_major std430 offset=0) readonly temp mediump float)
+0:40          buff_ro: direct index for structure (layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float)
+0:40            'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:40            Constant:
+0:40              0 (const int)
+0:40          Constant:
+0:40            3 (const int)
+0:41      Function Call: non_ro_funf(f1; ( global void)
+0:41        direct index ( readonly temp mediump float)
+0:41          buff: direct index for structure ( readonly global 10-element array of mediump float)
+0:41            s_ro: direct index for structure (layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff})
+0:41              'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:41              Constant:
+0:41                1 (const int)
+0:41            Constant:
+0:41              0 (const int)
+0:41          Constant:
+0:41            3 (const int)
+0:42      Function Call: non_ro_funS(struct-S-f1[10]1; ( global void)
+0:42        s_ro: direct index for structure (layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff})
+0:42          'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:42          Constant:
+0:42            1 (const int)
+0:?   Linker Objects
+0:?     'ro_buffer' (layout( binding=2 column_major std430) readonly buffer block{layout( column_major std430 offset=0) readonly buffer 10-element array of mediump float buff_ro, layout( column_major std430 offset=40) readonly buffer structure{ global 10-element array of mediump float buff} s_ro})
+0:?     'non_ro_buffer' (layout( binding=2 column_major std430) buffer block{layout( column_major std430 offset=0) buffer 10-element array of mediump float buff, layout( column_major std430 offset=40) buffer structure{ global 10-element array of mediump float buff} s})
+0:?     'fragColor' ( out mediump 4-component vector of float)
+
diff --git a/Test/baseResults/310.tesc.out b/Test/baseResults/310.tesc.out
index 433a7dc..25ce6ee 100644
--- a/Test/baseResults/310.tesc.out
+++ b/Test/baseResults/310.tesc.out
@@ -37,19 +37,21 @@
 ERROR: 0:104: 'sample' : Reserved word. 
 ERROR: 0:106: 'vertices' : can only apply to a standalone qualifier 
 ERROR: 0:107: 'vertices' : inconsistent output number of vertices for array size of misSized
-ERROR: 0:133: 'gl_BoundingBoxOES' : required extension not requested: Possible extensions include:
-GL_EXT_primitive_bounding_box
-GL_OES_primitive_bounding_box
-ERROR: 0:142: '[' :  array index out of range '2'
-ERROR: 0:145: '' : array size required 
-ERROR: 0:161: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID 
-ERROR: 0:162: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID 
-ERROR: 0:165: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID 
-ERROR: 38 compilation errors.  No code generated.
+ERROR: 0:133: 'gl_BoundingBoxEXT' : required extension not requested: GL_EXT_primitive_bounding_box
+ERROR: 0:134: 'gl_BoundingBox' : undeclared identifier 
+ERROR: 0:143: '[' :  array index out of range '2'
+ERROR: 0:148: 'gl_BoundingBoxOES' : required extension not requested: GL_OES_primitive_bounding_box
+ERROR: 0:157: '[' :  array index out of range '2'
+ERROR: 0:160: '' : array size required 
+ERROR: 0:176: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID 
+ERROR: 0:177: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID 
+ERROR: 0:180: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID 
+ERROR: 41 compilation errors.  No code generated.
 
 
 Shader version: 310
 Requested GL_ARB_separate_shader_objects
+Requested GL_EXT_primitive_bounding_box
 Requested GL_OES_gpu_shader5
 Requested GL_OES_primitive_bounding_box
 Requested GL_OES_shader_io_blocks
@@ -70,8 +72,8 @@
 0:25        move second child to first child ( temp highp 4-component vector of float)
 0:25          'p' ( temp highp 4-component vector of float)
 0:25          gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:25            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:25              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:25            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:25              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:25              Constant:
 0:25                1 (const int)
 0:25            Constant:
@@ -80,8 +82,8 @@
 0:26        move second child to first child ( temp highp float)
 0:26          'ps' ( temp highp float)
 0:26          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:26            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:26              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:26            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:26              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:26              Constant:
 0:26                1 (const int)
 0:26            Constant:
@@ -209,8 +211,8 @@
 0:114        move second child to first child ( temp highp float)
 0:114          'ps' ( temp highp float)
 0:114          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:114            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:114              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:114            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:114              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:114              Constant:
 0:114                1 (const int)
 0:114            Constant:
@@ -241,113 +243,151 @@
 0:128          'd' ( noContraction temp highp float)
 0:128          'd' ( noContraction temp highp float)
 0:128          'd' ( noContraction temp highp float)
-0:131  Function Definition: bbBad( ( global void)
+0:131  Function Definition: bbextBad( ( global void)
 0:131    Function Parameters: 
 0:133    Sequence
-0:133      'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
-0:138  Function Definition: bb( ( global void)
-0:138    Function Parameters: 
-0:140    Sequence
-0:140      move second child to first child ( temp highp 4-component vector of float)
-0:140        direct index ( patch temp highp 4-component vector of float BoundingBox)
-0:140          'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
-0:140          Constant:
-0:140            0 (const int)
-0:140        Constant:
-0:140          0.000000
-0:140          0.000000
-0:140          0.000000
-0:140          0.000000
+0:133      'gl_BoundingBoxEXT' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:134      'gl_BoundingBox' ( temp float)
+0:139  Function Definition: bbext( ( global void)
+0:139    Function Parameters: 
+0:141    Sequence
 0:141      move second child to first child ( temp highp 4-component vector of float)
 0:141        direct index ( patch temp highp 4-component vector of float BoundingBox)
-0:141          'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:141          'gl_BoundingBoxEXT' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
 0:141          Constant:
-0:141            1 (const int)
+0:141            0 (const int)
 0:141        Constant:
-0:141          1.000000
-0:141          1.000000
-0:141          1.000000
-0:141          1.000000
+0:141          0.000000
+0:141          0.000000
+0:141          0.000000
+0:141          0.000000
 0:142      move second child to first child ( temp highp 4-component vector of float)
 0:142        direct index ( patch temp highp 4-component vector of float BoundingBox)
-0:142          'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:142          'gl_BoundingBoxEXT' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
 0:142          Constant:
-0:142            2 (const int)
+0:142            1 (const int)
 0:142        Constant:
-0:142          2.000000
-0:142          2.000000
-0:142          2.000000
-0:142          2.000000
-0:153  Function Definition: outputtingOutparam(i1; ( global void)
+0:142          1.000000
+0:142          1.000000
+0:142          1.000000
+0:142          1.000000
+0:143      move second child to first child ( temp highp 4-component vector of float)
+0:143        direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:143          'gl_BoundingBoxEXT' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:143          Constant:
+0:143            2 (const int)
+0:143        Constant:
+0:143          2.000000
+0:143          2.000000
+0:143          2.000000
+0:143          2.000000
+0:146  Function Definition: bbBad( ( global void)
+0:146    Function Parameters: 
+0:148    Sequence
+0:148      'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:153  Function Definition: bb( ( global void)
 0:153    Function Parameters: 
-0:153      'a' ( out highp int)
 0:155    Sequence
-0:155      move second child to first child ( temp highp int)
-0:155        'a' ( out highp int)
+0:155      move second child to first child ( temp highp 4-component vector of float)
+0:155        direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:155          'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:155          Constant:
+0:155            0 (const int)
 0:155        Constant:
-0:155          2 (const int)
-0:158  Function Definition: outputting( ( global void)
-0:158    Function Parameters: 
-0:160    Sequence
-0:160      move second child to first child ( temp highp int)
-0:160        indirect index ( temp highp int)
-0:160          'outa' ( out 4-element array of highp int)
-0:160          'gl_InvocationID' ( in highp int InvocationID)
-0:160        Constant:
-0:160          2 (const int)
-0:161      move second child to first child ( temp highp int)
-0:161        direct index ( temp highp int)
-0:161          'outa' ( out 4-element array of highp int)
-0:161          Constant:
-0:161            1 (const int)
-0:161        Constant:
-0:161          2 (const int)
-0:162      move second child to first child ( temp highp 4-component vector of float)
-0:162        gl_Position: direct index for structure ( out highp 4-component vector of float Position)
-0:162          direct index ( temp block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
-0:162            'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
-0:162            Constant:
-0:162              0 (const int)
-0:162          Constant:
-0:162            0 (const int)
-0:162        Constant:
-0:162          1.000000
-0:162          1.000000
-0:162          1.000000
-0:162          1.000000
-0:163      direct index ( temp highp int)
-0:163        'outa' ( out 4-element array of highp int)
-0:163        Constant:
-0:163          1 (const int)
-0:164      direct index ( temp block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
-0:164        'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
-0:164        Constant:
-0:164          0 (const int)
-0:165      Function Call: outputtingOutparam(i1; ( global void)
-0:165        direct index ( temp highp int)
-0:165          'outa' ( out 4-element array of highp int)
-0:165          Constant:
-0:165            0 (const int)
-0:166      Function Call: outputtingOutparam(i1; ( global void)
-0:166        indirect index ( temp highp int)
-0:166          'outa' ( out 4-element array of highp int)
-0:166          'gl_InvocationID' ( in highp int InvocationID)
-0:167      move second child to first child ( temp highp float)
-0:167        f: direct index for structure ( out highp float)
-0:167          direct index ( patch temp block{ out highp float f})
-0:167            'patchIName' ( patch out 4-element array of block{ out highp float f})
-0:167            Constant:
-0:167              1 (const int)
-0:167          Constant:
-0:167            0 (const int)
-0:167        Constant:
-0:167          3.140000
-0:168      move second child to first child ( temp highp int)
-0:168        indirect index ( temp highp int)
-0:168          'outa' ( out 4-element array of highp int)
-0:168          'gl_InvocationID' ( in highp int InvocationID)
-0:168        Constant:
-0:168          2 (const int)
+0:155          0.000000
+0:155          0.000000
+0:155          0.000000
+0:155          0.000000
+0:156      move second child to first child ( temp highp 4-component vector of float)
+0:156        direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:156          'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:156          Constant:
+0:156            1 (const int)
+0:156        Constant:
+0:156          1.000000
+0:156          1.000000
+0:156          1.000000
+0:156          1.000000
+0:157      move second child to first child ( temp highp 4-component vector of float)
+0:157        direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:157          'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:157          Constant:
+0:157            2 (const int)
+0:157        Constant:
+0:157          2.000000
+0:157          2.000000
+0:157          2.000000
+0:157          2.000000
+0:168  Function Definition: outputtingOutparam(i1; ( global void)
+0:168    Function Parameters: 
+0:168      'a' ( out highp int)
+0:170    Sequence
+0:170      move second child to first child ( temp highp int)
+0:170        'a' ( out highp int)
+0:170        Constant:
+0:170          2 (const int)
+0:173  Function Definition: outputting( ( global void)
+0:173    Function Parameters: 
+0:175    Sequence
+0:175      move second child to first child ( temp highp int)
+0:175        indirect index ( temp highp int)
+0:175          'outa' ( out 4-element array of highp int)
+0:175          'gl_InvocationID' ( in highp int InvocationID)
+0:175        Constant:
+0:175          2 (const int)
+0:176      move second child to first child ( temp highp int)
+0:176        direct index ( temp highp int)
+0:176          'outa' ( out 4-element array of highp int)
+0:176          Constant:
+0:176            1 (const int)
+0:176        Constant:
+0:176          2 (const int)
+0:177      move second child to first child ( temp highp 4-component vector of float)
+0:177        gl_Position: direct index for structure ( out highp 4-component vector of float Position)
+0:177          direct index ( temp block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
+0:177            'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
+0:177            Constant:
+0:177              0 (const int)
+0:177          Constant:
+0:177            0 (const int)
+0:177        Constant:
+0:177          1.000000
+0:177          1.000000
+0:177          1.000000
+0:177          1.000000
+0:178      direct index ( temp highp int)
+0:178        'outa' ( out 4-element array of highp int)
+0:178        Constant:
+0:178          1 (const int)
+0:179      direct index ( temp block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
+0:179        'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
+0:179        Constant:
+0:179          0 (const int)
+0:180      Function Call: outputtingOutparam(i1; ( global void)
+0:180        direct index ( temp highp int)
+0:180          'outa' ( out 4-element array of highp int)
+0:180          Constant:
+0:180            0 (const int)
+0:181      Function Call: outputtingOutparam(i1; ( global void)
+0:181        indirect index ( temp highp int)
+0:181          'outa' ( out 4-element array of highp int)
+0:181          'gl_InvocationID' ( in highp int InvocationID)
+0:182      move second child to first child ( temp highp float)
+0:182        f: direct index for structure ( out highp float)
+0:182          direct index ( patch temp block{ out highp float f})
+0:182            'patchIName' ( patch out 4-element array of block{ out highp float f})
+0:182            Constant:
+0:182              1 (const int)
+0:182          Constant:
+0:182            0 (const int)
+0:182        Constant:
+0:182          3.140000
+0:183      move second child to first child ( temp highp int)
+0:183        indirect index ( temp highp int)
+0:183          'outa' ( out 4-element array of highp int)
+0:183          'gl_InvocationID' ( in highp int InvocationID)
+0:183        Constant:
+0:183          2 (const int)
 0:?   Linker Objects
 0:?     'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
 0:?     'outa' ( out 4-element array of highp int)
@@ -381,6 +421,7 @@
 
 Shader version: 310
 Requested GL_ARB_separate_shader_objects
+Requested GL_EXT_primitive_bounding_box
 Requested GL_OES_gpu_shader5
 Requested GL_OES_primitive_bounding_box
 Requested GL_OES_shader_io_blocks
@@ -401,8 +442,8 @@
 0:25        move second child to first child ( temp highp 4-component vector of float)
 0:25          'p' ( temp highp 4-component vector of float)
 0:25          gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:25            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:25              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:25            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:25              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:25              Constant:
 0:25                1 (const int)
 0:25            Constant:
@@ -411,8 +452,8 @@
 0:26        move second child to first child ( temp highp float)
 0:26          'ps' ( temp highp float)
 0:26          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:26            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:26              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:26            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:26              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:26              Constant:
 0:26                1 (const int)
 0:26            Constant:
diff --git a/Test/baseResults/310.tese.out b/Test/baseResults/310.tese.out
index 9c7c679..2f23d9b 100644
--- a/Test/baseResults/310.tese.out
+++ b/Test/baseResults/310.tese.out
@@ -76,8 +76,8 @@
 0:36        move second child to first child ( temp highp 4-component vector of float)
 0:36          'p' ( temp highp 4-component vector of float)
 0:36          gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:36            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:36              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:36            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:36              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:36              Constant:
 0:36                1 (const int)
 0:36            Constant:
@@ -86,8 +86,8 @@
 0:37        move second child to first child ( temp highp float)
 0:37          'ps' ( temp highp float)
 0:37          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:37            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:37              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:37            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:37              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:37              Constant:
 0:37                1 (const int)
 0:37            Constant:
@@ -209,8 +209,8 @@
 0:36        move second child to first child ( temp highp 4-component vector of float)
 0:36          'p' ( temp highp 4-component vector of float)
 0:36          gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:36            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:36              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:36            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:36              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:36              Constant:
 0:36                1 (const int)
 0:36            Constant:
@@ -219,8 +219,8 @@
 0:37        move second child to first child ( temp highp float)
 0:37          'ps' ( temp highp float)
 0:37          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:37            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:37              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:37            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:37              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:37              Constant:
 0:37                1 (const int)
 0:37            Constant:
diff --git a/Test/baseResults/310.vert.out b/Test/baseResults/310.vert.out
index baf0987..a910e34 100644
--- a/Test/baseResults/310.vert.out
+++ b/Test/baseResults/310.vert.out
@@ -269,7 +269,7 @@
 0:117            'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
 0:118      move second child to first child ( temp highp 4-component vector of float)
 0:118        gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
-0:118          'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:118          'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position})
 0:118          Constant:
 0:118            0 (const uint)
 0:118        Constant:
@@ -278,7 +278,7 @@
 0:118          1.000000
 0:118          1.000000
 0:119      gl_PointSize: direct index for structure ( gl_PointSize highp void PointSize)
-0:119        'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:119        'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position})
 0:119        Constant:
 0:119          1 (const uint)
 0:153  Function Definition: pfooBad( ( global void)
@@ -940,7 +940,7 @@
 0:?     'anon@0' ( out block{layout( location=12) out highp int aAnon, layout( location=13) out highp 4-component vector of float vAnon})
 0:?     'aliased' (layout( location=12) smooth out highp int)
 0:?     'inbinst' ( in block{ in highp int a})
-0:?     'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:?     'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position})
 0:?     'smon' ( smooth out block{ out highp int i})
 0:?     'fmon' ( flat out block{ out highp int i})
 0:?     'cmon' ( centroid out block{ out highp int i})
@@ -1184,7 +1184,7 @@
 0:?     'anon@0' ( out block{layout( location=12) out highp int aAnon, layout( location=13) out highp 4-component vector of float vAnon})
 0:?     'aliased' (layout( location=12) smooth out highp int)
 0:?     'inbinst' ( in block{ in highp int a})
-0:?     'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:?     'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position})
 0:?     'smon' ( smooth out block{ out highp int i})
 0:?     'fmon' ( flat out block{ out highp int i})
 0:?     'cmon' ( centroid out block{ out highp int i})
diff --git a/Test/baseResults/320.comp.out b/Test/baseResults/320.comp.out
index 09cedd0..00865be 100644
--- a/Test/baseResults/320.comp.out
+++ b/Test/baseResults/320.comp.out
@@ -1,10 +1,43 @@
 320.comp
+ERROR: 0:8: 'dFdx' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 0:9: 'dFdy' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 0:10: 'fwidth' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 0:11: 'dFdxCoarse' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 0:12: 'dFdyCoarse' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 0:13: 'fwidthCoarse' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 0:14: 'dFdxFine' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 0:15: 'dFdyFine' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 0:16: 'fwidthFine' : required extension not requested: GL_NV_compute_shader_derivatives
+ERROR: 9 compilation errors.  No code generated.
+
+
 Shader version: 320
 local_size = (1, 1, 1)
-0:? Sequence
-0:3  Function Definition: main( ( global void)
-0:3    Function Parameters: 
+ERROR: node is still EOpNull!
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
+0:8    Sequence
+0:8      dPdx ( global highp float)
+0:8        'fX' ( global highp float)
+0:9      dPdy ( global highp float)
+0:9        'fY' ( global highp float)
+0:10      fwidth ( global highp float)
+0:10        'fX' ( global highp float)
+0:11      dPdxCoarse ( global highp float)
+0:11        'fX' ( global highp float)
+0:12      dPdyCoarse ( global highp float)
+0:12        'fY' ( global highp float)
+0:13      fwidthCoarse ( global highp float)
+0:13        'fX' ( global highp float)
+0:14      dPdxFine ( global highp float)
+0:14        'fX' ( global highp float)
+0:15      dPdyFine ( global highp float)
+0:15        'fY' ( global highp float)
+0:16      fwidthFine ( global highp float)
+0:16        'fX' ( global highp float)
 0:?   Linker Objects
+0:?     'fX' ( global highp float)
+0:?     'fY' ( global highp float)
 
 
 Linked compute stage:
@@ -12,8 +45,29 @@
 
 Shader version: 320
 local_size = (1, 1, 1)
-0:? Sequence
-0:3  Function Definition: main( ( global void)
-0:3    Function Parameters: 
+ERROR: node is still EOpNull!
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
+0:8    Sequence
+0:8      dPdx ( global highp float)
+0:8        'fX' ( global highp float)
+0:9      dPdy ( global highp float)
+0:9        'fY' ( global highp float)
+0:10      fwidth ( global highp float)
+0:10        'fX' ( global highp float)
+0:11      dPdxCoarse ( global highp float)
+0:11        'fX' ( global highp float)
+0:12      dPdyCoarse ( global highp float)
+0:12        'fY' ( global highp float)
+0:13      fwidthCoarse ( global highp float)
+0:13        'fX' ( global highp float)
+0:14      dPdxFine ( global highp float)
+0:14        'fX' ( global highp float)
+0:15      dPdyFine ( global highp float)
+0:15        'fY' ( global highp float)
+0:16      fwidthFine ( global highp float)
+0:16        'fX' ( global highp float)
 0:?   Linker Objects
+0:?     'fX' ( global highp float)
+0:?     'fY' ( global highp float)
 
diff --git a/Test/baseResults/320.tesc.out b/Test/baseResults/320.tesc.out
index 41ee29c..6bb52b3 100644
--- a/Test/baseResults/320.tesc.out
+++ b/Test/baseResults/320.tesc.out
@@ -37,16 +37,20 @@
 ERROR: 0:105: 'gl_PointSize' : required extension not requested: Possible extensions include:
 GL_EXT_tessellation_point_size
 GL_OES_tessellation_point_size
-ERROR: 0:123: '[' :  array index out of range '2'
-ERROR: 0:126: '' : array size required 
-ERROR: 0:142: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID 
-ERROR: 0:143: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID 
-ERROR: 0:146: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID 
-ERROR: 35 compilation errors.  No code generated.
+ERROR: 0:121: 'gl_BoundingBoxEXT' : required extension not requested: GL_EXT_primitive_bounding_box
+ERROR: 0:122: 'gl_BoundingBoxOES' : required extension not requested: GL_OES_primitive_bounding_box
+ERROR: 0:125: '[' :  array index out of range '2'
+ERROR: 0:137: '' : array size required 
+ERROR: 0:153: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID 
+ERROR: 0:154: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID 
+ERROR: 0:157: '[]' : tessellation-control per-vertex output l-value must be indexed with gl_InvocationID 
+ERROR: 37 compilation errors.  No code generated.
 
 
 Shader version: 320
 Requested GL_ARB_separate_shader_objects
+Requested GL_EXT_primitive_bounding_box
+Requested GL_OES_primitive_bounding_box
 vertices = 4
 ERROR: node is still EOpNull!
 0:13  Function Definition: main( ( global void)
@@ -62,8 +66,8 @@
 0:23        move second child to first child ( temp highp 4-component vector of float)
 0:23          'p' ( temp highp 4-component vector of float)
 0:23          gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:23            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:23              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:23            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:23              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:23              Constant:
 0:23                1 (const int)
 0:23            Constant:
@@ -72,8 +76,8 @@
 0:24        move second child to first child ( temp highp float)
 0:24          'ps' ( temp highp float)
 0:24          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:24            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:24              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:24            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:24              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:24              Constant:
 0:24                1 (const int)
 0:24            Constant:
@@ -192,8 +196,8 @@
 0:104        move second child to first child ( temp highp float)
 0:104          'ps' ( temp highp float)
 0:104          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:104            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:104              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:104            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:104              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:104              Constant:
 0:104                1 (const int)
 0:104            Constant:
@@ -229,7 +233,7 @@
 0:121    Sequence
 0:121      move second child to first child ( temp highp 4-component vector of float)
 0:121        direct index ( patch temp highp 4-component vector of float BoundingBox)
-0:121          'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:121          'gl_BoundingBoxEXT' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
 0:121          Constant:
 0:121            0 (const int)
 0:121        Constant:
@@ -241,92 +245,135 @@
 0:122        direct index ( patch temp highp 4-component vector of float BoundingBox)
 0:122          'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
 0:122          Constant:
-0:122            1 (const int)
+0:122            0 (const int)
 0:122        Constant:
-0:122          1.000000
-0:122          1.000000
-0:122          1.000000
-0:122          1.000000
+0:122          0.000000
+0:122          0.000000
+0:122          0.000000
+0:122          0.000000
 0:123      move second child to first child ( temp highp 4-component vector of float)
 0:123        direct index ( patch temp highp 4-component vector of float BoundingBox)
-0:123          'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:123          'gl_BoundingBox' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
 0:123          Constant:
-0:123            2 (const int)
+0:123            0 (const int)
 0:123        Constant:
-0:123          2.000000
-0:123          2.000000
-0:123          2.000000
-0:123          2.000000
-0:134  Function Definition: outputtingOutparam(i1; ( global void)
-0:134    Function Parameters: 
-0:134      'a' ( out highp int)
-0:136    Sequence
-0:136      move second child to first child ( temp highp int)
-0:136        'a' ( out highp int)
-0:136        Constant:
-0:136          2 (const int)
-0:139  Function Definition: outputting( ( global void)
-0:139    Function Parameters: 
-0:141    Sequence
-0:141      move second child to first child ( temp highp int)
-0:141        indirect index ( temp highp int)
-0:141          'outa' ( out 4-element array of highp int)
-0:141          'gl_InvocationID' ( in highp int InvocationID)
-0:141        Constant:
-0:141          2 (const int)
-0:142      move second child to first child ( temp highp int)
-0:142        direct index ( temp highp int)
-0:142          'outa' ( out 4-element array of highp int)
-0:142          Constant:
-0:142            1 (const int)
-0:142        Constant:
-0:142          2 (const int)
-0:143      move second child to first child ( temp highp 4-component vector of float)
-0:143        gl_Position: direct index for structure ( out highp 4-component vector of float Position)
-0:143          direct index ( temp block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
-0:143            'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
-0:143            Constant:
-0:143              0 (const int)
-0:143          Constant:
-0:143            0 (const int)
-0:143        Constant:
-0:143          1.000000
-0:143          1.000000
-0:143          1.000000
-0:143          1.000000
-0:144      direct index ( temp highp int)
-0:144        'outa' ( out 4-element array of highp int)
-0:144        Constant:
-0:144          1 (const int)
-0:145      direct index ( temp block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
-0:145        'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
-0:145        Constant:
-0:145          0 (const int)
-0:146      Function Call: outputtingOutparam(i1; ( global void)
-0:146        direct index ( temp highp int)
-0:146          'outa' ( out 4-element array of highp int)
-0:146          Constant:
-0:146            0 (const int)
-0:147      Function Call: outputtingOutparam(i1; ( global void)
-0:147        indirect index ( temp highp int)
-0:147          'outa' ( out 4-element array of highp int)
-0:147          'gl_InvocationID' ( in highp int InvocationID)
-0:148      move second child to first child ( temp highp float)
-0:148        f: direct index for structure ( out highp float)
-0:148          direct index ( patch temp block{ out highp float f})
-0:148            'patchIName' ( patch out 4-element array of block{ out highp float f})
-0:148            Constant:
-0:148              1 (const int)
-0:148          Constant:
-0:148            0 (const int)
-0:148        Constant:
-0:148          3.140000
-0:149      move second child to first child ( temp highp int)
-0:149        indirect index ( temp highp int)
-0:149          'outa' ( out 4-element array of highp int)
-0:149          'gl_InvocationID' ( in highp int InvocationID)
-0:149        Constant:
-0:149          2 (const int)
+0:123          1.000000
+0:123          1.000000
+0:123          1.000000
+0:123          1.000000
+0:124      move second child to first child ( temp highp 4-component vector of float)
+0:124        direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:124          'gl_BoundingBox' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:124          Constant:
+0:124            1 (const int)
+0:124        Constant:
+0:124          1.000000
+0:124          1.000000
+0:124          1.000000
+0:124          1.000000
+0:125      move second child to first child ( temp highp 4-component vector of float)
+0:125        direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:125          'gl_BoundingBox' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:125          Constant:
+0:125            2 (const int)
+0:125        Constant:
+0:125          2.000000
+0:125          2.000000
+0:125          2.000000
+0:125          2.000000
+0:131  Function Definition: bbext( ( global void)
+0:131    Function Parameters: 
+0:133    Sequence
+0:133      move second child to first child ( temp highp 4-component vector of float)
+0:133        direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:133          'gl_BoundingBoxEXT' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:133          Constant:
+0:133            1 (const int)
+0:133        Constant:
+0:133          0.000000
+0:133          0.000000
+0:133          0.000000
+0:133          0.000000
+0:134      move second child to first child ( temp highp 4-component vector of float)
+0:134        direct index ( patch temp highp 4-component vector of float BoundingBox)
+0:134          'gl_BoundingBoxOES' ( patch out 2-element array of highp 4-component vector of float BoundingBox)
+0:134          Constant:
+0:134            1 (const int)
+0:134        Constant:
+0:134          0.000000
+0:134          0.000000
+0:134          0.000000
+0:134          0.000000
+0:145  Function Definition: outputtingOutparam(i1; ( global void)
+0:145    Function Parameters: 
+0:145      'a' ( out highp int)
+0:147    Sequence
+0:147      move second child to first child ( temp highp int)
+0:147        'a' ( out highp int)
+0:147        Constant:
+0:147          2 (const int)
+0:150  Function Definition: outputting( ( global void)
+0:150    Function Parameters: 
+0:152    Sequence
+0:152      move second child to first child ( temp highp int)
+0:152        indirect index ( temp highp int)
+0:152          'outa' ( out 4-element array of highp int)
+0:152          'gl_InvocationID' ( in highp int InvocationID)
+0:152        Constant:
+0:152          2 (const int)
+0:153      move second child to first child ( temp highp int)
+0:153        direct index ( temp highp int)
+0:153          'outa' ( out 4-element array of highp int)
+0:153          Constant:
+0:153            1 (const int)
+0:153        Constant:
+0:153          2 (const int)
+0:154      move second child to first child ( temp highp 4-component vector of float)
+0:154        gl_Position: direct index for structure ( out highp 4-component vector of float Position)
+0:154          direct index ( temp block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
+0:154            'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
+0:154            Constant:
+0:154              0 (const int)
+0:154          Constant:
+0:154            0 (const int)
+0:154        Constant:
+0:154          1.000000
+0:154          1.000000
+0:154          1.000000
+0:154          1.000000
+0:155      direct index ( temp highp int)
+0:155        'outa' ( out 4-element array of highp int)
+0:155        Constant:
+0:155          1 (const int)
+0:156      direct index ( temp block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
+0:156        'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
+0:156        Constant:
+0:156          0 (const int)
+0:157      Function Call: outputtingOutparam(i1; ( global void)
+0:157        direct index ( temp highp int)
+0:157          'outa' ( out 4-element array of highp int)
+0:157          Constant:
+0:157            0 (const int)
+0:158      Function Call: outputtingOutparam(i1; ( global void)
+0:158        indirect index ( temp highp int)
+0:158          'outa' ( out 4-element array of highp int)
+0:158          'gl_InvocationID' ( in highp int InvocationID)
+0:159      move second child to first child ( temp highp float)
+0:159        f: direct index for structure ( out highp float)
+0:159          direct index ( patch temp block{ out highp float f})
+0:159            'patchIName' ( patch out 4-element array of block{ out highp float f})
+0:159            Constant:
+0:159              1 (const int)
+0:159          Constant:
+0:159            0 (const int)
+0:159        Constant:
+0:159          3.140000
+0:160      move second child to first child ( temp highp int)
+0:160        indirect index ( temp highp int)
+0:160          'outa' ( out 4-element array of highp int)
+0:160          'gl_InvocationID' ( in highp int InvocationID)
+0:160        Constant:
+0:160          2 (const int)
 0:?   Linker Objects
 0:?     'gl_out' ( out 4-element array of block{ out highp 4-component vector of float Position gl_Position,  out highp float PointSize gl_PointSize})
 0:?     'outa' ( out 4-element array of highp int)
@@ -360,6 +407,8 @@
 
 Shader version: 320
 Requested GL_ARB_separate_shader_objects
+Requested GL_EXT_primitive_bounding_box
+Requested GL_OES_primitive_bounding_box
 vertices = 4
 ERROR: node is still EOpNull!
 0:13  Function Definition: main( ( global void)
@@ -375,8 +424,8 @@
 0:23        move second child to first child ( temp highp 4-component vector of float)
 0:23          'p' ( temp highp 4-component vector of float)
 0:23          gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:23            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:23              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:23            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:23              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:23              Constant:
 0:23                1 (const int)
 0:23            Constant:
@@ -385,8 +434,8 @@
 0:24        move second child to first child ( temp highp float)
 0:24          'ps' ( temp highp float)
 0:24          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:24            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:24              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:24            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:24              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:24              Constant:
 0:24                1 (const int)
 0:24            Constant:
diff --git a/Test/baseResults/320.tese.out b/Test/baseResults/320.tese.out
index 93165ae..014eeb0 100644
--- a/Test/baseResults/320.tese.out
+++ b/Test/baseResults/320.tese.out
@@ -66,8 +66,8 @@
 0:32        move second child to first child ( temp highp 4-component vector of float)
 0:32          'p' ( temp highp 4-component vector of float)
 0:32          gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:32            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:32              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:32            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:32              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:32              Constant:
 0:32                1 (const int)
 0:32            Constant:
@@ -76,8 +76,8 @@
 0:33        move second child to first child ( temp highp float)
 0:33          'ps' ( temp highp float)
 0:33          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:33            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:33              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:33            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:33              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:33              Constant:
 0:33                1 (const int)
 0:33            Constant:
@@ -184,8 +184,8 @@
 0:32        move second child to first child ( temp highp 4-component vector of float)
 0:32          'p' ( temp highp 4-component vector of float)
 0:32          gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:32            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:32              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:32            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:32              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:32              Constant:
 0:32                1 (const int)
 0:32            Constant:
@@ -194,8 +194,8 @@
 0:33        move second child to first child ( temp highp float)
 0:33          'ps' ( temp highp float)
 0:33          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:33            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
-0:33              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:33            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:33              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
 0:33              Constant:
 0:33                1 (const int)
 0:33            Constant:
diff --git a/Test/baseResults/320.vert.out b/Test/baseResults/320.vert.out
index 2838ab8..bf127d4 100644
--- a/Test/baseResults/320.vert.out
+++ b/Test/baseResults/320.vert.out
@@ -49,7 +49,7 @@
 0:26            'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
 0:27      move second child to first child ( temp highp 4-component vector of float)
 0:27        gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
-0:27          'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:27          'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position})
 0:27          Constant:
 0:27            0 (const uint)
 0:27        Constant:
@@ -58,7 +58,7 @@
 0:27          1.000000
 0:27          1.000000
 0:28      gl_PointSize: direct index for structure ( gl_PointSize highp void PointSize)
-0:28        'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:28        'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position})
 0:28        Constant:
 0:28          1 (const uint)
 0:62  Function Definition: pfoo( ( global void)
@@ -623,7 +623,7 @@
 0:?     'anon@0' ( out block{layout( location=12) out highp int aAnon, layout( location=13) out highp 4-component vector of float vAnon})
 0:?     'aliased' (layout( location=12) smooth out highp int)
 0:?     'inbinst' ( in block{ in highp int a})
-0:?     'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:?     'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position})
 0:?     'smon' ( smooth out block{ out highp int i})
 0:?     'fmon' ( flat out block{ out highp int i})
 0:?     'cmon' ( centroid out block{ out highp int i})
@@ -709,7 +709,7 @@
 0:26            'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
 0:27      move second child to first child ( temp highp 4-component vector of float)
 0:27        gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
-0:27          'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:27          'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position})
 0:27          Constant:
 0:27            0 (const uint)
 0:27        Constant:
@@ -718,7 +718,7 @@
 0:27          1.000000
 0:27          1.000000
 0:28      gl_PointSize: direct index for structure ( gl_PointSize highp void PointSize)
-0:28        'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:28        'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position})
 0:28        Constant:
 0:28          1 (const uint)
 0:?   Linker Objects
@@ -726,7 +726,7 @@
 0:?     'anon@0' ( out block{layout( location=12) out highp int aAnon, layout( location=13) out highp 4-component vector of float vAnon})
 0:?     'aliased' (layout( location=12) smooth out highp int)
 0:?     'inbinst' ( in block{ in highp int a})
-0:?     'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position, })
+0:?     'anon@1' ( out block{ gl_Position highp 4-component vector of float Position gl_Position})
 0:?     'smon' ( smooth out block{ out highp int i})
 0:?     'fmon' ( flat out block{ out highp int i})
 0:?     'cmon' ( centroid out block{ out highp int i})
diff --git a/Test/baseResults/330.frag.out b/Test/baseResults/330.frag.out
index 7745631..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)
@@ -71,7 +74,7 @@
 0:23        move second child to first child ( temp 4-component vector of float)
 0:23          'c' ( temp 4-component vector of float)
 0:23          gl_Color: direct index for structure ( in 4-component vector of float Color)
-0:23            'anon@0' ( in block{ in 4-component vector of float Color gl_Color, })
+0:23            'anon@0' ( in block{ in 4-component vector of float Color gl_Color})
 0:23            Constant:
 0:23              2 (const uint)
 0:24      move second child to first child ( temp 4-component vector of float)
@@ -93,7 +96,7 @@
 0:?     'inVar' ( smooth in 4-component vector of float)
 0:?     'outVar' (layout( location=0 index=0) out 4-component vector of float)
 0:?     'varyingVar' ( smooth in 4-component vector of float)
-0:?     'anon@0' ( in block{ in 4-component vector of float Color gl_Color, })
+0:?     'anon@0' ( in block{ in 4-component vector of float Color gl_Color})
 0:?     'gl_name' ( in block{ in int gl_i})
 0:?     'start' ( const int)
 0:?       6 (const int)
@@ -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)
@@ -158,7 +165,7 @@
 0:?     'inVar' ( smooth in 4-component vector of float)
 0:?     'outVar' (layout( location=0 index=0) out 4-component vector of float)
 0:?     'varyingVar' ( smooth in 4-component vector of float)
-0:?     'anon@0' ( in block{ in 4-component vector of float Color gl_Color, })
+0:?     'anon@0' ( in block{ in 4-component vector of float Color gl_Color})
 0:?     'gl_name' ( in block{ in int gl_i})
 0:?     'start' ( const int)
 0:?       6 (const int)
@@ -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/410.geom.out b/Test/baseResults/410.geom.out
index ab5ad47..c38ba48 100644
--- a/Test/baseResults/410.geom.out
+++ b/Test/baseResults/410.geom.out
@@ -38,12 +38,12 @@
 0:30              0 (const int)
 0:31      move second child to first child ( temp float)
 0:31        gl_PointSize: direct index for structure (layout( stream=0) gl_PointSize float PointSize)
-0:31          'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize, })
+0:31          'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize})
 0:31          Constant:
 0:31            1 (const uint)
 0:31        'p' ( temp float)
 0:33      gl_Position: direct index for structure (layout( stream=0) gl_Position void Position)
-0:33        'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize, })
+0:33        'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize})
 0:33        Constant:
 0:33          0 (const uint)
 0:36  Function Definition: foo5( ( global float)
@@ -54,7 +54,7 @@
 0:38          4.000000
 0:?   Linker Objects
 0:?     'gl_in' ( in unsized 2-element array of block{ in float PointSize gl_PointSize})
-0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize, })
+0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize})
 
 
 Linked geometry stage:
@@ -78,5 +78,5 @@
 0:5          7 (const int)
 0:?   Linker Objects
 0:?     'gl_in' ( in 2-element array of block{ in float PointSize gl_PointSize})
-0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize, })
+0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize})
 
diff --git a/Test/baseResults/410.vert.out b/Test/baseResults/410.vert.out
index aacdf36..79268bc 100644
--- a/Test/baseResults/410.vert.out
+++ b/Test/baseResults/410.vert.out
@@ -3,6 +3,12 @@
 0:? Sequence
 0:7  Function Definition: main( ( global void)
 0:7    Function Parameters: 
+0:9    Sequence
+0:9      Sequence
+0:9        move second child to first child ( temp int)
+0:9          'test' ( temp int)
+0:9          Constant:
+0:9            16 (const int)
 0:?   Linker Objects
 0:?     'd' ( in double)
 0:?     'd3' ( in 3-component vector of double)
@@ -18,6 +24,12 @@
 0:? Sequence
 0:7  Function Definition: main( ( global void)
 0:7    Function Parameters: 
+0:9    Sequence
+0:9      Sequence
+0:9        move second child to first child ( temp int)
+0:9          'test' ( temp int)
+0:9          Constant:
+0:9            16 (const int)
 0:?   Linker Objects
 0:?     'd' ( in double)
 0:?     'd3' ( in 3-component vector of double)
diff --git a/Test/baseResults/420.frag.out b/Test/baseResults/420.frag.out
index ffb8f6d..05ded72 100644
--- a/Test/baseResults/420.frag.out
+++ b/Test/baseResults/420.frag.out
@@ -3,10 +3,12 @@
 ERROR: 0:11: 'layout qualifier' : can only apply depth layout to gl_FragDepth 
 ERROR: 0:12: 'gl_FragDepth' : cannot redeclare after use 
 ERROR: 0:14: 'atomic_uint' : array must be explicitly sized 
-ERROR: 4 compilation errors.  No code generated.
+ERROR: 0:17: 'imageSize' : required extension not requested: GL_ARB_shader_image_size
+ERROR: 5 compilation errors.  No code generated.
 
 
 Shader version: 420
+Requested GL_ARB_shader_image_size
 using depth_any
 ERROR: node is still EOpNull!
 0:6  Function Definition: main( ( global void)
@@ -16,16 +18,30 @@
 0:8        'gl_FragDepth' ( gl_FragDepth float FragDepth)
 0:8        Constant:
 0:8          0.300000
+0:17  Sequence
+0:17    move second child to first child ( temp 2-component vector of int)
+0:17      'iv2dim' ( global 2-component vector of int)
+0:17      imageQuerySize ( global 2-component vector of int)
+0:17        'i2D' ( writeonly uniform image2D)
+0:19  Sequence
+0:19    move second child to first child ( temp 2-component vector of int)
+0:19      'iv2dim1' ( global 2-component vector of int)
+0:19      imageQuerySize ( global 2-component vector of int)
+0:19        'i2D' ( writeonly uniform image2D)
 0:?   Linker Objects
 0:?     'gl_FragDepth' ( gl_FragDepth float FragDepth)
 0:?     'depth' ( smooth in float)
 0:?     'a' (layout( binding=0 offset=0) uniform unsized 1-element array of atomic_uint)
+0:?     'i2D' ( writeonly uniform image2D)
+0:?     'iv2dim' ( global 2-component vector of int)
+0:?     'iv2dim1' ( global 2-component vector of int)
 
 
 Linked fragment stage:
 
 
 Shader version: 420
+Requested GL_ARB_shader_image_size
 using depth_any
 ERROR: node is still EOpNull!
 0:6  Function Definition: main( ( global void)
@@ -35,8 +51,21 @@
 0:8        'gl_FragDepth' ( gl_FragDepth float FragDepth)
 0:8        Constant:
 0:8          0.300000
+0:17  Sequence
+0:17    move second child to first child ( temp 2-component vector of int)
+0:17      'iv2dim' ( global 2-component vector of int)
+0:17      imageQuerySize ( global 2-component vector of int)
+0:17        'i2D' ( writeonly uniform image2D)
+0:19  Sequence
+0:19    move second child to first child ( temp 2-component vector of int)
+0:19      'iv2dim1' ( global 2-component vector of int)
+0:19      imageQuerySize ( global 2-component vector of int)
+0:19        'i2D' ( writeonly uniform image2D)
 0:?   Linker Objects
 0:?     'gl_FragDepth' ( gl_FragDepth float FragDepth)
 0:?     'depth' ( smooth in float)
 0:?     'a' (layout( binding=0 offset=0) uniform 1-element array of atomic_uint)
+0:?     'i2D' ( writeonly uniform image2D)
+0:?     'iv2dim' ( global 2-component vector of int)
+0:?     'iv2dim1' ( global 2-component vector of int)
 
diff --git a/Test/baseResults/420.vert.out b/Test/baseResults/420.vert.out
index 22577ab..3d49327 100644
--- a/Test/baseResults/420.vert.out
+++ b/Test/baseResults/420.vert.out
@@ -8,7 +8,7 @@
 ERROR: 0:13: 'uniform' : too many storage qualifiers 
 ERROR: 0:18: '=' : global const initializers must be constant ' const int'
 ERROR: 0:20: 'const' : no qualifiers allowed for function return 
-ERROR: 0:27: '' : array size must be a constant integer expression 
+ERROR: 0:27: '' : array size must be a constant integer expression
 ERROR: 0:38: 'j' : undeclared identifier 
 ERROR: 0:38: '=' :  cannot convert from ' temp float' to ' temp int'
 ERROR: 0:39: 'k' : undeclared identifier 
@@ -31,14 +31,17 @@
 ERROR: 0:85: '' : vertex input cannot be further qualified 
 ERROR: 0:86: 'patch' : not supported in this stage: vertex
 ERROR: 0:100: '=' : global const initializers must be constant ' const int'
-ERROR: 0:101: '' : array size must be a constant integer expression 
+ERROR: 0:101: '' : array size must be a constant integer expression
 ERROR: 0:107: 'image variables not declared 'writeonly' and without a format layout qualifier' : not supported for this version or the enabled extensions 
 ERROR: 0:114: 'imageAtomicMin' : only supported on image with format r32i or r32ui 
 ERROR: 0:115: 'imageAtomicMax' : no matching overloaded function found 
 ERROR: 0:119: 'writeonly' : argument cannot drop memory qualifier when passed to formal parameter 
 ERROR: 0:122: '' : memory qualifiers cannot be used on this type 
 ERROR: 0:123: '' : memory qualifiers cannot be used on this type 
+ERROR: 0:134: 'format' : image formats must match 
 ERROR: 0:135: 'volatile' : argument cannot drop memory qualifier when passed to formal parameter 
+ERROR: 0:135: 'format' : image formats must match 
+ERROR: 0:136: 'format' : image formats must match 
 ERROR: 0:139: 'rg8i' : does not apply to unsigned integer images 
 ERROR: 0:140: 'rgba32i' : does not apply to floating point images 
 ERROR: 0:141: 'rgba32f' : does not apply to unsigned integer images 
@@ -52,7 +55,7 @@
 ERROR: 0:158: 'textureQueryLevels' : no matching overloaded function found 
 ERROR: 0:158: 'assign' :  cannot convert from ' const float' to ' temp int'
 WARNING: 0:161: '[]' : assuming binding count of one for compile-time checking of binding numbers for unsized array 
-ERROR: 51 compilation errors.  No code generated.
+ERROR: 54 compilation errors.  No code generated.
 
 
 Shader version: 420
@@ -278,7 +281,7 @@
 0:?     'sampb3' (layout( binding=80) uniform sampler2D)
 0:?     'sampb4' (layout( binding=31) uniform sampler2D)
 0:?     'sampb5' (layout( binding=79) uniform 2-element array of sampler2D)
-0:?     'anon@3' ( out block{ out 4-element array of float ClipDistance gl_ClipDistance, })
+0:?     'anon@3' ( out block{ out 4-element array of float ClipDistance gl_ClipDistance})
 0:?     'patchIn' ( patch in 4-component vector of float)
 0:?     'patchOut' ( smooth patch out 4-component vector of float)
 0:?     'comma0' ( temp int)
@@ -360,7 +363,7 @@
 0:?     'sampb3' (layout( binding=80) uniform sampler2D)
 0:?     'sampb4' (layout( binding=31) uniform sampler2D)
 0:?     'sampb5' (layout( binding=79) uniform 2-element array of sampler2D)
-0:?     'anon@3' ( out block{ out 4-element array of float ClipDistance gl_ClipDistance, })
+0:?     'anon@3' ( out block{ out 4-element array of float ClipDistance gl_ClipDistance})
 0:?     'patchIn' ( patch in 4-component vector of float)
 0:?     'patchOut' ( smooth patch out 4-component vector of float)
 0:?     'comma0' ( temp int)
diff --git a/Test/baseResults/430.comp.out b/Test/baseResults/430.comp.out
index 599cd8e..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) temp float)
-0:65          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of float)
-0:65            'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) 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) buffer unsized 3-element array of float)
-0:66          'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) 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)
@@ -140,7 +141,7 @@
 0:?     'arrX' ( global 2-element array of int)
 0:?     'arrY' ( global 1-element array of int)
 0:?     'arrZ' ( global 4096-element array of int)
-0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer unsized 3-element array of float values})
+0:?     '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:?     'roll' ( uniform double)
 0:?     'destTex' ( writeonly uniform image2D)
 0:?     'inbi' ( in block{ in int a})
@@ -201,7 +202,7 @@
 0:?     'arrX' ( global 2-element array of int)
 0:?     'arrY' ( global 1-element array of int)
 0:?     'arrZ' ( global 4096-element array of int)
-0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer unsized 3-element array of float values})
+0:?     '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:?     'roll' ( uniform double)
 0:?     'destTex' ( writeonly uniform image2D)
 0:?     'inbi' ( in block{ in int a})
diff --git a/Test/baseResults/430.vert.out b/Test/baseResults/430.vert.out
index f57a39c..4bac5fc 100644
--- a/Test/baseResults/430.vert.out
+++ b/Test/baseResults/430.vert.out
@@ -17,6 +17,7 @@
 ERROR: 0:51: 'start' : undeclared identifier 
 ERROR: 0:51: '' : constant expression required 
 ERROR: 0:51: 'layout-id value' : scalar integer expression required 
+ERROR: 0:51: 'location' : needs a literal integer 
 ERROR: 0:53: 'input block' : not supported in this stage: vertex
 ERROR: 0:54: 'location on block member' : not supported for this version or the enabled extensions 
 ERROR: 0:57: 'input block' : not supported in this stage: vertex
@@ -63,7 +64,7 @@
 ERROR: 0:221: 'assign' :  cannot convert from ' const float' to ' temp int'
 ERROR: 0:222: 'textureQueryLevels' : no matching overloaded function found 
 ERROR: 0:222: 'assign' :  cannot convert from ' const float' to ' temp int'
-ERROR: 64 compilation errors.  No code generated.
+ERROR: 65 compilation errors.  No code generated.
 
 
 Shader version: 430
@@ -77,7 +78,7 @@
 0:16      move second child to first child ( temp float)
 0:16        direct index ( temp float ClipDistance)
 0:16          gl_ClipDistance: direct index for structure ( out 17-element array of float ClipDistance)
-0:16            'anon@0' ( out block{ out 17-element array of float ClipDistance gl_ClipDistance, })
+0:16            'anon@0' ( out block{ out 17-element array of float ClipDistance gl_ClipDistance})
 0:16            Constant:
 0:16              2 (const uint)
 0:16          Constant:
@@ -205,7 +206,7 @@
 0:?     'uv4' (layout( location=4) uniform 4-component vector of float)
 0:?     'b1' (layout( location=2) in block{ in 4-component vector of float v})
 0:?     'b2' (layout( location=2) out block{ out 4-component vector of float v})
-0:?     'anon@0' ( out block{ out 17-element array of float ClipDistance gl_ClipDistance, })
+0:?     'anon@0' ( out block{ out 17-element array of float ClipDistance gl_ClipDistance})
 0:?     'cs' (layout( location=10) smooth out 2-element array of structure{ global 7-element array of 3X2 matrix of float m,  global float f})
 0:?     'cf' (layout( location=54) smooth out float)
 0:?     'cg' (layout( location=53) smooth out float)
@@ -280,7 +281,7 @@
 0:?     'uv4' (layout( location=4) uniform 4-component vector of float)
 0:?     'b1' (layout( location=2) in block{ in 4-component vector of float v})
 0:?     'b2' (layout( location=2) out block{ out 4-component vector of float v})
-0:?     'anon@0' ( out block{ out 17-element array of float ClipDistance gl_ClipDistance, })
+0:?     'anon@0' ( out block{ out 17-element array of float ClipDistance gl_ClipDistance})
 0:?     'cs' (layout( location=10) smooth out 2-element array of structure{ global 7-element array of 3X2 matrix of float m,  global float f})
 0:?     'cf' (layout( location=54) smooth out float)
 0:?     'cg' (layout( location=53) smooth out float)
diff --git a/Test/baseResults/440.vert.out b/Test/baseResults/440.vert.out
index 5a10e26..6c975c0 100644
--- a/Test/baseResults/440.vert.out
+++ b/Test/baseResults/440.vert.out
@@ -39,9 +39,9 @@
 ERROR: 0:152: 'xfb_offset' : overlapping offsets at offset 64 in buffer 0
 ERROR: 0:157: 'xfb_buffer' : buffer is too large: gl_MaxTransformFeedbackBuffers is 4
 ERROR: 0:158: 'xfb_offset' : must be a multiple of size of first component 
-ERROR: 0:159: 'xfb_offset' : type contains double; xfb_offset must be a multiple of 8 
+ERROR: 0:159: 'xfb_offset' : type contains double or 64-bit integer; xfb_offset must be a multiple of 8 
 ERROR: 0:161: 'xfb_offset' : must be a multiple of size of first component 
-ERROR: 0:162: 'xfb_offset' : type contains double; xfb_offset must be a multiple of 8 
+ERROR: 0:162: 'xfb_offset' : type contains double or 64-bit integer; xfb_offset must be a multiple of 8 
 ERROR: 0:166: 'xfb_buffer' : buffer is too large: gl_MaxTransformFeedbackBuffers is 4
 ERROR: 0:169: 'xfb_buffer' : buffer is too large: gl_MaxTransformFeedbackBuffers is 4
 ERROR: 0:169: 'xfb_stride' : 1/4 stride is too large: gl_MaxTransformFeedbackInterleavedComponents is 64
@@ -156,7 +156,7 @@
 0:?     'bbinst9' ( out block{layout( xfb_buffer=4 xfb_offset=1) out bool b, layout( xfb_buffer=4 xfb_offset=12) out structure{ global bool b,  global structure{ global int i,  global double d,  global float f} s,  global 2-component vector of float v2} t, layout( xfb_buffer=4 xfb_offset=52) out 3X3 matrix of float m3, layout( xfb_buffer=4 xfb_offset=90) out int i, layout( xfb_buffer=4 xfb_offset=98) out double d, layout( xfb_buffer=4 xfb_offset=108) out structure{ global int a} s})
 0:?     'bm' (layout( xfb_buffer=5 xfb_offset=0) smooth out float)
 0:?     'bbinst10' ( out block{layout( xfb_buffer=7 xfb_offset=0) out 4X4 matrix of double m1, layout( xfb_buffer=7 xfb_offset=128) out 4X4 matrix of double m2, layout( xfb_buffer=7 xfb_offset=256) out float f})
-0:?     'anon@0' ( out block{layout( xfb_buffer=3 xfb_offset=36) gl_Position 4-component vector of float Position gl_Position, layout( xfb_buffer=3 xfb_offset=32) gl_PointSize float PointSize gl_PointSize, })
+0:?     'anon@0' ( out block{layout( xfb_buffer=3 xfb_offset=36) gl_Position 4-component vector of float Position gl_Position, layout( xfb_buffer=3 xfb_offset=32) gl_PointSize float PointSize gl_PointSize})
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 
@@ -166,7 +166,7 @@
 ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point
 ERROR: Linking vertex stage: xfb_stride is too small to hold all buffer entries:
 ERROR:     xfb_buffer 0, xfb_stride 92, minimum stride needed: 96
-ERROR: Linking vertex stage: xfb_stride must be multiple of 8 for buffer holding a double:
+ERROR: Linking vertex stage: xfb_stride must be multiple of 8 for buffer holding a double or 64-bit integer:
 ERROR:     xfb_buffer 0, xfb_stride 92
 ERROR: Linking vertex stage: xfb_stride must be multiple of 4:
 ERROR:     xfb_buffer 5, xfb_stride 6
@@ -241,7 +241,7 @@
 0:?     'bbinst9' ( out block{layout( xfb_buffer=4 xfb_offset=1) out bool b, layout( xfb_buffer=4 xfb_offset=12) out structure{ global bool b,  global structure{ global int i,  global double d,  global float f} s,  global 2-component vector of float v2} t, layout( xfb_buffer=4 xfb_offset=52) out 3X3 matrix of float m3, layout( xfb_buffer=4 xfb_offset=90) out int i, layout( xfb_buffer=4 xfb_offset=98) out double d, layout( xfb_buffer=4 xfb_offset=108) out structure{ global int a} s})
 0:?     'bm' (layout( xfb_buffer=5 xfb_offset=0) smooth out float)
 0:?     'bbinst10' ( out block{layout( xfb_buffer=7 xfb_offset=0) out 4X4 matrix of double m1, layout( xfb_buffer=7 xfb_offset=128) out 4X4 matrix of double m2, layout( xfb_buffer=7 xfb_offset=256) out float f})
-0:?     'anon@0' ( out block{layout( xfb_buffer=3 xfb_offset=36) gl_Position 4-component vector of float Position gl_Position, layout( xfb_buffer=3 xfb_offset=32) gl_PointSize float PointSize gl_PointSize, })
+0:?     'anon@0' ( out block{layout( xfb_buffer=3 xfb_offset=36) gl_Position 4-component vector of float Position gl_Position, layout( xfb_buffer=3 xfb_offset=32) gl_PointSize float PointSize gl_PointSize})
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 
diff --git a/Test/baseResults/450.comp.out b/Test/baseResults/450.comp.out
index 4ae77cc..ce95f8d 100644
--- a/Test/baseResults/450.comp.out
+++ b/Test/baseResults/450.comp.out
@@ -1,14 +1,15 @@
 450.comp
 ERROR: 0:2: 'local_size_x' : must be at least 1 
-ERROR: 0:5: 'shared' : not allowed in nested scope 
-ERROR: 2 compilation errors.  No code generated.
+ERROR: 0:4: 'binding' : atomic_uint binding is too large 
+ERROR: 0:8: 'shared' : not allowed in nested scope 
+ERROR: 3 compilation errors.  No code generated.
 
 
 Shader version: 450
 local_size = (1, 1, 1)
 ERROR: node is still EOpNull!
-0:3  Function Definition: main( ( global void)
-0:3    Function Parameters: 
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
 0:?   Linker Objects
 
 
@@ -18,7 +19,7 @@
 Shader version: 450
 local_size = (1, 1, 1)
 ERROR: node is still EOpNull!
-0:3  Function Definition: main( ( global void)
-0:3    Function Parameters: 
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
 0:?   Linker Objects
 
diff --git a/Test/baseResults/460.frag.out b/Test/baseResults/460.frag.out
index 90c4837..8670e6e 100644
--- a/Test/baseResults/460.frag.out
+++ b/Test/baseResults/460.frag.out
@@ -56,7 +56,7 @@
 0:28  Function Definition: attExt( ( global void)
 0:28    Function Parameters: 
 0:30    Sequence
-0:30      Loop with condition not tested first: Dependency -3
+0:30      Loop with condition not tested first
 0:30        Loop Condition
 0:30        Constant:
 0:30          true (const bool)
diff --git a/Test/baseResults/460.vert.out b/Test/baseResults/460.vert.out
index 8fa659b..7f4093b 100644
--- a/Test/baseResults/460.vert.out
+++ b/Test/baseResults/460.vert.out
@@ -4,18 +4,18 @@
 0:7  Function Definition: main( ( global void)
 0:7    Function Parameters: 
 0:?     Sequence
-0:10      move second child to first child ( temp bool)
-0:10        'b1' ( temp bool)
-0:10        anyInvocation ( global bool)
-0:10          'b1' ( temp bool)
 0:11      move second child to first child ( temp bool)
 0:11        'b1' ( temp bool)
-0:11        allInvocations ( global bool)
+0:11        anyInvocation ( global bool)
 0:11          'b1' ( temp bool)
 0:12      move second child to first child ( temp bool)
 0:12        'b1' ( temp bool)
-0:12        allInvocationsEqual ( global bool)
+0:12        allInvocations ( global bool)
 0:12          'b1' ( temp bool)
+0:13      move second child to first child ( temp bool)
+0:13        'b1' ( temp bool)
+0:13        allInvocationsEqual ( global bool)
+0:13          'b1' ( temp bool)
 0:?   Linker Objects
 0:?     'i' ( global int)
 0:?     'f' ( global float)
@@ -31,18 +31,18 @@
 0:7  Function Definition: main( ( global void)
 0:7    Function Parameters: 
 0:?     Sequence
-0:10      move second child to first child ( temp bool)
-0:10        'b1' ( temp bool)
-0:10        anyInvocation ( global bool)
-0:10          'b1' ( temp bool)
 0:11      move second child to first child ( temp bool)
 0:11        'b1' ( temp bool)
-0:11        allInvocations ( global bool)
+0:11        anyInvocation ( global bool)
 0:11          'b1' ( temp bool)
 0:12      move second child to first child ( temp bool)
 0:12        'b1' ( temp bool)
-0:12        allInvocationsEqual ( global bool)
+0:12        allInvocations ( global bool)
 0:12          'b1' ( temp bool)
+0:13      move second child to first child ( temp bool)
+0:13        'b1' ( temp bool)
+0:13        allInvocationsEqual ( global bool)
+0:13          'b1' ( temp bool)
 0:?   Linker Objects
 0:?     'i' ( global int)
 0:?     'f' ( global float)
diff --git a/Test/baseResults/atomic_uint.frag.out b/Test/baseResults/atomic_uint.frag.out
index c705a06..a0c6773 100644
--- a/Test/baseResults/atomic_uint.frag.out
+++ b/Test/baseResults/atomic_uint.frag.out
@@ -1,64 +1,65 @@
 atomic_uint.frag
-ERROR: 0:10: 'atomic_uint' : samplers and atomic_uints cannot be output parameters 
-ERROR: 0:12: 'return' : type does not match, or is not convertible to, the function's return type 
-ERROR: 0:18: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: non_uniform_counter
-ERROR: 0:23: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
-ERROR: 0:28: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( binding=0 offset=0) uniform atomic_uint' and a right operand of type 'layout( binding=0 offset=0) uniform atomic_uint' (or there is no acceptable conversion)
-ERROR: 0:29: '-' :  wrong operand type no operation '-' exists that takes an operand of type layout( binding=0 offset=0) uniform atomic_uint (or there is no acceptable conversion)
-ERROR: 0:31: '[]' : scalar integer expression required 
-ERROR: 0:34: 'assign' :  l-value required "counter" (can't modify a uniform)
-ERROR: 0:34: 'assign' :  cannot convert from ' const int' to 'layout( binding=0 offset=0) uniform atomic_uint'
-ERROR: 0:37: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: acin
-ERROR: 0:38: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: acg
-ERROR: 0:47: 'offset' : atomic counters sharing the same offset: 12
-ERROR: 0:48: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
-ERROR: 13 compilation errors.  No code generated.
+ERROR: 0:4: 'counter' : redefinition 
+ERROR: 0:11: 'atomic_uint' : samplers and atomic_uints cannot be output parameters 
+ERROR: 0:13: 'return' : type does not match, or is not convertible to, the function's return type 
+ERROR: 0:19: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: non_uniform_counter
+ERROR: 0:24: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
+ERROR: 0:29: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( binding=0 offset=0) uniform atomic_uint' and a right operand of type 'layout( binding=0 offset=0) uniform atomic_uint' (or there is no acceptable conversion)
+ERROR: 0:30: '-' :  wrong operand type no operation '-' exists that takes an operand of type layout( binding=0 offset=0) uniform atomic_uint (or there is no acceptable conversion)
+ERROR: 0:32: '[]' : scalar integer expression required 
+ERROR: 0:35: 'assign' :  l-value required "counter" (can't modify a uniform)
+ERROR: 0:35: 'assign' :  cannot convert from ' const int' to 'layout( binding=0 offset=0) uniform atomic_uint'
+ERROR: 0:38: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: acin
+ERROR: 0:39: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: acg
+ERROR: 0:48: 'offset' : atomic counters sharing the same offset: 12
+ERROR: 0:49: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
+ERROR: 14 compilation errors.  No code generated.
 
 
 Shader version: 420
 ERROR: node is still EOpNull!
-0:5  Function Definition: func(au1; ( global uint)
-0:5    Function Parameters: 
-0:5      'c' ( in atomic_uint)
-0:7    Sequence
-0:7      Branch: Return with expression
-0:7        AtomicCounterIncrement ( global uint)
-0:7          'c' ( in atomic_uint)
-0:10  Function Definition: func2(au1; ( global uint)
-0:10    Function Parameters: 
-0:10      'c' ( out atomic_uint)
-0:12    Sequence
-0:12      Branch: Return with expression
-0:12        'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:6  Function Definition: func(au1; ( global uint)
+0:6    Function Parameters: 
+0:6      'c' ( in atomic_uint)
+0:8    Sequence
+0:8      Branch: Return with expression
+0:8        AtomicCounterIncrement ( global uint)
+0:8          'c' ( in atomic_uint)
+0:11  Function Definition: func2(au1; ( global uint)
+0:11    Function Parameters: 
+0:11      'c' ( out atomic_uint)
+0:13    Sequence
 0:13      Branch: Return with expression
-0:13        AtomicCounter ( global uint)
-0:13          'counter' (layout( binding=0 offset=0) uniform atomic_uint)
-0:16  Function Definition: main( ( global void)
-0:16    Function Parameters: 
+0:13        'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:14      Branch: Return with expression
+0:14        AtomicCounter ( global uint)
+0:14          'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:17  Function Definition: main( ( global void)
+0:17    Function Parameters: 
 0:?     Sequence
-0:19      Sequence
-0:19        move second child to first child ( temp uint)
-0:19          'val' ( temp uint)
-0:19          AtomicCounter ( global uint)
-0:19            'counter' (layout( binding=0 offset=0) uniform atomic_uint)
-0:20      AtomicCounterDecrement ( global uint)
-0:20        'counter' (layout( binding=0 offset=0) uniform atomic_uint)
-0:26  Function Definition: opac( ( global void)
-0:26    Function Parameters: 
-0:28    Sequence
-0:28      'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:20      Sequence
+0:20        move second child to first child ( temp uint)
+0:20          'val' ( temp uint)
+0:20          AtomicCounter ( global uint)
+0:20            'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:21      AtomicCounterDecrement ( global uint)
+0:21        'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:27  Function Definition: opac( ( global void)
+0:27    Function Parameters: 
+0:29    Sequence
 0:29      'counter' (layout( binding=0 offset=0) uniform atomic_uint)
-0:31      indirect index ( temp int)
-0:31        'a' ( temp 3-element array of int)
-0:31        'counter' (layout( binding=0 offset=0) uniform atomic_uint)
-0:32      direct index (layout( binding=1 offset=3) temp atomic_uint)
-0:32        'countArr' (layout( binding=1 offset=3) uniform 4-element array of atomic_uint)
-0:32        Constant:
-0:32          2 (const int)
-0:33      indirect index (layout( binding=1 offset=3) temp atomic_uint)
+0:30      'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:32      indirect index ( temp int)
+0:32        'a' ( temp 3-element array of int)
+0:32        'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:33      direct index (layout( binding=1 offset=3) temp atomic_uint)
 0:33        'countArr' (layout( binding=1 offset=3) uniform 4-element array of atomic_uint)
-0:33        'i' ( uniform int)
-0:34      'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:33        Constant:
+0:33          2 (const int)
+0:34      indirect index (layout( binding=1 offset=3) temp atomic_uint)
+0:34        'countArr' (layout( binding=1 offset=3) uniform 4-element array of atomic_uint)
+0:34        'i' ( uniform int)
+0:35      'counter' (layout( binding=0 offset=0) uniform atomic_uint)
 0:?   Linker Objects
 0:?     'counter' (layout( binding=0 offset=0) uniform atomic_uint)
 0:?     'countArr' (layout( binding=1 offset=3) uniform 4-element array of atomic_uint)
@@ -68,8 +69,8 @@
 0:?     'aNoBind' ( uniform atomic_uint)
 0:?     'aOffset' (layout( binding=0 offset=32) uniform atomic_uint)
 0:?     'bar3' (layout( binding=0 offset=4) uniform atomic_uint)
-0:?     'ac' (layout( binding=0 offset=8) uniform 3-element array of atomic_uint)
-0:?     'ad' (layout( binding=0 offset=20) uniform atomic_uint)
+0:?     'ac' (layout( binding=0 offset=8) uniform 2-element array of atomic_uint)
+0:?     'ad' (layout( binding=0 offset=16) uniform atomic_uint)
 0:?     'bar4' (layout( offset=8) uniform atomic_uint)
 0:?     'overlap' (layout( binding=0 offset=12) uniform atomic_uint)
 0:?     'bigBind' (layout( binding=20) uniform atomic_uint)
@@ -80,16 +81,16 @@
 
 Shader version: 420
 ERROR: node is still EOpNull!
-0:16  Function Definition: main( ( global void)
-0:16    Function Parameters: 
+0:17  Function Definition: main( ( global void)
+0:17    Function Parameters: 
 0:?     Sequence
-0:19      Sequence
-0:19        move second child to first child ( temp uint)
-0:19          'val' ( temp uint)
-0:19          AtomicCounter ( global uint)
-0:19            'counter' (layout( binding=0 offset=0) uniform atomic_uint)
-0:20      AtomicCounterDecrement ( global uint)
-0:20        'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:20      Sequence
+0:20        move second child to first child ( temp uint)
+0:20          'val' ( temp uint)
+0:20          AtomicCounter ( global uint)
+0:20            'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:21      AtomicCounterDecrement ( global uint)
+0:21        'counter' (layout( binding=0 offset=0) uniform atomic_uint)
 0:?   Linker Objects
 0:?     'counter' (layout( binding=0 offset=0) uniform atomic_uint)
 0:?     'countArr' (layout( binding=1 offset=3) uniform 4-element array of atomic_uint)
@@ -99,8 +100,8 @@
 0:?     'aNoBind' ( uniform atomic_uint)
 0:?     'aOffset' (layout( binding=0 offset=32) uniform atomic_uint)
 0:?     'bar3' (layout( binding=0 offset=4) uniform atomic_uint)
-0:?     'ac' (layout( binding=0 offset=8) uniform 3-element array of atomic_uint)
-0:?     'ad' (layout( binding=0 offset=20) uniform atomic_uint)
+0:?     'ac' (layout( binding=0 offset=8) uniform 2-element array of atomic_uint)
+0:?     'ad' (layout( binding=0 offset=16) uniform atomic_uint)
 0:?     'bar4' (layout( offset=8) uniform atomic_uint)
 0:?     'overlap' (layout( binding=0 offset=12) uniform atomic_uint)
 0:?     'bigBind' (layout( binding=20) uniform atomic_uint)
diff --git a/Test/baseResults/compoundsuffix.frag.hlsl b/Test/baseResults/compoundsuffix.frag.hlsl
index f47c97d..650d1d0 100644
--- a/Test/baseResults/compoundsuffix.frag.hlsl
+++ b/Test/baseResults/compoundsuffix.frag.hlsl
@@ -1,6 +1,6 @@
 compoundsuffix.frag.hlsl

 // Module Version 10000

-// Generated by (magic number): 80007

+// Generated by (magic number): 80008

 // Id's are bound by 22

 

                               Capability Shader

diff --git a/Test/baseResults/constErrors.frag.out b/Test/baseResults/constErrors.frag.out
index 0b2dc62..2177484 100644
--- a/Test/baseResults/constErrors.frag.out
+++ b/Test/baseResults/constErrors.frag.out
@@ -1,8 +1,8 @@
 constErrors.frag
 ERROR: 0:14: 'non-constant initializer' : not supported for this version or the enabled extensions 
-ERROR: 0:17: '' : array size must be a constant integer expression 
-ERROR: 0:18: '' : array size must be a constant integer expression 
-ERROR: 0:19: '' : array size must be a constant integer expression 
+ERROR: 0:17: '' : array size must be a constant integer expression
+ERROR: 0:18: '' : array size must be a constant integer expression
+ERROR: 0:19: '' : array size must be a constant integer expression
 ERROR: 0:27: '=' : global const initializers must be constant ' const structure{ global 3-component vector of float v3,  global 2-component vector of int iv2}'
 ERROR: 0:33: '=' : global const initializers must be constant ' const structure{ global 3-component vector of float v3,  global 2-component vector of int iv2,  global 2X4 matrix of float m}'
 ERROR: 6 compilation errors.  No code generated.
diff --git a/Test/baseResults/constFold.frag.out b/Test/baseResults/constFold.frag.out
index 2a48c42..045afc0 100644
--- a/Test/baseResults/constFold.frag.out
+++ b/Test/baseResults/constFold.frag.out
@@ -260,27 +260,27 @@
 0:120                1.000000
 0:120          Constant:
 0:120            3 (const int)
-0:126  Function Definition: foo3( ( global void)
-0:126    Function Parameters: 
-0:128    Sequence
-0:128      Sequence
-0:128        move second child to first child ( temp 3X2 matrix of float)
-0:128          'r32' ( temp 3X2 matrix of float)
-0:128          Constant:
-0:128            43.000000
-0:128            64.000000
-0:128            51.000000
-0:128            76.000000
-0:128            59.000000
-0:128            88.000000
-0:138  Function Definition: foo4( ( global void)
-0:138    Function Parameters: 
-0:140    Sequence
-0:140      Sequence
-0:140        move second child to first child ( temp int)
-0:140          'a' ( temp int)
-0:140          Constant:
-0:140            9 (const int)
+0:129  Function Definition: foo3( ( global void)
+0:129    Function Parameters: 
+0:131    Sequence
+0:131      Sequence
+0:131        move second child to first child ( temp 3X2 matrix of float)
+0:131          'r32' ( temp 3X2 matrix of float)
+0:131          Constant:
+0:131            43.000000
+0:131            64.000000
+0:131            51.000000
+0:131            76.000000
+0:131            59.000000
+0:131            88.000000
+0:141  Function Definition: foo4( ( global void)
+0:141    Function Parameters: 
+0:143    Sequence
+0:143      Sequence
+0:143        move second child to first child ( temp int)
+0:143          'a' ( temp int)
+0:143          Constant:
+0:143            9 (const int)
 0:?   Linker Objects
 0:?     'a' ( const int)
 0:?       1 (const int)
@@ -367,6 +367,29 @@
 0:?       13.000000
 0:?       14.000000
 0:?       15.000000
+0:?     'm22' ( const 2X2 matrix of float)
+0:?       1.000000
+0:?       2.000000
+0:?       3.000000
+0:?       4.000000
+0:?     'mm34' ( const 3X4 matrix of float)
+0:?       7.000000
+0:?       0.000000
+0:?       0.000000
+0:?       0.000000
+0:?       0.000000
+0:?       7.000000
+0:?       0.000000
+0:?       0.000000
+0:?       0.000000
+0:?       0.000000
+0:?       7.000000
+0:?       0.000000
+0:?     'mv4' ( const 4-component vector of float)
+0:?       1.000000
+0:?       2.000000
+0:?       3.000000
+0:?       4.000000
 0:?     'a0' ( const 3-element array of structure{ global int i,  global float f,  global bool b})
 0:?       3 (const int)
 0:?       2.000000
@@ -635,6 +658,29 @@
 0:?       13.000000
 0:?       14.000000
 0:?       15.000000
+0:?     'm22' ( const 2X2 matrix of float)
+0:?       1.000000
+0:?       2.000000
+0:?       3.000000
+0:?       4.000000
+0:?     'mm34' ( const 3X4 matrix of float)
+0:?       7.000000
+0:?       0.000000
+0:?       0.000000
+0:?       0.000000
+0:?       0.000000
+0:?       7.000000
+0:?       0.000000
+0:?       0.000000
+0:?       0.000000
+0:?       0.000000
+0:?       7.000000
+0:?       0.000000
+0:?     'mv4' ( const 4-component vector of float)
+0:?       1.000000
+0:?       2.000000
+0:?       3.000000
+0:?       4.000000
 0:?     'a0' ( const 3-element array of structure{ global int i,  global float f,  global bool b})
 0:?       3 (const int)
 0:?       2.000000
diff --git a/Test/baseResults/constantUnaryConversion.comp.out b/Test/baseResults/constantUnaryConversion.comp.out
index 4117e93..fcaf6f2 100644
--- a/Test/baseResults/constantUnaryConversion.comp.out
+++ b/Test/baseResults/constantUnaryConversion.comp.out
@@ -9,17 +9,17 @@
 0:?     'bool_init' ( const bool)
 0:?       true (const bool)
 0:?     'int8_t_init' ( const int8_t)
-0:?       -1 (const int)
+0:?       -1 (const int8_t)
 0:?     'int16_t_init' ( const int16_t)
-0:?       -2 (const int)
+0:?       -2 (const int16_t)
 0:?     'int32_t_init' ( const int)
 0:?       -3 (const int)
 0:?     'int64_t_init' ( const int64_t)
 0:?       -4 (const int64_t)
 0:?     'uint8_t_init' ( const uint8_t)
-0:?       1 (const int)
+0:?       1 (const uint8_t)
 0:?     'uint16_t_init' ( const uint16_t)
-0:?       2 (const int)
+0:?       2 (const uint16_t)
 0:?     'uint32_t_init' ( const uint)
 0:?       3 (const uint)
 0:?     'uint64_t_init' ( const uint64_t)
@@ -33,17 +33,17 @@
 0:?     'bool_to_bool' ( const bool)
 0:?       true (const bool)
 0:?     'int8_t_to_bool' ( const bool)
-0:?       -1 (const int)
+0:?       true (const bool)
 0:?     'int16_t_to_bool' ( const bool)
-0:?       -2 (const int)
+0:?       true (const bool)
 0:?     'int32_t_to_bool' ( const bool)
 0:?       true (const bool)
 0:?     'int64_t_to_bool' ( const bool)
 0:?       true (const bool)
 0:?     'uint8_t_to_bool' ( const bool)
-0:?       1 (const int)
+0:?       true (const bool)
 0:?     'uint16_t_to_bool' ( const bool)
-0:?       2 (const int)
+0:?       true (const bool)
 0:?     'uint32_t_to_bool' ( const bool)
 0:?       true (const bool)
 0:?     'uint64_t_to_bool' ( const bool)
@@ -55,53 +55,53 @@
 0:?     'float64_t_to_bool' ( const bool)
 0:?       true (const bool)
 0:?     'bool_to_int8_t' ( const int8_t)
-0:?       true (const bool)
+0:?       1 (const int8_t)
 0:?     'int8_t_to_int8_t' ( const int8_t)
-0:?       -1 (const int)
+0:?       -1 (const int8_t)
 0:?     'int16_t_to_int8_t' ( const int8_t)
-0:?       -2 (const int)
+0:?       -2 (const int8_t)
 0:?     'int32_t_to_int8_t' ( const int8_t)
-0:?       -3 (const int)
+0:?       -3 (const int8_t)
 0:?     'int64_t_to_int8_t' ( const int8_t)
-0:?       -4 (const int64_t)
+0:?       -4 (const int8_t)
 0:?     'uint8_t_to_int8_t' ( const int8_t)
-0:?       1 (const int)
+0:?       1 (const int8_t)
 0:?     'uint16_t_to_int8_t' ( const int8_t)
-0:?       2 (const int)
+0:?       2 (const int8_t)
 0:?     'uint32_t_to_int8_t' ( const int8_t)
-0:?       3 (const uint)
+0:?       3 (const int8_t)
 0:?     'uint64_t_to_int8_t' ( const int8_t)
-0:?       4 (const uint64_t)
+0:?       4 (const int8_t)
 0:?     'float16_t_to_int8_t' ( const int8_t)
-0:?       42.000000
+0:?       42 (const int8_t)
 0:?     'float32_t_to_int8_t' ( const int8_t)
-0:?       13.000000
+0:?       13 (const int8_t)
 0:?     'float64_t_to_int8_t' ( const int8_t)
-0:?       -4.000000
+0:?       -4 (const int8_t)
 0:?     'bool_to_int16_t' ( const int16_t)
-0:?       true (const bool)
+0:?       1 (const int16_t)
 0:?     'int8_t_to_int16_t' ( const int16_t)
-0:?       -1 (const int)
+0:?       -1 (const int16_t)
 0:?     'int16_t_to_int16_t' ( const int16_t)
-0:?       -2 (const int)
+0:?       -2 (const int16_t)
 0:?     'int32_t_to_int16_t' ( const int16_t)
-0:?       -3 (const int)
+0:?       -3 (const int16_t)
 0:?     'int64_t_to_int16_t' ( const int16_t)
-0:?       -4 (const int64_t)
+0:?       -4 (const int16_t)
 0:?     'uint8_t_to_int16_t' ( const int16_t)
-0:?       1 (const int)
+0:?       1 (const int16_t)
 0:?     'uint16_t_to_int16_t' ( const int16_t)
-0:?       2 (const int)
+0:?       2 (const int16_t)
 0:?     'uint32_t_to_int16_t' ( const int16_t)
-0:?       3 (const uint)
+0:?       3 (const int16_t)
 0:?     'uint64_t_to_int16_t' ( const int16_t)
-0:?       4 (const uint64_t)
+0:?       4 (const int16_t)
 0:?     'float16_t_to_int16_t' ( const int16_t)
-0:?       42.000000
+0:?       42 (const int16_t)
 0:?     'float32_t_to_int16_t' ( const int16_t)
-0:?       13.000000
+0:?       13 (const int16_t)
 0:?     'float64_t_to_int16_t' ( const int16_t)
-0:?       -4.000000
+0:?       -4 (const int16_t)
 0:?     'bool_to_int32_t' ( const int)
 0:?       1 (const int)
 0:?     'int8_t_to_int32_t' ( const int)
@@ -129,17 +129,17 @@
 0:?     'bool_to_int64_t' ( const int64_t)
 0:?       1 (const int64_t)
 0:?     'int8_t_to_int64_t' ( const int64_t)
-0:?       -1 (const int)
+0:?       -1 (const int64_t)
 0:?     'int16_t_to_int64_t' ( const int64_t)
-0:?       -2 (const int)
+0:?       -2 (const int64_t)
 0:?     'int32_t_to_int64_t' ( const int64_t)
 0:?       -3 (const int64_t)
 0:?     'int64_t_to_int64_t' ( const int64_t)
 0:?       -4 (const int64_t)
 0:?     'uint8_t_to_int64_t' ( const int64_t)
-0:?       1 (const int)
+0:?       1 (const int64_t)
 0:?     'uint16_t_to_int64_t' ( const int64_t)
-0:?       2 (const int)
+0:?       2 (const int64_t)
 0:?     'uint32_t_to_int64_t' ( const int64_t)
 0:?       3 (const int64_t)
 0:?     'uint64_t_to_int64_t' ( const int64_t)
@@ -151,67 +151,67 @@
 0:?     'float64_t_to_int64_t' ( const int64_t)
 0:?       -4 (const int64_t)
 0:?     'bool_to_uint8_t' ( const uint8_t)
-0:?       true (const bool)
+0:?       1 (const uint8_t)
 0:?     'int8_t_to_uint8_t' ( const uint8_t)
-0:?       -1 (const int)
+0:?       255 (const uint8_t)
 0:?     'int16_t_to_uint8_t' ( const uint8_t)
-0:?       -2 (const int)
+0:?       254 (const uint8_t)
 0:?     'int32_t_to_uint8_t' ( const uint8_t)
-0:?       -3 (const int)
+0:?       253 (const uint8_t)
 0:?     'int64_t_to_uint8_t' ( const uint8_t)
-0:?       -4 (const int64_t)
+0:?       252 (const uint8_t)
 0:?     'uint8_t_to_uint8_t' ( const uint8_t)
-0:?       1 (const int)
+0:?       1 (const uint8_t)
 0:?     'uint16_t_to_uint8_t' ( const uint8_t)
-0:?       2 (const int)
+0:?       2 (const uint8_t)
 0:?     'uint32_t_to_uint8_t' ( const uint8_t)
-0:?       3 (const uint)
+0:?       3 (const uint8_t)
 0:?     'uint64_t_to_uint8_t' ( const uint8_t)
-0:?       4 (const uint64_t)
+0:?       4 (const uint8_t)
 0:?     'float16_t_to_uint8_t' ( const uint8_t)
-0:?       42.000000
+0:?       42 (const uint8_t)
 0:?     'float32_t_to_uint8_t' ( const uint8_t)
-0:?       13.000000
+0:?       13 (const uint8_t)
 0:?     'float64_t_to_uint8_t' ( const uint8_t)
-0:?       -4.000000
+0:?       252 (const uint8_t)
 0:?     'bool_to_uint16_t' ( const uint16_t)
-0:?       true (const bool)
+0:?       1 (const uint16_t)
 0:?     'int8_t_to_uint16_t' ( const uint16_t)
-0:?       -1 (const int)
+0:?       65535 (const uint16_t)
 0:?     'int16_t_to_uint16_t' ( const uint16_t)
-0:?       -2 (const int)
+0:?       65534 (const uint16_t)
 0:?     'int32_t_to_uint16_t' ( const uint16_t)
-0:?       -3 (const int)
+0:?       65533 (const uint16_t)
 0:?     'int64_t_to_uint16_t' ( const uint16_t)
-0:?       -4 (const int64_t)
+0:?       65532 (const uint16_t)
 0:?     'uint8_t_to_uint16_t' ( const uint16_t)
-0:?       1 (const int)
+0:?       1 (const uint16_t)
 0:?     'uint16_t_to_uint16_t' ( const uint16_t)
-0:?       2 (const int)
+0:?       2 (const uint16_t)
 0:?     'uint32_t_to_uint16_t' ( const uint16_t)
-0:?       3 (const uint)
+0:?       3 (const uint16_t)
 0:?     'uint64_t_to_uint16_t' ( const uint16_t)
-0:?       4 (const uint64_t)
+0:?       4 (const uint16_t)
 0:?     'float16_t_to_uint16_t' ( const uint16_t)
-0:?       42.000000
+0:?       42 (const uint16_t)
 0:?     'float32_t_to_uint16_t' ( const uint16_t)
-0:?       13.000000
+0:?       13 (const uint16_t)
 0:?     'float64_t_to_uint16_t' ( const uint16_t)
-0:?       -4.000000
+0:?       65532 (const uint16_t)
 0:?     'bool_to_uint32_t' ( const uint)
 0:?       1 (const uint)
 0:?     'int8_t_to_uint32_t' ( const uint)
-0:?       -1 (const int)
+0:?       4294967295 (const uint)
 0:?     'int16_t_to_uint32_t' ( const uint)
-0:?       -2 (const int)
+0:?       4294967294 (const uint)
 0:?     'int32_t_to_uint32_t' ( const uint)
 0:?       4294967293 (const uint)
 0:?     'int64_t_to_uint32_t' ( const uint)
 0:?       4294967292 (const uint)
 0:?     'uint8_t_to_uint32_t' ( const uint)
-0:?       1 (const int)
+0:?       1 (const uint)
 0:?     'uint16_t_to_uint32_t' ( const uint)
-0:?       2 (const int)
+0:?       2 (const uint)
 0:?     'uint32_t_to_uint32_t' ( const uint)
 0:?       3 (const uint)
 0:?     'uint64_t_to_uint32_t' ( const uint)
@@ -225,17 +225,17 @@
 0:?     'bool_to_uint64_t' ( const uint64_t)
 0:?       1 (const uint64_t)
 0:?     'int8_t_to_uint64_t' ( const uint64_t)
-0:?       -1 (const int)
+0:?       18446744073709551615 (const uint64_t)
 0:?     'int16_t_to_uint64_t' ( const uint64_t)
-0:?       -2 (const int)
+0:?       18446744073709551614 (const uint64_t)
 0:?     'int32_t_to_uint64_t' ( const uint64_t)
 0:?       18446744073709551613 (const uint64_t)
 0:?     'int64_t_to_uint64_t' ( const uint64_t)
 0:?       18446744073709551612 (const uint64_t)
 0:?     'uint8_t_to_uint64_t' ( const uint64_t)
-0:?       1 (const int)
+0:?       1 (const uint64_t)
 0:?     'uint16_t_to_uint64_t' ( const uint64_t)
-0:?       2 (const int)
+0:?       2 (const uint64_t)
 0:?     'uint32_t_to_uint64_t' ( const uint64_t)
 0:?       3 (const uint64_t)
 0:?     'uint64_t_to_uint64_t' ( const uint64_t)
@@ -249,17 +249,17 @@
 0:?     'bool_to_float16_t' ( const float16_t)
 0:?       1.000000
 0:?     'int8_t_to_float16_t' ( const float16_t)
-0:?       -1 (const int)
+0:?       -1.000000
 0:?     'int16_t_to_float16_t' ( const float16_t)
-0:?       -2 (const int)
+0:?       -2.000000
 0:?     'int32_t_to_float16_t' ( const float16_t)
 0:?       -3.000000
 0:?     'int64_t_to_float16_t' ( const float16_t)
 0:?       -4.000000
 0:?     'uint8_t_to_float16_t' ( const float16_t)
-0:?       1 (const int)
+0:?       1.000000
 0:?     'uint16_t_to_float16_t' ( const float16_t)
-0:?       2 (const int)
+0:?       2.000000
 0:?     'uint32_t_to_float16_t' ( const float16_t)
 0:?       3.000000
 0:?     'uint64_t_to_float16_t' ( const float16_t)
@@ -273,17 +273,17 @@
 0:?     'bool_to_float32_t' ( const float)
 0:?       1.000000
 0:?     'int8_t_to_float32_t' ( const float)
-0:?       -1 (const int)
+0:?       -1.000000
 0:?     'int16_t_to_float32_t' ( const float)
-0:?       -2 (const int)
+0:?       -2.000000
 0:?     'int32_t_to_float32_t' ( const float)
 0:?       -3.000000
 0:?     'int64_t_to_float32_t' ( const float)
 0:?       -4.000000
 0:?     'uint8_t_to_float32_t' ( const float)
-0:?       1 (const int)
+0:?       1.000000
 0:?     'uint16_t_to_float32_t' ( const float)
-0:?       2 (const int)
+0:?       2.000000
 0:?     'uint32_t_to_float32_t' ( const float)
 0:?       3.000000
 0:?     'uint64_t_to_float32_t' ( const float)
@@ -297,17 +297,17 @@
 0:?     'bool_to_float64_t' ( const double)
 0:?       1.000000
 0:?     'int8_t_to_float64_t' ( const double)
-0:?       -1 (const int)
+0:?       -1.000000
 0:?     'int16_t_to_float64_t' ( const double)
-0:?       -2 (const int)
+0:?       -2.000000
 0:?     'int32_t_to_float64_t' ( const double)
 0:?       -3.000000
 0:?     'int64_t_to_float64_t' ( const double)
 0:?       -4.000000
 0:?     'uint8_t_to_float64_t' ( const double)
-0:?       1 (const int)
+0:?       1.000000
 0:?     'uint16_t_to_float64_t' ( const double)
-0:?       2 (const int)
+0:?       2.000000
 0:?     'uint32_t_to_float64_t' ( const double)
 0:?       3.000000
 0:?     'uint64_t_to_float64_t' ( const double)
@@ -333,17 +333,17 @@
 0:?     'bool_init' ( const bool)
 0:?       true (const bool)
 0:?     'int8_t_init' ( const int8_t)
-0:?       -1 (const int)
+0:?       -1 (const int8_t)
 0:?     'int16_t_init' ( const int16_t)
-0:?       -2 (const int)
+0:?       -2 (const int16_t)
 0:?     'int32_t_init' ( const int)
 0:?       -3 (const int)
 0:?     'int64_t_init' ( const int64_t)
 0:?       -4 (const int64_t)
 0:?     'uint8_t_init' ( const uint8_t)
-0:?       1 (const int)
+0:?       1 (const uint8_t)
 0:?     'uint16_t_init' ( const uint16_t)
-0:?       2 (const int)
+0:?       2 (const uint16_t)
 0:?     'uint32_t_init' ( const uint)
 0:?       3 (const uint)
 0:?     'uint64_t_init' ( const uint64_t)
@@ -357,17 +357,17 @@
 0:?     'bool_to_bool' ( const bool)
 0:?       true (const bool)
 0:?     'int8_t_to_bool' ( const bool)
-0:?       -1 (const int)
+0:?       true (const bool)
 0:?     'int16_t_to_bool' ( const bool)
-0:?       -2 (const int)
+0:?       true (const bool)
 0:?     'int32_t_to_bool' ( const bool)
 0:?       true (const bool)
 0:?     'int64_t_to_bool' ( const bool)
 0:?       true (const bool)
 0:?     'uint8_t_to_bool' ( const bool)
-0:?       1 (const int)
+0:?       true (const bool)
 0:?     'uint16_t_to_bool' ( const bool)
-0:?       2 (const int)
+0:?       true (const bool)
 0:?     'uint32_t_to_bool' ( const bool)
 0:?       true (const bool)
 0:?     'uint64_t_to_bool' ( const bool)
@@ -379,53 +379,53 @@
 0:?     'float64_t_to_bool' ( const bool)
 0:?       true (const bool)
 0:?     'bool_to_int8_t' ( const int8_t)
-0:?       true (const bool)
+0:?       1 (const int8_t)
 0:?     'int8_t_to_int8_t' ( const int8_t)
-0:?       -1 (const int)
+0:?       -1 (const int8_t)
 0:?     'int16_t_to_int8_t' ( const int8_t)
-0:?       -2 (const int)
+0:?       -2 (const int8_t)
 0:?     'int32_t_to_int8_t' ( const int8_t)
-0:?       -3 (const int)
+0:?       -3 (const int8_t)
 0:?     'int64_t_to_int8_t' ( const int8_t)
-0:?       -4 (const int64_t)
+0:?       -4 (const int8_t)
 0:?     'uint8_t_to_int8_t' ( const int8_t)
-0:?       1 (const int)
+0:?       1 (const int8_t)
 0:?     'uint16_t_to_int8_t' ( const int8_t)
-0:?       2 (const int)
+0:?       2 (const int8_t)
 0:?     'uint32_t_to_int8_t' ( const int8_t)
-0:?       3 (const uint)
+0:?       3 (const int8_t)
 0:?     'uint64_t_to_int8_t' ( const int8_t)
-0:?       4 (const uint64_t)
+0:?       4 (const int8_t)
 0:?     'float16_t_to_int8_t' ( const int8_t)
-0:?       42.000000
+0:?       42 (const int8_t)
 0:?     'float32_t_to_int8_t' ( const int8_t)
-0:?       13.000000
+0:?       13 (const int8_t)
 0:?     'float64_t_to_int8_t' ( const int8_t)
-0:?       -4.000000
+0:?       -4 (const int8_t)
 0:?     'bool_to_int16_t' ( const int16_t)
-0:?       true (const bool)
+0:?       1 (const int16_t)
 0:?     'int8_t_to_int16_t' ( const int16_t)
-0:?       -1 (const int)
+0:?       -1 (const int16_t)
 0:?     'int16_t_to_int16_t' ( const int16_t)
-0:?       -2 (const int)
+0:?       -2 (const int16_t)
 0:?     'int32_t_to_int16_t' ( const int16_t)
-0:?       -3 (const int)
+0:?       -3 (const int16_t)
 0:?     'int64_t_to_int16_t' ( const int16_t)
-0:?       -4 (const int64_t)
+0:?       -4 (const int16_t)
 0:?     'uint8_t_to_int16_t' ( const int16_t)
-0:?       1 (const int)
+0:?       1 (const int16_t)
 0:?     'uint16_t_to_int16_t' ( const int16_t)
-0:?       2 (const int)
+0:?       2 (const int16_t)
 0:?     'uint32_t_to_int16_t' ( const int16_t)
-0:?       3 (const uint)
+0:?       3 (const int16_t)
 0:?     'uint64_t_to_int16_t' ( const int16_t)
-0:?       4 (const uint64_t)
+0:?       4 (const int16_t)
 0:?     'float16_t_to_int16_t' ( const int16_t)
-0:?       42.000000
+0:?       42 (const int16_t)
 0:?     'float32_t_to_int16_t' ( const int16_t)
-0:?       13.000000
+0:?       13 (const int16_t)
 0:?     'float64_t_to_int16_t' ( const int16_t)
-0:?       -4.000000
+0:?       -4 (const int16_t)
 0:?     'bool_to_int32_t' ( const int)
 0:?       1 (const int)
 0:?     'int8_t_to_int32_t' ( const int)
@@ -453,17 +453,17 @@
 0:?     'bool_to_int64_t' ( const int64_t)
 0:?       1 (const int64_t)
 0:?     'int8_t_to_int64_t' ( const int64_t)
-0:?       -1 (const int)
+0:?       -1 (const int64_t)
 0:?     'int16_t_to_int64_t' ( const int64_t)
-0:?       -2 (const int)
+0:?       -2 (const int64_t)
 0:?     'int32_t_to_int64_t' ( const int64_t)
 0:?       -3 (const int64_t)
 0:?     'int64_t_to_int64_t' ( const int64_t)
 0:?       -4 (const int64_t)
 0:?     'uint8_t_to_int64_t' ( const int64_t)
-0:?       1 (const int)
+0:?       1 (const int64_t)
 0:?     'uint16_t_to_int64_t' ( const int64_t)
-0:?       2 (const int)
+0:?       2 (const int64_t)
 0:?     'uint32_t_to_int64_t' ( const int64_t)
 0:?       3 (const int64_t)
 0:?     'uint64_t_to_int64_t' ( const int64_t)
@@ -475,67 +475,67 @@
 0:?     'float64_t_to_int64_t' ( const int64_t)
 0:?       -4 (const int64_t)
 0:?     'bool_to_uint8_t' ( const uint8_t)
-0:?       true (const bool)
+0:?       1 (const uint8_t)
 0:?     'int8_t_to_uint8_t' ( const uint8_t)
-0:?       -1 (const int)
+0:?       255 (const uint8_t)
 0:?     'int16_t_to_uint8_t' ( const uint8_t)
-0:?       -2 (const int)
+0:?       254 (const uint8_t)
 0:?     'int32_t_to_uint8_t' ( const uint8_t)
-0:?       -3 (const int)
+0:?       253 (const uint8_t)
 0:?     'int64_t_to_uint8_t' ( const uint8_t)
-0:?       -4 (const int64_t)
+0:?       252 (const uint8_t)
 0:?     'uint8_t_to_uint8_t' ( const uint8_t)
-0:?       1 (const int)
+0:?       1 (const uint8_t)
 0:?     'uint16_t_to_uint8_t' ( const uint8_t)
-0:?       2 (const int)
+0:?       2 (const uint8_t)
 0:?     'uint32_t_to_uint8_t' ( const uint8_t)
-0:?       3 (const uint)
+0:?       3 (const uint8_t)
 0:?     'uint64_t_to_uint8_t' ( const uint8_t)
-0:?       4 (const uint64_t)
+0:?       4 (const uint8_t)
 0:?     'float16_t_to_uint8_t' ( const uint8_t)
-0:?       42.000000
+0:?       42 (const uint8_t)
 0:?     'float32_t_to_uint8_t' ( const uint8_t)
-0:?       13.000000
+0:?       13 (const uint8_t)
 0:?     'float64_t_to_uint8_t' ( const uint8_t)
-0:?       -4.000000
+0:?       252 (const uint8_t)
 0:?     'bool_to_uint16_t' ( const uint16_t)
-0:?       true (const bool)
+0:?       1 (const uint16_t)
 0:?     'int8_t_to_uint16_t' ( const uint16_t)
-0:?       -1 (const int)
+0:?       65535 (const uint16_t)
 0:?     'int16_t_to_uint16_t' ( const uint16_t)
-0:?       -2 (const int)
+0:?       65534 (const uint16_t)
 0:?     'int32_t_to_uint16_t' ( const uint16_t)
-0:?       -3 (const int)
+0:?       65533 (const uint16_t)
 0:?     'int64_t_to_uint16_t' ( const uint16_t)
-0:?       -4 (const int64_t)
+0:?       65532 (const uint16_t)
 0:?     'uint8_t_to_uint16_t' ( const uint16_t)
-0:?       1 (const int)
+0:?       1 (const uint16_t)
 0:?     'uint16_t_to_uint16_t' ( const uint16_t)
-0:?       2 (const int)
+0:?       2 (const uint16_t)
 0:?     'uint32_t_to_uint16_t' ( const uint16_t)
-0:?       3 (const uint)
+0:?       3 (const uint16_t)
 0:?     'uint64_t_to_uint16_t' ( const uint16_t)
-0:?       4 (const uint64_t)
+0:?       4 (const uint16_t)
 0:?     'float16_t_to_uint16_t' ( const uint16_t)
-0:?       42.000000
+0:?       42 (const uint16_t)
 0:?     'float32_t_to_uint16_t' ( const uint16_t)
-0:?       13.000000
+0:?       13 (const uint16_t)
 0:?     'float64_t_to_uint16_t' ( const uint16_t)
-0:?       -4.000000
+0:?       65532 (const uint16_t)
 0:?     'bool_to_uint32_t' ( const uint)
 0:?       1 (const uint)
 0:?     'int8_t_to_uint32_t' ( const uint)
-0:?       -1 (const int)
+0:?       4294967295 (const uint)
 0:?     'int16_t_to_uint32_t' ( const uint)
-0:?       -2 (const int)
+0:?       4294967294 (const uint)
 0:?     'int32_t_to_uint32_t' ( const uint)
 0:?       4294967293 (const uint)
 0:?     'int64_t_to_uint32_t' ( const uint)
 0:?       4294967292 (const uint)
 0:?     'uint8_t_to_uint32_t' ( const uint)
-0:?       1 (const int)
+0:?       1 (const uint)
 0:?     'uint16_t_to_uint32_t' ( const uint)
-0:?       2 (const int)
+0:?       2 (const uint)
 0:?     'uint32_t_to_uint32_t' ( const uint)
 0:?       3 (const uint)
 0:?     'uint64_t_to_uint32_t' ( const uint)
@@ -549,17 +549,17 @@
 0:?     'bool_to_uint64_t' ( const uint64_t)
 0:?       1 (const uint64_t)
 0:?     'int8_t_to_uint64_t' ( const uint64_t)
-0:?       -1 (const int)
+0:?       18446744073709551615 (const uint64_t)
 0:?     'int16_t_to_uint64_t' ( const uint64_t)
-0:?       -2 (const int)
+0:?       18446744073709551614 (const uint64_t)
 0:?     'int32_t_to_uint64_t' ( const uint64_t)
 0:?       18446744073709551613 (const uint64_t)
 0:?     'int64_t_to_uint64_t' ( const uint64_t)
 0:?       18446744073709551612 (const uint64_t)
 0:?     'uint8_t_to_uint64_t' ( const uint64_t)
-0:?       1 (const int)
+0:?       1 (const uint64_t)
 0:?     'uint16_t_to_uint64_t' ( const uint64_t)
-0:?       2 (const int)
+0:?       2 (const uint64_t)
 0:?     'uint32_t_to_uint64_t' ( const uint64_t)
 0:?       3 (const uint64_t)
 0:?     'uint64_t_to_uint64_t' ( const uint64_t)
@@ -573,17 +573,17 @@
 0:?     'bool_to_float16_t' ( const float16_t)
 0:?       1.000000
 0:?     'int8_t_to_float16_t' ( const float16_t)
-0:?       -1 (const int)
+0:?       -1.000000
 0:?     'int16_t_to_float16_t' ( const float16_t)
-0:?       -2 (const int)
+0:?       -2.000000
 0:?     'int32_t_to_float16_t' ( const float16_t)
 0:?       -3.000000
 0:?     'int64_t_to_float16_t' ( const float16_t)
 0:?       -4.000000
 0:?     'uint8_t_to_float16_t' ( const float16_t)
-0:?       1 (const int)
+0:?       1.000000
 0:?     'uint16_t_to_float16_t' ( const float16_t)
-0:?       2 (const int)
+0:?       2.000000
 0:?     'uint32_t_to_float16_t' ( const float16_t)
 0:?       3.000000
 0:?     'uint64_t_to_float16_t' ( const float16_t)
@@ -597,17 +597,17 @@
 0:?     'bool_to_float32_t' ( const float)
 0:?       1.000000
 0:?     'int8_t_to_float32_t' ( const float)
-0:?       -1 (const int)
+0:?       -1.000000
 0:?     'int16_t_to_float32_t' ( const float)
-0:?       -2 (const int)
+0:?       -2.000000
 0:?     'int32_t_to_float32_t' ( const float)
 0:?       -3.000000
 0:?     'int64_t_to_float32_t' ( const float)
 0:?       -4.000000
 0:?     'uint8_t_to_float32_t' ( const float)
-0:?       1 (const int)
+0:?       1.000000
 0:?     'uint16_t_to_float32_t' ( const float)
-0:?       2 (const int)
+0:?       2.000000
 0:?     'uint32_t_to_float32_t' ( const float)
 0:?       3.000000
 0:?     'uint64_t_to_float32_t' ( const float)
@@ -621,17 +621,17 @@
 0:?     'bool_to_float64_t' ( const double)
 0:?       1.000000
 0:?     'int8_t_to_float64_t' ( const double)
-0:?       -1 (const int)
+0:?       -1.000000
 0:?     'int16_t_to_float64_t' ( const double)
-0:?       -2 (const int)
+0:?       -2.000000
 0:?     'int32_t_to_float64_t' ( const double)
 0:?       -3.000000
 0:?     'int64_t_to_float64_t' ( const double)
 0:?       -4.000000
 0:?     'uint8_t_to_float64_t' ( const double)
-0:?       1 (const int)
+0:?       1.000000
 0:?     'uint16_t_to_float64_t' ( const double)
-0:?       2 (const int)
+0:?       2.000000
 0:?     'uint32_t_to_float64_t' ( const double)
 0:?       3.000000
 0:?     'uint64_t_to_float64_t' ( const double)
diff --git a/Test/baseResults/cppBad.vert.out b/Test/baseResults/cppBad.vert.out
index a5267ff..aaecdf0 100644
--- a/Test/baseResults/cppBad.vert.out
+++ b/Test/baseResults/cppBad.vert.out
@@ -1,9 +1,10 @@
 cppBad.vert
-ERROR: 0:2: 'preprocessor evaluation' : bad expression 
-ERROR: 0:2: '#if' : unexpected tokens following directive 
-ERROR: 0:5: 'string' : End of line in string 
-ERROR: 0:5: '""' : string literals not supported 
-ERROR: 0:5: '' :  syntax error, unexpected INT, expecting COMMA or SEMICOLON
+WARNING: 0:1: '#define' : missing space after macro name 
+ERROR: 0:3: 'preprocessor evaluation' : bad expression 
+ERROR: 0:3: '#if' : unexpected tokens following directive 
+ERROR: 0:6: 'string' : End of line in string 
+ERROR: 0:6: 'string literal' : required extension not requested: GL_EXT_debug_printf
+ERROR: 0:6: '' :  syntax error, unexpected INT, expecting COMMA or SEMICOLON
 ERROR: 5 compilation errors.  No code generated.
 
 
diff --git a/Test/baseResults/cppBad2.vert.out b/Test/baseResults/cppBad2.vert.out
index af9ff38..0398e5e 100644
--- a/Test/baseResults/cppBad2.vert.out
+++ b/Test/baseResults/cppBad2.vert.out
@@ -1,6 +1,7 @@
 cppBad2.vert
 ERROR: 0:3: 'macro expansion' : End of input in macro b
-ERROR: 1 compilation errors.  No code generated.
+ERROR: 0:3: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
 
 
 Shader version: 100
diff --git a/Test/baseResults/cppBad3.vert.out b/Test/baseResults/cppBad3.vert.out
new file mode 100755
index 0000000..c454c1a
--- /dev/null
+++ b/Test/baseResults/cppBad3.vert.out
@@ -0,0 +1,19 @@
+cppBad3.vert
+ERROR: 0:3: 'macro expansion' : End of input in macro y
+ERROR: 0:3: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:?   Linker Objects
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:?   Linker Objects
+
diff --git a/Test/baseResults/cppBad4.vert.out b/Test/baseResults/cppBad4.vert.out
new file mode 100755
index 0000000..693ea8e
--- /dev/null
+++ b/Test/baseResults/cppBad4.vert.out
@@ -0,0 +1,19 @@
+cppBad4.vert
+ERROR: 0:4: 'macro expansion' : unexpected '#' g
+ERROR: 0:5: '' :  syntax error, unexpected SEMICOLON, expecting LEFT_PAREN
+ERROR: 2 compilation errors.  No code generated.
+
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:?   Linker Objects
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:?   Linker Objects
+
diff --git a/Test/baseResults/cppBad5.vert.out b/Test/baseResults/cppBad5.vert.out
new file mode 100755
index 0000000..83043bb
--- /dev/null
+++ b/Test/baseResults/cppBad5.vert.out
@@ -0,0 +1,19 @@
+cppBad5.vert
+ERROR: 0:4: 'macro expansion' : End of input in macro g
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:?   Linker Objects
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:?   Linker Objects
+
diff --git a/Test/baseResults/cppMerge.frag.out b/Test/baseResults/cppMerge.frag.out
new file mode 100755
index 0000000..64afd47
--- /dev/null
+++ b/Test/baseResults/cppMerge.frag.out
@@ -0,0 +1,23 @@
+cppMerge.frag
+Shader version: 450
+0:? Sequence
+0:22  Function Definition: main( ( global void)
+0:22    Function Parameters: 
+0:?   Linker Objects
+0:?     'dest1' (layout( set=0 binding=0) writeonly uniform image1D)
+0:?     'dest2' (layout( set=0 binding=0) writeonly uniform image1D)
+0:?     'dest3' (layout( set=0 binding=0) writeonly uniform image1D)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+0:? Sequence
+0:22  Function Definition: main( ( global void)
+0:22    Function Parameters: 
+0:?   Linker Objects
+0:?     'dest1' (layout( set=0 binding=0) writeonly uniform image1D)
+0:?     'dest2' (layout( set=0 binding=0) writeonly uniform image1D)
+0:?     'dest3' (layout( set=0 binding=0) writeonly uniform image1D)
+
diff --git a/Test/baseResults/cppSimple.vert.out b/Test/baseResults/cppSimple.vert.out
index 85beb4e..3257856 100644
--- a/Test/baseResults/cppSimple.vert.out
+++ b/Test/baseResults/cppSimple.vert.out
@@ -18,8 +18,8 @@
 ERROR: 0:120: '#if' : unexpected tokens following directive 
 ERROR: 0:121: '#error' : bad6  
 ERROR: 0:122: '#endif' : unexpected tokens following directive 
-ERROR: 0:135: '""' : string literals not supported 
-ERROR: 0:136: '""' : string literals not supported 
+ERROR: 0:135: 'string literal' : required extension not requested: GL_EXT_debug_printf
+ERROR: 0:136: 'string literal' : required extension not requested: GL_EXT_debug_printf
 ERROR: 0:136: 'length' : no matching overloaded function found 
 ERROR: 0:136: '=' :  cannot convert from ' const float' to ' global int'
 ERROR: 0:138: ''' : character literals not supported 
diff --git a/Test/baseResults/glsl.450.subgroup.frag.out b/Test/baseResults/glsl.450.subgroup.frag.out
new file mode 100644
index 0000000..817abb2
--- /dev/null
+++ b/Test/baseResults/glsl.450.subgroup.frag.out
@@ -0,0 +1,667 @@
+glsl.450.subgroup.frag
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : undeclared identifier 
+ERROR: 0:14: 'gl_SubgroupID' : undeclared identifier 
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : no matching overloaded function found 
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:78: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+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: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
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:3  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3    Function Parameters: 
+0:3      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:6      'gl_SubgroupSize' ( flat in uint SubgroupSize)
+0:7      'gl_SubgroupInvocationID' ( flat in uint SubgroupInvocationID)
+0:8      subgroupBarrier ( global void)
+0:9      subgroupMemoryBarrier ( global void)
+0:10      subgroupMemoryBarrierBuffer ( global void)
+0:11      subgroupMemoryBarrierImage ( global void)
+0:12      subgroupElect ( global bool)
+0:13      'gl_NumSubgroups' ( temp float)
+0:14      'gl_SubgroupID' ( temp float)
+0:15      Constant:
+0:15        0.000000
+0:17      subgroupAll ( global bool)
+0:17        Constant:
+0:17          true (const bool)
+0:18      subgroupAny ( global bool)
+0:18        Constant:
+0:18          false (const bool)
+0:19      subgroupAllEqual ( global bool)
+0:19        'f4' ( in 4-component vector of float)
+0:21      'gl_SubgroupEqMask' ( flat in 4-component vector of uint SubgroupEqMask)
+0:22      'gl_SubgroupGeMask' ( flat in 4-component vector of uint SubgroupGeMask)
+0:23      'gl_SubgroupGtMask' ( flat in 4-component vector of uint SubgroupGtMask)
+0:24      'gl_SubgroupLeMask' ( flat in 4-component vector of uint SubgroupLeMask)
+0:25      'gl_SubgroupLtMask' ( flat in 4-component vector of uint SubgroupLtMask)
+0:26      subgroupBroadcast ( global 4-component vector of float)
+0:26        'f4' ( in 4-component vector of float)
+0:26        Constant:
+0:26          0 (const uint)
+0:27      subgroupBroadcastFirst ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of uint)
+0:28          'ballot' ( temp 4-component vector of uint)
+0:28          subgroupBallot ( global 4-component vector of uint)
+0:28            Constant:
+0:28              false (const bool)
+0:29      subgroupInverseBallot ( global bool)
+0:29        Constant:
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:30      subgroupBallotBitExtract ( global bool)
+0:30        'ballot' ( temp 4-component vector of uint)
+0:30        Constant:
+0:30          0 (const uint)
+0:31      subgroupBallotBitCount ( global uint)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:32      subgroupBallotInclusiveBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotExclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotFindLSB ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindMSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:37      subgroupShuffle ( global 4-component vector of float)
+0:37        'f4' ( in 4-component vector of float)
+0:37        Constant:
+0:37          0 (const uint)
+0:38      subgroupShuffleXor ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          1 (const uint)
+0:39      subgroupShuffleUp ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleDown ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        'result' ( temp 4-component vector of float)
+0:42        subgroupAdd ( global 4-component vector of float)
+0:42          'f4' ( in 4-component vector of float)
+0:43      subgroupMul ( global 4-component vector of float)
+0:43        'f4' ( in 4-component vector of float)
+0:44      subgroupMin ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMax ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupAnd ( global 4-component vector of uint)
+0:46        'ballot' ( temp 4-component vector of uint)
+0:47      subgroupOr ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupXor ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupInclusiveAdd ( global 4-component vector of float)
+0:49        'f4' ( in 4-component vector of float)
+0:50      subgroupInclusiveMul ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMin ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMax ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53        'ballot' ( temp 4-component vector of uint)
+0:54      subgroupInclusiveOr ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveXor ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupExclusiveAdd ( global 4-component vector of float)
+0:56        'f4' ( in 4-component vector of float)
+0:57      subgroupExclusiveMul ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMin ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMax ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60        'ballot' ( temp 4-component vector of uint)
+0:61      subgroupExclusiveOr ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveXor ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:64      subgroupClusteredAdd ( global 4-component vector of float)
+0:64        'f4' ( in 4-component vector of float)
+0:64        Constant:
+0:64          2 (const uint)
+0:65      subgroupClusteredMul ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMin ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMax ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredAnd ( global 4-component vector of uint)
+0:68        'ballot' ( temp 4-component vector of uint)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredOr ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredXor ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:72      subgroupQuadBroadcast ( global 4-component vector of float)
+0:72        'f4' ( in 4-component vector of float)
+0:72        Constant:
+0:72          0 (const uint)
+0:73      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:74      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:77      Sequence
+0:77        move second child to first child ( temp 4-component vector of uint)
+0:77          'parti' ( temp 4-component vector of uint)
+0:77          subgroupPartitionNV ( global 4-component vector of uint)
+0:77            'f4' ( in 4-component vector of float)
+0:78      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:78        'f4' ( in 4-component vector of float)
+0:78        'parti' ( temp 4-component vector of uint)
+0:79      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:79        'f4' ( in 4-component vector of float)
+0:79        'parti' ( temp 4-component vector of uint)
+0:80      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:82        'ballot' ( temp 4-component vector of uint)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:83        'ballot' ( temp 4-component vector of uint)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:85        'f4' ( in 4-component vector of float)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:86        'f4' ( in 4-component vector of float)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:89        'ballot' ( temp 4-component vector of uint)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:90        'ballot' ( temp 4-component vector of uint)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:92        'f4' ( in 4-component vector of float)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:93        'f4' ( in 4-component vector of float)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:96        'ballot' ( temp 4-component vector of uint)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:97        'ballot' ( temp 4-component vector of uint)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:100      Branch: Return with expression
+0:100        'result' ( temp 4-component vector of float)
+0:105  Function Definition: main( ( global void)
+0:105    Function Parameters: 
+0:107    Sequence
+0:107      move second child to first child ( temp 4-component vector of uint)
+0:107        'data' (layout( location=0) out 4-component vector of uint)
+0:107        Construct uvec4 ( temp 4-component vector of uint)
+0:107          'gl_SubgroupSize' ( flat in uint SubgroupSize)
+0:107          'gl_SubgroupInvocationID' ( flat in uint SubgroupInvocationID)
+0:107          Constant:
+0:107            0 (const uint)
+0:107          Constant:
+0:107            0 (const uint)
+0:108      subgroupBarrier ( global void)
+0:109      subgroupMemoryBarrier ( global void)
+0:110      subgroupMemoryBarrierBuffer ( global void)
+0:111      subgroupMemoryBarrierImage ( global void)
+0:112      subgroupElect ( global bool)
+0:116  Function Definition: ballot_works(vf4; ( global void)
+0:116    Function Parameters: 
+0:116      'f4' ( in 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: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:128        Constant:
+0:128          0 (const uint)
+0:129      subgroupBallotBitCount ( global uint)
+0:129        'ballot' ( temp 4-component vector of uint)
+0:130      subgroupBallotInclusiveBitCount ( global uint)
+0:130        'ballot' ( temp 4-component vector of uint)
+0:131      subgroupBallotExclusiveBitCount ( global uint)
+0:131        'ballot' ( temp 4-component vector of uint)
+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          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: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:158      subgroupAdd ( global 4-component vector of float)
+0:158        'f4' ( in 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      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      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      subgroupInclusiveMul ( global 4-component vector of float)
+0:166        'f4' ( in 4-component vector of float)
+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      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      subgroupExclusiveMul ( global 4-component vector of float)
+0:173        'f4' ( in 4-component vector of float)
+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: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      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      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      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      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: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: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      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      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      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      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      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      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      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      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      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      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      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      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      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      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      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      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: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)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:105  Function Definition: main( ( global void)
+0:105    Function Parameters: 
+0:107    Sequence
+0:107      move second child to first child ( temp 4-component vector of uint)
+0:107        'data' (layout( location=0) out 4-component vector of uint)
+0:107        Construct uvec4 ( temp 4-component vector of uint)
+0:107          'gl_SubgroupSize' ( flat in uint SubgroupSize)
+0:107          'gl_SubgroupInvocationID' ( flat in uint SubgroupInvocationID)
+0:107          Constant:
+0:107            0 (const uint)
+0:107          Constant:
+0:107            0 (const uint)
+0:108      subgroupBarrier ( global void)
+0:109      subgroupMemoryBarrier ( global void)
+0:110      subgroupMemoryBarrierBuffer ( global void)
+0:111      subgroupMemoryBarrierImage ( global void)
+0:112      subgroupElect ( global bool)
+0:?   Linker Objects
+0:?     'data' (layout( location=0) out 4-component vector of uint)
+
diff --git a/Test/baseResults/glsl.450.subgroup.geom.out b/Test/baseResults/glsl.450.subgroup.geom.out
new file mode 100644
index 0000000..baf82dc
--- /dev/null
+++ b/Test/baseResults/glsl.450.subgroup.geom.out
@@ -0,0 +1,675 @@
+glsl.450.subgroup.geom
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : undeclared identifier 
+ERROR: 0:14: 'gl_SubgroupID' : undeclared identifier 
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : no matching overloaded function found 
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:78: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+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:238: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:239: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:240: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:241: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors.  No code generated.
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+invocations = -1
+max_vertices = 1
+input primitive = points
+output primitive = points
+ERROR: node is still EOpNull!
+0:3  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3    Function Parameters: 
+0:3      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:6      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8      subgroupBarrier ( global void)
+0:9      subgroupMemoryBarrier ( global void)
+0:10      subgroupMemoryBarrierBuffer ( global void)
+0:11      subgroupMemoryBarrierImage ( global void)
+0:12      subgroupElect ( global bool)
+0:13      'gl_NumSubgroups' ( temp float)
+0:14      'gl_SubgroupID' ( temp float)
+0:15      Constant:
+0:15        0.000000
+0:17      subgroupAll ( global bool)
+0:17        Constant:
+0:17          true (const bool)
+0:18      subgroupAny ( global bool)
+0:18        Constant:
+0:18          false (const bool)
+0:19      subgroupAllEqual ( global bool)
+0:19        'f4' ( in 4-component vector of float)
+0:21      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26      subgroupBroadcast ( global 4-component vector of float)
+0:26        'f4' ( in 4-component vector of float)
+0:26        Constant:
+0:26          0 (const uint)
+0:27      subgroupBroadcastFirst ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of uint)
+0:28          'ballot' ( temp 4-component vector of uint)
+0:28          subgroupBallot ( global 4-component vector of uint)
+0:28            Constant:
+0:28              false (const bool)
+0:29      subgroupInverseBallot ( global bool)
+0:29        Constant:
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:30      subgroupBallotBitExtract ( global bool)
+0:30        'ballot' ( temp 4-component vector of uint)
+0:30        Constant:
+0:30          0 (const uint)
+0:31      subgroupBallotBitCount ( global uint)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:32      subgroupBallotInclusiveBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotExclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotFindLSB ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindMSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:37      subgroupShuffle ( global 4-component vector of float)
+0:37        'f4' ( in 4-component vector of float)
+0:37        Constant:
+0:37          0 (const uint)
+0:38      subgroupShuffleXor ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          1 (const uint)
+0:39      subgroupShuffleUp ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleDown ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        'result' ( temp 4-component vector of float)
+0:42        subgroupAdd ( global 4-component vector of float)
+0:42          'f4' ( in 4-component vector of float)
+0:43      subgroupMul ( global 4-component vector of float)
+0:43        'f4' ( in 4-component vector of float)
+0:44      subgroupMin ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMax ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupAnd ( global 4-component vector of uint)
+0:46        'ballot' ( temp 4-component vector of uint)
+0:47      subgroupOr ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupXor ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupInclusiveAdd ( global 4-component vector of float)
+0:49        'f4' ( in 4-component vector of float)
+0:50      subgroupInclusiveMul ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMin ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMax ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53        'ballot' ( temp 4-component vector of uint)
+0:54      subgroupInclusiveOr ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveXor ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupExclusiveAdd ( global 4-component vector of float)
+0:56        'f4' ( in 4-component vector of float)
+0:57      subgroupExclusiveMul ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMin ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMax ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60        'ballot' ( temp 4-component vector of uint)
+0:61      subgroupExclusiveOr ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveXor ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:64      subgroupClusteredAdd ( global 4-component vector of float)
+0:64        'f4' ( in 4-component vector of float)
+0:64        Constant:
+0:64          2 (const uint)
+0:65      subgroupClusteredMul ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMin ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMax ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredAnd ( global 4-component vector of uint)
+0:68        'ballot' ( temp 4-component vector of uint)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredOr ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredXor ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:72      subgroupQuadBroadcast ( global 4-component vector of float)
+0:72        'f4' ( in 4-component vector of float)
+0:72        Constant:
+0:72          0 (const uint)
+0:73      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:74      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:77      Sequence
+0:77        move second child to first child ( temp 4-component vector of uint)
+0:77          'parti' ( temp 4-component vector of uint)
+0:77          subgroupPartitionNV ( global 4-component vector of uint)
+0:77            'f4' ( in 4-component vector of float)
+0:78      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:78        'f4' ( in 4-component vector of float)
+0:78        'parti' ( temp 4-component vector of uint)
+0:79      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:79        'f4' ( in 4-component vector of float)
+0:79        'parti' ( temp 4-component vector of uint)
+0:80      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:82        'ballot' ( temp 4-component vector of uint)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:83        'ballot' ( temp 4-component vector of uint)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:85        'f4' ( in 4-component vector of float)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:86        'f4' ( in 4-component vector of float)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:89        'ballot' ( temp 4-component vector of uint)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:90        'ballot' ( temp 4-component vector of uint)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:92        'f4' ( in 4-component vector of float)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:93        'f4' ( in 4-component vector of float)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:96        'ballot' ( temp 4-component vector of uint)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:97        'ballot' ( temp 4-component vector of uint)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:100      Branch: Return with expression
+0:100        'result' ( temp 4-component vector of float)
+0:111  Function Definition: main( ( global void)
+0:111    Function Parameters: 
+0:113    Sequence
+0:113      move second child to first child ( temp 4-component vector of uint)
+0:113        indirect index (layout( column_major std430 offset=0) temp 4-component vector of uint)
+0:113          result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint)
+0:113            'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:113            Constant:
+0:113              0 (const uint)
+0:113          'gl_PrimitiveIDIn' ( in int PrimitiveID)
+0:113        Construct uvec4 ( temp 4-component vector of uint)
+0:113          'gl_SubgroupSize' ( in uint SubgroupSize)
+0:113          'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:113          Constant:
+0:113            0 (const uint)
+0:113          Constant:
+0:113            0 (const uint)
+0:114      subgroupBarrier ( global void)
+0:115      subgroupMemoryBarrier ( global void)
+0:116      subgroupMemoryBarrierBuffer ( global void)
+0:117      subgroupMemoryBarrierImage ( global void)
+0:118      subgroupElect ( global bool)
+0:122  Function Definition: ballot_works(vf4; ( global void)
+0:122    Function Parameters: 
+0:122      'f4' ( in 4-component vector of float)
+0:123    Sequence
+0:123      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:124      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:125      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:126      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:127      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:128      subgroupBroadcast ( global 4-component vector of float)
+0:128        'f4' ( in 4-component vector of float)
+0:128        Constant:
+0:128          0 (const uint)
+0:129      subgroupBroadcastFirst ( global 4-component vector of float)
+0:129        'f4' ( in 4-component vector of float)
+0:130      Sequence
+0:130        move second child to first child ( temp 4-component vector of uint)
+0:130          'ballot' ( temp 4-component vector of uint)
+0:130          subgroupBallot ( global 4-component vector of uint)
+0:130            Constant:
+0:130              false (const bool)
+0:131      subgroupInverseBallot ( global bool)
+0:131        Constant:
+0:131          1 (const uint)
+0:131          1 (const uint)
+0:131          1 (const uint)
+0:131          1 (const uint)
+0:132      subgroupBallotBitExtract ( global bool)
+0:132        'ballot' ( temp 4-component vector of uint)
+0:132        Constant:
+0:132          0 (const uint)
+0:133      subgroupBallotBitCount ( global uint)
+0:133        'ballot' ( temp 4-component vector of uint)
+0:134      subgroupBallotInclusiveBitCount ( global uint)
+0:134        'ballot' ( temp 4-component vector of uint)
+0:135      subgroupBallotExclusiveBitCount ( global uint)
+0:135        'ballot' ( temp 4-component vector of uint)
+0:136      subgroupBallotFindLSB ( global uint)
+0:136        'ballot' ( temp 4-component vector of uint)
+0:137      subgroupBallotFindMSB ( global uint)
+0:137        'ballot' ( temp 4-component vector of uint)
+0:141  Function Definition: vote_works(vf4; ( global void)
+0:141    Function Parameters: 
+0:141      'f4' ( in 4-component vector of float)
+0:143    Sequence
+0:143      subgroupAll ( global bool)
+0:143        Constant:
+0:143          true (const bool)
+0:144      subgroupAny ( global bool)
+0:144        Constant:
+0:144          false (const bool)
+0:145      subgroupAllEqual ( global bool)
+0:145        'f4' ( in 4-component vector of float)
+0:150  Function Definition: shuffle_works(vf4; ( global void)
+0:150    Function Parameters: 
+0:150      'f4' ( in 4-component vector of float)
+0:152    Sequence
+0:152      subgroupShuffle ( global 4-component vector of float)
+0:152        'f4' ( in 4-component vector of float)
+0:152        Constant:
+0:152          0 (const uint)
+0:153      subgroupShuffleXor ( global 4-component vector of float)
+0:153        'f4' ( in 4-component vector of float)
+0:153        Constant:
+0:153          1 (const uint)
+0:154      subgroupShuffleUp ( global 4-component vector of float)
+0:154        'f4' ( in 4-component vector of float)
+0:154        Constant:
+0:154          1 (const uint)
+0:155      subgroupShuffleDown ( global 4-component vector of float)
+0:155        'f4' ( in 4-component vector of float)
+0:155        Constant:
+0:155          1 (const uint)
+0:159  Function Definition: arith_works(vf4; ( global void)
+0:159    Function Parameters: 
+0:159      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:162      subgroupAdd ( global 4-component vector of float)
+0:162        'f4' ( in 4-component vector of float)
+0:163      subgroupMul ( global 4-component vector of float)
+0:163        'f4' ( in 4-component vector of float)
+0:164      subgroupMin ( global 4-component vector of float)
+0:164        'f4' ( in 4-component vector of float)
+0:165      subgroupMax ( global 4-component vector of float)
+0:165        'f4' ( in 4-component vector of float)
+0:166      subgroupAnd ( global 4-component vector of uint)
+0:166        'ballot' ( temp 4-component vector of uint)
+0:167      subgroupOr ( global 4-component vector of uint)
+0:167        'ballot' ( temp 4-component vector of uint)
+0:168      subgroupXor ( global 4-component vector of uint)
+0:168        'ballot' ( temp 4-component vector of uint)
+0:169      subgroupInclusiveAdd ( global 4-component vector of float)
+0:169        'f4' ( in 4-component vector of float)
+0:170      subgroupInclusiveMul ( global 4-component vector of float)
+0:170        'f4' ( in 4-component vector of float)
+0:171      subgroupInclusiveMin ( global 4-component vector of float)
+0:171        'f4' ( in 4-component vector of float)
+0:172      subgroupInclusiveMax ( global 4-component vector of float)
+0:172        'f4' ( in 4-component vector of float)
+0:173      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:173        'ballot' ( temp 4-component vector of uint)
+0:174      subgroupInclusiveOr ( global 4-component vector of uint)
+0:174        'ballot' ( temp 4-component vector of uint)
+0:175      subgroupInclusiveXor ( global 4-component vector of uint)
+0:175        'ballot' ( temp 4-component vector of uint)
+0:176      subgroupExclusiveAdd ( global 4-component vector of float)
+0:176        'f4' ( in 4-component vector of float)
+0:177      subgroupExclusiveMul ( global 4-component vector of float)
+0:177        'f4' ( in 4-component vector of float)
+0:178      subgroupExclusiveMin ( global 4-component vector of float)
+0:178        'f4' ( in 4-component vector of float)
+0:179      subgroupExclusiveMax ( global 4-component vector of float)
+0:179        'f4' ( in 4-component vector of float)
+0:180      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:180        'ballot' ( temp 4-component vector of uint)
+0:181      subgroupExclusiveOr ( global 4-component vector of uint)
+0:181        'ballot' ( temp 4-component vector of uint)
+0:182      subgroupExclusiveXor ( global 4-component vector of uint)
+0:182        'ballot' ( temp 4-component vector of uint)
+0:186  Function Definition: clustered_works(vf4; ( global void)
+0:186    Function Parameters: 
+0:186      'f4' ( in 4-component vector of float)
+0:188    Sequence
+0:188      Sequence
+0:188        move second child to first child ( temp 4-component vector of uint)
+0:188          'ballot' ( temp 4-component vector of uint)
+0:188          Constant:
+0:188            85 (const uint)
+0:188            0 (const uint)
+0:188            0 (const uint)
+0:188            0 (const uint)
+0:189      subgroupClusteredAdd ( global 4-component vector of float)
+0:189        'f4' ( in 4-component vector of float)
+0:189        Constant:
+0:189          2 (const uint)
+0:190      subgroupClusteredMul ( global 4-component vector of float)
+0:190        'f4' ( in 4-component vector of float)
+0:190        Constant:
+0:190          2 (const uint)
+0:191      subgroupClusteredMin ( global 4-component vector of float)
+0:191        'f4' ( in 4-component vector of float)
+0:191        Constant:
+0:191          2 (const uint)
+0:192      subgroupClusteredMax ( global 4-component vector of float)
+0:192        'f4' ( in 4-component vector of float)
+0:192        Constant:
+0:192          2 (const uint)
+0:193      subgroupClusteredAnd ( global 4-component vector of uint)
+0:193        'ballot' ( temp 4-component vector of uint)
+0:193        Constant:
+0:193          2 (const uint)
+0:194      subgroupClusteredOr ( global 4-component vector of uint)
+0:194        'ballot' ( temp 4-component vector of uint)
+0:194        Constant:
+0:194          2 (const uint)
+0:195      subgroupClusteredXor ( global 4-component vector of uint)
+0:195        'ballot' ( temp 4-component vector of uint)
+0:195        Constant:
+0:195          2 (const uint)
+0:199  Function Definition: quad_works(vf4; ( global void)
+0:199    Function Parameters: 
+0:199      'f4' ( in 4-component vector of float)
+0:201    Sequence
+0:201      subgroupQuadBroadcast ( global 4-component vector of float)
+0:201        'f4' ( in 4-component vector of float)
+0:201        Constant:
+0:201          0 (const uint)
+0:202      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:202        'f4' ( in 4-component vector of float)
+0:203      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:203        'f4' ( in 4-component vector of float)
+0:204      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:204        'f4' ( in 4-component vector of float)
+0:208  Function Definition: partitioned_works(vf4; ( global void)
+0:208    Function Parameters: 
+0:208      'f4' ( in 4-component vector of float)
+0:210    Sequence
+0:210      Sequence
+0:210        move second child to first child ( temp 4-component vector of uint)
+0:210          'parti' ( temp 4-component vector of uint)
+0:210          subgroupPartitionNV ( global 4-component vector of uint)
+0:210            'f4' ( in 4-component vector of float)
+0:211      Sequence
+0:211        move second child to first child ( temp 4-component vector of uint)
+0:211          'ballot' ( temp 4-component vector of uint)
+0:211          Constant:
+0:211            85 (const uint)
+0:211            0 (const uint)
+0:211            0 (const uint)
+0:211            0 (const uint)
+0:212      subgroupPartitionedAddNV ( 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      subgroupPartitionedMulNV ( 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      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:214        'f4' ( in 4-component vector of float)
+0:214        'parti' ( temp 4-component vector of uint)
+0:215      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:215        'f4' ( in 4-component vector of float)
+0:215        'parti' ( temp 4-component vector of uint)
+0:216      subgroupPartitionedAndNV ( 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      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:217        'ballot' ( temp 4-component vector of uint)
+0:217        'parti' ( temp 4-component vector of uint)
+0:218      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:218        'ballot' ( temp 4-component vector of uint)
+0:218        'parti' ( temp 4-component vector of uint)
+0:219      subgroupPartitionedInclusiveAddNV ( 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      subgroupPartitionedInclusiveMulNV ( 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      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:221        'f4' ( in 4-component vector of float)
+0:221        'parti' ( temp 4-component vector of uint)
+0:222      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:222        'f4' ( in 4-component vector of float)
+0:222        'parti' ( temp 4-component vector of uint)
+0:223      subgroupPartitionedInclusiveAndNV ( 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      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:224        'ballot' ( temp 4-component vector of uint)
+0:224        'parti' ( temp 4-component vector of uint)
+0:225      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:225        'ballot' ( temp 4-component vector of uint)
+0:225        'parti' ( temp 4-component vector of uint)
+0:226      subgroupPartitionedExclusiveAddNV ( 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:227      subgroupPartitionedExclusiveMulNV ( 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      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:228        'f4' ( in 4-component vector of float)
+0:228        'parti' ( temp 4-component vector of uint)
+0:229      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:229        'f4' ( in 4-component vector of float)
+0:229        'parti' ( temp 4-component vector of uint)
+0:230      subgroupPartitionedExclusiveAndNV ( 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:231      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:231        'ballot' ( temp 4-component vector of uint)
+0:231        'parti' ( temp 4-component vector of uint)
+0:232      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:232        'ballot' ( temp 4-component vector of uint)
+0:232        'parti' ( temp 4-component vector of uint)
+0:236  Function Definition: sm_builtins_err( ( global void)
+0:236    Function Parameters: 
+0:238    Sequence
+0:238      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:239      'gl_SMCountNV' ( in uint SMCountNV)
+0:240      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:241      'gl_SMIDNV' ( in uint SMIDNV)
+0:248  Function Definition: sm_builtins( ( global void)
+0:248    Function Parameters: 
+0:250    Sequence
+0:250      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:251      'gl_SMCountNV' ( in uint SMCountNV)
+0:252      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:253      'gl_SMIDNV' ( in uint SMIDNV)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+
+
+Linked geometry stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+invocations = 1
+max_vertices = 1
+input primitive = points
+output primitive = points
+ERROR: node is still EOpNull!
+0:111  Function Definition: main( ( global void)
+0:111    Function Parameters: 
+0:113    Sequence
+0:113      move second child to first child ( temp 4-component vector of uint)
+0:113        indirect index (layout( column_major std430 offset=0) temp 4-component vector of uint)
+0:113          result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint)
+0:113            'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:113            Constant:
+0:113              0 (const uint)
+0:113          'gl_PrimitiveIDIn' ( in int PrimitiveID)
+0:113        Construct uvec4 ( temp 4-component vector of uint)
+0:113          'gl_SubgroupSize' ( in uint SubgroupSize)
+0:113          'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:113          Constant:
+0:113            0 (const uint)
+0:113          Constant:
+0:113            0 (const uint)
+0:114      subgroupBarrier ( global void)
+0:115      subgroupMemoryBarrier ( global void)
+0:116      subgroupMemoryBarrierBuffer ( global void)
+0:117      subgroupMemoryBarrierImage ( global void)
+0:118      subgroupElect ( global bool)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+
diff --git a/Test/baseResults/glsl.450.subgroup.tesc.out b/Test/baseResults/glsl.450.subgroup.tesc.out
new file mode 100644
index 0000000..eeee387
--- /dev/null
+++ b/Test/baseResults/glsl.450.subgroup.tesc.out
@@ -0,0 +1,669 @@
+glsl.450.subgroup.tesc
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : undeclared identifier 
+ERROR: 0:14: 'gl_SubgroupID' : undeclared identifier 
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : no matching overloaded function found 
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:78: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+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:237: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:238: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:239: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:240: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors.  No code generated.
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+vertices = 1
+ERROR: node is still EOpNull!
+0:3  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3    Function Parameters: 
+0:3      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:6      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8      subgroupBarrier ( global void)
+0:9      subgroupMemoryBarrier ( global void)
+0:10      subgroupMemoryBarrierBuffer ( global void)
+0:11      subgroupMemoryBarrierImage ( global void)
+0:12      subgroupElect ( global bool)
+0:13      'gl_NumSubgroups' ( temp float)
+0:14      'gl_SubgroupID' ( temp float)
+0:15      Constant:
+0:15        0.000000
+0:17      subgroupAll ( global bool)
+0:17        Constant:
+0:17          true (const bool)
+0:18      subgroupAny ( global bool)
+0:18        Constant:
+0:18          false (const bool)
+0:19      subgroupAllEqual ( global bool)
+0:19        'f4' ( in 4-component vector of float)
+0:21      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26      subgroupBroadcast ( global 4-component vector of float)
+0:26        'f4' ( in 4-component vector of float)
+0:26        Constant:
+0:26          0 (const uint)
+0:27      subgroupBroadcastFirst ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of uint)
+0:28          'ballot' ( temp 4-component vector of uint)
+0:28          subgroupBallot ( global 4-component vector of uint)
+0:28            Constant:
+0:28              false (const bool)
+0:29      subgroupInverseBallot ( global bool)
+0:29        Constant:
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:30      subgroupBallotBitExtract ( global bool)
+0:30        'ballot' ( temp 4-component vector of uint)
+0:30        Constant:
+0:30          0 (const uint)
+0:31      subgroupBallotBitCount ( global uint)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:32      subgroupBallotInclusiveBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotExclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotFindLSB ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindMSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:37      subgroupShuffle ( global 4-component vector of float)
+0:37        'f4' ( in 4-component vector of float)
+0:37        Constant:
+0:37          0 (const uint)
+0:38      subgroupShuffleXor ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          1 (const uint)
+0:39      subgroupShuffleUp ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleDown ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        'result' ( temp 4-component vector of float)
+0:42        subgroupAdd ( global 4-component vector of float)
+0:42          'f4' ( in 4-component vector of float)
+0:43      subgroupMul ( global 4-component vector of float)
+0:43        'f4' ( in 4-component vector of float)
+0:44      subgroupMin ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMax ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupAnd ( global 4-component vector of uint)
+0:46        'ballot' ( temp 4-component vector of uint)
+0:47      subgroupOr ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupXor ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupInclusiveAdd ( global 4-component vector of float)
+0:49        'f4' ( in 4-component vector of float)
+0:50      subgroupInclusiveMul ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMin ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMax ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53        'ballot' ( temp 4-component vector of uint)
+0:54      subgroupInclusiveOr ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveXor ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupExclusiveAdd ( global 4-component vector of float)
+0:56        'f4' ( in 4-component vector of float)
+0:57      subgroupExclusiveMul ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMin ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMax ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60        'ballot' ( temp 4-component vector of uint)
+0:61      subgroupExclusiveOr ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveXor ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:64      subgroupClusteredAdd ( global 4-component vector of float)
+0:64        'f4' ( in 4-component vector of float)
+0:64        Constant:
+0:64          2 (const uint)
+0:65      subgroupClusteredMul ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMin ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMax ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredAnd ( global 4-component vector of uint)
+0:68        'ballot' ( temp 4-component vector of uint)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredOr ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredXor ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:72      subgroupQuadBroadcast ( global 4-component vector of float)
+0:72        'f4' ( in 4-component vector of float)
+0:72        Constant:
+0:72          0 (const uint)
+0:73      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:74      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:77      Sequence
+0:77        move second child to first child ( temp 4-component vector of uint)
+0:77          'parti' ( temp 4-component vector of uint)
+0:77          subgroupPartitionNV ( global 4-component vector of uint)
+0:77            'f4' ( in 4-component vector of float)
+0:78      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:78        'f4' ( in 4-component vector of float)
+0:78        'parti' ( temp 4-component vector of uint)
+0:79      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:79        'f4' ( in 4-component vector of float)
+0:79        'parti' ( temp 4-component vector of uint)
+0:80      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:82        'ballot' ( temp 4-component vector of uint)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:83        'ballot' ( temp 4-component vector of uint)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:85        'f4' ( in 4-component vector of float)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:86        'f4' ( in 4-component vector of float)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:89        'ballot' ( temp 4-component vector of uint)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:90        'ballot' ( temp 4-component vector of uint)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:92        'f4' ( in 4-component vector of float)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:93        'f4' ( in 4-component vector of float)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:96        'ballot' ( temp 4-component vector of uint)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:97        'ballot' ( temp 4-component vector of uint)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:100      Branch: Return with expression
+0:100        'result' ( temp 4-component vector of float)
+0:110  Function Definition: main( ( global void)
+0:110    Function Parameters: 
+0:112    Sequence
+0:112      move second child to first child ( temp 4-component vector of uint)
+0:112        indirect index (layout( column_major std430 offset=0) temp 4-component vector of uint)
+0:112          result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint)
+0:112            'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:112            Constant:
+0:112              0 (const uint)
+0:112          'gl_PrimitiveID' ( in int PrimitiveID)
+0:112        Construct uvec4 ( temp 4-component vector of uint)
+0:112          'gl_SubgroupSize' ( in uint SubgroupSize)
+0:112          'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:112          Constant:
+0:112            0 (const uint)
+0:112          Constant:
+0:112            0 (const uint)
+0:113      subgroupBarrier ( global void)
+0:114      subgroupMemoryBarrier ( global void)
+0:115      subgroupMemoryBarrierBuffer ( global void)
+0:116      subgroupMemoryBarrierImage ( global void)
+0:117      subgroupElect ( global bool)
+0:121  Function Definition: ballot_works(vf4; ( global void)
+0:121    Function Parameters: 
+0:121      'f4' ( in 4-component vector of float)
+0:122    Sequence
+0:122      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:123      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:124      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:125      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:126      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:127      subgroupBroadcast ( global 4-component vector of float)
+0:127        'f4' ( in 4-component vector of float)
+0:127        Constant:
+0:127          0 (const uint)
+0:128      subgroupBroadcastFirst ( global 4-component vector of float)
+0:128        'f4' ( in 4-component vector of float)
+0:129      Sequence
+0:129        move second child to first child ( temp 4-component vector of uint)
+0:129          'ballot' ( temp 4-component vector of uint)
+0:129          subgroupBallot ( global 4-component vector of uint)
+0:129            Constant:
+0:129              false (const bool)
+0:130      subgroupInverseBallot ( global bool)
+0:130        Constant:
+0:130          1 (const uint)
+0:130          1 (const uint)
+0:130          1 (const uint)
+0:130          1 (const uint)
+0:131      subgroupBallotBitExtract ( global bool)
+0:131        'ballot' ( temp 4-component vector of uint)
+0:131        Constant:
+0:131          0 (const uint)
+0:132      subgroupBallotBitCount ( global uint)
+0:132        'ballot' ( temp 4-component vector of uint)
+0:133      subgroupBallotInclusiveBitCount ( global uint)
+0:133        'ballot' ( temp 4-component vector of uint)
+0:134      subgroupBallotExclusiveBitCount ( global uint)
+0:134        'ballot' ( temp 4-component vector of uint)
+0:135      subgroupBallotFindLSB ( global uint)
+0:135        'ballot' ( temp 4-component vector of uint)
+0:136      subgroupBallotFindMSB ( global uint)
+0:136        'ballot' ( temp 4-component vector of uint)
+0:140  Function Definition: vote_works(vf4; ( global void)
+0:140    Function Parameters: 
+0:140      'f4' ( in 4-component vector of float)
+0:142    Sequence
+0:142      subgroupAll ( global bool)
+0:142        Constant:
+0:142          true (const bool)
+0:143      subgroupAny ( global bool)
+0:143        Constant:
+0:143          false (const bool)
+0:144      subgroupAllEqual ( global bool)
+0:144        'f4' ( in 4-component vector of float)
+0:149  Function Definition: shuffle_works(vf4; ( global void)
+0:149    Function Parameters: 
+0:149      'f4' ( in 4-component vector of float)
+0:151    Sequence
+0:151      subgroupShuffle ( global 4-component vector of float)
+0:151        'f4' ( in 4-component vector of float)
+0:151        Constant:
+0:151          0 (const uint)
+0:152      subgroupShuffleXor ( global 4-component vector of float)
+0:152        'f4' ( in 4-component vector of float)
+0:152        Constant:
+0:152          1 (const uint)
+0:153      subgroupShuffleUp ( global 4-component vector of float)
+0:153        'f4' ( in 4-component vector of float)
+0:153        Constant:
+0:153          1 (const uint)
+0:154      subgroupShuffleDown ( global 4-component vector of float)
+0:154        'f4' ( in 4-component vector of float)
+0:154        Constant:
+0:154          1 (const uint)
+0:158  Function Definition: arith_works(vf4; ( global void)
+0:158    Function Parameters: 
+0:158      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:161      subgroupAdd ( global 4-component vector of float)
+0:161        'f4' ( in 4-component vector of float)
+0:162      subgroupMul ( global 4-component vector of float)
+0:162        'f4' ( in 4-component vector of float)
+0:163      subgroupMin ( global 4-component vector of float)
+0:163        'f4' ( in 4-component vector of float)
+0:164      subgroupMax ( global 4-component vector of float)
+0:164        'f4' ( in 4-component vector of float)
+0:165      subgroupAnd ( global 4-component vector of uint)
+0:165        'ballot' ( temp 4-component vector of uint)
+0:166      subgroupOr ( global 4-component vector of uint)
+0:166        'ballot' ( temp 4-component vector of uint)
+0:167      subgroupXor ( global 4-component vector of uint)
+0:167        'ballot' ( temp 4-component vector of uint)
+0:168      subgroupInclusiveAdd ( global 4-component vector of float)
+0:168        'f4' ( in 4-component vector of float)
+0:169      subgroupInclusiveMul ( global 4-component vector of float)
+0:169        'f4' ( in 4-component vector of float)
+0:170      subgroupInclusiveMin ( global 4-component vector of float)
+0:170        'f4' ( in 4-component vector of float)
+0:171      subgroupInclusiveMax ( global 4-component vector of float)
+0:171        'f4' ( in 4-component vector of float)
+0:172      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:172        'ballot' ( temp 4-component vector of uint)
+0:173      subgroupInclusiveOr ( global 4-component vector of uint)
+0:173        'ballot' ( temp 4-component vector of uint)
+0:174      subgroupInclusiveXor ( global 4-component vector of uint)
+0:174        'ballot' ( temp 4-component vector of uint)
+0:175      subgroupExclusiveAdd ( global 4-component vector of float)
+0:175        'f4' ( in 4-component vector of float)
+0:176      subgroupExclusiveMul ( global 4-component vector of float)
+0:176        'f4' ( in 4-component vector of float)
+0:177      subgroupExclusiveMin ( global 4-component vector of float)
+0:177        'f4' ( in 4-component vector of float)
+0:178      subgroupExclusiveMax ( global 4-component vector of float)
+0:178        'f4' ( in 4-component vector of float)
+0:179      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:179        'ballot' ( temp 4-component vector of uint)
+0:180      subgroupExclusiveOr ( global 4-component vector of uint)
+0:180        'ballot' ( temp 4-component vector of uint)
+0:181      subgroupExclusiveXor ( global 4-component vector of uint)
+0:181        'ballot' ( temp 4-component vector of uint)
+0:185  Function Definition: clustered_works(vf4; ( global void)
+0:185    Function Parameters: 
+0:185      'f4' ( in 4-component vector of float)
+0:187    Sequence
+0:187      Sequence
+0:187        move second child to first child ( temp 4-component vector of uint)
+0:187          'ballot' ( temp 4-component vector of uint)
+0:187          Constant:
+0:187            85 (const uint)
+0:187            0 (const uint)
+0:187            0 (const uint)
+0:187            0 (const uint)
+0:188      subgroupClusteredAdd ( 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      subgroupClusteredMul ( global 4-component vector of float)
+0:189        'f4' ( in 4-component vector of float)
+0:189        Constant:
+0:189          2 (const uint)
+0:190      subgroupClusteredMin ( global 4-component vector of float)
+0:190        'f4' ( in 4-component vector of float)
+0:190        Constant:
+0:190          2 (const uint)
+0:191      subgroupClusteredMax ( global 4-component vector of float)
+0:191        'f4' ( in 4-component vector of float)
+0:191        Constant:
+0:191          2 (const uint)
+0:192      subgroupClusteredAnd ( global 4-component vector of uint)
+0:192        'ballot' ( temp 4-component vector of uint)
+0:192        Constant:
+0:192          2 (const uint)
+0:193      subgroupClusteredOr ( global 4-component vector of uint)
+0:193        'ballot' ( temp 4-component vector of uint)
+0:193        Constant:
+0:193          2 (const uint)
+0:194      subgroupClusteredXor ( global 4-component vector of uint)
+0:194        'ballot' ( temp 4-component vector of uint)
+0:194        Constant:
+0:194          2 (const uint)
+0:198  Function Definition: quad_works(vf4; ( global void)
+0:198    Function Parameters: 
+0:198      'f4' ( in 4-component vector of float)
+0:200    Sequence
+0:200      subgroupQuadBroadcast ( global 4-component vector of float)
+0:200        'f4' ( in 4-component vector of float)
+0:200        Constant:
+0:200          0 (const uint)
+0:201      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:201        'f4' ( in 4-component vector of float)
+0:202      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:202        'f4' ( in 4-component vector of float)
+0:203      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:203        'f4' ( in 4-component vector of float)
+0:207  Function Definition: partitioned_works(vf4; ( global void)
+0:207    Function Parameters: 
+0:207      'f4' ( in 4-component vector of float)
+0:209    Sequence
+0:209      Sequence
+0:209        move second child to first child ( temp 4-component vector of uint)
+0:209          'parti' ( temp 4-component vector of uint)
+0:209          subgroupPartitionNV ( global 4-component vector of uint)
+0:209            'f4' ( in 4-component vector of float)
+0:210      Sequence
+0:210        move second child to first child ( temp 4-component vector of uint)
+0:210          'ballot' ( temp 4-component vector of uint)
+0:210          Constant:
+0:210            85 (const uint)
+0:210            0 (const uint)
+0:210            0 (const uint)
+0:210            0 (const uint)
+0:211      subgroupPartitionedAddNV ( 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      subgroupPartitionedMulNV ( 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      subgroupPartitionedMinNV ( 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      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:214        'f4' ( in 4-component vector of float)
+0:214        'parti' ( temp 4-component vector of uint)
+0:215      subgroupPartitionedAndNV ( 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      subgroupPartitionedOrNV ( 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      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:217        'ballot' ( temp 4-component vector of uint)
+0:217        'parti' ( temp 4-component vector of uint)
+0:218      subgroupPartitionedInclusiveAddNV ( 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      subgroupPartitionedInclusiveMulNV ( 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      subgroupPartitionedInclusiveMinNV ( 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      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:221        'f4' ( in 4-component vector of float)
+0:221        'parti' ( temp 4-component vector of uint)
+0:222      subgroupPartitionedInclusiveAndNV ( 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      subgroupPartitionedInclusiveOrNV ( 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      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:224        'ballot' ( temp 4-component vector of uint)
+0:224        'parti' ( temp 4-component vector of uint)
+0:225      subgroupPartitionedExclusiveAddNV ( 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      subgroupPartitionedExclusiveMulNV ( 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:227      subgroupPartitionedExclusiveMinNV ( 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      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:228        'f4' ( in 4-component vector of float)
+0:228        'parti' ( temp 4-component vector of uint)
+0:229      subgroupPartitionedExclusiveAndNV ( 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      subgroupPartitionedExclusiveOrNV ( 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:231      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:231        'ballot' ( temp 4-component vector of uint)
+0:231        'parti' ( temp 4-component vector of uint)
+0:235  Function Definition: sm_builtins_err( ( global void)
+0:235    Function Parameters: 
+0:237    Sequence
+0:237      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:238      'gl_SMCountNV' ( in uint SMCountNV)
+0:239      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:240      'gl_SMIDNV' ( in uint SMIDNV)
+0:247  Function Definition: sm_builtins( ( global void)
+0:247    Function Parameters: 
+0:249    Sequence
+0:249      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:250      'gl_SMCountNV' ( in uint SMCountNV)
+0:251      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:252      'gl_SMIDNV' ( in uint SMIDNV)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+
+
+Linked tessellation control stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+vertices = 1
+ERROR: node is still EOpNull!
+0:110  Function Definition: main( ( global void)
+0:110    Function Parameters: 
+0:112    Sequence
+0:112      move second child to first child ( temp 4-component vector of uint)
+0:112        indirect index (layout( column_major std430 offset=0) temp 4-component vector of uint)
+0:112          result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint)
+0:112            'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:112            Constant:
+0:112              0 (const uint)
+0:112          'gl_PrimitiveID' ( in int PrimitiveID)
+0:112        Construct uvec4 ( temp 4-component vector of uint)
+0:112          'gl_SubgroupSize' ( in uint SubgroupSize)
+0:112          'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:112          Constant:
+0:112            0 (const uint)
+0:112          Constant:
+0:112            0 (const uint)
+0:113      subgroupBarrier ( global void)
+0:114      subgroupMemoryBarrier ( global void)
+0:115      subgroupMemoryBarrierBuffer ( global void)
+0:116      subgroupMemoryBarrierImage ( global void)
+0:117      subgroupElect ( global bool)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+
diff --git a/Test/baseResults/glsl.450.subgroup.tese.out b/Test/baseResults/glsl.450.subgroup.tese.out
new file mode 100644
index 0000000..3f05d77
--- /dev/null
+++ b/Test/baseResults/glsl.450.subgroup.tese.out
@@ -0,0 +1,673 @@
+glsl.450.subgroup.tese
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : undeclared identifier 
+ERROR: 0:14: 'gl_SubgroupID' : undeclared identifier 
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : no matching overloaded function found 
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:78: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+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:237: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:238: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:239: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:240: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors.  No code generated.
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+input primitive = isolines
+vertex spacing = none
+triangle order = none
+ERROR: node is still EOpNull!
+0:3  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3    Function Parameters: 
+0:3      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:6      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8      subgroupBarrier ( global void)
+0:9      subgroupMemoryBarrier ( global void)
+0:10      subgroupMemoryBarrierBuffer ( global void)
+0:11      subgroupMemoryBarrierImage ( global void)
+0:12      subgroupElect ( global bool)
+0:13      'gl_NumSubgroups' ( temp float)
+0:14      'gl_SubgroupID' ( temp float)
+0:15      Constant:
+0:15        0.000000
+0:17      subgroupAll ( global bool)
+0:17        Constant:
+0:17          true (const bool)
+0:18      subgroupAny ( global bool)
+0:18        Constant:
+0:18          false (const bool)
+0:19      subgroupAllEqual ( global bool)
+0:19        'f4' ( in 4-component vector of float)
+0:21      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26      subgroupBroadcast ( global 4-component vector of float)
+0:26        'f4' ( in 4-component vector of float)
+0:26        Constant:
+0:26          0 (const uint)
+0:27      subgroupBroadcastFirst ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of uint)
+0:28          'ballot' ( temp 4-component vector of uint)
+0:28          subgroupBallot ( global 4-component vector of uint)
+0:28            Constant:
+0:28              false (const bool)
+0:29      subgroupInverseBallot ( global bool)
+0:29        Constant:
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:30      subgroupBallotBitExtract ( global bool)
+0:30        'ballot' ( temp 4-component vector of uint)
+0:30        Constant:
+0:30          0 (const uint)
+0:31      subgroupBallotBitCount ( global uint)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:32      subgroupBallotInclusiveBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotExclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotFindLSB ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindMSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:37      subgroupShuffle ( global 4-component vector of float)
+0:37        'f4' ( in 4-component vector of float)
+0:37        Constant:
+0:37          0 (const uint)
+0:38      subgroupShuffleXor ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          1 (const uint)
+0:39      subgroupShuffleUp ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleDown ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        'result' ( temp 4-component vector of float)
+0:42        subgroupAdd ( global 4-component vector of float)
+0:42          'f4' ( in 4-component vector of float)
+0:43      subgroupMul ( global 4-component vector of float)
+0:43        'f4' ( in 4-component vector of float)
+0:44      subgroupMin ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMax ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupAnd ( global 4-component vector of uint)
+0:46        'ballot' ( temp 4-component vector of uint)
+0:47      subgroupOr ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupXor ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupInclusiveAdd ( global 4-component vector of float)
+0:49        'f4' ( in 4-component vector of float)
+0:50      subgroupInclusiveMul ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMin ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMax ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53        'ballot' ( temp 4-component vector of uint)
+0:54      subgroupInclusiveOr ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveXor ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupExclusiveAdd ( global 4-component vector of float)
+0:56        'f4' ( in 4-component vector of float)
+0:57      subgroupExclusiveMul ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMin ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMax ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60        'ballot' ( temp 4-component vector of uint)
+0:61      subgroupExclusiveOr ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveXor ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:64      subgroupClusteredAdd ( global 4-component vector of float)
+0:64        'f4' ( in 4-component vector of float)
+0:64        Constant:
+0:64          2 (const uint)
+0:65      subgroupClusteredMul ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMin ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMax ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredAnd ( global 4-component vector of uint)
+0:68        'ballot' ( temp 4-component vector of uint)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredOr ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredXor ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:72      subgroupQuadBroadcast ( global 4-component vector of float)
+0:72        'f4' ( in 4-component vector of float)
+0:72        Constant:
+0:72          0 (const uint)
+0:73      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:74      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:77      Sequence
+0:77        move second child to first child ( temp 4-component vector of uint)
+0:77          'parti' ( temp 4-component vector of uint)
+0:77          subgroupPartitionNV ( global 4-component vector of uint)
+0:77            'f4' ( in 4-component vector of float)
+0:78      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:78        'f4' ( in 4-component vector of float)
+0:78        'parti' ( temp 4-component vector of uint)
+0:79      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:79        'f4' ( in 4-component vector of float)
+0:79        'parti' ( temp 4-component vector of uint)
+0:80      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:82        'ballot' ( temp 4-component vector of uint)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:83        'ballot' ( temp 4-component vector of uint)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:85        'f4' ( in 4-component vector of float)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:86        'f4' ( in 4-component vector of float)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:89        'ballot' ( temp 4-component vector of uint)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:90        'ballot' ( temp 4-component vector of uint)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:92        'f4' ( in 4-component vector of float)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:93        'f4' ( in 4-component vector of float)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:96        'ballot' ( temp 4-component vector of uint)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:97        'ballot' ( temp 4-component vector of uint)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:100      Branch: Return with expression
+0:100        'result' ( temp 4-component vector of float)
+0:110  Function Definition: main( ( global void)
+0:110    Function Parameters: 
+0:112    Sequence
+0:112      move second child to first child ( temp 4-component vector of uint)
+0:112        indirect index (layout( column_major std430 offset=0) temp 4-component vector of uint)
+0:112          result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint)
+0:112            'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:112            Constant:
+0:112              0 (const uint)
+0:112          'gl_PrimitiveID' ( in int PrimitiveID)
+0:112        Construct uvec4 ( temp 4-component vector of uint)
+0:112          'gl_SubgroupSize' ( in uint SubgroupSize)
+0:112          'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:112          Constant:
+0:112            0 (const uint)
+0:112          Constant:
+0:112            0 (const uint)
+0:113      subgroupBarrier ( global void)
+0:114      subgroupMemoryBarrier ( global void)
+0:115      subgroupMemoryBarrierBuffer ( global void)
+0:116      subgroupMemoryBarrierImage ( global void)
+0:117      subgroupElect ( global bool)
+0:121  Function Definition: ballot_works(vf4; ( global void)
+0:121    Function Parameters: 
+0:121      'f4' ( in 4-component vector of float)
+0:122    Sequence
+0:122      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:123      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:124      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:125      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:126      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:127      subgroupBroadcast ( global 4-component vector of float)
+0:127        'f4' ( in 4-component vector of float)
+0:127        Constant:
+0:127          0 (const uint)
+0:128      subgroupBroadcastFirst ( global 4-component vector of float)
+0:128        'f4' ( in 4-component vector of float)
+0:129      Sequence
+0:129        move second child to first child ( temp 4-component vector of uint)
+0:129          'ballot' ( temp 4-component vector of uint)
+0:129          subgroupBallot ( global 4-component vector of uint)
+0:129            Constant:
+0:129              false (const bool)
+0:130      subgroupInverseBallot ( global bool)
+0:130        Constant:
+0:130          1 (const uint)
+0:130          1 (const uint)
+0:130          1 (const uint)
+0:130          1 (const uint)
+0:131      subgroupBallotBitExtract ( global bool)
+0:131        'ballot' ( temp 4-component vector of uint)
+0:131        Constant:
+0:131          0 (const uint)
+0:132      subgroupBallotBitCount ( global uint)
+0:132        'ballot' ( temp 4-component vector of uint)
+0:133      subgroupBallotInclusiveBitCount ( global uint)
+0:133        'ballot' ( temp 4-component vector of uint)
+0:134      subgroupBallotExclusiveBitCount ( global uint)
+0:134        'ballot' ( temp 4-component vector of uint)
+0:135      subgroupBallotFindLSB ( global uint)
+0:135        'ballot' ( temp 4-component vector of uint)
+0:136      subgroupBallotFindMSB ( global uint)
+0:136        'ballot' ( temp 4-component vector of uint)
+0:140  Function Definition: vote_works(vf4; ( global void)
+0:140    Function Parameters: 
+0:140      'f4' ( in 4-component vector of float)
+0:142    Sequence
+0:142      subgroupAll ( global bool)
+0:142        Constant:
+0:142          true (const bool)
+0:143      subgroupAny ( global bool)
+0:143        Constant:
+0:143          false (const bool)
+0:144      subgroupAllEqual ( global bool)
+0:144        'f4' ( in 4-component vector of float)
+0:149  Function Definition: shuffle_works(vf4; ( global void)
+0:149    Function Parameters: 
+0:149      'f4' ( in 4-component vector of float)
+0:151    Sequence
+0:151      subgroupShuffle ( global 4-component vector of float)
+0:151        'f4' ( in 4-component vector of float)
+0:151        Constant:
+0:151          0 (const uint)
+0:152      subgroupShuffleXor ( global 4-component vector of float)
+0:152        'f4' ( in 4-component vector of float)
+0:152        Constant:
+0:152          1 (const uint)
+0:153      subgroupShuffleUp ( global 4-component vector of float)
+0:153        'f4' ( in 4-component vector of float)
+0:153        Constant:
+0:153          1 (const uint)
+0:154      subgroupShuffleDown ( global 4-component vector of float)
+0:154        'f4' ( in 4-component vector of float)
+0:154        Constant:
+0:154          1 (const uint)
+0:158  Function Definition: arith_works(vf4; ( global void)
+0:158    Function Parameters: 
+0:158      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:161      subgroupAdd ( global 4-component vector of float)
+0:161        'f4' ( in 4-component vector of float)
+0:162      subgroupMul ( global 4-component vector of float)
+0:162        'f4' ( in 4-component vector of float)
+0:163      subgroupMin ( global 4-component vector of float)
+0:163        'f4' ( in 4-component vector of float)
+0:164      subgroupMax ( global 4-component vector of float)
+0:164        'f4' ( in 4-component vector of float)
+0:165      subgroupAnd ( global 4-component vector of uint)
+0:165        'ballot' ( temp 4-component vector of uint)
+0:166      subgroupOr ( global 4-component vector of uint)
+0:166        'ballot' ( temp 4-component vector of uint)
+0:167      subgroupXor ( global 4-component vector of uint)
+0:167        'ballot' ( temp 4-component vector of uint)
+0:168      subgroupInclusiveAdd ( global 4-component vector of float)
+0:168        'f4' ( in 4-component vector of float)
+0:169      subgroupInclusiveMul ( global 4-component vector of float)
+0:169        'f4' ( in 4-component vector of float)
+0:170      subgroupInclusiveMin ( global 4-component vector of float)
+0:170        'f4' ( in 4-component vector of float)
+0:171      subgroupInclusiveMax ( global 4-component vector of float)
+0:171        'f4' ( in 4-component vector of float)
+0:172      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:172        'ballot' ( temp 4-component vector of uint)
+0:173      subgroupInclusiveOr ( global 4-component vector of uint)
+0:173        'ballot' ( temp 4-component vector of uint)
+0:174      subgroupInclusiveXor ( global 4-component vector of uint)
+0:174        'ballot' ( temp 4-component vector of uint)
+0:175      subgroupExclusiveAdd ( global 4-component vector of float)
+0:175        'f4' ( in 4-component vector of float)
+0:176      subgroupExclusiveMul ( global 4-component vector of float)
+0:176        'f4' ( in 4-component vector of float)
+0:177      subgroupExclusiveMin ( global 4-component vector of float)
+0:177        'f4' ( in 4-component vector of float)
+0:178      subgroupExclusiveMax ( global 4-component vector of float)
+0:178        'f4' ( in 4-component vector of float)
+0:179      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:179        'ballot' ( temp 4-component vector of uint)
+0:180      subgroupExclusiveOr ( global 4-component vector of uint)
+0:180        'ballot' ( temp 4-component vector of uint)
+0:181      subgroupExclusiveXor ( global 4-component vector of uint)
+0:181        'ballot' ( temp 4-component vector of uint)
+0:185  Function Definition: clustered_works(vf4; ( global void)
+0:185    Function Parameters: 
+0:185      'f4' ( in 4-component vector of float)
+0:187    Sequence
+0:187      Sequence
+0:187        move second child to first child ( temp 4-component vector of uint)
+0:187          'ballot' ( temp 4-component vector of uint)
+0:187          Constant:
+0:187            85 (const uint)
+0:187            0 (const uint)
+0:187            0 (const uint)
+0:187            0 (const uint)
+0:188      subgroupClusteredAdd ( 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      subgroupClusteredMul ( global 4-component vector of float)
+0:189        'f4' ( in 4-component vector of float)
+0:189        Constant:
+0:189          2 (const uint)
+0:190      subgroupClusteredMin ( global 4-component vector of float)
+0:190        'f4' ( in 4-component vector of float)
+0:190        Constant:
+0:190          2 (const uint)
+0:191      subgroupClusteredMax ( global 4-component vector of float)
+0:191        'f4' ( in 4-component vector of float)
+0:191        Constant:
+0:191          2 (const uint)
+0:192      subgroupClusteredAnd ( global 4-component vector of uint)
+0:192        'ballot' ( temp 4-component vector of uint)
+0:192        Constant:
+0:192          2 (const uint)
+0:193      subgroupClusteredOr ( global 4-component vector of uint)
+0:193        'ballot' ( temp 4-component vector of uint)
+0:193        Constant:
+0:193          2 (const uint)
+0:194      subgroupClusteredXor ( global 4-component vector of uint)
+0:194        'ballot' ( temp 4-component vector of uint)
+0:194        Constant:
+0:194          2 (const uint)
+0:198  Function Definition: quad_works(vf4; ( global void)
+0:198    Function Parameters: 
+0:198      'f4' ( in 4-component vector of float)
+0:200    Sequence
+0:200      subgroupQuadBroadcast ( global 4-component vector of float)
+0:200        'f4' ( in 4-component vector of float)
+0:200        Constant:
+0:200          0 (const uint)
+0:201      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:201        'f4' ( in 4-component vector of float)
+0:202      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:202        'f4' ( in 4-component vector of float)
+0:203      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:203        'f4' ( in 4-component vector of float)
+0:207  Function Definition: partitioned_works(vf4; ( global void)
+0:207    Function Parameters: 
+0:207      'f4' ( in 4-component vector of float)
+0:209    Sequence
+0:209      Sequence
+0:209        move second child to first child ( temp 4-component vector of uint)
+0:209          'parti' ( temp 4-component vector of uint)
+0:209          subgroupPartitionNV ( global 4-component vector of uint)
+0:209            'f4' ( in 4-component vector of float)
+0:210      Sequence
+0:210        move second child to first child ( temp 4-component vector of uint)
+0:210          'ballot' ( temp 4-component vector of uint)
+0:210          Constant:
+0:210            85 (const uint)
+0:210            0 (const uint)
+0:210            0 (const uint)
+0:210            0 (const uint)
+0:211      subgroupPartitionedAddNV ( 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      subgroupPartitionedMulNV ( 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      subgroupPartitionedMinNV ( 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      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:214        'f4' ( in 4-component vector of float)
+0:214        'parti' ( temp 4-component vector of uint)
+0:215      subgroupPartitionedAndNV ( 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      subgroupPartitionedOrNV ( 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      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:217        'ballot' ( temp 4-component vector of uint)
+0:217        'parti' ( temp 4-component vector of uint)
+0:218      subgroupPartitionedInclusiveAddNV ( 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      subgroupPartitionedInclusiveMulNV ( 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      subgroupPartitionedInclusiveMinNV ( 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      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:221        'f4' ( in 4-component vector of float)
+0:221        'parti' ( temp 4-component vector of uint)
+0:222      subgroupPartitionedInclusiveAndNV ( 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      subgroupPartitionedInclusiveOrNV ( 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      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:224        'ballot' ( temp 4-component vector of uint)
+0:224        'parti' ( temp 4-component vector of uint)
+0:225      subgroupPartitionedExclusiveAddNV ( 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      subgroupPartitionedExclusiveMulNV ( 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:227      subgroupPartitionedExclusiveMinNV ( 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      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:228        'f4' ( in 4-component vector of float)
+0:228        'parti' ( temp 4-component vector of uint)
+0:229      subgroupPartitionedExclusiveAndNV ( 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      subgroupPartitionedExclusiveOrNV ( 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:231      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:231        'ballot' ( temp 4-component vector of uint)
+0:231        'parti' ( temp 4-component vector of uint)
+0:235  Function Definition: sm_builtins_err( ( global void)
+0:235    Function Parameters: 
+0:237    Sequence
+0:237      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:238      'gl_SMCountNV' ( in uint SMCountNV)
+0:239      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:240      'gl_SMIDNV' ( in uint SMIDNV)
+0:247  Function Definition: sm_builtins( ( global void)
+0:247    Function Parameters: 
+0:249    Sequence
+0:249      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:250      'gl_SMCountNV' ( in uint SMCountNV)
+0:251      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:252      'gl_SMIDNV' ( in uint SMIDNV)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+
+
+Linked tessellation evaluation stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+input primitive = isolines
+vertex spacing = equal_spacing
+triangle order = ccw
+ERROR: node is still EOpNull!
+0:110  Function Definition: main( ( global void)
+0:110    Function Parameters: 
+0:112    Sequence
+0:112      move second child to first child ( temp 4-component vector of uint)
+0:112        indirect index (layout( column_major std430 offset=0) temp 4-component vector of uint)
+0:112          result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint)
+0:112            'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:112            Constant:
+0:112              0 (const uint)
+0:112          'gl_PrimitiveID' ( in int PrimitiveID)
+0:112        Construct uvec4 ( temp 4-component vector of uint)
+0:112          'gl_SubgroupSize' ( in uint SubgroupSize)
+0:112          'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:112          Constant:
+0:112            0 (const uint)
+0:112          Constant:
+0:112            0 (const uint)
+0:113      subgroupBarrier ( global void)
+0:114      subgroupMemoryBarrier ( global void)
+0:115      subgroupMemoryBarrierBuffer ( global void)
+0:116      subgroupMemoryBarrierImage ( global void)
+0:117      subgroupElect ( global bool)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+
diff --git a/Test/baseResults/glsl.450.subgroup.vert.out b/Test/baseResults/glsl.450.subgroup.vert.out
new file mode 100644
index 0000000..8850bf4
--- /dev/null
+++ b/Test/baseResults/glsl.450.subgroup.vert.out
@@ -0,0 +1,671 @@
+glsl.450.subgroup.vert
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : undeclared identifier 
+ERROR: 0:14: 'gl_SubgroupID' : undeclared identifier 
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : no matching overloaded function found 
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:78: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+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: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: 90 compilation errors.  No code generated.
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:3  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3    Function Parameters: 
+0:3      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:6      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8      subgroupBarrier ( global void)
+0:9      subgroupMemoryBarrier ( global void)
+0:10      subgroupMemoryBarrierBuffer ( global void)
+0:11      subgroupMemoryBarrierImage ( global void)
+0:12      subgroupElect ( global bool)
+0:13      'gl_NumSubgroups' ( temp float)
+0:14      'gl_SubgroupID' ( temp float)
+0:15      Constant:
+0:15        0.000000
+0:17      subgroupAll ( global bool)
+0:17        Constant:
+0:17          true (const bool)
+0:18      subgroupAny ( global bool)
+0:18        Constant:
+0:18          false (const bool)
+0:19      subgroupAllEqual ( global bool)
+0:19        'f4' ( in 4-component vector of float)
+0:21      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26      subgroupBroadcast ( global 4-component vector of float)
+0:26        'f4' ( in 4-component vector of float)
+0:26        Constant:
+0:26          0 (const uint)
+0:27      subgroupBroadcastFirst ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of uint)
+0:28          'ballot' ( temp 4-component vector of uint)
+0:28          subgroupBallot ( global 4-component vector of uint)
+0:28            Constant:
+0:28              false (const bool)
+0:29      subgroupInverseBallot ( global bool)
+0:29        Constant:
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:30      subgroupBallotBitExtract ( global bool)
+0:30        'ballot' ( temp 4-component vector of uint)
+0:30        Constant:
+0:30          0 (const uint)
+0:31      subgroupBallotBitCount ( global uint)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:32      subgroupBallotInclusiveBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotExclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotFindLSB ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindMSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:37      subgroupShuffle ( global 4-component vector of float)
+0:37        'f4' ( in 4-component vector of float)
+0:37        Constant:
+0:37          0 (const uint)
+0:38      subgroupShuffleXor ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          1 (const uint)
+0:39      subgroupShuffleUp ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleDown ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        'result' ( temp 4-component vector of float)
+0:42        subgroupAdd ( global 4-component vector of float)
+0:42          'f4' ( in 4-component vector of float)
+0:43      subgroupMul ( global 4-component vector of float)
+0:43        'f4' ( in 4-component vector of float)
+0:44      subgroupMin ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMax ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupAnd ( global 4-component vector of uint)
+0:46        'ballot' ( temp 4-component vector of uint)
+0:47      subgroupOr ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupXor ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupInclusiveAdd ( global 4-component vector of float)
+0:49        'f4' ( in 4-component vector of float)
+0:50      subgroupInclusiveMul ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMin ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMax ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53        'ballot' ( temp 4-component vector of uint)
+0:54      subgroupInclusiveOr ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveXor ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupExclusiveAdd ( global 4-component vector of float)
+0:56        'f4' ( in 4-component vector of float)
+0:57      subgroupExclusiveMul ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMin ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMax ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60        'ballot' ( temp 4-component vector of uint)
+0:61      subgroupExclusiveOr ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveXor ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:64      subgroupClusteredAdd ( global 4-component vector of float)
+0:64        'f4' ( in 4-component vector of float)
+0:64        Constant:
+0:64          2 (const uint)
+0:65      subgroupClusteredMul ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMin ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMax ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredAnd ( global 4-component vector of uint)
+0:68        'ballot' ( temp 4-component vector of uint)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredOr ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredXor ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:72      subgroupQuadBroadcast ( global 4-component vector of float)
+0:72        'f4' ( in 4-component vector of float)
+0:72        Constant:
+0:72          0 (const uint)
+0:73      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:74      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:77      Sequence
+0:77        move second child to first child ( temp 4-component vector of uint)
+0:77          'parti' ( temp 4-component vector of uint)
+0:77          subgroupPartitionNV ( global 4-component vector of uint)
+0:77            'f4' ( in 4-component vector of float)
+0:78      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:78        'f4' ( in 4-component vector of float)
+0:78        'parti' ( temp 4-component vector of uint)
+0:79      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:79        'f4' ( in 4-component vector of float)
+0:79        'parti' ( temp 4-component vector of uint)
+0:80      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:82        'ballot' ( temp 4-component vector of uint)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:83        'ballot' ( temp 4-component vector of uint)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:85        'f4' ( in 4-component vector of float)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:86        'f4' ( in 4-component vector of float)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:89        'ballot' ( temp 4-component vector of uint)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:90        'ballot' ( temp 4-component vector of uint)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:92        'f4' ( in 4-component vector of float)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:93        'f4' ( in 4-component vector of float)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:96        'ballot' ( temp 4-component vector of uint)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:97        'ballot' ( temp 4-component vector of uint)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:100      Branch: Return with expression
+0:100        'result' ( temp 4-component vector of float)
+0:109  Function Definition: main( ( global void)
+0:109    Function Parameters: 
+0:111    Sequence
+0:111      move second child to first child ( temp 4-component vector of uint)
+0:111        indirect index (layout( column_major std430 offset=0) temp 4-component vector of uint)
+0:111          result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint)
+0:111            'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:111            Constant:
+0:111              0 (const uint)
+0:111          'gl_VertexID' ( gl_VertexId int VertexId)
+0:111        Construct uvec4 ( temp 4-component vector of uint)
+0:111          'gl_SubgroupSize' ( in uint SubgroupSize)
+0:111          'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:111          Constant:
+0:111            0 (const uint)
+0:111          Constant:
+0:111            0 (const uint)
+0:112      subgroupBarrier ( global void)
+0:113      subgroupMemoryBarrier ( global void)
+0:114      subgroupMemoryBarrierBuffer ( global void)
+0:115      subgroupMemoryBarrierImage ( global void)
+0:116      subgroupElect ( global bool)
+0:120  Function Definition: ballot_works(vf4; ( global void)
+0:120    Function Parameters: 
+0:120      'f4' ( in 4-component vector of float)
+0:121    Sequence
+0:121      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:122      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:123      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:124      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:125      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:126      subgroupBroadcast ( global 4-component vector of float)
+0:126        'f4' ( in 4-component vector of float)
+0:126        Constant:
+0:126          0 (const uint)
+0:127      subgroupBroadcastFirst ( global 4-component vector of float)
+0:127        'f4' ( in 4-component vector of float)
+0:128      Sequence
+0:128        move second child to first child ( temp 4-component vector of uint)
+0:128          'ballot' ( temp 4-component vector of uint)
+0:128          subgroupBallot ( global 4-component vector of uint)
+0:128            Constant:
+0:128              false (const bool)
+0:129      subgroupInverseBallot ( global bool)
+0:129        Constant:
+0:129          1 (const uint)
+0:129          1 (const uint)
+0:129          1 (const uint)
+0:129          1 (const uint)
+0:130      subgroupBallotBitExtract ( global bool)
+0:130        'ballot' ( temp 4-component vector of uint)
+0:130        Constant:
+0:130          0 (const uint)
+0:131      subgroupBallotBitCount ( global uint)
+0:131        'ballot' ( temp 4-component vector of uint)
+0:132      subgroupBallotInclusiveBitCount ( global uint)
+0:132        'ballot' ( temp 4-component vector of uint)
+0:133      subgroupBallotExclusiveBitCount ( global uint)
+0:133        'ballot' ( temp 4-component vector of uint)
+0:134      subgroupBallotFindLSB ( global uint)
+0:134        'ballot' ( temp 4-component vector of uint)
+0:135      subgroupBallotFindMSB ( global uint)
+0:135        'ballot' ( temp 4-component vector of uint)
+0:139  Function Definition: vote_works(vf4; ( global void)
+0:139    Function Parameters: 
+0:139      'f4' ( in 4-component vector of float)
+0:141    Sequence
+0:141      subgroupAll ( global bool)
+0:141        Constant:
+0:141          true (const bool)
+0:142      subgroupAny ( global bool)
+0:142        Constant:
+0:142          false (const bool)
+0:143      subgroupAllEqual ( global bool)
+0:143        'f4' ( in 4-component vector of float)
+0:148  Function Definition: shuffle_works(vf4; ( global void)
+0:148    Function Parameters: 
+0:148      'f4' ( in 4-component vector of float)
+0:150    Sequence
+0:150      subgroupShuffle ( global 4-component vector of float)
+0:150        'f4' ( in 4-component vector of float)
+0:150        Constant:
+0:150          0 (const uint)
+0:151      subgroupShuffleXor ( global 4-component vector of float)
+0:151        'f4' ( in 4-component vector of float)
+0:151        Constant:
+0:151          1 (const uint)
+0:152      subgroupShuffleUp ( global 4-component vector of float)
+0:152        'f4' ( in 4-component vector of float)
+0:152        Constant:
+0:152          1 (const uint)
+0:153      subgroupShuffleDown ( global 4-component vector of float)
+0:153        'f4' ( in 4-component vector of float)
+0:153        Constant:
+0:153          1 (const uint)
+0:157  Function Definition: arith_works(vf4; ( global void)
+0:157    Function Parameters: 
+0:157      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:160      subgroupAdd ( global 4-component vector of float)
+0:160        'f4' ( in 4-component vector of float)
+0:161      subgroupMul ( global 4-component vector of float)
+0:161        'f4' ( in 4-component vector of float)
+0:162      subgroupMin ( global 4-component vector of float)
+0:162        'f4' ( in 4-component vector of float)
+0:163      subgroupMax ( global 4-component vector of float)
+0:163        'f4' ( in 4-component vector of float)
+0:164      subgroupAnd ( global 4-component vector of uint)
+0:164        'ballot' ( temp 4-component vector of uint)
+0:165      subgroupOr ( global 4-component vector of uint)
+0:165        'ballot' ( temp 4-component vector of uint)
+0:166      subgroupXor ( global 4-component vector of uint)
+0:166        'ballot' ( temp 4-component vector of uint)
+0:167      subgroupInclusiveAdd ( global 4-component vector of float)
+0:167        'f4' ( in 4-component vector of float)
+0:168      subgroupInclusiveMul ( global 4-component vector of float)
+0:168        'f4' ( in 4-component vector of float)
+0:169      subgroupInclusiveMin ( global 4-component vector of float)
+0:169        'f4' ( in 4-component vector of float)
+0:170      subgroupInclusiveMax ( global 4-component vector of float)
+0:170        'f4' ( in 4-component vector of float)
+0:171      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:171        'ballot' ( temp 4-component vector of uint)
+0:172      subgroupInclusiveOr ( global 4-component vector of uint)
+0:172        'ballot' ( temp 4-component vector of uint)
+0:173      subgroupInclusiveXor ( global 4-component vector of uint)
+0:173        'ballot' ( temp 4-component vector of uint)
+0:174      subgroupExclusiveAdd ( global 4-component vector of float)
+0:174        'f4' ( in 4-component vector of float)
+0:175      subgroupExclusiveMul ( global 4-component vector of float)
+0:175        'f4' ( in 4-component vector of float)
+0:176      subgroupExclusiveMin ( global 4-component vector of float)
+0:176        'f4' ( in 4-component vector of float)
+0:177      subgroupExclusiveMax ( global 4-component vector of float)
+0:177        'f4' ( in 4-component vector of float)
+0:178      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:178        'ballot' ( temp 4-component vector of uint)
+0:179      subgroupExclusiveOr ( global 4-component vector of uint)
+0:179        'ballot' ( temp 4-component vector of uint)
+0:180      subgroupExclusiveXor ( global 4-component vector of uint)
+0:180        'ballot' ( temp 4-component vector of uint)
+0:184  Function Definition: clustered_works(vf4; ( global void)
+0:184    Function Parameters: 
+0:184      'f4' ( in 4-component vector of float)
+0:186    Sequence
+0:186      Sequence
+0:186        move second child to first child ( temp 4-component vector of uint)
+0:186          'ballot' ( temp 4-component vector of uint)
+0:186          Constant:
+0:186            85 (const uint)
+0:186            0 (const uint)
+0:186            0 (const uint)
+0:186            0 (const uint)
+0:187      subgroupClusteredAdd ( 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      subgroupClusteredMul ( 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      subgroupClusteredMin ( global 4-component vector of float)
+0:189        'f4' ( in 4-component vector of float)
+0:189        Constant:
+0:189          2 (const uint)
+0:190      subgroupClusteredMax ( global 4-component vector of float)
+0:190        'f4' ( in 4-component vector of float)
+0:190        Constant:
+0:190          2 (const uint)
+0:191      subgroupClusteredAnd ( global 4-component vector of uint)
+0:191        'ballot' ( temp 4-component vector of uint)
+0:191        Constant:
+0:191          2 (const uint)
+0:192      subgroupClusteredOr ( global 4-component vector of uint)
+0:192        'ballot' ( temp 4-component vector of uint)
+0:192        Constant:
+0:192          2 (const uint)
+0:193      subgroupClusteredXor ( global 4-component vector of uint)
+0:193        'ballot' ( temp 4-component vector of uint)
+0:193        Constant:
+0:193          2 (const uint)
+0:197  Function Definition: quad_works(vf4; ( global void)
+0:197    Function Parameters: 
+0:197      'f4' ( in 4-component vector of float)
+0:199    Sequence
+0:199      subgroupQuadBroadcast ( global 4-component vector of float)
+0:199        'f4' ( in 4-component vector of float)
+0:199        Constant:
+0:199          0 (const uint)
+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      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      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      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      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      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      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      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      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      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      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      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      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      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      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      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      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: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' ( in uint WarpsPerSMNV)
+0:237      'gl_SMCountNV' ( in uint SMCountNV)
+0:238      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:239      'gl_SMIDNV' ( in uint SMIDNV)
+0:246  Function Definition: sm_builtins( ( global void)
+0:246    Function Parameters: 
+0:248    Sequence
+0:248      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:249      'gl_SMCountNV' ( in uint SMCountNV)
+0:250      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:251      'gl_SMIDNV' ( in uint SMIDNV)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:109  Function Definition: main( ( global void)
+0:109    Function Parameters: 
+0:111    Sequence
+0:111      move second child to first child ( temp 4-component vector of uint)
+0:111        indirect index (layout( column_major std430 offset=0) temp 4-component vector of uint)
+0:111          result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint)
+0:111            'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:111            Constant:
+0:111              0 (const uint)
+0:111          'gl_VertexID' ( gl_VertexId int VertexId)
+0:111        Construct uvec4 ( temp 4-component vector of uint)
+0:111          'gl_SubgroupSize' ( in uint SubgroupSize)
+0:111          'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:111          Constant:
+0:111            0 (const uint)
+0:111          Constant:
+0:111            0 (const uint)
+0:112      subgroupBarrier ( global void)
+0:113      subgroupMemoryBarrier ( global void)
+0:114      subgroupMemoryBarrierBuffer ( global void)
+0:115      subgroupMemoryBarrierImage ( global void)
+0:116      subgroupElect ( global bool)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/glsl.450.subgroupArithmetic.comp.out b/Test/baseResults/glsl.450.subgroupArithmetic.comp.out
new file mode 100644
index 0000000..431423f
--- /dev/null
+++ b/Test/baseResults/glsl.450.subgroupArithmetic.comp.out
@@ -0,0 +1,14549 @@
+glsl.450.subgroupArithmetic.comp
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 1, 1)
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp uint)
+0:17          'invocation' ( temp uint)
+0:17          mod ( temp uint)
+0:17            add ( temp uint)
+0:17              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      move second child to first child ( temp float)
+0:19        direct index ( temp float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'invocation' ( temp uint)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Constant:
+0:19            0 (const int)
+0:19        subgroupAdd ( global float)
+0:19          direct index ( temp float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                Constant:
+0:19                  0 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:20      move second child to first child ( temp 2-component vector of float)
+0:20        vector swizzle ( temp 2-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'invocation' ( temp uint)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20        subgroupAdd ( global 2-component vector of float)
+0:20          vector swizzle ( temp 2-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                Constant:
+0:20                  1 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:21      move second child to first child ( temp 3-component vector of float)
+0:21        vector swizzle ( temp 3-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'invocation' ( temp uint)
+0:21            Constant:
+0:21              0 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21            Constant:
+0:21              2 (const int)
+0:21        subgroupAdd ( global 3-component vector of float)
+0:21          vector swizzle ( temp 3-component vector of float)
+0:21            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                Constant:
+0:21                  2 (const int)
+0:21              Constant:
+0:21                0 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21              Constant:
+0:21                2 (const int)
+0:22      move second child to first child ( temp 4-component vector of float)
+0:22        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'invocation' ( temp uint)
+0:22          Constant:
+0:22            0 (const int)
+0:22        subgroupAdd ( global 4-component vector of float)
+0:22          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              Constant:
+0:22                3 (const int)
+0:22            Constant:
+0:22              0 (const int)
+0:24      move second child to first child ( temp int)
+0:24        direct index ( temp int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'invocation' ( temp uint)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:24        subgroupAdd ( global int)
+0:24          direct index ( temp int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                Constant:
+0:24                  0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:25      move second child to first child ( temp 2-component vector of int)
+0:25        vector swizzle ( temp 2-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'invocation' ( temp uint)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25        subgroupAdd ( global 2-component vector of int)
+0:25          vector swizzle ( temp 2-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                Constant:
+0:25                  1 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:26      move second child to first child ( temp 3-component vector of int)
+0:26        vector swizzle ( temp 3-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'invocation' ( temp uint)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26        subgroupAdd ( global 3-component vector of int)
+0:26          vector swizzle ( temp 3-component vector of int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                Constant:
+0:26                  2 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:27      move second child to first child ( temp 4-component vector of int)
+0:27        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'invocation' ( temp uint)
+0:27          Constant:
+0:27            1 (const int)
+0:27        subgroupAdd ( global 4-component vector of int)
+0:27          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              Constant:
+0:27                3 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:29      move second child to first child ( temp uint)
+0:29        direct index ( temp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'invocation' ( temp uint)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            0 (const int)
+0:29        subgroupAdd ( global uint)
+0:29          direct index ( temp uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                Constant:
+0:29                  0 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Constant:
+0:29              0 (const int)
+0:30      move second child to first child ( temp 2-component vector of uint)
+0:30        vector swizzle ( temp 2-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'invocation' ( temp uint)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30        subgroupAdd ( global 2-component vector of uint)
+0:30          vector swizzle ( temp 2-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                Constant:
+0:30                  1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:31      move second child to first child ( temp 3-component vector of uint)
+0:31        vector swizzle ( temp 3-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'invocation' ( temp uint)
+0:31            Constant:
+0:31              2 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31        subgroupAdd ( global 3-component vector of uint)
+0:31          vector swizzle ( temp 3-component vector of uint)
+0:31            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                Constant:
+0:31                  2 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:32      move second child to first child ( temp 4-component vector of uint)
+0:32        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'invocation' ( temp uint)
+0:32          Constant:
+0:32            2 (const int)
+0:32        subgroupAdd ( global 4-component vector of uint)
+0:32          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              Constant:
+0:32                3 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:34      move second child to first child ( temp double)
+0:34        direct index ( temp double)
+0:34          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'invocation' ( temp uint)
+0:34            Constant:
+0:34              3 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupAdd ( global double)
+0:34          direct index ( temp double)
+0:34            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                3 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:35      move second child to first child ( temp 2-component vector of double)
+0:35        vector swizzle ( temp 2-component vector of double)
+0:35          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'invocation' ( temp uint)
+0:35            Constant:
+0:35              3 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35        subgroupAdd ( global 2-component vector of double)
+0:35          vector swizzle ( temp 2-component vector of double)
+0:35            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                Constant:
+0:35                  1 (const int)
+0:35              Constant:
+0:35                3 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:36      move second child to first child ( temp 3-component vector of double)
+0:36        vector swizzle ( temp 3-component vector of double)
+0:36          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'invocation' ( temp uint)
+0:36            Constant:
+0:36              3 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36            Constant:
+0:36              2 (const int)
+0:36        subgroupAdd ( global 3-component vector of double)
+0:36          vector swizzle ( temp 3-component vector of double)
+0:36            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                Constant:
+0:36                  2 (const int)
+0:36              Constant:
+0:36                3 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:36              Constant:
+0:36                2 (const int)
+0:37      move second child to first child ( temp 4-component vector of double)
+0:37        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'invocation' ( temp uint)
+0:37          Constant:
+0:37            3 (const int)
+0:37        subgroupAdd ( global 4-component vector of double)
+0:37          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              Constant:
+0:37                3 (const int)
+0:37            Constant:
+0:37              3 (const int)
+0:39      move second child to first child ( temp float)
+0:39        direct index ( temp float)
+0:39          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:39            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'invocation' ( temp uint)
+0:39            Constant:
+0:39              0 (const int)
+0:39          Constant:
+0:39            0 (const int)
+0:39        subgroupMul ( global float)
+0:39          direct index ( temp float)
+0:39            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:39              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                Constant:
+0:39                  0 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:40      move second child to first child ( temp 2-component vector of float)
+0:40        vector swizzle ( temp 2-component vector of float)
+0:40          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:40            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'invocation' ( temp uint)
+0:40            Constant:
+0:40              0 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40        subgroupMul ( global 2-component vector of float)
+0:40          vector swizzle ( temp 2-component vector of float)
+0:40            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                Constant:
+0:40                  1 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40            Sequence
+0:40              Constant:
+0:40                0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:41      move second child to first child ( temp 3-component vector of float)
+0:41        vector swizzle ( temp 3-component vector of float)
+0:41          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:41            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'invocation' ( temp uint)
+0:41            Constant:
+0:41              0 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41            Constant:
+0:41              2 (const int)
+0:41        subgroupMul ( global 3-component vector of float)
+0:41          vector swizzle ( temp 3-component vector of float)
+0:41            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:41              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                Constant:
+0:41                  2 (const int)
+0:41              Constant:
+0:41                0 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41              Constant:
+0:41                2 (const int)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:42          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'invocation' ( temp uint)
+0:42          Constant:
+0:42            0 (const int)
+0:42        subgroupMul ( global 4-component vector of float)
+0:42          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:42            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42              Constant:
+0:42                3 (const int)
+0:42            Constant:
+0:42              0 (const int)
+0:44      move second child to first child ( temp int)
+0:44        direct index ( temp int)
+0:44          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'invocation' ( temp uint)
+0:44            Constant:
+0:44              1 (const int)
+0:44          Constant:
+0:44            0 (const int)
+0:44        subgroupMul ( global int)
+0:44          direct index ( temp int)
+0:44            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                Constant:
+0:44                  0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44            Constant:
+0:44              0 (const int)
+0:45      move second child to first child ( temp 2-component vector of int)
+0:45        vector swizzle ( temp 2-component vector of int)
+0:45          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'invocation' ( temp uint)
+0:45            Constant:
+0:45              1 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45        subgroupMul ( global 2-component vector of int)
+0:45          vector swizzle ( temp 2-component vector of int)
+0:45            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                Constant:
+0:45                  1 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:46      move second child to first child ( temp 3-component vector of int)
+0:46        vector swizzle ( temp 3-component vector of int)
+0:46          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'invocation' ( temp uint)
+0:46            Constant:
+0:46              1 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46        subgroupMul ( global 3-component vector of int)
+0:46          vector swizzle ( temp 3-component vector of int)
+0:46            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                Constant:
+0:46                  2 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:47      move second child to first child ( temp 4-component vector of int)
+0:47        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'invocation' ( temp uint)
+0:47          Constant:
+0:47            1 (const int)
+0:47        subgroupMul ( global 4-component vector of int)
+0:47          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              Constant:
+0:47                3 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:49      move second child to first child ( temp uint)
+0:49        direct index ( temp uint)
+0:49          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:49            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'invocation' ( temp uint)
+0:49            Constant:
+0:49              2 (const int)
+0:49          Constant:
+0:49            0 (const int)
+0:49        subgroupMul ( global uint)
+0:49          direct index ( temp uint)
+0:49            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                Constant:
+0:49                  0 (const int)
+0:49              Constant:
+0:49                2 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:50      move second child to first child ( temp 2-component vector of uint)
+0:50        vector swizzle ( temp 2-component vector of uint)
+0:50          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:50            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'invocation' ( temp uint)
+0:50            Constant:
+0:50              2 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50        subgroupMul ( global 2-component vector of uint)
+0:50          vector swizzle ( temp 2-component vector of uint)
+0:50            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                Constant:
+0:50                  1 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:51      move second child to first child ( temp 3-component vector of uint)
+0:51        vector swizzle ( temp 3-component vector of uint)
+0:51          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:51            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'invocation' ( temp uint)
+0:51            Constant:
+0:51              2 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:51        subgroupMul ( global 3-component vector of uint)
+0:51          vector swizzle ( temp 3-component vector of uint)
+0:51            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                Constant:
+0:51                  2 (const int)
+0:51              Constant:
+0:51                2 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51              Constant:
+0:51                2 (const int)
+0:52      move second child to first child ( temp 4-component vector of uint)
+0:52        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:52          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'invocation' ( temp uint)
+0:52          Constant:
+0:52            2 (const int)
+0:52        subgroupMul ( global 4-component vector of uint)
+0:52          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:52            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              Constant:
+0:52                3 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:54      move second child to first child ( temp double)
+0:54        direct index ( temp double)
+0:54          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:54            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'invocation' ( temp uint)
+0:54            Constant:
+0:54              3 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupMul ( global double)
+0:54          direct index ( temp double)
+0:54            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                Constant:
+0:54                  0 (const int)
+0:54              Constant:
+0:54                3 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:55      move second child to first child ( temp 2-component vector of double)
+0:55        vector swizzle ( temp 2-component vector of double)
+0:55          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:55            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'invocation' ( temp uint)
+0:55            Constant:
+0:55              3 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55        subgroupMul ( global 2-component vector of double)
+0:55          vector swizzle ( temp 2-component vector of double)
+0:55            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                Constant:
+0:55                  1 (const int)
+0:55              Constant:
+0:55                3 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:56      move second child to first child ( temp 3-component vector of double)
+0:56        vector swizzle ( temp 3-component vector of double)
+0:56          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:56            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'invocation' ( temp uint)
+0:56            Constant:
+0:56              3 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56            Constant:
+0:56              2 (const int)
+0:56        subgroupMul ( global 3-component vector of double)
+0:56          vector swizzle ( temp 3-component vector of double)
+0:56            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:56              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                Constant:
+0:56                  2 (const int)
+0:56              Constant:
+0:56                3 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:57      move second child to first child ( temp 4-component vector of double)
+0:57        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:57          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'invocation' ( temp uint)
+0:57          Constant:
+0:57            3 (const int)
+0:57        subgroupMul ( global 4-component vector of double)
+0:57          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:57            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              Constant:
+0:57                3 (const int)
+0:57            Constant:
+0:57              3 (const int)
+0:59      move second child to first child ( temp float)
+0:59        direct index ( temp float)
+0:59          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:59            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'invocation' ( temp uint)
+0:59            Constant:
+0:59              0 (const int)
+0:59          Constant:
+0:59            0 (const int)
+0:59        subgroupMin ( global float)
+0:59          direct index ( temp float)
+0:59            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                Constant:
+0:59                  0 (const int)
+0:59              Constant:
+0:59                0 (const int)
+0:59            Constant:
+0:59              0 (const int)
+0:60      move second child to first child ( temp 2-component vector of float)
+0:60        vector swizzle ( temp 2-component vector of float)
+0:60          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:60            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'invocation' ( temp uint)
+0:60            Constant:
+0:60              0 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60        subgroupMin ( global 2-component vector of float)
+0:60          vector swizzle ( temp 2-component vector of float)
+0:60            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                Constant:
+0:60                  1 (const int)
+0:60              Constant:
+0:60                0 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:61      move second child to first child ( temp 3-component vector of float)
+0:61        vector swizzle ( temp 3-component vector of float)
+0:61          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'invocation' ( temp uint)
+0:61            Constant:
+0:61              0 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61            Constant:
+0:61              2 (const int)
+0:61        subgroupMin ( global 3-component vector of float)
+0:61          vector swizzle ( temp 3-component vector of float)
+0:61            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                Constant:
+0:61                  2 (const int)
+0:61              Constant:
+0:61                0 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61              Constant:
+0:61                2 (const int)
+0:62      move second child to first child ( temp 4-component vector of float)
+0:62        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'invocation' ( temp uint)
+0:62          Constant:
+0:62            0 (const int)
+0:62        subgroupMin ( global 4-component vector of float)
+0:62          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              Constant:
+0:62                3 (const int)
+0:62            Constant:
+0:62              0 (const int)
+0:64      move second child to first child ( temp int)
+0:64        direct index ( temp int)
+0:64          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'invocation' ( temp uint)
+0:64            Constant:
+0:64              1 (const int)
+0:64          Constant:
+0:64            0 (const int)
+0:64        subgroupMin ( global int)
+0:64          direct index ( temp int)
+0:64            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                Constant:
+0:64                  0 (const int)
+0:64              Constant:
+0:64                1 (const int)
+0:64            Constant:
+0:64              0 (const int)
+0:65      move second child to first child ( temp 2-component vector of int)
+0:65        vector swizzle ( temp 2-component vector of int)
+0:65          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'invocation' ( temp uint)
+0:65            Constant:
+0:65              1 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65        subgroupMin ( global 2-component vector of int)
+0:65          vector swizzle ( temp 2-component vector of int)
+0:65            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                Constant:
+0:65                  1 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:65            Sequence
+0:65              Constant:
+0:65                0 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:66      move second child to first child ( temp 3-component vector of int)
+0:66        vector swizzle ( temp 3-component vector of int)
+0:66          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'invocation' ( temp uint)
+0:66            Constant:
+0:66              1 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66        subgroupMin ( global 3-component vector of int)
+0:66          vector swizzle ( temp 3-component vector of int)
+0:66            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                Constant:
+0:66                  2 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:66            Sequence
+0:66              Constant:
+0:66                0 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:66              Constant:
+0:66                2 (const int)
+0:67      move second child to first child ( temp 4-component vector of int)
+0:67        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'invocation' ( temp uint)
+0:67          Constant:
+0:67            1 (const int)
+0:67        subgroupMin ( global 4-component vector of int)
+0:67          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67              Constant:
+0:67                3 (const int)
+0:67            Constant:
+0:67              1 (const int)
+0:69      move second child to first child ( temp uint)
+0:69        direct index ( temp uint)
+0:69          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:69            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'invocation' ( temp uint)
+0:69            Constant:
+0:69              2 (const int)
+0:69          Constant:
+0:69            0 (const int)
+0:69        subgroupMin ( global uint)
+0:69          direct index ( temp uint)
+0:69            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:69              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                Constant:
+0:69                  0 (const int)
+0:69              Constant:
+0:69                2 (const int)
+0:69            Constant:
+0:69              0 (const int)
+0:70      move second child to first child ( temp 2-component vector of uint)
+0:70        vector swizzle ( temp 2-component vector of uint)
+0:70          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:70            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70              'invocation' ( temp uint)
+0:70            Constant:
+0:70              2 (const int)
+0:70          Sequence
+0:70            Constant:
+0:70              0 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70        subgroupMin ( global 2-component vector of uint)
+0:70          vector swizzle ( temp 2-component vector of uint)
+0:70            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:70              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70                Constant:
+0:70                  1 (const int)
+0:70              Constant:
+0:70                2 (const int)
+0:70            Sequence
+0:70              Constant:
+0:70                0 (const int)
+0:70              Constant:
+0:70                1 (const int)
+0:71      move second child to first child ( temp 3-component vector of uint)
+0:71        vector swizzle ( temp 3-component vector of uint)
+0:71          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'invocation' ( temp uint)
+0:71            Constant:
+0:71              2 (const int)
+0:71          Sequence
+0:71            Constant:
+0:71              0 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71            Constant:
+0:71              2 (const int)
+0:71        subgroupMin ( global 3-component vector of uint)
+0:71          vector swizzle ( temp 3-component vector of uint)
+0:71            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                Constant:
+0:71                  2 (const int)
+0:71              Constant:
+0:71                2 (const int)
+0:71            Sequence
+0:71              Constant:
+0:71                0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:71              Constant:
+0:71                2 (const int)
+0:72      move second child to first child ( temp 4-component vector of uint)
+0:72        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72            'invocation' ( temp uint)
+0:72          Constant:
+0:72            2 (const int)
+0:72        subgroupMin ( global 4-component vector of uint)
+0:72          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72              Constant:
+0:72                3 (const int)
+0:72            Constant:
+0:72              2 (const int)
+0:74      move second child to first child ( temp double)
+0:74        direct index ( temp double)
+0:74          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:74            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74              'invocation' ( temp uint)
+0:74            Constant:
+0:74              3 (const int)
+0:74          Constant:
+0:74            0 (const int)
+0:74        subgroupMin ( global double)
+0:74          direct index ( temp double)
+0:74            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:74              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                Constant:
+0:74                  0 (const int)
+0:74              Constant:
+0:74                3 (const int)
+0:74            Constant:
+0:74              0 (const int)
+0:75      move second child to first child ( temp 2-component vector of double)
+0:75        vector swizzle ( temp 2-component vector of double)
+0:75          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:75            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75              'invocation' ( temp uint)
+0:75            Constant:
+0:75              3 (const int)
+0:75          Sequence
+0:75            Constant:
+0:75              0 (const int)
+0:75            Constant:
+0:75              1 (const int)
+0:75        subgroupMin ( global 2-component vector of double)
+0:75          vector swizzle ( temp 2-component vector of double)
+0:75            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:75              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75                Constant:
+0:75                  1 (const int)
+0:75              Constant:
+0:75                3 (const int)
+0:75            Sequence
+0:75              Constant:
+0:75                0 (const int)
+0:75              Constant:
+0:75                1 (const int)
+0:76      move second child to first child ( temp 3-component vector of double)
+0:76        vector swizzle ( temp 3-component vector of double)
+0:76          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76              'invocation' ( temp uint)
+0:76            Constant:
+0:76              3 (const int)
+0:76          Sequence
+0:76            Constant:
+0:76              0 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76            Constant:
+0:76              2 (const int)
+0:76        subgroupMin ( global 3-component vector of double)
+0:76          vector swizzle ( temp 3-component vector of double)
+0:76            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                Constant:
+0:76                  2 (const int)
+0:76              Constant:
+0:76                3 (const int)
+0:76            Sequence
+0:76              Constant:
+0:76                0 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:76              Constant:
+0:76                2 (const int)
+0:77      move second child to first child ( temp 4-component vector of double)
+0:77        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77            'invocation' ( temp uint)
+0:77          Constant:
+0:77            3 (const int)
+0:77        subgroupMin ( global 4-component vector of double)
+0:77          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77              Constant:
+0:77                3 (const int)
+0:77            Constant:
+0:77              3 (const int)
+0:79      move second child to first child ( temp float)
+0:79        direct index ( temp float)
+0:79          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:79            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79              'invocation' ( temp uint)
+0:79            Constant:
+0:79              0 (const int)
+0:79          Constant:
+0:79            0 (const int)
+0:79        subgroupMax ( global float)
+0:79          direct index ( temp float)
+0:79            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:79              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                Constant:
+0:79                  0 (const int)
+0:79              Constant:
+0:79                0 (const int)
+0:79            Constant:
+0:79              0 (const int)
+0:80      move second child to first child ( temp 2-component vector of float)
+0:80        vector swizzle ( temp 2-component vector of float)
+0:80          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:80            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80              'invocation' ( temp uint)
+0:80            Constant:
+0:80              0 (const int)
+0:80          Sequence
+0:80            Constant:
+0:80              0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80        subgroupMax ( global 2-component vector of float)
+0:80          vector swizzle ( temp 2-component vector of float)
+0:80            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:80              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80                Constant:
+0:80                  1 (const int)
+0:80              Constant:
+0:80                0 (const int)
+0:80            Sequence
+0:80              Constant:
+0:80                0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:81      move second child to first child ( temp 3-component vector of float)
+0:81        vector swizzle ( temp 3-component vector of float)
+0:81          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:81            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81              'invocation' ( temp uint)
+0:81            Constant:
+0:81              0 (const int)
+0:81          Sequence
+0:81            Constant:
+0:81              0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81            Constant:
+0:81              2 (const int)
+0:81        subgroupMax ( global 3-component vector of float)
+0:81          vector swizzle ( temp 3-component vector of float)
+0:81            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:81              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                Constant:
+0:81                  2 (const int)
+0:81              Constant:
+0:81                0 (const int)
+0:81            Sequence
+0:81              Constant:
+0:81                0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81              Constant:
+0:81                2 (const int)
+0:82      move second child to first child ( temp 4-component vector of float)
+0:82        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:82          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82            'invocation' ( temp uint)
+0:82          Constant:
+0:82            0 (const int)
+0:82        subgroupMax ( global 4-component vector of float)
+0:82          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:82            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82              Constant:
+0:82                3 (const int)
+0:82            Constant:
+0:82              0 (const int)
+0:84      move second child to first child ( temp int)
+0:84        direct index ( temp int)
+0:84          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84              'invocation' ( temp uint)
+0:84            Constant:
+0:84              1 (const int)
+0:84          Constant:
+0:84            0 (const int)
+0:84        subgroupMax ( global int)
+0:84          direct index ( temp int)
+0:84            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                Constant:
+0:84                  0 (const int)
+0:84              Constant:
+0:84                1 (const int)
+0:84            Constant:
+0:84              0 (const int)
+0:85      move second child to first child ( temp 2-component vector of int)
+0:85        vector swizzle ( temp 2-component vector of int)
+0:85          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:85            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85              'invocation' ( temp uint)
+0:85            Constant:
+0:85              1 (const int)
+0:85          Sequence
+0:85            Constant:
+0:85              0 (const int)
+0:85            Constant:
+0:85              1 (const int)
+0:85        subgroupMax ( global 2-component vector of int)
+0:85          vector swizzle ( temp 2-component vector of int)
+0:85            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:85              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85                Constant:
+0:85                  1 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:85            Sequence
+0:85              Constant:
+0:85                0 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:86      move second child to first child ( temp 3-component vector of int)
+0:86        vector swizzle ( temp 3-component vector of int)
+0:86          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:86            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86              'invocation' ( temp uint)
+0:86            Constant:
+0:86              1 (const int)
+0:86          Sequence
+0:86            Constant:
+0:86              0 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:86        subgroupMax ( global 3-component vector of int)
+0:86          vector swizzle ( temp 3-component vector of int)
+0:86            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:86              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86                Constant:
+0:86                  2 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86              Constant:
+0:86                2 (const int)
+0:87      move second child to first child ( temp 4-component vector of int)
+0:87        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:87          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87            'invocation' ( temp uint)
+0:87          Constant:
+0:87            1 (const int)
+0:87        subgroupMax ( global 4-component vector of int)
+0:87          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:87            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87              Constant:
+0:87                3 (const int)
+0:87            Constant:
+0:87              1 (const int)
+0:89      move second child to first child ( temp uint)
+0:89        direct index ( temp uint)
+0:89          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:89            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89              'invocation' ( temp uint)
+0:89            Constant:
+0:89              2 (const int)
+0:89          Constant:
+0:89            0 (const int)
+0:89        subgroupMax ( global uint)
+0:89          direct index ( temp uint)
+0:89            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:89              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89                Constant:
+0:89                  0 (const int)
+0:89              Constant:
+0:89                2 (const int)
+0:89            Constant:
+0:89              0 (const int)
+0:90      move second child to first child ( temp 2-component vector of uint)
+0:90        vector swizzle ( temp 2-component vector of uint)
+0:90          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:90            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90              'invocation' ( temp uint)
+0:90            Constant:
+0:90              2 (const int)
+0:90          Sequence
+0:90            Constant:
+0:90              0 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90        subgroupMax ( global 2-component vector of uint)
+0:90          vector swizzle ( temp 2-component vector of uint)
+0:90            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:90              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90                Constant:
+0:90                  1 (const int)
+0:90              Constant:
+0:90                2 (const int)
+0:90            Sequence
+0:90              Constant:
+0:90                0 (const int)
+0:90              Constant:
+0:90                1 (const int)
+0:91      move second child to first child ( temp 3-component vector of uint)
+0:91        vector swizzle ( temp 3-component vector of uint)
+0:91          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:91            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91              'invocation' ( temp uint)
+0:91            Constant:
+0:91              2 (const int)
+0:91          Sequence
+0:91            Constant:
+0:91              0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91            Constant:
+0:91              2 (const int)
+0:91        subgroupMax ( global 3-component vector of uint)
+0:91          vector swizzle ( temp 3-component vector of uint)
+0:91            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:91              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91                Constant:
+0:91                  2 (const int)
+0:91              Constant:
+0:91                2 (const int)
+0:91            Sequence
+0:91              Constant:
+0:91                0 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:91              Constant:
+0:91                2 (const int)
+0:92      move second child to first child ( temp 4-component vector of uint)
+0:92        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:92          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92            'invocation' ( temp uint)
+0:92          Constant:
+0:92            2 (const int)
+0:92        subgroupMax ( global 4-component vector of uint)
+0:92          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:92            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92              Constant:
+0:92                3 (const int)
+0:92            Constant:
+0:92              2 (const int)
+0:94      move second child to first child ( temp double)
+0:94        direct index ( temp double)
+0:94          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:94            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94              'invocation' ( temp uint)
+0:94            Constant:
+0:94              3 (const int)
+0:94          Constant:
+0:94            0 (const int)
+0:94        subgroupMax ( global double)
+0:94          direct index ( temp double)
+0:94            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:94              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94                Constant:
+0:94                  0 (const int)
+0:94              Constant:
+0:94                3 (const int)
+0:94            Constant:
+0:94              0 (const int)
+0:95      move second child to first child ( temp 2-component vector of double)
+0:95        vector swizzle ( temp 2-component vector of double)
+0:95          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:95            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95              'invocation' ( temp uint)
+0:95            Constant:
+0:95              3 (const int)
+0:95          Sequence
+0:95            Constant:
+0:95              0 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95        subgroupMax ( global 2-component vector of double)
+0:95          vector swizzle ( temp 2-component vector of double)
+0:95            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:95              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95                Constant:
+0:95                  1 (const int)
+0:95              Constant:
+0:95                3 (const int)
+0:95            Sequence
+0:95              Constant:
+0:95                0 (const int)
+0:95              Constant:
+0:95                1 (const int)
+0:96      move second child to first child ( temp 3-component vector of double)
+0:96        vector swizzle ( temp 3-component vector of double)
+0:96          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:96            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96              'invocation' ( temp uint)
+0:96            Constant:
+0:96              3 (const int)
+0:96          Sequence
+0:96            Constant:
+0:96              0 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96            Constant:
+0:96              2 (const int)
+0:96        subgroupMax ( global 3-component vector of double)
+0:96          vector swizzle ( temp 3-component vector of double)
+0:96            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:96              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96                Constant:
+0:96                  2 (const int)
+0:96              Constant:
+0:96                3 (const int)
+0:96            Sequence
+0:96              Constant:
+0:96                0 (const int)
+0:96              Constant:
+0:96                1 (const int)
+0:96              Constant:
+0:96                2 (const int)
+0:97      move second child to first child ( temp 4-component vector of double)
+0:97        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:97          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97            'invocation' ( temp uint)
+0:97          Constant:
+0:97            3 (const int)
+0:97        subgroupMax ( global 4-component vector of double)
+0:97          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:97            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97              Constant:
+0:97                3 (const int)
+0:97            Constant:
+0:97              3 (const int)
+0:99      move second child to first child ( temp int)
+0:99        direct index ( temp int)
+0:99          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99              'invocation' ( temp uint)
+0:99            Constant:
+0:99              1 (const int)
+0:99          Constant:
+0:99            0 (const int)
+0:99        subgroupAnd ( global int)
+0:99          direct index ( temp int)
+0:99            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99                Constant:
+0:99                  0 (const int)
+0:99              Constant:
+0:99                1 (const int)
+0:99            Constant:
+0:99              0 (const int)
+0:100      move second child to first child ( temp 2-component vector of int)
+0:100        vector swizzle ( temp 2-component vector of int)
+0:100          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100              'invocation' ( temp uint)
+0:100            Constant:
+0:100              1 (const int)
+0:100          Sequence
+0:100            Constant:
+0:100              0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100        subgroupAnd ( global 2-component vector of int)
+0:100          vector swizzle ( temp 2-component vector of int)
+0:100            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100                Constant:
+0:100                  1 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100            Sequence
+0:100              Constant:
+0:100                0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:101      move second child to first child ( temp 3-component vector of int)
+0:101        vector swizzle ( temp 3-component vector of int)
+0:101          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101              'invocation' ( temp uint)
+0:101            Constant:
+0:101              1 (const int)
+0:101          Sequence
+0:101            Constant:
+0:101              0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101            Constant:
+0:101              2 (const int)
+0:101        subgroupAnd ( global 3-component vector of int)
+0:101          vector swizzle ( temp 3-component vector of int)
+0:101            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101                Constant:
+0:101                  2 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101            Sequence
+0:101              Constant:
+0:101                0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101              Constant:
+0:101                2 (const int)
+0:102      move second child to first child ( temp 4-component vector of int)
+0:102        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102            'invocation' ( temp uint)
+0:102          Constant:
+0:102            1 (const int)
+0:102        subgroupAnd ( global 4-component vector of int)
+0:102          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102              Constant:
+0:102                3 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:104      move second child to first child ( temp uint)
+0:104        direct index ( temp uint)
+0:104          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104              'invocation' ( temp uint)
+0:104            Constant:
+0:104              2 (const int)
+0:104          Constant:
+0:104            0 (const int)
+0:104        subgroupAnd ( global uint)
+0:104          direct index ( temp uint)
+0:104            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104                Constant:
+0:104                  0 (const int)
+0:104              Constant:
+0:104                2 (const int)
+0:104            Constant:
+0:104              0 (const int)
+0:105      move second child to first child ( temp 2-component vector of uint)
+0:105        vector swizzle ( temp 2-component vector of uint)
+0:105          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105              'invocation' ( temp uint)
+0:105            Constant:
+0:105              2 (const int)
+0:105          Sequence
+0:105            Constant:
+0:105              0 (const int)
+0:105            Constant:
+0:105              1 (const int)
+0:105        subgroupAnd ( global 2-component vector of uint)
+0:105          vector swizzle ( temp 2-component vector of uint)
+0:105            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105                Constant:
+0:105                  1 (const int)
+0:105              Constant:
+0:105                2 (const int)
+0:105            Sequence
+0:105              Constant:
+0:105                0 (const int)
+0:105              Constant:
+0:105                1 (const int)
+0:106      move second child to first child ( temp 3-component vector of uint)
+0:106        vector swizzle ( temp 3-component vector of uint)
+0:106          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106              'invocation' ( temp uint)
+0:106            Constant:
+0:106              2 (const int)
+0:106          Sequence
+0:106            Constant:
+0:106              0 (const int)
+0:106            Constant:
+0:106              1 (const int)
+0:106            Constant:
+0:106              2 (const int)
+0:106        subgroupAnd ( global 3-component vector of uint)
+0:106          vector swizzle ( temp 3-component vector of uint)
+0:106            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106                Constant:
+0:106                  2 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:106            Sequence
+0:106              Constant:
+0:106                0 (const int)
+0:106              Constant:
+0:106                1 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:107      move second child to first child ( temp 4-component vector of uint)
+0:107        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107            'invocation' ( temp uint)
+0:107          Constant:
+0:107            2 (const int)
+0:107        subgroupAnd ( global 4-component vector of uint)
+0:107          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107              Constant:
+0:107                3 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:109      move second child to first child ( temp int)
+0:109        direct index ( temp int)
+0:109          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:109            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109              'invocation' ( temp uint)
+0:109            Constant:
+0:109              1 (const int)
+0:109          Constant:
+0:109            0 (const int)
+0:109        Convert bool to int ( temp int)
+0:109          subgroupAnd ( global bool)
+0:109            Compare Less Than ( temp bool)
+0:109              direct index ( temp int)
+0:109                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:109                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109                    Constant:
+0:109                      0 (const int)
+0:109                  Constant:
+0:109                    1 (const int)
+0:109                Constant:
+0:109                  0 (const int)
+0:109              Constant:
+0:109                0 (const int)
+0:110      move second child to first child ( temp 2-component vector of int)
+0:110        vector swizzle ( temp 2-component vector of int)
+0:110          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:110            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110              'invocation' ( temp uint)
+0:110            Constant:
+0:110              1 (const int)
+0:110          Sequence
+0:110            Constant:
+0:110              0 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110        Convert bool to int ( temp 2-component vector of int)
+0:110          subgroupAnd ( global 2-component vector of bool)
+0:110            Compare Less Than ( global 2-component vector of bool)
+0:110              vector swizzle ( temp 2-component vector of int)
+0:110                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:110                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110                    Constant:
+0:110                      1 (const int)
+0:110                  Constant:
+0:110                    1 (const int)
+0:110                Sequence
+0:110                  Constant:
+0:110                    0 (const int)
+0:110                  Constant:
+0:110                    1 (const int)
+0:110              Constant:
+0:110                0 (const int)
+0:110                0 (const int)
+0:111      move second child to first child ( temp 3-component vector of int)
+0:111        vector swizzle ( temp 3-component vector of int)
+0:111          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111              'invocation' ( temp uint)
+0:111            Constant:
+0:111              1 (const int)
+0:111          Sequence
+0:111            Constant:
+0:111              0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111            Constant:
+0:111              2 (const int)
+0:111        Convert bool to int ( temp 3-component vector of int)
+0:111          subgroupAnd ( global 3-component vector of bool)
+0:111            Compare Less Than ( global 3-component vector of bool)
+0:111              vector swizzle ( temp 3-component vector of int)
+0:111                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111                    Constant:
+0:111                      1 (const int)
+0:111                  Constant:
+0:111                    1 (const int)
+0:111                Sequence
+0:111                  Constant:
+0:111                    0 (const int)
+0:111                  Constant:
+0:111                    1 (const int)
+0:111                  Constant:
+0:111                    2 (const int)
+0:111              Constant:
+0:111                0 (const int)
+0:111                0 (const int)
+0:111                0 (const int)
+0:112      move second child to first child ( temp 4-component vector of int)
+0:112        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112            'invocation' ( temp uint)
+0:112          Constant:
+0:112            1 (const int)
+0:112        Convert bool to int ( temp 4-component vector of int)
+0:112          subgroupAnd ( global 4-component vector of bool)
+0:112            Compare Less Than ( global 4-component vector of bool)
+0:112              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112                  Constant:
+0:112                    1 (const int)
+0:112                Constant:
+0:112                  1 (const int)
+0:112              Constant:
+0:112                0 (const int)
+0:112                0 (const int)
+0:112                0 (const int)
+0:112                0 (const int)
+0:114      move second child to first child ( temp int)
+0:114        direct index ( temp int)
+0:114          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114              'invocation' ( temp uint)
+0:114            Constant:
+0:114              1 (const int)
+0:114          Constant:
+0:114            0 (const int)
+0:114        subgroupOr ( global int)
+0:114          direct index ( temp int)
+0:114            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114                Constant:
+0:114                  0 (const int)
+0:114              Constant:
+0:114                1 (const int)
+0:114            Constant:
+0:114              0 (const int)
+0:115      move second child to first child ( temp 2-component vector of int)
+0:115        vector swizzle ( temp 2-component vector of int)
+0:115          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115              'invocation' ( temp uint)
+0:115            Constant:
+0:115              1 (const int)
+0:115          Sequence
+0:115            Constant:
+0:115              0 (const int)
+0:115            Constant:
+0:115              1 (const int)
+0:115        subgroupOr ( global 2-component vector of int)
+0:115          vector swizzle ( temp 2-component vector of int)
+0:115            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115                Constant:
+0:115                  1 (const int)
+0:115              Constant:
+0:115                1 (const int)
+0:115            Sequence
+0:115              Constant:
+0:115                0 (const int)
+0:115              Constant:
+0:115                1 (const int)
+0:116      move second child to first child ( temp 3-component vector of int)
+0:116        vector swizzle ( temp 3-component vector of int)
+0:116          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116              'invocation' ( temp uint)
+0:116            Constant:
+0:116              1 (const int)
+0:116          Sequence
+0:116            Constant:
+0:116              0 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116            Constant:
+0:116              2 (const int)
+0:116        subgroupOr ( global 3-component vector of int)
+0:116          vector swizzle ( temp 3-component vector of int)
+0:116            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116                Constant:
+0:116                  2 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:116            Sequence
+0:116              Constant:
+0:116                0 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:116              Constant:
+0:116                2 (const int)
+0:117      move second child to first child ( temp 4-component vector of int)
+0:117        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117            'invocation' ( temp uint)
+0:117          Constant:
+0:117            1 (const int)
+0:117        subgroupOr ( global 4-component vector of int)
+0:117          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117              Constant:
+0:117                3 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:119      move second child to first child ( temp uint)
+0:119        direct index ( temp uint)
+0:119          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119              'invocation' ( temp uint)
+0:119            Constant:
+0:119              2 (const int)
+0:119          Constant:
+0:119            0 (const int)
+0:119        subgroupOr ( global uint)
+0:119          direct index ( temp uint)
+0:119            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119                Constant:
+0:119                  0 (const int)
+0:119              Constant:
+0:119                2 (const int)
+0:119            Constant:
+0:119              0 (const int)
+0:120      move second child to first child ( temp 2-component vector of uint)
+0:120        vector swizzle ( temp 2-component vector of uint)
+0:120          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:120            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120              'invocation' ( temp uint)
+0:120            Constant:
+0:120              2 (const int)
+0:120          Sequence
+0:120            Constant:
+0:120              0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120        subgroupOr ( global 2-component vector of uint)
+0:120          vector swizzle ( temp 2-component vector of uint)
+0:120            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:120              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120                Constant:
+0:120                  1 (const int)
+0:120              Constant:
+0:120                2 (const int)
+0:120            Sequence
+0:120              Constant:
+0:120                0 (const int)
+0:120              Constant:
+0:120                1 (const int)
+0:121      move second child to first child ( temp 3-component vector of uint)
+0:121        vector swizzle ( temp 3-component vector of uint)
+0:121          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:121            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121              'invocation' ( temp uint)
+0:121            Constant:
+0:121              2 (const int)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121            Constant:
+0:121              2 (const int)
+0:121        subgroupOr ( global 3-component vector of uint)
+0:121          vector swizzle ( temp 3-component vector of uint)
+0:121            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:121              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121                Constant:
+0:121                  2 (const int)
+0:121              Constant:
+0:121                2 (const int)
+0:121            Sequence
+0:121              Constant:
+0:121                0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:121              Constant:
+0:121                2 (const int)
+0:122      move second child to first child ( temp 4-component vector of uint)
+0:122        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:122          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122            'invocation' ( temp uint)
+0:122          Constant:
+0:122            2 (const int)
+0:122        subgroupOr ( global 4-component vector of uint)
+0:122          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:122            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122              Constant:
+0:122                3 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:124      move second child to first child ( temp int)
+0:124        direct index ( temp int)
+0:124          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:124            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124              'invocation' ( temp uint)
+0:124            Constant:
+0:124              1 (const int)
+0:124          Constant:
+0:124            0 (const int)
+0:124        Convert bool to int ( temp int)
+0:124          subgroupOr ( global bool)
+0:124            Compare Less Than ( temp bool)
+0:124              direct index ( temp int)
+0:124                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:124                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124                    Constant:
+0:124                      0 (const int)
+0:124                  Constant:
+0:124                    1 (const int)
+0:124                Constant:
+0:124                  0 (const int)
+0:124              Constant:
+0:124                0 (const int)
+0:125      move second child to first child ( temp 2-component vector of int)
+0:125        vector swizzle ( temp 2-component vector of int)
+0:125          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:125            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125              'invocation' ( temp uint)
+0:125            Constant:
+0:125              1 (const int)
+0:125          Sequence
+0:125            Constant:
+0:125              0 (const int)
+0:125            Constant:
+0:125              1 (const int)
+0:125        Convert bool to int ( temp 2-component vector of int)
+0:125          subgroupOr ( global 2-component vector of bool)
+0:125            Compare Less Than ( global 2-component vector of bool)
+0:125              vector swizzle ( temp 2-component vector of int)
+0:125                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:125                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125                    Constant:
+0:125                      1 (const int)
+0:125                  Constant:
+0:125                    1 (const int)
+0:125                Sequence
+0:125                  Constant:
+0:125                    0 (const int)
+0:125                  Constant:
+0:125                    1 (const int)
+0:125              Constant:
+0:125                0 (const int)
+0:125                0 (const int)
+0:126      move second child to first child ( temp 3-component vector of int)
+0:126        vector swizzle ( temp 3-component vector of int)
+0:126          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126              'invocation' ( temp uint)
+0:126            Constant:
+0:126              1 (const int)
+0:126          Sequence
+0:126            Constant:
+0:126              0 (const int)
+0:126            Constant:
+0:126              1 (const int)
+0:126            Constant:
+0:126              2 (const int)
+0:126        Convert bool to int ( temp 3-component vector of int)
+0:126          subgroupOr ( global 3-component vector of bool)
+0:126            Compare Less Than ( global 3-component vector of bool)
+0:126              vector swizzle ( temp 3-component vector of int)
+0:126                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126                    Constant:
+0:126                      1 (const int)
+0:126                  Constant:
+0:126                    1 (const int)
+0:126                Sequence
+0:126                  Constant:
+0:126                    0 (const int)
+0:126                  Constant:
+0:126                    1 (const int)
+0:126                  Constant:
+0:126                    2 (const int)
+0:126              Constant:
+0:126                0 (const int)
+0:126                0 (const int)
+0:126                0 (const int)
+0:127      move second child to first child ( temp 4-component vector of int)
+0:127        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127            'invocation' ( temp uint)
+0:127          Constant:
+0:127            1 (const int)
+0:127        Convert bool to int ( temp 4-component vector of int)
+0:127          subgroupOr ( global 4-component vector of bool)
+0:127            Compare Less Than ( global 4-component vector of bool)
+0:127              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127                  Constant:
+0:127                    1 (const int)
+0:127                Constant:
+0:127                  1 (const int)
+0:127              Constant:
+0:127                0 (const int)
+0:127                0 (const int)
+0:127                0 (const int)
+0:127                0 (const int)
+0:129      move second child to first child ( temp int)
+0:129        direct index ( temp int)
+0:129          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129              'invocation' ( temp uint)
+0:129            Constant:
+0:129              1 (const int)
+0:129          Constant:
+0:129            0 (const int)
+0:129        subgroupXor ( global int)
+0:129          direct index ( temp int)
+0:129            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129                Constant:
+0:129                  0 (const int)
+0:129              Constant:
+0:129                1 (const int)
+0:129            Constant:
+0:129              0 (const int)
+0:130      move second child to first child ( temp 2-component vector of int)
+0:130        vector swizzle ( temp 2-component vector of int)
+0:130          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:130            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130              'invocation' ( temp uint)
+0:130            Constant:
+0:130              1 (const int)
+0:130          Sequence
+0:130            Constant:
+0:130              0 (const int)
+0:130            Constant:
+0:130              1 (const int)
+0:130        subgroupXor ( global 2-component vector of int)
+0:130          vector swizzle ( temp 2-component vector of int)
+0:130            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:130              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130                Constant:
+0:130                  1 (const int)
+0:130              Constant:
+0:130                1 (const int)
+0:130            Sequence
+0:130              Constant:
+0:130                0 (const int)
+0:130              Constant:
+0:130                1 (const int)
+0:131      move second child to first child ( temp 3-component vector of int)
+0:131        vector swizzle ( temp 3-component vector of int)
+0:131          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:131            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131              'invocation' ( temp uint)
+0:131            Constant:
+0:131              1 (const int)
+0:131          Sequence
+0:131            Constant:
+0:131              0 (const int)
+0:131            Constant:
+0:131              1 (const int)
+0:131            Constant:
+0:131              2 (const int)
+0:131        subgroupXor ( global 3-component vector of int)
+0:131          vector swizzle ( temp 3-component vector of int)
+0:131            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:131              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131                Constant:
+0:131                  2 (const int)
+0:131              Constant:
+0:131                1 (const int)
+0:131            Sequence
+0:131              Constant:
+0:131                0 (const int)
+0:131              Constant:
+0:131                1 (const int)
+0:131              Constant:
+0:131                2 (const int)
+0:132      move second child to first child ( temp 4-component vector of int)
+0:132        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:132          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132            'invocation' ( temp uint)
+0:132          Constant:
+0:132            1 (const int)
+0:132        subgroupXor ( global 4-component vector of int)
+0:132          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:132            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132              Constant:
+0:132                3 (const int)
+0:132            Constant:
+0:132              1 (const int)
+0:134      move second child to first child ( temp uint)
+0:134        direct index ( temp uint)
+0:134          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134              'invocation' ( temp uint)
+0:134            Constant:
+0:134              2 (const int)
+0:134          Constant:
+0:134            0 (const int)
+0:134        subgroupXor ( global uint)
+0:134          direct index ( temp uint)
+0:134            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134                Constant:
+0:134                  0 (const int)
+0:134              Constant:
+0:134                2 (const int)
+0:134            Constant:
+0:134              0 (const int)
+0:135      move second child to first child ( temp 2-component vector of uint)
+0:135        vector swizzle ( temp 2-component vector of uint)
+0:135          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:135            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135              'invocation' ( temp uint)
+0:135            Constant:
+0:135              2 (const int)
+0:135          Sequence
+0:135            Constant:
+0:135              0 (const int)
+0:135            Constant:
+0:135              1 (const int)
+0:135        subgroupXor ( global 2-component vector of uint)
+0:135          vector swizzle ( temp 2-component vector of uint)
+0:135            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:135              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135                Constant:
+0:135                  1 (const int)
+0:135              Constant:
+0:135                2 (const int)
+0:135            Sequence
+0:135              Constant:
+0:135                0 (const int)
+0:135              Constant:
+0:135                1 (const int)
+0:136      move second child to first child ( temp 3-component vector of uint)
+0:136        vector swizzle ( temp 3-component vector of uint)
+0:136          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:136            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136              'invocation' ( temp uint)
+0:136            Constant:
+0:136              2 (const int)
+0:136          Sequence
+0:136            Constant:
+0:136              0 (const int)
+0:136            Constant:
+0:136              1 (const int)
+0:136            Constant:
+0:136              2 (const int)
+0:136        subgroupXor ( global 3-component vector of uint)
+0:136          vector swizzle ( temp 3-component vector of uint)
+0:136            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:136              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136                Constant:
+0:136                  2 (const int)
+0:136              Constant:
+0:136                2 (const int)
+0:136            Sequence
+0:136              Constant:
+0:136                0 (const int)
+0:136              Constant:
+0:136                1 (const int)
+0:136              Constant:
+0:136                2 (const int)
+0:137      move second child to first child ( temp 4-component vector of uint)
+0:137        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:137          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137            'invocation' ( temp uint)
+0:137          Constant:
+0:137            2 (const int)
+0:137        subgroupXor ( global 4-component vector of uint)
+0:137          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:137            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137              Constant:
+0:137                3 (const int)
+0:137            Constant:
+0:137              2 (const int)
+0:139      move second child to first child ( temp int)
+0:139        direct index ( temp int)
+0:139          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139              'invocation' ( temp uint)
+0:139            Constant:
+0:139              1 (const int)
+0:139          Constant:
+0:139            0 (const int)
+0:139        Convert bool to int ( temp int)
+0:139          subgroupXor ( global bool)
+0:139            Compare Less Than ( temp bool)
+0:139              direct index ( temp int)
+0:139                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139                    Constant:
+0:139                      0 (const int)
+0:139                  Constant:
+0:139                    1 (const int)
+0:139                Constant:
+0:139                  0 (const int)
+0:139              Constant:
+0:139                0 (const int)
+0:140      move second child to first child ( temp 2-component vector of int)
+0:140        vector swizzle ( temp 2-component vector of int)
+0:140          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:140            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140              'invocation' ( temp uint)
+0:140            Constant:
+0:140              1 (const int)
+0:140          Sequence
+0:140            Constant:
+0:140              0 (const int)
+0:140            Constant:
+0:140              1 (const int)
+0:140        Convert bool to int ( temp 2-component vector of int)
+0:140          subgroupXor ( global 2-component vector of bool)
+0:140            Compare Less Than ( global 2-component vector of bool)
+0:140              vector swizzle ( temp 2-component vector of int)
+0:140                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:140                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140                    Constant:
+0:140                      1 (const int)
+0:140                  Constant:
+0:140                    1 (const int)
+0:140                Sequence
+0:140                  Constant:
+0:140                    0 (const int)
+0:140                  Constant:
+0:140                    1 (const int)
+0:140              Constant:
+0:140                0 (const int)
+0:140                0 (const int)
+0:141      move second child to first child ( temp 3-component vector of int)
+0:141        vector swizzle ( temp 3-component vector of int)
+0:141          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141              'invocation' ( temp uint)
+0:141            Constant:
+0:141              1 (const int)
+0:141          Sequence
+0:141            Constant:
+0:141              0 (const int)
+0:141            Constant:
+0:141              1 (const int)
+0:141            Constant:
+0:141              2 (const int)
+0:141        Convert bool to int ( temp 3-component vector of int)
+0:141          subgroupXor ( global 3-component vector of bool)
+0:141            Compare Less Than ( global 3-component vector of bool)
+0:141              vector swizzle ( temp 3-component vector of int)
+0:141                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141                    Constant:
+0:141                      1 (const int)
+0:141                  Constant:
+0:141                    1 (const int)
+0:141                Sequence
+0:141                  Constant:
+0:141                    0 (const int)
+0:141                  Constant:
+0:141                    1 (const int)
+0:141                  Constant:
+0:141                    2 (const int)
+0:141              Constant:
+0:141                0 (const int)
+0:141                0 (const int)
+0:141                0 (const int)
+0:142      move second child to first child ( temp 4-component vector of int)
+0:142        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142            'invocation' ( temp uint)
+0:142          Constant:
+0:142            1 (const int)
+0:142        Convert bool to int ( temp 4-component vector of int)
+0:142          subgroupXor ( global 4-component vector of bool)
+0:142            Compare Less Than ( global 4-component vector of bool)
+0:142              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142                  Constant:
+0:142                    1 (const int)
+0:142                Constant:
+0:142                  1 (const int)
+0:142              Constant:
+0:142                0 (const int)
+0:142                0 (const int)
+0:142                0 (const int)
+0:142                0 (const int)
+0:144      move second child to first child ( temp float)
+0:144        direct index ( temp float)
+0:144          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:144            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144              'invocation' ( temp uint)
+0:144            Constant:
+0:144              0 (const int)
+0:144          Constant:
+0:144            0 (const int)
+0:144        subgroupInclusiveAdd ( global float)
+0:144          direct index ( temp float)
+0:144            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:144              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144                Constant:
+0:144                  0 (const int)
+0:144              Constant:
+0:144                0 (const int)
+0:144            Constant:
+0:144              0 (const int)
+0:145      move second child to first child ( temp 2-component vector of float)
+0:145        vector swizzle ( temp 2-component vector of float)
+0:145          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:145            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:145              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:145              'invocation' ( temp uint)
+0:145            Constant:
+0:145              0 (const int)
+0:145          Sequence
+0:145            Constant:
+0:145              0 (const int)
+0:145            Constant:
+0:145              1 (const int)
+0:145        subgroupInclusiveAdd ( global 2-component vector of float)
+0:145          vector swizzle ( temp 2-component vector of float)
+0:145            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:145              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:145                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:145                Constant:
+0:145                  1 (const int)
+0:145              Constant:
+0:145                0 (const int)
+0:145            Sequence
+0:145              Constant:
+0:145                0 (const int)
+0:145              Constant:
+0:145                1 (const int)
+0:146      move second child to first child ( temp 3-component vector of float)
+0:146        vector swizzle ( temp 3-component vector of float)
+0:146          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:146            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146              'invocation' ( temp uint)
+0:146            Constant:
+0:146              0 (const int)
+0:146          Sequence
+0:146            Constant:
+0:146              0 (const int)
+0:146            Constant:
+0:146              1 (const int)
+0:146            Constant:
+0:146              2 (const int)
+0:146        subgroupInclusiveAdd ( global 3-component vector of float)
+0:146          vector swizzle ( temp 3-component vector of float)
+0:146            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:146              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146                Constant:
+0:146                  2 (const int)
+0:146              Constant:
+0:146                0 (const int)
+0:146            Sequence
+0:146              Constant:
+0:146                0 (const int)
+0:146              Constant:
+0:146                1 (const int)
+0:146              Constant:
+0:146                2 (const int)
+0:147      move second child to first child ( temp 4-component vector of float)
+0:147        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:147          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147            'invocation' ( temp uint)
+0:147          Constant:
+0:147            0 (const int)
+0:147        subgroupInclusiveAdd ( global 4-component vector of float)
+0:147          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:147            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147              Constant:
+0:147                3 (const int)
+0:147            Constant:
+0:147              0 (const int)
+0:149      move second child to first child ( temp int)
+0:149        direct index ( temp int)
+0:149          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:149            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149              'invocation' ( temp uint)
+0:149            Constant:
+0:149              1 (const int)
+0:149          Constant:
+0:149            0 (const int)
+0:149        subgroupInclusiveAdd ( global int)
+0:149          direct index ( temp int)
+0:149            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:149              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149                Constant:
+0:149                  0 (const int)
+0:149              Constant:
+0:149                1 (const int)
+0:149            Constant:
+0:149              0 (const int)
+0:150      move second child to first child ( temp 2-component vector of int)
+0:150        vector swizzle ( temp 2-component vector of int)
+0:150          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:150            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:150              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:150              'invocation' ( temp uint)
+0:150            Constant:
+0:150              1 (const int)
+0:150          Sequence
+0:150            Constant:
+0:150              0 (const int)
+0:150            Constant:
+0:150              1 (const int)
+0:150        subgroupInclusiveAdd ( global 2-component vector of int)
+0:150          vector swizzle ( temp 2-component vector of int)
+0:150            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:150              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:150                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:150                Constant:
+0:150                  1 (const int)
+0:150              Constant:
+0:150                1 (const int)
+0:150            Sequence
+0:150              Constant:
+0:150                0 (const int)
+0:150              Constant:
+0:150                1 (const int)
+0:151      move second child to first child ( temp 3-component vector of int)
+0:151        vector swizzle ( temp 3-component vector of int)
+0:151          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:151            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151              'invocation' ( temp uint)
+0:151            Constant:
+0:151              1 (const int)
+0:151          Sequence
+0:151            Constant:
+0:151              0 (const int)
+0:151            Constant:
+0:151              1 (const int)
+0:151            Constant:
+0:151              2 (const int)
+0:151        subgroupInclusiveAdd ( global 3-component vector of int)
+0:151          vector swizzle ( temp 3-component vector of int)
+0:151            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:151              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151                Constant:
+0:151                  2 (const int)
+0:151              Constant:
+0:151                1 (const int)
+0:151            Sequence
+0:151              Constant:
+0:151                0 (const int)
+0:151              Constant:
+0:151                1 (const int)
+0:151              Constant:
+0:151                2 (const int)
+0:152      move second child to first child ( temp 4-component vector of int)
+0:152        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:152          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152            'invocation' ( temp uint)
+0:152          Constant:
+0:152            1 (const int)
+0:152        subgroupInclusiveAdd ( global 4-component vector of int)
+0:152          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:152            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152              Constant:
+0:152                3 (const int)
+0:152            Constant:
+0:152              1 (const int)
+0:154      move second child to first child ( temp uint)
+0:154        direct index ( temp uint)
+0:154          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:154            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154              'invocation' ( temp uint)
+0:154            Constant:
+0:154              2 (const int)
+0:154          Constant:
+0:154            0 (const int)
+0:154        subgroupInclusiveAdd ( global uint)
+0:154          direct index ( temp uint)
+0:154            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:154              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154                Constant:
+0:154                  0 (const int)
+0:154              Constant:
+0:154                2 (const int)
+0:154            Constant:
+0:154              0 (const int)
+0:155      move second child to first child ( temp 2-component vector of uint)
+0:155        vector swizzle ( temp 2-component vector of uint)
+0:155          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:155            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:155              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:155              'invocation' ( temp uint)
+0:155            Constant:
+0:155              2 (const int)
+0:155          Sequence
+0:155            Constant:
+0:155              0 (const int)
+0:155            Constant:
+0:155              1 (const int)
+0:155        subgroupInclusiveAdd ( global 2-component vector of uint)
+0:155          vector swizzle ( temp 2-component vector of uint)
+0:155            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:155              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:155                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:155                Constant:
+0:155                  1 (const int)
+0:155              Constant:
+0:155                2 (const int)
+0:155            Sequence
+0:155              Constant:
+0:155                0 (const int)
+0:155              Constant:
+0:155                1 (const int)
+0:156      move second child to first child ( temp 3-component vector of uint)
+0:156        vector swizzle ( temp 3-component vector of uint)
+0:156          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:156            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156              'invocation' ( temp uint)
+0:156            Constant:
+0:156              2 (const int)
+0:156          Sequence
+0:156            Constant:
+0:156              0 (const int)
+0:156            Constant:
+0:156              1 (const int)
+0:156            Constant:
+0:156              2 (const int)
+0:156        subgroupInclusiveAdd ( global 3-component vector of uint)
+0:156          vector swizzle ( temp 3-component vector of uint)
+0:156            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:156              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156                Constant:
+0:156                  2 (const int)
+0:156              Constant:
+0:156                2 (const int)
+0:156            Sequence
+0:156              Constant:
+0:156                0 (const int)
+0:156              Constant:
+0:156                1 (const int)
+0:156              Constant:
+0:156                2 (const int)
+0:157      move second child to first child ( temp 4-component vector of uint)
+0:157        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:157          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157            'invocation' ( temp uint)
+0:157          Constant:
+0:157            2 (const int)
+0:157        subgroupInclusiveAdd ( global 4-component vector of uint)
+0:157          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:157            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157              Constant:
+0:157                3 (const int)
+0:157            Constant:
+0:157              2 (const int)
+0:159      move second child to first child ( temp double)
+0:159        direct index ( temp double)
+0:159          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:159            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159              'invocation' ( temp uint)
+0:159            Constant:
+0:159              3 (const int)
+0:159          Constant:
+0:159            0 (const int)
+0:159        subgroupInclusiveAdd ( global double)
+0:159          direct index ( temp double)
+0:159            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:159              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159                Constant:
+0:159                  0 (const int)
+0:159              Constant:
+0:159                3 (const int)
+0:159            Constant:
+0:159              0 (const int)
+0:160      move second child to first child ( temp 2-component vector of double)
+0:160        vector swizzle ( temp 2-component vector of double)
+0:160          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:160            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:160              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:160              'invocation' ( temp uint)
+0:160            Constant:
+0:160              3 (const int)
+0:160          Sequence
+0:160            Constant:
+0:160              0 (const int)
+0:160            Constant:
+0:160              1 (const int)
+0:160        subgroupInclusiveAdd ( global 2-component vector of double)
+0:160          vector swizzle ( temp 2-component vector of double)
+0:160            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:160              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:160                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:160                Constant:
+0:160                  1 (const int)
+0:160              Constant:
+0:160                3 (const int)
+0:160            Sequence
+0:160              Constant:
+0:160                0 (const int)
+0:160              Constant:
+0:160                1 (const int)
+0:161      move second child to first child ( temp 3-component vector of double)
+0:161        vector swizzle ( temp 3-component vector of double)
+0:161          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:161            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161              'invocation' ( temp uint)
+0:161            Constant:
+0:161              3 (const int)
+0:161          Sequence
+0:161            Constant:
+0:161              0 (const int)
+0:161            Constant:
+0:161              1 (const int)
+0:161            Constant:
+0:161              2 (const int)
+0:161        subgroupInclusiveAdd ( global 3-component vector of double)
+0:161          vector swizzle ( temp 3-component vector of double)
+0:161            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:161              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161                Constant:
+0:161                  2 (const int)
+0:161              Constant:
+0:161                3 (const int)
+0:161            Sequence
+0:161              Constant:
+0:161                0 (const int)
+0:161              Constant:
+0:161                1 (const int)
+0:161              Constant:
+0:161                2 (const int)
+0:162      move second child to first child ( temp 4-component vector of double)
+0:162        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:162          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162            'invocation' ( temp uint)
+0:162          Constant:
+0:162            3 (const int)
+0:162        subgroupInclusiveAdd ( global 4-component vector of double)
+0:162          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:162            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162              Constant:
+0:162                3 (const int)
+0:162            Constant:
+0:162              3 (const int)
+0:164      move second child to first child ( temp float)
+0:164        direct index ( temp float)
+0:164          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:164            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164              'invocation' ( temp uint)
+0:164            Constant:
+0:164              0 (const int)
+0:164          Constant:
+0:164            0 (const int)
+0:164        subgroupInclusiveMul ( global float)
+0:164          direct index ( temp float)
+0:164            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:164              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164                Constant:
+0:164                  0 (const int)
+0:164              Constant:
+0:164                0 (const int)
+0:164            Constant:
+0:164              0 (const int)
+0:165      move second child to first child ( temp 2-component vector of float)
+0:165        vector swizzle ( temp 2-component vector of float)
+0:165          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:165            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:165              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:165              'invocation' ( temp uint)
+0:165            Constant:
+0:165              0 (const int)
+0:165          Sequence
+0:165            Constant:
+0:165              0 (const int)
+0:165            Constant:
+0:165              1 (const int)
+0:165        subgroupInclusiveMul ( global 2-component vector of float)
+0:165          vector swizzle ( temp 2-component vector of float)
+0:165            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:165              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:165                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:165                Constant:
+0:165                  1 (const int)
+0:165              Constant:
+0:165                0 (const int)
+0:165            Sequence
+0:165              Constant:
+0:165                0 (const int)
+0:165              Constant:
+0:165                1 (const int)
+0:166      move second child to first child ( temp 3-component vector of float)
+0:166        vector swizzle ( temp 3-component vector of float)
+0:166          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:166            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166              'invocation' ( temp uint)
+0:166            Constant:
+0:166              0 (const int)
+0:166          Sequence
+0:166            Constant:
+0:166              0 (const int)
+0:166            Constant:
+0:166              1 (const int)
+0:166            Constant:
+0:166              2 (const int)
+0:166        subgroupInclusiveMul ( global 3-component vector of float)
+0:166          vector swizzle ( temp 3-component vector of float)
+0:166            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:166              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166                Constant:
+0:166                  2 (const int)
+0:166              Constant:
+0:166                0 (const int)
+0:166            Sequence
+0:166              Constant:
+0:166                0 (const int)
+0:166              Constant:
+0:166                1 (const int)
+0:166              Constant:
+0:166                2 (const int)
+0:167      move second child to first child ( temp 4-component vector of float)
+0:167        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:167          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167            'invocation' ( temp uint)
+0:167          Constant:
+0:167            0 (const int)
+0:167        subgroupInclusiveMul ( global 4-component vector of float)
+0:167          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:167            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167              Constant:
+0:167                3 (const int)
+0:167            Constant:
+0:167              0 (const int)
+0:169      move second child to first child ( temp int)
+0:169        direct index ( temp int)
+0:169          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:169            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169              'invocation' ( temp uint)
+0:169            Constant:
+0:169              1 (const int)
+0:169          Constant:
+0:169            0 (const int)
+0:169        subgroupInclusiveMul ( global int)
+0:169          direct index ( temp int)
+0:169            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:169              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169                Constant:
+0:169                  0 (const int)
+0:169              Constant:
+0:169                1 (const int)
+0:169            Constant:
+0:169              0 (const int)
+0:170      move second child to first child ( temp 2-component vector of int)
+0:170        vector swizzle ( temp 2-component vector of int)
+0:170          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:170            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:170              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:170              'invocation' ( temp uint)
+0:170            Constant:
+0:170              1 (const int)
+0:170          Sequence
+0:170            Constant:
+0:170              0 (const int)
+0:170            Constant:
+0:170              1 (const int)
+0:170        subgroupInclusiveMul ( global 2-component vector of int)
+0:170          vector swizzle ( temp 2-component vector of int)
+0:170            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:170              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:170                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:170                Constant:
+0:170                  1 (const int)
+0:170              Constant:
+0:170                1 (const int)
+0:170            Sequence
+0:170              Constant:
+0:170                0 (const int)
+0:170              Constant:
+0:170                1 (const int)
+0:171      move second child to first child ( temp 3-component vector of int)
+0:171        vector swizzle ( temp 3-component vector of int)
+0:171          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:171            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171              'invocation' ( temp uint)
+0:171            Constant:
+0:171              1 (const int)
+0:171          Sequence
+0:171            Constant:
+0:171              0 (const int)
+0:171            Constant:
+0:171              1 (const int)
+0:171            Constant:
+0:171              2 (const int)
+0:171        subgroupInclusiveMul ( global 3-component vector of int)
+0:171          vector swizzle ( temp 3-component vector of int)
+0:171            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:171              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171                Constant:
+0:171                  2 (const int)
+0:171              Constant:
+0:171                1 (const int)
+0:171            Sequence
+0:171              Constant:
+0:171                0 (const int)
+0:171              Constant:
+0:171                1 (const int)
+0:171              Constant:
+0:171                2 (const int)
+0:172      move second child to first child ( temp 4-component vector of int)
+0:172        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:172          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172            'invocation' ( temp uint)
+0:172          Constant:
+0:172            1 (const int)
+0:172        subgroupInclusiveMul ( global 4-component vector of int)
+0:172          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:172            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172              Constant:
+0:172                3 (const int)
+0:172            Constant:
+0:172              1 (const int)
+0:174      move second child to first child ( temp uint)
+0:174        direct index ( temp uint)
+0:174          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:174            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174              'invocation' ( temp uint)
+0:174            Constant:
+0:174              2 (const int)
+0:174          Constant:
+0:174            0 (const int)
+0:174        subgroupInclusiveMul ( global uint)
+0:174          direct index ( temp uint)
+0:174            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:174              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174                Constant:
+0:174                  0 (const int)
+0:174              Constant:
+0:174                2 (const int)
+0:174            Constant:
+0:174              0 (const int)
+0:175      move second child to first child ( temp 2-component vector of uint)
+0:175        vector swizzle ( temp 2-component vector of uint)
+0:175          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:175            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:175              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:175              'invocation' ( temp uint)
+0:175            Constant:
+0:175              2 (const int)
+0:175          Sequence
+0:175            Constant:
+0:175              0 (const int)
+0:175            Constant:
+0:175              1 (const int)
+0:175        subgroupInclusiveMul ( global 2-component vector of uint)
+0:175          vector swizzle ( temp 2-component vector of uint)
+0:175            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:175              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:175                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:175                Constant:
+0:175                  1 (const int)
+0:175              Constant:
+0:175                2 (const int)
+0:175            Sequence
+0:175              Constant:
+0:175                0 (const int)
+0:175              Constant:
+0:175                1 (const int)
+0:176      move second child to first child ( temp 3-component vector of uint)
+0:176        vector swizzle ( temp 3-component vector of uint)
+0:176          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:176            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176              'invocation' ( temp uint)
+0:176            Constant:
+0:176              2 (const int)
+0:176          Sequence
+0:176            Constant:
+0:176              0 (const int)
+0:176            Constant:
+0:176              1 (const int)
+0:176            Constant:
+0:176              2 (const int)
+0:176        subgroupInclusiveMul ( global 3-component vector of uint)
+0:176          vector swizzle ( temp 3-component vector of uint)
+0:176            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:176              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176                Constant:
+0:176                  2 (const int)
+0:176              Constant:
+0:176                2 (const int)
+0:176            Sequence
+0:176              Constant:
+0:176                0 (const int)
+0:176              Constant:
+0:176                1 (const int)
+0:176              Constant:
+0:176                2 (const int)
+0:177      move second child to first child ( temp 4-component vector of uint)
+0:177        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:177          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177            'invocation' ( temp uint)
+0:177          Constant:
+0:177            2 (const int)
+0:177        subgroupInclusiveMul ( global 4-component vector of uint)
+0:177          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:177            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177              Constant:
+0:177                3 (const int)
+0:177            Constant:
+0:177              2 (const int)
+0:179      move second child to first child ( temp double)
+0:179        direct index ( temp double)
+0:179          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:179            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179              'invocation' ( temp uint)
+0:179            Constant:
+0:179              3 (const int)
+0:179          Constant:
+0:179            0 (const int)
+0:179        subgroupInclusiveMul ( global double)
+0:179          direct index ( temp double)
+0:179            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:179              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179                Constant:
+0:179                  0 (const int)
+0:179              Constant:
+0:179                3 (const int)
+0:179            Constant:
+0:179              0 (const int)
+0:180      move second child to first child ( temp 2-component vector of double)
+0:180        vector swizzle ( temp 2-component vector of double)
+0:180          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:180            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:180              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:180              'invocation' ( temp uint)
+0:180            Constant:
+0:180              3 (const int)
+0:180          Sequence
+0:180            Constant:
+0:180              0 (const int)
+0:180            Constant:
+0:180              1 (const int)
+0:180        subgroupInclusiveMul ( global 2-component vector of double)
+0:180          vector swizzle ( temp 2-component vector of double)
+0:180            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:180              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:180                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:180                Constant:
+0:180                  1 (const int)
+0:180              Constant:
+0:180                3 (const int)
+0:180            Sequence
+0:180              Constant:
+0:180                0 (const int)
+0:180              Constant:
+0:180                1 (const int)
+0:181      move second child to first child ( temp 3-component vector of double)
+0:181        vector swizzle ( temp 3-component vector of double)
+0:181          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:181            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181              'invocation' ( temp uint)
+0:181            Constant:
+0:181              3 (const int)
+0:181          Sequence
+0:181            Constant:
+0:181              0 (const int)
+0:181            Constant:
+0:181              1 (const int)
+0:181            Constant:
+0:181              2 (const int)
+0:181        subgroupInclusiveMul ( global 3-component vector of double)
+0:181          vector swizzle ( temp 3-component vector of double)
+0:181            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:181              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181                Constant:
+0:181                  2 (const int)
+0:181              Constant:
+0:181                3 (const int)
+0:181            Sequence
+0:181              Constant:
+0:181                0 (const int)
+0:181              Constant:
+0:181                1 (const int)
+0:181              Constant:
+0:181                2 (const int)
+0:182      move second child to first child ( temp 4-component vector of double)
+0:182        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:182          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182            'invocation' ( temp uint)
+0:182          Constant:
+0:182            3 (const int)
+0:182        subgroupInclusiveMul ( global 4-component vector of double)
+0:182          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:182            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182              Constant:
+0:182                3 (const int)
+0:182            Constant:
+0:182              3 (const int)
+0:184      move second child to first child ( temp float)
+0:184        direct index ( temp float)
+0:184          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:184            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184              'invocation' ( temp uint)
+0:184            Constant:
+0:184              0 (const int)
+0:184          Constant:
+0:184            0 (const int)
+0:184        subgroupInclusiveMin ( global float)
+0:184          direct index ( temp float)
+0:184            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:184              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184                Constant:
+0:184                  0 (const int)
+0:184              Constant:
+0:184                0 (const int)
+0:184            Constant:
+0:184              0 (const int)
+0:185      move second child to first child ( temp 2-component vector of float)
+0:185        vector swizzle ( temp 2-component vector of float)
+0:185          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:185            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:185              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:185              'invocation' ( temp uint)
+0:185            Constant:
+0:185              0 (const int)
+0:185          Sequence
+0:185            Constant:
+0:185              0 (const int)
+0:185            Constant:
+0:185              1 (const int)
+0:185        subgroupInclusiveMin ( global 2-component vector of float)
+0:185          vector swizzle ( temp 2-component vector of float)
+0:185            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:185              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:185                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:185                Constant:
+0:185                  1 (const int)
+0:185              Constant:
+0:185                0 (const int)
+0:185            Sequence
+0:185              Constant:
+0:185                0 (const int)
+0:185              Constant:
+0:185                1 (const int)
+0:186      move second child to first child ( temp 3-component vector of float)
+0:186        vector swizzle ( temp 3-component vector of float)
+0:186          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:186            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186              'invocation' ( temp uint)
+0:186            Constant:
+0:186              0 (const int)
+0:186          Sequence
+0:186            Constant:
+0:186              0 (const int)
+0:186            Constant:
+0:186              1 (const int)
+0:186            Constant:
+0:186              2 (const int)
+0:186        subgroupInclusiveMin ( global 3-component vector of float)
+0:186          vector swizzle ( temp 3-component vector of float)
+0:186            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:186              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186                Constant:
+0:186                  2 (const int)
+0:186              Constant:
+0:186                0 (const int)
+0:186            Sequence
+0:186              Constant:
+0:186                0 (const int)
+0:186              Constant:
+0:186                1 (const int)
+0:186              Constant:
+0:186                2 (const int)
+0:187      move second child to first child ( temp 4-component vector of float)
+0:187        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:187          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187            'invocation' ( temp uint)
+0:187          Constant:
+0:187            0 (const int)
+0:187        subgroupInclusiveMin ( global 4-component vector of float)
+0:187          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:187            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187              Constant:
+0:187                3 (const int)
+0:187            Constant:
+0:187              0 (const int)
+0:189      move second child to first child ( temp int)
+0:189        direct index ( temp int)
+0:189          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:189            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189              'invocation' ( temp uint)
+0:189            Constant:
+0:189              1 (const int)
+0:189          Constant:
+0:189            0 (const int)
+0:189        subgroupInclusiveMin ( global int)
+0:189          direct index ( temp int)
+0:189            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:189              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189                Constant:
+0:189                  0 (const int)
+0:189              Constant:
+0:189                1 (const int)
+0:189            Constant:
+0:189              0 (const int)
+0:190      move second child to first child ( temp 2-component vector of int)
+0:190        vector swizzle ( temp 2-component vector of int)
+0:190          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:190            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:190              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:190              'invocation' ( temp uint)
+0:190            Constant:
+0:190              1 (const int)
+0:190          Sequence
+0:190            Constant:
+0:190              0 (const int)
+0:190            Constant:
+0:190              1 (const int)
+0:190        subgroupInclusiveMin ( global 2-component vector of int)
+0:190          vector swizzle ( temp 2-component vector of int)
+0:190            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:190              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:190                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:190                Constant:
+0:190                  1 (const int)
+0:190              Constant:
+0:190                1 (const int)
+0:190            Sequence
+0:190              Constant:
+0:190                0 (const int)
+0:190              Constant:
+0:190                1 (const int)
+0:191      move second child to first child ( temp 3-component vector of int)
+0:191        vector swizzle ( temp 3-component vector of int)
+0:191          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:191            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191              'invocation' ( temp uint)
+0:191            Constant:
+0:191              1 (const int)
+0:191          Sequence
+0:191            Constant:
+0:191              0 (const int)
+0:191            Constant:
+0:191              1 (const int)
+0:191            Constant:
+0:191              2 (const int)
+0:191        subgroupInclusiveMin ( global 3-component vector of int)
+0:191          vector swizzle ( temp 3-component vector of int)
+0:191            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:191              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191                Constant:
+0:191                  2 (const int)
+0:191              Constant:
+0:191                1 (const int)
+0:191            Sequence
+0:191              Constant:
+0:191                0 (const int)
+0:191              Constant:
+0:191                1 (const int)
+0:191              Constant:
+0:191                2 (const int)
+0:192      move second child to first child ( temp 4-component vector of int)
+0:192        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:192          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192            'invocation' ( temp uint)
+0:192          Constant:
+0:192            1 (const int)
+0:192        subgroupInclusiveMin ( global 4-component vector of int)
+0:192          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:192            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192              Constant:
+0:192                3 (const int)
+0:192            Constant:
+0:192              1 (const int)
+0:194      move second child to first child ( temp uint)
+0:194        direct index ( temp uint)
+0:194          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:194            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194              'invocation' ( temp uint)
+0:194            Constant:
+0:194              2 (const int)
+0:194          Constant:
+0:194            0 (const int)
+0:194        subgroupInclusiveMin ( global uint)
+0:194          direct index ( temp uint)
+0:194            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:194              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194                Constant:
+0:194                  0 (const int)
+0:194              Constant:
+0:194                2 (const int)
+0:194            Constant:
+0:194              0 (const int)
+0:195      move second child to first child ( temp 2-component vector of uint)
+0:195        vector swizzle ( temp 2-component vector of uint)
+0:195          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:195            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:195              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:195              'invocation' ( temp uint)
+0:195            Constant:
+0:195              2 (const int)
+0:195          Sequence
+0:195            Constant:
+0:195              0 (const int)
+0:195            Constant:
+0:195              1 (const int)
+0:195        subgroupInclusiveMin ( global 2-component vector of uint)
+0:195          vector swizzle ( temp 2-component vector of uint)
+0:195            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:195              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:195                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:195                Constant:
+0:195                  1 (const int)
+0:195              Constant:
+0:195                2 (const int)
+0:195            Sequence
+0:195              Constant:
+0:195                0 (const int)
+0:195              Constant:
+0:195                1 (const int)
+0:196      move second child to first child ( temp 3-component vector of uint)
+0:196        vector swizzle ( temp 3-component vector of uint)
+0:196          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:196            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196              'invocation' ( temp uint)
+0:196            Constant:
+0:196              2 (const int)
+0:196          Sequence
+0:196            Constant:
+0:196              0 (const int)
+0:196            Constant:
+0:196              1 (const int)
+0:196            Constant:
+0:196              2 (const int)
+0:196        subgroupInclusiveMin ( global 3-component vector of uint)
+0:196          vector swizzle ( temp 3-component vector of uint)
+0:196            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:196              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196                Constant:
+0:196                  2 (const int)
+0:196              Constant:
+0:196                2 (const int)
+0:196            Sequence
+0:196              Constant:
+0:196                0 (const int)
+0:196              Constant:
+0:196                1 (const int)
+0:196              Constant:
+0:196                2 (const int)
+0:197      move second child to first child ( temp 4-component vector of uint)
+0:197        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:197          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197            'invocation' ( temp uint)
+0:197          Constant:
+0:197            2 (const int)
+0:197        subgroupInclusiveMin ( global 4-component vector of uint)
+0:197          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:197            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197              Constant:
+0:197                3 (const int)
+0:197            Constant:
+0:197              2 (const int)
+0:199      move second child to first child ( temp double)
+0:199        direct index ( temp double)
+0:199          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:199            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199              'invocation' ( temp uint)
+0:199            Constant:
+0:199              3 (const int)
+0:199          Constant:
+0:199            0 (const int)
+0:199        subgroupInclusiveMin ( global double)
+0:199          direct index ( temp double)
+0:199            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:199              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199                Constant:
+0:199                  0 (const int)
+0:199              Constant:
+0:199                3 (const int)
+0:199            Constant:
+0:199              0 (const int)
+0:200      move second child to first child ( temp 2-component vector of double)
+0:200        vector swizzle ( temp 2-component vector of double)
+0:200          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:200            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:200              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:200              'invocation' ( temp uint)
+0:200            Constant:
+0:200              3 (const int)
+0:200          Sequence
+0:200            Constant:
+0:200              0 (const int)
+0:200            Constant:
+0:200              1 (const int)
+0:200        subgroupInclusiveMin ( global 2-component vector of double)
+0:200          vector swizzle ( temp 2-component vector of double)
+0:200            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:200              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:200                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:200                Constant:
+0:200                  1 (const int)
+0:200              Constant:
+0:200                3 (const int)
+0:200            Sequence
+0:200              Constant:
+0:200                0 (const int)
+0:200              Constant:
+0:200                1 (const int)
+0:201      move second child to first child ( temp 3-component vector of double)
+0:201        vector swizzle ( temp 3-component vector of double)
+0:201          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:201            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201              'invocation' ( temp uint)
+0:201            Constant:
+0:201              3 (const int)
+0:201          Sequence
+0:201            Constant:
+0:201              0 (const int)
+0:201            Constant:
+0:201              1 (const int)
+0:201            Constant:
+0:201              2 (const int)
+0:201        subgroupInclusiveMin ( global 3-component vector of double)
+0:201          vector swizzle ( temp 3-component vector of double)
+0:201            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:201              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201                Constant:
+0:201                  2 (const int)
+0:201              Constant:
+0:201                3 (const int)
+0:201            Sequence
+0:201              Constant:
+0:201                0 (const int)
+0:201              Constant:
+0:201                1 (const int)
+0:201              Constant:
+0:201                2 (const int)
+0:202      move second child to first child ( temp 4-component vector of double)
+0:202        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:202          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202            'invocation' ( temp uint)
+0:202          Constant:
+0:202            3 (const int)
+0:202        subgroupInclusiveMin ( global 4-component vector of double)
+0:202          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:202            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202              Constant:
+0:202                3 (const int)
+0:202            Constant:
+0:202              3 (const int)
+0:204      move second child to first child ( temp float)
+0:204        direct index ( temp float)
+0:204          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:204            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204              'invocation' ( temp uint)
+0:204            Constant:
+0:204              0 (const int)
+0:204          Constant:
+0:204            0 (const int)
+0:204        subgroupInclusiveMax ( global float)
+0:204          direct index ( temp float)
+0:204            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:204              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204                Constant:
+0:204                  0 (const int)
+0:204              Constant:
+0:204                0 (const int)
+0:204            Constant:
+0:204              0 (const int)
+0:205      move second child to first child ( temp 2-component vector of float)
+0:205        vector swizzle ( temp 2-component vector of float)
+0:205          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:205            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:205              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:205              'invocation' ( temp uint)
+0:205            Constant:
+0:205              0 (const int)
+0:205          Sequence
+0:205            Constant:
+0:205              0 (const int)
+0:205            Constant:
+0:205              1 (const int)
+0:205        subgroupInclusiveMax ( global 2-component vector of float)
+0:205          vector swizzle ( temp 2-component vector of float)
+0:205            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:205              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:205                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:205                Constant:
+0:205                  1 (const int)
+0:205              Constant:
+0:205                0 (const int)
+0:205            Sequence
+0:205              Constant:
+0:205                0 (const int)
+0:205              Constant:
+0:205                1 (const int)
+0:206      move second child to first child ( temp 3-component vector of float)
+0:206        vector swizzle ( temp 3-component vector of float)
+0:206          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:206            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206              'invocation' ( temp uint)
+0:206            Constant:
+0:206              0 (const int)
+0:206          Sequence
+0:206            Constant:
+0:206              0 (const int)
+0:206            Constant:
+0:206              1 (const int)
+0:206            Constant:
+0:206              2 (const int)
+0:206        subgroupInclusiveMax ( global 3-component vector of float)
+0:206          vector swizzle ( temp 3-component vector of float)
+0:206            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:206              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206                Constant:
+0:206                  2 (const int)
+0:206              Constant:
+0:206                0 (const int)
+0:206            Sequence
+0:206              Constant:
+0:206                0 (const int)
+0:206              Constant:
+0:206                1 (const int)
+0:206              Constant:
+0:206                2 (const int)
+0:207      move second child to first child ( temp 4-component vector of float)
+0:207        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:207          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207            'invocation' ( temp uint)
+0:207          Constant:
+0:207            0 (const int)
+0:207        subgroupInclusiveMax ( global 4-component vector of float)
+0:207          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:207            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207              Constant:
+0:207                3 (const int)
+0:207            Constant:
+0:207              0 (const int)
+0:209      move second child to first child ( temp int)
+0:209        direct index ( temp int)
+0:209          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:209            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209              'invocation' ( temp uint)
+0:209            Constant:
+0:209              1 (const int)
+0:209          Constant:
+0:209            0 (const int)
+0:209        subgroupInclusiveMax ( global int)
+0:209          direct index ( temp int)
+0:209            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:209              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209                Constant:
+0:209                  0 (const int)
+0:209              Constant:
+0:209                1 (const int)
+0:209            Constant:
+0:209              0 (const int)
+0:210      move second child to first child ( temp 2-component vector of int)
+0:210        vector swizzle ( temp 2-component vector of int)
+0:210          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:210            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:210              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:210              'invocation' ( temp uint)
+0:210            Constant:
+0:210              1 (const int)
+0:210          Sequence
+0:210            Constant:
+0:210              0 (const int)
+0:210            Constant:
+0:210              1 (const int)
+0:210        subgroupInclusiveMax ( global 2-component vector of int)
+0:210          vector swizzle ( temp 2-component vector of int)
+0:210            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:210              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:210                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:210                Constant:
+0:210                  1 (const int)
+0:210              Constant:
+0:210                1 (const int)
+0:210            Sequence
+0:210              Constant:
+0:210                0 (const int)
+0:210              Constant:
+0:210                1 (const int)
+0:211      move second child to first child ( temp 3-component vector of int)
+0:211        vector swizzle ( temp 3-component vector of int)
+0:211          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:211            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211              'invocation' ( temp uint)
+0:211            Constant:
+0:211              1 (const int)
+0:211          Sequence
+0:211            Constant:
+0:211              0 (const int)
+0:211            Constant:
+0:211              1 (const int)
+0:211            Constant:
+0:211              2 (const int)
+0:211        subgroupInclusiveMax ( global 3-component vector of int)
+0:211          vector swizzle ( temp 3-component vector of int)
+0:211            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:211              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211                Constant:
+0:211                  2 (const int)
+0:211              Constant:
+0:211                1 (const int)
+0:211            Sequence
+0:211              Constant:
+0:211                0 (const int)
+0:211              Constant:
+0:211                1 (const int)
+0:211              Constant:
+0:211                2 (const int)
+0:212      move second child to first child ( temp 4-component vector of int)
+0:212        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:212          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212            'invocation' ( temp uint)
+0:212          Constant:
+0:212            1 (const int)
+0:212        subgroupInclusiveMax ( global 4-component vector of int)
+0:212          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:212            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212              Constant:
+0:212                3 (const int)
+0:212            Constant:
+0:212              1 (const int)
+0:214      move second child to first child ( temp uint)
+0:214        direct index ( temp uint)
+0:214          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:214            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214              'invocation' ( temp uint)
+0:214            Constant:
+0:214              2 (const int)
+0:214          Constant:
+0:214            0 (const int)
+0:214        subgroupInclusiveMax ( global uint)
+0:214          direct index ( temp uint)
+0:214            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:214              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214                Constant:
+0:214                  0 (const int)
+0:214              Constant:
+0:214                2 (const int)
+0:214            Constant:
+0:214              0 (const int)
+0:215      move second child to first child ( temp 2-component vector of uint)
+0:215        vector swizzle ( temp 2-component vector of uint)
+0:215          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:215            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:215              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:215              'invocation' ( temp uint)
+0:215            Constant:
+0:215              2 (const int)
+0:215          Sequence
+0:215            Constant:
+0:215              0 (const int)
+0:215            Constant:
+0:215              1 (const int)
+0:215        subgroupInclusiveMax ( global 2-component vector of uint)
+0:215          vector swizzle ( temp 2-component vector of uint)
+0:215            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:215              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:215                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:215                Constant:
+0:215                  1 (const int)
+0:215              Constant:
+0:215                2 (const int)
+0:215            Sequence
+0:215              Constant:
+0:215                0 (const int)
+0:215              Constant:
+0:215                1 (const int)
+0:216      move second child to first child ( temp 3-component vector of uint)
+0:216        vector swizzle ( temp 3-component vector of uint)
+0:216          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:216            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216              'invocation' ( temp uint)
+0:216            Constant:
+0:216              2 (const int)
+0:216          Sequence
+0:216            Constant:
+0:216              0 (const int)
+0:216            Constant:
+0:216              1 (const int)
+0:216            Constant:
+0:216              2 (const int)
+0:216        subgroupInclusiveMax ( global 3-component vector of uint)
+0:216          vector swizzle ( temp 3-component vector of uint)
+0:216            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:216              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216                Constant:
+0:216                  2 (const int)
+0:216              Constant:
+0:216                2 (const int)
+0:216            Sequence
+0:216              Constant:
+0:216                0 (const int)
+0:216              Constant:
+0:216                1 (const int)
+0:216              Constant:
+0:216                2 (const int)
+0:217      move second child to first child ( temp 4-component vector of uint)
+0:217        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:217          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217            'invocation' ( temp uint)
+0:217          Constant:
+0:217            2 (const int)
+0:217        subgroupInclusiveMax ( global 4-component vector of uint)
+0:217          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:217            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217              Constant:
+0:217                3 (const int)
+0:217            Constant:
+0:217              2 (const int)
+0:219      move second child to first child ( temp double)
+0:219        direct index ( temp double)
+0:219          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:219            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219              'invocation' ( temp uint)
+0:219            Constant:
+0:219              3 (const int)
+0:219          Constant:
+0:219            0 (const int)
+0:219        subgroupInclusiveMax ( global double)
+0:219          direct index ( temp double)
+0:219            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:219              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219                Constant:
+0:219                  0 (const int)
+0:219              Constant:
+0:219                3 (const int)
+0:219            Constant:
+0:219              0 (const int)
+0:220      move second child to first child ( temp 2-component vector of double)
+0:220        vector swizzle ( temp 2-component vector of double)
+0:220          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:220            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:220              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:220              'invocation' ( temp uint)
+0:220            Constant:
+0:220              3 (const int)
+0:220          Sequence
+0:220            Constant:
+0:220              0 (const int)
+0:220            Constant:
+0:220              1 (const int)
+0:220        subgroupInclusiveMax ( global 2-component vector of double)
+0:220          vector swizzle ( temp 2-component vector of double)
+0:220            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:220              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:220                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:220                Constant:
+0:220                  1 (const int)
+0:220              Constant:
+0:220                3 (const int)
+0:220            Sequence
+0:220              Constant:
+0:220                0 (const int)
+0:220              Constant:
+0:220                1 (const int)
+0:221      move second child to first child ( temp 3-component vector of double)
+0:221        vector swizzle ( temp 3-component vector of double)
+0:221          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:221            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221              'invocation' ( temp uint)
+0:221            Constant:
+0:221              3 (const int)
+0:221          Sequence
+0:221            Constant:
+0:221              0 (const int)
+0:221            Constant:
+0:221              1 (const int)
+0:221            Constant:
+0:221              2 (const int)
+0:221        subgroupInclusiveMax ( global 3-component vector of double)
+0:221          vector swizzle ( temp 3-component vector of double)
+0:221            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:221              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221                Constant:
+0:221                  2 (const int)
+0:221              Constant:
+0:221                3 (const int)
+0:221            Sequence
+0:221              Constant:
+0:221                0 (const int)
+0:221              Constant:
+0:221                1 (const int)
+0:221              Constant:
+0:221                2 (const int)
+0:222      move second child to first child ( temp 4-component vector of double)
+0:222        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:222          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222            'invocation' ( temp uint)
+0:222          Constant:
+0:222            3 (const int)
+0:222        subgroupInclusiveMax ( global 4-component vector of double)
+0:222          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:222            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222              Constant:
+0:222                3 (const int)
+0:222            Constant:
+0:222              3 (const int)
+0:224      move second child to first child ( temp int)
+0:224        direct index ( temp int)
+0:224          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:224            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224              'invocation' ( temp uint)
+0:224            Constant:
+0:224              1 (const int)
+0:224          Constant:
+0:224            0 (const int)
+0:224        subgroupInclusiveAnd ( global int)
+0:224          direct index ( temp int)
+0:224            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:224              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224                Constant:
+0:224                  0 (const int)
+0:224              Constant:
+0:224                1 (const int)
+0:224            Constant:
+0:224              0 (const int)
+0:225      move second child to first child ( temp 2-component vector of int)
+0:225        vector swizzle ( temp 2-component vector of int)
+0:225          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:225            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:225              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:225              'invocation' ( temp uint)
+0:225            Constant:
+0:225              1 (const int)
+0:225          Sequence
+0:225            Constant:
+0:225              0 (const int)
+0:225            Constant:
+0:225              1 (const int)
+0:225        subgroupInclusiveAnd ( global 2-component vector of int)
+0:225          vector swizzle ( temp 2-component vector of int)
+0:225            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:225              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:225                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:225                Constant:
+0:225                  1 (const int)
+0:225              Constant:
+0:225                1 (const int)
+0:225            Sequence
+0:225              Constant:
+0:225                0 (const int)
+0:225              Constant:
+0:225                1 (const int)
+0:226      move second child to first child ( temp 3-component vector of int)
+0:226        vector swizzle ( temp 3-component vector of int)
+0:226          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:226            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226              'invocation' ( temp uint)
+0:226            Constant:
+0:226              1 (const int)
+0:226          Sequence
+0:226            Constant:
+0:226              0 (const int)
+0:226            Constant:
+0:226              1 (const int)
+0:226            Constant:
+0:226              2 (const int)
+0:226        subgroupInclusiveAnd ( global 3-component vector of int)
+0:226          vector swizzle ( temp 3-component vector of int)
+0:226            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:226              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226                Constant:
+0:226                  2 (const int)
+0:226              Constant:
+0:226                1 (const int)
+0:226            Sequence
+0:226              Constant:
+0:226                0 (const int)
+0:226              Constant:
+0:226                1 (const int)
+0:226              Constant:
+0:226                2 (const int)
+0:227      move second child to first child ( temp 4-component vector of int)
+0:227        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:227          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227            'invocation' ( temp uint)
+0:227          Constant:
+0:227            1 (const int)
+0:227        subgroupInclusiveAnd ( global 4-component vector of int)
+0:227          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:227            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227              Constant:
+0:227                3 (const int)
+0:227            Constant:
+0:227              1 (const int)
+0:229      move second child to first child ( temp uint)
+0:229        direct index ( temp uint)
+0:229          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:229            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229              'invocation' ( temp uint)
+0:229            Constant:
+0:229              2 (const int)
+0:229          Constant:
+0:229            0 (const int)
+0:229        subgroupInclusiveAnd ( global uint)
+0:229          direct index ( temp uint)
+0:229            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:229              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229                Constant:
+0:229                  0 (const int)
+0:229              Constant:
+0:229                2 (const int)
+0:229            Constant:
+0:229              0 (const int)
+0:230      move second child to first child ( temp 2-component vector of uint)
+0:230        vector swizzle ( temp 2-component vector of uint)
+0:230          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:230            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:230              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:230              'invocation' ( temp uint)
+0:230            Constant:
+0:230              2 (const int)
+0:230          Sequence
+0:230            Constant:
+0:230              0 (const int)
+0:230            Constant:
+0:230              1 (const int)
+0:230        subgroupInclusiveAnd ( global 2-component vector of uint)
+0:230          vector swizzle ( temp 2-component vector of uint)
+0:230            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:230              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:230                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:230                Constant:
+0:230                  1 (const int)
+0:230              Constant:
+0:230                2 (const int)
+0:230            Sequence
+0:230              Constant:
+0:230                0 (const int)
+0:230              Constant:
+0:230                1 (const int)
+0:231      move second child to first child ( temp 3-component vector of uint)
+0:231        vector swizzle ( temp 3-component vector of uint)
+0:231          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:231            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231              'invocation' ( temp uint)
+0:231            Constant:
+0:231              2 (const int)
+0:231          Sequence
+0:231            Constant:
+0:231              0 (const int)
+0:231            Constant:
+0:231              1 (const int)
+0:231            Constant:
+0:231              2 (const int)
+0:231        subgroupInclusiveAnd ( global 3-component vector of uint)
+0:231          vector swizzle ( temp 3-component vector of uint)
+0:231            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:231              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231                Constant:
+0:231                  2 (const int)
+0:231              Constant:
+0:231                2 (const int)
+0:231            Sequence
+0:231              Constant:
+0:231                0 (const int)
+0:231              Constant:
+0:231                1 (const int)
+0:231              Constant:
+0:231                2 (const int)
+0:232      move second child to first child ( temp 4-component vector of uint)
+0:232        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:232          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232            'invocation' ( temp uint)
+0:232          Constant:
+0:232            2 (const int)
+0:232        subgroupInclusiveAnd ( global 4-component vector of uint)
+0:232          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:232            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232              Constant:
+0:232                3 (const int)
+0:232            Constant:
+0:232              2 (const int)
+0:234      move second child to first child ( temp int)
+0:234        direct index ( temp int)
+0:234          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:234            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234              'invocation' ( temp uint)
+0:234            Constant:
+0:234              1 (const int)
+0:234          Constant:
+0:234            0 (const int)
+0:234        Convert bool to int ( temp int)
+0:234          subgroupInclusiveAnd ( global bool)
+0:234            Compare Less Than ( temp bool)
+0:234              direct index ( temp int)
+0:234                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:234                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234                    Constant:
+0:234                      0 (const int)
+0:234                  Constant:
+0:234                    1 (const int)
+0:234                Constant:
+0:234                  0 (const int)
+0:234              Constant:
+0:234                0 (const int)
+0:235      move second child to first child ( temp 2-component vector of int)
+0:235        vector swizzle ( temp 2-component vector of int)
+0:235          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:235            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:235              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:235              'invocation' ( temp uint)
+0:235            Constant:
+0:235              1 (const int)
+0:235          Sequence
+0:235            Constant:
+0:235              0 (const int)
+0:235            Constant:
+0:235              1 (const int)
+0:235        Convert bool to int ( temp 2-component vector of int)
+0:235          subgroupInclusiveAnd ( global 2-component vector of bool)
+0:235            Compare Less Than ( global 2-component vector of bool)
+0:235              vector swizzle ( temp 2-component vector of int)
+0:235                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:235                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:235                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:235                    Constant:
+0:235                      1 (const int)
+0:235                  Constant:
+0:235                    1 (const int)
+0:235                Sequence
+0:235                  Constant:
+0:235                    0 (const int)
+0:235                  Constant:
+0:235                    1 (const int)
+0:235              Constant:
+0:235                0 (const int)
+0:235                0 (const int)
+0:236      move second child to first child ( temp 3-component vector of int)
+0:236        vector swizzle ( temp 3-component vector of int)
+0:236          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:236            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236              'invocation' ( temp uint)
+0:236            Constant:
+0:236              1 (const int)
+0:236          Sequence
+0:236            Constant:
+0:236              0 (const int)
+0:236            Constant:
+0:236              1 (const int)
+0:236            Constant:
+0:236              2 (const int)
+0:236        Convert bool to int ( temp 3-component vector of int)
+0:236          subgroupInclusiveAnd ( global 3-component vector of bool)
+0:236            Compare Less Than ( global 3-component vector of bool)
+0:236              vector swizzle ( temp 3-component vector of int)
+0:236                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:236                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236                    Constant:
+0:236                      1 (const int)
+0:236                  Constant:
+0:236                    1 (const int)
+0:236                Sequence
+0:236                  Constant:
+0:236                    0 (const int)
+0:236                  Constant:
+0:236                    1 (const int)
+0:236                  Constant:
+0:236                    2 (const int)
+0:236              Constant:
+0:236                0 (const int)
+0:236                0 (const int)
+0:236                0 (const int)
+0:237      move second child to first child ( temp 4-component vector of int)
+0:237        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:237          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237            'invocation' ( temp uint)
+0:237          Constant:
+0:237            1 (const int)
+0:237        Convert bool to int ( temp 4-component vector of int)
+0:237          subgroupInclusiveAnd ( global 4-component vector of bool)
+0:237            Compare Less Than ( global 4-component vector of bool)
+0:237              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:237                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237                  Constant:
+0:237                    1 (const int)
+0:237                Constant:
+0:237                  1 (const int)
+0:237              Constant:
+0:237                0 (const int)
+0:237                0 (const int)
+0:237                0 (const int)
+0:237                0 (const int)
+0:239      move second child to first child ( temp int)
+0:239        direct index ( temp int)
+0:239          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:239            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239              'invocation' ( temp uint)
+0:239            Constant:
+0:239              1 (const int)
+0:239          Constant:
+0:239            0 (const int)
+0:239        subgroupInclusiveOr ( global int)
+0:239          direct index ( temp int)
+0:239            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:239              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239                Constant:
+0:239                  0 (const int)
+0:239              Constant:
+0:239                1 (const int)
+0:239            Constant:
+0:239              0 (const int)
+0:240      move second child to first child ( temp 2-component vector of int)
+0:240        vector swizzle ( temp 2-component vector of int)
+0:240          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:240            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:240              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:240              'invocation' ( temp uint)
+0:240            Constant:
+0:240              1 (const int)
+0:240          Sequence
+0:240            Constant:
+0:240              0 (const int)
+0:240            Constant:
+0:240              1 (const int)
+0:240        subgroupInclusiveOr ( global 2-component vector of int)
+0:240          vector swizzle ( temp 2-component vector of int)
+0:240            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:240              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:240                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:240                Constant:
+0:240                  1 (const int)
+0:240              Constant:
+0:240                1 (const int)
+0:240            Sequence
+0:240              Constant:
+0:240                0 (const int)
+0:240              Constant:
+0:240                1 (const int)
+0:241      move second child to first child ( temp 3-component vector of int)
+0:241        vector swizzle ( temp 3-component vector of int)
+0:241          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:241            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241              'invocation' ( temp uint)
+0:241            Constant:
+0:241              1 (const int)
+0:241          Sequence
+0:241            Constant:
+0:241              0 (const int)
+0:241            Constant:
+0:241              1 (const int)
+0:241            Constant:
+0:241              2 (const int)
+0:241        subgroupInclusiveOr ( global 3-component vector of int)
+0:241          vector swizzle ( temp 3-component vector of int)
+0:241            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:241              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241                Constant:
+0:241                  2 (const int)
+0:241              Constant:
+0:241                1 (const int)
+0:241            Sequence
+0:241              Constant:
+0:241                0 (const int)
+0:241              Constant:
+0:241                1 (const int)
+0:241              Constant:
+0:241                2 (const int)
+0:242      move second child to first child ( temp 4-component vector of int)
+0:242        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:242          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242            'invocation' ( temp uint)
+0:242          Constant:
+0:242            1 (const int)
+0:242        subgroupInclusiveOr ( global 4-component vector of int)
+0:242          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:242            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242              Constant:
+0:242                3 (const int)
+0:242            Constant:
+0:242              1 (const int)
+0:244      move second child to first child ( temp uint)
+0:244        direct index ( temp uint)
+0:244          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:244            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244              'invocation' ( temp uint)
+0:244            Constant:
+0:244              2 (const int)
+0:244          Constant:
+0:244            0 (const int)
+0:244        subgroupInclusiveOr ( global uint)
+0:244          direct index ( temp uint)
+0:244            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:244              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244                Constant:
+0:244                  0 (const int)
+0:244              Constant:
+0:244                2 (const int)
+0:244            Constant:
+0:244              0 (const int)
+0:245      move second child to first child ( temp 2-component vector of uint)
+0:245        vector swizzle ( temp 2-component vector of uint)
+0:245          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:245            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:245              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:245              'invocation' ( temp uint)
+0:245            Constant:
+0:245              2 (const int)
+0:245          Sequence
+0:245            Constant:
+0:245              0 (const int)
+0:245            Constant:
+0:245              1 (const int)
+0:245        subgroupInclusiveOr ( global 2-component vector of uint)
+0:245          vector swizzle ( temp 2-component vector of uint)
+0:245            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:245              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:245                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:245                Constant:
+0:245                  1 (const int)
+0:245              Constant:
+0:245                2 (const int)
+0:245            Sequence
+0:245              Constant:
+0:245                0 (const int)
+0:245              Constant:
+0:245                1 (const int)
+0:246      move second child to first child ( temp 3-component vector of uint)
+0:246        vector swizzle ( temp 3-component vector of uint)
+0:246          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:246            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246              'invocation' ( temp uint)
+0:246            Constant:
+0:246              2 (const int)
+0:246          Sequence
+0:246            Constant:
+0:246              0 (const int)
+0:246            Constant:
+0:246              1 (const int)
+0:246            Constant:
+0:246              2 (const int)
+0:246        subgroupInclusiveOr ( global 3-component vector of uint)
+0:246          vector swizzle ( temp 3-component vector of uint)
+0:246            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:246              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246                Constant:
+0:246                  2 (const int)
+0:246              Constant:
+0:246                2 (const int)
+0:246            Sequence
+0:246              Constant:
+0:246                0 (const int)
+0:246              Constant:
+0:246                1 (const int)
+0:246              Constant:
+0:246                2 (const int)
+0:247      move second child to first child ( temp 4-component vector of uint)
+0:247        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:247          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247            'invocation' ( temp uint)
+0:247          Constant:
+0:247            2 (const int)
+0:247        subgroupInclusiveOr ( global 4-component vector of uint)
+0:247          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:247            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247              Constant:
+0:247                3 (const int)
+0:247            Constant:
+0:247              2 (const int)
+0:249      move second child to first child ( temp int)
+0:249        direct index ( temp int)
+0:249          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:249            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249              'invocation' ( temp uint)
+0:249            Constant:
+0:249              1 (const int)
+0:249          Constant:
+0:249            0 (const int)
+0:249        Convert bool to int ( temp int)
+0:249          subgroupInclusiveOr ( global bool)
+0:249            Compare Less Than ( temp bool)
+0:249              direct index ( temp int)
+0:249                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:249                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249                    Constant:
+0:249                      0 (const int)
+0:249                  Constant:
+0:249                    1 (const int)
+0:249                Constant:
+0:249                  0 (const int)
+0:249              Constant:
+0:249                0 (const int)
+0:250      move second child to first child ( temp 2-component vector of int)
+0:250        vector swizzle ( temp 2-component vector of int)
+0:250          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:250            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:250              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:250              'invocation' ( temp uint)
+0:250            Constant:
+0:250              1 (const int)
+0:250          Sequence
+0:250            Constant:
+0:250              0 (const int)
+0:250            Constant:
+0:250              1 (const int)
+0:250        Convert bool to int ( temp 2-component vector of int)
+0:250          subgroupInclusiveOr ( global 2-component vector of bool)
+0:250            Compare Less Than ( global 2-component vector of bool)
+0:250              vector swizzle ( temp 2-component vector of int)
+0:250                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:250                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:250                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:250                    Constant:
+0:250                      1 (const int)
+0:250                  Constant:
+0:250                    1 (const int)
+0:250                Sequence
+0:250                  Constant:
+0:250                    0 (const int)
+0:250                  Constant:
+0:250                    1 (const int)
+0:250              Constant:
+0:250                0 (const int)
+0:250                0 (const int)
+0:251      move second child to first child ( temp 3-component vector of int)
+0:251        vector swizzle ( temp 3-component vector of int)
+0:251          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:251            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251              'invocation' ( temp uint)
+0:251            Constant:
+0:251              1 (const int)
+0:251          Sequence
+0:251            Constant:
+0:251              0 (const int)
+0:251            Constant:
+0:251              1 (const int)
+0:251            Constant:
+0:251              2 (const int)
+0:251        Convert bool to int ( temp 3-component vector of int)
+0:251          subgroupInclusiveOr ( global 3-component vector of bool)
+0:251            Compare Less Than ( global 3-component vector of bool)
+0:251              vector swizzle ( temp 3-component vector of int)
+0:251                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:251                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251                    Constant:
+0:251                      1 (const int)
+0:251                  Constant:
+0:251                    1 (const int)
+0:251                Sequence
+0:251                  Constant:
+0:251                    0 (const int)
+0:251                  Constant:
+0:251                    1 (const int)
+0:251                  Constant:
+0:251                    2 (const int)
+0:251              Constant:
+0:251                0 (const int)
+0:251                0 (const int)
+0:251                0 (const int)
+0:252      move second child to first child ( temp 4-component vector of int)
+0:252        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:252          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252            'invocation' ( temp uint)
+0:252          Constant:
+0:252            1 (const int)
+0:252        Convert bool to int ( temp 4-component vector of int)
+0:252          subgroupInclusiveOr ( global 4-component vector of bool)
+0:252            Compare Less Than ( global 4-component vector of bool)
+0:252              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:252                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252                  Constant:
+0:252                    1 (const int)
+0:252                Constant:
+0:252                  1 (const int)
+0:252              Constant:
+0:252                0 (const int)
+0:252                0 (const int)
+0:252                0 (const int)
+0:252                0 (const int)
+0:254      move second child to first child ( temp int)
+0:254        direct index ( temp int)
+0:254          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:254            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254              'invocation' ( temp uint)
+0:254            Constant:
+0:254              1 (const int)
+0:254          Constant:
+0:254            0 (const int)
+0:254        subgroupInclusiveXor ( global int)
+0:254          direct index ( temp int)
+0:254            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:254              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254                Constant:
+0:254                  0 (const int)
+0:254              Constant:
+0:254                1 (const int)
+0:254            Constant:
+0:254              0 (const int)
+0:255      move second child to first child ( temp 2-component vector of int)
+0:255        vector swizzle ( temp 2-component vector of int)
+0:255          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:255            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:255              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:255              'invocation' ( temp uint)
+0:255            Constant:
+0:255              1 (const int)
+0:255          Sequence
+0:255            Constant:
+0:255              0 (const int)
+0:255            Constant:
+0:255              1 (const int)
+0:255        subgroupInclusiveXor ( global 2-component vector of int)
+0:255          vector swizzle ( temp 2-component vector of int)
+0:255            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:255              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:255                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:255                Constant:
+0:255                  1 (const int)
+0:255              Constant:
+0:255                1 (const int)
+0:255            Sequence
+0:255              Constant:
+0:255                0 (const int)
+0:255              Constant:
+0:255                1 (const int)
+0:256      move second child to first child ( temp 3-component vector of int)
+0:256        vector swizzle ( temp 3-component vector of int)
+0:256          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:256            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256              'invocation' ( temp uint)
+0:256            Constant:
+0:256              1 (const int)
+0:256          Sequence
+0:256            Constant:
+0:256              0 (const int)
+0:256            Constant:
+0:256              1 (const int)
+0:256            Constant:
+0:256              2 (const int)
+0:256        subgroupInclusiveXor ( global 3-component vector of int)
+0:256          vector swizzle ( temp 3-component vector of int)
+0:256            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:256              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256                Constant:
+0:256                  2 (const int)
+0:256              Constant:
+0:256                1 (const int)
+0:256            Sequence
+0:256              Constant:
+0:256                0 (const int)
+0:256              Constant:
+0:256                1 (const int)
+0:256              Constant:
+0:256                2 (const int)
+0:257      move second child to first child ( temp 4-component vector of int)
+0:257        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:257          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257            'invocation' ( temp uint)
+0:257          Constant:
+0:257            1 (const int)
+0:257        subgroupInclusiveXor ( global 4-component vector of int)
+0:257          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:257            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257              Constant:
+0:257                3 (const int)
+0:257            Constant:
+0:257              1 (const int)
+0:259      move second child to first child ( temp uint)
+0:259        direct index ( temp uint)
+0:259          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:259            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259              'invocation' ( temp uint)
+0:259            Constant:
+0:259              2 (const int)
+0:259          Constant:
+0:259            0 (const int)
+0:259        subgroupInclusiveXor ( global uint)
+0:259          direct index ( temp uint)
+0:259            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:259              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259                Constant:
+0:259                  0 (const int)
+0:259              Constant:
+0:259                2 (const int)
+0:259            Constant:
+0:259              0 (const int)
+0:260      move second child to first child ( temp 2-component vector of uint)
+0:260        vector swizzle ( temp 2-component vector of uint)
+0:260          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:260            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:260              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:260              'invocation' ( temp uint)
+0:260            Constant:
+0:260              2 (const int)
+0:260          Sequence
+0:260            Constant:
+0:260              0 (const int)
+0:260            Constant:
+0:260              1 (const int)
+0:260        subgroupInclusiveXor ( global 2-component vector of uint)
+0:260          vector swizzle ( temp 2-component vector of uint)
+0:260            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:260              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:260                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:260                Constant:
+0:260                  1 (const int)
+0:260              Constant:
+0:260                2 (const int)
+0:260            Sequence
+0:260              Constant:
+0:260                0 (const int)
+0:260              Constant:
+0:260                1 (const int)
+0:261      move second child to first child ( temp 3-component vector of uint)
+0:261        vector swizzle ( temp 3-component vector of uint)
+0:261          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:261            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261              'invocation' ( temp uint)
+0:261            Constant:
+0:261              2 (const int)
+0:261          Sequence
+0:261            Constant:
+0:261              0 (const int)
+0:261            Constant:
+0:261              1 (const int)
+0:261            Constant:
+0:261              2 (const int)
+0:261        subgroupInclusiveXor ( global 3-component vector of uint)
+0:261          vector swizzle ( temp 3-component vector of uint)
+0:261            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:261              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261                Constant:
+0:261                  2 (const int)
+0:261              Constant:
+0:261                2 (const int)
+0:261            Sequence
+0:261              Constant:
+0:261                0 (const int)
+0:261              Constant:
+0:261                1 (const int)
+0:261              Constant:
+0:261                2 (const int)
+0:262      move second child to first child ( temp 4-component vector of uint)
+0:262        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:262          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262            'invocation' ( temp uint)
+0:262          Constant:
+0:262            2 (const int)
+0:262        subgroupInclusiveXor ( global 4-component vector of uint)
+0:262          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:262            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262              Constant:
+0:262                3 (const int)
+0:262            Constant:
+0:262              2 (const int)
+0:264      move second child to first child ( temp int)
+0:264        direct index ( temp int)
+0:264          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:264            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264              'invocation' ( temp uint)
+0:264            Constant:
+0:264              1 (const int)
+0:264          Constant:
+0:264            0 (const int)
+0:264        Convert bool to int ( temp int)
+0:264          subgroupInclusiveXor ( global bool)
+0:264            Compare Less Than ( temp bool)
+0:264              direct index ( temp int)
+0:264                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:264                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264                    Constant:
+0:264                      0 (const int)
+0:264                  Constant:
+0:264                    1 (const int)
+0:264                Constant:
+0:264                  0 (const int)
+0:264              Constant:
+0:264                0 (const int)
+0:265      move second child to first child ( temp 2-component vector of int)
+0:265        vector swizzle ( temp 2-component vector of int)
+0:265          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:265            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:265              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:265              'invocation' ( temp uint)
+0:265            Constant:
+0:265              1 (const int)
+0:265          Sequence
+0:265            Constant:
+0:265              0 (const int)
+0:265            Constant:
+0:265              1 (const int)
+0:265        Convert bool to int ( temp 2-component vector of int)
+0:265          subgroupInclusiveXor ( global 2-component vector of bool)
+0:265            Compare Less Than ( global 2-component vector of bool)
+0:265              vector swizzle ( temp 2-component vector of int)
+0:265                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:265                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:265                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:265                    Constant:
+0:265                      1 (const int)
+0:265                  Constant:
+0:265                    1 (const int)
+0:265                Sequence
+0:265                  Constant:
+0:265                    0 (const int)
+0:265                  Constant:
+0:265                    1 (const int)
+0:265              Constant:
+0:265                0 (const int)
+0:265                0 (const int)
+0:266      move second child to first child ( temp 3-component vector of int)
+0:266        vector swizzle ( temp 3-component vector of int)
+0:266          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:266            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266              'invocation' ( temp uint)
+0:266            Constant:
+0:266              1 (const int)
+0:266          Sequence
+0:266            Constant:
+0:266              0 (const int)
+0:266            Constant:
+0:266              1 (const int)
+0:266            Constant:
+0:266              2 (const int)
+0:266        Convert bool to int ( temp 3-component vector of int)
+0:266          subgroupInclusiveXor ( global 3-component vector of bool)
+0:266            Compare Less Than ( global 3-component vector of bool)
+0:266              vector swizzle ( temp 3-component vector of int)
+0:266                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:266                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266                    Constant:
+0:266                      1 (const int)
+0:266                  Constant:
+0:266                    1 (const int)
+0:266                Sequence
+0:266                  Constant:
+0:266                    0 (const int)
+0:266                  Constant:
+0:266                    1 (const int)
+0:266                  Constant:
+0:266                    2 (const int)
+0:266              Constant:
+0:266                0 (const int)
+0:266                0 (const int)
+0:266                0 (const int)
+0:267      move second child to first child ( temp 4-component vector of int)
+0:267        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:267          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267            'invocation' ( temp uint)
+0:267          Constant:
+0:267            1 (const int)
+0:267        Convert bool to int ( temp 4-component vector of int)
+0:267          subgroupInclusiveXor ( global 4-component vector of bool)
+0:267            Compare Less Than ( global 4-component vector of bool)
+0:267              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:267                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267                  Constant:
+0:267                    1 (const int)
+0:267                Constant:
+0:267                  1 (const int)
+0:267              Constant:
+0:267                0 (const int)
+0:267                0 (const int)
+0:267                0 (const int)
+0:267                0 (const int)
+0:269      move second child to first child ( temp float)
+0:269        direct index ( temp float)
+0:269          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:269            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269              'invocation' ( temp uint)
+0:269            Constant:
+0:269              0 (const int)
+0:269          Constant:
+0:269            0 (const int)
+0:269        subgroupExclusiveAdd ( global float)
+0:269          direct index ( temp float)
+0:269            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:269              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269                Constant:
+0:269                  0 (const int)
+0:269              Constant:
+0:269                0 (const int)
+0:269            Constant:
+0:269              0 (const int)
+0:270      move second child to first child ( temp 2-component vector of float)
+0:270        vector swizzle ( temp 2-component vector of float)
+0:270          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:270            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:270              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:270              'invocation' ( temp uint)
+0:270            Constant:
+0:270              0 (const int)
+0:270          Sequence
+0:270            Constant:
+0:270              0 (const int)
+0:270            Constant:
+0:270              1 (const int)
+0:270        subgroupExclusiveAdd ( global 2-component vector of float)
+0:270          vector swizzle ( temp 2-component vector of float)
+0:270            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:270              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:270                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:270                Constant:
+0:270                  1 (const int)
+0:270              Constant:
+0:270                0 (const int)
+0:270            Sequence
+0:270              Constant:
+0:270                0 (const int)
+0:270              Constant:
+0:270                1 (const int)
+0:271      move second child to first child ( temp 3-component vector of float)
+0:271        vector swizzle ( temp 3-component vector of float)
+0:271          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:271            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271              'invocation' ( temp uint)
+0:271            Constant:
+0:271              0 (const int)
+0:271          Sequence
+0:271            Constant:
+0:271              0 (const int)
+0:271            Constant:
+0:271              1 (const int)
+0:271            Constant:
+0:271              2 (const int)
+0:271        subgroupExclusiveAdd ( global 3-component vector of float)
+0:271          vector swizzle ( temp 3-component vector of float)
+0:271            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:271              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271                Constant:
+0:271                  2 (const int)
+0:271              Constant:
+0:271                0 (const int)
+0:271            Sequence
+0:271              Constant:
+0:271                0 (const int)
+0:271              Constant:
+0:271                1 (const int)
+0:271              Constant:
+0:271                2 (const int)
+0:272      move second child to first child ( temp 4-component vector of float)
+0:272        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:272          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272            'invocation' ( temp uint)
+0:272          Constant:
+0:272            0 (const int)
+0:272        subgroupExclusiveAdd ( global 4-component vector of float)
+0:272          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:272            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272              Constant:
+0:272                3 (const int)
+0:272            Constant:
+0:272              0 (const int)
+0:274      move second child to first child ( temp int)
+0:274        direct index ( temp int)
+0:274          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:274            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274              'invocation' ( temp uint)
+0:274            Constant:
+0:274              1 (const int)
+0:274          Constant:
+0:274            0 (const int)
+0:274        subgroupExclusiveAdd ( global int)
+0:274          direct index ( temp int)
+0:274            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:274              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274                Constant:
+0:274                  0 (const int)
+0:274              Constant:
+0:274                1 (const int)
+0:274            Constant:
+0:274              0 (const int)
+0:275      move second child to first child ( temp 2-component vector of int)
+0:275        vector swizzle ( temp 2-component vector of int)
+0:275          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:275            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:275              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:275              'invocation' ( temp uint)
+0:275            Constant:
+0:275              1 (const int)
+0:275          Sequence
+0:275            Constant:
+0:275              0 (const int)
+0:275            Constant:
+0:275              1 (const int)
+0:275        subgroupExclusiveAdd ( global 2-component vector of int)
+0:275          vector swizzle ( temp 2-component vector of int)
+0:275            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:275              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:275                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:275                Constant:
+0:275                  1 (const int)
+0:275              Constant:
+0:275                1 (const int)
+0:275            Sequence
+0:275              Constant:
+0:275                0 (const int)
+0:275              Constant:
+0:275                1 (const int)
+0:276      move second child to first child ( temp 3-component vector of int)
+0:276        vector swizzle ( temp 3-component vector of int)
+0:276          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:276            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276              'invocation' ( temp uint)
+0:276            Constant:
+0:276              1 (const int)
+0:276          Sequence
+0:276            Constant:
+0:276              0 (const int)
+0:276            Constant:
+0:276              1 (const int)
+0:276            Constant:
+0:276              2 (const int)
+0:276        subgroupExclusiveAdd ( global 3-component vector of int)
+0:276          vector swizzle ( temp 3-component vector of int)
+0:276            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:276              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276                Constant:
+0:276                  2 (const int)
+0:276              Constant:
+0:276                1 (const int)
+0:276            Sequence
+0:276              Constant:
+0:276                0 (const int)
+0:276              Constant:
+0:276                1 (const int)
+0:276              Constant:
+0:276                2 (const int)
+0:277      move second child to first child ( temp 4-component vector of int)
+0:277        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:277          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277            'invocation' ( temp uint)
+0:277          Constant:
+0:277            1 (const int)
+0:277        subgroupExclusiveAdd ( global 4-component vector of int)
+0:277          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:277            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277              Constant:
+0:277                3 (const int)
+0:277            Constant:
+0:277              1 (const int)
+0:279      move second child to first child ( temp uint)
+0:279        direct index ( temp uint)
+0:279          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:279            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279              'invocation' ( temp uint)
+0:279            Constant:
+0:279              2 (const int)
+0:279          Constant:
+0:279            0 (const int)
+0:279        subgroupExclusiveAdd ( global uint)
+0:279          direct index ( temp uint)
+0:279            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:279              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279                Constant:
+0:279                  0 (const int)
+0:279              Constant:
+0:279                2 (const int)
+0:279            Constant:
+0:279              0 (const int)
+0:280      move second child to first child ( temp 2-component vector of uint)
+0:280        vector swizzle ( temp 2-component vector of uint)
+0:280          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:280            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:280              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:280              'invocation' ( temp uint)
+0:280            Constant:
+0:280              2 (const int)
+0:280          Sequence
+0:280            Constant:
+0:280              0 (const int)
+0:280            Constant:
+0:280              1 (const int)
+0:280        subgroupExclusiveAdd ( global 2-component vector of uint)
+0:280          vector swizzle ( temp 2-component vector of uint)
+0:280            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:280              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:280                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:280                Constant:
+0:280                  1 (const int)
+0:280              Constant:
+0:280                2 (const int)
+0:280            Sequence
+0:280              Constant:
+0:280                0 (const int)
+0:280              Constant:
+0:280                1 (const int)
+0:281      move second child to first child ( temp 3-component vector of uint)
+0:281        vector swizzle ( temp 3-component vector of uint)
+0:281          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:281            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281              'invocation' ( temp uint)
+0:281            Constant:
+0:281              2 (const int)
+0:281          Sequence
+0:281            Constant:
+0:281              0 (const int)
+0:281            Constant:
+0:281              1 (const int)
+0:281            Constant:
+0:281              2 (const int)
+0:281        subgroupExclusiveAdd ( global 3-component vector of uint)
+0:281          vector swizzle ( temp 3-component vector of uint)
+0:281            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:281              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281                Constant:
+0:281                  2 (const int)
+0:281              Constant:
+0:281                2 (const int)
+0:281            Sequence
+0:281              Constant:
+0:281                0 (const int)
+0:281              Constant:
+0:281                1 (const int)
+0:281              Constant:
+0:281                2 (const int)
+0:282      move second child to first child ( temp 4-component vector of uint)
+0:282        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:282          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282            'invocation' ( temp uint)
+0:282          Constant:
+0:282            2 (const int)
+0:282        subgroupExclusiveAdd ( global 4-component vector of uint)
+0:282          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:282            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282              Constant:
+0:282                3 (const int)
+0:282            Constant:
+0:282              2 (const int)
+0:284      move second child to first child ( temp double)
+0:284        direct index ( temp double)
+0:284          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:284            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284              'invocation' ( temp uint)
+0:284            Constant:
+0:284              3 (const int)
+0:284          Constant:
+0:284            0 (const int)
+0:284        subgroupExclusiveAdd ( global double)
+0:284          direct index ( temp double)
+0:284            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:284              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284                Constant:
+0:284                  0 (const int)
+0:284              Constant:
+0:284                3 (const int)
+0:284            Constant:
+0:284              0 (const int)
+0:285      move second child to first child ( temp 2-component vector of double)
+0:285        vector swizzle ( temp 2-component vector of double)
+0:285          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:285            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:285              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:285              'invocation' ( temp uint)
+0:285            Constant:
+0:285              3 (const int)
+0:285          Sequence
+0:285            Constant:
+0:285              0 (const int)
+0:285            Constant:
+0:285              1 (const int)
+0:285        subgroupExclusiveAdd ( global 2-component vector of double)
+0:285          vector swizzle ( temp 2-component vector of double)
+0:285            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:285              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:285                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:285                Constant:
+0:285                  1 (const int)
+0:285              Constant:
+0:285                3 (const int)
+0:285            Sequence
+0:285              Constant:
+0:285                0 (const int)
+0:285              Constant:
+0:285                1 (const int)
+0:286      move second child to first child ( temp 3-component vector of double)
+0:286        vector swizzle ( temp 3-component vector of double)
+0:286          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:286            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286              'invocation' ( temp uint)
+0:286            Constant:
+0:286              3 (const int)
+0:286          Sequence
+0:286            Constant:
+0:286              0 (const int)
+0:286            Constant:
+0:286              1 (const int)
+0:286            Constant:
+0:286              2 (const int)
+0:286        subgroupExclusiveAdd ( global 3-component vector of double)
+0:286          vector swizzle ( temp 3-component vector of double)
+0:286            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:286              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286                Constant:
+0:286                  2 (const int)
+0:286              Constant:
+0:286                3 (const int)
+0:286            Sequence
+0:286              Constant:
+0:286                0 (const int)
+0:286              Constant:
+0:286                1 (const int)
+0:286              Constant:
+0:286                2 (const int)
+0:287      move second child to first child ( temp 4-component vector of double)
+0:287        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:287          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287            'invocation' ( temp uint)
+0:287          Constant:
+0:287            3 (const int)
+0:287        subgroupExclusiveAdd ( global 4-component vector of double)
+0:287          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:287            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287              Constant:
+0:287                3 (const int)
+0:287            Constant:
+0:287              3 (const int)
+0:289      move second child to first child ( temp float)
+0:289        direct index ( temp float)
+0:289          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:289            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289              'invocation' ( temp uint)
+0:289            Constant:
+0:289              0 (const int)
+0:289          Constant:
+0:289            0 (const int)
+0:289        subgroupExclusiveMul ( global float)
+0:289          direct index ( temp float)
+0:289            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:289              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289                Constant:
+0:289                  0 (const int)
+0:289              Constant:
+0:289                0 (const int)
+0:289            Constant:
+0:289              0 (const int)
+0:290      move second child to first child ( temp 2-component vector of float)
+0:290        vector swizzle ( temp 2-component vector of float)
+0:290          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:290            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:290              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:290              'invocation' ( temp uint)
+0:290            Constant:
+0:290              0 (const int)
+0:290          Sequence
+0:290            Constant:
+0:290              0 (const int)
+0:290            Constant:
+0:290              1 (const int)
+0:290        subgroupExclusiveMul ( global 2-component vector of float)
+0:290          vector swizzle ( temp 2-component vector of float)
+0:290            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:290              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:290                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:290                Constant:
+0:290                  1 (const int)
+0:290              Constant:
+0:290                0 (const int)
+0:290            Sequence
+0:290              Constant:
+0:290                0 (const int)
+0:290              Constant:
+0:290                1 (const int)
+0:291      move second child to first child ( temp 3-component vector of float)
+0:291        vector swizzle ( temp 3-component vector of float)
+0:291          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:291            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291              'invocation' ( temp uint)
+0:291            Constant:
+0:291              0 (const int)
+0:291          Sequence
+0:291            Constant:
+0:291              0 (const int)
+0:291            Constant:
+0:291              1 (const int)
+0:291            Constant:
+0:291              2 (const int)
+0:291        subgroupExclusiveMul ( global 3-component vector of float)
+0:291          vector swizzle ( temp 3-component vector of float)
+0:291            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:291              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291                Constant:
+0:291                  2 (const int)
+0:291              Constant:
+0:291                0 (const int)
+0:291            Sequence
+0:291              Constant:
+0:291                0 (const int)
+0:291              Constant:
+0:291                1 (const int)
+0:291              Constant:
+0:291                2 (const int)
+0:292      move second child to first child ( temp 4-component vector of float)
+0:292        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:292          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292            'invocation' ( temp uint)
+0:292          Constant:
+0:292            0 (const int)
+0:292        subgroupExclusiveMul ( global 4-component vector of float)
+0:292          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:292            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292              Constant:
+0:292                3 (const int)
+0:292            Constant:
+0:292              0 (const int)
+0:294      move second child to first child ( temp int)
+0:294        direct index ( temp int)
+0:294          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:294            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294              'invocation' ( temp uint)
+0:294            Constant:
+0:294              1 (const int)
+0:294          Constant:
+0:294            0 (const int)
+0:294        subgroupExclusiveMul ( global int)
+0:294          direct index ( temp int)
+0:294            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:294              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294                Constant:
+0:294                  0 (const int)
+0:294              Constant:
+0:294                1 (const int)
+0:294            Constant:
+0:294              0 (const int)
+0:295      move second child to first child ( temp 2-component vector of int)
+0:295        vector swizzle ( temp 2-component vector of int)
+0:295          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:295            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:295              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:295              'invocation' ( temp uint)
+0:295            Constant:
+0:295              1 (const int)
+0:295          Sequence
+0:295            Constant:
+0:295              0 (const int)
+0:295            Constant:
+0:295              1 (const int)
+0:295        subgroupExclusiveMul ( global 2-component vector of int)
+0:295          vector swizzle ( temp 2-component vector of int)
+0:295            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:295              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:295                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:295                Constant:
+0:295                  1 (const int)
+0:295              Constant:
+0:295                1 (const int)
+0:295            Sequence
+0:295              Constant:
+0:295                0 (const int)
+0:295              Constant:
+0:295                1 (const int)
+0:296      move second child to first child ( temp 3-component vector of int)
+0:296        vector swizzle ( temp 3-component vector of int)
+0:296          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:296            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296              'invocation' ( temp uint)
+0:296            Constant:
+0:296              1 (const int)
+0:296          Sequence
+0:296            Constant:
+0:296              0 (const int)
+0:296            Constant:
+0:296              1 (const int)
+0:296            Constant:
+0:296              2 (const int)
+0:296        subgroupExclusiveMul ( global 3-component vector of int)
+0:296          vector swizzle ( temp 3-component vector of int)
+0:296            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:296              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296                Constant:
+0:296                  2 (const int)
+0:296              Constant:
+0:296                1 (const int)
+0:296            Sequence
+0:296              Constant:
+0:296                0 (const int)
+0:296              Constant:
+0:296                1 (const int)
+0:296              Constant:
+0:296                2 (const int)
+0:297      move second child to first child ( temp 4-component vector of int)
+0:297        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:297          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297            'invocation' ( temp uint)
+0:297          Constant:
+0:297            1 (const int)
+0:297        subgroupExclusiveMul ( global 4-component vector of int)
+0:297          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:297            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297              Constant:
+0:297                3 (const int)
+0:297            Constant:
+0:297              1 (const int)
+0:299      move second child to first child ( temp uint)
+0:299        direct index ( temp uint)
+0:299          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:299            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299              'invocation' ( temp uint)
+0:299            Constant:
+0:299              2 (const int)
+0:299          Constant:
+0:299            0 (const int)
+0:299        subgroupExclusiveMul ( global uint)
+0:299          direct index ( temp uint)
+0:299            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:299              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299                Constant:
+0:299                  0 (const int)
+0:299              Constant:
+0:299                2 (const int)
+0:299            Constant:
+0:299              0 (const int)
+0:300      move second child to first child ( temp 2-component vector of uint)
+0:300        vector swizzle ( temp 2-component vector of uint)
+0:300          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:300            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:300              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:300              'invocation' ( temp uint)
+0:300            Constant:
+0:300              2 (const int)
+0:300          Sequence
+0:300            Constant:
+0:300              0 (const int)
+0:300            Constant:
+0:300              1 (const int)
+0:300        subgroupExclusiveMul ( global 2-component vector of uint)
+0:300          vector swizzle ( temp 2-component vector of uint)
+0:300            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:300              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:300                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:300                Constant:
+0:300                  1 (const int)
+0:300              Constant:
+0:300                2 (const int)
+0:300            Sequence
+0:300              Constant:
+0:300                0 (const int)
+0:300              Constant:
+0:300                1 (const int)
+0:301      move second child to first child ( temp 3-component vector of uint)
+0:301        vector swizzle ( temp 3-component vector of uint)
+0:301          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:301            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301              'invocation' ( temp uint)
+0:301            Constant:
+0:301              2 (const int)
+0:301          Sequence
+0:301            Constant:
+0:301              0 (const int)
+0:301            Constant:
+0:301              1 (const int)
+0:301            Constant:
+0:301              2 (const int)
+0:301        subgroupExclusiveMul ( global 3-component vector of uint)
+0:301          vector swizzle ( temp 3-component vector of uint)
+0:301            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:301              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301                Constant:
+0:301                  2 (const int)
+0:301              Constant:
+0:301                2 (const int)
+0:301            Sequence
+0:301              Constant:
+0:301                0 (const int)
+0:301              Constant:
+0:301                1 (const int)
+0:301              Constant:
+0:301                2 (const int)
+0:302      move second child to first child ( temp 4-component vector of uint)
+0:302        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:302          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302            'invocation' ( temp uint)
+0:302          Constant:
+0:302            2 (const int)
+0:302        subgroupExclusiveMul ( global 4-component vector of uint)
+0:302          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:302            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302              Constant:
+0:302                3 (const int)
+0:302            Constant:
+0:302              2 (const int)
+0:304      move second child to first child ( temp double)
+0:304        direct index ( temp double)
+0:304          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:304            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304              'invocation' ( temp uint)
+0:304            Constant:
+0:304              3 (const int)
+0:304          Constant:
+0:304            0 (const int)
+0:304        subgroupExclusiveMul ( global double)
+0:304          direct index ( temp double)
+0:304            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:304              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304                Constant:
+0:304                  0 (const int)
+0:304              Constant:
+0:304                3 (const int)
+0:304            Constant:
+0:304              0 (const int)
+0:305      move second child to first child ( temp 2-component vector of double)
+0:305        vector swizzle ( temp 2-component vector of double)
+0:305          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:305            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:305              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:305              'invocation' ( temp uint)
+0:305            Constant:
+0:305              3 (const int)
+0:305          Sequence
+0:305            Constant:
+0:305              0 (const int)
+0:305            Constant:
+0:305              1 (const int)
+0:305        subgroupExclusiveMul ( global 2-component vector of double)
+0:305          vector swizzle ( temp 2-component vector of double)
+0:305            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:305              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:305                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:305                Constant:
+0:305                  1 (const int)
+0:305              Constant:
+0:305                3 (const int)
+0:305            Sequence
+0:305              Constant:
+0:305                0 (const int)
+0:305              Constant:
+0:305                1 (const int)
+0:306      move second child to first child ( temp 3-component vector of double)
+0:306        vector swizzle ( temp 3-component vector of double)
+0:306          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:306            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306              'invocation' ( temp uint)
+0:306            Constant:
+0:306              3 (const int)
+0:306          Sequence
+0:306            Constant:
+0:306              0 (const int)
+0:306            Constant:
+0:306              1 (const int)
+0:306            Constant:
+0:306              2 (const int)
+0:306        subgroupExclusiveMul ( global 3-component vector of double)
+0:306          vector swizzle ( temp 3-component vector of double)
+0:306            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:306              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306                Constant:
+0:306                  2 (const int)
+0:306              Constant:
+0:306                3 (const int)
+0:306            Sequence
+0:306              Constant:
+0:306                0 (const int)
+0:306              Constant:
+0:306                1 (const int)
+0:306              Constant:
+0:306                2 (const int)
+0:307      move second child to first child ( temp 4-component vector of double)
+0:307        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:307          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307            'invocation' ( temp uint)
+0:307          Constant:
+0:307            3 (const int)
+0:307        subgroupExclusiveMul ( global 4-component vector of double)
+0:307          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:307            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307              Constant:
+0:307                3 (const int)
+0:307            Constant:
+0:307              3 (const int)
+0:309      move second child to first child ( temp float)
+0:309        direct index ( temp float)
+0:309          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:309            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309              'invocation' ( temp uint)
+0:309            Constant:
+0:309              0 (const int)
+0:309          Constant:
+0:309            0 (const int)
+0:309        subgroupExclusiveMin ( global float)
+0:309          direct index ( temp float)
+0:309            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:309              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309                Constant:
+0:309                  0 (const int)
+0:309              Constant:
+0:309                0 (const int)
+0:309            Constant:
+0:309              0 (const int)
+0:310      move second child to first child ( temp 2-component vector of float)
+0:310        vector swizzle ( temp 2-component vector of float)
+0:310          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:310            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:310              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:310              'invocation' ( temp uint)
+0:310            Constant:
+0:310              0 (const int)
+0:310          Sequence
+0:310            Constant:
+0:310              0 (const int)
+0:310            Constant:
+0:310              1 (const int)
+0:310        subgroupExclusiveMin ( global 2-component vector of float)
+0:310          vector swizzle ( temp 2-component vector of float)
+0:310            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:310              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:310                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:310                Constant:
+0:310                  1 (const int)
+0:310              Constant:
+0:310                0 (const int)
+0:310            Sequence
+0:310              Constant:
+0:310                0 (const int)
+0:310              Constant:
+0:310                1 (const int)
+0:311      move second child to first child ( temp 3-component vector of float)
+0:311        vector swizzle ( temp 3-component vector of float)
+0:311          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:311            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311              'invocation' ( temp uint)
+0:311            Constant:
+0:311              0 (const int)
+0:311          Sequence
+0:311            Constant:
+0:311              0 (const int)
+0:311            Constant:
+0:311              1 (const int)
+0:311            Constant:
+0:311              2 (const int)
+0:311        subgroupExclusiveMin ( global 3-component vector of float)
+0:311          vector swizzle ( temp 3-component vector of float)
+0:311            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:311              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311                Constant:
+0:311                  2 (const int)
+0:311              Constant:
+0:311                0 (const int)
+0:311            Sequence
+0:311              Constant:
+0:311                0 (const int)
+0:311              Constant:
+0:311                1 (const int)
+0:311              Constant:
+0:311                2 (const int)
+0:312      move second child to first child ( temp 4-component vector of float)
+0:312        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:312          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312            'invocation' ( temp uint)
+0:312          Constant:
+0:312            0 (const int)
+0:312        subgroupExclusiveMin ( global 4-component vector of float)
+0:312          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:312            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312              Constant:
+0:312                3 (const int)
+0:312            Constant:
+0:312              0 (const int)
+0:314      move second child to first child ( temp int)
+0:314        direct index ( temp int)
+0:314          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:314            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314              'invocation' ( temp uint)
+0:314            Constant:
+0:314              1 (const int)
+0:314          Constant:
+0:314            0 (const int)
+0:314        subgroupExclusiveMin ( global int)
+0:314          direct index ( temp int)
+0:314            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:314              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314                Constant:
+0:314                  0 (const int)
+0:314              Constant:
+0:314                1 (const int)
+0:314            Constant:
+0:314              0 (const int)
+0:315      move second child to first child ( temp 2-component vector of int)
+0:315        vector swizzle ( temp 2-component vector of int)
+0:315          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:315            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:315              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:315              'invocation' ( temp uint)
+0:315            Constant:
+0:315              1 (const int)
+0:315          Sequence
+0:315            Constant:
+0:315              0 (const int)
+0:315            Constant:
+0:315              1 (const int)
+0:315        subgroupExclusiveMin ( global 2-component vector of int)
+0:315          vector swizzle ( temp 2-component vector of int)
+0:315            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:315              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:315                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:315                Constant:
+0:315                  1 (const int)
+0:315              Constant:
+0:315                1 (const int)
+0:315            Sequence
+0:315              Constant:
+0:315                0 (const int)
+0:315              Constant:
+0:315                1 (const int)
+0:316      move second child to first child ( temp 3-component vector of int)
+0:316        vector swizzle ( temp 3-component vector of int)
+0:316          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:316            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316              'invocation' ( temp uint)
+0:316            Constant:
+0:316              1 (const int)
+0:316          Sequence
+0:316            Constant:
+0:316              0 (const int)
+0:316            Constant:
+0:316              1 (const int)
+0:316            Constant:
+0:316              2 (const int)
+0:316        subgroupExclusiveMin ( global 3-component vector of int)
+0:316          vector swizzle ( temp 3-component vector of int)
+0:316            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:316              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316                Constant:
+0:316                  2 (const int)
+0:316              Constant:
+0:316                1 (const int)
+0:316            Sequence
+0:316              Constant:
+0:316                0 (const int)
+0:316              Constant:
+0:316                1 (const int)
+0:316              Constant:
+0:316                2 (const int)
+0:317      move second child to first child ( temp 4-component vector of int)
+0:317        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:317          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317            'invocation' ( temp uint)
+0:317          Constant:
+0:317            1 (const int)
+0:317        subgroupExclusiveMin ( global 4-component vector of int)
+0:317          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:317            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317              Constant:
+0:317                3 (const int)
+0:317            Constant:
+0:317              1 (const int)
+0:319      move second child to first child ( temp uint)
+0:319        direct index ( temp uint)
+0:319          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:319            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319              'invocation' ( temp uint)
+0:319            Constant:
+0:319              2 (const int)
+0:319          Constant:
+0:319            0 (const int)
+0:319        subgroupExclusiveMin ( global uint)
+0:319          direct index ( temp uint)
+0:319            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:319              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319                Constant:
+0:319                  0 (const int)
+0:319              Constant:
+0:319                2 (const int)
+0:319            Constant:
+0:319              0 (const int)
+0:320      move second child to first child ( temp 2-component vector of uint)
+0:320        vector swizzle ( temp 2-component vector of uint)
+0:320          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:320            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:320              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:320              'invocation' ( temp uint)
+0:320            Constant:
+0:320              2 (const int)
+0:320          Sequence
+0:320            Constant:
+0:320              0 (const int)
+0:320            Constant:
+0:320              1 (const int)
+0:320        subgroupExclusiveMin ( global 2-component vector of uint)
+0:320          vector swizzle ( temp 2-component vector of uint)
+0:320            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:320              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:320                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:320                Constant:
+0:320                  1 (const int)
+0:320              Constant:
+0:320                2 (const int)
+0:320            Sequence
+0:320              Constant:
+0:320                0 (const int)
+0:320              Constant:
+0:320                1 (const int)
+0:321      move second child to first child ( temp 3-component vector of uint)
+0:321        vector swizzle ( temp 3-component vector of uint)
+0:321          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:321            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321              'invocation' ( temp uint)
+0:321            Constant:
+0:321              2 (const int)
+0:321          Sequence
+0:321            Constant:
+0:321              0 (const int)
+0:321            Constant:
+0:321              1 (const int)
+0:321            Constant:
+0:321              2 (const int)
+0:321        subgroupExclusiveMin ( global 3-component vector of uint)
+0:321          vector swizzle ( temp 3-component vector of uint)
+0:321            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:321              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321                Constant:
+0:321                  2 (const int)
+0:321              Constant:
+0:321                2 (const int)
+0:321            Sequence
+0:321              Constant:
+0:321                0 (const int)
+0:321              Constant:
+0:321                1 (const int)
+0:321              Constant:
+0:321                2 (const int)
+0:322      move second child to first child ( temp 4-component vector of uint)
+0:322        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:322          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322            'invocation' ( temp uint)
+0:322          Constant:
+0:322            2 (const int)
+0:322        subgroupExclusiveMin ( global 4-component vector of uint)
+0:322          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:322            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322              Constant:
+0:322                3 (const int)
+0:322            Constant:
+0:322              2 (const int)
+0:324      move second child to first child ( temp double)
+0:324        direct index ( temp double)
+0:324          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:324            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324              'invocation' ( temp uint)
+0:324            Constant:
+0:324              3 (const int)
+0:324          Constant:
+0:324            0 (const int)
+0:324        subgroupExclusiveMin ( global double)
+0:324          direct index ( temp double)
+0:324            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:324              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324                Constant:
+0:324                  0 (const int)
+0:324              Constant:
+0:324                3 (const int)
+0:324            Constant:
+0:324              0 (const int)
+0:325      move second child to first child ( temp 2-component vector of double)
+0:325        vector swizzle ( temp 2-component vector of double)
+0:325          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:325            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:325              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:325              'invocation' ( temp uint)
+0:325            Constant:
+0:325              3 (const int)
+0:325          Sequence
+0:325            Constant:
+0:325              0 (const int)
+0:325            Constant:
+0:325              1 (const int)
+0:325        subgroupExclusiveMin ( global 2-component vector of double)
+0:325          vector swizzle ( temp 2-component vector of double)
+0:325            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:325              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:325                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:325                Constant:
+0:325                  1 (const int)
+0:325              Constant:
+0:325                3 (const int)
+0:325            Sequence
+0:325              Constant:
+0:325                0 (const int)
+0:325              Constant:
+0:325                1 (const int)
+0:326      move second child to first child ( temp 3-component vector of double)
+0:326        vector swizzle ( temp 3-component vector of double)
+0:326          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:326            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326              'invocation' ( temp uint)
+0:326            Constant:
+0:326              3 (const int)
+0:326          Sequence
+0:326            Constant:
+0:326              0 (const int)
+0:326            Constant:
+0:326              1 (const int)
+0:326            Constant:
+0:326              2 (const int)
+0:326        subgroupExclusiveMin ( global 3-component vector of double)
+0:326          vector swizzle ( temp 3-component vector of double)
+0:326            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:326              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326                Constant:
+0:326                  2 (const int)
+0:326              Constant:
+0:326                3 (const int)
+0:326            Sequence
+0:326              Constant:
+0:326                0 (const int)
+0:326              Constant:
+0:326                1 (const int)
+0:326              Constant:
+0:326                2 (const int)
+0:327      move second child to first child ( temp 4-component vector of double)
+0:327        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:327          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327            'invocation' ( temp uint)
+0:327          Constant:
+0:327            3 (const int)
+0:327        subgroupExclusiveMin ( global 4-component vector of double)
+0:327          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:327            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327              Constant:
+0:327                3 (const int)
+0:327            Constant:
+0:327              3 (const int)
+0:329      move second child to first child ( temp float)
+0:329        direct index ( temp float)
+0:329          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:329            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329              'invocation' ( temp uint)
+0:329            Constant:
+0:329              0 (const int)
+0:329          Constant:
+0:329            0 (const int)
+0:329        subgroupExclusiveMax ( global float)
+0:329          direct index ( temp float)
+0:329            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:329              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329                Constant:
+0:329                  0 (const int)
+0:329              Constant:
+0:329                0 (const int)
+0:329            Constant:
+0:329              0 (const int)
+0:330      move second child to first child ( temp 2-component vector of float)
+0:330        vector swizzle ( temp 2-component vector of float)
+0:330          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:330            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:330              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:330              'invocation' ( temp uint)
+0:330            Constant:
+0:330              0 (const int)
+0:330          Sequence
+0:330            Constant:
+0:330              0 (const int)
+0:330            Constant:
+0:330              1 (const int)
+0:330        subgroupExclusiveMax ( global 2-component vector of float)
+0:330          vector swizzle ( temp 2-component vector of float)
+0:330            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:330              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:330                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:330                Constant:
+0:330                  1 (const int)
+0:330              Constant:
+0:330                0 (const int)
+0:330            Sequence
+0:330              Constant:
+0:330                0 (const int)
+0:330              Constant:
+0:330                1 (const int)
+0:331      move second child to first child ( temp 3-component vector of float)
+0:331        vector swizzle ( temp 3-component vector of float)
+0:331          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:331            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331              'invocation' ( temp uint)
+0:331            Constant:
+0:331              0 (const int)
+0:331          Sequence
+0:331            Constant:
+0:331              0 (const int)
+0:331            Constant:
+0:331              1 (const int)
+0:331            Constant:
+0:331              2 (const int)
+0:331        subgroupExclusiveMax ( global 3-component vector of float)
+0:331          vector swizzle ( temp 3-component vector of float)
+0:331            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:331              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331                Constant:
+0:331                  2 (const int)
+0:331              Constant:
+0:331                0 (const int)
+0:331            Sequence
+0:331              Constant:
+0:331                0 (const int)
+0:331              Constant:
+0:331                1 (const int)
+0:331              Constant:
+0:331                2 (const int)
+0:332      move second child to first child ( temp 4-component vector of float)
+0:332        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:332          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332            'invocation' ( temp uint)
+0:332          Constant:
+0:332            0 (const int)
+0:332        subgroupExclusiveMax ( global 4-component vector of float)
+0:332          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:332            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332              Constant:
+0:332                3 (const int)
+0:332            Constant:
+0:332              0 (const int)
+0:334      move second child to first child ( temp int)
+0:334        direct index ( temp int)
+0:334          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:334            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334              'invocation' ( temp uint)
+0:334            Constant:
+0:334              1 (const int)
+0:334          Constant:
+0:334            0 (const int)
+0:334        subgroupExclusiveMax ( global int)
+0:334          direct index ( temp int)
+0:334            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:334              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334                Constant:
+0:334                  0 (const int)
+0:334              Constant:
+0:334                1 (const int)
+0:334            Constant:
+0:334              0 (const int)
+0:335      move second child to first child ( temp 2-component vector of int)
+0:335        vector swizzle ( temp 2-component vector of int)
+0:335          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:335            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:335              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:335              'invocation' ( temp uint)
+0:335            Constant:
+0:335              1 (const int)
+0:335          Sequence
+0:335            Constant:
+0:335              0 (const int)
+0:335            Constant:
+0:335              1 (const int)
+0:335        subgroupExclusiveMax ( global 2-component vector of int)
+0:335          vector swizzle ( temp 2-component vector of int)
+0:335            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:335              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:335                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:335                Constant:
+0:335                  1 (const int)
+0:335              Constant:
+0:335                1 (const int)
+0:335            Sequence
+0:335              Constant:
+0:335                0 (const int)
+0:335              Constant:
+0:335                1 (const int)
+0:336      move second child to first child ( temp 3-component vector of int)
+0:336        vector swizzle ( temp 3-component vector of int)
+0:336          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:336            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336              'invocation' ( temp uint)
+0:336            Constant:
+0:336              1 (const int)
+0:336          Sequence
+0:336            Constant:
+0:336              0 (const int)
+0:336            Constant:
+0:336              1 (const int)
+0:336            Constant:
+0:336              2 (const int)
+0:336        subgroupExclusiveMax ( global 3-component vector of int)
+0:336          vector swizzle ( temp 3-component vector of int)
+0:336            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:336              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336                Constant:
+0:336                  2 (const int)
+0:336              Constant:
+0:336                1 (const int)
+0:336            Sequence
+0:336              Constant:
+0:336                0 (const int)
+0:336              Constant:
+0:336                1 (const int)
+0:336              Constant:
+0:336                2 (const int)
+0:337      move second child to first child ( temp 4-component vector of int)
+0:337        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:337          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337            'invocation' ( temp uint)
+0:337          Constant:
+0:337            1 (const int)
+0:337        subgroupExclusiveMax ( global 4-component vector of int)
+0:337          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:337            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337              Constant:
+0:337                3 (const int)
+0:337            Constant:
+0:337              1 (const int)
+0:339      move second child to first child ( temp uint)
+0:339        direct index ( temp uint)
+0:339          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:339            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339              'invocation' ( temp uint)
+0:339            Constant:
+0:339              2 (const int)
+0:339          Constant:
+0:339            0 (const int)
+0:339        subgroupExclusiveMax ( global uint)
+0:339          direct index ( temp uint)
+0:339            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:339              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339                Constant:
+0:339                  0 (const int)
+0:339              Constant:
+0:339                2 (const int)
+0:339            Constant:
+0:339              0 (const int)
+0:340      move second child to first child ( temp 2-component vector of uint)
+0:340        vector swizzle ( temp 2-component vector of uint)
+0:340          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:340            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:340              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:340              'invocation' ( temp uint)
+0:340            Constant:
+0:340              2 (const int)
+0:340          Sequence
+0:340            Constant:
+0:340              0 (const int)
+0:340            Constant:
+0:340              1 (const int)
+0:340        subgroupExclusiveMax ( global 2-component vector of uint)
+0:340          vector swizzle ( temp 2-component vector of uint)
+0:340            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:340              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:340                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:340                Constant:
+0:340                  1 (const int)
+0:340              Constant:
+0:340                2 (const int)
+0:340            Sequence
+0:340              Constant:
+0:340                0 (const int)
+0:340              Constant:
+0:340                1 (const int)
+0:341      move second child to first child ( temp 3-component vector of uint)
+0:341        vector swizzle ( temp 3-component vector of uint)
+0:341          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:341            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341              'invocation' ( temp uint)
+0:341            Constant:
+0:341              2 (const int)
+0:341          Sequence
+0:341            Constant:
+0:341              0 (const int)
+0:341            Constant:
+0:341              1 (const int)
+0:341            Constant:
+0:341              2 (const int)
+0:341        subgroupExclusiveMax ( global 3-component vector of uint)
+0:341          vector swizzle ( temp 3-component vector of uint)
+0:341            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:341              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341                Constant:
+0:341                  2 (const int)
+0:341              Constant:
+0:341                2 (const int)
+0:341            Sequence
+0:341              Constant:
+0:341                0 (const int)
+0:341              Constant:
+0:341                1 (const int)
+0:341              Constant:
+0:341                2 (const int)
+0:342      move second child to first child ( temp 4-component vector of uint)
+0:342        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:342          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342            'invocation' ( temp uint)
+0:342          Constant:
+0:342            2 (const int)
+0:342        subgroupExclusiveMax ( global 4-component vector of uint)
+0:342          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:342            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342              Constant:
+0:342                3 (const int)
+0:342            Constant:
+0:342              2 (const int)
+0:344      move second child to first child ( temp double)
+0:344        direct index ( temp double)
+0:344          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:344            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344              'invocation' ( temp uint)
+0:344            Constant:
+0:344              3 (const int)
+0:344          Constant:
+0:344            0 (const int)
+0:344        subgroupExclusiveMax ( global double)
+0:344          direct index ( temp double)
+0:344            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:344              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344                Constant:
+0:344                  0 (const int)
+0:344              Constant:
+0:344                3 (const int)
+0:344            Constant:
+0:344              0 (const int)
+0:345      move second child to first child ( temp 2-component vector of double)
+0:345        vector swizzle ( temp 2-component vector of double)
+0:345          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:345            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:345              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:345              'invocation' ( temp uint)
+0:345            Constant:
+0:345              3 (const int)
+0:345          Sequence
+0:345            Constant:
+0:345              0 (const int)
+0:345            Constant:
+0:345              1 (const int)
+0:345        subgroupExclusiveMax ( global 2-component vector of double)
+0:345          vector swizzle ( temp 2-component vector of double)
+0:345            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:345              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:345                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:345                Constant:
+0:345                  1 (const int)
+0:345              Constant:
+0:345                3 (const int)
+0:345            Sequence
+0:345              Constant:
+0:345                0 (const int)
+0:345              Constant:
+0:345                1 (const int)
+0:346      move second child to first child ( temp 3-component vector of double)
+0:346        vector swizzle ( temp 3-component vector of double)
+0:346          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:346            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346              'invocation' ( temp uint)
+0:346            Constant:
+0:346              3 (const int)
+0:346          Sequence
+0:346            Constant:
+0:346              0 (const int)
+0:346            Constant:
+0:346              1 (const int)
+0:346            Constant:
+0:346              2 (const int)
+0:346        subgroupExclusiveMax ( global 3-component vector of double)
+0:346          vector swizzle ( temp 3-component vector of double)
+0:346            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:346              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346                Constant:
+0:346                  2 (const int)
+0:346              Constant:
+0:346                3 (const int)
+0:346            Sequence
+0:346              Constant:
+0:346                0 (const int)
+0:346              Constant:
+0:346                1 (const int)
+0:346              Constant:
+0:346                2 (const int)
+0:347      move second child to first child ( temp 4-component vector of double)
+0:347        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:347          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347            'invocation' ( temp uint)
+0:347          Constant:
+0:347            3 (const int)
+0:347        subgroupExclusiveMax ( global 4-component vector of double)
+0:347          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:347            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347              Constant:
+0:347                3 (const int)
+0:347            Constant:
+0:347              3 (const int)
+0:349      move second child to first child ( temp int)
+0:349        direct index ( temp int)
+0:349          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:349            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349              'invocation' ( temp uint)
+0:349            Constant:
+0:349              1 (const int)
+0:349          Constant:
+0:349            0 (const int)
+0:349        subgroupExclusiveAnd ( global int)
+0:349          direct index ( temp int)
+0:349            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:349              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349                Constant:
+0:349                  0 (const int)
+0:349              Constant:
+0:349                1 (const int)
+0:349            Constant:
+0:349              0 (const int)
+0:350      move second child to first child ( temp 2-component vector of int)
+0:350        vector swizzle ( temp 2-component vector of int)
+0:350          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:350            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:350              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:350              'invocation' ( temp uint)
+0:350            Constant:
+0:350              1 (const int)
+0:350          Sequence
+0:350            Constant:
+0:350              0 (const int)
+0:350            Constant:
+0:350              1 (const int)
+0:350        subgroupExclusiveAnd ( global 2-component vector of int)
+0:350          vector swizzle ( temp 2-component vector of int)
+0:350            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:350              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:350                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:350                Constant:
+0:350                  1 (const int)
+0:350              Constant:
+0:350                1 (const int)
+0:350            Sequence
+0:350              Constant:
+0:350                0 (const int)
+0:350              Constant:
+0:350                1 (const int)
+0:351      move second child to first child ( temp 3-component vector of int)
+0:351        vector swizzle ( temp 3-component vector of int)
+0:351          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:351            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351              'invocation' ( temp uint)
+0:351            Constant:
+0:351              1 (const int)
+0:351          Sequence
+0:351            Constant:
+0:351              0 (const int)
+0:351            Constant:
+0:351              1 (const int)
+0:351            Constant:
+0:351              2 (const int)
+0:351        subgroupExclusiveAnd ( global 3-component vector of int)
+0:351          vector swizzle ( temp 3-component vector of int)
+0:351            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:351              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351                Constant:
+0:351                  2 (const int)
+0:351              Constant:
+0:351                1 (const int)
+0:351            Sequence
+0:351              Constant:
+0:351                0 (const int)
+0:351              Constant:
+0:351                1 (const int)
+0:351              Constant:
+0:351                2 (const int)
+0:352      move second child to first child ( temp 4-component vector of int)
+0:352        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:352          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352            'invocation' ( temp uint)
+0:352          Constant:
+0:352            1 (const int)
+0:352        subgroupExclusiveAnd ( global 4-component vector of int)
+0:352          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:352            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352              Constant:
+0:352                3 (const int)
+0:352            Constant:
+0:352              1 (const int)
+0:354      move second child to first child ( temp uint)
+0:354        direct index ( temp uint)
+0:354          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:354            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354              'invocation' ( temp uint)
+0:354            Constant:
+0:354              2 (const int)
+0:354          Constant:
+0:354            0 (const int)
+0:354        subgroupExclusiveAnd ( global uint)
+0:354          direct index ( temp uint)
+0:354            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:354              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354                Constant:
+0:354                  0 (const int)
+0:354              Constant:
+0:354                2 (const int)
+0:354            Constant:
+0:354              0 (const int)
+0:355      move second child to first child ( temp 2-component vector of uint)
+0:355        vector swizzle ( temp 2-component vector of uint)
+0:355          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:355            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:355              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:355              'invocation' ( temp uint)
+0:355            Constant:
+0:355              2 (const int)
+0:355          Sequence
+0:355            Constant:
+0:355              0 (const int)
+0:355            Constant:
+0:355              1 (const int)
+0:355        subgroupExclusiveAnd ( global 2-component vector of uint)
+0:355          vector swizzle ( temp 2-component vector of uint)
+0:355            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:355              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:355                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:355                Constant:
+0:355                  1 (const int)
+0:355              Constant:
+0:355                2 (const int)
+0:355            Sequence
+0:355              Constant:
+0:355                0 (const int)
+0:355              Constant:
+0:355                1 (const int)
+0:356      move second child to first child ( temp 3-component vector of uint)
+0:356        vector swizzle ( temp 3-component vector of uint)
+0:356          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:356            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356              'invocation' ( temp uint)
+0:356            Constant:
+0:356              2 (const int)
+0:356          Sequence
+0:356            Constant:
+0:356              0 (const int)
+0:356            Constant:
+0:356              1 (const int)
+0:356            Constant:
+0:356              2 (const int)
+0:356        subgroupExclusiveAnd ( global 3-component vector of uint)
+0:356          vector swizzle ( temp 3-component vector of uint)
+0:356            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:356              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356                Constant:
+0:356                  2 (const int)
+0:356              Constant:
+0:356                2 (const int)
+0:356            Sequence
+0:356              Constant:
+0:356                0 (const int)
+0:356              Constant:
+0:356                1 (const int)
+0:356              Constant:
+0:356                2 (const int)
+0:357      move second child to first child ( temp 4-component vector of uint)
+0:357        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:357          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357            'invocation' ( temp uint)
+0:357          Constant:
+0:357            2 (const int)
+0:357        subgroupExclusiveAnd ( global 4-component vector of uint)
+0:357          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:357            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357              Constant:
+0:357                3 (const int)
+0:357            Constant:
+0:357              2 (const int)
+0:359      move second child to first child ( temp int)
+0:359        direct index ( temp int)
+0:359          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:359            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359              'invocation' ( temp uint)
+0:359            Constant:
+0:359              1 (const int)
+0:359          Constant:
+0:359            0 (const int)
+0:359        Convert bool to int ( temp int)
+0:359          subgroupExclusiveAnd ( global bool)
+0:359            Compare Less Than ( temp bool)
+0:359              direct index ( temp int)
+0:359                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:359                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359                    Constant:
+0:359                      0 (const int)
+0:359                  Constant:
+0:359                    1 (const int)
+0:359                Constant:
+0:359                  0 (const int)
+0:359              Constant:
+0:359                0 (const int)
+0:360      move second child to first child ( temp 2-component vector of int)
+0:360        vector swizzle ( temp 2-component vector of int)
+0:360          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:360            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:360              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:360              'invocation' ( temp uint)
+0:360            Constant:
+0:360              1 (const int)
+0:360          Sequence
+0:360            Constant:
+0:360              0 (const int)
+0:360            Constant:
+0:360              1 (const int)
+0:360        Convert bool to int ( temp 2-component vector of int)
+0:360          subgroupExclusiveAnd ( global 2-component vector of bool)
+0:360            Compare Less Than ( global 2-component vector of bool)
+0:360              vector swizzle ( temp 2-component vector of int)
+0:360                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:360                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:360                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:360                    Constant:
+0:360                      1 (const int)
+0:360                  Constant:
+0:360                    1 (const int)
+0:360                Sequence
+0:360                  Constant:
+0:360                    0 (const int)
+0:360                  Constant:
+0:360                    1 (const int)
+0:360              Constant:
+0:360                0 (const int)
+0:360                0 (const int)
+0:361      move second child to first child ( temp 3-component vector of int)
+0:361        vector swizzle ( temp 3-component vector of int)
+0:361          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:361            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361              'invocation' ( temp uint)
+0:361            Constant:
+0:361              1 (const int)
+0:361          Sequence
+0:361            Constant:
+0:361              0 (const int)
+0:361            Constant:
+0:361              1 (const int)
+0:361            Constant:
+0:361              2 (const int)
+0:361        Convert bool to int ( temp 3-component vector of int)
+0:361          subgroupExclusiveAnd ( global 3-component vector of bool)
+0:361            Compare Less Than ( global 3-component vector of bool)
+0:361              vector swizzle ( temp 3-component vector of int)
+0:361                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:361                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361                    Constant:
+0:361                      1 (const int)
+0:361                  Constant:
+0:361                    1 (const int)
+0:361                Sequence
+0:361                  Constant:
+0:361                    0 (const int)
+0:361                  Constant:
+0:361                    1 (const int)
+0:361                  Constant:
+0:361                    2 (const int)
+0:361              Constant:
+0:361                0 (const int)
+0:361                0 (const int)
+0:361                0 (const int)
+0:362      move second child to first child ( temp 4-component vector of int)
+0:362        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:362          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362            'invocation' ( temp uint)
+0:362          Constant:
+0:362            1 (const int)
+0:362        Convert bool to int ( temp 4-component vector of int)
+0:362          subgroupExclusiveAnd ( global 4-component vector of bool)
+0:362            Compare Less Than ( global 4-component vector of bool)
+0:362              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:362                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362                  Constant:
+0:362                    1 (const int)
+0:362                Constant:
+0:362                  1 (const int)
+0:362              Constant:
+0:362                0 (const int)
+0:362                0 (const int)
+0:362                0 (const int)
+0:362                0 (const int)
+0:364      move second child to first child ( temp int)
+0:364        direct index ( temp int)
+0:364          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:364            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364              'invocation' ( temp uint)
+0:364            Constant:
+0:364              1 (const int)
+0:364          Constant:
+0:364            0 (const int)
+0:364        subgroupExclusiveOr ( global int)
+0:364          direct index ( temp int)
+0:364            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:364              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364                Constant:
+0:364                  0 (const int)
+0:364              Constant:
+0:364                1 (const int)
+0:364            Constant:
+0:364              0 (const int)
+0:365      move second child to first child ( temp 2-component vector of int)
+0:365        vector swizzle ( temp 2-component vector of int)
+0:365          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:365            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:365              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:365              'invocation' ( temp uint)
+0:365            Constant:
+0:365              1 (const int)
+0:365          Sequence
+0:365            Constant:
+0:365              0 (const int)
+0:365            Constant:
+0:365              1 (const int)
+0:365        subgroupExclusiveOr ( global 2-component vector of int)
+0:365          vector swizzle ( temp 2-component vector of int)
+0:365            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:365              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:365                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:365                Constant:
+0:365                  1 (const int)
+0:365              Constant:
+0:365                1 (const int)
+0:365            Sequence
+0:365              Constant:
+0:365                0 (const int)
+0:365              Constant:
+0:365                1 (const int)
+0:366      move second child to first child ( temp 3-component vector of int)
+0:366        vector swizzle ( temp 3-component vector of int)
+0:366          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:366            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366              'invocation' ( temp uint)
+0:366            Constant:
+0:366              1 (const int)
+0:366          Sequence
+0:366            Constant:
+0:366              0 (const int)
+0:366            Constant:
+0:366              1 (const int)
+0:366            Constant:
+0:366              2 (const int)
+0:366        subgroupExclusiveOr ( global 3-component vector of int)
+0:366          vector swizzle ( temp 3-component vector of int)
+0:366            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:366              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366                Constant:
+0:366                  2 (const int)
+0:366              Constant:
+0:366                1 (const int)
+0:366            Sequence
+0:366              Constant:
+0:366                0 (const int)
+0:366              Constant:
+0:366                1 (const int)
+0:366              Constant:
+0:366                2 (const int)
+0:367      move second child to first child ( temp 4-component vector of int)
+0:367        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:367          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367            'invocation' ( temp uint)
+0:367          Constant:
+0:367            1 (const int)
+0:367        subgroupExclusiveOr ( global 4-component vector of int)
+0:367          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:367            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367              Constant:
+0:367                3 (const int)
+0:367            Constant:
+0:367              1 (const int)
+0:369      move second child to first child ( temp uint)
+0:369        direct index ( temp uint)
+0:369          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:369            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369              'invocation' ( temp uint)
+0:369            Constant:
+0:369              2 (const int)
+0:369          Constant:
+0:369            0 (const int)
+0:369        subgroupExclusiveOr ( global uint)
+0:369          direct index ( temp uint)
+0:369            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:369              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369                Constant:
+0:369                  0 (const int)
+0:369              Constant:
+0:369                2 (const int)
+0:369            Constant:
+0:369              0 (const int)
+0:370      move second child to first child ( temp 2-component vector of uint)
+0:370        vector swizzle ( temp 2-component vector of uint)
+0:370          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:370            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:370              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:370              'invocation' ( temp uint)
+0:370            Constant:
+0:370              2 (const int)
+0:370          Sequence
+0:370            Constant:
+0:370              0 (const int)
+0:370            Constant:
+0:370              1 (const int)
+0:370        subgroupExclusiveOr ( global 2-component vector of uint)
+0:370          vector swizzle ( temp 2-component vector of uint)
+0:370            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:370              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:370                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:370                Constant:
+0:370                  1 (const int)
+0:370              Constant:
+0:370                2 (const int)
+0:370            Sequence
+0:370              Constant:
+0:370                0 (const int)
+0:370              Constant:
+0:370                1 (const int)
+0:371      move second child to first child ( temp 3-component vector of uint)
+0:371        vector swizzle ( temp 3-component vector of uint)
+0:371          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:371            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371              'invocation' ( temp uint)
+0:371            Constant:
+0:371              2 (const int)
+0:371          Sequence
+0:371            Constant:
+0:371              0 (const int)
+0:371            Constant:
+0:371              1 (const int)
+0:371            Constant:
+0:371              2 (const int)
+0:371        subgroupExclusiveOr ( global 3-component vector of uint)
+0:371          vector swizzle ( temp 3-component vector of uint)
+0:371            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:371              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371                Constant:
+0:371                  2 (const int)
+0:371              Constant:
+0:371                2 (const int)
+0:371            Sequence
+0:371              Constant:
+0:371                0 (const int)
+0:371              Constant:
+0:371                1 (const int)
+0:371              Constant:
+0:371                2 (const int)
+0:372      move second child to first child ( temp 4-component vector of uint)
+0:372        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:372          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372            'invocation' ( temp uint)
+0:372          Constant:
+0:372            2 (const int)
+0:372        subgroupExclusiveOr ( global 4-component vector of uint)
+0:372          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:372            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372              Constant:
+0:372                3 (const int)
+0:372            Constant:
+0:372              2 (const int)
+0:374      move second child to first child ( temp int)
+0:374        direct index ( temp int)
+0:374          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:374            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374              'invocation' ( temp uint)
+0:374            Constant:
+0:374              1 (const int)
+0:374          Constant:
+0:374            0 (const int)
+0:374        Convert bool to int ( temp int)
+0:374          subgroupExclusiveOr ( global bool)
+0:374            Compare Less Than ( temp bool)
+0:374              direct index ( temp int)
+0:374                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:374                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374                    Constant:
+0:374                      0 (const int)
+0:374                  Constant:
+0:374                    1 (const int)
+0:374                Constant:
+0:374                  0 (const int)
+0:374              Constant:
+0:374                0 (const int)
+0:375      move second child to first child ( temp 2-component vector of int)
+0:375        vector swizzle ( temp 2-component vector of int)
+0:375          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:375            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:375              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:375              'invocation' ( temp uint)
+0:375            Constant:
+0:375              1 (const int)
+0:375          Sequence
+0:375            Constant:
+0:375              0 (const int)
+0:375            Constant:
+0:375              1 (const int)
+0:375        Convert bool to int ( temp 2-component vector of int)
+0:375          subgroupExclusiveOr ( global 2-component vector of bool)
+0:375            Compare Less Than ( global 2-component vector of bool)
+0:375              vector swizzle ( temp 2-component vector of int)
+0:375                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:375                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:375                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:375                    Constant:
+0:375                      1 (const int)
+0:375                  Constant:
+0:375                    1 (const int)
+0:375                Sequence
+0:375                  Constant:
+0:375                    0 (const int)
+0:375                  Constant:
+0:375                    1 (const int)
+0:375              Constant:
+0:375                0 (const int)
+0:375                0 (const int)
+0:376      move second child to first child ( temp 3-component vector of int)
+0:376        vector swizzle ( temp 3-component vector of int)
+0:376          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:376            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376              'invocation' ( temp uint)
+0:376            Constant:
+0:376              1 (const int)
+0:376          Sequence
+0:376            Constant:
+0:376              0 (const int)
+0:376            Constant:
+0:376              1 (const int)
+0:376            Constant:
+0:376              2 (const int)
+0:376        Convert bool to int ( temp 3-component vector of int)
+0:376          subgroupExclusiveOr ( global 3-component vector of bool)
+0:376            Compare Less Than ( global 3-component vector of bool)
+0:376              vector swizzle ( temp 3-component vector of int)
+0:376                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:376                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376                    Constant:
+0:376                      1 (const int)
+0:376                  Constant:
+0:376                    1 (const int)
+0:376                Sequence
+0:376                  Constant:
+0:376                    0 (const int)
+0:376                  Constant:
+0:376                    1 (const int)
+0:376                  Constant:
+0:376                    2 (const int)
+0:376              Constant:
+0:376                0 (const int)
+0:376                0 (const int)
+0:376                0 (const int)
+0:377      move second child to first child ( temp 4-component vector of int)
+0:377        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:377          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377            'invocation' ( temp uint)
+0:377          Constant:
+0:377            1 (const int)
+0:377        Convert bool to int ( temp 4-component vector of int)
+0:377          subgroupExclusiveOr ( global 4-component vector of bool)
+0:377            Compare Less Than ( global 4-component vector of bool)
+0:377              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:377                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377                  Constant:
+0:377                    1 (const int)
+0:377                Constant:
+0:377                  1 (const int)
+0:377              Constant:
+0:377                0 (const int)
+0:377                0 (const int)
+0:377                0 (const int)
+0:377                0 (const int)
+0:379      move second child to first child ( temp int)
+0:379        direct index ( temp int)
+0:379          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:379            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379              'invocation' ( temp uint)
+0:379            Constant:
+0:379              1 (const int)
+0:379          Constant:
+0:379            0 (const int)
+0:379        subgroupExclusiveXor ( global int)
+0:379          direct index ( temp int)
+0:379            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:379              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379                Constant:
+0:379                  0 (const int)
+0:379              Constant:
+0:379                1 (const int)
+0:379            Constant:
+0:379              0 (const int)
+0:380      move second child to first child ( temp 2-component vector of int)
+0:380        vector swizzle ( temp 2-component vector of int)
+0:380          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:380            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:380              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:380              'invocation' ( temp uint)
+0:380            Constant:
+0:380              1 (const int)
+0:380          Sequence
+0:380            Constant:
+0:380              0 (const int)
+0:380            Constant:
+0:380              1 (const int)
+0:380        subgroupExclusiveXor ( global 2-component vector of int)
+0:380          vector swizzle ( temp 2-component vector of int)
+0:380            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:380              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:380                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:380                Constant:
+0:380                  1 (const int)
+0:380              Constant:
+0:380                1 (const int)
+0:380            Sequence
+0:380              Constant:
+0:380                0 (const int)
+0:380              Constant:
+0:380                1 (const int)
+0:381      move second child to first child ( temp 3-component vector of int)
+0:381        vector swizzle ( temp 3-component vector of int)
+0:381          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:381            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381              'invocation' ( temp uint)
+0:381            Constant:
+0:381              1 (const int)
+0:381          Sequence
+0:381            Constant:
+0:381              0 (const int)
+0:381            Constant:
+0:381              1 (const int)
+0:381            Constant:
+0:381              2 (const int)
+0:381        subgroupExclusiveXor ( global 3-component vector of int)
+0:381          vector swizzle ( temp 3-component vector of int)
+0:381            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:381              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381                Constant:
+0:381                  2 (const int)
+0:381              Constant:
+0:381                1 (const int)
+0:381            Sequence
+0:381              Constant:
+0:381                0 (const int)
+0:381              Constant:
+0:381                1 (const int)
+0:381              Constant:
+0:381                2 (const int)
+0:382      move second child to first child ( temp 4-component vector of int)
+0:382        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:382          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382            'invocation' ( temp uint)
+0:382          Constant:
+0:382            1 (const int)
+0:382        subgroupExclusiveXor ( global 4-component vector of int)
+0:382          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:382            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382              Constant:
+0:382                3 (const int)
+0:382            Constant:
+0:382              1 (const int)
+0:384      move second child to first child ( temp uint)
+0:384        direct index ( temp uint)
+0:384          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:384            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384              'invocation' ( temp uint)
+0:384            Constant:
+0:384              2 (const int)
+0:384          Constant:
+0:384            0 (const int)
+0:384        subgroupExclusiveXor ( global uint)
+0:384          direct index ( temp uint)
+0:384            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:384              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384                Constant:
+0:384                  0 (const int)
+0:384              Constant:
+0:384                2 (const int)
+0:384            Constant:
+0:384              0 (const int)
+0:385      move second child to first child ( temp 2-component vector of uint)
+0:385        vector swizzle ( temp 2-component vector of uint)
+0:385          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:385            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:385              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:385              'invocation' ( temp uint)
+0:385            Constant:
+0:385              2 (const int)
+0:385          Sequence
+0:385            Constant:
+0:385              0 (const int)
+0:385            Constant:
+0:385              1 (const int)
+0:385        subgroupExclusiveXor ( global 2-component vector of uint)
+0:385          vector swizzle ( temp 2-component vector of uint)
+0:385            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:385              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:385                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:385                Constant:
+0:385                  1 (const int)
+0:385              Constant:
+0:385                2 (const int)
+0:385            Sequence
+0:385              Constant:
+0:385                0 (const int)
+0:385              Constant:
+0:385                1 (const int)
+0:386      move second child to first child ( temp 3-component vector of uint)
+0:386        vector swizzle ( temp 3-component vector of uint)
+0:386          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:386            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386              'invocation' ( temp uint)
+0:386            Constant:
+0:386              2 (const int)
+0:386          Sequence
+0:386            Constant:
+0:386              0 (const int)
+0:386            Constant:
+0:386              1 (const int)
+0:386            Constant:
+0:386              2 (const int)
+0:386        subgroupExclusiveXor ( global 3-component vector of uint)
+0:386          vector swizzle ( temp 3-component vector of uint)
+0:386            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:386              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386                Constant:
+0:386                  2 (const int)
+0:386              Constant:
+0:386                2 (const int)
+0:386            Sequence
+0:386              Constant:
+0:386                0 (const int)
+0:386              Constant:
+0:386                1 (const int)
+0:386              Constant:
+0:386                2 (const int)
+0:387      move second child to first child ( temp 4-component vector of uint)
+0:387        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:387          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387            'invocation' ( temp uint)
+0:387          Constant:
+0:387            2 (const int)
+0:387        subgroupExclusiveXor ( global 4-component vector of uint)
+0:387          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:387            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387              Constant:
+0:387                3 (const int)
+0:387            Constant:
+0:387              2 (const int)
+0:389      move second child to first child ( temp int)
+0:389        direct index ( temp int)
+0:389          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:389            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389              'invocation' ( temp uint)
+0:389            Constant:
+0:389              1 (const int)
+0:389          Constant:
+0:389            0 (const int)
+0:389        Convert bool to int ( temp int)
+0:389          subgroupExclusiveXor ( global bool)
+0:389            Compare Less Than ( temp bool)
+0:389              direct index ( temp int)
+0:389                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:389                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389                    Constant:
+0:389                      0 (const int)
+0:389                  Constant:
+0:389                    1 (const int)
+0:389                Constant:
+0:389                  0 (const int)
+0:389              Constant:
+0:389                0 (const int)
+0:390      move second child to first child ( temp 2-component vector of int)
+0:390        vector swizzle ( temp 2-component vector of int)
+0:390          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:390            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:390              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:390              'invocation' ( temp uint)
+0:390            Constant:
+0:390              1 (const int)
+0:390          Sequence
+0:390            Constant:
+0:390              0 (const int)
+0:390            Constant:
+0:390              1 (const int)
+0:390        Convert bool to int ( temp 2-component vector of int)
+0:390          subgroupExclusiveXor ( global 2-component vector of bool)
+0:390            Compare Less Than ( global 2-component vector of bool)
+0:390              vector swizzle ( temp 2-component vector of int)
+0:390                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:390                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:390                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:390                    Constant:
+0:390                      1 (const int)
+0:390                  Constant:
+0:390                    1 (const int)
+0:390                Sequence
+0:390                  Constant:
+0:390                    0 (const int)
+0:390                  Constant:
+0:390                    1 (const int)
+0:390              Constant:
+0:390                0 (const int)
+0:390                0 (const int)
+0:391      move second child to first child ( temp 3-component vector of int)
+0:391        vector swizzle ( temp 3-component vector of int)
+0:391          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:391            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391              'invocation' ( temp uint)
+0:391            Constant:
+0:391              1 (const int)
+0:391          Sequence
+0:391            Constant:
+0:391              0 (const int)
+0:391            Constant:
+0:391              1 (const int)
+0:391            Constant:
+0:391              2 (const int)
+0:391        Convert bool to int ( temp 3-component vector of int)
+0:391          subgroupExclusiveXor ( global 3-component vector of bool)
+0:391            Compare Less Than ( global 3-component vector of bool)
+0:391              vector swizzle ( temp 3-component vector of int)
+0:391                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:391                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391                    Constant:
+0:391                      1 (const int)
+0:391                  Constant:
+0:391                    1 (const int)
+0:391                Sequence
+0:391                  Constant:
+0:391                    0 (const int)
+0:391                  Constant:
+0:391                    1 (const int)
+0:391                  Constant:
+0:391                    2 (const int)
+0:391              Constant:
+0:391                0 (const int)
+0:391                0 (const int)
+0:391                0 (const int)
+0:392      move second child to first child ( temp 4-component vector of int)
+0:392        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:392          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392            'invocation' ( temp uint)
+0:392          Constant:
+0:392            1 (const int)
+0:392        Convert bool to int ( temp 4-component vector of int)
+0:392          subgroupExclusiveXor ( global 4-component vector of bool)
+0:392            Compare Less Than ( global 4-component vector of bool)
+0:392              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:392                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392                  Constant:
+0:392                    1 (const int)
+0:392                Constant:
+0:392                  1 (const int)
+0:392              Constant:
+0:392                0 (const int)
+0:392                0 (const int)
+0:392                0 (const int)
+0:392                0 (const int)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 1, 1)
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp uint)
+0:17          'invocation' ( temp uint)
+0:17          mod ( temp uint)
+0:17            add ( temp uint)
+0:17              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      move second child to first child ( temp float)
+0:19        direct index ( temp float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'invocation' ( temp uint)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Constant:
+0:19            0 (const int)
+0:19        subgroupAdd ( global float)
+0:19          direct index ( temp float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                Constant:
+0:19                  0 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:20      move second child to first child ( temp 2-component vector of float)
+0:20        vector swizzle ( temp 2-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'invocation' ( temp uint)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20        subgroupAdd ( global 2-component vector of float)
+0:20          vector swizzle ( temp 2-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                Constant:
+0:20                  1 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:21      move second child to first child ( temp 3-component vector of float)
+0:21        vector swizzle ( temp 3-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'invocation' ( temp uint)
+0:21            Constant:
+0:21              0 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21            Constant:
+0:21              2 (const int)
+0:21        subgroupAdd ( global 3-component vector of float)
+0:21          vector swizzle ( temp 3-component vector of float)
+0:21            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                Constant:
+0:21                  2 (const int)
+0:21              Constant:
+0:21                0 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21              Constant:
+0:21                2 (const int)
+0:22      move second child to first child ( temp 4-component vector of float)
+0:22        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'invocation' ( temp uint)
+0:22          Constant:
+0:22            0 (const int)
+0:22        subgroupAdd ( global 4-component vector of float)
+0:22          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              Constant:
+0:22                3 (const int)
+0:22            Constant:
+0:22              0 (const int)
+0:24      move second child to first child ( temp int)
+0:24        direct index ( temp int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'invocation' ( temp uint)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:24        subgroupAdd ( global int)
+0:24          direct index ( temp int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                Constant:
+0:24                  0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:25      move second child to first child ( temp 2-component vector of int)
+0:25        vector swizzle ( temp 2-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'invocation' ( temp uint)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25        subgroupAdd ( global 2-component vector of int)
+0:25          vector swizzle ( temp 2-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                Constant:
+0:25                  1 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:26      move second child to first child ( temp 3-component vector of int)
+0:26        vector swizzle ( temp 3-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'invocation' ( temp uint)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26        subgroupAdd ( global 3-component vector of int)
+0:26          vector swizzle ( temp 3-component vector of int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                Constant:
+0:26                  2 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:27      move second child to first child ( temp 4-component vector of int)
+0:27        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'invocation' ( temp uint)
+0:27          Constant:
+0:27            1 (const int)
+0:27        subgroupAdd ( global 4-component vector of int)
+0:27          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              Constant:
+0:27                3 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:29      move second child to first child ( temp uint)
+0:29        direct index ( temp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'invocation' ( temp uint)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            0 (const int)
+0:29        subgroupAdd ( global uint)
+0:29          direct index ( temp uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                Constant:
+0:29                  0 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Constant:
+0:29              0 (const int)
+0:30      move second child to first child ( temp 2-component vector of uint)
+0:30        vector swizzle ( temp 2-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'invocation' ( temp uint)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30        subgroupAdd ( global 2-component vector of uint)
+0:30          vector swizzle ( temp 2-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                Constant:
+0:30                  1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:31      move second child to first child ( temp 3-component vector of uint)
+0:31        vector swizzle ( temp 3-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'invocation' ( temp uint)
+0:31            Constant:
+0:31              2 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31        subgroupAdd ( global 3-component vector of uint)
+0:31          vector swizzle ( temp 3-component vector of uint)
+0:31            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                Constant:
+0:31                  2 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:32      move second child to first child ( temp 4-component vector of uint)
+0:32        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'invocation' ( temp uint)
+0:32          Constant:
+0:32            2 (const int)
+0:32        subgroupAdd ( global 4-component vector of uint)
+0:32          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              Constant:
+0:32                3 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:34      move second child to first child ( temp double)
+0:34        direct index ( temp double)
+0:34          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'invocation' ( temp uint)
+0:34            Constant:
+0:34              3 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupAdd ( global double)
+0:34          direct index ( temp double)
+0:34            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                3 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:35      move second child to first child ( temp 2-component vector of double)
+0:35        vector swizzle ( temp 2-component vector of double)
+0:35          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'invocation' ( temp uint)
+0:35            Constant:
+0:35              3 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35        subgroupAdd ( global 2-component vector of double)
+0:35          vector swizzle ( temp 2-component vector of double)
+0:35            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                Constant:
+0:35                  1 (const int)
+0:35              Constant:
+0:35                3 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:36      move second child to first child ( temp 3-component vector of double)
+0:36        vector swizzle ( temp 3-component vector of double)
+0:36          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'invocation' ( temp uint)
+0:36            Constant:
+0:36              3 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36            Constant:
+0:36              2 (const int)
+0:36        subgroupAdd ( global 3-component vector of double)
+0:36          vector swizzle ( temp 3-component vector of double)
+0:36            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                Constant:
+0:36                  2 (const int)
+0:36              Constant:
+0:36                3 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:36              Constant:
+0:36                2 (const int)
+0:37      move second child to first child ( temp 4-component vector of double)
+0:37        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'invocation' ( temp uint)
+0:37          Constant:
+0:37            3 (const int)
+0:37        subgroupAdd ( global 4-component vector of double)
+0:37          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              Constant:
+0:37                3 (const int)
+0:37            Constant:
+0:37              3 (const int)
+0:39      move second child to first child ( temp float)
+0:39        direct index ( temp float)
+0:39          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:39            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'invocation' ( temp uint)
+0:39            Constant:
+0:39              0 (const int)
+0:39          Constant:
+0:39            0 (const int)
+0:39        subgroupMul ( global float)
+0:39          direct index ( temp float)
+0:39            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:39              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                Constant:
+0:39                  0 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:40      move second child to first child ( temp 2-component vector of float)
+0:40        vector swizzle ( temp 2-component vector of float)
+0:40          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:40            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'invocation' ( temp uint)
+0:40            Constant:
+0:40              0 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40        subgroupMul ( global 2-component vector of float)
+0:40          vector swizzle ( temp 2-component vector of float)
+0:40            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                Constant:
+0:40                  1 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40            Sequence
+0:40              Constant:
+0:40                0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:41      move second child to first child ( temp 3-component vector of float)
+0:41        vector swizzle ( temp 3-component vector of float)
+0:41          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:41            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'invocation' ( temp uint)
+0:41            Constant:
+0:41              0 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41            Constant:
+0:41              2 (const int)
+0:41        subgroupMul ( global 3-component vector of float)
+0:41          vector swizzle ( temp 3-component vector of float)
+0:41            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:41              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                Constant:
+0:41                  2 (const int)
+0:41              Constant:
+0:41                0 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41              Constant:
+0:41                2 (const int)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:42          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'invocation' ( temp uint)
+0:42          Constant:
+0:42            0 (const int)
+0:42        subgroupMul ( global 4-component vector of float)
+0:42          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:42            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42              Constant:
+0:42                3 (const int)
+0:42            Constant:
+0:42              0 (const int)
+0:44      move second child to first child ( temp int)
+0:44        direct index ( temp int)
+0:44          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'invocation' ( temp uint)
+0:44            Constant:
+0:44              1 (const int)
+0:44          Constant:
+0:44            0 (const int)
+0:44        subgroupMul ( global int)
+0:44          direct index ( temp int)
+0:44            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                Constant:
+0:44                  0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44            Constant:
+0:44              0 (const int)
+0:45      move second child to first child ( temp 2-component vector of int)
+0:45        vector swizzle ( temp 2-component vector of int)
+0:45          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'invocation' ( temp uint)
+0:45            Constant:
+0:45              1 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45        subgroupMul ( global 2-component vector of int)
+0:45          vector swizzle ( temp 2-component vector of int)
+0:45            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                Constant:
+0:45                  1 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:46      move second child to first child ( temp 3-component vector of int)
+0:46        vector swizzle ( temp 3-component vector of int)
+0:46          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'invocation' ( temp uint)
+0:46            Constant:
+0:46              1 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46        subgroupMul ( global 3-component vector of int)
+0:46          vector swizzle ( temp 3-component vector of int)
+0:46            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                Constant:
+0:46                  2 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:47      move second child to first child ( temp 4-component vector of int)
+0:47        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'invocation' ( temp uint)
+0:47          Constant:
+0:47            1 (const int)
+0:47        subgroupMul ( global 4-component vector of int)
+0:47          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              Constant:
+0:47                3 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:49      move second child to first child ( temp uint)
+0:49        direct index ( temp uint)
+0:49          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:49            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'invocation' ( temp uint)
+0:49            Constant:
+0:49              2 (const int)
+0:49          Constant:
+0:49            0 (const int)
+0:49        subgroupMul ( global uint)
+0:49          direct index ( temp uint)
+0:49            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                Constant:
+0:49                  0 (const int)
+0:49              Constant:
+0:49                2 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:50      move second child to first child ( temp 2-component vector of uint)
+0:50        vector swizzle ( temp 2-component vector of uint)
+0:50          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:50            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'invocation' ( temp uint)
+0:50            Constant:
+0:50              2 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50        subgroupMul ( global 2-component vector of uint)
+0:50          vector swizzle ( temp 2-component vector of uint)
+0:50            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                Constant:
+0:50                  1 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:51      move second child to first child ( temp 3-component vector of uint)
+0:51        vector swizzle ( temp 3-component vector of uint)
+0:51          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:51            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'invocation' ( temp uint)
+0:51            Constant:
+0:51              2 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:51        subgroupMul ( global 3-component vector of uint)
+0:51          vector swizzle ( temp 3-component vector of uint)
+0:51            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                Constant:
+0:51                  2 (const int)
+0:51              Constant:
+0:51                2 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51              Constant:
+0:51                2 (const int)
+0:52      move second child to first child ( temp 4-component vector of uint)
+0:52        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:52          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'invocation' ( temp uint)
+0:52          Constant:
+0:52            2 (const int)
+0:52        subgroupMul ( global 4-component vector of uint)
+0:52          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:52            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              Constant:
+0:52                3 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:54      move second child to first child ( temp double)
+0:54        direct index ( temp double)
+0:54          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:54            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'invocation' ( temp uint)
+0:54            Constant:
+0:54              3 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupMul ( global double)
+0:54          direct index ( temp double)
+0:54            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                Constant:
+0:54                  0 (const int)
+0:54              Constant:
+0:54                3 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:55      move second child to first child ( temp 2-component vector of double)
+0:55        vector swizzle ( temp 2-component vector of double)
+0:55          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:55            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'invocation' ( temp uint)
+0:55            Constant:
+0:55              3 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55        subgroupMul ( global 2-component vector of double)
+0:55          vector swizzle ( temp 2-component vector of double)
+0:55            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                Constant:
+0:55                  1 (const int)
+0:55              Constant:
+0:55                3 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:56      move second child to first child ( temp 3-component vector of double)
+0:56        vector swizzle ( temp 3-component vector of double)
+0:56          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:56            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'invocation' ( temp uint)
+0:56            Constant:
+0:56              3 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56            Constant:
+0:56              2 (const int)
+0:56        subgroupMul ( global 3-component vector of double)
+0:56          vector swizzle ( temp 3-component vector of double)
+0:56            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:56              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                Constant:
+0:56                  2 (const int)
+0:56              Constant:
+0:56                3 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:57      move second child to first child ( temp 4-component vector of double)
+0:57        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:57          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'invocation' ( temp uint)
+0:57          Constant:
+0:57            3 (const int)
+0:57        subgroupMul ( global 4-component vector of double)
+0:57          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:57            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              Constant:
+0:57                3 (const int)
+0:57            Constant:
+0:57              3 (const int)
+0:59      move second child to first child ( temp float)
+0:59        direct index ( temp float)
+0:59          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:59            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'invocation' ( temp uint)
+0:59            Constant:
+0:59              0 (const int)
+0:59          Constant:
+0:59            0 (const int)
+0:59        subgroupMin ( global float)
+0:59          direct index ( temp float)
+0:59            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                Constant:
+0:59                  0 (const int)
+0:59              Constant:
+0:59                0 (const int)
+0:59            Constant:
+0:59              0 (const int)
+0:60      move second child to first child ( temp 2-component vector of float)
+0:60        vector swizzle ( temp 2-component vector of float)
+0:60          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:60            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'invocation' ( temp uint)
+0:60            Constant:
+0:60              0 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60        subgroupMin ( global 2-component vector of float)
+0:60          vector swizzle ( temp 2-component vector of float)
+0:60            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                Constant:
+0:60                  1 (const int)
+0:60              Constant:
+0:60                0 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:61      move second child to first child ( temp 3-component vector of float)
+0:61        vector swizzle ( temp 3-component vector of float)
+0:61          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'invocation' ( temp uint)
+0:61            Constant:
+0:61              0 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61            Constant:
+0:61              2 (const int)
+0:61        subgroupMin ( global 3-component vector of float)
+0:61          vector swizzle ( temp 3-component vector of float)
+0:61            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                Constant:
+0:61                  2 (const int)
+0:61              Constant:
+0:61                0 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61              Constant:
+0:61                2 (const int)
+0:62      move second child to first child ( temp 4-component vector of float)
+0:62        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'invocation' ( temp uint)
+0:62          Constant:
+0:62            0 (const int)
+0:62        subgroupMin ( global 4-component vector of float)
+0:62          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              Constant:
+0:62                3 (const int)
+0:62            Constant:
+0:62              0 (const int)
+0:64      move second child to first child ( temp int)
+0:64        direct index ( temp int)
+0:64          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'invocation' ( temp uint)
+0:64            Constant:
+0:64              1 (const int)
+0:64          Constant:
+0:64            0 (const int)
+0:64        subgroupMin ( global int)
+0:64          direct index ( temp int)
+0:64            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                Constant:
+0:64                  0 (const int)
+0:64              Constant:
+0:64                1 (const int)
+0:64            Constant:
+0:64              0 (const int)
+0:65      move second child to first child ( temp 2-component vector of int)
+0:65        vector swizzle ( temp 2-component vector of int)
+0:65          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'invocation' ( temp uint)
+0:65            Constant:
+0:65              1 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65        subgroupMin ( global 2-component vector of int)
+0:65          vector swizzle ( temp 2-component vector of int)
+0:65            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                Constant:
+0:65                  1 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:65            Sequence
+0:65              Constant:
+0:65                0 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:66      move second child to first child ( temp 3-component vector of int)
+0:66        vector swizzle ( temp 3-component vector of int)
+0:66          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'invocation' ( temp uint)
+0:66            Constant:
+0:66              1 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66        subgroupMin ( global 3-component vector of int)
+0:66          vector swizzle ( temp 3-component vector of int)
+0:66            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                Constant:
+0:66                  2 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:66            Sequence
+0:66              Constant:
+0:66                0 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:66              Constant:
+0:66                2 (const int)
+0:67      move second child to first child ( temp 4-component vector of int)
+0:67        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'invocation' ( temp uint)
+0:67          Constant:
+0:67            1 (const int)
+0:67        subgroupMin ( global 4-component vector of int)
+0:67          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67              Constant:
+0:67                3 (const int)
+0:67            Constant:
+0:67              1 (const int)
+0:69      move second child to first child ( temp uint)
+0:69        direct index ( temp uint)
+0:69          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:69            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'invocation' ( temp uint)
+0:69            Constant:
+0:69              2 (const int)
+0:69          Constant:
+0:69            0 (const int)
+0:69        subgroupMin ( global uint)
+0:69          direct index ( temp uint)
+0:69            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:69              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                Constant:
+0:69                  0 (const int)
+0:69              Constant:
+0:69                2 (const int)
+0:69            Constant:
+0:69              0 (const int)
+0:70      move second child to first child ( temp 2-component vector of uint)
+0:70        vector swizzle ( temp 2-component vector of uint)
+0:70          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:70            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70              'invocation' ( temp uint)
+0:70            Constant:
+0:70              2 (const int)
+0:70          Sequence
+0:70            Constant:
+0:70              0 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70        subgroupMin ( global 2-component vector of uint)
+0:70          vector swizzle ( temp 2-component vector of uint)
+0:70            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:70              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70                Constant:
+0:70                  1 (const int)
+0:70              Constant:
+0:70                2 (const int)
+0:70            Sequence
+0:70              Constant:
+0:70                0 (const int)
+0:70              Constant:
+0:70                1 (const int)
+0:71      move second child to first child ( temp 3-component vector of uint)
+0:71        vector swizzle ( temp 3-component vector of uint)
+0:71          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'invocation' ( temp uint)
+0:71            Constant:
+0:71              2 (const int)
+0:71          Sequence
+0:71            Constant:
+0:71              0 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71            Constant:
+0:71              2 (const int)
+0:71        subgroupMin ( global 3-component vector of uint)
+0:71          vector swizzle ( temp 3-component vector of uint)
+0:71            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                Constant:
+0:71                  2 (const int)
+0:71              Constant:
+0:71                2 (const int)
+0:71            Sequence
+0:71              Constant:
+0:71                0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:71              Constant:
+0:71                2 (const int)
+0:72      move second child to first child ( temp 4-component vector of uint)
+0:72        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72            'invocation' ( temp uint)
+0:72          Constant:
+0:72            2 (const int)
+0:72        subgroupMin ( global 4-component vector of uint)
+0:72          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72              Constant:
+0:72                3 (const int)
+0:72            Constant:
+0:72              2 (const int)
+0:74      move second child to first child ( temp double)
+0:74        direct index ( temp double)
+0:74          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:74            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74              'invocation' ( temp uint)
+0:74            Constant:
+0:74              3 (const int)
+0:74          Constant:
+0:74            0 (const int)
+0:74        subgroupMin ( global double)
+0:74          direct index ( temp double)
+0:74            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:74              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                Constant:
+0:74                  0 (const int)
+0:74              Constant:
+0:74                3 (const int)
+0:74            Constant:
+0:74              0 (const int)
+0:75      move second child to first child ( temp 2-component vector of double)
+0:75        vector swizzle ( temp 2-component vector of double)
+0:75          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:75            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75              'invocation' ( temp uint)
+0:75            Constant:
+0:75              3 (const int)
+0:75          Sequence
+0:75            Constant:
+0:75              0 (const int)
+0:75            Constant:
+0:75              1 (const int)
+0:75        subgroupMin ( global 2-component vector of double)
+0:75          vector swizzle ( temp 2-component vector of double)
+0:75            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:75              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75                Constant:
+0:75                  1 (const int)
+0:75              Constant:
+0:75                3 (const int)
+0:75            Sequence
+0:75              Constant:
+0:75                0 (const int)
+0:75              Constant:
+0:75                1 (const int)
+0:76      move second child to first child ( temp 3-component vector of double)
+0:76        vector swizzle ( temp 3-component vector of double)
+0:76          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76              'invocation' ( temp uint)
+0:76            Constant:
+0:76              3 (const int)
+0:76          Sequence
+0:76            Constant:
+0:76              0 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76            Constant:
+0:76              2 (const int)
+0:76        subgroupMin ( global 3-component vector of double)
+0:76          vector swizzle ( temp 3-component vector of double)
+0:76            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                Constant:
+0:76                  2 (const int)
+0:76              Constant:
+0:76                3 (const int)
+0:76            Sequence
+0:76              Constant:
+0:76                0 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:76              Constant:
+0:76                2 (const int)
+0:77      move second child to first child ( temp 4-component vector of double)
+0:77        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77            'invocation' ( temp uint)
+0:77          Constant:
+0:77            3 (const int)
+0:77        subgroupMin ( global 4-component vector of double)
+0:77          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77              Constant:
+0:77                3 (const int)
+0:77            Constant:
+0:77              3 (const int)
+0:79      move second child to first child ( temp float)
+0:79        direct index ( temp float)
+0:79          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:79            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79              'invocation' ( temp uint)
+0:79            Constant:
+0:79              0 (const int)
+0:79          Constant:
+0:79            0 (const int)
+0:79        subgroupMax ( global float)
+0:79          direct index ( temp float)
+0:79            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:79              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                Constant:
+0:79                  0 (const int)
+0:79              Constant:
+0:79                0 (const int)
+0:79            Constant:
+0:79              0 (const int)
+0:80      move second child to first child ( temp 2-component vector of float)
+0:80        vector swizzle ( temp 2-component vector of float)
+0:80          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:80            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80              'invocation' ( temp uint)
+0:80            Constant:
+0:80              0 (const int)
+0:80          Sequence
+0:80            Constant:
+0:80              0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80        subgroupMax ( global 2-component vector of float)
+0:80          vector swizzle ( temp 2-component vector of float)
+0:80            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:80              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80                Constant:
+0:80                  1 (const int)
+0:80              Constant:
+0:80                0 (const int)
+0:80            Sequence
+0:80              Constant:
+0:80                0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:81      move second child to first child ( temp 3-component vector of float)
+0:81        vector swizzle ( temp 3-component vector of float)
+0:81          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:81            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81              'invocation' ( temp uint)
+0:81            Constant:
+0:81              0 (const int)
+0:81          Sequence
+0:81            Constant:
+0:81              0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81            Constant:
+0:81              2 (const int)
+0:81        subgroupMax ( global 3-component vector of float)
+0:81          vector swizzle ( temp 3-component vector of float)
+0:81            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:81              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                Constant:
+0:81                  2 (const int)
+0:81              Constant:
+0:81                0 (const int)
+0:81            Sequence
+0:81              Constant:
+0:81                0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81              Constant:
+0:81                2 (const int)
+0:82      move second child to first child ( temp 4-component vector of float)
+0:82        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:82          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82            'invocation' ( temp uint)
+0:82          Constant:
+0:82            0 (const int)
+0:82        subgroupMax ( global 4-component vector of float)
+0:82          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:82            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82              Constant:
+0:82                3 (const int)
+0:82            Constant:
+0:82              0 (const int)
+0:84      move second child to first child ( temp int)
+0:84        direct index ( temp int)
+0:84          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84              'invocation' ( temp uint)
+0:84            Constant:
+0:84              1 (const int)
+0:84          Constant:
+0:84            0 (const int)
+0:84        subgroupMax ( global int)
+0:84          direct index ( temp int)
+0:84            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                Constant:
+0:84                  0 (const int)
+0:84              Constant:
+0:84                1 (const int)
+0:84            Constant:
+0:84              0 (const int)
+0:85      move second child to first child ( temp 2-component vector of int)
+0:85        vector swizzle ( temp 2-component vector of int)
+0:85          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:85            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85              'invocation' ( temp uint)
+0:85            Constant:
+0:85              1 (const int)
+0:85          Sequence
+0:85            Constant:
+0:85              0 (const int)
+0:85            Constant:
+0:85              1 (const int)
+0:85        subgroupMax ( global 2-component vector of int)
+0:85          vector swizzle ( temp 2-component vector of int)
+0:85            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:85              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85                Constant:
+0:85                  1 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:85            Sequence
+0:85              Constant:
+0:85                0 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:86      move second child to first child ( temp 3-component vector of int)
+0:86        vector swizzle ( temp 3-component vector of int)
+0:86          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:86            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86              'invocation' ( temp uint)
+0:86            Constant:
+0:86              1 (const int)
+0:86          Sequence
+0:86            Constant:
+0:86              0 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:86        subgroupMax ( global 3-component vector of int)
+0:86          vector swizzle ( temp 3-component vector of int)
+0:86            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:86              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86                Constant:
+0:86                  2 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86              Constant:
+0:86                2 (const int)
+0:87      move second child to first child ( temp 4-component vector of int)
+0:87        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:87          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87            'invocation' ( temp uint)
+0:87          Constant:
+0:87            1 (const int)
+0:87        subgroupMax ( global 4-component vector of int)
+0:87          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:87            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87              Constant:
+0:87                3 (const int)
+0:87            Constant:
+0:87              1 (const int)
+0:89      move second child to first child ( temp uint)
+0:89        direct index ( temp uint)
+0:89          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:89            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89              'invocation' ( temp uint)
+0:89            Constant:
+0:89              2 (const int)
+0:89          Constant:
+0:89            0 (const int)
+0:89        subgroupMax ( global uint)
+0:89          direct index ( temp uint)
+0:89            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:89              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89                Constant:
+0:89                  0 (const int)
+0:89              Constant:
+0:89                2 (const int)
+0:89            Constant:
+0:89              0 (const int)
+0:90      move second child to first child ( temp 2-component vector of uint)
+0:90        vector swizzle ( temp 2-component vector of uint)
+0:90          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:90            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90              'invocation' ( temp uint)
+0:90            Constant:
+0:90              2 (const int)
+0:90          Sequence
+0:90            Constant:
+0:90              0 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90        subgroupMax ( global 2-component vector of uint)
+0:90          vector swizzle ( temp 2-component vector of uint)
+0:90            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:90              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90                Constant:
+0:90                  1 (const int)
+0:90              Constant:
+0:90                2 (const int)
+0:90            Sequence
+0:90              Constant:
+0:90                0 (const int)
+0:90              Constant:
+0:90                1 (const int)
+0:91      move second child to first child ( temp 3-component vector of uint)
+0:91        vector swizzle ( temp 3-component vector of uint)
+0:91          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:91            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91              'invocation' ( temp uint)
+0:91            Constant:
+0:91              2 (const int)
+0:91          Sequence
+0:91            Constant:
+0:91              0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91            Constant:
+0:91              2 (const int)
+0:91        subgroupMax ( global 3-component vector of uint)
+0:91          vector swizzle ( temp 3-component vector of uint)
+0:91            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:91              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91                Constant:
+0:91                  2 (const int)
+0:91              Constant:
+0:91                2 (const int)
+0:91            Sequence
+0:91              Constant:
+0:91                0 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:91              Constant:
+0:91                2 (const int)
+0:92      move second child to first child ( temp 4-component vector of uint)
+0:92        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:92          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92            'invocation' ( temp uint)
+0:92          Constant:
+0:92            2 (const int)
+0:92        subgroupMax ( global 4-component vector of uint)
+0:92          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:92            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92              Constant:
+0:92                3 (const int)
+0:92            Constant:
+0:92              2 (const int)
+0:94      move second child to first child ( temp double)
+0:94        direct index ( temp double)
+0:94          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:94            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94              'invocation' ( temp uint)
+0:94            Constant:
+0:94              3 (const int)
+0:94          Constant:
+0:94            0 (const int)
+0:94        subgroupMax ( global double)
+0:94          direct index ( temp double)
+0:94            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:94              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94                Constant:
+0:94                  0 (const int)
+0:94              Constant:
+0:94                3 (const int)
+0:94            Constant:
+0:94              0 (const int)
+0:95      move second child to first child ( temp 2-component vector of double)
+0:95        vector swizzle ( temp 2-component vector of double)
+0:95          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:95            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95              'invocation' ( temp uint)
+0:95            Constant:
+0:95              3 (const int)
+0:95          Sequence
+0:95            Constant:
+0:95              0 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95        subgroupMax ( global 2-component vector of double)
+0:95          vector swizzle ( temp 2-component vector of double)
+0:95            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:95              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95                Constant:
+0:95                  1 (const int)
+0:95              Constant:
+0:95                3 (const int)
+0:95            Sequence
+0:95              Constant:
+0:95                0 (const int)
+0:95              Constant:
+0:95                1 (const int)
+0:96      move second child to first child ( temp 3-component vector of double)
+0:96        vector swizzle ( temp 3-component vector of double)
+0:96          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:96            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96              'invocation' ( temp uint)
+0:96            Constant:
+0:96              3 (const int)
+0:96          Sequence
+0:96            Constant:
+0:96              0 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96            Constant:
+0:96              2 (const int)
+0:96        subgroupMax ( global 3-component vector of double)
+0:96          vector swizzle ( temp 3-component vector of double)
+0:96            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:96              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96                Constant:
+0:96                  2 (const int)
+0:96              Constant:
+0:96                3 (const int)
+0:96            Sequence
+0:96              Constant:
+0:96                0 (const int)
+0:96              Constant:
+0:96                1 (const int)
+0:96              Constant:
+0:96                2 (const int)
+0:97      move second child to first child ( temp 4-component vector of double)
+0:97        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:97          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97            'invocation' ( temp uint)
+0:97          Constant:
+0:97            3 (const int)
+0:97        subgroupMax ( global 4-component vector of double)
+0:97          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:97            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97              Constant:
+0:97                3 (const int)
+0:97            Constant:
+0:97              3 (const int)
+0:99      move second child to first child ( temp int)
+0:99        direct index ( temp int)
+0:99          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99              'invocation' ( temp uint)
+0:99            Constant:
+0:99              1 (const int)
+0:99          Constant:
+0:99            0 (const int)
+0:99        subgroupAnd ( global int)
+0:99          direct index ( temp int)
+0:99            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99                Constant:
+0:99                  0 (const int)
+0:99              Constant:
+0:99                1 (const int)
+0:99            Constant:
+0:99              0 (const int)
+0:100      move second child to first child ( temp 2-component vector of int)
+0:100        vector swizzle ( temp 2-component vector of int)
+0:100          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100              'invocation' ( temp uint)
+0:100            Constant:
+0:100              1 (const int)
+0:100          Sequence
+0:100            Constant:
+0:100              0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100        subgroupAnd ( global 2-component vector of int)
+0:100          vector swizzle ( temp 2-component vector of int)
+0:100            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100                Constant:
+0:100                  1 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100            Sequence
+0:100              Constant:
+0:100                0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:101      move second child to first child ( temp 3-component vector of int)
+0:101        vector swizzle ( temp 3-component vector of int)
+0:101          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101              'invocation' ( temp uint)
+0:101            Constant:
+0:101              1 (const int)
+0:101          Sequence
+0:101            Constant:
+0:101              0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101            Constant:
+0:101              2 (const int)
+0:101        subgroupAnd ( global 3-component vector of int)
+0:101          vector swizzle ( temp 3-component vector of int)
+0:101            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101                Constant:
+0:101                  2 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101            Sequence
+0:101              Constant:
+0:101                0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101              Constant:
+0:101                2 (const int)
+0:102      move second child to first child ( temp 4-component vector of int)
+0:102        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102            'invocation' ( temp uint)
+0:102          Constant:
+0:102            1 (const int)
+0:102        subgroupAnd ( global 4-component vector of int)
+0:102          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102              Constant:
+0:102                3 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:104      move second child to first child ( temp uint)
+0:104        direct index ( temp uint)
+0:104          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104              'invocation' ( temp uint)
+0:104            Constant:
+0:104              2 (const int)
+0:104          Constant:
+0:104            0 (const int)
+0:104        subgroupAnd ( global uint)
+0:104          direct index ( temp uint)
+0:104            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104                Constant:
+0:104                  0 (const int)
+0:104              Constant:
+0:104                2 (const int)
+0:104            Constant:
+0:104              0 (const int)
+0:105      move second child to first child ( temp 2-component vector of uint)
+0:105        vector swizzle ( temp 2-component vector of uint)
+0:105          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105              'invocation' ( temp uint)
+0:105            Constant:
+0:105              2 (const int)
+0:105          Sequence
+0:105            Constant:
+0:105              0 (const int)
+0:105            Constant:
+0:105              1 (const int)
+0:105        subgroupAnd ( global 2-component vector of uint)
+0:105          vector swizzle ( temp 2-component vector of uint)
+0:105            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105                Constant:
+0:105                  1 (const int)
+0:105              Constant:
+0:105                2 (const int)
+0:105            Sequence
+0:105              Constant:
+0:105                0 (const int)
+0:105              Constant:
+0:105                1 (const int)
+0:106      move second child to first child ( temp 3-component vector of uint)
+0:106        vector swizzle ( temp 3-component vector of uint)
+0:106          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106              'invocation' ( temp uint)
+0:106            Constant:
+0:106              2 (const int)
+0:106          Sequence
+0:106            Constant:
+0:106              0 (const int)
+0:106            Constant:
+0:106              1 (const int)
+0:106            Constant:
+0:106              2 (const int)
+0:106        subgroupAnd ( global 3-component vector of uint)
+0:106          vector swizzle ( temp 3-component vector of uint)
+0:106            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106                Constant:
+0:106                  2 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:106            Sequence
+0:106              Constant:
+0:106                0 (const int)
+0:106              Constant:
+0:106                1 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:107      move second child to first child ( temp 4-component vector of uint)
+0:107        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107            'invocation' ( temp uint)
+0:107          Constant:
+0:107            2 (const int)
+0:107        subgroupAnd ( global 4-component vector of uint)
+0:107          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107              Constant:
+0:107                3 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:109      move second child to first child ( temp int)
+0:109        direct index ( temp int)
+0:109          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:109            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109              'invocation' ( temp uint)
+0:109            Constant:
+0:109              1 (const int)
+0:109          Constant:
+0:109            0 (const int)
+0:109        Convert bool to int ( temp int)
+0:109          subgroupAnd ( global bool)
+0:109            Compare Less Than ( temp bool)
+0:109              direct index ( temp int)
+0:109                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:109                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109                    Constant:
+0:109                      0 (const int)
+0:109                  Constant:
+0:109                    1 (const int)
+0:109                Constant:
+0:109                  0 (const int)
+0:109              Constant:
+0:109                0 (const int)
+0:110      move second child to first child ( temp 2-component vector of int)
+0:110        vector swizzle ( temp 2-component vector of int)
+0:110          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:110            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110              'invocation' ( temp uint)
+0:110            Constant:
+0:110              1 (const int)
+0:110          Sequence
+0:110            Constant:
+0:110              0 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110        Convert bool to int ( temp 2-component vector of int)
+0:110          subgroupAnd ( global 2-component vector of bool)
+0:110            Compare Less Than ( global 2-component vector of bool)
+0:110              vector swizzle ( temp 2-component vector of int)
+0:110                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:110                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110                    Constant:
+0:110                      1 (const int)
+0:110                  Constant:
+0:110                    1 (const int)
+0:110                Sequence
+0:110                  Constant:
+0:110                    0 (const int)
+0:110                  Constant:
+0:110                    1 (const int)
+0:110              Constant:
+0:110                0 (const int)
+0:110                0 (const int)
+0:111      move second child to first child ( temp 3-component vector of int)
+0:111        vector swizzle ( temp 3-component vector of int)
+0:111          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111              'invocation' ( temp uint)
+0:111            Constant:
+0:111              1 (const int)
+0:111          Sequence
+0:111            Constant:
+0:111              0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111            Constant:
+0:111              2 (const int)
+0:111        Convert bool to int ( temp 3-component vector of int)
+0:111          subgroupAnd ( global 3-component vector of bool)
+0:111            Compare Less Than ( global 3-component vector of bool)
+0:111              vector swizzle ( temp 3-component vector of int)
+0:111                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111                    Constant:
+0:111                      1 (const int)
+0:111                  Constant:
+0:111                    1 (const int)
+0:111                Sequence
+0:111                  Constant:
+0:111                    0 (const int)
+0:111                  Constant:
+0:111                    1 (const int)
+0:111                  Constant:
+0:111                    2 (const int)
+0:111              Constant:
+0:111                0 (const int)
+0:111                0 (const int)
+0:111                0 (const int)
+0:112      move second child to first child ( temp 4-component vector of int)
+0:112        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112            'invocation' ( temp uint)
+0:112          Constant:
+0:112            1 (const int)
+0:112        Convert bool to int ( temp 4-component vector of int)
+0:112          subgroupAnd ( global 4-component vector of bool)
+0:112            Compare Less Than ( global 4-component vector of bool)
+0:112              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112                  Constant:
+0:112                    1 (const int)
+0:112                Constant:
+0:112                  1 (const int)
+0:112              Constant:
+0:112                0 (const int)
+0:112                0 (const int)
+0:112                0 (const int)
+0:112                0 (const int)
+0:114      move second child to first child ( temp int)
+0:114        direct index ( temp int)
+0:114          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114              'invocation' ( temp uint)
+0:114            Constant:
+0:114              1 (const int)
+0:114          Constant:
+0:114            0 (const int)
+0:114        subgroupOr ( global int)
+0:114          direct index ( temp int)
+0:114            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114                Constant:
+0:114                  0 (const int)
+0:114              Constant:
+0:114                1 (const int)
+0:114            Constant:
+0:114              0 (const int)
+0:115      move second child to first child ( temp 2-component vector of int)
+0:115        vector swizzle ( temp 2-component vector of int)
+0:115          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115              'invocation' ( temp uint)
+0:115            Constant:
+0:115              1 (const int)
+0:115          Sequence
+0:115            Constant:
+0:115              0 (const int)
+0:115            Constant:
+0:115              1 (const int)
+0:115        subgroupOr ( global 2-component vector of int)
+0:115          vector swizzle ( temp 2-component vector of int)
+0:115            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115                Constant:
+0:115                  1 (const int)
+0:115              Constant:
+0:115                1 (const int)
+0:115            Sequence
+0:115              Constant:
+0:115                0 (const int)
+0:115              Constant:
+0:115                1 (const int)
+0:116      move second child to first child ( temp 3-component vector of int)
+0:116        vector swizzle ( temp 3-component vector of int)
+0:116          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116              'invocation' ( temp uint)
+0:116            Constant:
+0:116              1 (const int)
+0:116          Sequence
+0:116            Constant:
+0:116              0 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116            Constant:
+0:116              2 (const int)
+0:116        subgroupOr ( global 3-component vector of int)
+0:116          vector swizzle ( temp 3-component vector of int)
+0:116            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116                Constant:
+0:116                  2 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:116            Sequence
+0:116              Constant:
+0:116                0 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:116              Constant:
+0:116                2 (const int)
+0:117      move second child to first child ( temp 4-component vector of int)
+0:117        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117            'invocation' ( temp uint)
+0:117          Constant:
+0:117            1 (const int)
+0:117        subgroupOr ( global 4-component vector of int)
+0:117          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117              Constant:
+0:117                3 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:119      move second child to first child ( temp uint)
+0:119        direct index ( temp uint)
+0:119          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119              'invocation' ( temp uint)
+0:119            Constant:
+0:119              2 (const int)
+0:119          Constant:
+0:119            0 (const int)
+0:119        subgroupOr ( global uint)
+0:119          direct index ( temp uint)
+0:119            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119                Constant:
+0:119                  0 (const int)
+0:119              Constant:
+0:119                2 (const int)
+0:119            Constant:
+0:119              0 (const int)
+0:120      move second child to first child ( temp 2-component vector of uint)
+0:120        vector swizzle ( temp 2-component vector of uint)
+0:120          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:120            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120              'invocation' ( temp uint)
+0:120            Constant:
+0:120              2 (const int)
+0:120          Sequence
+0:120            Constant:
+0:120              0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120        subgroupOr ( global 2-component vector of uint)
+0:120          vector swizzle ( temp 2-component vector of uint)
+0:120            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:120              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120                Constant:
+0:120                  1 (const int)
+0:120              Constant:
+0:120                2 (const int)
+0:120            Sequence
+0:120              Constant:
+0:120                0 (const int)
+0:120              Constant:
+0:120                1 (const int)
+0:121      move second child to first child ( temp 3-component vector of uint)
+0:121        vector swizzle ( temp 3-component vector of uint)
+0:121          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:121            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121              'invocation' ( temp uint)
+0:121            Constant:
+0:121              2 (const int)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121            Constant:
+0:121              2 (const int)
+0:121        subgroupOr ( global 3-component vector of uint)
+0:121          vector swizzle ( temp 3-component vector of uint)
+0:121            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:121              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121                Constant:
+0:121                  2 (const int)
+0:121              Constant:
+0:121                2 (const int)
+0:121            Sequence
+0:121              Constant:
+0:121                0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:121              Constant:
+0:121                2 (const int)
+0:122      move second child to first child ( temp 4-component vector of uint)
+0:122        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:122          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122            'invocation' ( temp uint)
+0:122          Constant:
+0:122            2 (const int)
+0:122        subgroupOr ( global 4-component vector of uint)
+0:122          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:122            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122              Constant:
+0:122                3 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:124      move second child to first child ( temp int)
+0:124        direct index ( temp int)
+0:124          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:124            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124              'invocation' ( temp uint)
+0:124            Constant:
+0:124              1 (const int)
+0:124          Constant:
+0:124            0 (const int)
+0:124        Convert bool to int ( temp int)
+0:124          subgroupOr ( global bool)
+0:124            Compare Less Than ( temp bool)
+0:124              direct index ( temp int)
+0:124                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:124                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124                    Constant:
+0:124                      0 (const int)
+0:124                  Constant:
+0:124                    1 (const int)
+0:124                Constant:
+0:124                  0 (const int)
+0:124              Constant:
+0:124                0 (const int)
+0:125      move second child to first child ( temp 2-component vector of int)
+0:125        vector swizzle ( temp 2-component vector of int)
+0:125          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:125            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125              'invocation' ( temp uint)
+0:125            Constant:
+0:125              1 (const int)
+0:125          Sequence
+0:125            Constant:
+0:125              0 (const int)
+0:125            Constant:
+0:125              1 (const int)
+0:125        Convert bool to int ( temp 2-component vector of int)
+0:125          subgroupOr ( global 2-component vector of bool)
+0:125            Compare Less Than ( global 2-component vector of bool)
+0:125              vector swizzle ( temp 2-component vector of int)
+0:125                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:125                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125                    Constant:
+0:125                      1 (const int)
+0:125                  Constant:
+0:125                    1 (const int)
+0:125                Sequence
+0:125                  Constant:
+0:125                    0 (const int)
+0:125                  Constant:
+0:125                    1 (const int)
+0:125              Constant:
+0:125                0 (const int)
+0:125                0 (const int)
+0:126      move second child to first child ( temp 3-component vector of int)
+0:126        vector swizzle ( temp 3-component vector of int)
+0:126          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126              'invocation' ( temp uint)
+0:126            Constant:
+0:126              1 (const int)
+0:126          Sequence
+0:126            Constant:
+0:126              0 (const int)
+0:126            Constant:
+0:126              1 (const int)
+0:126            Constant:
+0:126              2 (const int)
+0:126        Convert bool to int ( temp 3-component vector of int)
+0:126          subgroupOr ( global 3-component vector of bool)
+0:126            Compare Less Than ( global 3-component vector of bool)
+0:126              vector swizzle ( temp 3-component vector of int)
+0:126                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126                    Constant:
+0:126                      1 (const int)
+0:126                  Constant:
+0:126                    1 (const int)
+0:126                Sequence
+0:126                  Constant:
+0:126                    0 (const int)
+0:126                  Constant:
+0:126                    1 (const int)
+0:126                  Constant:
+0:126                    2 (const int)
+0:126              Constant:
+0:126                0 (const int)
+0:126                0 (const int)
+0:126                0 (const int)
+0:127      move second child to first child ( temp 4-component vector of int)
+0:127        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127            'invocation' ( temp uint)
+0:127          Constant:
+0:127            1 (const int)
+0:127        Convert bool to int ( temp 4-component vector of int)
+0:127          subgroupOr ( global 4-component vector of bool)
+0:127            Compare Less Than ( global 4-component vector of bool)
+0:127              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127                  Constant:
+0:127                    1 (const int)
+0:127                Constant:
+0:127                  1 (const int)
+0:127              Constant:
+0:127                0 (const int)
+0:127                0 (const int)
+0:127                0 (const int)
+0:127                0 (const int)
+0:129      move second child to first child ( temp int)
+0:129        direct index ( temp int)
+0:129          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129              'invocation' ( temp uint)
+0:129            Constant:
+0:129              1 (const int)
+0:129          Constant:
+0:129            0 (const int)
+0:129        subgroupXor ( global int)
+0:129          direct index ( temp int)
+0:129            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129                Constant:
+0:129                  0 (const int)
+0:129              Constant:
+0:129                1 (const int)
+0:129            Constant:
+0:129              0 (const int)
+0:130      move second child to first child ( temp 2-component vector of int)
+0:130        vector swizzle ( temp 2-component vector of int)
+0:130          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:130            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130              'invocation' ( temp uint)
+0:130            Constant:
+0:130              1 (const int)
+0:130          Sequence
+0:130            Constant:
+0:130              0 (const int)
+0:130            Constant:
+0:130              1 (const int)
+0:130        subgroupXor ( global 2-component vector of int)
+0:130          vector swizzle ( temp 2-component vector of int)
+0:130            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:130              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130                Constant:
+0:130                  1 (const int)
+0:130              Constant:
+0:130                1 (const int)
+0:130            Sequence
+0:130              Constant:
+0:130                0 (const int)
+0:130              Constant:
+0:130                1 (const int)
+0:131      move second child to first child ( temp 3-component vector of int)
+0:131        vector swizzle ( temp 3-component vector of int)
+0:131          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:131            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131              'invocation' ( temp uint)
+0:131            Constant:
+0:131              1 (const int)
+0:131          Sequence
+0:131            Constant:
+0:131              0 (const int)
+0:131            Constant:
+0:131              1 (const int)
+0:131            Constant:
+0:131              2 (const int)
+0:131        subgroupXor ( global 3-component vector of int)
+0:131          vector swizzle ( temp 3-component vector of int)
+0:131            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:131              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131                Constant:
+0:131                  2 (const int)
+0:131              Constant:
+0:131                1 (const int)
+0:131            Sequence
+0:131              Constant:
+0:131                0 (const int)
+0:131              Constant:
+0:131                1 (const int)
+0:131              Constant:
+0:131                2 (const int)
+0:132      move second child to first child ( temp 4-component vector of int)
+0:132        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:132          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132            'invocation' ( temp uint)
+0:132          Constant:
+0:132            1 (const int)
+0:132        subgroupXor ( global 4-component vector of int)
+0:132          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:132            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132              Constant:
+0:132                3 (const int)
+0:132            Constant:
+0:132              1 (const int)
+0:134      move second child to first child ( temp uint)
+0:134        direct index ( temp uint)
+0:134          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134              'invocation' ( temp uint)
+0:134            Constant:
+0:134              2 (const int)
+0:134          Constant:
+0:134            0 (const int)
+0:134        subgroupXor ( global uint)
+0:134          direct index ( temp uint)
+0:134            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134                Constant:
+0:134                  0 (const int)
+0:134              Constant:
+0:134                2 (const int)
+0:134            Constant:
+0:134              0 (const int)
+0:135      move second child to first child ( temp 2-component vector of uint)
+0:135        vector swizzle ( temp 2-component vector of uint)
+0:135          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:135            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135              'invocation' ( temp uint)
+0:135            Constant:
+0:135              2 (const int)
+0:135          Sequence
+0:135            Constant:
+0:135              0 (const int)
+0:135            Constant:
+0:135              1 (const int)
+0:135        subgroupXor ( global 2-component vector of uint)
+0:135          vector swizzle ( temp 2-component vector of uint)
+0:135            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:135              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135                Constant:
+0:135                  1 (const int)
+0:135              Constant:
+0:135                2 (const int)
+0:135            Sequence
+0:135              Constant:
+0:135                0 (const int)
+0:135              Constant:
+0:135                1 (const int)
+0:136      move second child to first child ( temp 3-component vector of uint)
+0:136        vector swizzle ( temp 3-component vector of uint)
+0:136          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:136            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136              'invocation' ( temp uint)
+0:136            Constant:
+0:136              2 (const int)
+0:136          Sequence
+0:136            Constant:
+0:136              0 (const int)
+0:136            Constant:
+0:136              1 (const int)
+0:136            Constant:
+0:136              2 (const int)
+0:136        subgroupXor ( global 3-component vector of uint)
+0:136          vector swizzle ( temp 3-component vector of uint)
+0:136            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:136              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136                Constant:
+0:136                  2 (const int)
+0:136              Constant:
+0:136                2 (const int)
+0:136            Sequence
+0:136              Constant:
+0:136                0 (const int)
+0:136              Constant:
+0:136                1 (const int)
+0:136              Constant:
+0:136                2 (const int)
+0:137      move second child to first child ( temp 4-component vector of uint)
+0:137        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:137          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137            'invocation' ( temp uint)
+0:137          Constant:
+0:137            2 (const int)
+0:137        subgroupXor ( global 4-component vector of uint)
+0:137          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:137            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137              Constant:
+0:137                3 (const int)
+0:137            Constant:
+0:137              2 (const int)
+0:139      move second child to first child ( temp int)
+0:139        direct index ( temp int)
+0:139          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139              'invocation' ( temp uint)
+0:139            Constant:
+0:139              1 (const int)
+0:139          Constant:
+0:139            0 (const int)
+0:139        Convert bool to int ( temp int)
+0:139          subgroupXor ( global bool)
+0:139            Compare Less Than ( temp bool)
+0:139              direct index ( temp int)
+0:139                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139                    Constant:
+0:139                      0 (const int)
+0:139                  Constant:
+0:139                    1 (const int)
+0:139                Constant:
+0:139                  0 (const int)
+0:139              Constant:
+0:139                0 (const int)
+0:140      move second child to first child ( temp 2-component vector of int)
+0:140        vector swizzle ( temp 2-component vector of int)
+0:140          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:140            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140              'invocation' ( temp uint)
+0:140            Constant:
+0:140              1 (const int)
+0:140          Sequence
+0:140            Constant:
+0:140              0 (const int)
+0:140            Constant:
+0:140              1 (const int)
+0:140        Convert bool to int ( temp 2-component vector of int)
+0:140          subgroupXor ( global 2-component vector of bool)
+0:140            Compare Less Than ( global 2-component vector of bool)
+0:140              vector swizzle ( temp 2-component vector of int)
+0:140                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:140                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140                    Constant:
+0:140                      1 (const int)
+0:140                  Constant:
+0:140                    1 (const int)
+0:140                Sequence
+0:140                  Constant:
+0:140                    0 (const int)
+0:140                  Constant:
+0:140                    1 (const int)
+0:140              Constant:
+0:140                0 (const int)
+0:140                0 (const int)
+0:141      move second child to first child ( temp 3-component vector of int)
+0:141        vector swizzle ( temp 3-component vector of int)
+0:141          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141              'invocation' ( temp uint)
+0:141            Constant:
+0:141              1 (const int)
+0:141          Sequence
+0:141            Constant:
+0:141              0 (const int)
+0:141            Constant:
+0:141              1 (const int)
+0:141            Constant:
+0:141              2 (const int)
+0:141        Convert bool to int ( temp 3-component vector of int)
+0:141          subgroupXor ( global 3-component vector of bool)
+0:141            Compare Less Than ( global 3-component vector of bool)
+0:141              vector swizzle ( temp 3-component vector of int)
+0:141                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141                    Constant:
+0:141                      1 (const int)
+0:141                  Constant:
+0:141                    1 (const int)
+0:141                Sequence
+0:141                  Constant:
+0:141                    0 (const int)
+0:141                  Constant:
+0:141                    1 (const int)
+0:141                  Constant:
+0:141                    2 (const int)
+0:141              Constant:
+0:141                0 (const int)
+0:141                0 (const int)
+0:141                0 (const int)
+0:142      move second child to first child ( temp 4-component vector of int)
+0:142        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142            'invocation' ( temp uint)
+0:142          Constant:
+0:142            1 (const int)
+0:142        Convert bool to int ( temp 4-component vector of int)
+0:142          subgroupXor ( global 4-component vector of bool)
+0:142            Compare Less Than ( global 4-component vector of bool)
+0:142              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142                  Constant:
+0:142                    1 (const int)
+0:142                Constant:
+0:142                  1 (const int)
+0:142              Constant:
+0:142                0 (const int)
+0:142                0 (const int)
+0:142                0 (const int)
+0:142                0 (const int)
+0:144      move second child to first child ( temp float)
+0:144        direct index ( temp float)
+0:144          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:144            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144              'invocation' ( temp uint)
+0:144            Constant:
+0:144              0 (const int)
+0:144          Constant:
+0:144            0 (const int)
+0:144        subgroupInclusiveAdd ( global float)
+0:144          direct index ( temp float)
+0:144            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:144              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144                Constant:
+0:144                  0 (const int)
+0:144              Constant:
+0:144                0 (const int)
+0:144            Constant:
+0:144              0 (const int)
+0:145      move second child to first child ( temp 2-component vector of float)
+0:145        vector swizzle ( temp 2-component vector of float)
+0:145          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:145            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:145              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:145              'invocation' ( temp uint)
+0:145            Constant:
+0:145              0 (const int)
+0:145          Sequence
+0:145            Constant:
+0:145              0 (const int)
+0:145            Constant:
+0:145              1 (const int)
+0:145        subgroupInclusiveAdd ( global 2-component vector of float)
+0:145          vector swizzle ( temp 2-component vector of float)
+0:145            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:145              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:145                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:145                Constant:
+0:145                  1 (const int)
+0:145              Constant:
+0:145                0 (const int)
+0:145            Sequence
+0:145              Constant:
+0:145                0 (const int)
+0:145              Constant:
+0:145                1 (const int)
+0:146      move second child to first child ( temp 3-component vector of float)
+0:146        vector swizzle ( temp 3-component vector of float)
+0:146          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:146            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146              'invocation' ( temp uint)
+0:146            Constant:
+0:146              0 (const int)
+0:146          Sequence
+0:146            Constant:
+0:146              0 (const int)
+0:146            Constant:
+0:146              1 (const int)
+0:146            Constant:
+0:146              2 (const int)
+0:146        subgroupInclusiveAdd ( global 3-component vector of float)
+0:146          vector swizzle ( temp 3-component vector of float)
+0:146            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:146              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146                Constant:
+0:146                  2 (const int)
+0:146              Constant:
+0:146                0 (const int)
+0:146            Sequence
+0:146              Constant:
+0:146                0 (const int)
+0:146              Constant:
+0:146                1 (const int)
+0:146              Constant:
+0:146                2 (const int)
+0:147      move second child to first child ( temp 4-component vector of float)
+0:147        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:147          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147            'invocation' ( temp uint)
+0:147          Constant:
+0:147            0 (const int)
+0:147        subgroupInclusiveAdd ( global 4-component vector of float)
+0:147          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:147            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147              Constant:
+0:147                3 (const int)
+0:147            Constant:
+0:147              0 (const int)
+0:149      move second child to first child ( temp int)
+0:149        direct index ( temp int)
+0:149          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:149            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149              'invocation' ( temp uint)
+0:149            Constant:
+0:149              1 (const int)
+0:149          Constant:
+0:149            0 (const int)
+0:149        subgroupInclusiveAdd ( global int)
+0:149          direct index ( temp int)
+0:149            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:149              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149                Constant:
+0:149                  0 (const int)
+0:149              Constant:
+0:149                1 (const int)
+0:149            Constant:
+0:149              0 (const int)
+0:150      move second child to first child ( temp 2-component vector of int)
+0:150        vector swizzle ( temp 2-component vector of int)
+0:150          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:150            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:150              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:150              'invocation' ( temp uint)
+0:150            Constant:
+0:150              1 (const int)
+0:150          Sequence
+0:150            Constant:
+0:150              0 (const int)
+0:150            Constant:
+0:150              1 (const int)
+0:150        subgroupInclusiveAdd ( global 2-component vector of int)
+0:150          vector swizzle ( temp 2-component vector of int)
+0:150            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:150              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:150                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:150                Constant:
+0:150                  1 (const int)
+0:150              Constant:
+0:150                1 (const int)
+0:150            Sequence
+0:150              Constant:
+0:150                0 (const int)
+0:150              Constant:
+0:150                1 (const int)
+0:151      move second child to first child ( temp 3-component vector of int)
+0:151        vector swizzle ( temp 3-component vector of int)
+0:151          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:151            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151              'invocation' ( temp uint)
+0:151            Constant:
+0:151              1 (const int)
+0:151          Sequence
+0:151            Constant:
+0:151              0 (const int)
+0:151            Constant:
+0:151              1 (const int)
+0:151            Constant:
+0:151              2 (const int)
+0:151        subgroupInclusiveAdd ( global 3-component vector of int)
+0:151          vector swizzle ( temp 3-component vector of int)
+0:151            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:151              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151                Constant:
+0:151                  2 (const int)
+0:151              Constant:
+0:151                1 (const int)
+0:151            Sequence
+0:151              Constant:
+0:151                0 (const int)
+0:151              Constant:
+0:151                1 (const int)
+0:151              Constant:
+0:151                2 (const int)
+0:152      move second child to first child ( temp 4-component vector of int)
+0:152        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:152          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152            'invocation' ( temp uint)
+0:152          Constant:
+0:152            1 (const int)
+0:152        subgroupInclusiveAdd ( global 4-component vector of int)
+0:152          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:152            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152              Constant:
+0:152                3 (const int)
+0:152            Constant:
+0:152              1 (const int)
+0:154      move second child to first child ( temp uint)
+0:154        direct index ( temp uint)
+0:154          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:154            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154              'invocation' ( temp uint)
+0:154            Constant:
+0:154              2 (const int)
+0:154          Constant:
+0:154            0 (const int)
+0:154        subgroupInclusiveAdd ( global uint)
+0:154          direct index ( temp uint)
+0:154            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:154              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154                Constant:
+0:154                  0 (const int)
+0:154              Constant:
+0:154                2 (const int)
+0:154            Constant:
+0:154              0 (const int)
+0:155      move second child to first child ( temp 2-component vector of uint)
+0:155        vector swizzle ( temp 2-component vector of uint)
+0:155          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:155            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:155              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:155              'invocation' ( temp uint)
+0:155            Constant:
+0:155              2 (const int)
+0:155          Sequence
+0:155            Constant:
+0:155              0 (const int)
+0:155            Constant:
+0:155              1 (const int)
+0:155        subgroupInclusiveAdd ( global 2-component vector of uint)
+0:155          vector swizzle ( temp 2-component vector of uint)
+0:155            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:155              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:155                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:155                Constant:
+0:155                  1 (const int)
+0:155              Constant:
+0:155                2 (const int)
+0:155            Sequence
+0:155              Constant:
+0:155                0 (const int)
+0:155              Constant:
+0:155                1 (const int)
+0:156      move second child to first child ( temp 3-component vector of uint)
+0:156        vector swizzle ( temp 3-component vector of uint)
+0:156          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:156            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156              'invocation' ( temp uint)
+0:156            Constant:
+0:156              2 (const int)
+0:156          Sequence
+0:156            Constant:
+0:156              0 (const int)
+0:156            Constant:
+0:156              1 (const int)
+0:156            Constant:
+0:156              2 (const int)
+0:156        subgroupInclusiveAdd ( global 3-component vector of uint)
+0:156          vector swizzle ( temp 3-component vector of uint)
+0:156            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:156              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156                Constant:
+0:156                  2 (const int)
+0:156              Constant:
+0:156                2 (const int)
+0:156            Sequence
+0:156              Constant:
+0:156                0 (const int)
+0:156              Constant:
+0:156                1 (const int)
+0:156              Constant:
+0:156                2 (const int)
+0:157      move second child to first child ( temp 4-component vector of uint)
+0:157        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:157          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157            'invocation' ( temp uint)
+0:157          Constant:
+0:157            2 (const int)
+0:157        subgroupInclusiveAdd ( global 4-component vector of uint)
+0:157          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:157            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157              Constant:
+0:157                3 (const int)
+0:157            Constant:
+0:157              2 (const int)
+0:159      move second child to first child ( temp double)
+0:159        direct index ( temp double)
+0:159          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:159            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159              'invocation' ( temp uint)
+0:159            Constant:
+0:159              3 (const int)
+0:159          Constant:
+0:159            0 (const int)
+0:159        subgroupInclusiveAdd ( global double)
+0:159          direct index ( temp double)
+0:159            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:159              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159                Constant:
+0:159                  0 (const int)
+0:159              Constant:
+0:159                3 (const int)
+0:159            Constant:
+0:159              0 (const int)
+0:160      move second child to first child ( temp 2-component vector of double)
+0:160        vector swizzle ( temp 2-component vector of double)
+0:160          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:160            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:160              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:160              'invocation' ( temp uint)
+0:160            Constant:
+0:160              3 (const int)
+0:160          Sequence
+0:160            Constant:
+0:160              0 (const int)
+0:160            Constant:
+0:160              1 (const int)
+0:160        subgroupInclusiveAdd ( global 2-component vector of double)
+0:160          vector swizzle ( temp 2-component vector of double)
+0:160            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:160              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:160                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:160                Constant:
+0:160                  1 (const int)
+0:160              Constant:
+0:160                3 (const int)
+0:160            Sequence
+0:160              Constant:
+0:160                0 (const int)
+0:160              Constant:
+0:160                1 (const int)
+0:161      move second child to first child ( temp 3-component vector of double)
+0:161        vector swizzle ( temp 3-component vector of double)
+0:161          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:161            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161              'invocation' ( temp uint)
+0:161            Constant:
+0:161              3 (const int)
+0:161          Sequence
+0:161            Constant:
+0:161              0 (const int)
+0:161            Constant:
+0:161              1 (const int)
+0:161            Constant:
+0:161              2 (const int)
+0:161        subgroupInclusiveAdd ( global 3-component vector of double)
+0:161          vector swizzle ( temp 3-component vector of double)
+0:161            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:161              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161                Constant:
+0:161                  2 (const int)
+0:161              Constant:
+0:161                3 (const int)
+0:161            Sequence
+0:161              Constant:
+0:161                0 (const int)
+0:161              Constant:
+0:161                1 (const int)
+0:161              Constant:
+0:161                2 (const int)
+0:162      move second child to first child ( temp 4-component vector of double)
+0:162        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:162          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162            'invocation' ( temp uint)
+0:162          Constant:
+0:162            3 (const int)
+0:162        subgroupInclusiveAdd ( global 4-component vector of double)
+0:162          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:162            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162              Constant:
+0:162                3 (const int)
+0:162            Constant:
+0:162              3 (const int)
+0:164      move second child to first child ( temp float)
+0:164        direct index ( temp float)
+0:164          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:164            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164              'invocation' ( temp uint)
+0:164            Constant:
+0:164              0 (const int)
+0:164          Constant:
+0:164            0 (const int)
+0:164        subgroupInclusiveMul ( global float)
+0:164          direct index ( temp float)
+0:164            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:164              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164                Constant:
+0:164                  0 (const int)
+0:164              Constant:
+0:164                0 (const int)
+0:164            Constant:
+0:164              0 (const int)
+0:165      move second child to first child ( temp 2-component vector of float)
+0:165        vector swizzle ( temp 2-component vector of float)
+0:165          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:165            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:165              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:165              'invocation' ( temp uint)
+0:165            Constant:
+0:165              0 (const int)
+0:165          Sequence
+0:165            Constant:
+0:165              0 (const int)
+0:165            Constant:
+0:165              1 (const int)
+0:165        subgroupInclusiveMul ( global 2-component vector of float)
+0:165          vector swizzle ( temp 2-component vector of float)
+0:165            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:165              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:165                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:165                Constant:
+0:165                  1 (const int)
+0:165              Constant:
+0:165                0 (const int)
+0:165            Sequence
+0:165              Constant:
+0:165                0 (const int)
+0:165              Constant:
+0:165                1 (const int)
+0:166      move second child to first child ( temp 3-component vector of float)
+0:166        vector swizzle ( temp 3-component vector of float)
+0:166          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:166            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166              'invocation' ( temp uint)
+0:166            Constant:
+0:166              0 (const int)
+0:166          Sequence
+0:166            Constant:
+0:166              0 (const int)
+0:166            Constant:
+0:166              1 (const int)
+0:166            Constant:
+0:166              2 (const int)
+0:166        subgroupInclusiveMul ( global 3-component vector of float)
+0:166          vector swizzle ( temp 3-component vector of float)
+0:166            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:166              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166                Constant:
+0:166                  2 (const int)
+0:166              Constant:
+0:166                0 (const int)
+0:166            Sequence
+0:166              Constant:
+0:166                0 (const int)
+0:166              Constant:
+0:166                1 (const int)
+0:166              Constant:
+0:166                2 (const int)
+0:167      move second child to first child ( temp 4-component vector of float)
+0:167        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:167          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167            'invocation' ( temp uint)
+0:167          Constant:
+0:167            0 (const int)
+0:167        subgroupInclusiveMul ( global 4-component vector of float)
+0:167          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:167            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167              Constant:
+0:167                3 (const int)
+0:167            Constant:
+0:167              0 (const int)
+0:169      move second child to first child ( temp int)
+0:169        direct index ( temp int)
+0:169          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:169            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169              'invocation' ( temp uint)
+0:169            Constant:
+0:169              1 (const int)
+0:169          Constant:
+0:169            0 (const int)
+0:169        subgroupInclusiveMul ( global int)
+0:169          direct index ( temp int)
+0:169            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:169              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169                Constant:
+0:169                  0 (const int)
+0:169              Constant:
+0:169                1 (const int)
+0:169            Constant:
+0:169              0 (const int)
+0:170      move second child to first child ( temp 2-component vector of int)
+0:170        vector swizzle ( temp 2-component vector of int)
+0:170          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:170            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:170              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:170              'invocation' ( temp uint)
+0:170            Constant:
+0:170              1 (const int)
+0:170          Sequence
+0:170            Constant:
+0:170              0 (const int)
+0:170            Constant:
+0:170              1 (const int)
+0:170        subgroupInclusiveMul ( global 2-component vector of int)
+0:170          vector swizzle ( temp 2-component vector of int)
+0:170            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:170              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:170                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:170                Constant:
+0:170                  1 (const int)
+0:170              Constant:
+0:170                1 (const int)
+0:170            Sequence
+0:170              Constant:
+0:170                0 (const int)
+0:170              Constant:
+0:170                1 (const int)
+0:171      move second child to first child ( temp 3-component vector of int)
+0:171        vector swizzle ( temp 3-component vector of int)
+0:171          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:171            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171              'invocation' ( temp uint)
+0:171            Constant:
+0:171              1 (const int)
+0:171          Sequence
+0:171            Constant:
+0:171              0 (const int)
+0:171            Constant:
+0:171              1 (const int)
+0:171            Constant:
+0:171              2 (const int)
+0:171        subgroupInclusiveMul ( global 3-component vector of int)
+0:171          vector swizzle ( temp 3-component vector of int)
+0:171            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:171              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171                Constant:
+0:171                  2 (const int)
+0:171              Constant:
+0:171                1 (const int)
+0:171            Sequence
+0:171              Constant:
+0:171                0 (const int)
+0:171              Constant:
+0:171                1 (const int)
+0:171              Constant:
+0:171                2 (const int)
+0:172      move second child to first child ( temp 4-component vector of int)
+0:172        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:172          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172            'invocation' ( temp uint)
+0:172          Constant:
+0:172            1 (const int)
+0:172        subgroupInclusiveMul ( global 4-component vector of int)
+0:172          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:172            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172              Constant:
+0:172                3 (const int)
+0:172            Constant:
+0:172              1 (const int)
+0:174      move second child to first child ( temp uint)
+0:174        direct index ( temp uint)
+0:174          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:174            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174              'invocation' ( temp uint)
+0:174            Constant:
+0:174              2 (const int)
+0:174          Constant:
+0:174            0 (const int)
+0:174        subgroupInclusiveMul ( global uint)
+0:174          direct index ( temp uint)
+0:174            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:174              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174                Constant:
+0:174                  0 (const int)
+0:174              Constant:
+0:174                2 (const int)
+0:174            Constant:
+0:174              0 (const int)
+0:175      move second child to first child ( temp 2-component vector of uint)
+0:175        vector swizzle ( temp 2-component vector of uint)
+0:175          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:175            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:175              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:175              'invocation' ( temp uint)
+0:175            Constant:
+0:175              2 (const int)
+0:175          Sequence
+0:175            Constant:
+0:175              0 (const int)
+0:175            Constant:
+0:175              1 (const int)
+0:175        subgroupInclusiveMul ( global 2-component vector of uint)
+0:175          vector swizzle ( temp 2-component vector of uint)
+0:175            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:175              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:175                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:175                Constant:
+0:175                  1 (const int)
+0:175              Constant:
+0:175                2 (const int)
+0:175            Sequence
+0:175              Constant:
+0:175                0 (const int)
+0:175              Constant:
+0:175                1 (const int)
+0:176      move second child to first child ( temp 3-component vector of uint)
+0:176        vector swizzle ( temp 3-component vector of uint)
+0:176          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:176            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176              'invocation' ( temp uint)
+0:176            Constant:
+0:176              2 (const int)
+0:176          Sequence
+0:176            Constant:
+0:176              0 (const int)
+0:176            Constant:
+0:176              1 (const int)
+0:176            Constant:
+0:176              2 (const int)
+0:176        subgroupInclusiveMul ( global 3-component vector of uint)
+0:176          vector swizzle ( temp 3-component vector of uint)
+0:176            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:176              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176                Constant:
+0:176                  2 (const int)
+0:176              Constant:
+0:176                2 (const int)
+0:176            Sequence
+0:176              Constant:
+0:176                0 (const int)
+0:176              Constant:
+0:176                1 (const int)
+0:176              Constant:
+0:176                2 (const int)
+0:177      move second child to first child ( temp 4-component vector of uint)
+0:177        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:177          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177            'invocation' ( temp uint)
+0:177          Constant:
+0:177            2 (const int)
+0:177        subgroupInclusiveMul ( global 4-component vector of uint)
+0:177          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:177            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177              Constant:
+0:177                3 (const int)
+0:177            Constant:
+0:177              2 (const int)
+0:179      move second child to first child ( temp double)
+0:179        direct index ( temp double)
+0:179          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:179            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179              'invocation' ( temp uint)
+0:179            Constant:
+0:179              3 (const int)
+0:179          Constant:
+0:179            0 (const int)
+0:179        subgroupInclusiveMul ( global double)
+0:179          direct index ( temp double)
+0:179            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:179              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179                Constant:
+0:179                  0 (const int)
+0:179              Constant:
+0:179                3 (const int)
+0:179            Constant:
+0:179              0 (const int)
+0:180      move second child to first child ( temp 2-component vector of double)
+0:180        vector swizzle ( temp 2-component vector of double)
+0:180          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:180            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:180              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:180              'invocation' ( temp uint)
+0:180            Constant:
+0:180              3 (const int)
+0:180          Sequence
+0:180            Constant:
+0:180              0 (const int)
+0:180            Constant:
+0:180              1 (const int)
+0:180        subgroupInclusiveMul ( global 2-component vector of double)
+0:180          vector swizzle ( temp 2-component vector of double)
+0:180            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:180              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:180                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:180                Constant:
+0:180                  1 (const int)
+0:180              Constant:
+0:180                3 (const int)
+0:180            Sequence
+0:180              Constant:
+0:180                0 (const int)
+0:180              Constant:
+0:180                1 (const int)
+0:181      move second child to first child ( temp 3-component vector of double)
+0:181        vector swizzle ( temp 3-component vector of double)
+0:181          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:181            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181              'invocation' ( temp uint)
+0:181            Constant:
+0:181              3 (const int)
+0:181          Sequence
+0:181            Constant:
+0:181              0 (const int)
+0:181            Constant:
+0:181              1 (const int)
+0:181            Constant:
+0:181              2 (const int)
+0:181        subgroupInclusiveMul ( global 3-component vector of double)
+0:181          vector swizzle ( temp 3-component vector of double)
+0:181            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:181              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181                Constant:
+0:181                  2 (const int)
+0:181              Constant:
+0:181                3 (const int)
+0:181            Sequence
+0:181              Constant:
+0:181                0 (const int)
+0:181              Constant:
+0:181                1 (const int)
+0:181              Constant:
+0:181                2 (const int)
+0:182      move second child to first child ( temp 4-component vector of double)
+0:182        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:182          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182            'invocation' ( temp uint)
+0:182          Constant:
+0:182            3 (const int)
+0:182        subgroupInclusiveMul ( global 4-component vector of double)
+0:182          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:182            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182              Constant:
+0:182                3 (const int)
+0:182            Constant:
+0:182              3 (const int)
+0:184      move second child to first child ( temp float)
+0:184        direct index ( temp float)
+0:184          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:184            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184              'invocation' ( temp uint)
+0:184            Constant:
+0:184              0 (const int)
+0:184          Constant:
+0:184            0 (const int)
+0:184        subgroupInclusiveMin ( global float)
+0:184          direct index ( temp float)
+0:184            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:184              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184                Constant:
+0:184                  0 (const int)
+0:184              Constant:
+0:184                0 (const int)
+0:184            Constant:
+0:184              0 (const int)
+0:185      move second child to first child ( temp 2-component vector of float)
+0:185        vector swizzle ( temp 2-component vector of float)
+0:185          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:185            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:185              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:185              'invocation' ( temp uint)
+0:185            Constant:
+0:185              0 (const int)
+0:185          Sequence
+0:185            Constant:
+0:185              0 (const int)
+0:185            Constant:
+0:185              1 (const int)
+0:185        subgroupInclusiveMin ( global 2-component vector of float)
+0:185          vector swizzle ( temp 2-component vector of float)
+0:185            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:185              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:185                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:185                Constant:
+0:185                  1 (const int)
+0:185              Constant:
+0:185                0 (const int)
+0:185            Sequence
+0:185              Constant:
+0:185                0 (const int)
+0:185              Constant:
+0:185                1 (const int)
+0:186      move second child to first child ( temp 3-component vector of float)
+0:186        vector swizzle ( temp 3-component vector of float)
+0:186          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:186            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186              'invocation' ( temp uint)
+0:186            Constant:
+0:186              0 (const int)
+0:186          Sequence
+0:186            Constant:
+0:186              0 (const int)
+0:186            Constant:
+0:186              1 (const int)
+0:186            Constant:
+0:186              2 (const int)
+0:186        subgroupInclusiveMin ( global 3-component vector of float)
+0:186          vector swizzle ( temp 3-component vector of float)
+0:186            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:186              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186                Constant:
+0:186                  2 (const int)
+0:186              Constant:
+0:186                0 (const int)
+0:186            Sequence
+0:186              Constant:
+0:186                0 (const int)
+0:186              Constant:
+0:186                1 (const int)
+0:186              Constant:
+0:186                2 (const int)
+0:187      move second child to first child ( temp 4-component vector of float)
+0:187        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:187          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187            'invocation' ( temp uint)
+0:187          Constant:
+0:187            0 (const int)
+0:187        subgroupInclusiveMin ( global 4-component vector of float)
+0:187          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:187            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187              Constant:
+0:187                3 (const int)
+0:187            Constant:
+0:187              0 (const int)
+0:189      move second child to first child ( temp int)
+0:189        direct index ( temp int)
+0:189          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:189            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189              'invocation' ( temp uint)
+0:189            Constant:
+0:189              1 (const int)
+0:189          Constant:
+0:189            0 (const int)
+0:189        subgroupInclusiveMin ( global int)
+0:189          direct index ( temp int)
+0:189            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:189              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189                Constant:
+0:189                  0 (const int)
+0:189              Constant:
+0:189                1 (const int)
+0:189            Constant:
+0:189              0 (const int)
+0:190      move second child to first child ( temp 2-component vector of int)
+0:190        vector swizzle ( temp 2-component vector of int)
+0:190          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:190            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:190              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:190              'invocation' ( temp uint)
+0:190            Constant:
+0:190              1 (const int)
+0:190          Sequence
+0:190            Constant:
+0:190              0 (const int)
+0:190            Constant:
+0:190              1 (const int)
+0:190        subgroupInclusiveMin ( global 2-component vector of int)
+0:190          vector swizzle ( temp 2-component vector of int)
+0:190            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:190              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:190                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:190                Constant:
+0:190                  1 (const int)
+0:190              Constant:
+0:190                1 (const int)
+0:190            Sequence
+0:190              Constant:
+0:190                0 (const int)
+0:190              Constant:
+0:190                1 (const int)
+0:191      move second child to first child ( temp 3-component vector of int)
+0:191        vector swizzle ( temp 3-component vector of int)
+0:191          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:191            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191              'invocation' ( temp uint)
+0:191            Constant:
+0:191              1 (const int)
+0:191          Sequence
+0:191            Constant:
+0:191              0 (const int)
+0:191            Constant:
+0:191              1 (const int)
+0:191            Constant:
+0:191              2 (const int)
+0:191        subgroupInclusiveMin ( global 3-component vector of int)
+0:191          vector swizzle ( temp 3-component vector of int)
+0:191            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:191              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191                Constant:
+0:191                  2 (const int)
+0:191              Constant:
+0:191                1 (const int)
+0:191            Sequence
+0:191              Constant:
+0:191                0 (const int)
+0:191              Constant:
+0:191                1 (const int)
+0:191              Constant:
+0:191                2 (const int)
+0:192      move second child to first child ( temp 4-component vector of int)
+0:192        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:192          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192            'invocation' ( temp uint)
+0:192          Constant:
+0:192            1 (const int)
+0:192        subgroupInclusiveMin ( global 4-component vector of int)
+0:192          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:192            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192              Constant:
+0:192                3 (const int)
+0:192            Constant:
+0:192              1 (const int)
+0:194      move second child to first child ( temp uint)
+0:194        direct index ( temp uint)
+0:194          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:194            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194              'invocation' ( temp uint)
+0:194            Constant:
+0:194              2 (const int)
+0:194          Constant:
+0:194            0 (const int)
+0:194        subgroupInclusiveMin ( global uint)
+0:194          direct index ( temp uint)
+0:194            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:194              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194                Constant:
+0:194                  0 (const int)
+0:194              Constant:
+0:194                2 (const int)
+0:194            Constant:
+0:194              0 (const int)
+0:195      move second child to first child ( temp 2-component vector of uint)
+0:195        vector swizzle ( temp 2-component vector of uint)
+0:195          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:195            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:195              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:195              'invocation' ( temp uint)
+0:195            Constant:
+0:195              2 (const int)
+0:195          Sequence
+0:195            Constant:
+0:195              0 (const int)
+0:195            Constant:
+0:195              1 (const int)
+0:195        subgroupInclusiveMin ( global 2-component vector of uint)
+0:195          vector swizzle ( temp 2-component vector of uint)
+0:195            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:195              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:195                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:195                Constant:
+0:195                  1 (const int)
+0:195              Constant:
+0:195                2 (const int)
+0:195            Sequence
+0:195              Constant:
+0:195                0 (const int)
+0:195              Constant:
+0:195                1 (const int)
+0:196      move second child to first child ( temp 3-component vector of uint)
+0:196        vector swizzle ( temp 3-component vector of uint)
+0:196          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:196            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196              'invocation' ( temp uint)
+0:196            Constant:
+0:196              2 (const int)
+0:196          Sequence
+0:196            Constant:
+0:196              0 (const int)
+0:196            Constant:
+0:196              1 (const int)
+0:196            Constant:
+0:196              2 (const int)
+0:196        subgroupInclusiveMin ( global 3-component vector of uint)
+0:196          vector swizzle ( temp 3-component vector of uint)
+0:196            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:196              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196                Constant:
+0:196                  2 (const int)
+0:196              Constant:
+0:196                2 (const int)
+0:196            Sequence
+0:196              Constant:
+0:196                0 (const int)
+0:196              Constant:
+0:196                1 (const int)
+0:196              Constant:
+0:196                2 (const int)
+0:197      move second child to first child ( temp 4-component vector of uint)
+0:197        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:197          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197            'invocation' ( temp uint)
+0:197          Constant:
+0:197            2 (const int)
+0:197        subgroupInclusiveMin ( global 4-component vector of uint)
+0:197          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:197            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197              Constant:
+0:197                3 (const int)
+0:197            Constant:
+0:197              2 (const int)
+0:199      move second child to first child ( temp double)
+0:199        direct index ( temp double)
+0:199          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:199            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199              'invocation' ( temp uint)
+0:199            Constant:
+0:199              3 (const int)
+0:199          Constant:
+0:199            0 (const int)
+0:199        subgroupInclusiveMin ( global double)
+0:199          direct index ( temp double)
+0:199            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:199              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199                Constant:
+0:199                  0 (const int)
+0:199              Constant:
+0:199                3 (const int)
+0:199            Constant:
+0:199              0 (const int)
+0:200      move second child to first child ( temp 2-component vector of double)
+0:200        vector swizzle ( temp 2-component vector of double)
+0:200          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:200            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:200              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:200              'invocation' ( temp uint)
+0:200            Constant:
+0:200              3 (const int)
+0:200          Sequence
+0:200            Constant:
+0:200              0 (const int)
+0:200            Constant:
+0:200              1 (const int)
+0:200        subgroupInclusiveMin ( global 2-component vector of double)
+0:200          vector swizzle ( temp 2-component vector of double)
+0:200            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:200              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:200                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:200                Constant:
+0:200                  1 (const int)
+0:200              Constant:
+0:200                3 (const int)
+0:200            Sequence
+0:200              Constant:
+0:200                0 (const int)
+0:200              Constant:
+0:200                1 (const int)
+0:201      move second child to first child ( temp 3-component vector of double)
+0:201        vector swizzle ( temp 3-component vector of double)
+0:201          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:201            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201              'invocation' ( temp uint)
+0:201            Constant:
+0:201              3 (const int)
+0:201          Sequence
+0:201            Constant:
+0:201              0 (const int)
+0:201            Constant:
+0:201              1 (const int)
+0:201            Constant:
+0:201              2 (const int)
+0:201        subgroupInclusiveMin ( global 3-component vector of double)
+0:201          vector swizzle ( temp 3-component vector of double)
+0:201            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:201              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201                Constant:
+0:201                  2 (const int)
+0:201              Constant:
+0:201                3 (const int)
+0:201            Sequence
+0:201              Constant:
+0:201                0 (const int)
+0:201              Constant:
+0:201                1 (const int)
+0:201              Constant:
+0:201                2 (const int)
+0:202      move second child to first child ( temp 4-component vector of double)
+0:202        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:202          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202            'invocation' ( temp uint)
+0:202          Constant:
+0:202            3 (const int)
+0:202        subgroupInclusiveMin ( global 4-component vector of double)
+0:202          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:202            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202              Constant:
+0:202                3 (const int)
+0:202            Constant:
+0:202              3 (const int)
+0:204      move second child to first child ( temp float)
+0:204        direct index ( temp float)
+0:204          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:204            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204              'invocation' ( temp uint)
+0:204            Constant:
+0:204              0 (const int)
+0:204          Constant:
+0:204            0 (const int)
+0:204        subgroupInclusiveMax ( global float)
+0:204          direct index ( temp float)
+0:204            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:204              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204                Constant:
+0:204                  0 (const int)
+0:204              Constant:
+0:204                0 (const int)
+0:204            Constant:
+0:204              0 (const int)
+0:205      move second child to first child ( temp 2-component vector of float)
+0:205        vector swizzle ( temp 2-component vector of float)
+0:205          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:205            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:205              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:205              'invocation' ( temp uint)
+0:205            Constant:
+0:205              0 (const int)
+0:205          Sequence
+0:205            Constant:
+0:205              0 (const int)
+0:205            Constant:
+0:205              1 (const int)
+0:205        subgroupInclusiveMax ( global 2-component vector of float)
+0:205          vector swizzle ( temp 2-component vector of float)
+0:205            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:205              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:205                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:205                Constant:
+0:205                  1 (const int)
+0:205              Constant:
+0:205                0 (const int)
+0:205            Sequence
+0:205              Constant:
+0:205                0 (const int)
+0:205              Constant:
+0:205                1 (const int)
+0:206      move second child to first child ( temp 3-component vector of float)
+0:206        vector swizzle ( temp 3-component vector of float)
+0:206          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:206            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206              'invocation' ( temp uint)
+0:206            Constant:
+0:206              0 (const int)
+0:206          Sequence
+0:206            Constant:
+0:206              0 (const int)
+0:206            Constant:
+0:206              1 (const int)
+0:206            Constant:
+0:206              2 (const int)
+0:206        subgroupInclusiveMax ( global 3-component vector of float)
+0:206          vector swizzle ( temp 3-component vector of float)
+0:206            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:206              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206                Constant:
+0:206                  2 (const int)
+0:206              Constant:
+0:206                0 (const int)
+0:206            Sequence
+0:206              Constant:
+0:206                0 (const int)
+0:206              Constant:
+0:206                1 (const int)
+0:206              Constant:
+0:206                2 (const int)
+0:207      move second child to first child ( temp 4-component vector of float)
+0:207        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:207          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207            'invocation' ( temp uint)
+0:207          Constant:
+0:207            0 (const int)
+0:207        subgroupInclusiveMax ( global 4-component vector of float)
+0:207          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:207            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207              Constant:
+0:207                3 (const int)
+0:207            Constant:
+0:207              0 (const int)
+0:209      move second child to first child ( temp int)
+0:209        direct index ( temp int)
+0:209          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:209            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209              'invocation' ( temp uint)
+0:209            Constant:
+0:209              1 (const int)
+0:209          Constant:
+0:209            0 (const int)
+0:209        subgroupInclusiveMax ( global int)
+0:209          direct index ( temp int)
+0:209            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:209              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209                Constant:
+0:209                  0 (const int)
+0:209              Constant:
+0:209                1 (const int)
+0:209            Constant:
+0:209              0 (const int)
+0:210      move second child to first child ( temp 2-component vector of int)
+0:210        vector swizzle ( temp 2-component vector of int)
+0:210          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:210            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:210              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:210              'invocation' ( temp uint)
+0:210            Constant:
+0:210              1 (const int)
+0:210          Sequence
+0:210            Constant:
+0:210              0 (const int)
+0:210            Constant:
+0:210              1 (const int)
+0:210        subgroupInclusiveMax ( global 2-component vector of int)
+0:210          vector swizzle ( temp 2-component vector of int)
+0:210            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:210              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:210                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:210                Constant:
+0:210                  1 (const int)
+0:210              Constant:
+0:210                1 (const int)
+0:210            Sequence
+0:210              Constant:
+0:210                0 (const int)
+0:210              Constant:
+0:210                1 (const int)
+0:211      move second child to first child ( temp 3-component vector of int)
+0:211        vector swizzle ( temp 3-component vector of int)
+0:211          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:211            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211              'invocation' ( temp uint)
+0:211            Constant:
+0:211              1 (const int)
+0:211          Sequence
+0:211            Constant:
+0:211              0 (const int)
+0:211            Constant:
+0:211              1 (const int)
+0:211            Constant:
+0:211              2 (const int)
+0:211        subgroupInclusiveMax ( global 3-component vector of int)
+0:211          vector swizzle ( temp 3-component vector of int)
+0:211            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:211              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211                Constant:
+0:211                  2 (const int)
+0:211              Constant:
+0:211                1 (const int)
+0:211            Sequence
+0:211              Constant:
+0:211                0 (const int)
+0:211              Constant:
+0:211                1 (const int)
+0:211              Constant:
+0:211                2 (const int)
+0:212      move second child to first child ( temp 4-component vector of int)
+0:212        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:212          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212            'invocation' ( temp uint)
+0:212          Constant:
+0:212            1 (const int)
+0:212        subgroupInclusiveMax ( global 4-component vector of int)
+0:212          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:212            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212              Constant:
+0:212                3 (const int)
+0:212            Constant:
+0:212              1 (const int)
+0:214      move second child to first child ( temp uint)
+0:214        direct index ( temp uint)
+0:214          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:214            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214              'invocation' ( temp uint)
+0:214            Constant:
+0:214              2 (const int)
+0:214          Constant:
+0:214            0 (const int)
+0:214        subgroupInclusiveMax ( global uint)
+0:214          direct index ( temp uint)
+0:214            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:214              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214                Constant:
+0:214                  0 (const int)
+0:214              Constant:
+0:214                2 (const int)
+0:214            Constant:
+0:214              0 (const int)
+0:215      move second child to first child ( temp 2-component vector of uint)
+0:215        vector swizzle ( temp 2-component vector of uint)
+0:215          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:215            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:215              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:215              'invocation' ( temp uint)
+0:215            Constant:
+0:215              2 (const int)
+0:215          Sequence
+0:215            Constant:
+0:215              0 (const int)
+0:215            Constant:
+0:215              1 (const int)
+0:215        subgroupInclusiveMax ( global 2-component vector of uint)
+0:215          vector swizzle ( temp 2-component vector of uint)
+0:215            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:215              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:215                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:215                Constant:
+0:215                  1 (const int)
+0:215              Constant:
+0:215                2 (const int)
+0:215            Sequence
+0:215              Constant:
+0:215                0 (const int)
+0:215              Constant:
+0:215                1 (const int)
+0:216      move second child to first child ( temp 3-component vector of uint)
+0:216        vector swizzle ( temp 3-component vector of uint)
+0:216          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:216            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216              'invocation' ( temp uint)
+0:216            Constant:
+0:216              2 (const int)
+0:216          Sequence
+0:216            Constant:
+0:216              0 (const int)
+0:216            Constant:
+0:216              1 (const int)
+0:216            Constant:
+0:216              2 (const int)
+0:216        subgroupInclusiveMax ( global 3-component vector of uint)
+0:216          vector swizzle ( temp 3-component vector of uint)
+0:216            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:216              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216                Constant:
+0:216                  2 (const int)
+0:216              Constant:
+0:216                2 (const int)
+0:216            Sequence
+0:216              Constant:
+0:216                0 (const int)
+0:216              Constant:
+0:216                1 (const int)
+0:216              Constant:
+0:216                2 (const int)
+0:217      move second child to first child ( temp 4-component vector of uint)
+0:217        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:217          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217            'invocation' ( temp uint)
+0:217          Constant:
+0:217            2 (const int)
+0:217        subgroupInclusiveMax ( global 4-component vector of uint)
+0:217          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:217            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217              Constant:
+0:217                3 (const int)
+0:217            Constant:
+0:217              2 (const int)
+0:219      move second child to first child ( temp double)
+0:219        direct index ( temp double)
+0:219          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:219            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219              'invocation' ( temp uint)
+0:219            Constant:
+0:219              3 (const int)
+0:219          Constant:
+0:219            0 (const int)
+0:219        subgroupInclusiveMax ( global double)
+0:219          direct index ( temp double)
+0:219            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:219              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219                Constant:
+0:219                  0 (const int)
+0:219              Constant:
+0:219                3 (const int)
+0:219            Constant:
+0:219              0 (const int)
+0:220      move second child to first child ( temp 2-component vector of double)
+0:220        vector swizzle ( temp 2-component vector of double)
+0:220          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:220            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:220              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:220              'invocation' ( temp uint)
+0:220            Constant:
+0:220              3 (const int)
+0:220          Sequence
+0:220            Constant:
+0:220              0 (const int)
+0:220            Constant:
+0:220              1 (const int)
+0:220        subgroupInclusiveMax ( global 2-component vector of double)
+0:220          vector swizzle ( temp 2-component vector of double)
+0:220            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:220              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:220                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:220                Constant:
+0:220                  1 (const int)
+0:220              Constant:
+0:220                3 (const int)
+0:220            Sequence
+0:220              Constant:
+0:220                0 (const int)
+0:220              Constant:
+0:220                1 (const int)
+0:221      move second child to first child ( temp 3-component vector of double)
+0:221        vector swizzle ( temp 3-component vector of double)
+0:221          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:221            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221              'invocation' ( temp uint)
+0:221            Constant:
+0:221              3 (const int)
+0:221          Sequence
+0:221            Constant:
+0:221              0 (const int)
+0:221            Constant:
+0:221              1 (const int)
+0:221            Constant:
+0:221              2 (const int)
+0:221        subgroupInclusiveMax ( global 3-component vector of double)
+0:221          vector swizzle ( temp 3-component vector of double)
+0:221            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:221              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221                Constant:
+0:221                  2 (const int)
+0:221              Constant:
+0:221                3 (const int)
+0:221            Sequence
+0:221              Constant:
+0:221                0 (const int)
+0:221              Constant:
+0:221                1 (const int)
+0:221              Constant:
+0:221                2 (const int)
+0:222      move second child to first child ( temp 4-component vector of double)
+0:222        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:222          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222            'invocation' ( temp uint)
+0:222          Constant:
+0:222            3 (const int)
+0:222        subgroupInclusiveMax ( global 4-component vector of double)
+0:222          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:222            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222              Constant:
+0:222                3 (const int)
+0:222            Constant:
+0:222              3 (const int)
+0:224      move second child to first child ( temp int)
+0:224        direct index ( temp int)
+0:224          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:224            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224              'invocation' ( temp uint)
+0:224            Constant:
+0:224              1 (const int)
+0:224          Constant:
+0:224            0 (const int)
+0:224        subgroupInclusiveAnd ( global int)
+0:224          direct index ( temp int)
+0:224            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:224              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224                Constant:
+0:224                  0 (const int)
+0:224              Constant:
+0:224                1 (const int)
+0:224            Constant:
+0:224              0 (const int)
+0:225      move second child to first child ( temp 2-component vector of int)
+0:225        vector swizzle ( temp 2-component vector of int)
+0:225          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:225            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:225              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:225              'invocation' ( temp uint)
+0:225            Constant:
+0:225              1 (const int)
+0:225          Sequence
+0:225            Constant:
+0:225              0 (const int)
+0:225            Constant:
+0:225              1 (const int)
+0:225        subgroupInclusiveAnd ( global 2-component vector of int)
+0:225          vector swizzle ( temp 2-component vector of int)
+0:225            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:225              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:225                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:225                Constant:
+0:225                  1 (const int)
+0:225              Constant:
+0:225                1 (const int)
+0:225            Sequence
+0:225              Constant:
+0:225                0 (const int)
+0:225              Constant:
+0:225                1 (const int)
+0:226      move second child to first child ( temp 3-component vector of int)
+0:226        vector swizzle ( temp 3-component vector of int)
+0:226          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:226            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226              'invocation' ( temp uint)
+0:226            Constant:
+0:226              1 (const int)
+0:226          Sequence
+0:226            Constant:
+0:226              0 (const int)
+0:226            Constant:
+0:226              1 (const int)
+0:226            Constant:
+0:226              2 (const int)
+0:226        subgroupInclusiveAnd ( global 3-component vector of int)
+0:226          vector swizzle ( temp 3-component vector of int)
+0:226            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:226              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226                Constant:
+0:226                  2 (const int)
+0:226              Constant:
+0:226                1 (const int)
+0:226            Sequence
+0:226              Constant:
+0:226                0 (const int)
+0:226              Constant:
+0:226                1 (const int)
+0:226              Constant:
+0:226                2 (const int)
+0:227      move second child to first child ( temp 4-component vector of int)
+0:227        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:227          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227            'invocation' ( temp uint)
+0:227          Constant:
+0:227            1 (const int)
+0:227        subgroupInclusiveAnd ( global 4-component vector of int)
+0:227          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:227            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227              Constant:
+0:227                3 (const int)
+0:227            Constant:
+0:227              1 (const int)
+0:229      move second child to first child ( temp uint)
+0:229        direct index ( temp uint)
+0:229          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:229            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229              'invocation' ( temp uint)
+0:229            Constant:
+0:229              2 (const int)
+0:229          Constant:
+0:229            0 (const int)
+0:229        subgroupInclusiveAnd ( global uint)
+0:229          direct index ( temp uint)
+0:229            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:229              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229                Constant:
+0:229                  0 (const int)
+0:229              Constant:
+0:229                2 (const int)
+0:229            Constant:
+0:229              0 (const int)
+0:230      move second child to first child ( temp 2-component vector of uint)
+0:230        vector swizzle ( temp 2-component vector of uint)
+0:230          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:230            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:230              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:230              'invocation' ( temp uint)
+0:230            Constant:
+0:230              2 (const int)
+0:230          Sequence
+0:230            Constant:
+0:230              0 (const int)
+0:230            Constant:
+0:230              1 (const int)
+0:230        subgroupInclusiveAnd ( global 2-component vector of uint)
+0:230          vector swizzle ( temp 2-component vector of uint)
+0:230            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:230              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:230                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:230                Constant:
+0:230                  1 (const int)
+0:230              Constant:
+0:230                2 (const int)
+0:230            Sequence
+0:230              Constant:
+0:230                0 (const int)
+0:230              Constant:
+0:230                1 (const int)
+0:231      move second child to first child ( temp 3-component vector of uint)
+0:231        vector swizzle ( temp 3-component vector of uint)
+0:231          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:231            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231              'invocation' ( temp uint)
+0:231            Constant:
+0:231              2 (const int)
+0:231          Sequence
+0:231            Constant:
+0:231              0 (const int)
+0:231            Constant:
+0:231              1 (const int)
+0:231            Constant:
+0:231              2 (const int)
+0:231        subgroupInclusiveAnd ( global 3-component vector of uint)
+0:231          vector swizzle ( temp 3-component vector of uint)
+0:231            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:231              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231                Constant:
+0:231                  2 (const int)
+0:231              Constant:
+0:231                2 (const int)
+0:231            Sequence
+0:231              Constant:
+0:231                0 (const int)
+0:231              Constant:
+0:231                1 (const int)
+0:231              Constant:
+0:231                2 (const int)
+0:232      move second child to first child ( temp 4-component vector of uint)
+0:232        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:232          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232            'invocation' ( temp uint)
+0:232          Constant:
+0:232            2 (const int)
+0:232        subgroupInclusiveAnd ( global 4-component vector of uint)
+0:232          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:232            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232              Constant:
+0:232                3 (const int)
+0:232            Constant:
+0:232              2 (const int)
+0:234      move second child to first child ( temp int)
+0:234        direct index ( temp int)
+0:234          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:234            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234              'invocation' ( temp uint)
+0:234            Constant:
+0:234              1 (const int)
+0:234          Constant:
+0:234            0 (const int)
+0:234        Convert bool to int ( temp int)
+0:234          subgroupInclusiveAnd ( global bool)
+0:234            Compare Less Than ( temp bool)
+0:234              direct index ( temp int)
+0:234                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:234                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234                    Constant:
+0:234                      0 (const int)
+0:234                  Constant:
+0:234                    1 (const int)
+0:234                Constant:
+0:234                  0 (const int)
+0:234              Constant:
+0:234                0 (const int)
+0:235      move second child to first child ( temp 2-component vector of int)
+0:235        vector swizzle ( temp 2-component vector of int)
+0:235          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:235            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:235              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:235              'invocation' ( temp uint)
+0:235            Constant:
+0:235              1 (const int)
+0:235          Sequence
+0:235            Constant:
+0:235              0 (const int)
+0:235            Constant:
+0:235              1 (const int)
+0:235        Convert bool to int ( temp 2-component vector of int)
+0:235          subgroupInclusiveAnd ( global 2-component vector of bool)
+0:235            Compare Less Than ( global 2-component vector of bool)
+0:235              vector swizzle ( temp 2-component vector of int)
+0:235                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:235                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:235                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:235                    Constant:
+0:235                      1 (const int)
+0:235                  Constant:
+0:235                    1 (const int)
+0:235                Sequence
+0:235                  Constant:
+0:235                    0 (const int)
+0:235                  Constant:
+0:235                    1 (const int)
+0:235              Constant:
+0:235                0 (const int)
+0:235                0 (const int)
+0:236      move second child to first child ( temp 3-component vector of int)
+0:236        vector swizzle ( temp 3-component vector of int)
+0:236          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:236            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236              'invocation' ( temp uint)
+0:236            Constant:
+0:236              1 (const int)
+0:236          Sequence
+0:236            Constant:
+0:236              0 (const int)
+0:236            Constant:
+0:236              1 (const int)
+0:236            Constant:
+0:236              2 (const int)
+0:236        Convert bool to int ( temp 3-component vector of int)
+0:236          subgroupInclusiveAnd ( global 3-component vector of bool)
+0:236            Compare Less Than ( global 3-component vector of bool)
+0:236              vector swizzle ( temp 3-component vector of int)
+0:236                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:236                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236                    Constant:
+0:236                      1 (const int)
+0:236                  Constant:
+0:236                    1 (const int)
+0:236                Sequence
+0:236                  Constant:
+0:236                    0 (const int)
+0:236                  Constant:
+0:236                    1 (const int)
+0:236                  Constant:
+0:236                    2 (const int)
+0:236              Constant:
+0:236                0 (const int)
+0:236                0 (const int)
+0:236                0 (const int)
+0:237      move second child to first child ( temp 4-component vector of int)
+0:237        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:237          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237            'invocation' ( temp uint)
+0:237          Constant:
+0:237            1 (const int)
+0:237        Convert bool to int ( temp 4-component vector of int)
+0:237          subgroupInclusiveAnd ( global 4-component vector of bool)
+0:237            Compare Less Than ( global 4-component vector of bool)
+0:237              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:237                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237                  Constant:
+0:237                    1 (const int)
+0:237                Constant:
+0:237                  1 (const int)
+0:237              Constant:
+0:237                0 (const int)
+0:237                0 (const int)
+0:237                0 (const int)
+0:237                0 (const int)
+0:239      move second child to first child ( temp int)
+0:239        direct index ( temp int)
+0:239          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:239            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239              'invocation' ( temp uint)
+0:239            Constant:
+0:239              1 (const int)
+0:239          Constant:
+0:239            0 (const int)
+0:239        subgroupInclusiveOr ( global int)
+0:239          direct index ( temp int)
+0:239            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:239              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239                Constant:
+0:239                  0 (const int)
+0:239              Constant:
+0:239                1 (const int)
+0:239            Constant:
+0:239              0 (const int)
+0:240      move second child to first child ( temp 2-component vector of int)
+0:240        vector swizzle ( temp 2-component vector of int)
+0:240          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:240            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:240              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:240              'invocation' ( temp uint)
+0:240            Constant:
+0:240              1 (const int)
+0:240          Sequence
+0:240            Constant:
+0:240              0 (const int)
+0:240            Constant:
+0:240              1 (const int)
+0:240        subgroupInclusiveOr ( global 2-component vector of int)
+0:240          vector swizzle ( temp 2-component vector of int)
+0:240            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:240              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:240                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:240                Constant:
+0:240                  1 (const int)
+0:240              Constant:
+0:240                1 (const int)
+0:240            Sequence
+0:240              Constant:
+0:240                0 (const int)
+0:240              Constant:
+0:240                1 (const int)
+0:241      move second child to first child ( temp 3-component vector of int)
+0:241        vector swizzle ( temp 3-component vector of int)
+0:241          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:241            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241              'invocation' ( temp uint)
+0:241            Constant:
+0:241              1 (const int)
+0:241          Sequence
+0:241            Constant:
+0:241              0 (const int)
+0:241            Constant:
+0:241              1 (const int)
+0:241            Constant:
+0:241              2 (const int)
+0:241        subgroupInclusiveOr ( global 3-component vector of int)
+0:241          vector swizzle ( temp 3-component vector of int)
+0:241            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:241              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241                Constant:
+0:241                  2 (const int)
+0:241              Constant:
+0:241                1 (const int)
+0:241            Sequence
+0:241              Constant:
+0:241                0 (const int)
+0:241              Constant:
+0:241                1 (const int)
+0:241              Constant:
+0:241                2 (const int)
+0:242      move second child to first child ( temp 4-component vector of int)
+0:242        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:242          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242            'invocation' ( temp uint)
+0:242          Constant:
+0:242            1 (const int)
+0:242        subgroupInclusiveOr ( global 4-component vector of int)
+0:242          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:242            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242              Constant:
+0:242                3 (const int)
+0:242            Constant:
+0:242              1 (const int)
+0:244      move second child to first child ( temp uint)
+0:244        direct index ( temp uint)
+0:244          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:244            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244              'invocation' ( temp uint)
+0:244            Constant:
+0:244              2 (const int)
+0:244          Constant:
+0:244            0 (const int)
+0:244        subgroupInclusiveOr ( global uint)
+0:244          direct index ( temp uint)
+0:244            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:244              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244                Constant:
+0:244                  0 (const int)
+0:244              Constant:
+0:244                2 (const int)
+0:244            Constant:
+0:244              0 (const int)
+0:245      move second child to first child ( temp 2-component vector of uint)
+0:245        vector swizzle ( temp 2-component vector of uint)
+0:245          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:245            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:245              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:245              'invocation' ( temp uint)
+0:245            Constant:
+0:245              2 (const int)
+0:245          Sequence
+0:245            Constant:
+0:245              0 (const int)
+0:245            Constant:
+0:245              1 (const int)
+0:245        subgroupInclusiveOr ( global 2-component vector of uint)
+0:245          vector swizzle ( temp 2-component vector of uint)
+0:245            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:245              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:245                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:245                Constant:
+0:245                  1 (const int)
+0:245              Constant:
+0:245                2 (const int)
+0:245            Sequence
+0:245              Constant:
+0:245                0 (const int)
+0:245              Constant:
+0:245                1 (const int)
+0:246      move second child to first child ( temp 3-component vector of uint)
+0:246        vector swizzle ( temp 3-component vector of uint)
+0:246          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:246            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246              'invocation' ( temp uint)
+0:246            Constant:
+0:246              2 (const int)
+0:246          Sequence
+0:246            Constant:
+0:246              0 (const int)
+0:246            Constant:
+0:246              1 (const int)
+0:246            Constant:
+0:246              2 (const int)
+0:246        subgroupInclusiveOr ( global 3-component vector of uint)
+0:246          vector swizzle ( temp 3-component vector of uint)
+0:246            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:246              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246                Constant:
+0:246                  2 (const int)
+0:246              Constant:
+0:246                2 (const int)
+0:246            Sequence
+0:246              Constant:
+0:246                0 (const int)
+0:246              Constant:
+0:246                1 (const int)
+0:246              Constant:
+0:246                2 (const int)
+0:247      move second child to first child ( temp 4-component vector of uint)
+0:247        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:247          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247            'invocation' ( temp uint)
+0:247          Constant:
+0:247            2 (const int)
+0:247        subgroupInclusiveOr ( global 4-component vector of uint)
+0:247          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:247            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247              Constant:
+0:247                3 (const int)
+0:247            Constant:
+0:247              2 (const int)
+0:249      move second child to first child ( temp int)
+0:249        direct index ( temp int)
+0:249          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:249            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249              'invocation' ( temp uint)
+0:249            Constant:
+0:249              1 (const int)
+0:249          Constant:
+0:249            0 (const int)
+0:249        Convert bool to int ( temp int)
+0:249          subgroupInclusiveOr ( global bool)
+0:249            Compare Less Than ( temp bool)
+0:249              direct index ( temp int)
+0:249                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:249                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249                    Constant:
+0:249                      0 (const int)
+0:249                  Constant:
+0:249                    1 (const int)
+0:249                Constant:
+0:249                  0 (const int)
+0:249              Constant:
+0:249                0 (const int)
+0:250      move second child to first child ( temp 2-component vector of int)
+0:250        vector swizzle ( temp 2-component vector of int)
+0:250          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:250            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:250              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:250              'invocation' ( temp uint)
+0:250            Constant:
+0:250              1 (const int)
+0:250          Sequence
+0:250            Constant:
+0:250              0 (const int)
+0:250            Constant:
+0:250              1 (const int)
+0:250        Convert bool to int ( temp 2-component vector of int)
+0:250          subgroupInclusiveOr ( global 2-component vector of bool)
+0:250            Compare Less Than ( global 2-component vector of bool)
+0:250              vector swizzle ( temp 2-component vector of int)
+0:250                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:250                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:250                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:250                    Constant:
+0:250                      1 (const int)
+0:250                  Constant:
+0:250                    1 (const int)
+0:250                Sequence
+0:250                  Constant:
+0:250                    0 (const int)
+0:250                  Constant:
+0:250                    1 (const int)
+0:250              Constant:
+0:250                0 (const int)
+0:250                0 (const int)
+0:251      move second child to first child ( temp 3-component vector of int)
+0:251        vector swizzle ( temp 3-component vector of int)
+0:251          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:251            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251              'invocation' ( temp uint)
+0:251            Constant:
+0:251              1 (const int)
+0:251          Sequence
+0:251            Constant:
+0:251              0 (const int)
+0:251            Constant:
+0:251              1 (const int)
+0:251            Constant:
+0:251              2 (const int)
+0:251        Convert bool to int ( temp 3-component vector of int)
+0:251          subgroupInclusiveOr ( global 3-component vector of bool)
+0:251            Compare Less Than ( global 3-component vector of bool)
+0:251              vector swizzle ( temp 3-component vector of int)
+0:251                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:251                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251                    Constant:
+0:251                      1 (const int)
+0:251                  Constant:
+0:251                    1 (const int)
+0:251                Sequence
+0:251                  Constant:
+0:251                    0 (const int)
+0:251                  Constant:
+0:251                    1 (const int)
+0:251                  Constant:
+0:251                    2 (const int)
+0:251              Constant:
+0:251                0 (const int)
+0:251                0 (const int)
+0:251                0 (const int)
+0:252      move second child to first child ( temp 4-component vector of int)
+0:252        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:252          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252            'invocation' ( temp uint)
+0:252          Constant:
+0:252            1 (const int)
+0:252        Convert bool to int ( temp 4-component vector of int)
+0:252          subgroupInclusiveOr ( global 4-component vector of bool)
+0:252            Compare Less Than ( global 4-component vector of bool)
+0:252              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:252                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252                  Constant:
+0:252                    1 (const int)
+0:252                Constant:
+0:252                  1 (const int)
+0:252              Constant:
+0:252                0 (const int)
+0:252                0 (const int)
+0:252                0 (const int)
+0:252                0 (const int)
+0:254      move second child to first child ( temp int)
+0:254        direct index ( temp int)
+0:254          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:254            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254              'invocation' ( temp uint)
+0:254            Constant:
+0:254              1 (const int)
+0:254          Constant:
+0:254            0 (const int)
+0:254        subgroupInclusiveXor ( global int)
+0:254          direct index ( temp int)
+0:254            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:254              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254                Constant:
+0:254                  0 (const int)
+0:254              Constant:
+0:254                1 (const int)
+0:254            Constant:
+0:254              0 (const int)
+0:255      move second child to first child ( temp 2-component vector of int)
+0:255        vector swizzle ( temp 2-component vector of int)
+0:255          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:255            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:255              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:255              'invocation' ( temp uint)
+0:255            Constant:
+0:255              1 (const int)
+0:255          Sequence
+0:255            Constant:
+0:255              0 (const int)
+0:255            Constant:
+0:255              1 (const int)
+0:255        subgroupInclusiveXor ( global 2-component vector of int)
+0:255          vector swizzle ( temp 2-component vector of int)
+0:255            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:255              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:255                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:255                Constant:
+0:255                  1 (const int)
+0:255              Constant:
+0:255                1 (const int)
+0:255            Sequence
+0:255              Constant:
+0:255                0 (const int)
+0:255              Constant:
+0:255                1 (const int)
+0:256      move second child to first child ( temp 3-component vector of int)
+0:256        vector swizzle ( temp 3-component vector of int)
+0:256          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:256            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256              'invocation' ( temp uint)
+0:256            Constant:
+0:256              1 (const int)
+0:256          Sequence
+0:256            Constant:
+0:256              0 (const int)
+0:256            Constant:
+0:256              1 (const int)
+0:256            Constant:
+0:256              2 (const int)
+0:256        subgroupInclusiveXor ( global 3-component vector of int)
+0:256          vector swizzle ( temp 3-component vector of int)
+0:256            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:256              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256                Constant:
+0:256                  2 (const int)
+0:256              Constant:
+0:256                1 (const int)
+0:256            Sequence
+0:256              Constant:
+0:256                0 (const int)
+0:256              Constant:
+0:256                1 (const int)
+0:256              Constant:
+0:256                2 (const int)
+0:257      move second child to first child ( temp 4-component vector of int)
+0:257        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:257          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257            'invocation' ( temp uint)
+0:257          Constant:
+0:257            1 (const int)
+0:257        subgroupInclusiveXor ( global 4-component vector of int)
+0:257          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:257            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257              Constant:
+0:257                3 (const int)
+0:257            Constant:
+0:257              1 (const int)
+0:259      move second child to first child ( temp uint)
+0:259        direct index ( temp uint)
+0:259          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:259            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259              'invocation' ( temp uint)
+0:259            Constant:
+0:259              2 (const int)
+0:259          Constant:
+0:259            0 (const int)
+0:259        subgroupInclusiveXor ( global uint)
+0:259          direct index ( temp uint)
+0:259            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:259              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259                Constant:
+0:259                  0 (const int)
+0:259              Constant:
+0:259                2 (const int)
+0:259            Constant:
+0:259              0 (const int)
+0:260      move second child to first child ( temp 2-component vector of uint)
+0:260        vector swizzle ( temp 2-component vector of uint)
+0:260          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:260            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:260              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:260              'invocation' ( temp uint)
+0:260            Constant:
+0:260              2 (const int)
+0:260          Sequence
+0:260            Constant:
+0:260              0 (const int)
+0:260            Constant:
+0:260              1 (const int)
+0:260        subgroupInclusiveXor ( global 2-component vector of uint)
+0:260          vector swizzle ( temp 2-component vector of uint)
+0:260            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:260              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:260                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:260                Constant:
+0:260                  1 (const int)
+0:260              Constant:
+0:260                2 (const int)
+0:260            Sequence
+0:260              Constant:
+0:260                0 (const int)
+0:260              Constant:
+0:260                1 (const int)
+0:261      move second child to first child ( temp 3-component vector of uint)
+0:261        vector swizzle ( temp 3-component vector of uint)
+0:261          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:261            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261              'invocation' ( temp uint)
+0:261            Constant:
+0:261              2 (const int)
+0:261          Sequence
+0:261            Constant:
+0:261              0 (const int)
+0:261            Constant:
+0:261              1 (const int)
+0:261            Constant:
+0:261              2 (const int)
+0:261        subgroupInclusiveXor ( global 3-component vector of uint)
+0:261          vector swizzle ( temp 3-component vector of uint)
+0:261            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:261              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261                Constant:
+0:261                  2 (const int)
+0:261              Constant:
+0:261                2 (const int)
+0:261            Sequence
+0:261              Constant:
+0:261                0 (const int)
+0:261              Constant:
+0:261                1 (const int)
+0:261              Constant:
+0:261                2 (const int)
+0:262      move second child to first child ( temp 4-component vector of uint)
+0:262        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:262          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262            'invocation' ( temp uint)
+0:262          Constant:
+0:262            2 (const int)
+0:262        subgroupInclusiveXor ( global 4-component vector of uint)
+0:262          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:262            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262              Constant:
+0:262                3 (const int)
+0:262            Constant:
+0:262              2 (const int)
+0:264      move second child to first child ( temp int)
+0:264        direct index ( temp int)
+0:264          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:264            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264              'invocation' ( temp uint)
+0:264            Constant:
+0:264              1 (const int)
+0:264          Constant:
+0:264            0 (const int)
+0:264        Convert bool to int ( temp int)
+0:264          subgroupInclusiveXor ( global bool)
+0:264            Compare Less Than ( temp bool)
+0:264              direct index ( temp int)
+0:264                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:264                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264                    Constant:
+0:264                      0 (const int)
+0:264                  Constant:
+0:264                    1 (const int)
+0:264                Constant:
+0:264                  0 (const int)
+0:264              Constant:
+0:264                0 (const int)
+0:265      move second child to first child ( temp 2-component vector of int)
+0:265        vector swizzle ( temp 2-component vector of int)
+0:265          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:265            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:265              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:265              'invocation' ( temp uint)
+0:265            Constant:
+0:265              1 (const int)
+0:265          Sequence
+0:265            Constant:
+0:265              0 (const int)
+0:265            Constant:
+0:265              1 (const int)
+0:265        Convert bool to int ( temp 2-component vector of int)
+0:265          subgroupInclusiveXor ( global 2-component vector of bool)
+0:265            Compare Less Than ( global 2-component vector of bool)
+0:265              vector swizzle ( temp 2-component vector of int)
+0:265                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:265                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:265                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:265                    Constant:
+0:265                      1 (const int)
+0:265                  Constant:
+0:265                    1 (const int)
+0:265                Sequence
+0:265                  Constant:
+0:265                    0 (const int)
+0:265                  Constant:
+0:265                    1 (const int)
+0:265              Constant:
+0:265                0 (const int)
+0:265                0 (const int)
+0:266      move second child to first child ( temp 3-component vector of int)
+0:266        vector swizzle ( temp 3-component vector of int)
+0:266          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:266            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266              'invocation' ( temp uint)
+0:266            Constant:
+0:266              1 (const int)
+0:266          Sequence
+0:266            Constant:
+0:266              0 (const int)
+0:266            Constant:
+0:266              1 (const int)
+0:266            Constant:
+0:266              2 (const int)
+0:266        Convert bool to int ( temp 3-component vector of int)
+0:266          subgroupInclusiveXor ( global 3-component vector of bool)
+0:266            Compare Less Than ( global 3-component vector of bool)
+0:266              vector swizzle ( temp 3-component vector of int)
+0:266                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:266                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266                    Constant:
+0:266                      1 (const int)
+0:266                  Constant:
+0:266                    1 (const int)
+0:266                Sequence
+0:266                  Constant:
+0:266                    0 (const int)
+0:266                  Constant:
+0:266                    1 (const int)
+0:266                  Constant:
+0:266                    2 (const int)
+0:266              Constant:
+0:266                0 (const int)
+0:266                0 (const int)
+0:266                0 (const int)
+0:267      move second child to first child ( temp 4-component vector of int)
+0:267        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:267          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267            'invocation' ( temp uint)
+0:267          Constant:
+0:267            1 (const int)
+0:267        Convert bool to int ( temp 4-component vector of int)
+0:267          subgroupInclusiveXor ( global 4-component vector of bool)
+0:267            Compare Less Than ( global 4-component vector of bool)
+0:267              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:267                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267                  Constant:
+0:267                    1 (const int)
+0:267                Constant:
+0:267                  1 (const int)
+0:267              Constant:
+0:267                0 (const int)
+0:267                0 (const int)
+0:267                0 (const int)
+0:267                0 (const int)
+0:269      move second child to first child ( temp float)
+0:269        direct index ( temp float)
+0:269          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:269            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269              'invocation' ( temp uint)
+0:269            Constant:
+0:269              0 (const int)
+0:269          Constant:
+0:269            0 (const int)
+0:269        subgroupExclusiveAdd ( global float)
+0:269          direct index ( temp float)
+0:269            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:269              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269                Constant:
+0:269                  0 (const int)
+0:269              Constant:
+0:269                0 (const int)
+0:269            Constant:
+0:269              0 (const int)
+0:270      move second child to first child ( temp 2-component vector of float)
+0:270        vector swizzle ( temp 2-component vector of float)
+0:270          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:270            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:270              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:270              'invocation' ( temp uint)
+0:270            Constant:
+0:270              0 (const int)
+0:270          Sequence
+0:270            Constant:
+0:270              0 (const int)
+0:270            Constant:
+0:270              1 (const int)
+0:270        subgroupExclusiveAdd ( global 2-component vector of float)
+0:270          vector swizzle ( temp 2-component vector of float)
+0:270            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:270              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:270                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:270                Constant:
+0:270                  1 (const int)
+0:270              Constant:
+0:270                0 (const int)
+0:270            Sequence
+0:270              Constant:
+0:270                0 (const int)
+0:270              Constant:
+0:270                1 (const int)
+0:271      move second child to first child ( temp 3-component vector of float)
+0:271        vector swizzle ( temp 3-component vector of float)
+0:271          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:271            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271              'invocation' ( temp uint)
+0:271            Constant:
+0:271              0 (const int)
+0:271          Sequence
+0:271            Constant:
+0:271              0 (const int)
+0:271            Constant:
+0:271              1 (const int)
+0:271            Constant:
+0:271              2 (const int)
+0:271        subgroupExclusiveAdd ( global 3-component vector of float)
+0:271          vector swizzle ( temp 3-component vector of float)
+0:271            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:271              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271                Constant:
+0:271                  2 (const int)
+0:271              Constant:
+0:271                0 (const int)
+0:271            Sequence
+0:271              Constant:
+0:271                0 (const int)
+0:271              Constant:
+0:271                1 (const int)
+0:271              Constant:
+0:271                2 (const int)
+0:272      move second child to first child ( temp 4-component vector of float)
+0:272        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:272          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272            'invocation' ( temp uint)
+0:272          Constant:
+0:272            0 (const int)
+0:272        subgroupExclusiveAdd ( global 4-component vector of float)
+0:272          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:272            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272              Constant:
+0:272                3 (const int)
+0:272            Constant:
+0:272              0 (const int)
+0:274      move second child to first child ( temp int)
+0:274        direct index ( temp int)
+0:274          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:274            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274              'invocation' ( temp uint)
+0:274            Constant:
+0:274              1 (const int)
+0:274          Constant:
+0:274            0 (const int)
+0:274        subgroupExclusiveAdd ( global int)
+0:274          direct index ( temp int)
+0:274            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:274              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274                Constant:
+0:274                  0 (const int)
+0:274              Constant:
+0:274                1 (const int)
+0:274            Constant:
+0:274              0 (const int)
+0:275      move second child to first child ( temp 2-component vector of int)
+0:275        vector swizzle ( temp 2-component vector of int)
+0:275          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:275            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:275              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:275              'invocation' ( temp uint)
+0:275            Constant:
+0:275              1 (const int)
+0:275          Sequence
+0:275            Constant:
+0:275              0 (const int)
+0:275            Constant:
+0:275              1 (const int)
+0:275        subgroupExclusiveAdd ( global 2-component vector of int)
+0:275          vector swizzle ( temp 2-component vector of int)
+0:275            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:275              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:275                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:275                Constant:
+0:275                  1 (const int)
+0:275              Constant:
+0:275                1 (const int)
+0:275            Sequence
+0:275              Constant:
+0:275                0 (const int)
+0:275              Constant:
+0:275                1 (const int)
+0:276      move second child to first child ( temp 3-component vector of int)
+0:276        vector swizzle ( temp 3-component vector of int)
+0:276          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:276            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276              'invocation' ( temp uint)
+0:276            Constant:
+0:276              1 (const int)
+0:276          Sequence
+0:276            Constant:
+0:276              0 (const int)
+0:276            Constant:
+0:276              1 (const int)
+0:276            Constant:
+0:276              2 (const int)
+0:276        subgroupExclusiveAdd ( global 3-component vector of int)
+0:276          vector swizzle ( temp 3-component vector of int)
+0:276            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:276              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276                Constant:
+0:276                  2 (const int)
+0:276              Constant:
+0:276                1 (const int)
+0:276            Sequence
+0:276              Constant:
+0:276                0 (const int)
+0:276              Constant:
+0:276                1 (const int)
+0:276              Constant:
+0:276                2 (const int)
+0:277      move second child to first child ( temp 4-component vector of int)
+0:277        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:277          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277            'invocation' ( temp uint)
+0:277          Constant:
+0:277            1 (const int)
+0:277        subgroupExclusiveAdd ( global 4-component vector of int)
+0:277          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:277            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277              Constant:
+0:277                3 (const int)
+0:277            Constant:
+0:277              1 (const int)
+0:279      move second child to first child ( temp uint)
+0:279        direct index ( temp uint)
+0:279          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:279            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279              'invocation' ( temp uint)
+0:279            Constant:
+0:279              2 (const int)
+0:279          Constant:
+0:279            0 (const int)
+0:279        subgroupExclusiveAdd ( global uint)
+0:279          direct index ( temp uint)
+0:279            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:279              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279                Constant:
+0:279                  0 (const int)
+0:279              Constant:
+0:279                2 (const int)
+0:279            Constant:
+0:279              0 (const int)
+0:280      move second child to first child ( temp 2-component vector of uint)
+0:280        vector swizzle ( temp 2-component vector of uint)
+0:280          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:280            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:280              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:280              'invocation' ( temp uint)
+0:280            Constant:
+0:280              2 (const int)
+0:280          Sequence
+0:280            Constant:
+0:280              0 (const int)
+0:280            Constant:
+0:280              1 (const int)
+0:280        subgroupExclusiveAdd ( global 2-component vector of uint)
+0:280          vector swizzle ( temp 2-component vector of uint)
+0:280            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:280              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:280                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:280                Constant:
+0:280                  1 (const int)
+0:280              Constant:
+0:280                2 (const int)
+0:280            Sequence
+0:280              Constant:
+0:280                0 (const int)
+0:280              Constant:
+0:280                1 (const int)
+0:281      move second child to first child ( temp 3-component vector of uint)
+0:281        vector swizzle ( temp 3-component vector of uint)
+0:281          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:281            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281              'invocation' ( temp uint)
+0:281            Constant:
+0:281              2 (const int)
+0:281          Sequence
+0:281            Constant:
+0:281              0 (const int)
+0:281            Constant:
+0:281              1 (const int)
+0:281            Constant:
+0:281              2 (const int)
+0:281        subgroupExclusiveAdd ( global 3-component vector of uint)
+0:281          vector swizzle ( temp 3-component vector of uint)
+0:281            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:281              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281                Constant:
+0:281                  2 (const int)
+0:281              Constant:
+0:281                2 (const int)
+0:281            Sequence
+0:281              Constant:
+0:281                0 (const int)
+0:281              Constant:
+0:281                1 (const int)
+0:281              Constant:
+0:281                2 (const int)
+0:282      move second child to first child ( temp 4-component vector of uint)
+0:282        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:282          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282            'invocation' ( temp uint)
+0:282          Constant:
+0:282            2 (const int)
+0:282        subgroupExclusiveAdd ( global 4-component vector of uint)
+0:282          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:282            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282              Constant:
+0:282                3 (const int)
+0:282            Constant:
+0:282              2 (const int)
+0:284      move second child to first child ( temp double)
+0:284        direct index ( temp double)
+0:284          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:284            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284              'invocation' ( temp uint)
+0:284            Constant:
+0:284              3 (const int)
+0:284          Constant:
+0:284            0 (const int)
+0:284        subgroupExclusiveAdd ( global double)
+0:284          direct index ( temp double)
+0:284            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:284              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284                Constant:
+0:284                  0 (const int)
+0:284              Constant:
+0:284                3 (const int)
+0:284            Constant:
+0:284              0 (const int)
+0:285      move second child to first child ( temp 2-component vector of double)
+0:285        vector swizzle ( temp 2-component vector of double)
+0:285          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:285            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:285              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:285              'invocation' ( temp uint)
+0:285            Constant:
+0:285              3 (const int)
+0:285          Sequence
+0:285            Constant:
+0:285              0 (const int)
+0:285            Constant:
+0:285              1 (const int)
+0:285        subgroupExclusiveAdd ( global 2-component vector of double)
+0:285          vector swizzle ( temp 2-component vector of double)
+0:285            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:285              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:285                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:285                Constant:
+0:285                  1 (const int)
+0:285              Constant:
+0:285                3 (const int)
+0:285            Sequence
+0:285              Constant:
+0:285                0 (const int)
+0:285              Constant:
+0:285                1 (const int)
+0:286      move second child to first child ( temp 3-component vector of double)
+0:286        vector swizzle ( temp 3-component vector of double)
+0:286          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:286            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286              'invocation' ( temp uint)
+0:286            Constant:
+0:286              3 (const int)
+0:286          Sequence
+0:286            Constant:
+0:286              0 (const int)
+0:286            Constant:
+0:286              1 (const int)
+0:286            Constant:
+0:286              2 (const int)
+0:286        subgroupExclusiveAdd ( global 3-component vector of double)
+0:286          vector swizzle ( temp 3-component vector of double)
+0:286            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:286              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286                Constant:
+0:286                  2 (const int)
+0:286              Constant:
+0:286                3 (const int)
+0:286            Sequence
+0:286              Constant:
+0:286                0 (const int)
+0:286              Constant:
+0:286                1 (const int)
+0:286              Constant:
+0:286                2 (const int)
+0:287      move second child to first child ( temp 4-component vector of double)
+0:287        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:287          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287            'invocation' ( temp uint)
+0:287          Constant:
+0:287            3 (const int)
+0:287        subgroupExclusiveAdd ( global 4-component vector of double)
+0:287          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:287            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287              Constant:
+0:287                3 (const int)
+0:287            Constant:
+0:287              3 (const int)
+0:289      move second child to first child ( temp float)
+0:289        direct index ( temp float)
+0:289          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:289            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289              'invocation' ( temp uint)
+0:289            Constant:
+0:289              0 (const int)
+0:289          Constant:
+0:289            0 (const int)
+0:289        subgroupExclusiveMul ( global float)
+0:289          direct index ( temp float)
+0:289            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:289              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289                Constant:
+0:289                  0 (const int)
+0:289              Constant:
+0:289                0 (const int)
+0:289            Constant:
+0:289              0 (const int)
+0:290      move second child to first child ( temp 2-component vector of float)
+0:290        vector swizzle ( temp 2-component vector of float)
+0:290          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:290            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:290              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:290              'invocation' ( temp uint)
+0:290            Constant:
+0:290              0 (const int)
+0:290          Sequence
+0:290            Constant:
+0:290              0 (const int)
+0:290            Constant:
+0:290              1 (const int)
+0:290        subgroupExclusiveMul ( global 2-component vector of float)
+0:290          vector swizzle ( temp 2-component vector of float)
+0:290            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:290              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:290                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:290                Constant:
+0:290                  1 (const int)
+0:290              Constant:
+0:290                0 (const int)
+0:290            Sequence
+0:290              Constant:
+0:290                0 (const int)
+0:290              Constant:
+0:290                1 (const int)
+0:291      move second child to first child ( temp 3-component vector of float)
+0:291        vector swizzle ( temp 3-component vector of float)
+0:291          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:291            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291              'invocation' ( temp uint)
+0:291            Constant:
+0:291              0 (const int)
+0:291          Sequence
+0:291            Constant:
+0:291              0 (const int)
+0:291            Constant:
+0:291              1 (const int)
+0:291            Constant:
+0:291              2 (const int)
+0:291        subgroupExclusiveMul ( global 3-component vector of float)
+0:291          vector swizzle ( temp 3-component vector of float)
+0:291            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:291              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291                Constant:
+0:291                  2 (const int)
+0:291              Constant:
+0:291                0 (const int)
+0:291            Sequence
+0:291              Constant:
+0:291                0 (const int)
+0:291              Constant:
+0:291                1 (const int)
+0:291              Constant:
+0:291                2 (const int)
+0:292      move second child to first child ( temp 4-component vector of float)
+0:292        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:292          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292            'invocation' ( temp uint)
+0:292          Constant:
+0:292            0 (const int)
+0:292        subgroupExclusiveMul ( global 4-component vector of float)
+0:292          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:292            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292              Constant:
+0:292                3 (const int)
+0:292            Constant:
+0:292              0 (const int)
+0:294      move second child to first child ( temp int)
+0:294        direct index ( temp int)
+0:294          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:294            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294              'invocation' ( temp uint)
+0:294            Constant:
+0:294              1 (const int)
+0:294          Constant:
+0:294            0 (const int)
+0:294        subgroupExclusiveMul ( global int)
+0:294          direct index ( temp int)
+0:294            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:294              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294                Constant:
+0:294                  0 (const int)
+0:294              Constant:
+0:294                1 (const int)
+0:294            Constant:
+0:294              0 (const int)
+0:295      move second child to first child ( temp 2-component vector of int)
+0:295        vector swizzle ( temp 2-component vector of int)
+0:295          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:295            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:295              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:295              'invocation' ( temp uint)
+0:295            Constant:
+0:295              1 (const int)
+0:295          Sequence
+0:295            Constant:
+0:295              0 (const int)
+0:295            Constant:
+0:295              1 (const int)
+0:295        subgroupExclusiveMul ( global 2-component vector of int)
+0:295          vector swizzle ( temp 2-component vector of int)
+0:295            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:295              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:295                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:295                Constant:
+0:295                  1 (const int)
+0:295              Constant:
+0:295                1 (const int)
+0:295            Sequence
+0:295              Constant:
+0:295                0 (const int)
+0:295              Constant:
+0:295                1 (const int)
+0:296      move second child to first child ( temp 3-component vector of int)
+0:296        vector swizzle ( temp 3-component vector of int)
+0:296          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:296            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296              'invocation' ( temp uint)
+0:296            Constant:
+0:296              1 (const int)
+0:296          Sequence
+0:296            Constant:
+0:296              0 (const int)
+0:296            Constant:
+0:296              1 (const int)
+0:296            Constant:
+0:296              2 (const int)
+0:296        subgroupExclusiveMul ( global 3-component vector of int)
+0:296          vector swizzle ( temp 3-component vector of int)
+0:296            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:296              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296                Constant:
+0:296                  2 (const int)
+0:296              Constant:
+0:296                1 (const int)
+0:296            Sequence
+0:296              Constant:
+0:296                0 (const int)
+0:296              Constant:
+0:296                1 (const int)
+0:296              Constant:
+0:296                2 (const int)
+0:297      move second child to first child ( temp 4-component vector of int)
+0:297        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:297          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297            'invocation' ( temp uint)
+0:297          Constant:
+0:297            1 (const int)
+0:297        subgroupExclusiveMul ( global 4-component vector of int)
+0:297          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:297            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297              Constant:
+0:297                3 (const int)
+0:297            Constant:
+0:297              1 (const int)
+0:299      move second child to first child ( temp uint)
+0:299        direct index ( temp uint)
+0:299          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:299            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299              'invocation' ( temp uint)
+0:299            Constant:
+0:299              2 (const int)
+0:299          Constant:
+0:299            0 (const int)
+0:299        subgroupExclusiveMul ( global uint)
+0:299          direct index ( temp uint)
+0:299            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:299              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299                Constant:
+0:299                  0 (const int)
+0:299              Constant:
+0:299                2 (const int)
+0:299            Constant:
+0:299              0 (const int)
+0:300      move second child to first child ( temp 2-component vector of uint)
+0:300        vector swizzle ( temp 2-component vector of uint)
+0:300          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:300            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:300              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:300              'invocation' ( temp uint)
+0:300            Constant:
+0:300              2 (const int)
+0:300          Sequence
+0:300            Constant:
+0:300              0 (const int)
+0:300            Constant:
+0:300              1 (const int)
+0:300        subgroupExclusiveMul ( global 2-component vector of uint)
+0:300          vector swizzle ( temp 2-component vector of uint)
+0:300            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:300              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:300                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:300                Constant:
+0:300                  1 (const int)
+0:300              Constant:
+0:300                2 (const int)
+0:300            Sequence
+0:300              Constant:
+0:300                0 (const int)
+0:300              Constant:
+0:300                1 (const int)
+0:301      move second child to first child ( temp 3-component vector of uint)
+0:301        vector swizzle ( temp 3-component vector of uint)
+0:301          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:301            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301              'invocation' ( temp uint)
+0:301            Constant:
+0:301              2 (const int)
+0:301          Sequence
+0:301            Constant:
+0:301              0 (const int)
+0:301            Constant:
+0:301              1 (const int)
+0:301            Constant:
+0:301              2 (const int)
+0:301        subgroupExclusiveMul ( global 3-component vector of uint)
+0:301          vector swizzle ( temp 3-component vector of uint)
+0:301            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:301              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301                Constant:
+0:301                  2 (const int)
+0:301              Constant:
+0:301                2 (const int)
+0:301            Sequence
+0:301              Constant:
+0:301                0 (const int)
+0:301              Constant:
+0:301                1 (const int)
+0:301              Constant:
+0:301                2 (const int)
+0:302      move second child to first child ( temp 4-component vector of uint)
+0:302        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:302          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302            'invocation' ( temp uint)
+0:302          Constant:
+0:302            2 (const int)
+0:302        subgroupExclusiveMul ( global 4-component vector of uint)
+0:302          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:302            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302              Constant:
+0:302                3 (const int)
+0:302            Constant:
+0:302              2 (const int)
+0:304      move second child to first child ( temp double)
+0:304        direct index ( temp double)
+0:304          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:304            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304              'invocation' ( temp uint)
+0:304            Constant:
+0:304              3 (const int)
+0:304          Constant:
+0:304            0 (const int)
+0:304        subgroupExclusiveMul ( global double)
+0:304          direct index ( temp double)
+0:304            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:304              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304                Constant:
+0:304                  0 (const int)
+0:304              Constant:
+0:304                3 (const int)
+0:304            Constant:
+0:304              0 (const int)
+0:305      move second child to first child ( temp 2-component vector of double)
+0:305        vector swizzle ( temp 2-component vector of double)
+0:305          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:305            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:305              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:305              'invocation' ( temp uint)
+0:305            Constant:
+0:305              3 (const int)
+0:305          Sequence
+0:305            Constant:
+0:305              0 (const int)
+0:305            Constant:
+0:305              1 (const int)
+0:305        subgroupExclusiveMul ( global 2-component vector of double)
+0:305          vector swizzle ( temp 2-component vector of double)
+0:305            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:305              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:305                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:305                Constant:
+0:305                  1 (const int)
+0:305              Constant:
+0:305                3 (const int)
+0:305            Sequence
+0:305              Constant:
+0:305                0 (const int)
+0:305              Constant:
+0:305                1 (const int)
+0:306      move second child to first child ( temp 3-component vector of double)
+0:306        vector swizzle ( temp 3-component vector of double)
+0:306          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:306            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306              'invocation' ( temp uint)
+0:306            Constant:
+0:306              3 (const int)
+0:306          Sequence
+0:306            Constant:
+0:306              0 (const int)
+0:306            Constant:
+0:306              1 (const int)
+0:306            Constant:
+0:306              2 (const int)
+0:306        subgroupExclusiveMul ( global 3-component vector of double)
+0:306          vector swizzle ( temp 3-component vector of double)
+0:306            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:306              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306                Constant:
+0:306                  2 (const int)
+0:306              Constant:
+0:306                3 (const int)
+0:306            Sequence
+0:306              Constant:
+0:306                0 (const int)
+0:306              Constant:
+0:306                1 (const int)
+0:306              Constant:
+0:306                2 (const int)
+0:307      move second child to first child ( temp 4-component vector of double)
+0:307        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:307          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307            'invocation' ( temp uint)
+0:307          Constant:
+0:307            3 (const int)
+0:307        subgroupExclusiveMul ( global 4-component vector of double)
+0:307          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:307            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307              Constant:
+0:307                3 (const int)
+0:307            Constant:
+0:307              3 (const int)
+0:309      move second child to first child ( temp float)
+0:309        direct index ( temp float)
+0:309          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:309            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309              'invocation' ( temp uint)
+0:309            Constant:
+0:309              0 (const int)
+0:309          Constant:
+0:309            0 (const int)
+0:309        subgroupExclusiveMin ( global float)
+0:309          direct index ( temp float)
+0:309            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:309              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309                Constant:
+0:309                  0 (const int)
+0:309              Constant:
+0:309                0 (const int)
+0:309            Constant:
+0:309              0 (const int)
+0:310      move second child to first child ( temp 2-component vector of float)
+0:310        vector swizzle ( temp 2-component vector of float)
+0:310          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:310            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:310              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:310              'invocation' ( temp uint)
+0:310            Constant:
+0:310              0 (const int)
+0:310          Sequence
+0:310            Constant:
+0:310              0 (const int)
+0:310            Constant:
+0:310              1 (const int)
+0:310        subgroupExclusiveMin ( global 2-component vector of float)
+0:310          vector swizzle ( temp 2-component vector of float)
+0:310            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:310              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:310                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:310                Constant:
+0:310                  1 (const int)
+0:310              Constant:
+0:310                0 (const int)
+0:310            Sequence
+0:310              Constant:
+0:310                0 (const int)
+0:310              Constant:
+0:310                1 (const int)
+0:311      move second child to first child ( temp 3-component vector of float)
+0:311        vector swizzle ( temp 3-component vector of float)
+0:311          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:311            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311              'invocation' ( temp uint)
+0:311            Constant:
+0:311              0 (const int)
+0:311          Sequence
+0:311            Constant:
+0:311              0 (const int)
+0:311            Constant:
+0:311              1 (const int)
+0:311            Constant:
+0:311              2 (const int)
+0:311        subgroupExclusiveMin ( global 3-component vector of float)
+0:311          vector swizzle ( temp 3-component vector of float)
+0:311            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:311              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311                Constant:
+0:311                  2 (const int)
+0:311              Constant:
+0:311                0 (const int)
+0:311            Sequence
+0:311              Constant:
+0:311                0 (const int)
+0:311              Constant:
+0:311                1 (const int)
+0:311              Constant:
+0:311                2 (const int)
+0:312      move second child to first child ( temp 4-component vector of float)
+0:312        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:312          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312            'invocation' ( temp uint)
+0:312          Constant:
+0:312            0 (const int)
+0:312        subgroupExclusiveMin ( global 4-component vector of float)
+0:312          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:312            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312              Constant:
+0:312                3 (const int)
+0:312            Constant:
+0:312              0 (const int)
+0:314      move second child to first child ( temp int)
+0:314        direct index ( temp int)
+0:314          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:314            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314              'invocation' ( temp uint)
+0:314            Constant:
+0:314              1 (const int)
+0:314          Constant:
+0:314            0 (const int)
+0:314        subgroupExclusiveMin ( global int)
+0:314          direct index ( temp int)
+0:314            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:314              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314                Constant:
+0:314                  0 (const int)
+0:314              Constant:
+0:314                1 (const int)
+0:314            Constant:
+0:314              0 (const int)
+0:315      move second child to first child ( temp 2-component vector of int)
+0:315        vector swizzle ( temp 2-component vector of int)
+0:315          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:315            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:315              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:315              'invocation' ( temp uint)
+0:315            Constant:
+0:315              1 (const int)
+0:315          Sequence
+0:315            Constant:
+0:315              0 (const int)
+0:315            Constant:
+0:315              1 (const int)
+0:315        subgroupExclusiveMin ( global 2-component vector of int)
+0:315          vector swizzle ( temp 2-component vector of int)
+0:315            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:315              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:315                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:315                Constant:
+0:315                  1 (const int)
+0:315              Constant:
+0:315                1 (const int)
+0:315            Sequence
+0:315              Constant:
+0:315                0 (const int)
+0:315              Constant:
+0:315                1 (const int)
+0:316      move second child to first child ( temp 3-component vector of int)
+0:316        vector swizzle ( temp 3-component vector of int)
+0:316          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:316            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316              'invocation' ( temp uint)
+0:316            Constant:
+0:316              1 (const int)
+0:316          Sequence
+0:316            Constant:
+0:316              0 (const int)
+0:316            Constant:
+0:316              1 (const int)
+0:316            Constant:
+0:316              2 (const int)
+0:316        subgroupExclusiveMin ( global 3-component vector of int)
+0:316          vector swizzle ( temp 3-component vector of int)
+0:316            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:316              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316                Constant:
+0:316                  2 (const int)
+0:316              Constant:
+0:316                1 (const int)
+0:316            Sequence
+0:316              Constant:
+0:316                0 (const int)
+0:316              Constant:
+0:316                1 (const int)
+0:316              Constant:
+0:316                2 (const int)
+0:317      move second child to first child ( temp 4-component vector of int)
+0:317        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:317          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317            'invocation' ( temp uint)
+0:317          Constant:
+0:317            1 (const int)
+0:317        subgroupExclusiveMin ( global 4-component vector of int)
+0:317          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:317            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317              Constant:
+0:317                3 (const int)
+0:317            Constant:
+0:317              1 (const int)
+0:319      move second child to first child ( temp uint)
+0:319        direct index ( temp uint)
+0:319          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:319            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319              'invocation' ( temp uint)
+0:319            Constant:
+0:319              2 (const int)
+0:319          Constant:
+0:319            0 (const int)
+0:319        subgroupExclusiveMin ( global uint)
+0:319          direct index ( temp uint)
+0:319            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:319              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319                Constant:
+0:319                  0 (const int)
+0:319              Constant:
+0:319                2 (const int)
+0:319            Constant:
+0:319              0 (const int)
+0:320      move second child to first child ( temp 2-component vector of uint)
+0:320        vector swizzle ( temp 2-component vector of uint)
+0:320          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:320            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:320              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:320              'invocation' ( temp uint)
+0:320            Constant:
+0:320              2 (const int)
+0:320          Sequence
+0:320            Constant:
+0:320              0 (const int)
+0:320            Constant:
+0:320              1 (const int)
+0:320        subgroupExclusiveMin ( global 2-component vector of uint)
+0:320          vector swizzle ( temp 2-component vector of uint)
+0:320            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:320              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:320                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:320                Constant:
+0:320                  1 (const int)
+0:320              Constant:
+0:320                2 (const int)
+0:320            Sequence
+0:320              Constant:
+0:320                0 (const int)
+0:320              Constant:
+0:320                1 (const int)
+0:321      move second child to first child ( temp 3-component vector of uint)
+0:321        vector swizzle ( temp 3-component vector of uint)
+0:321          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:321            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321              'invocation' ( temp uint)
+0:321            Constant:
+0:321              2 (const int)
+0:321          Sequence
+0:321            Constant:
+0:321              0 (const int)
+0:321            Constant:
+0:321              1 (const int)
+0:321            Constant:
+0:321              2 (const int)
+0:321        subgroupExclusiveMin ( global 3-component vector of uint)
+0:321          vector swizzle ( temp 3-component vector of uint)
+0:321            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:321              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321                Constant:
+0:321                  2 (const int)
+0:321              Constant:
+0:321                2 (const int)
+0:321            Sequence
+0:321              Constant:
+0:321                0 (const int)
+0:321              Constant:
+0:321                1 (const int)
+0:321              Constant:
+0:321                2 (const int)
+0:322      move second child to first child ( temp 4-component vector of uint)
+0:322        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:322          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322            'invocation' ( temp uint)
+0:322          Constant:
+0:322            2 (const int)
+0:322        subgroupExclusiveMin ( global 4-component vector of uint)
+0:322          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:322            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322              Constant:
+0:322                3 (const int)
+0:322            Constant:
+0:322              2 (const int)
+0:324      move second child to first child ( temp double)
+0:324        direct index ( temp double)
+0:324          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:324            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324              'invocation' ( temp uint)
+0:324            Constant:
+0:324              3 (const int)
+0:324          Constant:
+0:324            0 (const int)
+0:324        subgroupExclusiveMin ( global double)
+0:324          direct index ( temp double)
+0:324            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:324              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324                Constant:
+0:324                  0 (const int)
+0:324              Constant:
+0:324                3 (const int)
+0:324            Constant:
+0:324              0 (const int)
+0:325      move second child to first child ( temp 2-component vector of double)
+0:325        vector swizzle ( temp 2-component vector of double)
+0:325          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:325            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:325              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:325              'invocation' ( temp uint)
+0:325            Constant:
+0:325              3 (const int)
+0:325          Sequence
+0:325            Constant:
+0:325              0 (const int)
+0:325            Constant:
+0:325              1 (const int)
+0:325        subgroupExclusiveMin ( global 2-component vector of double)
+0:325          vector swizzle ( temp 2-component vector of double)
+0:325            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:325              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:325                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:325                Constant:
+0:325                  1 (const int)
+0:325              Constant:
+0:325                3 (const int)
+0:325            Sequence
+0:325              Constant:
+0:325                0 (const int)
+0:325              Constant:
+0:325                1 (const int)
+0:326      move second child to first child ( temp 3-component vector of double)
+0:326        vector swizzle ( temp 3-component vector of double)
+0:326          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:326            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326              'invocation' ( temp uint)
+0:326            Constant:
+0:326              3 (const int)
+0:326          Sequence
+0:326            Constant:
+0:326              0 (const int)
+0:326            Constant:
+0:326              1 (const int)
+0:326            Constant:
+0:326              2 (const int)
+0:326        subgroupExclusiveMin ( global 3-component vector of double)
+0:326          vector swizzle ( temp 3-component vector of double)
+0:326            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:326              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326                Constant:
+0:326                  2 (const int)
+0:326              Constant:
+0:326                3 (const int)
+0:326            Sequence
+0:326              Constant:
+0:326                0 (const int)
+0:326              Constant:
+0:326                1 (const int)
+0:326              Constant:
+0:326                2 (const int)
+0:327      move second child to first child ( temp 4-component vector of double)
+0:327        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:327          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327            'invocation' ( temp uint)
+0:327          Constant:
+0:327            3 (const int)
+0:327        subgroupExclusiveMin ( global 4-component vector of double)
+0:327          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:327            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327              Constant:
+0:327                3 (const int)
+0:327            Constant:
+0:327              3 (const int)
+0:329      move second child to first child ( temp float)
+0:329        direct index ( temp float)
+0:329          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:329            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329              'invocation' ( temp uint)
+0:329            Constant:
+0:329              0 (const int)
+0:329          Constant:
+0:329            0 (const int)
+0:329        subgroupExclusiveMax ( global float)
+0:329          direct index ( temp float)
+0:329            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:329              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329                Constant:
+0:329                  0 (const int)
+0:329              Constant:
+0:329                0 (const int)
+0:329            Constant:
+0:329              0 (const int)
+0:330      move second child to first child ( temp 2-component vector of float)
+0:330        vector swizzle ( temp 2-component vector of float)
+0:330          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:330            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:330              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:330              'invocation' ( temp uint)
+0:330            Constant:
+0:330              0 (const int)
+0:330          Sequence
+0:330            Constant:
+0:330              0 (const int)
+0:330            Constant:
+0:330              1 (const int)
+0:330        subgroupExclusiveMax ( global 2-component vector of float)
+0:330          vector swizzle ( temp 2-component vector of float)
+0:330            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:330              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:330                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:330                Constant:
+0:330                  1 (const int)
+0:330              Constant:
+0:330                0 (const int)
+0:330            Sequence
+0:330              Constant:
+0:330                0 (const int)
+0:330              Constant:
+0:330                1 (const int)
+0:331      move second child to first child ( temp 3-component vector of float)
+0:331        vector swizzle ( temp 3-component vector of float)
+0:331          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:331            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331              'invocation' ( temp uint)
+0:331            Constant:
+0:331              0 (const int)
+0:331          Sequence
+0:331            Constant:
+0:331              0 (const int)
+0:331            Constant:
+0:331              1 (const int)
+0:331            Constant:
+0:331              2 (const int)
+0:331        subgroupExclusiveMax ( global 3-component vector of float)
+0:331          vector swizzle ( temp 3-component vector of float)
+0:331            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:331              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331                Constant:
+0:331                  2 (const int)
+0:331              Constant:
+0:331                0 (const int)
+0:331            Sequence
+0:331              Constant:
+0:331                0 (const int)
+0:331              Constant:
+0:331                1 (const int)
+0:331              Constant:
+0:331                2 (const int)
+0:332      move second child to first child ( temp 4-component vector of float)
+0:332        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:332          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332            'invocation' ( temp uint)
+0:332          Constant:
+0:332            0 (const int)
+0:332        subgroupExclusiveMax ( global 4-component vector of float)
+0:332          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:332            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332              Constant:
+0:332                3 (const int)
+0:332            Constant:
+0:332              0 (const int)
+0:334      move second child to first child ( temp int)
+0:334        direct index ( temp int)
+0:334          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:334            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334              'invocation' ( temp uint)
+0:334            Constant:
+0:334              1 (const int)
+0:334          Constant:
+0:334            0 (const int)
+0:334        subgroupExclusiveMax ( global int)
+0:334          direct index ( temp int)
+0:334            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:334              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334                Constant:
+0:334                  0 (const int)
+0:334              Constant:
+0:334                1 (const int)
+0:334            Constant:
+0:334              0 (const int)
+0:335      move second child to first child ( temp 2-component vector of int)
+0:335        vector swizzle ( temp 2-component vector of int)
+0:335          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:335            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:335              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:335              'invocation' ( temp uint)
+0:335            Constant:
+0:335              1 (const int)
+0:335          Sequence
+0:335            Constant:
+0:335              0 (const int)
+0:335            Constant:
+0:335              1 (const int)
+0:335        subgroupExclusiveMax ( global 2-component vector of int)
+0:335          vector swizzle ( temp 2-component vector of int)
+0:335            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:335              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:335                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:335                Constant:
+0:335                  1 (const int)
+0:335              Constant:
+0:335                1 (const int)
+0:335            Sequence
+0:335              Constant:
+0:335                0 (const int)
+0:335              Constant:
+0:335                1 (const int)
+0:336      move second child to first child ( temp 3-component vector of int)
+0:336        vector swizzle ( temp 3-component vector of int)
+0:336          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:336            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336              'invocation' ( temp uint)
+0:336            Constant:
+0:336              1 (const int)
+0:336          Sequence
+0:336            Constant:
+0:336              0 (const int)
+0:336            Constant:
+0:336              1 (const int)
+0:336            Constant:
+0:336              2 (const int)
+0:336        subgroupExclusiveMax ( global 3-component vector of int)
+0:336          vector swizzle ( temp 3-component vector of int)
+0:336            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:336              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336                Constant:
+0:336                  2 (const int)
+0:336              Constant:
+0:336                1 (const int)
+0:336            Sequence
+0:336              Constant:
+0:336                0 (const int)
+0:336              Constant:
+0:336                1 (const int)
+0:336              Constant:
+0:336                2 (const int)
+0:337      move second child to first child ( temp 4-component vector of int)
+0:337        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:337          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337            'invocation' ( temp uint)
+0:337          Constant:
+0:337            1 (const int)
+0:337        subgroupExclusiveMax ( global 4-component vector of int)
+0:337          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:337            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337              Constant:
+0:337                3 (const int)
+0:337            Constant:
+0:337              1 (const int)
+0:339      move second child to first child ( temp uint)
+0:339        direct index ( temp uint)
+0:339          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:339            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339              'invocation' ( temp uint)
+0:339            Constant:
+0:339              2 (const int)
+0:339          Constant:
+0:339            0 (const int)
+0:339        subgroupExclusiveMax ( global uint)
+0:339          direct index ( temp uint)
+0:339            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:339              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339                Constant:
+0:339                  0 (const int)
+0:339              Constant:
+0:339                2 (const int)
+0:339            Constant:
+0:339              0 (const int)
+0:340      move second child to first child ( temp 2-component vector of uint)
+0:340        vector swizzle ( temp 2-component vector of uint)
+0:340          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:340            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:340              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:340              'invocation' ( temp uint)
+0:340            Constant:
+0:340              2 (const int)
+0:340          Sequence
+0:340            Constant:
+0:340              0 (const int)
+0:340            Constant:
+0:340              1 (const int)
+0:340        subgroupExclusiveMax ( global 2-component vector of uint)
+0:340          vector swizzle ( temp 2-component vector of uint)
+0:340            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:340              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:340                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:340                Constant:
+0:340                  1 (const int)
+0:340              Constant:
+0:340                2 (const int)
+0:340            Sequence
+0:340              Constant:
+0:340                0 (const int)
+0:340              Constant:
+0:340                1 (const int)
+0:341      move second child to first child ( temp 3-component vector of uint)
+0:341        vector swizzle ( temp 3-component vector of uint)
+0:341          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:341            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341              'invocation' ( temp uint)
+0:341            Constant:
+0:341              2 (const int)
+0:341          Sequence
+0:341            Constant:
+0:341              0 (const int)
+0:341            Constant:
+0:341              1 (const int)
+0:341            Constant:
+0:341              2 (const int)
+0:341        subgroupExclusiveMax ( global 3-component vector of uint)
+0:341          vector swizzle ( temp 3-component vector of uint)
+0:341            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:341              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341                Constant:
+0:341                  2 (const int)
+0:341              Constant:
+0:341                2 (const int)
+0:341            Sequence
+0:341              Constant:
+0:341                0 (const int)
+0:341              Constant:
+0:341                1 (const int)
+0:341              Constant:
+0:341                2 (const int)
+0:342      move second child to first child ( temp 4-component vector of uint)
+0:342        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:342          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342            'invocation' ( temp uint)
+0:342          Constant:
+0:342            2 (const int)
+0:342        subgroupExclusiveMax ( global 4-component vector of uint)
+0:342          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:342            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342              Constant:
+0:342                3 (const int)
+0:342            Constant:
+0:342              2 (const int)
+0:344      move second child to first child ( temp double)
+0:344        direct index ( temp double)
+0:344          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:344            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344              'invocation' ( temp uint)
+0:344            Constant:
+0:344              3 (const int)
+0:344          Constant:
+0:344            0 (const int)
+0:344        subgroupExclusiveMax ( global double)
+0:344          direct index ( temp double)
+0:344            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:344              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344                Constant:
+0:344                  0 (const int)
+0:344              Constant:
+0:344                3 (const int)
+0:344            Constant:
+0:344              0 (const int)
+0:345      move second child to first child ( temp 2-component vector of double)
+0:345        vector swizzle ( temp 2-component vector of double)
+0:345          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:345            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:345              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:345              'invocation' ( temp uint)
+0:345            Constant:
+0:345              3 (const int)
+0:345          Sequence
+0:345            Constant:
+0:345              0 (const int)
+0:345            Constant:
+0:345              1 (const int)
+0:345        subgroupExclusiveMax ( global 2-component vector of double)
+0:345          vector swizzle ( temp 2-component vector of double)
+0:345            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:345              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:345                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:345                Constant:
+0:345                  1 (const int)
+0:345              Constant:
+0:345                3 (const int)
+0:345            Sequence
+0:345              Constant:
+0:345                0 (const int)
+0:345              Constant:
+0:345                1 (const int)
+0:346      move second child to first child ( temp 3-component vector of double)
+0:346        vector swizzle ( temp 3-component vector of double)
+0:346          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:346            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346              'invocation' ( temp uint)
+0:346            Constant:
+0:346              3 (const int)
+0:346          Sequence
+0:346            Constant:
+0:346              0 (const int)
+0:346            Constant:
+0:346              1 (const int)
+0:346            Constant:
+0:346              2 (const int)
+0:346        subgroupExclusiveMax ( global 3-component vector of double)
+0:346          vector swizzle ( temp 3-component vector of double)
+0:346            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:346              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346                Constant:
+0:346                  2 (const int)
+0:346              Constant:
+0:346                3 (const int)
+0:346            Sequence
+0:346              Constant:
+0:346                0 (const int)
+0:346              Constant:
+0:346                1 (const int)
+0:346              Constant:
+0:346                2 (const int)
+0:347      move second child to first child ( temp 4-component vector of double)
+0:347        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:347          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347            'invocation' ( temp uint)
+0:347          Constant:
+0:347            3 (const int)
+0:347        subgroupExclusiveMax ( global 4-component vector of double)
+0:347          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:347            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347              Constant:
+0:347                3 (const int)
+0:347            Constant:
+0:347              3 (const int)
+0:349      move second child to first child ( temp int)
+0:349        direct index ( temp int)
+0:349          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:349            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349              'invocation' ( temp uint)
+0:349            Constant:
+0:349              1 (const int)
+0:349          Constant:
+0:349            0 (const int)
+0:349        subgroupExclusiveAnd ( global int)
+0:349          direct index ( temp int)
+0:349            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:349              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349                Constant:
+0:349                  0 (const int)
+0:349              Constant:
+0:349                1 (const int)
+0:349            Constant:
+0:349              0 (const int)
+0:350      move second child to first child ( temp 2-component vector of int)
+0:350        vector swizzle ( temp 2-component vector of int)
+0:350          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:350            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:350              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:350              'invocation' ( temp uint)
+0:350            Constant:
+0:350              1 (const int)
+0:350          Sequence
+0:350            Constant:
+0:350              0 (const int)
+0:350            Constant:
+0:350              1 (const int)
+0:350        subgroupExclusiveAnd ( global 2-component vector of int)
+0:350          vector swizzle ( temp 2-component vector of int)
+0:350            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:350              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:350                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:350                Constant:
+0:350                  1 (const int)
+0:350              Constant:
+0:350                1 (const int)
+0:350            Sequence
+0:350              Constant:
+0:350                0 (const int)
+0:350              Constant:
+0:350                1 (const int)
+0:351      move second child to first child ( temp 3-component vector of int)
+0:351        vector swizzle ( temp 3-component vector of int)
+0:351          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:351            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351              'invocation' ( temp uint)
+0:351            Constant:
+0:351              1 (const int)
+0:351          Sequence
+0:351            Constant:
+0:351              0 (const int)
+0:351            Constant:
+0:351              1 (const int)
+0:351            Constant:
+0:351              2 (const int)
+0:351        subgroupExclusiveAnd ( global 3-component vector of int)
+0:351          vector swizzle ( temp 3-component vector of int)
+0:351            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:351              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351                Constant:
+0:351                  2 (const int)
+0:351              Constant:
+0:351                1 (const int)
+0:351            Sequence
+0:351              Constant:
+0:351                0 (const int)
+0:351              Constant:
+0:351                1 (const int)
+0:351              Constant:
+0:351                2 (const int)
+0:352      move second child to first child ( temp 4-component vector of int)
+0:352        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:352          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352            'invocation' ( temp uint)
+0:352          Constant:
+0:352            1 (const int)
+0:352        subgroupExclusiveAnd ( global 4-component vector of int)
+0:352          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:352            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352              Constant:
+0:352                3 (const int)
+0:352            Constant:
+0:352              1 (const int)
+0:354      move second child to first child ( temp uint)
+0:354        direct index ( temp uint)
+0:354          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:354            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354              'invocation' ( temp uint)
+0:354            Constant:
+0:354              2 (const int)
+0:354          Constant:
+0:354            0 (const int)
+0:354        subgroupExclusiveAnd ( global uint)
+0:354          direct index ( temp uint)
+0:354            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:354              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354                Constant:
+0:354                  0 (const int)
+0:354              Constant:
+0:354                2 (const int)
+0:354            Constant:
+0:354              0 (const int)
+0:355      move second child to first child ( temp 2-component vector of uint)
+0:355        vector swizzle ( temp 2-component vector of uint)
+0:355          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:355            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:355              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:355              'invocation' ( temp uint)
+0:355            Constant:
+0:355              2 (const int)
+0:355          Sequence
+0:355            Constant:
+0:355              0 (const int)
+0:355            Constant:
+0:355              1 (const int)
+0:355        subgroupExclusiveAnd ( global 2-component vector of uint)
+0:355          vector swizzle ( temp 2-component vector of uint)
+0:355            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:355              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:355                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:355                Constant:
+0:355                  1 (const int)
+0:355              Constant:
+0:355                2 (const int)
+0:355            Sequence
+0:355              Constant:
+0:355                0 (const int)
+0:355              Constant:
+0:355                1 (const int)
+0:356      move second child to first child ( temp 3-component vector of uint)
+0:356        vector swizzle ( temp 3-component vector of uint)
+0:356          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:356            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356              'invocation' ( temp uint)
+0:356            Constant:
+0:356              2 (const int)
+0:356          Sequence
+0:356            Constant:
+0:356              0 (const int)
+0:356            Constant:
+0:356              1 (const int)
+0:356            Constant:
+0:356              2 (const int)
+0:356        subgroupExclusiveAnd ( global 3-component vector of uint)
+0:356          vector swizzle ( temp 3-component vector of uint)
+0:356            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:356              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356                Constant:
+0:356                  2 (const int)
+0:356              Constant:
+0:356                2 (const int)
+0:356            Sequence
+0:356              Constant:
+0:356                0 (const int)
+0:356              Constant:
+0:356                1 (const int)
+0:356              Constant:
+0:356                2 (const int)
+0:357      move second child to first child ( temp 4-component vector of uint)
+0:357        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:357          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357            'invocation' ( temp uint)
+0:357          Constant:
+0:357            2 (const int)
+0:357        subgroupExclusiveAnd ( global 4-component vector of uint)
+0:357          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:357            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357              Constant:
+0:357                3 (const int)
+0:357            Constant:
+0:357              2 (const int)
+0:359      move second child to first child ( temp int)
+0:359        direct index ( temp int)
+0:359          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:359            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359              'invocation' ( temp uint)
+0:359            Constant:
+0:359              1 (const int)
+0:359          Constant:
+0:359            0 (const int)
+0:359        Convert bool to int ( temp int)
+0:359          subgroupExclusiveAnd ( global bool)
+0:359            Compare Less Than ( temp bool)
+0:359              direct index ( temp int)
+0:359                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:359                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359                    Constant:
+0:359                      0 (const int)
+0:359                  Constant:
+0:359                    1 (const int)
+0:359                Constant:
+0:359                  0 (const int)
+0:359              Constant:
+0:359                0 (const int)
+0:360      move second child to first child ( temp 2-component vector of int)
+0:360        vector swizzle ( temp 2-component vector of int)
+0:360          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:360            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:360              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:360              'invocation' ( temp uint)
+0:360            Constant:
+0:360              1 (const int)
+0:360          Sequence
+0:360            Constant:
+0:360              0 (const int)
+0:360            Constant:
+0:360              1 (const int)
+0:360        Convert bool to int ( temp 2-component vector of int)
+0:360          subgroupExclusiveAnd ( global 2-component vector of bool)
+0:360            Compare Less Than ( global 2-component vector of bool)
+0:360              vector swizzle ( temp 2-component vector of int)
+0:360                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:360                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:360                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:360                    Constant:
+0:360                      1 (const int)
+0:360                  Constant:
+0:360                    1 (const int)
+0:360                Sequence
+0:360                  Constant:
+0:360                    0 (const int)
+0:360                  Constant:
+0:360                    1 (const int)
+0:360              Constant:
+0:360                0 (const int)
+0:360                0 (const int)
+0:361      move second child to first child ( temp 3-component vector of int)
+0:361        vector swizzle ( temp 3-component vector of int)
+0:361          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:361            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361              'invocation' ( temp uint)
+0:361            Constant:
+0:361              1 (const int)
+0:361          Sequence
+0:361            Constant:
+0:361              0 (const int)
+0:361            Constant:
+0:361              1 (const int)
+0:361            Constant:
+0:361              2 (const int)
+0:361        Convert bool to int ( temp 3-component vector of int)
+0:361          subgroupExclusiveAnd ( global 3-component vector of bool)
+0:361            Compare Less Than ( global 3-component vector of bool)
+0:361              vector swizzle ( temp 3-component vector of int)
+0:361                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:361                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361                    Constant:
+0:361                      1 (const int)
+0:361                  Constant:
+0:361                    1 (const int)
+0:361                Sequence
+0:361                  Constant:
+0:361                    0 (const int)
+0:361                  Constant:
+0:361                    1 (const int)
+0:361                  Constant:
+0:361                    2 (const int)
+0:361              Constant:
+0:361                0 (const int)
+0:361                0 (const int)
+0:361                0 (const int)
+0:362      move second child to first child ( temp 4-component vector of int)
+0:362        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:362          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362            'invocation' ( temp uint)
+0:362          Constant:
+0:362            1 (const int)
+0:362        Convert bool to int ( temp 4-component vector of int)
+0:362          subgroupExclusiveAnd ( global 4-component vector of bool)
+0:362            Compare Less Than ( global 4-component vector of bool)
+0:362              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:362                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362                  Constant:
+0:362                    1 (const int)
+0:362                Constant:
+0:362                  1 (const int)
+0:362              Constant:
+0:362                0 (const int)
+0:362                0 (const int)
+0:362                0 (const int)
+0:362                0 (const int)
+0:364      move second child to first child ( temp int)
+0:364        direct index ( temp int)
+0:364          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:364            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364              'invocation' ( temp uint)
+0:364            Constant:
+0:364              1 (const int)
+0:364          Constant:
+0:364            0 (const int)
+0:364        subgroupExclusiveOr ( global int)
+0:364          direct index ( temp int)
+0:364            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:364              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364                Constant:
+0:364                  0 (const int)
+0:364              Constant:
+0:364                1 (const int)
+0:364            Constant:
+0:364              0 (const int)
+0:365      move second child to first child ( temp 2-component vector of int)
+0:365        vector swizzle ( temp 2-component vector of int)
+0:365          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:365            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:365              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:365              'invocation' ( temp uint)
+0:365            Constant:
+0:365              1 (const int)
+0:365          Sequence
+0:365            Constant:
+0:365              0 (const int)
+0:365            Constant:
+0:365              1 (const int)
+0:365        subgroupExclusiveOr ( global 2-component vector of int)
+0:365          vector swizzle ( temp 2-component vector of int)
+0:365            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:365              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:365                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:365                Constant:
+0:365                  1 (const int)
+0:365              Constant:
+0:365                1 (const int)
+0:365            Sequence
+0:365              Constant:
+0:365                0 (const int)
+0:365              Constant:
+0:365                1 (const int)
+0:366      move second child to first child ( temp 3-component vector of int)
+0:366        vector swizzle ( temp 3-component vector of int)
+0:366          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:366            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366              'invocation' ( temp uint)
+0:366            Constant:
+0:366              1 (const int)
+0:366          Sequence
+0:366            Constant:
+0:366              0 (const int)
+0:366            Constant:
+0:366              1 (const int)
+0:366            Constant:
+0:366              2 (const int)
+0:366        subgroupExclusiveOr ( global 3-component vector of int)
+0:366          vector swizzle ( temp 3-component vector of int)
+0:366            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:366              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366                Constant:
+0:366                  2 (const int)
+0:366              Constant:
+0:366                1 (const int)
+0:366            Sequence
+0:366              Constant:
+0:366                0 (const int)
+0:366              Constant:
+0:366                1 (const int)
+0:366              Constant:
+0:366                2 (const int)
+0:367      move second child to first child ( temp 4-component vector of int)
+0:367        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:367          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367            'invocation' ( temp uint)
+0:367          Constant:
+0:367            1 (const int)
+0:367        subgroupExclusiveOr ( global 4-component vector of int)
+0:367          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:367            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367              Constant:
+0:367                3 (const int)
+0:367            Constant:
+0:367              1 (const int)
+0:369      move second child to first child ( temp uint)
+0:369        direct index ( temp uint)
+0:369          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:369            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369              'invocation' ( temp uint)
+0:369            Constant:
+0:369              2 (const int)
+0:369          Constant:
+0:369            0 (const int)
+0:369        subgroupExclusiveOr ( global uint)
+0:369          direct index ( temp uint)
+0:369            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:369              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369                Constant:
+0:369                  0 (const int)
+0:369              Constant:
+0:369                2 (const int)
+0:369            Constant:
+0:369              0 (const int)
+0:370      move second child to first child ( temp 2-component vector of uint)
+0:370        vector swizzle ( temp 2-component vector of uint)
+0:370          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:370            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:370              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:370              'invocation' ( temp uint)
+0:370            Constant:
+0:370              2 (const int)
+0:370          Sequence
+0:370            Constant:
+0:370              0 (const int)
+0:370            Constant:
+0:370              1 (const int)
+0:370        subgroupExclusiveOr ( global 2-component vector of uint)
+0:370          vector swizzle ( temp 2-component vector of uint)
+0:370            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:370              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:370                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:370                Constant:
+0:370                  1 (const int)
+0:370              Constant:
+0:370                2 (const int)
+0:370            Sequence
+0:370              Constant:
+0:370                0 (const int)
+0:370              Constant:
+0:370                1 (const int)
+0:371      move second child to first child ( temp 3-component vector of uint)
+0:371        vector swizzle ( temp 3-component vector of uint)
+0:371          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:371            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371              'invocation' ( temp uint)
+0:371            Constant:
+0:371              2 (const int)
+0:371          Sequence
+0:371            Constant:
+0:371              0 (const int)
+0:371            Constant:
+0:371              1 (const int)
+0:371            Constant:
+0:371              2 (const int)
+0:371        subgroupExclusiveOr ( global 3-component vector of uint)
+0:371          vector swizzle ( temp 3-component vector of uint)
+0:371            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:371              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371                Constant:
+0:371                  2 (const int)
+0:371              Constant:
+0:371                2 (const int)
+0:371            Sequence
+0:371              Constant:
+0:371                0 (const int)
+0:371              Constant:
+0:371                1 (const int)
+0:371              Constant:
+0:371                2 (const int)
+0:372      move second child to first child ( temp 4-component vector of uint)
+0:372        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:372          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372            'invocation' ( temp uint)
+0:372          Constant:
+0:372            2 (const int)
+0:372        subgroupExclusiveOr ( global 4-component vector of uint)
+0:372          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:372            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372              Constant:
+0:372                3 (const int)
+0:372            Constant:
+0:372              2 (const int)
+0:374      move second child to first child ( temp int)
+0:374        direct index ( temp int)
+0:374          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:374            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374              'invocation' ( temp uint)
+0:374            Constant:
+0:374              1 (const int)
+0:374          Constant:
+0:374            0 (const int)
+0:374        Convert bool to int ( temp int)
+0:374          subgroupExclusiveOr ( global bool)
+0:374            Compare Less Than ( temp bool)
+0:374              direct index ( temp int)
+0:374                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:374                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374                    Constant:
+0:374                      0 (const int)
+0:374                  Constant:
+0:374                    1 (const int)
+0:374                Constant:
+0:374                  0 (const int)
+0:374              Constant:
+0:374                0 (const int)
+0:375      move second child to first child ( temp 2-component vector of int)
+0:375        vector swizzle ( temp 2-component vector of int)
+0:375          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:375            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:375              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:375              'invocation' ( temp uint)
+0:375            Constant:
+0:375              1 (const int)
+0:375          Sequence
+0:375            Constant:
+0:375              0 (const int)
+0:375            Constant:
+0:375              1 (const int)
+0:375        Convert bool to int ( temp 2-component vector of int)
+0:375          subgroupExclusiveOr ( global 2-component vector of bool)
+0:375            Compare Less Than ( global 2-component vector of bool)
+0:375              vector swizzle ( temp 2-component vector of int)
+0:375                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:375                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:375                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:375                    Constant:
+0:375                      1 (const int)
+0:375                  Constant:
+0:375                    1 (const int)
+0:375                Sequence
+0:375                  Constant:
+0:375                    0 (const int)
+0:375                  Constant:
+0:375                    1 (const int)
+0:375              Constant:
+0:375                0 (const int)
+0:375                0 (const int)
+0:376      move second child to first child ( temp 3-component vector of int)
+0:376        vector swizzle ( temp 3-component vector of int)
+0:376          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:376            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376              'invocation' ( temp uint)
+0:376            Constant:
+0:376              1 (const int)
+0:376          Sequence
+0:376            Constant:
+0:376              0 (const int)
+0:376            Constant:
+0:376              1 (const int)
+0:376            Constant:
+0:376              2 (const int)
+0:376        Convert bool to int ( temp 3-component vector of int)
+0:376          subgroupExclusiveOr ( global 3-component vector of bool)
+0:376            Compare Less Than ( global 3-component vector of bool)
+0:376              vector swizzle ( temp 3-component vector of int)
+0:376                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:376                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376                    Constant:
+0:376                      1 (const int)
+0:376                  Constant:
+0:376                    1 (const int)
+0:376                Sequence
+0:376                  Constant:
+0:376                    0 (const int)
+0:376                  Constant:
+0:376                    1 (const int)
+0:376                  Constant:
+0:376                    2 (const int)
+0:376              Constant:
+0:376                0 (const int)
+0:376                0 (const int)
+0:376                0 (const int)
+0:377      move second child to first child ( temp 4-component vector of int)
+0:377        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:377          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377            'invocation' ( temp uint)
+0:377          Constant:
+0:377            1 (const int)
+0:377        Convert bool to int ( temp 4-component vector of int)
+0:377          subgroupExclusiveOr ( global 4-component vector of bool)
+0:377            Compare Less Than ( global 4-component vector of bool)
+0:377              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:377                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377                  Constant:
+0:377                    1 (const int)
+0:377                Constant:
+0:377                  1 (const int)
+0:377              Constant:
+0:377                0 (const int)
+0:377                0 (const int)
+0:377                0 (const int)
+0:377                0 (const int)
+0:379      move second child to first child ( temp int)
+0:379        direct index ( temp int)
+0:379          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:379            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379              'invocation' ( temp uint)
+0:379            Constant:
+0:379              1 (const int)
+0:379          Constant:
+0:379            0 (const int)
+0:379        subgroupExclusiveXor ( global int)
+0:379          direct index ( temp int)
+0:379            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:379              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379                Constant:
+0:379                  0 (const int)
+0:379              Constant:
+0:379                1 (const int)
+0:379            Constant:
+0:379              0 (const int)
+0:380      move second child to first child ( temp 2-component vector of int)
+0:380        vector swizzle ( temp 2-component vector of int)
+0:380          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:380            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:380              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:380              'invocation' ( temp uint)
+0:380            Constant:
+0:380              1 (const int)
+0:380          Sequence
+0:380            Constant:
+0:380              0 (const int)
+0:380            Constant:
+0:380              1 (const int)
+0:380        subgroupExclusiveXor ( global 2-component vector of int)
+0:380          vector swizzle ( temp 2-component vector of int)
+0:380            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:380              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:380                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:380                Constant:
+0:380                  1 (const int)
+0:380              Constant:
+0:380                1 (const int)
+0:380            Sequence
+0:380              Constant:
+0:380                0 (const int)
+0:380              Constant:
+0:380                1 (const int)
+0:381      move second child to first child ( temp 3-component vector of int)
+0:381        vector swizzle ( temp 3-component vector of int)
+0:381          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:381            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381              'invocation' ( temp uint)
+0:381            Constant:
+0:381              1 (const int)
+0:381          Sequence
+0:381            Constant:
+0:381              0 (const int)
+0:381            Constant:
+0:381              1 (const int)
+0:381            Constant:
+0:381              2 (const int)
+0:381        subgroupExclusiveXor ( global 3-component vector of int)
+0:381          vector swizzle ( temp 3-component vector of int)
+0:381            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:381              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381                Constant:
+0:381                  2 (const int)
+0:381              Constant:
+0:381                1 (const int)
+0:381            Sequence
+0:381              Constant:
+0:381                0 (const int)
+0:381              Constant:
+0:381                1 (const int)
+0:381              Constant:
+0:381                2 (const int)
+0:382      move second child to first child ( temp 4-component vector of int)
+0:382        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:382          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382            'invocation' ( temp uint)
+0:382          Constant:
+0:382            1 (const int)
+0:382        subgroupExclusiveXor ( global 4-component vector of int)
+0:382          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:382            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382              Constant:
+0:382                3 (const int)
+0:382            Constant:
+0:382              1 (const int)
+0:384      move second child to first child ( temp uint)
+0:384        direct index ( temp uint)
+0:384          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:384            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384              'invocation' ( temp uint)
+0:384            Constant:
+0:384              2 (const int)
+0:384          Constant:
+0:384            0 (const int)
+0:384        subgroupExclusiveXor ( global uint)
+0:384          direct index ( temp uint)
+0:384            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:384              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384                Constant:
+0:384                  0 (const int)
+0:384              Constant:
+0:384                2 (const int)
+0:384            Constant:
+0:384              0 (const int)
+0:385      move second child to first child ( temp 2-component vector of uint)
+0:385        vector swizzle ( temp 2-component vector of uint)
+0:385          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:385            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:385              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:385              'invocation' ( temp uint)
+0:385            Constant:
+0:385              2 (const int)
+0:385          Sequence
+0:385            Constant:
+0:385              0 (const int)
+0:385            Constant:
+0:385              1 (const int)
+0:385        subgroupExclusiveXor ( global 2-component vector of uint)
+0:385          vector swizzle ( temp 2-component vector of uint)
+0:385            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:385              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:385                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:385                Constant:
+0:385                  1 (const int)
+0:385              Constant:
+0:385                2 (const int)
+0:385            Sequence
+0:385              Constant:
+0:385                0 (const int)
+0:385              Constant:
+0:385                1 (const int)
+0:386      move second child to first child ( temp 3-component vector of uint)
+0:386        vector swizzle ( temp 3-component vector of uint)
+0:386          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:386            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386              'invocation' ( temp uint)
+0:386            Constant:
+0:386              2 (const int)
+0:386          Sequence
+0:386            Constant:
+0:386              0 (const int)
+0:386            Constant:
+0:386              1 (const int)
+0:386            Constant:
+0:386              2 (const int)
+0:386        subgroupExclusiveXor ( global 3-component vector of uint)
+0:386          vector swizzle ( temp 3-component vector of uint)
+0:386            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:386              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386                Constant:
+0:386                  2 (const int)
+0:386              Constant:
+0:386                2 (const int)
+0:386            Sequence
+0:386              Constant:
+0:386                0 (const int)
+0:386              Constant:
+0:386                1 (const int)
+0:386              Constant:
+0:386                2 (const int)
+0:387      move second child to first child ( temp 4-component vector of uint)
+0:387        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:387          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387            'invocation' ( temp uint)
+0:387          Constant:
+0:387            2 (const int)
+0:387        subgroupExclusiveXor ( global 4-component vector of uint)
+0:387          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:387            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387              Constant:
+0:387                3 (const int)
+0:387            Constant:
+0:387              2 (const int)
+0:389      move second child to first child ( temp int)
+0:389        direct index ( temp int)
+0:389          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:389            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389              'invocation' ( temp uint)
+0:389            Constant:
+0:389              1 (const int)
+0:389          Constant:
+0:389            0 (const int)
+0:389        Convert bool to int ( temp int)
+0:389          subgroupExclusiveXor ( global bool)
+0:389            Compare Less Than ( temp bool)
+0:389              direct index ( temp int)
+0:389                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:389                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389                    Constant:
+0:389                      0 (const int)
+0:389                  Constant:
+0:389                    1 (const int)
+0:389                Constant:
+0:389                  0 (const int)
+0:389              Constant:
+0:389                0 (const int)
+0:390      move second child to first child ( temp 2-component vector of int)
+0:390        vector swizzle ( temp 2-component vector of int)
+0:390          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:390            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:390              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:390              'invocation' ( temp uint)
+0:390            Constant:
+0:390              1 (const int)
+0:390          Sequence
+0:390            Constant:
+0:390              0 (const int)
+0:390            Constant:
+0:390              1 (const int)
+0:390        Convert bool to int ( temp 2-component vector of int)
+0:390          subgroupExclusiveXor ( global 2-component vector of bool)
+0:390            Compare Less Than ( global 2-component vector of bool)
+0:390              vector swizzle ( temp 2-component vector of int)
+0:390                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:390                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:390                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:390                    Constant:
+0:390                      1 (const int)
+0:390                  Constant:
+0:390                    1 (const int)
+0:390                Sequence
+0:390                  Constant:
+0:390                    0 (const int)
+0:390                  Constant:
+0:390                    1 (const int)
+0:390              Constant:
+0:390                0 (const int)
+0:390                0 (const int)
+0:391      move second child to first child ( temp 3-component vector of int)
+0:391        vector swizzle ( temp 3-component vector of int)
+0:391          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:391            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391              'invocation' ( temp uint)
+0:391            Constant:
+0:391              1 (const int)
+0:391          Sequence
+0:391            Constant:
+0:391              0 (const int)
+0:391            Constant:
+0:391              1 (const int)
+0:391            Constant:
+0:391              2 (const int)
+0:391        Convert bool to int ( temp 3-component vector of int)
+0:391          subgroupExclusiveXor ( global 3-component vector of bool)
+0:391            Compare Less Than ( global 3-component vector of bool)
+0:391              vector swizzle ( temp 3-component vector of int)
+0:391                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:391                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391                    Constant:
+0:391                      1 (const int)
+0:391                  Constant:
+0:391                    1 (const int)
+0:391                Sequence
+0:391                  Constant:
+0:391                    0 (const int)
+0:391                  Constant:
+0:391                    1 (const int)
+0:391                  Constant:
+0:391                    2 (const int)
+0:391              Constant:
+0:391                0 (const int)
+0:391                0 (const int)
+0:391                0 (const int)
+0:392      move second child to first child ( temp 4-component vector of int)
+0:392        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:392          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392            'invocation' ( temp uint)
+0:392          Constant:
+0:392            1 (const int)
+0:392        Convert bool to int ( temp 4-component vector of int)
+0:392          subgroupExclusiveXor ( global 4-component vector of bool)
+0:392            Compare Less Than ( global 4-component vector of bool)
+0:392              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:392                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392                  Constant:
+0:392                    1 (const int)
+0:392                Constant:
+0:392                  1 (const int)
+0:392              Constant:
+0:392                0 (const int)
+0:392                0 (const int)
+0:392                0 (const int)
+0:392                0 (const int)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/Test/baseResults/glsl.450.subgroupBallot.comp.out b/Test/baseResults/glsl.450.subgroupBallot.comp.out
new file mode 100644
index 0000000..0408fb1
--- /dev/null
+++ b/Test/baseResults/glsl.450.subgroupBallot.comp.out
@@ -0,0 +1,2303 @@
+glsl.450.subgroupBallot.comp
+Shader version: 450
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp uint)
+0:17          'invocation' ( temp uint)
+0:17          mod ( temp uint)
+0:17            add ( temp uint)
+0:17              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      Sequence
+0:19        move second child to first child ( temp 4-component vector of uint)
+0:19          'relMask' ( temp 4-component vector of uint)
+0:22          add ( temp 4-component vector of uint)
+0:21            add ( temp 4-component vector of uint)
+0:20              add ( temp 4-component vector of uint)
+0:19                add ( temp 4-component vector of uint)
+0:19                  'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:20                  'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:21                'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:22              'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:23            'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:25      Sequence
+0:25        move second child to first child ( temp 4-component vector of uint)
+0:25          'result' ( temp 4-component vector of uint)
+0:25          subgroupBallot ( global 4-component vector of uint)
+0:25            Constant:
+0:25              true (const bool)
+0:27      move second child to first child ( temp uint)
+0:27        direct index ( temp uint)
+0:27          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:27            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'invocation' ( temp uint)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Constant:
+0:27            0 (const int)
+0:27        subgroupBallotBitCount ( global uint)
+0:27          'result' ( temp 4-component vector of uint)
+0:28      move second child to first child ( temp uint)
+0:28        direct index ( temp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:28            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28              'invocation' ( temp uint)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            1 (const int)
+0:28        Convert int to uint ( temp uint)
+0:28          Test condition and select ( temp int)
+0:28            Condition
+0:28            subgroupBallotBitExtract ( global bool)
+0:28              'result' ( temp 4-component vector of uint)
+0:28              Constant:
+0:28                0 (const uint)
+0:28            true case
+0:28            Constant:
+0:28              1 (const int)
+0:28            false case
+0:28            Constant:
+0:28              0 (const int)
+0:29      move second child to first child ( temp uint)
+0:29        direct index ( temp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'invocation' ( temp uint)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            2 (const int)
+0:29        add ( temp uint)
+0:29          subgroupBallotInclusiveBitCount ( global uint)
+0:29            'result' ( temp 4-component vector of uint)
+0:29          subgroupBallotExclusiveBitCount ( global uint)
+0:29            'result' ( temp 4-component vector of uint)
+0:30      move second child to first child ( temp uint)
+0:30        direct index ( temp uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'invocation' ( temp uint)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Constant:
+0:30            3 (const int)
+0:30        add ( temp uint)
+0:30          subgroupBallotFindLSB ( global uint)
+0:30            'result' ( temp 4-component vector of uint)
+0:30          subgroupBallotFindMSB ( global uint)
+0:30            'result' ( temp 4-component vector of uint)
+0:32      Test condition and select ( temp void)
+0:32        Condition
+0:32        logical-and ( temp bool)
+0:32          Compare Equal ( temp bool)
+0:32            'relMask' ( temp 4-component vector of uint)
+0:32            'result' ( temp 4-component vector of uint)
+0:32          subgroupInverseBallot ( global bool)
+0:32            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32                Constant:
+0:32                  0 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:32        true case
+0:34        Sequence
+0:34          move second child to first child ( temp float)
+0:34            direct index ( temp float)
+0:34              f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:34                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                  'invocation' ( temp uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                0 (const int)
+0:34            subgroupBroadcast ( global float)
+0:34              direct index ( temp float)
+0:34                f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:34                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                    Constant:
+0:34                      0 (const int)
+0:34                  Constant:
+0:34                    0 (const int)
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                3 (const uint)
+0:35          move second child to first child ( temp 2-component vector of float)
+0:35            vector swizzle ( temp 2-component vector of float)
+0:35              f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:35                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                  'invocation' ( temp uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35              Sequence
+0:35                Constant:
+0:35                  0 (const int)
+0:35                Constant:
+0:35                  1 (const int)
+0:35            subgroupBroadcast ( global 2-component vector of float)
+0:35              vector swizzle ( temp 2-component vector of float)
+0:35                f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:35                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                    Constant:
+0:35                      1 (const int)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35                Sequence
+0:35                  Constant:
+0:35                    0 (const int)
+0:35                  Constant:
+0:35                    1 (const int)
+0:35              Constant:
+0:35                3 (const uint)
+0:36          move second child to first child ( temp 3-component vector of float)
+0:36            vector swizzle ( temp 3-component vector of float)
+0:36              f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:36                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                  'invocation' ( temp uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36              Sequence
+0:36                Constant:
+0:36                  0 (const int)
+0:36                Constant:
+0:36                  1 (const int)
+0:36                Constant:
+0:36                  2 (const int)
+0:36            subgroupBroadcast ( global 3-component vector of float)
+0:36              vector swizzle ( temp 3-component vector of float)
+0:36                f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:36                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                    Constant:
+0:36                      2 (const int)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36                Sequence
+0:36                  Constant:
+0:36                    0 (const int)
+0:36                  Constant:
+0:36                    1 (const int)
+0:36                  Constant:
+0:36                    2 (const int)
+0:36              Constant:
+0:36                3 (const uint)
+0:37          move second child to first child ( temp 4-component vector of float)
+0:37            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:37              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37                'invocation' ( temp uint)
+0:37              Constant:
+0:37                0 (const int)
+0:37            subgroupBroadcast ( global 4-component vector of float)
+0:37              f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:37                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37                  Constant:
+0:37                    3 (const int)
+0:37                Constant:
+0:37                  0 (const int)
+0:37              Constant:
+0:37                3 (const uint)
+0:39          move second child to first child ( temp int)
+0:39            direct index ( temp int)
+0:39              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                  'invocation' ( temp uint)
+0:39                Constant:
+0:39                  1 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            subgroupBroadcast ( global int)
+0:39              direct index ( temp int)
+0:39                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                    Constant:
+0:39                      0 (const int)
+0:39                  Constant:
+0:39                    1 (const int)
+0:39                Constant:
+0:39                  0 (const int)
+0:39              Constant:
+0:39                2 (const uint)
+0:40          move second child to first child ( temp 2-component vector of int)
+0:40            vector swizzle ( temp 2-component vector of int)
+0:40              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                  'invocation' ( temp uint)
+0:40                Constant:
+0:40                  1 (const int)
+0:40              Sequence
+0:40                Constant:
+0:40                  0 (const int)
+0:40                Constant:
+0:40                  1 (const int)
+0:40            subgroupBroadcast ( global 2-component vector of int)
+0:40              vector swizzle ( temp 2-component vector of int)
+0:40                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                    Constant:
+0:40                      1 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                Sequence
+0:40                  Constant:
+0:40                    0 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40              Constant:
+0:40                2 (const uint)
+0:41          move second child to first child ( temp 3-component vector of int)
+0:41            vector swizzle ( temp 3-component vector of int)
+0:41              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                  'invocation' ( temp uint)
+0:41                Constant:
+0:41                  1 (const int)
+0:41              Sequence
+0:41                Constant:
+0:41                  0 (const int)
+0:41                Constant:
+0:41                  1 (const int)
+0:41                Constant:
+0:41                  2 (const int)
+0:41            subgroupBroadcast ( global 3-component vector of int)
+0:41              vector swizzle ( temp 3-component vector of int)
+0:41                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                    Constant:
+0:41                      2 (const int)
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                Sequence
+0:41                  Constant:
+0:41                    0 (const int)
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                  Constant:
+0:41                    2 (const int)
+0:41              Constant:
+0:41                2 (const uint)
+0:42          move second child to first child ( temp 4-component vector of int)
+0:42            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                'invocation' ( temp uint)
+0:42              Constant:
+0:42                1 (const int)
+0:42            subgroupBroadcast ( global 4-component vector of int)
+0:42              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  Constant:
+0:42                    3 (const int)
+0:42                Constant:
+0:42                  1 (const int)
+0:42              Constant:
+0:42                2 (const uint)
+0:44          move second child to first child ( temp uint)
+0:44            direct index ( temp uint)
+0:44              u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:44                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                  'invocation' ( temp uint)
+0:44                Constant:
+0:44                  2 (const int)
+0:44              Constant:
+0:44                0 (const int)
+0:44            subgroupBroadcast ( global uint)
+0:44              direct index ( temp uint)
+0:44                u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:44                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                    Constant:
+0:44                      0 (const int)
+0:44                  Constant:
+0:44                    2 (const int)
+0:44                Constant:
+0:44                  0 (const int)
+0:44              Constant:
+0:44                1 (const uint)
+0:45          move second child to first child ( temp 2-component vector of uint)
+0:45            vector swizzle ( temp 2-component vector of uint)
+0:45              u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:45                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                  'invocation' ( temp uint)
+0:45                Constant:
+0:45                  2 (const int)
+0:45              Sequence
+0:45                Constant:
+0:45                  0 (const int)
+0:45                Constant:
+0:45                  1 (const int)
+0:45            subgroupBroadcast ( global 2-component vector of uint)
+0:45              vector swizzle ( temp 2-component vector of uint)
+0:45                u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:45                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                    Constant:
+0:45                      1 (const int)
+0:45                  Constant:
+0:45                    2 (const int)
+0:45                Sequence
+0:45                  Constant:
+0:45                    0 (const int)
+0:45                  Constant:
+0:45                    1 (const int)
+0:45              Constant:
+0:45                1 (const uint)
+0:46          move second child to first child ( temp 3-component vector of uint)
+0:46            vector swizzle ( temp 3-component vector of uint)
+0:46              u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:46                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                  'invocation' ( temp uint)
+0:46                Constant:
+0:46                  2 (const int)
+0:46              Sequence
+0:46                Constant:
+0:46                  0 (const int)
+0:46                Constant:
+0:46                  1 (const int)
+0:46                Constant:
+0:46                  2 (const int)
+0:46            subgroupBroadcast ( global 3-component vector of uint)
+0:46              vector swizzle ( temp 3-component vector of uint)
+0:46                u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:46                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                    Constant:
+0:46                      2 (const int)
+0:46                  Constant:
+0:46                    2 (const int)
+0:46                Sequence
+0:46                  Constant:
+0:46                    0 (const int)
+0:46                  Constant:
+0:46                    1 (const int)
+0:46                  Constant:
+0:46                    2 (const int)
+0:46              Constant:
+0:46                1 (const uint)
+0:47          move second child to first child ( temp 4-component vector of uint)
+0:47            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:47              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47                'invocation' ( temp uint)
+0:47              Constant:
+0:47                2 (const int)
+0:47            subgroupBroadcast ( global 4-component vector of uint)
+0:47              u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:47                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47                  Constant:
+0:47                    3 (const int)
+0:47                Constant:
+0:47                  2 (const int)
+0:47              Constant:
+0:47                1 (const uint)
+0:49          move second child to first child ( temp double)
+0:49            direct index ( temp double)
+0:49              d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:49                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                  'invocation' ( temp uint)
+0:49                Constant:
+0:49                  3 (const int)
+0:49              Constant:
+0:49                0 (const int)
+0:49            subgroupBroadcast ( global double)
+0:49              direct index ( temp double)
+0:49                d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:49                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                    Constant:
+0:49                      0 (const int)
+0:49                  Constant:
+0:49                    3 (const int)
+0:49                Constant:
+0:49                  0 (const int)
+0:49              Constant:
+0:49                0 (const uint)
+0:50          move second child to first child ( temp 2-component vector of double)
+0:50            vector swizzle ( temp 2-component vector of double)
+0:50              d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:50                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                  'invocation' ( temp uint)
+0:50                Constant:
+0:50                  3 (const int)
+0:50              Sequence
+0:50                Constant:
+0:50                  0 (const int)
+0:50                Constant:
+0:50                  1 (const int)
+0:50            subgroupBroadcast ( global 2-component vector of double)
+0:50              vector swizzle ( temp 2-component vector of double)
+0:50                d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:50                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                    Constant:
+0:50                      1 (const int)
+0:50                  Constant:
+0:50                    3 (const int)
+0:50                Sequence
+0:50                  Constant:
+0:50                    0 (const int)
+0:50                  Constant:
+0:50                    1 (const int)
+0:50              Constant:
+0:50                0 (const uint)
+0:51          move second child to first child ( temp 3-component vector of double)
+0:51            vector swizzle ( temp 3-component vector of double)
+0:51              d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:51                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                  'invocation' ( temp uint)
+0:51                Constant:
+0:51                  3 (const int)
+0:51              Sequence
+0:51                Constant:
+0:51                  0 (const int)
+0:51                Constant:
+0:51                  1 (const int)
+0:51                Constant:
+0:51                  2 (const int)
+0:51            subgroupBroadcast ( global 3-component vector of double)
+0:51              vector swizzle ( temp 3-component vector of double)
+0:51                d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:51                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                    Constant:
+0:51                      2 (const int)
+0:51                  Constant:
+0:51                    3 (const int)
+0:51                Sequence
+0:51                  Constant:
+0:51                    0 (const int)
+0:51                  Constant:
+0:51                    1 (const int)
+0:51                  Constant:
+0:51                    2 (const int)
+0:51              Constant:
+0:51                0 (const uint)
+0:52          move second child to first child ( temp 4-component vector of double)
+0:52            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:52              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52                'invocation' ( temp uint)
+0:52              Constant:
+0:52                3 (const int)
+0:52            subgroupBroadcast ( global 4-component vector of double)
+0:52              d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:52                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52                  Constant:
+0:52                    3 (const int)
+0:52                Constant:
+0:52                  3 (const int)
+0:52              Constant:
+0:52                0 (const uint)
+0:54          move second child to first child ( temp int)
+0:54            direct index ( temp int)
+0:54              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                  'invocation' ( temp uint)
+0:54                Constant:
+0:54                  1 (const int)
+0:54              Constant:
+0:54                0 (const int)
+0:54            Convert bool to int ( temp int)
+0:54              subgroupBroadcast ( global bool)
+0:54                Compare Less Than ( temp bool)
+0:54                  direct index ( temp int)
+0:54                    i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                        Constant:
+0:54                          0 (const int)
+0:54                      Constant:
+0:54                        1 (const int)
+0:54                    Constant:
+0:54                      0 (const int)
+0:54                  Constant:
+0:54                    0 (const int)
+0:54                Constant:
+0:54                  1 (const uint)
+0:55          move second child to first child ( temp 2-component vector of int)
+0:55            vector swizzle ( temp 2-component vector of int)
+0:55              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:55                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                  'invocation' ( temp uint)
+0:55                Constant:
+0:55                  1 (const int)
+0:55              Sequence
+0:55                Constant:
+0:55                  0 (const int)
+0:55                Constant:
+0:55                  1 (const int)
+0:55            Convert bool to int ( temp 2-component vector of int)
+0:55              subgroupBroadcast ( global 2-component vector of bool)
+0:55                Compare Less Than ( global 2-component vector of bool)
+0:55                  vector swizzle ( temp 2-component vector of int)
+0:55                    i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:55                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                        Constant:
+0:55                          1 (const int)
+0:55                      Constant:
+0:55                        1 (const int)
+0:55                    Sequence
+0:55                      Constant:
+0:55                        0 (const int)
+0:55                      Constant:
+0:55                        1 (const int)
+0:55                  Constant:
+0:55                    0 (const int)
+0:55                    0 (const int)
+0:55                Constant:
+0:55                  1 (const uint)
+0:56          move second child to first child ( temp 3-component vector of int)
+0:56            vector swizzle ( temp 3-component vector of int)
+0:56              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:56                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                  'invocation' ( temp uint)
+0:56                Constant:
+0:56                  1 (const int)
+0:56              Sequence
+0:56                Constant:
+0:56                  0 (const int)
+0:56                Constant:
+0:56                  1 (const int)
+0:56                Constant:
+0:56                  2 (const int)
+0:56            Convert bool to int ( temp 3-component vector of int)
+0:56              subgroupBroadcast ( global 3-component vector of bool)
+0:56                Compare Less Than ( global 3-component vector of bool)
+0:56                  vector swizzle ( temp 3-component vector of int)
+0:56                    i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:56                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                        Constant:
+0:56                          1 (const int)
+0:56                      Constant:
+0:56                        1 (const int)
+0:56                    Sequence
+0:56                      Constant:
+0:56                        0 (const int)
+0:56                      Constant:
+0:56                        1 (const int)
+0:56                      Constant:
+0:56                        2 (const int)
+0:56                  Constant:
+0:56                    0 (const int)
+0:56                    0 (const int)
+0:56                    0 (const int)
+0:56                Constant:
+0:56                  1 (const uint)
+0:57          move second child to first child ( temp 4-component vector of int)
+0:57            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:57              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57                'invocation' ( temp uint)
+0:57              Constant:
+0:57                1 (const int)
+0:57            Convert bool to int ( temp 4-component vector of int)
+0:57              subgroupBroadcast ( global 4-component vector of bool)
+0:57                Compare Less Than ( global 4-component vector of bool)
+0:57                  i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:57                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57                      Constant:
+0:57                        1 (const int)
+0:57                    Constant:
+0:57                      1 (const int)
+0:57                  Constant:
+0:57                    0 (const int)
+0:57                    0 (const int)
+0:57                    0 (const int)
+0:57                    0 (const int)
+0:57                Constant:
+0:57                  1 (const uint)
+0:32        false case
+0:61        Sequence
+0:61          move second child to first child ( temp float)
+0:61            direct index ( temp float)
+0:61              f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                  'invocation' ( temp uint)
+0:61                Constant:
+0:61                  0 (const int)
+0:61              Constant:
+0:61                0 (const int)
+0:61            subgroupBroadcastFirst ( global float)
+0:61              direct index ( temp float)
+0:61                f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                    Constant:
+0:61                      0 (const int)
+0:61                  Constant:
+0:61                    0 (const int)
+0:61                Constant:
+0:61                  0 (const int)
+0:62          move second child to first child ( temp 2-component vector of float)
+0:62            vector swizzle ( temp 2-component vector of float)
+0:62              f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62                  'invocation' ( temp uint)
+0:62                Constant:
+0:62                  0 (const int)
+0:62              Sequence
+0:62                Constant:
+0:62                  0 (const int)
+0:62                Constant:
+0:62                  1 (const int)
+0:62            subgroupBroadcastFirst ( global 2-component vector of float)
+0:62              vector swizzle ( temp 2-component vector of float)
+0:62                f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62                    Constant:
+0:62                      1 (const int)
+0:62                  Constant:
+0:62                    0 (const int)
+0:62                Sequence
+0:62                  Constant:
+0:62                    0 (const int)
+0:62                  Constant:
+0:62                    1 (const int)
+0:63          move second child to first child ( temp 3-component vector of float)
+0:63            vector swizzle ( temp 3-component vector of float)
+0:63              f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:63                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63                  'invocation' ( temp uint)
+0:63                Constant:
+0:63                  0 (const int)
+0:63              Sequence
+0:63                Constant:
+0:63                  0 (const int)
+0:63                Constant:
+0:63                  1 (const int)
+0:63                Constant:
+0:63                  2 (const int)
+0:63            subgroupBroadcastFirst ( global 3-component vector of float)
+0:63              vector swizzle ( temp 3-component vector of float)
+0:63                f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:63                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63                    Constant:
+0:63                      2 (const int)
+0:63                  Constant:
+0:63                    0 (const int)
+0:63                Sequence
+0:63                  Constant:
+0:63                    0 (const int)
+0:63                  Constant:
+0:63                    1 (const int)
+0:63                  Constant:
+0:63                    2 (const int)
+0:64          move second child to first child ( temp 4-component vector of float)
+0:64            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:64              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                'invocation' ( temp uint)
+0:64              Constant:
+0:64                0 (const int)
+0:64            subgroupBroadcastFirst ( global 4-component vector of float)
+0:64              f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:64                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                  Constant:
+0:64                    3 (const int)
+0:64                Constant:
+0:64                  0 (const int)
+0:66          move second child to first child ( temp int)
+0:66            direct index ( temp int)
+0:66              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                  'invocation' ( temp uint)
+0:66                Constant:
+0:66                  1 (const int)
+0:66              Constant:
+0:66                0 (const int)
+0:66            subgroupBroadcastFirst ( global int)
+0:66              direct index ( temp int)
+0:66                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                    Constant:
+0:66                      0 (const int)
+0:66                  Constant:
+0:66                    1 (const int)
+0:66                Constant:
+0:66                  0 (const int)
+0:67          move second child to first child ( temp 2-component vector of int)
+0:67            vector swizzle ( temp 2-component vector of int)
+0:67              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                  'invocation' ( temp uint)
+0:67                Constant:
+0:67                  1 (const int)
+0:67              Sequence
+0:67                Constant:
+0:67                  0 (const int)
+0:67                Constant:
+0:67                  1 (const int)
+0:67            subgroupBroadcastFirst ( global 2-component vector of int)
+0:67              vector swizzle ( temp 2-component vector of int)
+0:67                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                    Constant:
+0:67                      1 (const int)
+0:67                  Constant:
+0:67                    1 (const int)
+0:67                Sequence
+0:67                  Constant:
+0:67                    0 (const int)
+0:67                  Constant:
+0:67                    1 (const int)
+0:68          move second child to first child ( temp 3-component vector of int)
+0:68            vector swizzle ( temp 3-component vector of int)
+0:68              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:68                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68                  'invocation' ( temp uint)
+0:68                Constant:
+0:68                  1 (const int)
+0:68              Sequence
+0:68                Constant:
+0:68                  0 (const int)
+0:68                Constant:
+0:68                  1 (const int)
+0:68                Constant:
+0:68                  2 (const int)
+0:68            subgroupBroadcastFirst ( global 3-component vector of int)
+0:68              vector swizzle ( temp 3-component vector of int)
+0:68                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:68                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68                    Constant:
+0:68                      2 (const int)
+0:68                  Constant:
+0:68                    1 (const int)
+0:68                Sequence
+0:68                  Constant:
+0:68                    0 (const int)
+0:68                  Constant:
+0:68                    1 (const int)
+0:68                  Constant:
+0:68                    2 (const int)
+0:69          move second child to first child ( temp 4-component vector of int)
+0:69            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:69              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                'invocation' ( temp uint)
+0:69              Constant:
+0:69                1 (const int)
+0:69            subgroupBroadcastFirst ( global 4-component vector of int)
+0:69              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:69                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                  Constant:
+0:69                    3 (const int)
+0:69                Constant:
+0:69                  1 (const int)
+0:71          move second child to first child ( temp uint)
+0:71            direct index ( temp uint)
+0:71              u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                  'invocation' ( temp uint)
+0:71                Constant:
+0:71                  2 (const int)
+0:71              Constant:
+0:71                0 (const int)
+0:71            subgroupBroadcastFirst ( global uint)
+0:71              direct index ( temp uint)
+0:71                u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                    Constant:
+0:71                      0 (const int)
+0:71                  Constant:
+0:71                    2 (const int)
+0:71                Constant:
+0:71                  0 (const int)
+0:72          move second child to first child ( temp 2-component vector of uint)
+0:72            vector swizzle ( temp 2-component vector of uint)
+0:72              u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72                  'invocation' ( temp uint)
+0:72                Constant:
+0:72                  2 (const int)
+0:72              Sequence
+0:72                Constant:
+0:72                  0 (const int)
+0:72                Constant:
+0:72                  1 (const int)
+0:72            subgroupBroadcastFirst ( global 2-component vector of uint)
+0:72              vector swizzle ( temp 2-component vector of uint)
+0:72                u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72                    Constant:
+0:72                      1 (const int)
+0:72                  Constant:
+0:72                    2 (const int)
+0:72                Sequence
+0:72                  Constant:
+0:72                    0 (const int)
+0:72                  Constant:
+0:72                    1 (const int)
+0:73          move second child to first child ( temp 3-component vector of uint)
+0:73            vector swizzle ( temp 3-component vector of uint)
+0:73              u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:73                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73                  'invocation' ( temp uint)
+0:73                Constant:
+0:73                  2 (const int)
+0:73              Sequence
+0:73                Constant:
+0:73                  0 (const int)
+0:73                Constant:
+0:73                  1 (const int)
+0:73                Constant:
+0:73                  2 (const int)
+0:73            subgroupBroadcastFirst ( global 3-component vector of uint)
+0:73              vector swizzle ( temp 3-component vector of uint)
+0:73                u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:73                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73                    Constant:
+0:73                      2 (const int)
+0:73                  Constant:
+0:73                    2 (const int)
+0:73                Sequence
+0:73                  Constant:
+0:73                    0 (const int)
+0:73                  Constant:
+0:73                    1 (const int)
+0:73                  Constant:
+0:73                    2 (const int)
+0:74          move second child to first child ( temp 4-component vector of uint)
+0:74            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:74              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                'invocation' ( temp uint)
+0:74              Constant:
+0:74                2 (const int)
+0:74            subgroupBroadcastFirst ( global 4-component vector of uint)
+0:74              u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:74                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                  Constant:
+0:74                    3 (const int)
+0:74                Constant:
+0:74                  2 (const int)
+0:76          move second child to first child ( temp double)
+0:76            direct index ( temp double)
+0:76              d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                  'invocation' ( temp uint)
+0:76                Constant:
+0:76                  3 (const int)
+0:76              Constant:
+0:76                0 (const int)
+0:76            subgroupBroadcastFirst ( global double)
+0:76              direct index ( temp double)
+0:76                d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                    Constant:
+0:76                      0 (const int)
+0:76                  Constant:
+0:76                    3 (const int)
+0:76                Constant:
+0:76                  0 (const int)
+0:77          move second child to first child ( temp 2-component vector of double)
+0:77            vector swizzle ( temp 2-component vector of double)
+0:77              d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77                  'invocation' ( temp uint)
+0:77                Constant:
+0:77                  3 (const int)
+0:77              Sequence
+0:77                Constant:
+0:77                  0 (const int)
+0:77                Constant:
+0:77                  1 (const int)
+0:77            subgroupBroadcastFirst ( global 2-component vector of double)
+0:77              vector swizzle ( temp 2-component vector of double)
+0:77                d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77                    Constant:
+0:77                      1 (const int)
+0:77                  Constant:
+0:77                    3 (const int)
+0:77                Sequence
+0:77                  Constant:
+0:77                    0 (const int)
+0:77                  Constant:
+0:77                    1 (const int)
+0:78          move second child to first child ( temp 3-component vector of double)
+0:78            vector swizzle ( temp 3-component vector of double)
+0:78              d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:78                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78                  'invocation' ( temp uint)
+0:78                Constant:
+0:78                  3 (const int)
+0:78              Sequence
+0:78                Constant:
+0:78                  0 (const int)
+0:78                Constant:
+0:78                  1 (const int)
+0:78                Constant:
+0:78                  2 (const int)
+0:78            subgroupBroadcastFirst ( global 3-component vector of double)
+0:78              vector swizzle ( temp 3-component vector of double)
+0:78                d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:78                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78                    Constant:
+0:78                      2 (const int)
+0:78                  Constant:
+0:78                    3 (const int)
+0:78                Sequence
+0:78                  Constant:
+0:78                    0 (const int)
+0:78                  Constant:
+0:78                    1 (const int)
+0:78                  Constant:
+0:78                    2 (const int)
+0:79          move second child to first child ( temp 4-component vector of double)
+0:79            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:79              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                'invocation' ( temp uint)
+0:79              Constant:
+0:79                3 (const int)
+0:79            subgroupBroadcastFirst ( global 4-component vector of double)
+0:79              d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:79                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                  Constant:
+0:79                    3 (const int)
+0:79                Constant:
+0:79                  3 (const int)
+0:81          move second child to first child ( temp int)
+0:81            direct index ( temp int)
+0:81              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:81                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                  'invocation' ( temp uint)
+0:81                Constant:
+0:81                  1 (const int)
+0:81              Constant:
+0:81                0 (const int)
+0:81            Convert bool to int ( temp int)
+0:81              subgroupBroadcastFirst ( global bool)
+0:81                Compare Less Than ( temp bool)
+0:81                  direct index ( temp int)
+0:81                    i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:81                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                        Constant:
+0:81                          0 (const int)
+0:81                      Constant:
+0:81                        1 (const int)
+0:81                    Constant:
+0:81                      0 (const int)
+0:81                  Constant:
+0:81                    0 (const int)
+0:82          move second child to first child ( temp 2-component vector of int)
+0:82            vector swizzle ( temp 2-component vector of int)
+0:82              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:82                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82                  'invocation' ( temp uint)
+0:82                Constant:
+0:82                  1 (const int)
+0:82              Sequence
+0:82                Constant:
+0:82                  0 (const int)
+0:82                Constant:
+0:82                  1 (const int)
+0:82            Convert bool to int ( temp 2-component vector of int)
+0:82              subgroupBroadcastFirst ( global 2-component vector of bool)
+0:82                Compare Less Than ( global 2-component vector of bool)
+0:82                  vector swizzle ( temp 2-component vector of int)
+0:82                    i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:82                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82                        Constant:
+0:82                          1 (const int)
+0:82                      Constant:
+0:82                        1 (const int)
+0:82                    Sequence
+0:82                      Constant:
+0:82                        0 (const int)
+0:82                      Constant:
+0:82                        1 (const int)
+0:82                  Constant:
+0:82                    0 (const int)
+0:82                    0 (const int)
+0:83          move second child to first child ( temp 3-component vector of int)
+0:83            vector swizzle ( temp 3-component vector of int)
+0:83              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:83                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83                  'invocation' ( temp uint)
+0:83                Constant:
+0:83                  1 (const int)
+0:83              Sequence
+0:83                Constant:
+0:83                  0 (const int)
+0:83                Constant:
+0:83                  1 (const int)
+0:83                Constant:
+0:83                  2 (const int)
+0:83            Convert bool to int ( temp 3-component vector of int)
+0:83              subgroupBroadcastFirst ( global 3-component vector of bool)
+0:83                Compare Less Than ( global 3-component vector of bool)
+0:83                  vector swizzle ( temp 3-component vector of int)
+0:83                    i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:83                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83                        Constant:
+0:83                          1 (const int)
+0:83                      Constant:
+0:83                        1 (const int)
+0:83                    Sequence
+0:83                      Constant:
+0:83                        0 (const int)
+0:83                      Constant:
+0:83                        1 (const int)
+0:83                      Constant:
+0:83                        2 (const int)
+0:83                  Constant:
+0:83                    0 (const int)
+0:83                    0 (const int)
+0:83                    0 (const int)
+0:84          move second child to first child ( temp 4-component vector of int)
+0:84            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                'invocation' ( temp uint)
+0:84              Constant:
+0:84                1 (const int)
+0:84            Convert bool to int ( temp 4-component vector of int)
+0:84              subgroupBroadcastFirst ( global 4-component vector of bool)
+0:84                Compare Less Than ( global 4-component vector of bool)
+0:84                  i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                      Constant:
+0:84                        1 (const int)
+0:84                    Constant:
+0:84                      1 (const int)
+0:84                  Constant:
+0:84                    0 (const int)
+0:84                    0 (const int)
+0:84                    0 (const int)
+0:84                    0 (const int)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp uint)
+0:17          'invocation' ( temp uint)
+0:17          mod ( temp uint)
+0:17            add ( temp uint)
+0:17              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      Sequence
+0:19        move second child to first child ( temp 4-component vector of uint)
+0:19          'relMask' ( temp 4-component vector of uint)
+0:22          add ( temp 4-component vector of uint)
+0:21            add ( temp 4-component vector of uint)
+0:20              add ( temp 4-component vector of uint)
+0:19                add ( temp 4-component vector of uint)
+0:19                  'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:20                  'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:21                'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:22              'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:23            'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:25      Sequence
+0:25        move second child to first child ( temp 4-component vector of uint)
+0:25          'result' ( temp 4-component vector of uint)
+0:25          subgroupBallot ( global 4-component vector of uint)
+0:25            Constant:
+0:25              true (const bool)
+0:27      move second child to first child ( temp uint)
+0:27        direct index ( temp uint)
+0:27          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:27            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'invocation' ( temp uint)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Constant:
+0:27            0 (const int)
+0:27        subgroupBallotBitCount ( global uint)
+0:27          'result' ( temp 4-component vector of uint)
+0:28      move second child to first child ( temp uint)
+0:28        direct index ( temp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:28            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28              'invocation' ( temp uint)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            1 (const int)
+0:28        Convert int to uint ( temp uint)
+0:28          Test condition and select ( temp int)
+0:28            Condition
+0:28            subgroupBallotBitExtract ( global bool)
+0:28              'result' ( temp 4-component vector of uint)
+0:28              Constant:
+0:28                0 (const uint)
+0:28            true case
+0:28            Constant:
+0:28              1 (const int)
+0:28            false case
+0:28            Constant:
+0:28              0 (const int)
+0:29      move second child to first child ( temp uint)
+0:29        direct index ( temp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'invocation' ( temp uint)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            2 (const int)
+0:29        add ( temp uint)
+0:29          subgroupBallotInclusiveBitCount ( global uint)
+0:29            'result' ( temp 4-component vector of uint)
+0:29          subgroupBallotExclusiveBitCount ( global uint)
+0:29            'result' ( temp 4-component vector of uint)
+0:30      move second child to first child ( temp uint)
+0:30        direct index ( temp uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'invocation' ( temp uint)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Constant:
+0:30            3 (const int)
+0:30        add ( temp uint)
+0:30          subgroupBallotFindLSB ( global uint)
+0:30            'result' ( temp 4-component vector of uint)
+0:30          subgroupBallotFindMSB ( global uint)
+0:30            'result' ( temp 4-component vector of uint)
+0:32      Test condition and select ( temp void)
+0:32        Condition
+0:32        logical-and ( temp bool)
+0:32          Compare Equal ( temp bool)
+0:32            'relMask' ( temp 4-component vector of uint)
+0:32            'result' ( temp 4-component vector of uint)
+0:32          subgroupInverseBallot ( global bool)
+0:32            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32                Constant:
+0:32                  0 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:32        true case
+0:34        Sequence
+0:34          move second child to first child ( temp float)
+0:34            direct index ( temp float)
+0:34              f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:34                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                  'invocation' ( temp uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                0 (const int)
+0:34            subgroupBroadcast ( global float)
+0:34              direct index ( temp float)
+0:34                f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:34                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                    Constant:
+0:34                      0 (const int)
+0:34                  Constant:
+0:34                    0 (const int)
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                3 (const uint)
+0:35          move second child to first child ( temp 2-component vector of float)
+0:35            vector swizzle ( temp 2-component vector of float)
+0:35              f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:35                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                  'invocation' ( temp uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35              Sequence
+0:35                Constant:
+0:35                  0 (const int)
+0:35                Constant:
+0:35                  1 (const int)
+0:35            subgroupBroadcast ( global 2-component vector of float)
+0:35              vector swizzle ( temp 2-component vector of float)
+0:35                f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:35                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                    Constant:
+0:35                      1 (const int)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35                Sequence
+0:35                  Constant:
+0:35                    0 (const int)
+0:35                  Constant:
+0:35                    1 (const int)
+0:35              Constant:
+0:35                3 (const uint)
+0:36          move second child to first child ( temp 3-component vector of float)
+0:36            vector swizzle ( temp 3-component vector of float)
+0:36              f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:36                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                  'invocation' ( temp uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36              Sequence
+0:36                Constant:
+0:36                  0 (const int)
+0:36                Constant:
+0:36                  1 (const int)
+0:36                Constant:
+0:36                  2 (const int)
+0:36            subgroupBroadcast ( global 3-component vector of float)
+0:36              vector swizzle ( temp 3-component vector of float)
+0:36                f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:36                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                    Constant:
+0:36                      2 (const int)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36                Sequence
+0:36                  Constant:
+0:36                    0 (const int)
+0:36                  Constant:
+0:36                    1 (const int)
+0:36                  Constant:
+0:36                    2 (const int)
+0:36              Constant:
+0:36                3 (const uint)
+0:37          move second child to first child ( temp 4-component vector of float)
+0:37            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:37              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37                'invocation' ( temp uint)
+0:37              Constant:
+0:37                0 (const int)
+0:37            subgroupBroadcast ( global 4-component vector of float)
+0:37              f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:37                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37                  Constant:
+0:37                    3 (const int)
+0:37                Constant:
+0:37                  0 (const int)
+0:37              Constant:
+0:37                3 (const uint)
+0:39          move second child to first child ( temp int)
+0:39            direct index ( temp int)
+0:39              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                  'invocation' ( temp uint)
+0:39                Constant:
+0:39                  1 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            subgroupBroadcast ( global int)
+0:39              direct index ( temp int)
+0:39                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                    Constant:
+0:39                      0 (const int)
+0:39                  Constant:
+0:39                    1 (const int)
+0:39                Constant:
+0:39                  0 (const int)
+0:39              Constant:
+0:39                2 (const uint)
+0:40          move second child to first child ( temp 2-component vector of int)
+0:40            vector swizzle ( temp 2-component vector of int)
+0:40              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                  'invocation' ( temp uint)
+0:40                Constant:
+0:40                  1 (const int)
+0:40              Sequence
+0:40                Constant:
+0:40                  0 (const int)
+0:40                Constant:
+0:40                  1 (const int)
+0:40            subgroupBroadcast ( global 2-component vector of int)
+0:40              vector swizzle ( temp 2-component vector of int)
+0:40                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                    Constant:
+0:40                      1 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                Sequence
+0:40                  Constant:
+0:40                    0 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40              Constant:
+0:40                2 (const uint)
+0:41          move second child to first child ( temp 3-component vector of int)
+0:41            vector swizzle ( temp 3-component vector of int)
+0:41              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                  'invocation' ( temp uint)
+0:41                Constant:
+0:41                  1 (const int)
+0:41              Sequence
+0:41                Constant:
+0:41                  0 (const int)
+0:41                Constant:
+0:41                  1 (const int)
+0:41                Constant:
+0:41                  2 (const int)
+0:41            subgroupBroadcast ( global 3-component vector of int)
+0:41              vector swizzle ( temp 3-component vector of int)
+0:41                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                    Constant:
+0:41                      2 (const int)
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                Sequence
+0:41                  Constant:
+0:41                    0 (const int)
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                  Constant:
+0:41                    2 (const int)
+0:41              Constant:
+0:41                2 (const uint)
+0:42          move second child to first child ( temp 4-component vector of int)
+0:42            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                'invocation' ( temp uint)
+0:42              Constant:
+0:42                1 (const int)
+0:42            subgroupBroadcast ( global 4-component vector of int)
+0:42              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  Constant:
+0:42                    3 (const int)
+0:42                Constant:
+0:42                  1 (const int)
+0:42              Constant:
+0:42                2 (const uint)
+0:44          move second child to first child ( temp uint)
+0:44            direct index ( temp uint)
+0:44              u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:44                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                  'invocation' ( temp uint)
+0:44                Constant:
+0:44                  2 (const int)
+0:44              Constant:
+0:44                0 (const int)
+0:44            subgroupBroadcast ( global uint)
+0:44              direct index ( temp uint)
+0:44                u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:44                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                    Constant:
+0:44                      0 (const int)
+0:44                  Constant:
+0:44                    2 (const int)
+0:44                Constant:
+0:44                  0 (const int)
+0:44              Constant:
+0:44                1 (const uint)
+0:45          move second child to first child ( temp 2-component vector of uint)
+0:45            vector swizzle ( temp 2-component vector of uint)
+0:45              u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:45                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                  'invocation' ( temp uint)
+0:45                Constant:
+0:45                  2 (const int)
+0:45              Sequence
+0:45                Constant:
+0:45                  0 (const int)
+0:45                Constant:
+0:45                  1 (const int)
+0:45            subgroupBroadcast ( global 2-component vector of uint)
+0:45              vector swizzle ( temp 2-component vector of uint)
+0:45                u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:45                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                    Constant:
+0:45                      1 (const int)
+0:45                  Constant:
+0:45                    2 (const int)
+0:45                Sequence
+0:45                  Constant:
+0:45                    0 (const int)
+0:45                  Constant:
+0:45                    1 (const int)
+0:45              Constant:
+0:45                1 (const uint)
+0:46          move second child to first child ( temp 3-component vector of uint)
+0:46            vector swizzle ( temp 3-component vector of uint)
+0:46              u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:46                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                  'invocation' ( temp uint)
+0:46                Constant:
+0:46                  2 (const int)
+0:46              Sequence
+0:46                Constant:
+0:46                  0 (const int)
+0:46                Constant:
+0:46                  1 (const int)
+0:46                Constant:
+0:46                  2 (const int)
+0:46            subgroupBroadcast ( global 3-component vector of uint)
+0:46              vector swizzle ( temp 3-component vector of uint)
+0:46                u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:46                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                    Constant:
+0:46                      2 (const int)
+0:46                  Constant:
+0:46                    2 (const int)
+0:46                Sequence
+0:46                  Constant:
+0:46                    0 (const int)
+0:46                  Constant:
+0:46                    1 (const int)
+0:46                  Constant:
+0:46                    2 (const int)
+0:46              Constant:
+0:46                1 (const uint)
+0:47          move second child to first child ( temp 4-component vector of uint)
+0:47            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:47              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47                'invocation' ( temp uint)
+0:47              Constant:
+0:47                2 (const int)
+0:47            subgroupBroadcast ( global 4-component vector of uint)
+0:47              u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:47                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47                  Constant:
+0:47                    3 (const int)
+0:47                Constant:
+0:47                  2 (const int)
+0:47              Constant:
+0:47                1 (const uint)
+0:49          move second child to first child ( temp double)
+0:49            direct index ( temp double)
+0:49              d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:49                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                  'invocation' ( temp uint)
+0:49                Constant:
+0:49                  3 (const int)
+0:49              Constant:
+0:49                0 (const int)
+0:49            subgroupBroadcast ( global double)
+0:49              direct index ( temp double)
+0:49                d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:49                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                    Constant:
+0:49                      0 (const int)
+0:49                  Constant:
+0:49                    3 (const int)
+0:49                Constant:
+0:49                  0 (const int)
+0:49              Constant:
+0:49                0 (const uint)
+0:50          move second child to first child ( temp 2-component vector of double)
+0:50            vector swizzle ( temp 2-component vector of double)
+0:50              d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:50                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                  'invocation' ( temp uint)
+0:50                Constant:
+0:50                  3 (const int)
+0:50              Sequence
+0:50                Constant:
+0:50                  0 (const int)
+0:50                Constant:
+0:50                  1 (const int)
+0:50            subgroupBroadcast ( global 2-component vector of double)
+0:50              vector swizzle ( temp 2-component vector of double)
+0:50                d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:50                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                    Constant:
+0:50                      1 (const int)
+0:50                  Constant:
+0:50                    3 (const int)
+0:50                Sequence
+0:50                  Constant:
+0:50                    0 (const int)
+0:50                  Constant:
+0:50                    1 (const int)
+0:50              Constant:
+0:50                0 (const uint)
+0:51          move second child to first child ( temp 3-component vector of double)
+0:51            vector swizzle ( temp 3-component vector of double)
+0:51              d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:51                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                  'invocation' ( temp uint)
+0:51                Constant:
+0:51                  3 (const int)
+0:51              Sequence
+0:51                Constant:
+0:51                  0 (const int)
+0:51                Constant:
+0:51                  1 (const int)
+0:51                Constant:
+0:51                  2 (const int)
+0:51            subgroupBroadcast ( global 3-component vector of double)
+0:51              vector swizzle ( temp 3-component vector of double)
+0:51                d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:51                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                    Constant:
+0:51                      2 (const int)
+0:51                  Constant:
+0:51                    3 (const int)
+0:51                Sequence
+0:51                  Constant:
+0:51                    0 (const int)
+0:51                  Constant:
+0:51                    1 (const int)
+0:51                  Constant:
+0:51                    2 (const int)
+0:51              Constant:
+0:51                0 (const uint)
+0:52          move second child to first child ( temp 4-component vector of double)
+0:52            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:52              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52                'invocation' ( temp uint)
+0:52              Constant:
+0:52                3 (const int)
+0:52            subgroupBroadcast ( global 4-component vector of double)
+0:52              d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:52                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52                  Constant:
+0:52                    3 (const int)
+0:52                Constant:
+0:52                  3 (const int)
+0:52              Constant:
+0:52                0 (const uint)
+0:54          move second child to first child ( temp int)
+0:54            direct index ( temp int)
+0:54              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                  'invocation' ( temp uint)
+0:54                Constant:
+0:54                  1 (const int)
+0:54              Constant:
+0:54                0 (const int)
+0:54            Convert bool to int ( temp int)
+0:54              subgroupBroadcast ( global bool)
+0:54                Compare Less Than ( temp bool)
+0:54                  direct index ( temp int)
+0:54                    i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                        Constant:
+0:54                          0 (const int)
+0:54                      Constant:
+0:54                        1 (const int)
+0:54                    Constant:
+0:54                      0 (const int)
+0:54                  Constant:
+0:54                    0 (const int)
+0:54                Constant:
+0:54                  1 (const uint)
+0:55          move second child to first child ( temp 2-component vector of int)
+0:55            vector swizzle ( temp 2-component vector of int)
+0:55              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:55                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                  'invocation' ( temp uint)
+0:55                Constant:
+0:55                  1 (const int)
+0:55              Sequence
+0:55                Constant:
+0:55                  0 (const int)
+0:55                Constant:
+0:55                  1 (const int)
+0:55            Convert bool to int ( temp 2-component vector of int)
+0:55              subgroupBroadcast ( global 2-component vector of bool)
+0:55                Compare Less Than ( global 2-component vector of bool)
+0:55                  vector swizzle ( temp 2-component vector of int)
+0:55                    i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:55                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                        Constant:
+0:55                          1 (const int)
+0:55                      Constant:
+0:55                        1 (const int)
+0:55                    Sequence
+0:55                      Constant:
+0:55                        0 (const int)
+0:55                      Constant:
+0:55                        1 (const int)
+0:55                  Constant:
+0:55                    0 (const int)
+0:55                    0 (const int)
+0:55                Constant:
+0:55                  1 (const uint)
+0:56          move second child to first child ( temp 3-component vector of int)
+0:56            vector swizzle ( temp 3-component vector of int)
+0:56              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:56                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                  'invocation' ( temp uint)
+0:56                Constant:
+0:56                  1 (const int)
+0:56              Sequence
+0:56                Constant:
+0:56                  0 (const int)
+0:56                Constant:
+0:56                  1 (const int)
+0:56                Constant:
+0:56                  2 (const int)
+0:56            Convert bool to int ( temp 3-component vector of int)
+0:56              subgroupBroadcast ( global 3-component vector of bool)
+0:56                Compare Less Than ( global 3-component vector of bool)
+0:56                  vector swizzle ( temp 3-component vector of int)
+0:56                    i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:56                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                        Constant:
+0:56                          1 (const int)
+0:56                      Constant:
+0:56                        1 (const int)
+0:56                    Sequence
+0:56                      Constant:
+0:56                        0 (const int)
+0:56                      Constant:
+0:56                        1 (const int)
+0:56                      Constant:
+0:56                        2 (const int)
+0:56                  Constant:
+0:56                    0 (const int)
+0:56                    0 (const int)
+0:56                    0 (const int)
+0:56                Constant:
+0:56                  1 (const uint)
+0:57          move second child to first child ( temp 4-component vector of int)
+0:57            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:57              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57                'invocation' ( temp uint)
+0:57              Constant:
+0:57                1 (const int)
+0:57            Convert bool to int ( temp 4-component vector of int)
+0:57              subgroupBroadcast ( global 4-component vector of bool)
+0:57                Compare Less Than ( global 4-component vector of bool)
+0:57                  i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:57                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57                      Constant:
+0:57                        1 (const int)
+0:57                    Constant:
+0:57                      1 (const int)
+0:57                  Constant:
+0:57                    0 (const int)
+0:57                    0 (const int)
+0:57                    0 (const int)
+0:57                    0 (const int)
+0:57                Constant:
+0:57                  1 (const uint)
+0:32        false case
+0:61        Sequence
+0:61          move second child to first child ( temp float)
+0:61            direct index ( temp float)
+0:61              f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                  'invocation' ( temp uint)
+0:61                Constant:
+0:61                  0 (const int)
+0:61              Constant:
+0:61                0 (const int)
+0:61            subgroupBroadcastFirst ( global float)
+0:61              direct index ( temp float)
+0:61                f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                    Constant:
+0:61                      0 (const int)
+0:61                  Constant:
+0:61                    0 (const int)
+0:61                Constant:
+0:61                  0 (const int)
+0:62          move second child to first child ( temp 2-component vector of float)
+0:62            vector swizzle ( temp 2-component vector of float)
+0:62              f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62                  'invocation' ( temp uint)
+0:62                Constant:
+0:62                  0 (const int)
+0:62              Sequence
+0:62                Constant:
+0:62                  0 (const int)
+0:62                Constant:
+0:62                  1 (const int)
+0:62            subgroupBroadcastFirst ( global 2-component vector of float)
+0:62              vector swizzle ( temp 2-component vector of float)
+0:62                f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62                    Constant:
+0:62                      1 (const int)
+0:62                  Constant:
+0:62                    0 (const int)
+0:62                Sequence
+0:62                  Constant:
+0:62                    0 (const int)
+0:62                  Constant:
+0:62                    1 (const int)
+0:63          move second child to first child ( temp 3-component vector of float)
+0:63            vector swizzle ( temp 3-component vector of float)
+0:63              f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:63                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63                  'invocation' ( temp uint)
+0:63                Constant:
+0:63                  0 (const int)
+0:63              Sequence
+0:63                Constant:
+0:63                  0 (const int)
+0:63                Constant:
+0:63                  1 (const int)
+0:63                Constant:
+0:63                  2 (const int)
+0:63            subgroupBroadcastFirst ( global 3-component vector of float)
+0:63              vector swizzle ( temp 3-component vector of float)
+0:63                f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:63                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63                    Constant:
+0:63                      2 (const int)
+0:63                  Constant:
+0:63                    0 (const int)
+0:63                Sequence
+0:63                  Constant:
+0:63                    0 (const int)
+0:63                  Constant:
+0:63                    1 (const int)
+0:63                  Constant:
+0:63                    2 (const int)
+0:64          move second child to first child ( temp 4-component vector of float)
+0:64            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:64              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                'invocation' ( temp uint)
+0:64              Constant:
+0:64                0 (const int)
+0:64            subgroupBroadcastFirst ( global 4-component vector of float)
+0:64              f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:64                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                  Constant:
+0:64                    3 (const int)
+0:64                Constant:
+0:64                  0 (const int)
+0:66          move second child to first child ( temp int)
+0:66            direct index ( temp int)
+0:66              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                  'invocation' ( temp uint)
+0:66                Constant:
+0:66                  1 (const int)
+0:66              Constant:
+0:66                0 (const int)
+0:66            subgroupBroadcastFirst ( global int)
+0:66              direct index ( temp int)
+0:66                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                    Constant:
+0:66                      0 (const int)
+0:66                  Constant:
+0:66                    1 (const int)
+0:66                Constant:
+0:66                  0 (const int)
+0:67          move second child to first child ( temp 2-component vector of int)
+0:67            vector swizzle ( temp 2-component vector of int)
+0:67              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                  'invocation' ( temp uint)
+0:67                Constant:
+0:67                  1 (const int)
+0:67              Sequence
+0:67                Constant:
+0:67                  0 (const int)
+0:67                Constant:
+0:67                  1 (const int)
+0:67            subgroupBroadcastFirst ( global 2-component vector of int)
+0:67              vector swizzle ( temp 2-component vector of int)
+0:67                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                    Constant:
+0:67                      1 (const int)
+0:67                  Constant:
+0:67                    1 (const int)
+0:67                Sequence
+0:67                  Constant:
+0:67                    0 (const int)
+0:67                  Constant:
+0:67                    1 (const int)
+0:68          move second child to first child ( temp 3-component vector of int)
+0:68            vector swizzle ( temp 3-component vector of int)
+0:68              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:68                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68                  'invocation' ( temp uint)
+0:68                Constant:
+0:68                  1 (const int)
+0:68              Sequence
+0:68                Constant:
+0:68                  0 (const int)
+0:68                Constant:
+0:68                  1 (const int)
+0:68                Constant:
+0:68                  2 (const int)
+0:68            subgroupBroadcastFirst ( global 3-component vector of int)
+0:68              vector swizzle ( temp 3-component vector of int)
+0:68                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:68                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68                    Constant:
+0:68                      2 (const int)
+0:68                  Constant:
+0:68                    1 (const int)
+0:68                Sequence
+0:68                  Constant:
+0:68                    0 (const int)
+0:68                  Constant:
+0:68                    1 (const int)
+0:68                  Constant:
+0:68                    2 (const int)
+0:69          move second child to first child ( temp 4-component vector of int)
+0:69            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:69              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                'invocation' ( temp uint)
+0:69              Constant:
+0:69                1 (const int)
+0:69            subgroupBroadcastFirst ( global 4-component vector of int)
+0:69              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:69                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                  Constant:
+0:69                    3 (const int)
+0:69                Constant:
+0:69                  1 (const int)
+0:71          move second child to first child ( temp uint)
+0:71            direct index ( temp uint)
+0:71              u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                  'invocation' ( temp uint)
+0:71                Constant:
+0:71                  2 (const int)
+0:71              Constant:
+0:71                0 (const int)
+0:71            subgroupBroadcastFirst ( global uint)
+0:71              direct index ( temp uint)
+0:71                u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                    Constant:
+0:71                      0 (const int)
+0:71                  Constant:
+0:71                    2 (const int)
+0:71                Constant:
+0:71                  0 (const int)
+0:72          move second child to first child ( temp 2-component vector of uint)
+0:72            vector swizzle ( temp 2-component vector of uint)
+0:72              u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72                  'invocation' ( temp uint)
+0:72                Constant:
+0:72                  2 (const int)
+0:72              Sequence
+0:72                Constant:
+0:72                  0 (const int)
+0:72                Constant:
+0:72                  1 (const int)
+0:72            subgroupBroadcastFirst ( global 2-component vector of uint)
+0:72              vector swizzle ( temp 2-component vector of uint)
+0:72                u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72                    Constant:
+0:72                      1 (const int)
+0:72                  Constant:
+0:72                    2 (const int)
+0:72                Sequence
+0:72                  Constant:
+0:72                    0 (const int)
+0:72                  Constant:
+0:72                    1 (const int)
+0:73          move second child to first child ( temp 3-component vector of uint)
+0:73            vector swizzle ( temp 3-component vector of uint)
+0:73              u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:73                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73                  'invocation' ( temp uint)
+0:73                Constant:
+0:73                  2 (const int)
+0:73              Sequence
+0:73                Constant:
+0:73                  0 (const int)
+0:73                Constant:
+0:73                  1 (const int)
+0:73                Constant:
+0:73                  2 (const int)
+0:73            subgroupBroadcastFirst ( global 3-component vector of uint)
+0:73              vector swizzle ( temp 3-component vector of uint)
+0:73                u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:73                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73                    Constant:
+0:73                      2 (const int)
+0:73                  Constant:
+0:73                    2 (const int)
+0:73                Sequence
+0:73                  Constant:
+0:73                    0 (const int)
+0:73                  Constant:
+0:73                    1 (const int)
+0:73                  Constant:
+0:73                    2 (const int)
+0:74          move second child to first child ( temp 4-component vector of uint)
+0:74            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:74              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                'invocation' ( temp uint)
+0:74              Constant:
+0:74                2 (const int)
+0:74            subgroupBroadcastFirst ( global 4-component vector of uint)
+0:74              u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:74                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                  Constant:
+0:74                    3 (const int)
+0:74                Constant:
+0:74                  2 (const int)
+0:76          move second child to first child ( temp double)
+0:76            direct index ( temp double)
+0:76              d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                  'invocation' ( temp uint)
+0:76                Constant:
+0:76                  3 (const int)
+0:76              Constant:
+0:76                0 (const int)
+0:76            subgroupBroadcastFirst ( global double)
+0:76              direct index ( temp double)
+0:76                d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                    Constant:
+0:76                      0 (const int)
+0:76                  Constant:
+0:76                    3 (const int)
+0:76                Constant:
+0:76                  0 (const int)
+0:77          move second child to first child ( temp 2-component vector of double)
+0:77            vector swizzle ( temp 2-component vector of double)
+0:77              d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77                  'invocation' ( temp uint)
+0:77                Constant:
+0:77                  3 (const int)
+0:77              Sequence
+0:77                Constant:
+0:77                  0 (const int)
+0:77                Constant:
+0:77                  1 (const int)
+0:77            subgroupBroadcastFirst ( global 2-component vector of double)
+0:77              vector swizzle ( temp 2-component vector of double)
+0:77                d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77                    Constant:
+0:77                      1 (const int)
+0:77                  Constant:
+0:77                    3 (const int)
+0:77                Sequence
+0:77                  Constant:
+0:77                    0 (const int)
+0:77                  Constant:
+0:77                    1 (const int)
+0:78          move second child to first child ( temp 3-component vector of double)
+0:78            vector swizzle ( temp 3-component vector of double)
+0:78              d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:78                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78                  'invocation' ( temp uint)
+0:78                Constant:
+0:78                  3 (const int)
+0:78              Sequence
+0:78                Constant:
+0:78                  0 (const int)
+0:78                Constant:
+0:78                  1 (const int)
+0:78                Constant:
+0:78                  2 (const int)
+0:78            subgroupBroadcastFirst ( global 3-component vector of double)
+0:78              vector swizzle ( temp 3-component vector of double)
+0:78                d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:78                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78                    Constant:
+0:78                      2 (const int)
+0:78                  Constant:
+0:78                    3 (const int)
+0:78                Sequence
+0:78                  Constant:
+0:78                    0 (const int)
+0:78                  Constant:
+0:78                    1 (const int)
+0:78                  Constant:
+0:78                    2 (const int)
+0:79          move second child to first child ( temp 4-component vector of double)
+0:79            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:79              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                'invocation' ( temp uint)
+0:79              Constant:
+0:79                3 (const int)
+0:79            subgroupBroadcastFirst ( global 4-component vector of double)
+0:79              d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:79                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                  Constant:
+0:79                    3 (const int)
+0:79                Constant:
+0:79                  3 (const int)
+0:81          move second child to first child ( temp int)
+0:81            direct index ( temp int)
+0:81              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:81                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                  'invocation' ( temp uint)
+0:81                Constant:
+0:81                  1 (const int)
+0:81              Constant:
+0:81                0 (const int)
+0:81            Convert bool to int ( temp int)
+0:81              subgroupBroadcastFirst ( global bool)
+0:81                Compare Less Than ( temp bool)
+0:81                  direct index ( temp int)
+0:81                    i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:81                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                        Constant:
+0:81                          0 (const int)
+0:81                      Constant:
+0:81                        1 (const int)
+0:81                    Constant:
+0:81                      0 (const int)
+0:81                  Constant:
+0:81                    0 (const int)
+0:82          move second child to first child ( temp 2-component vector of int)
+0:82            vector swizzle ( temp 2-component vector of int)
+0:82              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:82                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82                  'invocation' ( temp uint)
+0:82                Constant:
+0:82                  1 (const int)
+0:82              Sequence
+0:82                Constant:
+0:82                  0 (const int)
+0:82                Constant:
+0:82                  1 (const int)
+0:82            Convert bool to int ( temp 2-component vector of int)
+0:82              subgroupBroadcastFirst ( global 2-component vector of bool)
+0:82                Compare Less Than ( global 2-component vector of bool)
+0:82                  vector swizzle ( temp 2-component vector of int)
+0:82                    i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:82                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82                        Constant:
+0:82                          1 (const int)
+0:82                      Constant:
+0:82                        1 (const int)
+0:82                    Sequence
+0:82                      Constant:
+0:82                        0 (const int)
+0:82                      Constant:
+0:82                        1 (const int)
+0:82                  Constant:
+0:82                    0 (const int)
+0:82                    0 (const int)
+0:83          move second child to first child ( temp 3-component vector of int)
+0:83            vector swizzle ( temp 3-component vector of int)
+0:83              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:83                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83                  'invocation' ( temp uint)
+0:83                Constant:
+0:83                  1 (const int)
+0:83              Sequence
+0:83                Constant:
+0:83                  0 (const int)
+0:83                Constant:
+0:83                  1 (const int)
+0:83                Constant:
+0:83                  2 (const int)
+0:83            Convert bool to int ( temp 3-component vector of int)
+0:83              subgroupBroadcastFirst ( global 3-component vector of bool)
+0:83                Compare Less Than ( global 3-component vector of bool)
+0:83                  vector swizzle ( temp 3-component vector of int)
+0:83                    i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:83                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83                        Constant:
+0:83                          1 (const int)
+0:83                      Constant:
+0:83                        1 (const int)
+0:83                    Sequence
+0:83                      Constant:
+0:83                        0 (const int)
+0:83                      Constant:
+0:83                        1 (const int)
+0:83                      Constant:
+0:83                        2 (const int)
+0:83                  Constant:
+0:83                    0 (const int)
+0:83                    0 (const int)
+0:83                    0 (const int)
+0:84          move second child to first child ( temp 4-component vector of int)
+0:84            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                'invocation' ( temp uint)
+0:84              Constant:
+0:84                1 (const int)
+0:84            Convert bool to int ( temp 4-component vector of int)
+0:84              subgroupBroadcastFirst ( global 4-component vector of bool)
+0:84                Compare Less Than ( global 4-component vector of bool)
+0:84                  i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                      Constant:
+0:84                        1 (const int)
+0:84                    Constant:
+0:84                      1 (const int)
+0:84                  Constant:
+0:84                    0 (const int)
+0:84                    0 (const int)
+0:84                    0 (const int)
+0:84                    0 (const int)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/Test/baseResults/glsl.450.subgroupBallotNeg.comp.out b/Test/baseResults/glsl.450.subgroupBallotNeg.comp.out
new file mode 100644
index 0000000..fd2e936
--- /dev/null
+++ b/Test/baseResults/glsl.450.subgroupBallotNeg.comp.out
@@ -0,0 +1,267 @@
+glsl.450.subgroupBallotNeg.comp
+ERROR: 0:32: 'id' : argument must be compile-time constant 
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+ERROR: node is still EOpNull!
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp uint)
+0:17          'invocation' ( temp uint)
+0:17          mod ( temp uint)
+0:17            add ( temp uint)
+0:17              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      Sequence
+0:19        move second child to first child ( temp 4-component vector of uint)
+0:19          'relMask' ( temp 4-component vector of uint)
+0:22          add ( temp 4-component vector of uint)
+0:21            add ( temp 4-component vector of uint)
+0:20              add ( temp 4-component vector of uint)
+0:19                add ( temp 4-component vector of uint)
+0:19                  'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:20                  'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:21                'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:22              'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:23            'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:25      Sequence
+0:25        move second child to first child ( temp 4-component vector of uint)
+0:25          'result' ( temp 4-component vector of uint)
+0:25          subgroupBallot ( global 4-component vector of uint)
+0:25            Constant:
+0:25              true (const bool)
+0:27      move second child to first child ( temp uint)
+0:27        direct index ( temp uint)
+0:27          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:27            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'invocation' ( temp uint)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Constant:
+0:27            0 (const int)
+0:27        subgroupBallotBitCount ( global uint)
+0:27          'result' ( temp 4-component vector of uint)
+0:28      move second child to first child ( temp uint)
+0:28        direct index ( temp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:28            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28              'invocation' ( temp uint)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            1 (const int)
+0:28        Convert int to uint ( temp uint)
+0:28          Test condition and select ( temp int)
+0:28            Condition
+0:28            subgroupBallotBitExtract ( global bool)
+0:28              'result' ( temp 4-component vector of uint)
+0:28              Constant:
+0:28                0 (const uint)
+0:28            true case
+0:28            Constant:
+0:28              1 (const int)
+0:28            false case
+0:28            Constant:
+0:28              0 (const int)
+0:29      move second child to first child ( temp uint)
+0:29        direct index ( temp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'invocation' ( temp uint)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            2 (const int)
+0:29        add ( temp uint)
+0:29          subgroupBallotInclusiveBitCount ( global uint)
+0:29            'result' ( temp 4-component vector of uint)
+0:29          subgroupBallotExclusiveBitCount ( global uint)
+0:29            'result' ( temp 4-component vector of uint)
+0:30      move second child to first child ( temp uint)
+0:30        direct index ( temp uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'invocation' ( temp uint)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Constant:
+0:30            3 (const int)
+0:30        add ( temp uint)
+0:30          subgroupBallotFindLSB ( global uint)
+0:30            'result' ( temp 4-component vector of uint)
+0:30          subgroupBallotFindMSB ( global uint)
+0:30            'result' ( temp 4-component vector of uint)
+0:32      move second child to first child ( temp float)
+0:32        direct index ( temp float)
+0:32          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:32            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              'invocation' ( temp uint)
+0:32            Constant:
+0:32              0 (const int)
+0:32          Constant:
+0:32            0 (const int)
+0:32        subgroupBroadcast ( global float)
+0:32          direct index ( temp float)
+0:32            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:32              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32                Constant:
+0:32                  0 (const int)
+0:32              Constant:
+0:32                0 (const int)
+0:32            Constant:
+0:32              0 (const int)
+0:32          'invocation' ( temp uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+ERROR: node is still EOpNull!
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp uint)
+0:17          'invocation' ( temp uint)
+0:17          mod ( temp uint)
+0:17            add ( temp uint)
+0:17              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      Sequence
+0:19        move second child to first child ( temp 4-component vector of uint)
+0:19          'relMask' ( temp 4-component vector of uint)
+0:22          add ( temp 4-component vector of uint)
+0:21            add ( temp 4-component vector of uint)
+0:20              add ( temp 4-component vector of uint)
+0:19                add ( temp 4-component vector of uint)
+0:19                  'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:20                  'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:21                'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:22              'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:23            'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:25      Sequence
+0:25        move second child to first child ( temp 4-component vector of uint)
+0:25          'result' ( temp 4-component vector of uint)
+0:25          subgroupBallot ( global 4-component vector of uint)
+0:25            Constant:
+0:25              true (const bool)
+0:27      move second child to first child ( temp uint)
+0:27        direct index ( temp uint)
+0:27          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:27            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'invocation' ( temp uint)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Constant:
+0:27            0 (const int)
+0:27        subgroupBallotBitCount ( global uint)
+0:27          'result' ( temp 4-component vector of uint)
+0:28      move second child to first child ( temp uint)
+0:28        direct index ( temp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:28            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28              'invocation' ( temp uint)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            1 (const int)
+0:28        Convert int to uint ( temp uint)
+0:28          Test condition and select ( temp int)
+0:28            Condition
+0:28            subgroupBallotBitExtract ( global bool)
+0:28              'result' ( temp 4-component vector of uint)
+0:28              Constant:
+0:28                0 (const uint)
+0:28            true case
+0:28            Constant:
+0:28              1 (const int)
+0:28            false case
+0:28            Constant:
+0:28              0 (const int)
+0:29      move second child to first child ( temp uint)
+0:29        direct index ( temp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'invocation' ( temp uint)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            2 (const int)
+0:29        add ( temp uint)
+0:29          subgroupBallotInclusiveBitCount ( global uint)
+0:29            'result' ( temp 4-component vector of uint)
+0:29          subgroupBallotExclusiveBitCount ( global uint)
+0:29            'result' ( temp 4-component vector of uint)
+0:30      move second child to first child ( temp uint)
+0:30        direct index ( temp uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'invocation' ( temp uint)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Constant:
+0:30            3 (const int)
+0:30        add ( temp uint)
+0:30          subgroupBallotFindLSB ( global uint)
+0:30            'result' ( temp 4-component vector of uint)
+0:30          subgroupBallotFindMSB ( global uint)
+0:30            'result' ( temp 4-component vector of uint)
+0:32      move second child to first child ( temp float)
+0:32        direct index ( temp float)
+0:32          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:32            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              'invocation' ( temp uint)
+0:32            Constant:
+0:32              0 (const int)
+0:32          Constant:
+0:32            0 (const int)
+0:32        subgroupBroadcast ( global float)
+0:32          direct index ( temp float)
+0:32            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:32              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32                Constant:
+0:32                  0 (const int)
+0:32              Constant:
+0:32                0 (const int)
+0:32            Constant:
+0:32              0 (const int)
+0:32          'invocation' ( temp uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/Test/baseResults/glsl.450.subgroupBasic.comp.out b/Test/baseResults/glsl.450.subgroupBasic.comp.out
new file mode 100644
index 0000000..654138b
--- /dev/null
+++ b/Test/baseResults/glsl.450.subgroupBasic.comp.out
@@ -0,0 +1,734 @@
+glsl.450.subgroupBasic.comp
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_SubgroupID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:78: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+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:242: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:243: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:244: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:245: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors.  No code generated.
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+local_size = (8, 8, 1)
+ERROR: node is still EOpNull!
+0:3  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3    Function Parameters: 
+0:3      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:6      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8      subgroupBarrier ( global void)
+0:9      subgroupMemoryBarrier ( global void)
+0:10      subgroupMemoryBarrierBuffer ( global void)
+0:11      subgroupMemoryBarrierImage ( global void)
+0:12      subgroupElect ( global bool)
+0:13      'gl_NumSubgroups' ( in uint NumSubgroups)
+0:14      'gl_SubgroupID' ( in uint SubgroupID)
+0:15      subgroupMemoryBarrierShared ( global void)
+0:17      subgroupAll ( global bool)
+0:17        Constant:
+0:17          true (const bool)
+0:18      subgroupAny ( global bool)
+0:18        Constant:
+0:18          false (const bool)
+0:19      subgroupAllEqual ( global bool)
+0:19        'f4' ( in 4-component vector of float)
+0:21      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26      subgroupBroadcast ( global 4-component vector of float)
+0:26        'f4' ( in 4-component vector of float)
+0:26        Constant:
+0:26          0 (const uint)
+0:27      subgroupBroadcastFirst ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of uint)
+0:28          'ballot' ( temp 4-component vector of uint)
+0:28          subgroupBallot ( global 4-component vector of uint)
+0:28            Constant:
+0:28              false (const bool)
+0:29      subgroupInverseBallot ( global bool)
+0:29        Constant:
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:30      subgroupBallotBitExtract ( global bool)
+0:30        'ballot' ( temp 4-component vector of uint)
+0:30        Constant:
+0:30          0 (const uint)
+0:31      subgroupBallotBitCount ( global uint)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:32      subgroupBallotInclusiveBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotExclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotFindLSB ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindMSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:37      subgroupShuffle ( global 4-component vector of float)
+0:37        'f4' ( in 4-component vector of float)
+0:37        Constant:
+0:37          0 (const uint)
+0:38      subgroupShuffleXor ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          1 (const uint)
+0:39      subgroupShuffleUp ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleDown ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        'result' ( temp 4-component vector of float)
+0:42        subgroupAdd ( global 4-component vector of float)
+0:42          'f4' ( in 4-component vector of float)
+0:43      subgroupMul ( global 4-component vector of float)
+0:43        'f4' ( in 4-component vector of float)
+0:44      subgroupMin ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMax ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupAnd ( global 4-component vector of uint)
+0:46        'ballot' ( temp 4-component vector of uint)
+0:47      subgroupOr ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupXor ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupInclusiveAdd ( global 4-component vector of float)
+0:49        'f4' ( in 4-component vector of float)
+0:50      subgroupInclusiveMul ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMin ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMax ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53        'ballot' ( temp 4-component vector of uint)
+0:54      subgroupInclusiveOr ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveXor ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupExclusiveAdd ( global 4-component vector of float)
+0:56        'f4' ( in 4-component vector of float)
+0:57      subgroupExclusiveMul ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMin ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMax ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60        'ballot' ( temp 4-component vector of uint)
+0:61      subgroupExclusiveOr ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveXor ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:64      subgroupClusteredAdd ( global 4-component vector of float)
+0:64        'f4' ( in 4-component vector of float)
+0:64        Constant:
+0:64          2 (const uint)
+0:65      subgroupClusteredMul ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMin ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMax ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredAnd ( global 4-component vector of uint)
+0:68        'ballot' ( temp 4-component vector of uint)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredOr ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredXor ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:72      subgroupQuadBroadcast ( global 4-component vector of float)
+0:72        'f4' ( in 4-component vector of float)
+0:72        Constant:
+0:72          0 (const uint)
+0:73      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:74      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:77      Sequence
+0:77        move second child to first child ( temp 4-component vector of uint)
+0:77          'parti' ( temp 4-component vector of uint)
+0:77          subgroupPartitionNV ( global 4-component vector of uint)
+0:77            'f4' ( in 4-component vector of float)
+0:78      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:78        'f4' ( in 4-component vector of float)
+0:78        'parti' ( temp 4-component vector of uint)
+0:79      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:79        'f4' ( in 4-component vector of float)
+0:79        'parti' ( temp 4-component vector of uint)
+0:80      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:82        'ballot' ( temp 4-component vector of uint)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:83        'ballot' ( temp 4-component vector of uint)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:85        'f4' ( in 4-component vector of float)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:86        'f4' ( in 4-component vector of float)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:89        'ballot' ( temp 4-component vector of uint)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:90        'ballot' ( temp 4-component vector of uint)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:92        'f4' ( in 4-component vector of float)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:93        'f4' ( in 4-component vector of float)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:96        'ballot' ( temp 4-component vector of uint)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:97        'ballot' ( temp 4-component vector of uint)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:100      Branch: Return with expression
+0:100        'result' ( temp 4-component vector of float)
+0:112  Function Definition: main( ( global void)
+0:112    Function Parameters: 
+0:114    Sequence
+0:114      move second child to first child ( temp int)
+0:114        indirect index (layout( column_major shared) temp int)
+0:114          a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:114            'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+0:114            Constant:
+0:114              0 (const int)
+0:114          'gl_SubgroupSize' ( in uint SubgroupSize)
+0:114        Constant:
+0:114          1 (const int)
+0:115      move second child to first child ( temp int)
+0:115        indirect index (layout( column_major shared) temp int)
+0:115          a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:115            'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+0:115            Constant:
+0:115              0 (const int)
+0:115          'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:115        Constant:
+0:115          1 (const int)
+0:116      move second child to first child ( temp int)
+0:116        indirect index (layout( column_major shared) temp int)
+0:116          a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:116            'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+0:116            Constant:
+0:116              0 (const int)
+0:116          'gl_NumSubgroups' ( in uint NumSubgroups)
+0:116        Constant:
+0:116          1 (const int)
+0:117      move second child to first child ( temp int)
+0:117        indirect index (layout( column_major shared) temp int)
+0:117          a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:117            'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+0:117            Constant:
+0:117              0 (const int)
+0:117          'gl_SubgroupID' ( in uint SubgroupID)
+0:117        Test condition and select ( temp int)
+0:117          Condition
+0:117          subgroupElect ( global bool)
+0:117          true case
+0:117          Constant:
+0:117            1 (const int)
+0:117          false case
+0:117          Constant:
+0:117            0 (const int)
+0:118      subgroupBarrier ( global void)
+0:119      subgroupMemoryBarrier ( global void)
+0:120      subgroupMemoryBarrierBuffer ( global void)
+0:121      subgroupMemoryBarrierShared ( global void)
+0:122      subgroupMemoryBarrierImage ( global void)
+0:126  Function Definition: ballot_works(vf4; ( global void)
+0:126    Function Parameters: 
+0:126      'f4' ( in 4-component vector of float)
+0:127    Sequence
+0:127      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:128      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:129      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:130      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:131      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:132      subgroupBroadcast ( global 4-component vector of float)
+0:132        'f4' ( in 4-component vector of float)
+0:132        Constant:
+0:132          0 (const uint)
+0:133      subgroupBroadcastFirst ( global 4-component vector of float)
+0:133        'f4' ( in 4-component vector of float)
+0:134      Sequence
+0:134        move second child to first child ( temp 4-component vector of uint)
+0:134          'ballot' ( temp 4-component vector of uint)
+0:134          subgroupBallot ( global 4-component vector of uint)
+0:134            Constant:
+0:134              false (const bool)
+0:135      subgroupInverseBallot ( global bool)
+0:135        Constant:
+0:135          1 (const uint)
+0:135          1 (const uint)
+0:135          1 (const uint)
+0:135          1 (const uint)
+0:136      subgroupBallotBitExtract ( global bool)
+0:136        'ballot' ( temp 4-component vector of uint)
+0:136        Constant:
+0:136          0 (const uint)
+0:137      subgroupBallotBitCount ( global uint)
+0:137        'ballot' ( temp 4-component vector of uint)
+0:138      subgroupBallotInclusiveBitCount ( global uint)
+0:138        'ballot' ( temp 4-component vector of uint)
+0:139      subgroupBallotExclusiveBitCount ( global uint)
+0:139        'ballot' ( temp 4-component vector of uint)
+0:140      subgroupBallotFindLSB ( global uint)
+0:140        'ballot' ( temp 4-component vector of uint)
+0:141      subgroupBallotFindMSB ( global uint)
+0:141        'ballot' ( temp 4-component vector of uint)
+0:145  Function Definition: vote_works(vf4; ( global void)
+0:145    Function Parameters: 
+0:145      'f4' ( in 4-component vector of float)
+0:147    Sequence
+0:147      subgroupAll ( global bool)
+0:147        Constant:
+0:147          true (const bool)
+0:148      subgroupAny ( global bool)
+0:148        Constant:
+0:148          false (const bool)
+0:149      subgroupAllEqual ( global bool)
+0:149        'f4' ( in 4-component vector of float)
+0:154  Function Definition: shuffle_works(vf4; ( global void)
+0:154    Function Parameters: 
+0:154      'f4' ( in 4-component vector of float)
+0:156    Sequence
+0:156      subgroupShuffle ( global 4-component vector of float)
+0:156        'f4' ( in 4-component vector of float)
+0:156        Constant:
+0:156          0 (const uint)
+0:157      subgroupShuffleXor ( global 4-component vector of float)
+0:157        'f4' ( in 4-component vector of float)
+0:157        Constant:
+0:157          1 (const uint)
+0:158      subgroupShuffleUp ( global 4-component vector of float)
+0:158        'f4' ( in 4-component vector of float)
+0:158        Constant:
+0:158          1 (const uint)
+0:159      subgroupShuffleDown ( global 4-component vector of float)
+0:159        'f4' ( in 4-component vector of float)
+0:159        Constant:
+0:159          1 (const uint)
+0:163  Function Definition: arith_works(vf4; ( global void)
+0:163    Function Parameters: 
+0:163      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:166      subgroupAdd ( global 4-component vector of float)
+0:166        'f4' ( in 4-component vector of float)
+0:167      subgroupMul ( global 4-component vector of float)
+0:167        'f4' ( in 4-component vector of float)
+0:168      subgroupMin ( global 4-component vector of float)
+0:168        'f4' ( in 4-component vector of float)
+0:169      subgroupMax ( global 4-component vector of float)
+0:169        'f4' ( in 4-component vector of float)
+0:170      subgroupAnd ( global 4-component vector of uint)
+0:170        'ballot' ( temp 4-component vector of uint)
+0:171      subgroupOr ( global 4-component vector of uint)
+0:171        'ballot' ( temp 4-component vector of uint)
+0:172      subgroupXor ( global 4-component vector of uint)
+0:172        'ballot' ( temp 4-component vector of uint)
+0:173      subgroupInclusiveAdd ( global 4-component vector of float)
+0:173        'f4' ( in 4-component vector of float)
+0:174      subgroupInclusiveMul ( global 4-component vector of float)
+0:174        'f4' ( in 4-component vector of float)
+0:175      subgroupInclusiveMin ( global 4-component vector of float)
+0:175        'f4' ( in 4-component vector of float)
+0:176      subgroupInclusiveMax ( global 4-component vector of float)
+0:176        'f4' ( in 4-component vector of float)
+0:177      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:177        'ballot' ( temp 4-component vector of uint)
+0:178      subgroupInclusiveOr ( global 4-component vector of uint)
+0:178        'ballot' ( temp 4-component vector of uint)
+0:179      subgroupInclusiveXor ( global 4-component vector of uint)
+0:179        'ballot' ( temp 4-component vector of uint)
+0:180      subgroupExclusiveAdd ( global 4-component vector of float)
+0:180        'f4' ( in 4-component vector of float)
+0:181      subgroupExclusiveMul ( global 4-component vector of float)
+0:181        'f4' ( in 4-component vector of float)
+0:182      subgroupExclusiveMin ( global 4-component vector of float)
+0:182        'f4' ( in 4-component vector of float)
+0:183      subgroupExclusiveMax ( global 4-component vector of float)
+0:183        'f4' ( in 4-component vector of float)
+0:184      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:184        'ballot' ( temp 4-component vector of uint)
+0:185      subgroupExclusiveOr ( global 4-component vector of uint)
+0:185        'ballot' ( temp 4-component vector of uint)
+0:186      subgroupExclusiveXor ( global 4-component vector of uint)
+0:186        'ballot' ( temp 4-component vector of uint)
+0:190  Function Definition: clustered_works(vf4; ( global void)
+0:190    Function Parameters: 
+0:190      'f4' ( in 4-component vector of float)
+0:192    Sequence
+0:192      Sequence
+0:192        move second child to first child ( temp 4-component vector of uint)
+0:192          'ballot' ( temp 4-component vector of uint)
+0:192          Constant:
+0:192            85 (const uint)
+0:192            0 (const uint)
+0:192            0 (const uint)
+0:192            0 (const uint)
+0:193      subgroupClusteredAdd ( global 4-component vector of float)
+0:193        'f4' ( in 4-component vector of float)
+0:193        Constant:
+0:193          2 (const uint)
+0:194      subgroupClusteredMul ( global 4-component vector of float)
+0:194        'f4' ( in 4-component vector of float)
+0:194        Constant:
+0:194          2 (const uint)
+0:195      subgroupClusteredMin ( global 4-component vector of float)
+0:195        'f4' ( in 4-component vector of float)
+0:195        Constant:
+0:195          2 (const uint)
+0:196      subgroupClusteredMax ( global 4-component vector of float)
+0:196        'f4' ( in 4-component vector of float)
+0:196        Constant:
+0:196          2 (const uint)
+0:197      subgroupClusteredAnd ( global 4-component vector of uint)
+0:197        'ballot' ( temp 4-component vector of uint)
+0:197        Constant:
+0:197          2 (const uint)
+0:198      subgroupClusteredOr ( global 4-component vector of uint)
+0:198        'ballot' ( temp 4-component vector of uint)
+0:198        Constant:
+0:198          2 (const uint)
+0:199      subgroupClusteredXor ( global 4-component vector of uint)
+0:199        'ballot' ( temp 4-component vector of uint)
+0:199        Constant:
+0:199          2 (const uint)
+0:203  Function Definition: quad_works(vf4; ( global void)
+0:203    Function Parameters: 
+0:203      'f4' ( in 4-component vector of float)
+0:205    Sequence
+0:205      subgroupQuadBroadcast ( global 4-component vector of float)
+0:205        'f4' ( in 4-component vector of float)
+0:205        Constant:
+0:205          0 (const uint)
+0:206      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:206        'f4' ( in 4-component vector of float)
+0:207      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:207        'f4' ( in 4-component vector of float)
+0:208      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:208        'f4' ( in 4-component vector of float)
+0:212  Function Definition: partitioned_works(vf4; ( global void)
+0:212    Function Parameters: 
+0:212      'f4' ( in 4-component vector of float)
+0:214    Sequence
+0:214      Sequence
+0:214        move second child to first child ( temp 4-component vector of uint)
+0:214          'parti' ( temp 4-component vector of uint)
+0:214          subgroupPartitionNV ( global 4-component vector of uint)
+0:214            'f4' ( in 4-component vector of float)
+0:215      Sequence
+0:215        move second child to first child ( temp 4-component vector of uint)
+0:215          'ballot' ( temp 4-component vector of uint)
+0:215          Constant:
+0:215            85 (const uint)
+0:215            0 (const uint)
+0:215            0 (const uint)
+0:215            0 (const uint)
+0:216      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:216        'f4' ( in 4-component vector of float)
+0:216        'parti' ( temp 4-component vector of uint)
+0:217      subgroupPartitionedMulNV ( 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      subgroupPartitionedMinNV ( 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      subgroupPartitionedMaxNV ( 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      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:220        'ballot' ( temp 4-component vector of uint)
+0:220        'parti' ( temp 4-component vector of uint)
+0:221      subgroupPartitionedOrNV ( 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      subgroupPartitionedXorNV ( 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      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:223        'f4' ( in 4-component vector of float)
+0:223        'parti' ( temp 4-component vector of uint)
+0:224      subgroupPartitionedInclusiveMulNV ( 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      subgroupPartitionedInclusiveMinNV ( 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      subgroupPartitionedInclusiveMaxNV ( 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:227      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:227        'ballot' ( temp 4-component vector of uint)
+0:227        'parti' ( temp 4-component vector of uint)
+0:228      subgroupPartitionedInclusiveOrNV ( 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      subgroupPartitionedInclusiveXorNV ( 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      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:230        'f4' ( in 4-component vector of float)
+0:230        'parti' ( temp 4-component vector of uint)
+0:231      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:231        'f4' ( in 4-component vector of float)
+0:231        'parti' ( temp 4-component vector of uint)
+0:232      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:232        'f4' ( in 4-component vector of float)
+0:232        'parti' ( temp 4-component vector of uint)
+0:233      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:233        'f4' ( in 4-component vector of float)
+0:233        'parti' ( temp 4-component vector of uint)
+0:234      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:234        'ballot' ( temp 4-component vector of uint)
+0:234        'parti' ( temp 4-component vector of uint)
+0:235      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:235        'ballot' ( temp 4-component vector of uint)
+0:235        'parti' ( temp 4-component vector of uint)
+0:236      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:236        'ballot' ( temp 4-component vector of uint)
+0:236        'parti' ( temp 4-component vector of uint)
+0:240  Function Definition: sm_builtins_err( ( global void)
+0:240    Function Parameters: 
+0:242    Sequence
+0:242      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:243      'gl_SMCountNV' ( in uint SMCountNV)
+0:244      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:245      'gl_SMIDNV' ( in uint SMIDNV)
+0:252  Function Definition: sm_builtins( ( global void)
+0:252    Function Parameters: 
+0:254    Sequence
+0:254      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:255      'gl_SMCountNV' ( in uint SMCountNV)
+0:256      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:257      'gl_SMIDNV' ( in uint SMIDNV)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+local_size = (8, 8, 1)
+ERROR: node is still EOpNull!
+0:112  Function Definition: main( ( global void)
+0:112    Function Parameters: 
+0:114    Sequence
+0:114      move second child to first child ( temp int)
+0:114        indirect index (layout( column_major shared) temp int)
+0:114          a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:114            'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+0:114            Constant:
+0:114              0 (const int)
+0:114          'gl_SubgroupSize' ( in uint SubgroupSize)
+0:114        Constant:
+0:114          1 (const int)
+0:115      move second child to first child ( temp int)
+0:115        indirect index (layout( column_major shared) temp int)
+0:115          a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:115            'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+0:115            Constant:
+0:115              0 (const int)
+0:115          'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:115        Constant:
+0:115          1 (const int)
+0:116      move second child to first child ( temp int)
+0:116        indirect index (layout( column_major shared) temp int)
+0:116          a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:116            'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+0:116            Constant:
+0:116              0 (const int)
+0:116          'gl_NumSubgroups' ( in uint NumSubgroups)
+0:116        Constant:
+0:116          1 (const int)
+0:117      move second child to first child ( temp int)
+0:117        indirect index (layout( column_major shared) temp int)
+0:117          a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:117            'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+0:117            Constant:
+0:117              0 (const int)
+0:117          'gl_SubgroupID' ( in uint SubgroupID)
+0:117        Test condition and select ( temp int)
+0:117          Condition
+0:117          subgroupElect ( global bool)
+0:117          true case
+0:117          Constant:
+0:117            1 (const int)
+0:117          false case
+0:117          Constant:
+0:117            0 (const int)
+0:118      subgroupBarrier ( global void)
+0:119      subgroupMemoryBarrier ( global void)
+0:120      subgroupMemoryBarrierBuffer ( global void)
+0:121      subgroupMemoryBarrierShared ( global void)
+0:122      subgroupMemoryBarrierImage ( global void)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a})
+
diff --git a/Test/baseResults/glsl.450.subgroupClustered.comp.out b/Test/baseResults/glsl.450.subgroupClustered.comp.out
new file mode 100644
index 0000000..23cf03e
--- /dev/null
+++ b/Test/baseResults/glsl.450.subgroupClustered.comp.out
@@ -0,0 +1,5285 @@
+glsl.450.subgroupClustered.comp
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+local_size = (8, 1, 1)
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp uint)
+0:17          'invocation' ( temp uint)
+0:17          mod ( temp uint)
+0:17            add ( temp uint)
+0:17              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      move second child to first child ( temp float)
+0:19        direct index ( temp float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'invocation' ( temp uint)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Constant:
+0:19            0 (const int)
+0:19        subgroupClusteredAdd ( global float)
+0:19          direct index ( temp float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                Constant:
+0:19                  0 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Constant:
+0:19            1 (const uint)
+0:20      move second child to first child ( temp 2-component vector of float)
+0:20        vector swizzle ( temp 2-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'invocation' ( temp uint)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20        subgroupClusteredAdd ( global 2-component vector of float)
+0:20          vector swizzle ( temp 2-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                Constant:
+0:20                  1 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20          Constant:
+0:20            1 (const uint)
+0:21      move second child to first child ( temp 3-component vector of float)
+0:21        vector swizzle ( temp 3-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'invocation' ( temp uint)
+0:21            Constant:
+0:21              0 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21            Constant:
+0:21              2 (const int)
+0:21        subgroupClusteredAdd ( global 3-component vector of float)
+0:21          vector swizzle ( temp 3-component vector of float)
+0:21            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                Constant:
+0:21                  2 (const int)
+0:21              Constant:
+0:21                0 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21              Constant:
+0:21                2 (const int)
+0:21          Constant:
+0:21            1 (const uint)
+0:22      move second child to first child ( temp 4-component vector of float)
+0:22        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'invocation' ( temp uint)
+0:22          Constant:
+0:22            0 (const int)
+0:22        subgroupClusteredAdd ( global 4-component vector of float)
+0:22          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              Constant:
+0:22                3 (const int)
+0:22            Constant:
+0:22              0 (const int)
+0:22          Constant:
+0:22            1 (const uint)
+0:24      move second child to first child ( temp int)
+0:24        direct index ( temp int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'invocation' ( temp uint)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:24        subgroupClusteredAdd ( global int)
+0:24          direct index ( temp int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                Constant:
+0:24                  0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:24          Constant:
+0:24            1 (const uint)
+0:25      move second child to first child ( temp 2-component vector of int)
+0:25        vector swizzle ( temp 2-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'invocation' ( temp uint)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25        subgroupClusteredAdd ( global 2-component vector of int)
+0:25          vector swizzle ( temp 2-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                Constant:
+0:25                  1 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25          Constant:
+0:25            1 (const uint)
+0:26      move second child to first child ( temp 3-component vector of int)
+0:26        vector swizzle ( temp 3-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'invocation' ( temp uint)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26        subgroupClusteredAdd ( global 3-component vector of int)
+0:26          vector swizzle ( temp 3-component vector of int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                Constant:
+0:26                  2 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26          Constant:
+0:26            1 (const uint)
+0:27      move second child to first child ( temp 4-component vector of int)
+0:27        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'invocation' ( temp uint)
+0:27          Constant:
+0:27            1 (const int)
+0:27        subgroupClusteredAdd ( global 4-component vector of int)
+0:27          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              Constant:
+0:27                3 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27          Constant:
+0:27            1 (const uint)
+0:29      move second child to first child ( temp uint)
+0:29        direct index ( temp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'invocation' ( temp uint)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            0 (const int)
+0:29        subgroupClusteredAdd ( global uint)
+0:29          direct index ( temp uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                Constant:
+0:29                  0 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Constant:
+0:29              0 (const int)
+0:29          Constant:
+0:29            1 (const uint)
+0:30      move second child to first child ( temp 2-component vector of uint)
+0:30        vector swizzle ( temp 2-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'invocation' ( temp uint)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30        subgroupClusteredAdd ( global 2-component vector of uint)
+0:30          vector swizzle ( temp 2-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                Constant:
+0:30                  1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30          Constant:
+0:30            1 (const uint)
+0:31      move second child to first child ( temp 3-component vector of uint)
+0:31        vector swizzle ( temp 3-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'invocation' ( temp uint)
+0:31            Constant:
+0:31              2 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31        subgroupClusteredAdd ( global 3-component vector of uint)
+0:31          vector swizzle ( temp 3-component vector of uint)
+0:31            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                Constant:
+0:31                  2 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31          Constant:
+0:31            1 (const uint)
+0:32      move second child to first child ( temp 4-component vector of uint)
+0:32        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'invocation' ( temp uint)
+0:32          Constant:
+0:32            2 (const int)
+0:32        subgroupClusteredAdd ( global 4-component vector of uint)
+0:32          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              Constant:
+0:32                3 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32          Constant:
+0:32            1 (const uint)
+0:34      move second child to first child ( temp double)
+0:34        direct index ( temp double)
+0:34          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'invocation' ( temp uint)
+0:34            Constant:
+0:34              3 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupClusteredAdd ( global double)
+0:34          direct index ( temp double)
+0:34            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                3 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          Constant:
+0:34            1 (const uint)
+0:35      move second child to first child ( temp 2-component vector of double)
+0:35        vector swizzle ( temp 2-component vector of double)
+0:35          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'invocation' ( temp uint)
+0:35            Constant:
+0:35              3 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35        subgroupClusteredAdd ( global 2-component vector of double)
+0:35          vector swizzle ( temp 2-component vector of double)
+0:35            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                Constant:
+0:35                  1 (const int)
+0:35              Constant:
+0:35                3 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:35          Constant:
+0:35            1 (const uint)
+0:36      move second child to first child ( temp 3-component vector of double)
+0:36        vector swizzle ( temp 3-component vector of double)
+0:36          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'invocation' ( temp uint)
+0:36            Constant:
+0:36              3 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36            Constant:
+0:36              2 (const int)
+0:36        subgroupClusteredAdd ( global 3-component vector of double)
+0:36          vector swizzle ( temp 3-component vector of double)
+0:36            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                Constant:
+0:36                  2 (const int)
+0:36              Constant:
+0:36                3 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:36              Constant:
+0:36                2 (const int)
+0:36          Constant:
+0:36            1 (const uint)
+0:37      move second child to first child ( temp 4-component vector of double)
+0:37        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'invocation' ( temp uint)
+0:37          Constant:
+0:37            3 (const int)
+0:37        subgroupClusteredAdd ( global 4-component vector of double)
+0:37          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              Constant:
+0:37                3 (const int)
+0:37            Constant:
+0:37              3 (const int)
+0:37          Constant:
+0:37            1 (const uint)
+0:39      move second child to first child ( temp float)
+0:39        direct index ( temp float)
+0:39          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:39            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'invocation' ( temp uint)
+0:39            Constant:
+0:39              0 (const int)
+0:39          Constant:
+0:39            0 (const int)
+0:39        subgroupClusteredMul ( global float)
+0:39          direct index ( temp float)
+0:39            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:39              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                Constant:
+0:39                  0 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39          Constant:
+0:39            1 (const uint)
+0:40      move second child to first child ( temp 2-component vector of float)
+0:40        vector swizzle ( temp 2-component vector of float)
+0:40          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:40            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'invocation' ( temp uint)
+0:40            Constant:
+0:40              0 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40        subgroupClusteredMul ( global 2-component vector of float)
+0:40          vector swizzle ( temp 2-component vector of float)
+0:40            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                Constant:
+0:40                  1 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40            Sequence
+0:40              Constant:
+0:40                0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40          Constant:
+0:40            1 (const uint)
+0:41      move second child to first child ( temp 3-component vector of float)
+0:41        vector swizzle ( temp 3-component vector of float)
+0:41          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:41            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'invocation' ( temp uint)
+0:41            Constant:
+0:41              0 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41            Constant:
+0:41              2 (const int)
+0:41        subgroupClusteredMul ( global 3-component vector of float)
+0:41          vector swizzle ( temp 3-component vector of float)
+0:41            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:41              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                Constant:
+0:41                  2 (const int)
+0:41              Constant:
+0:41                0 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41              Constant:
+0:41                2 (const int)
+0:41          Constant:
+0:41            1 (const uint)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:42          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'invocation' ( temp uint)
+0:42          Constant:
+0:42            0 (const int)
+0:42        subgroupClusteredMul ( global 4-component vector of float)
+0:42          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:42            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42              Constant:
+0:42                3 (const int)
+0:42            Constant:
+0:42              0 (const int)
+0:42          Constant:
+0:42            1 (const uint)
+0:44      move second child to first child ( temp int)
+0:44        direct index ( temp int)
+0:44          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'invocation' ( temp uint)
+0:44            Constant:
+0:44              1 (const int)
+0:44          Constant:
+0:44            0 (const int)
+0:44        subgroupClusteredMul ( global int)
+0:44          direct index ( temp int)
+0:44            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                Constant:
+0:44                  0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44            Constant:
+0:44              0 (const int)
+0:44          Constant:
+0:44            1 (const uint)
+0:45      move second child to first child ( temp 2-component vector of int)
+0:45        vector swizzle ( temp 2-component vector of int)
+0:45          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'invocation' ( temp uint)
+0:45            Constant:
+0:45              1 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45        subgroupClusteredMul ( global 2-component vector of int)
+0:45          vector swizzle ( temp 2-component vector of int)
+0:45            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                Constant:
+0:45                  1 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45          Constant:
+0:45            1 (const uint)
+0:46      move second child to first child ( temp 3-component vector of int)
+0:46        vector swizzle ( temp 3-component vector of int)
+0:46          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'invocation' ( temp uint)
+0:46            Constant:
+0:46              1 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46        subgroupClusteredMul ( global 3-component vector of int)
+0:46          vector swizzle ( temp 3-component vector of int)
+0:46            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                Constant:
+0:46                  2 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46          Constant:
+0:46            1 (const uint)
+0:47      move second child to first child ( temp 4-component vector of int)
+0:47        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'invocation' ( temp uint)
+0:47          Constant:
+0:47            1 (const int)
+0:47        subgroupClusteredMul ( global 4-component vector of int)
+0:47          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              Constant:
+0:47                3 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47          Constant:
+0:47            1 (const uint)
+0:49      move second child to first child ( temp uint)
+0:49        direct index ( temp uint)
+0:49          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:49            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'invocation' ( temp uint)
+0:49            Constant:
+0:49              2 (const int)
+0:49          Constant:
+0:49            0 (const int)
+0:49        subgroupClusteredMul ( global uint)
+0:49          direct index ( temp uint)
+0:49            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                Constant:
+0:49                  0 (const int)
+0:49              Constant:
+0:49                2 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:49          Constant:
+0:49            1 (const uint)
+0:50      move second child to first child ( temp 2-component vector of uint)
+0:50        vector swizzle ( temp 2-component vector of uint)
+0:50          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:50            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'invocation' ( temp uint)
+0:50            Constant:
+0:50              2 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50        subgroupClusteredMul ( global 2-component vector of uint)
+0:50          vector swizzle ( temp 2-component vector of uint)
+0:50            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                Constant:
+0:50                  1 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50          Constant:
+0:50            1 (const uint)
+0:51      move second child to first child ( temp 3-component vector of uint)
+0:51        vector swizzle ( temp 3-component vector of uint)
+0:51          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:51            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'invocation' ( temp uint)
+0:51            Constant:
+0:51              2 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:51        subgroupClusteredMul ( global 3-component vector of uint)
+0:51          vector swizzle ( temp 3-component vector of uint)
+0:51            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                Constant:
+0:51                  2 (const int)
+0:51              Constant:
+0:51                2 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51              Constant:
+0:51                2 (const int)
+0:51          Constant:
+0:51            1 (const uint)
+0:52      move second child to first child ( temp 4-component vector of uint)
+0:52        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:52          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'invocation' ( temp uint)
+0:52          Constant:
+0:52            2 (const int)
+0:52        subgroupClusteredMul ( global 4-component vector of uint)
+0:52          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:52            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              Constant:
+0:52                3 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52          Constant:
+0:52            1 (const uint)
+0:54      move second child to first child ( temp double)
+0:54        direct index ( temp double)
+0:54          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:54            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'invocation' ( temp uint)
+0:54            Constant:
+0:54              3 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupClusteredMul ( global double)
+0:54          direct index ( temp double)
+0:54            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                Constant:
+0:54                  0 (const int)
+0:54              Constant:
+0:54                3 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:54          Constant:
+0:54            1 (const uint)
+0:55      move second child to first child ( temp 2-component vector of double)
+0:55        vector swizzle ( temp 2-component vector of double)
+0:55          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:55            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'invocation' ( temp uint)
+0:55            Constant:
+0:55              3 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55        subgroupClusteredMul ( global 2-component vector of double)
+0:55          vector swizzle ( temp 2-component vector of double)
+0:55            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                Constant:
+0:55                  1 (const int)
+0:55              Constant:
+0:55                3 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55          Constant:
+0:55            1 (const uint)
+0:56      move second child to first child ( temp 3-component vector of double)
+0:56        vector swizzle ( temp 3-component vector of double)
+0:56          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:56            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'invocation' ( temp uint)
+0:56            Constant:
+0:56              3 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56            Constant:
+0:56              2 (const int)
+0:56        subgroupClusteredMul ( global 3-component vector of double)
+0:56          vector swizzle ( temp 3-component vector of double)
+0:56            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:56              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                Constant:
+0:56                  2 (const int)
+0:56              Constant:
+0:56                3 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:56          Constant:
+0:56            1 (const uint)
+0:57      move second child to first child ( temp 4-component vector of double)
+0:57        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:57          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'invocation' ( temp uint)
+0:57          Constant:
+0:57            3 (const int)
+0:57        subgroupClusteredMul ( global 4-component vector of double)
+0:57          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:57            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              Constant:
+0:57                3 (const int)
+0:57            Constant:
+0:57              3 (const int)
+0:57          Constant:
+0:57            1 (const uint)
+0:59      move second child to first child ( temp float)
+0:59        direct index ( temp float)
+0:59          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:59            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'invocation' ( temp uint)
+0:59            Constant:
+0:59              0 (const int)
+0:59          Constant:
+0:59            0 (const int)
+0:59        subgroupClusteredMin ( global float)
+0:59          direct index ( temp float)
+0:59            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                Constant:
+0:59                  0 (const int)
+0:59              Constant:
+0:59                0 (const int)
+0:59            Constant:
+0:59              0 (const int)
+0:59          Constant:
+0:59            1 (const uint)
+0:60      move second child to first child ( temp 2-component vector of float)
+0:60        vector swizzle ( temp 2-component vector of float)
+0:60          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:60            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'invocation' ( temp uint)
+0:60            Constant:
+0:60              0 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60        subgroupClusteredMin ( global 2-component vector of float)
+0:60          vector swizzle ( temp 2-component vector of float)
+0:60            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                Constant:
+0:60                  1 (const int)
+0:60              Constant:
+0:60                0 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60          Constant:
+0:60            1 (const uint)
+0:61      move second child to first child ( temp 3-component vector of float)
+0:61        vector swizzle ( temp 3-component vector of float)
+0:61          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'invocation' ( temp uint)
+0:61            Constant:
+0:61              0 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61            Constant:
+0:61              2 (const int)
+0:61        subgroupClusteredMin ( global 3-component vector of float)
+0:61          vector swizzle ( temp 3-component vector of float)
+0:61            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                Constant:
+0:61                  2 (const int)
+0:61              Constant:
+0:61                0 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61              Constant:
+0:61                2 (const int)
+0:61          Constant:
+0:61            1 (const uint)
+0:62      move second child to first child ( temp 4-component vector of float)
+0:62        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'invocation' ( temp uint)
+0:62          Constant:
+0:62            0 (const int)
+0:62        subgroupClusteredMin ( global 4-component vector of float)
+0:62          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              Constant:
+0:62                3 (const int)
+0:62            Constant:
+0:62              0 (const int)
+0:62          Constant:
+0:62            1 (const uint)
+0:64      move second child to first child ( temp int)
+0:64        direct index ( temp int)
+0:64          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'invocation' ( temp uint)
+0:64            Constant:
+0:64              1 (const int)
+0:64          Constant:
+0:64            0 (const int)
+0:64        subgroupClusteredMin ( global int)
+0:64          direct index ( temp int)
+0:64            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                Constant:
+0:64                  0 (const int)
+0:64              Constant:
+0:64                1 (const int)
+0:64            Constant:
+0:64              0 (const int)
+0:64          Constant:
+0:64            1 (const uint)
+0:65      move second child to first child ( temp 2-component vector of int)
+0:65        vector swizzle ( temp 2-component vector of int)
+0:65          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'invocation' ( temp uint)
+0:65            Constant:
+0:65              1 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65        subgroupClusteredMin ( global 2-component vector of int)
+0:65          vector swizzle ( temp 2-component vector of int)
+0:65            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                Constant:
+0:65                  1 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:65            Sequence
+0:65              Constant:
+0:65                0 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:65          Constant:
+0:65            1 (const uint)
+0:66      move second child to first child ( temp 3-component vector of int)
+0:66        vector swizzle ( temp 3-component vector of int)
+0:66          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'invocation' ( temp uint)
+0:66            Constant:
+0:66              1 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66        subgroupClusteredMin ( global 3-component vector of int)
+0:66          vector swizzle ( temp 3-component vector of int)
+0:66            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                Constant:
+0:66                  2 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:66            Sequence
+0:66              Constant:
+0:66                0 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:66              Constant:
+0:66                2 (const int)
+0:66          Constant:
+0:66            1 (const uint)
+0:67      move second child to first child ( temp 4-component vector of int)
+0:67        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'invocation' ( temp uint)
+0:67          Constant:
+0:67            1 (const int)
+0:67        subgroupClusteredMin ( global 4-component vector of int)
+0:67          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67              Constant:
+0:67                3 (const int)
+0:67            Constant:
+0:67              1 (const int)
+0:67          Constant:
+0:67            1 (const uint)
+0:69      move second child to first child ( temp uint)
+0:69        direct index ( temp uint)
+0:69          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:69            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'invocation' ( temp uint)
+0:69            Constant:
+0:69              2 (const int)
+0:69          Constant:
+0:69            0 (const int)
+0:69        subgroupClusteredMin ( global uint)
+0:69          direct index ( temp uint)
+0:69            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:69              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                Constant:
+0:69                  0 (const int)
+0:69              Constant:
+0:69                2 (const int)
+0:69            Constant:
+0:69              0 (const int)
+0:69          Constant:
+0:69            1 (const uint)
+0:70      move second child to first child ( temp 2-component vector of uint)
+0:70        vector swizzle ( temp 2-component vector of uint)
+0:70          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:70            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70              'invocation' ( temp uint)
+0:70            Constant:
+0:70              2 (const int)
+0:70          Sequence
+0:70            Constant:
+0:70              0 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70        subgroupClusteredMin ( global 2-component vector of uint)
+0:70          vector swizzle ( temp 2-component vector of uint)
+0:70            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:70              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70                Constant:
+0:70                  1 (const int)
+0:70              Constant:
+0:70                2 (const int)
+0:70            Sequence
+0:70              Constant:
+0:70                0 (const int)
+0:70              Constant:
+0:70                1 (const int)
+0:70          Constant:
+0:70            1 (const uint)
+0:71      move second child to first child ( temp 3-component vector of uint)
+0:71        vector swizzle ( temp 3-component vector of uint)
+0:71          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'invocation' ( temp uint)
+0:71            Constant:
+0:71              2 (const int)
+0:71          Sequence
+0:71            Constant:
+0:71              0 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71            Constant:
+0:71              2 (const int)
+0:71        subgroupClusteredMin ( global 3-component vector of uint)
+0:71          vector swizzle ( temp 3-component vector of uint)
+0:71            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                Constant:
+0:71                  2 (const int)
+0:71              Constant:
+0:71                2 (const int)
+0:71            Sequence
+0:71              Constant:
+0:71                0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:71              Constant:
+0:71                2 (const int)
+0:71          Constant:
+0:71            1 (const uint)
+0:72      move second child to first child ( temp 4-component vector of uint)
+0:72        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72            'invocation' ( temp uint)
+0:72          Constant:
+0:72            2 (const int)
+0:72        subgroupClusteredMin ( global 4-component vector of uint)
+0:72          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72              Constant:
+0:72                3 (const int)
+0:72            Constant:
+0:72              2 (const int)
+0:72          Constant:
+0:72            1 (const uint)
+0:74      move second child to first child ( temp double)
+0:74        direct index ( temp double)
+0:74          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:74            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74              'invocation' ( temp uint)
+0:74            Constant:
+0:74              3 (const int)
+0:74          Constant:
+0:74            0 (const int)
+0:74        subgroupClusteredMin ( global double)
+0:74          direct index ( temp double)
+0:74            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:74              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                Constant:
+0:74                  0 (const int)
+0:74              Constant:
+0:74                3 (const int)
+0:74            Constant:
+0:74              0 (const int)
+0:74          Constant:
+0:74            1 (const uint)
+0:75      move second child to first child ( temp 2-component vector of double)
+0:75        vector swizzle ( temp 2-component vector of double)
+0:75          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:75            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75              'invocation' ( temp uint)
+0:75            Constant:
+0:75              3 (const int)
+0:75          Sequence
+0:75            Constant:
+0:75              0 (const int)
+0:75            Constant:
+0:75              1 (const int)
+0:75        subgroupClusteredMin ( global 2-component vector of double)
+0:75          vector swizzle ( temp 2-component vector of double)
+0:75            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:75              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75                Constant:
+0:75                  1 (const int)
+0:75              Constant:
+0:75                3 (const int)
+0:75            Sequence
+0:75              Constant:
+0:75                0 (const int)
+0:75              Constant:
+0:75                1 (const int)
+0:75          Constant:
+0:75            1 (const uint)
+0:76      move second child to first child ( temp 3-component vector of double)
+0:76        vector swizzle ( temp 3-component vector of double)
+0:76          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76              'invocation' ( temp uint)
+0:76            Constant:
+0:76              3 (const int)
+0:76          Sequence
+0:76            Constant:
+0:76              0 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76            Constant:
+0:76              2 (const int)
+0:76        subgroupClusteredMin ( global 3-component vector of double)
+0:76          vector swizzle ( temp 3-component vector of double)
+0:76            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                Constant:
+0:76                  2 (const int)
+0:76              Constant:
+0:76                3 (const int)
+0:76            Sequence
+0:76              Constant:
+0:76                0 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:76              Constant:
+0:76                2 (const int)
+0:76          Constant:
+0:76            1 (const uint)
+0:77      move second child to first child ( temp 4-component vector of double)
+0:77        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77            'invocation' ( temp uint)
+0:77          Constant:
+0:77            3 (const int)
+0:77        subgroupClusteredMin ( global 4-component vector of double)
+0:77          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77              Constant:
+0:77                3 (const int)
+0:77            Constant:
+0:77              3 (const int)
+0:77          Constant:
+0:77            1 (const uint)
+0:79      move second child to first child ( temp float)
+0:79        direct index ( temp float)
+0:79          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:79            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79              'invocation' ( temp uint)
+0:79            Constant:
+0:79              0 (const int)
+0:79          Constant:
+0:79            0 (const int)
+0:79        subgroupClusteredMax ( global float)
+0:79          direct index ( temp float)
+0:79            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:79              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                Constant:
+0:79                  0 (const int)
+0:79              Constant:
+0:79                0 (const int)
+0:79            Constant:
+0:79              0 (const int)
+0:79          Constant:
+0:79            1 (const uint)
+0:80      move second child to first child ( temp 2-component vector of float)
+0:80        vector swizzle ( temp 2-component vector of float)
+0:80          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:80            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80              'invocation' ( temp uint)
+0:80            Constant:
+0:80              0 (const int)
+0:80          Sequence
+0:80            Constant:
+0:80              0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80        subgroupClusteredMax ( global 2-component vector of float)
+0:80          vector swizzle ( temp 2-component vector of float)
+0:80            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:80              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80                Constant:
+0:80                  1 (const int)
+0:80              Constant:
+0:80                0 (const int)
+0:80            Sequence
+0:80              Constant:
+0:80                0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80          Constant:
+0:80            1 (const uint)
+0:81      move second child to first child ( temp 3-component vector of float)
+0:81        vector swizzle ( temp 3-component vector of float)
+0:81          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:81            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81              'invocation' ( temp uint)
+0:81            Constant:
+0:81              0 (const int)
+0:81          Sequence
+0:81            Constant:
+0:81              0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81            Constant:
+0:81              2 (const int)
+0:81        subgroupClusteredMax ( global 3-component vector of float)
+0:81          vector swizzle ( temp 3-component vector of float)
+0:81            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:81              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                Constant:
+0:81                  2 (const int)
+0:81              Constant:
+0:81                0 (const int)
+0:81            Sequence
+0:81              Constant:
+0:81                0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81              Constant:
+0:81                2 (const int)
+0:81          Constant:
+0:81            1 (const uint)
+0:82      move second child to first child ( temp 4-component vector of float)
+0:82        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:82          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82            'invocation' ( temp uint)
+0:82          Constant:
+0:82            0 (const int)
+0:82        subgroupClusteredMax ( global 4-component vector of float)
+0:82          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:82            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82              Constant:
+0:82                3 (const int)
+0:82            Constant:
+0:82              0 (const int)
+0:82          Constant:
+0:82            1 (const uint)
+0:84      move second child to first child ( temp int)
+0:84        direct index ( temp int)
+0:84          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84              'invocation' ( temp uint)
+0:84            Constant:
+0:84              1 (const int)
+0:84          Constant:
+0:84            0 (const int)
+0:84        subgroupClusteredMax ( global int)
+0:84          direct index ( temp int)
+0:84            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                Constant:
+0:84                  0 (const int)
+0:84              Constant:
+0:84                1 (const int)
+0:84            Constant:
+0:84              0 (const int)
+0:84          Constant:
+0:84            1 (const uint)
+0:85      move second child to first child ( temp 2-component vector of int)
+0:85        vector swizzle ( temp 2-component vector of int)
+0:85          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:85            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85              'invocation' ( temp uint)
+0:85            Constant:
+0:85              1 (const int)
+0:85          Sequence
+0:85            Constant:
+0:85              0 (const int)
+0:85            Constant:
+0:85              1 (const int)
+0:85        subgroupClusteredMax ( global 2-component vector of int)
+0:85          vector swizzle ( temp 2-component vector of int)
+0:85            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:85              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85                Constant:
+0:85                  1 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:85            Sequence
+0:85              Constant:
+0:85                0 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:85          Constant:
+0:85            1 (const uint)
+0:86      move second child to first child ( temp 3-component vector of int)
+0:86        vector swizzle ( temp 3-component vector of int)
+0:86          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:86            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86              'invocation' ( temp uint)
+0:86            Constant:
+0:86              1 (const int)
+0:86          Sequence
+0:86            Constant:
+0:86              0 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:86        subgroupClusteredMax ( global 3-component vector of int)
+0:86          vector swizzle ( temp 3-component vector of int)
+0:86            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:86              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86                Constant:
+0:86                  2 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86              Constant:
+0:86                2 (const int)
+0:86          Constant:
+0:86            1 (const uint)
+0:87      move second child to first child ( temp 4-component vector of int)
+0:87        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:87          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87            'invocation' ( temp uint)
+0:87          Constant:
+0:87            1 (const int)
+0:87        subgroupClusteredMax ( global 4-component vector of int)
+0:87          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:87            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87              Constant:
+0:87                3 (const int)
+0:87            Constant:
+0:87              1 (const int)
+0:87          Constant:
+0:87            1 (const uint)
+0:89      move second child to first child ( temp uint)
+0:89        direct index ( temp uint)
+0:89          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:89            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89              'invocation' ( temp uint)
+0:89            Constant:
+0:89              2 (const int)
+0:89          Constant:
+0:89            0 (const int)
+0:89        subgroupClusteredMax ( global uint)
+0:89          direct index ( temp uint)
+0:89            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:89              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89                Constant:
+0:89                  0 (const int)
+0:89              Constant:
+0:89                2 (const int)
+0:89            Constant:
+0:89              0 (const int)
+0:89          Constant:
+0:89            1 (const uint)
+0:90      move second child to first child ( temp 2-component vector of uint)
+0:90        vector swizzle ( temp 2-component vector of uint)
+0:90          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:90            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90              'invocation' ( temp uint)
+0:90            Constant:
+0:90              2 (const int)
+0:90          Sequence
+0:90            Constant:
+0:90              0 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90        subgroupClusteredMax ( global 2-component vector of uint)
+0:90          vector swizzle ( temp 2-component vector of uint)
+0:90            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:90              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90                Constant:
+0:90                  1 (const int)
+0:90              Constant:
+0:90                2 (const int)
+0:90            Sequence
+0:90              Constant:
+0:90                0 (const int)
+0:90              Constant:
+0:90                1 (const int)
+0:90          Constant:
+0:90            1 (const uint)
+0:91      move second child to first child ( temp 3-component vector of uint)
+0:91        vector swizzle ( temp 3-component vector of uint)
+0:91          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:91            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91              'invocation' ( temp uint)
+0:91            Constant:
+0:91              2 (const int)
+0:91          Sequence
+0:91            Constant:
+0:91              0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91            Constant:
+0:91              2 (const int)
+0:91        subgroupClusteredMax ( global 3-component vector of uint)
+0:91          vector swizzle ( temp 3-component vector of uint)
+0:91            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:91              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91                Constant:
+0:91                  2 (const int)
+0:91              Constant:
+0:91                2 (const int)
+0:91            Sequence
+0:91              Constant:
+0:91                0 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:91              Constant:
+0:91                2 (const int)
+0:91          Constant:
+0:91            1 (const uint)
+0:92      move second child to first child ( temp 4-component vector of uint)
+0:92        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:92          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92            'invocation' ( temp uint)
+0:92          Constant:
+0:92            2 (const int)
+0:92        subgroupClusteredMax ( global 4-component vector of uint)
+0:92          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:92            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92              Constant:
+0:92                3 (const int)
+0:92            Constant:
+0:92              2 (const int)
+0:92          Constant:
+0:92            1 (const uint)
+0:94      move second child to first child ( temp double)
+0:94        direct index ( temp double)
+0:94          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:94            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94              'invocation' ( temp uint)
+0:94            Constant:
+0:94              3 (const int)
+0:94          Constant:
+0:94            0 (const int)
+0:94        subgroupClusteredMax ( global double)
+0:94          direct index ( temp double)
+0:94            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:94              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94                Constant:
+0:94                  0 (const int)
+0:94              Constant:
+0:94                3 (const int)
+0:94            Constant:
+0:94              0 (const int)
+0:94          Constant:
+0:94            1 (const uint)
+0:95      move second child to first child ( temp 2-component vector of double)
+0:95        vector swizzle ( temp 2-component vector of double)
+0:95          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:95            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95              'invocation' ( temp uint)
+0:95            Constant:
+0:95              3 (const int)
+0:95          Sequence
+0:95            Constant:
+0:95              0 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95        subgroupClusteredMax ( global 2-component vector of double)
+0:95          vector swizzle ( temp 2-component vector of double)
+0:95            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:95              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95                Constant:
+0:95                  1 (const int)
+0:95              Constant:
+0:95                3 (const int)
+0:95            Sequence
+0:95              Constant:
+0:95                0 (const int)
+0:95              Constant:
+0:95                1 (const int)
+0:95          Constant:
+0:95            1 (const uint)
+0:96      move second child to first child ( temp 3-component vector of double)
+0:96        vector swizzle ( temp 3-component vector of double)
+0:96          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:96            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96              'invocation' ( temp uint)
+0:96            Constant:
+0:96              3 (const int)
+0:96          Sequence
+0:96            Constant:
+0:96              0 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96            Constant:
+0:96              2 (const int)
+0:96        subgroupClusteredMax ( global 3-component vector of double)
+0:96          vector swizzle ( temp 3-component vector of double)
+0:96            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:96              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96                Constant:
+0:96                  2 (const int)
+0:96              Constant:
+0:96                3 (const int)
+0:96            Sequence
+0:96              Constant:
+0:96                0 (const int)
+0:96              Constant:
+0:96                1 (const int)
+0:96              Constant:
+0:96                2 (const int)
+0:96          Constant:
+0:96            1 (const uint)
+0:97      move second child to first child ( temp 4-component vector of double)
+0:97        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:97          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97            'invocation' ( temp uint)
+0:97          Constant:
+0:97            3 (const int)
+0:97        subgroupClusteredMax ( global 4-component vector of double)
+0:97          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:97            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97              Constant:
+0:97                3 (const int)
+0:97            Constant:
+0:97              3 (const int)
+0:97          Constant:
+0:97            1 (const uint)
+0:99      move second child to first child ( temp int)
+0:99        direct index ( temp int)
+0:99          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99              'invocation' ( temp uint)
+0:99            Constant:
+0:99              1 (const int)
+0:99          Constant:
+0:99            0 (const int)
+0:99        subgroupClusteredAnd ( global int)
+0:99          direct index ( temp int)
+0:99            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99                Constant:
+0:99                  0 (const int)
+0:99              Constant:
+0:99                1 (const int)
+0:99            Constant:
+0:99              0 (const int)
+0:99          Constant:
+0:99            1 (const uint)
+0:100      move second child to first child ( temp 2-component vector of int)
+0:100        vector swizzle ( temp 2-component vector of int)
+0:100          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100              'invocation' ( temp uint)
+0:100            Constant:
+0:100              1 (const int)
+0:100          Sequence
+0:100            Constant:
+0:100              0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100        subgroupClusteredAnd ( global 2-component vector of int)
+0:100          vector swizzle ( temp 2-component vector of int)
+0:100            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100                Constant:
+0:100                  1 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100            Sequence
+0:100              Constant:
+0:100                0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100          Constant:
+0:100            1 (const uint)
+0:101      move second child to first child ( temp 3-component vector of int)
+0:101        vector swizzle ( temp 3-component vector of int)
+0:101          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101              'invocation' ( temp uint)
+0:101            Constant:
+0:101              1 (const int)
+0:101          Sequence
+0:101            Constant:
+0:101              0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101            Constant:
+0:101              2 (const int)
+0:101        subgroupClusteredAnd ( global 3-component vector of int)
+0:101          vector swizzle ( temp 3-component vector of int)
+0:101            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101                Constant:
+0:101                  2 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101            Sequence
+0:101              Constant:
+0:101                0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101              Constant:
+0:101                2 (const int)
+0:101          Constant:
+0:101            1 (const uint)
+0:102      move second child to first child ( temp 4-component vector of int)
+0:102        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102            'invocation' ( temp uint)
+0:102          Constant:
+0:102            1 (const int)
+0:102        subgroupClusteredAnd ( global 4-component vector of int)
+0:102          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102              Constant:
+0:102                3 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102          Constant:
+0:102            1 (const uint)
+0:104      move second child to first child ( temp uint)
+0:104        direct index ( temp uint)
+0:104          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104              'invocation' ( temp uint)
+0:104            Constant:
+0:104              2 (const int)
+0:104          Constant:
+0:104            0 (const int)
+0:104        subgroupClusteredAnd ( global uint)
+0:104          direct index ( temp uint)
+0:104            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104                Constant:
+0:104                  0 (const int)
+0:104              Constant:
+0:104                2 (const int)
+0:104            Constant:
+0:104              0 (const int)
+0:104          Constant:
+0:104            1 (const uint)
+0:105      move second child to first child ( temp 2-component vector of uint)
+0:105        vector swizzle ( temp 2-component vector of uint)
+0:105          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105              'invocation' ( temp uint)
+0:105            Constant:
+0:105              2 (const int)
+0:105          Sequence
+0:105            Constant:
+0:105              0 (const int)
+0:105            Constant:
+0:105              1 (const int)
+0:105        subgroupClusteredAnd ( global 2-component vector of uint)
+0:105          vector swizzle ( temp 2-component vector of uint)
+0:105            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105                Constant:
+0:105                  1 (const int)
+0:105              Constant:
+0:105                2 (const int)
+0:105            Sequence
+0:105              Constant:
+0:105                0 (const int)
+0:105              Constant:
+0:105                1 (const int)
+0:105          Constant:
+0:105            1 (const uint)
+0:106      move second child to first child ( temp 3-component vector of uint)
+0:106        vector swizzle ( temp 3-component vector of uint)
+0:106          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106              'invocation' ( temp uint)
+0:106            Constant:
+0:106              2 (const int)
+0:106          Sequence
+0:106            Constant:
+0:106              0 (const int)
+0:106            Constant:
+0:106              1 (const int)
+0:106            Constant:
+0:106              2 (const int)
+0:106        subgroupClusteredAnd ( global 3-component vector of uint)
+0:106          vector swizzle ( temp 3-component vector of uint)
+0:106            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106                Constant:
+0:106                  2 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:106            Sequence
+0:106              Constant:
+0:106                0 (const int)
+0:106              Constant:
+0:106                1 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:106          Constant:
+0:106            1 (const uint)
+0:107      move second child to first child ( temp 4-component vector of uint)
+0:107        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107            'invocation' ( temp uint)
+0:107          Constant:
+0:107            2 (const int)
+0:107        subgroupClusteredAnd ( global 4-component vector of uint)
+0:107          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107              Constant:
+0:107                3 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107          Constant:
+0:107            1 (const uint)
+0:109      move second child to first child ( temp int)
+0:109        direct index ( temp int)
+0:109          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:109            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109              'invocation' ( temp uint)
+0:109            Constant:
+0:109              1 (const int)
+0:109          Constant:
+0:109            0 (const int)
+0:109        Convert bool to int ( temp int)
+0:109          subgroupClusteredAnd ( global bool)
+0:109            Compare Less Than ( temp bool)
+0:109              direct index ( temp int)
+0:109                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:109                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109                    Constant:
+0:109                      0 (const int)
+0:109                  Constant:
+0:109                    1 (const int)
+0:109                Constant:
+0:109                  0 (const int)
+0:109              Constant:
+0:109                0 (const int)
+0:109            Constant:
+0:109              1 (const uint)
+0:110      move second child to first child ( temp 2-component vector of int)
+0:110        vector swizzle ( temp 2-component vector of int)
+0:110          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:110            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110              'invocation' ( temp uint)
+0:110            Constant:
+0:110              1 (const int)
+0:110          Sequence
+0:110            Constant:
+0:110              0 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110        Convert bool to int ( temp 2-component vector of int)
+0:110          subgroupClusteredAnd ( global 2-component vector of bool)
+0:110            Compare Less Than ( global 2-component vector of bool)
+0:110              vector swizzle ( temp 2-component vector of int)
+0:110                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:110                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110                    Constant:
+0:110                      1 (const int)
+0:110                  Constant:
+0:110                    1 (const int)
+0:110                Sequence
+0:110                  Constant:
+0:110                    0 (const int)
+0:110                  Constant:
+0:110                    1 (const int)
+0:110              Constant:
+0:110                0 (const int)
+0:110                0 (const int)
+0:110            Constant:
+0:110              1 (const uint)
+0:111      move second child to first child ( temp 3-component vector of int)
+0:111        vector swizzle ( temp 3-component vector of int)
+0:111          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111              'invocation' ( temp uint)
+0:111            Constant:
+0:111              1 (const int)
+0:111          Sequence
+0:111            Constant:
+0:111              0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111            Constant:
+0:111              2 (const int)
+0:111        Convert bool to int ( temp 3-component vector of int)
+0:111          subgroupClusteredAnd ( global 3-component vector of bool)
+0:111            Compare Less Than ( global 3-component vector of bool)
+0:111              vector swizzle ( temp 3-component vector of int)
+0:111                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111                    Constant:
+0:111                      1 (const int)
+0:111                  Constant:
+0:111                    1 (const int)
+0:111                Sequence
+0:111                  Constant:
+0:111                    0 (const int)
+0:111                  Constant:
+0:111                    1 (const int)
+0:111                  Constant:
+0:111                    2 (const int)
+0:111              Constant:
+0:111                0 (const int)
+0:111                0 (const int)
+0:111                0 (const int)
+0:111            Constant:
+0:111              1 (const uint)
+0:112      move second child to first child ( temp 4-component vector of int)
+0:112        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112            'invocation' ( temp uint)
+0:112          Constant:
+0:112            1 (const int)
+0:112        Convert bool to int ( temp 4-component vector of int)
+0:112          subgroupClusteredAnd ( global 4-component vector of bool)
+0:112            Compare Less Than ( global 4-component vector of bool)
+0:112              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112                  Constant:
+0:112                    1 (const int)
+0:112                Constant:
+0:112                  1 (const int)
+0:112              Constant:
+0:112                0 (const int)
+0:112                0 (const int)
+0:112                0 (const int)
+0:112                0 (const int)
+0:112            Constant:
+0:112              1 (const uint)
+0:114      move second child to first child ( temp int)
+0:114        direct index ( temp int)
+0:114          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114              'invocation' ( temp uint)
+0:114            Constant:
+0:114              1 (const int)
+0:114          Constant:
+0:114            0 (const int)
+0:114        subgroupClusteredOr ( global int)
+0:114          direct index ( temp int)
+0:114            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114                Constant:
+0:114                  0 (const int)
+0:114              Constant:
+0:114                1 (const int)
+0:114            Constant:
+0:114              0 (const int)
+0:114          Constant:
+0:114            1 (const uint)
+0:115      move second child to first child ( temp 2-component vector of int)
+0:115        vector swizzle ( temp 2-component vector of int)
+0:115          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115              'invocation' ( temp uint)
+0:115            Constant:
+0:115              1 (const int)
+0:115          Sequence
+0:115            Constant:
+0:115              0 (const int)
+0:115            Constant:
+0:115              1 (const int)
+0:115        subgroupClusteredOr ( global 2-component vector of int)
+0:115          vector swizzle ( temp 2-component vector of int)
+0:115            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115                Constant:
+0:115                  1 (const int)
+0:115              Constant:
+0:115                1 (const int)
+0:115            Sequence
+0:115              Constant:
+0:115                0 (const int)
+0:115              Constant:
+0:115                1 (const int)
+0:115          Constant:
+0:115            1 (const uint)
+0:116      move second child to first child ( temp 3-component vector of int)
+0:116        vector swizzle ( temp 3-component vector of int)
+0:116          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116              'invocation' ( temp uint)
+0:116            Constant:
+0:116              1 (const int)
+0:116          Sequence
+0:116            Constant:
+0:116              0 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116            Constant:
+0:116              2 (const int)
+0:116        subgroupClusteredOr ( global 3-component vector of int)
+0:116          vector swizzle ( temp 3-component vector of int)
+0:116            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116                Constant:
+0:116                  2 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:116            Sequence
+0:116              Constant:
+0:116                0 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:116              Constant:
+0:116                2 (const int)
+0:116          Constant:
+0:116            1 (const uint)
+0:117      move second child to first child ( temp 4-component vector of int)
+0:117        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117            'invocation' ( temp uint)
+0:117          Constant:
+0:117            1 (const int)
+0:117        subgroupClusteredOr ( global 4-component vector of int)
+0:117          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117              Constant:
+0:117                3 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:117          Constant:
+0:117            1 (const uint)
+0:119      move second child to first child ( temp uint)
+0:119        direct index ( temp uint)
+0:119          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119              'invocation' ( temp uint)
+0:119            Constant:
+0:119              2 (const int)
+0:119          Constant:
+0:119            0 (const int)
+0:119        subgroupClusteredOr ( global uint)
+0:119          direct index ( temp uint)
+0:119            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119                Constant:
+0:119                  0 (const int)
+0:119              Constant:
+0:119                2 (const int)
+0:119            Constant:
+0:119              0 (const int)
+0:119          Constant:
+0:119            1 (const uint)
+0:120      move second child to first child ( temp 2-component vector of uint)
+0:120        vector swizzle ( temp 2-component vector of uint)
+0:120          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:120            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120              'invocation' ( temp uint)
+0:120            Constant:
+0:120              2 (const int)
+0:120          Sequence
+0:120            Constant:
+0:120              0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120        subgroupClusteredOr ( global 2-component vector of uint)
+0:120          vector swizzle ( temp 2-component vector of uint)
+0:120            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:120              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120                Constant:
+0:120                  1 (const int)
+0:120              Constant:
+0:120                2 (const int)
+0:120            Sequence
+0:120              Constant:
+0:120                0 (const int)
+0:120              Constant:
+0:120                1 (const int)
+0:120          Constant:
+0:120            1 (const uint)
+0:121      move second child to first child ( temp 3-component vector of uint)
+0:121        vector swizzle ( temp 3-component vector of uint)
+0:121          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:121            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121              'invocation' ( temp uint)
+0:121            Constant:
+0:121              2 (const int)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121            Constant:
+0:121              2 (const int)
+0:121        subgroupClusteredOr ( global 3-component vector of uint)
+0:121          vector swizzle ( temp 3-component vector of uint)
+0:121            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:121              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121                Constant:
+0:121                  2 (const int)
+0:121              Constant:
+0:121                2 (const int)
+0:121            Sequence
+0:121              Constant:
+0:121                0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:121              Constant:
+0:121                2 (const int)
+0:121          Constant:
+0:121            1 (const uint)
+0:122      move second child to first child ( temp 4-component vector of uint)
+0:122        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:122          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122            'invocation' ( temp uint)
+0:122          Constant:
+0:122            2 (const int)
+0:122        subgroupClusteredOr ( global 4-component vector of uint)
+0:122          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:122            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122              Constant:
+0:122                3 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:122          Constant:
+0:122            1 (const uint)
+0:124      move second child to first child ( temp int)
+0:124        direct index ( temp int)
+0:124          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:124            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124              'invocation' ( temp uint)
+0:124            Constant:
+0:124              1 (const int)
+0:124          Constant:
+0:124            0 (const int)
+0:124        Convert bool to int ( temp int)
+0:124          subgroupClusteredOr ( global bool)
+0:124            Compare Less Than ( temp bool)
+0:124              direct index ( temp int)
+0:124                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:124                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124                    Constant:
+0:124                      0 (const int)
+0:124                  Constant:
+0:124                    1 (const int)
+0:124                Constant:
+0:124                  0 (const int)
+0:124              Constant:
+0:124                0 (const int)
+0:124            Constant:
+0:124              1 (const uint)
+0:125      move second child to first child ( temp 2-component vector of int)
+0:125        vector swizzle ( temp 2-component vector of int)
+0:125          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:125            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125              'invocation' ( temp uint)
+0:125            Constant:
+0:125              1 (const int)
+0:125          Sequence
+0:125            Constant:
+0:125              0 (const int)
+0:125            Constant:
+0:125              1 (const int)
+0:125        Convert bool to int ( temp 2-component vector of int)
+0:125          subgroupClusteredOr ( global 2-component vector of bool)
+0:125            Compare Less Than ( global 2-component vector of bool)
+0:125              vector swizzle ( temp 2-component vector of int)
+0:125                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:125                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125                    Constant:
+0:125                      1 (const int)
+0:125                  Constant:
+0:125                    1 (const int)
+0:125                Sequence
+0:125                  Constant:
+0:125                    0 (const int)
+0:125                  Constant:
+0:125                    1 (const int)
+0:125              Constant:
+0:125                0 (const int)
+0:125                0 (const int)
+0:125            Constant:
+0:125              1 (const uint)
+0:126      move second child to first child ( temp 3-component vector of int)
+0:126        vector swizzle ( temp 3-component vector of int)
+0:126          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126              'invocation' ( temp uint)
+0:126            Constant:
+0:126              1 (const int)
+0:126          Sequence
+0:126            Constant:
+0:126              0 (const int)
+0:126            Constant:
+0:126              1 (const int)
+0:126            Constant:
+0:126              2 (const int)
+0:126        Convert bool to int ( temp 3-component vector of int)
+0:126          subgroupClusteredOr ( global 3-component vector of bool)
+0:126            Compare Less Than ( global 3-component vector of bool)
+0:126              vector swizzle ( temp 3-component vector of int)
+0:126                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126                    Constant:
+0:126                      1 (const int)
+0:126                  Constant:
+0:126                    1 (const int)
+0:126                Sequence
+0:126                  Constant:
+0:126                    0 (const int)
+0:126                  Constant:
+0:126                    1 (const int)
+0:126                  Constant:
+0:126                    2 (const int)
+0:126              Constant:
+0:126                0 (const int)
+0:126                0 (const int)
+0:126                0 (const int)
+0:126            Constant:
+0:126              1 (const uint)
+0:127      move second child to first child ( temp 4-component vector of int)
+0:127        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127            'invocation' ( temp uint)
+0:127          Constant:
+0:127            1 (const int)
+0:127        Convert bool to int ( temp 4-component vector of int)
+0:127          subgroupClusteredOr ( global 4-component vector of bool)
+0:127            Compare Less Than ( global 4-component vector of bool)
+0:127              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127                  Constant:
+0:127                    1 (const int)
+0:127                Constant:
+0:127                  1 (const int)
+0:127              Constant:
+0:127                0 (const int)
+0:127                0 (const int)
+0:127                0 (const int)
+0:127                0 (const int)
+0:127            Constant:
+0:127              1 (const uint)
+0:129      move second child to first child ( temp int)
+0:129        direct index ( temp int)
+0:129          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129              'invocation' ( temp uint)
+0:129            Constant:
+0:129              1 (const int)
+0:129          Constant:
+0:129            0 (const int)
+0:129        subgroupClusteredXor ( global int)
+0:129          direct index ( temp int)
+0:129            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129                Constant:
+0:129                  0 (const int)
+0:129              Constant:
+0:129                1 (const int)
+0:129            Constant:
+0:129              0 (const int)
+0:129          Constant:
+0:129            1 (const uint)
+0:130      move second child to first child ( temp 2-component vector of int)
+0:130        vector swizzle ( temp 2-component vector of int)
+0:130          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:130            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130              'invocation' ( temp uint)
+0:130            Constant:
+0:130              1 (const int)
+0:130          Sequence
+0:130            Constant:
+0:130              0 (const int)
+0:130            Constant:
+0:130              1 (const int)
+0:130        subgroupClusteredXor ( global 2-component vector of int)
+0:130          vector swizzle ( temp 2-component vector of int)
+0:130            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:130              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130                Constant:
+0:130                  1 (const int)
+0:130              Constant:
+0:130                1 (const int)
+0:130            Sequence
+0:130              Constant:
+0:130                0 (const int)
+0:130              Constant:
+0:130                1 (const int)
+0:130          Constant:
+0:130            1 (const uint)
+0:131      move second child to first child ( temp 3-component vector of int)
+0:131        vector swizzle ( temp 3-component vector of int)
+0:131          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:131            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131              'invocation' ( temp uint)
+0:131            Constant:
+0:131              1 (const int)
+0:131          Sequence
+0:131            Constant:
+0:131              0 (const int)
+0:131            Constant:
+0:131              1 (const int)
+0:131            Constant:
+0:131              2 (const int)
+0:131        subgroupClusteredXor ( global 3-component vector of int)
+0:131          vector swizzle ( temp 3-component vector of int)
+0:131            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:131              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131                Constant:
+0:131                  2 (const int)
+0:131              Constant:
+0:131                1 (const int)
+0:131            Sequence
+0:131              Constant:
+0:131                0 (const int)
+0:131              Constant:
+0:131                1 (const int)
+0:131              Constant:
+0:131                2 (const int)
+0:131          Constant:
+0:131            1 (const uint)
+0:132      move second child to first child ( temp 4-component vector of int)
+0:132        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:132          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132            'invocation' ( temp uint)
+0:132          Constant:
+0:132            1 (const int)
+0:132        subgroupClusteredXor ( global 4-component vector of int)
+0:132          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:132            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132              Constant:
+0:132                3 (const int)
+0:132            Constant:
+0:132              1 (const int)
+0:132          Constant:
+0:132            1 (const uint)
+0:134      move second child to first child ( temp uint)
+0:134        direct index ( temp uint)
+0:134          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134              'invocation' ( temp uint)
+0:134            Constant:
+0:134              2 (const int)
+0:134          Constant:
+0:134            0 (const int)
+0:134        subgroupClusteredXor ( global uint)
+0:134          direct index ( temp uint)
+0:134            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134                Constant:
+0:134                  0 (const int)
+0:134              Constant:
+0:134                2 (const int)
+0:134            Constant:
+0:134              0 (const int)
+0:134          Constant:
+0:134            1 (const uint)
+0:135      move second child to first child ( temp 2-component vector of uint)
+0:135        vector swizzle ( temp 2-component vector of uint)
+0:135          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:135            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135              'invocation' ( temp uint)
+0:135            Constant:
+0:135              2 (const int)
+0:135          Sequence
+0:135            Constant:
+0:135              0 (const int)
+0:135            Constant:
+0:135              1 (const int)
+0:135        subgroupClusteredXor ( global 2-component vector of uint)
+0:135          vector swizzle ( temp 2-component vector of uint)
+0:135            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:135              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135                Constant:
+0:135                  1 (const int)
+0:135              Constant:
+0:135                2 (const int)
+0:135            Sequence
+0:135              Constant:
+0:135                0 (const int)
+0:135              Constant:
+0:135                1 (const int)
+0:135          Constant:
+0:135            1 (const uint)
+0:136      move second child to first child ( temp 3-component vector of uint)
+0:136        vector swizzle ( temp 3-component vector of uint)
+0:136          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:136            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136              'invocation' ( temp uint)
+0:136            Constant:
+0:136              2 (const int)
+0:136          Sequence
+0:136            Constant:
+0:136              0 (const int)
+0:136            Constant:
+0:136              1 (const int)
+0:136            Constant:
+0:136              2 (const int)
+0:136        subgroupClusteredXor ( global 3-component vector of uint)
+0:136          vector swizzle ( temp 3-component vector of uint)
+0:136            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:136              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136                Constant:
+0:136                  2 (const int)
+0:136              Constant:
+0:136                2 (const int)
+0:136            Sequence
+0:136              Constant:
+0:136                0 (const int)
+0:136              Constant:
+0:136                1 (const int)
+0:136              Constant:
+0:136                2 (const int)
+0:136          Constant:
+0:136            1 (const uint)
+0:137      move second child to first child ( temp 4-component vector of uint)
+0:137        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:137          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137            'invocation' ( temp uint)
+0:137          Constant:
+0:137            2 (const int)
+0:137        subgroupClusteredXor ( global 4-component vector of uint)
+0:137          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:137            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137              Constant:
+0:137                3 (const int)
+0:137            Constant:
+0:137              2 (const int)
+0:137          Constant:
+0:137            1 (const uint)
+0:139      move second child to first child ( temp int)
+0:139        direct index ( temp int)
+0:139          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139              'invocation' ( temp uint)
+0:139            Constant:
+0:139              1 (const int)
+0:139          Constant:
+0:139            0 (const int)
+0:139        Convert bool to int ( temp int)
+0:139          subgroupClusteredXor ( global bool)
+0:139            Compare Less Than ( temp bool)
+0:139              direct index ( temp int)
+0:139                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139                    Constant:
+0:139                      0 (const int)
+0:139                  Constant:
+0:139                    1 (const int)
+0:139                Constant:
+0:139                  0 (const int)
+0:139              Constant:
+0:139                0 (const int)
+0:139            Constant:
+0:139              1 (const uint)
+0:140      move second child to first child ( temp 2-component vector of int)
+0:140        vector swizzle ( temp 2-component vector of int)
+0:140          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:140            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140              'invocation' ( temp uint)
+0:140            Constant:
+0:140              1 (const int)
+0:140          Sequence
+0:140            Constant:
+0:140              0 (const int)
+0:140            Constant:
+0:140              1 (const int)
+0:140        Convert bool to int ( temp 2-component vector of int)
+0:140          subgroupClusteredXor ( global 2-component vector of bool)
+0:140            Compare Less Than ( global 2-component vector of bool)
+0:140              vector swizzle ( temp 2-component vector of int)
+0:140                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:140                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140                    Constant:
+0:140                      1 (const int)
+0:140                  Constant:
+0:140                    1 (const int)
+0:140                Sequence
+0:140                  Constant:
+0:140                    0 (const int)
+0:140                  Constant:
+0:140                    1 (const int)
+0:140              Constant:
+0:140                0 (const int)
+0:140                0 (const int)
+0:140            Constant:
+0:140              1 (const uint)
+0:141      move second child to first child ( temp 3-component vector of int)
+0:141        vector swizzle ( temp 3-component vector of int)
+0:141          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141              'invocation' ( temp uint)
+0:141            Constant:
+0:141              1 (const int)
+0:141          Sequence
+0:141            Constant:
+0:141              0 (const int)
+0:141            Constant:
+0:141              1 (const int)
+0:141            Constant:
+0:141              2 (const int)
+0:141        Convert bool to int ( temp 3-component vector of int)
+0:141          subgroupClusteredXor ( global 3-component vector of bool)
+0:141            Compare Less Than ( global 3-component vector of bool)
+0:141              vector swizzle ( temp 3-component vector of int)
+0:141                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141                    Constant:
+0:141                      1 (const int)
+0:141                  Constant:
+0:141                    1 (const int)
+0:141                Sequence
+0:141                  Constant:
+0:141                    0 (const int)
+0:141                  Constant:
+0:141                    1 (const int)
+0:141                  Constant:
+0:141                    2 (const int)
+0:141              Constant:
+0:141                0 (const int)
+0:141                0 (const int)
+0:141                0 (const int)
+0:141            Constant:
+0:141              1 (const uint)
+0:142      move second child to first child ( temp 4-component vector of int)
+0:142        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142            'invocation' ( temp uint)
+0:142          Constant:
+0:142            1 (const int)
+0:142        Convert bool to int ( temp 4-component vector of int)
+0:142          subgroupClusteredXor ( global 4-component vector of bool)
+0:142            Compare Less Than ( global 4-component vector of bool)
+0:142              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142                  Constant:
+0:142                    1 (const int)
+0:142                Constant:
+0:142                  1 (const int)
+0:142              Constant:
+0:142                0 (const int)
+0:142                0 (const int)
+0:142                0 (const int)
+0:142                0 (const int)
+0:142            Constant:
+0:142              1 (const uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+local_size = (8, 1, 1)
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp uint)
+0:17          'invocation' ( temp uint)
+0:17          mod ( temp uint)
+0:17            add ( temp uint)
+0:17              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      move second child to first child ( temp float)
+0:19        direct index ( temp float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'invocation' ( temp uint)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Constant:
+0:19            0 (const int)
+0:19        subgroupClusteredAdd ( global float)
+0:19          direct index ( temp float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                Constant:
+0:19                  0 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Constant:
+0:19            1 (const uint)
+0:20      move second child to first child ( temp 2-component vector of float)
+0:20        vector swizzle ( temp 2-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'invocation' ( temp uint)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20        subgroupClusteredAdd ( global 2-component vector of float)
+0:20          vector swizzle ( temp 2-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                Constant:
+0:20                  1 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20          Constant:
+0:20            1 (const uint)
+0:21      move second child to first child ( temp 3-component vector of float)
+0:21        vector swizzle ( temp 3-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'invocation' ( temp uint)
+0:21            Constant:
+0:21              0 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21            Constant:
+0:21              2 (const int)
+0:21        subgroupClusteredAdd ( global 3-component vector of float)
+0:21          vector swizzle ( temp 3-component vector of float)
+0:21            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                Constant:
+0:21                  2 (const int)
+0:21              Constant:
+0:21                0 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21              Constant:
+0:21                2 (const int)
+0:21          Constant:
+0:21            1 (const uint)
+0:22      move second child to first child ( temp 4-component vector of float)
+0:22        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'invocation' ( temp uint)
+0:22          Constant:
+0:22            0 (const int)
+0:22        subgroupClusteredAdd ( global 4-component vector of float)
+0:22          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              Constant:
+0:22                3 (const int)
+0:22            Constant:
+0:22              0 (const int)
+0:22          Constant:
+0:22            1 (const uint)
+0:24      move second child to first child ( temp int)
+0:24        direct index ( temp int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'invocation' ( temp uint)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:24        subgroupClusteredAdd ( global int)
+0:24          direct index ( temp int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                Constant:
+0:24                  0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:24          Constant:
+0:24            1 (const uint)
+0:25      move second child to first child ( temp 2-component vector of int)
+0:25        vector swizzle ( temp 2-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'invocation' ( temp uint)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25        subgroupClusteredAdd ( global 2-component vector of int)
+0:25          vector swizzle ( temp 2-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                Constant:
+0:25                  1 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25          Constant:
+0:25            1 (const uint)
+0:26      move second child to first child ( temp 3-component vector of int)
+0:26        vector swizzle ( temp 3-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'invocation' ( temp uint)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26        subgroupClusteredAdd ( global 3-component vector of int)
+0:26          vector swizzle ( temp 3-component vector of int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                Constant:
+0:26                  2 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26          Constant:
+0:26            1 (const uint)
+0:27      move second child to first child ( temp 4-component vector of int)
+0:27        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'invocation' ( temp uint)
+0:27          Constant:
+0:27            1 (const int)
+0:27        subgroupClusteredAdd ( global 4-component vector of int)
+0:27          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              Constant:
+0:27                3 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27          Constant:
+0:27            1 (const uint)
+0:29      move second child to first child ( temp uint)
+0:29        direct index ( temp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'invocation' ( temp uint)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            0 (const int)
+0:29        subgroupClusteredAdd ( global uint)
+0:29          direct index ( temp uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                Constant:
+0:29                  0 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Constant:
+0:29              0 (const int)
+0:29          Constant:
+0:29            1 (const uint)
+0:30      move second child to first child ( temp 2-component vector of uint)
+0:30        vector swizzle ( temp 2-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'invocation' ( temp uint)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30        subgroupClusteredAdd ( global 2-component vector of uint)
+0:30          vector swizzle ( temp 2-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                Constant:
+0:30                  1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30          Constant:
+0:30            1 (const uint)
+0:31      move second child to first child ( temp 3-component vector of uint)
+0:31        vector swizzle ( temp 3-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'invocation' ( temp uint)
+0:31            Constant:
+0:31              2 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31        subgroupClusteredAdd ( global 3-component vector of uint)
+0:31          vector swizzle ( temp 3-component vector of uint)
+0:31            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                Constant:
+0:31                  2 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31          Constant:
+0:31            1 (const uint)
+0:32      move second child to first child ( temp 4-component vector of uint)
+0:32        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'invocation' ( temp uint)
+0:32          Constant:
+0:32            2 (const int)
+0:32        subgroupClusteredAdd ( global 4-component vector of uint)
+0:32          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              Constant:
+0:32                3 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32          Constant:
+0:32            1 (const uint)
+0:34      move second child to first child ( temp double)
+0:34        direct index ( temp double)
+0:34          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'invocation' ( temp uint)
+0:34            Constant:
+0:34              3 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupClusteredAdd ( global double)
+0:34          direct index ( temp double)
+0:34            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                3 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          Constant:
+0:34            1 (const uint)
+0:35      move second child to first child ( temp 2-component vector of double)
+0:35        vector swizzle ( temp 2-component vector of double)
+0:35          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'invocation' ( temp uint)
+0:35            Constant:
+0:35              3 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35        subgroupClusteredAdd ( global 2-component vector of double)
+0:35          vector swizzle ( temp 2-component vector of double)
+0:35            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                Constant:
+0:35                  1 (const int)
+0:35              Constant:
+0:35                3 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:35          Constant:
+0:35            1 (const uint)
+0:36      move second child to first child ( temp 3-component vector of double)
+0:36        vector swizzle ( temp 3-component vector of double)
+0:36          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'invocation' ( temp uint)
+0:36            Constant:
+0:36              3 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36            Constant:
+0:36              2 (const int)
+0:36        subgroupClusteredAdd ( global 3-component vector of double)
+0:36          vector swizzle ( temp 3-component vector of double)
+0:36            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                Constant:
+0:36                  2 (const int)
+0:36              Constant:
+0:36                3 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:36              Constant:
+0:36                2 (const int)
+0:36          Constant:
+0:36            1 (const uint)
+0:37      move second child to first child ( temp 4-component vector of double)
+0:37        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'invocation' ( temp uint)
+0:37          Constant:
+0:37            3 (const int)
+0:37        subgroupClusteredAdd ( global 4-component vector of double)
+0:37          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              Constant:
+0:37                3 (const int)
+0:37            Constant:
+0:37              3 (const int)
+0:37          Constant:
+0:37            1 (const uint)
+0:39      move second child to first child ( temp float)
+0:39        direct index ( temp float)
+0:39          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:39            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'invocation' ( temp uint)
+0:39            Constant:
+0:39              0 (const int)
+0:39          Constant:
+0:39            0 (const int)
+0:39        subgroupClusteredMul ( global float)
+0:39          direct index ( temp float)
+0:39            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:39              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                Constant:
+0:39                  0 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39          Constant:
+0:39            1 (const uint)
+0:40      move second child to first child ( temp 2-component vector of float)
+0:40        vector swizzle ( temp 2-component vector of float)
+0:40          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:40            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'invocation' ( temp uint)
+0:40            Constant:
+0:40              0 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40        subgroupClusteredMul ( global 2-component vector of float)
+0:40          vector swizzle ( temp 2-component vector of float)
+0:40            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                Constant:
+0:40                  1 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40            Sequence
+0:40              Constant:
+0:40                0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40          Constant:
+0:40            1 (const uint)
+0:41      move second child to first child ( temp 3-component vector of float)
+0:41        vector swizzle ( temp 3-component vector of float)
+0:41          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:41            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'invocation' ( temp uint)
+0:41            Constant:
+0:41              0 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41            Constant:
+0:41              2 (const int)
+0:41        subgroupClusteredMul ( global 3-component vector of float)
+0:41          vector swizzle ( temp 3-component vector of float)
+0:41            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:41              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                Constant:
+0:41                  2 (const int)
+0:41              Constant:
+0:41                0 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41              Constant:
+0:41                2 (const int)
+0:41          Constant:
+0:41            1 (const uint)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:42          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'invocation' ( temp uint)
+0:42          Constant:
+0:42            0 (const int)
+0:42        subgroupClusteredMul ( global 4-component vector of float)
+0:42          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:42            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42              Constant:
+0:42                3 (const int)
+0:42            Constant:
+0:42              0 (const int)
+0:42          Constant:
+0:42            1 (const uint)
+0:44      move second child to first child ( temp int)
+0:44        direct index ( temp int)
+0:44          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'invocation' ( temp uint)
+0:44            Constant:
+0:44              1 (const int)
+0:44          Constant:
+0:44            0 (const int)
+0:44        subgroupClusteredMul ( global int)
+0:44          direct index ( temp int)
+0:44            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                Constant:
+0:44                  0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44            Constant:
+0:44              0 (const int)
+0:44          Constant:
+0:44            1 (const uint)
+0:45      move second child to first child ( temp 2-component vector of int)
+0:45        vector swizzle ( temp 2-component vector of int)
+0:45          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'invocation' ( temp uint)
+0:45            Constant:
+0:45              1 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45        subgroupClusteredMul ( global 2-component vector of int)
+0:45          vector swizzle ( temp 2-component vector of int)
+0:45            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                Constant:
+0:45                  1 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45          Constant:
+0:45            1 (const uint)
+0:46      move second child to first child ( temp 3-component vector of int)
+0:46        vector swizzle ( temp 3-component vector of int)
+0:46          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'invocation' ( temp uint)
+0:46            Constant:
+0:46              1 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46        subgroupClusteredMul ( global 3-component vector of int)
+0:46          vector swizzle ( temp 3-component vector of int)
+0:46            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                Constant:
+0:46                  2 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46          Constant:
+0:46            1 (const uint)
+0:47      move second child to first child ( temp 4-component vector of int)
+0:47        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'invocation' ( temp uint)
+0:47          Constant:
+0:47            1 (const int)
+0:47        subgroupClusteredMul ( global 4-component vector of int)
+0:47          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              Constant:
+0:47                3 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47          Constant:
+0:47            1 (const uint)
+0:49      move second child to first child ( temp uint)
+0:49        direct index ( temp uint)
+0:49          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:49            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'invocation' ( temp uint)
+0:49            Constant:
+0:49              2 (const int)
+0:49          Constant:
+0:49            0 (const int)
+0:49        subgroupClusteredMul ( global uint)
+0:49          direct index ( temp uint)
+0:49            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                Constant:
+0:49                  0 (const int)
+0:49              Constant:
+0:49                2 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:49          Constant:
+0:49            1 (const uint)
+0:50      move second child to first child ( temp 2-component vector of uint)
+0:50        vector swizzle ( temp 2-component vector of uint)
+0:50          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:50            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'invocation' ( temp uint)
+0:50            Constant:
+0:50              2 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50        subgroupClusteredMul ( global 2-component vector of uint)
+0:50          vector swizzle ( temp 2-component vector of uint)
+0:50            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                Constant:
+0:50                  1 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50          Constant:
+0:50            1 (const uint)
+0:51      move second child to first child ( temp 3-component vector of uint)
+0:51        vector swizzle ( temp 3-component vector of uint)
+0:51          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:51            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'invocation' ( temp uint)
+0:51            Constant:
+0:51              2 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:51        subgroupClusteredMul ( global 3-component vector of uint)
+0:51          vector swizzle ( temp 3-component vector of uint)
+0:51            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                Constant:
+0:51                  2 (const int)
+0:51              Constant:
+0:51                2 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51              Constant:
+0:51                2 (const int)
+0:51          Constant:
+0:51            1 (const uint)
+0:52      move second child to first child ( temp 4-component vector of uint)
+0:52        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:52          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'invocation' ( temp uint)
+0:52          Constant:
+0:52            2 (const int)
+0:52        subgroupClusteredMul ( global 4-component vector of uint)
+0:52          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:52            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              Constant:
+0:52                3 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52          Constant:
+0:52            1 (const uint)
+0:54      move second child to first child ( temp double)
+0:54        direct index ( temp double)
+0:54          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:54            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'invocation' ( temp uint)
+0:54            Constant:
+0:54              3 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupClusteredMul ( global double)
+0:54          direct index ( temp double)
+0:54            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                Constant:
+0:54                  0 (const int)
+0:54              Constant:
+0:54                3 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:54          Constant:
+0:54            1 (const uint)
+0:55      move second child to first child ( temp 2-component vector of double)
+0:55        vector swizzle ( temp 2-component vector of double)
+0:55          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:55            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'invocation' ( temp uint)
+0:55            Constant:
+0:55              3 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55        subgroupClusteredMul ( global 2-component vector of double)
+0:55          vector swizzle ( temp 2-component vector of double)
+0:55            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                Constant:
+0:55                  1 (const int)
+0:55              Constant:
+0:55                3 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55          Constant:
+0:55            1 (const uint)
+0:56      move second child to first child ( temp 3-component vector of double)
+0:56        vector swizzle ( temp 3-component vector of double)
+0:56          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:56            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'invocation' ( temp uint)
+0:56            Constant:
+0:56              3 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56            Constant:
+0:56              2 (const int)
+0:56        subgroupClusteredMul ( global 3-component vector of double)
+0:56          vector swizzle ( temp 3-component vector of double)
+0:56            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:56              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                Constant:
+0:56                  2 (const int)
+0:56              Constant:
+0:56                3 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:56          Constant:
+0:56            1 (const uint)
+0:57      move second child to first child ( temp 4-component vector of double)
+0:57        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:57          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'invocation' ( temp uint)
+0:57          Constant:
+0:57            3 (const int)
+0:57        subgroupClusteredMul ( global 4-component vector of double)
+0:57          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:57            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              Constant:
+0:57                3 (const int)
+0:57            Constant:
+0:57              3 (const int)
+0:57          Constant:
+0:57            1 (const uint)
+0:59      move second child to first child ( temp float)
+0:59        direct index ( temp float)
+0:59          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:59            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'invocation' ( temp uint)
+0:59            Constant:
+0:59              0 (const int)
+0:59          Constant:
+0:59            0 (const int)
+0:59        subgroupClusteredMin ( global float)
+0:59          direct index ( temp float)
+0:59            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                Constant:
+0:59                  0 (const int)
+0:59              Constant:
+0:59                0 (const int)
+0:59            Constant:
+0:59              0 (const int)
+0:59          Constant:
+0:59            1 (const uint)
+0:60      move second child to first child ( temp 2-component vector of float)
+0:60        vector swizzle ( temp 2-component vector of float)
+0:60          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:60            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'invocation' ( temp uint)
+0:60            Constant:
+0:60              0 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60        subgroupClusteredMin ( global 2-component vector of float)
+0:60          vector swizzle ( temp 2-component vector of float)
+0:60            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                Constant:
+0:60                  1 (const int)
+0:60              Constant:
+0:60                0 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60          Constant:
+0:60            1 (const uint)
+0:61      move second child to first child ( temp 3-component vector of float)
+0:61        vector swizzle ( temp 3-component vector of float)
+0:61          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'invocation' ( temp uint)
+0:61            Constant:
+0:61              0 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61            Constant:
+0:61              2 (const int)
+0:61        subgroupClusteredMin ( global 3-component vector of float)
+0:61          vector swizzle ( temp 3-component vector of float)
+0:61            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:61              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                Constant:
+0:61                  2 (const int)
+0:61              Constant:
+0:61                0 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61              Constant:
+0:61                2 (const int)
+0:61          Constant:
+0:61            1 (const uint)
+0:62      move second child to first child ( temp 4-component vector of float)
+0:62        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'invocation' ( temp uint)
+0:62          Constant:
+0:62            0 (const int)
+0:62        subgroupClusteredMin ( global 4-component vector of float)
+0:62          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:62            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              Constant:
+0:62                3 (const int)
+0:62            Constant:
+0:62              0 (const int)
+0:62          Constant:
+0:62            1 (const uint)
+0:64      move second child to first child ( temp int)
+0:64        direct index ( temp int)
+0:64          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'invocation' ( temp uint)
+0:64            Constant:
+0:64              1 (const int)
+0:64          Constant:
+0:64            0 (const int)
+0:64        subgroupClusteredMin ( global int)
+0:64          direct index ( temp int)
+0:64            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                Constant:
+0:64                  0 (const int)
+0:64              Constant:
+0:64                1 (const int)
+0:64            Constant:
+0:64              0 (const int)
+0:64          Constant:
+0:64            1 (const uint)
+0:65      move second child to first child ( temp 2-component vector of int)
+0:65        vector swizzle ( temp 2-component vector of int)
+0:65          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'invocation' ( temp uint)
+0:65            Constant:
+0:65              1 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65        subgroupClusteredMin ( global 2-component vector of int)
+0:65          vector swizzle ( temp 2-component vector of int)
+0:65            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                Constant:
+0:65                  1 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:65            Sequence
+0:65              Constant:
+0:65                0 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:65          Constant:
+0:65            1 (const uint)
+0:66      move second child to first child ( temp 3-component vector of int)
+0:66        vector swizzle ( temp 3-component vector of int)
+0:66          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'invocation' ( temp uint)
+0:66            Constant:
+0:66              1 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66        subgroupClusteredMin ( global 3-component vector of int)
+0:66          vector swizzle ( temp 3-component vector of int)
+0:66            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                Constant:
+0:66                  2 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:66            Sequence
+0:66              Constant:
+0:66                0 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:66              Constant:
+0:66                2 (const int)
+0:66          Constant:
+0:66            1 (const uint)
+0:67      move second child to first child ( temp 4-component vector of int)
+0:67        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'invocation' ( temp uint)
+0:67          Constant:
+0:67            1 (const int)
+0:67        subgroupClusteredMin ( global 4-component vector of int)
+0:67          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67              Constant:
+0:67                3 (const int)
+0:67            Constant:
+0:67              1 (const int)
+0:67          Constant:
+0:67            1 (const uint)
+0:69      move second child to first child ( temp uint)
+0:69        direct index ( temp uint)
+0:69          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:69            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'invocation' ( temp uint)
+0:69            Constant:
+0:69              2 (const int)
+0:69          Constant:
+0:69            0 (const int)
+0:69        subgroupClusteredMin ( global uint)
+0:69          direct index ( temp uint)
+0:69            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:69              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                Constant:
+0:69                  0 (const int)
+0:69              Constant:
+0:69                2 (const int)
+0:69            Constant:
+0:69              0 (const int)
+0:69          Constant:
+0:69            1 (const uint)
+0:70      move second child to first child ( temp 2-component vector of uint)
+0:70        vector swizzle ( temp 2-component vector of uint)
+0:70          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:70            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70              'invocation' ( temp uint)
+0:70            Constant:
+0:70              2 (const int)
+0:70          Sequence
+0:70            Constant:
+0:70              0 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70        subgroupClusteredMin ( global 2-component vector of uint)
+0:70          vector swizzle ( temp 2-component vector of uint)
+0:70            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:70              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70                Constant:
+0:70                  1 (const int)
+0:70              Constant:
+0:70                2 (const int)
+0:70            Sequence
+0:70              Constant:
+0:70                0 (const int)
+0:70              Constant:
+0:70                1 (const int)
+0:70          Constant:
+0:70            1 (const uint)
+0:71      move second child to first child ( temp 3-component vector of uint)
+0:71        vector swizzle ( temp 3-component vector of uint)
+0:71          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'invocation' ( temp uint)
+0:71            Constant:
+0:71              2 (const int)
+0:71          Sequence
+0:71            Constant:
+0:71              0 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71            Constant:
+0:71              2 (const int)
+0:71        subgroupClusteredMin ( global 3-component vector of uint)
+0:71          vector swizzle ( temp 3-component vector of uint)
+0:71            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:71              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                Constant:
+0:71                  2 (const int)
+0:71              Constant:
+0:71                2 (const int)
+0:71            Sequence
+0:71              Constant:
+0:71                0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:71              Constant:
+0:71                2 (const int)
+0:71          Constant:
+0:71            1 (const uint)
+0:72      move second child to first child ( temp 4-component vector of uint)
+0:72        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72            'invocation' ( temp uint)
+0:72          Constant:
+0:72            2 (const int)
+0:72        subgroupClusteredMin ( global 4-component vector of uint)
+0:72          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:72            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72              Constant:
+0:72                3 (const int)
+0:72            Constant:
+0:72              2 (const int)
+0:72          Constant:
+0:72            1 (const uint)
+0:74      move second child to first child ( temp double)
+0:74        direct index ( temp double)
+0:74          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:74            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74              'invocation' ( temp uint)
+0:74            Constant:
+0:74              3 (const int)
+0:74          Constant:
+0:74            0 (const int)
+0:74        subgroupClusteredMin ( global double)
+0:74          direct index ( temp double)
+0:74            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:74              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                Constant:
+0:74                  0 (const int)
+0:74              Constant:
+0:74                3 (const int)
+0:74            Constant:
+0:74              0 (const int)
+0:74          Constant:
+0:74            1 (const uint)
+0:75      move second child to first child ( temp 2-component vector of double)
+0:75        vector swizzle ( temp 2-component vector of double)
+0:75          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:75            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75              'invocation' ( temp uint)
+0:75            Constant:
+0:75              3 (const int)
+0:75          Sequence
+0:75            Constant:
+0:75              0 (const int)
+0:75            Constant:
+0:75              1 (const int)
+0:75        subgroupClusteredMin ( global 2-component vector of double)
+0:75          vector swizzle ( temp 2-component vector of double)
+0:75            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:75              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75                Constant:
+0:75                  1 (const int)
+0:75              Constant:
+0:75                3 (const int)
+0:75            Sequence
+0:75              Constant:
+0:75                0 (const int)
+0:75              Constant:
+0:75                1 (const int)
+0:75          Constant:
+0:75            1 (const uint)
+0:76      move second child to first child ( temp 3-component vector of double)
+0:76        vector swizzle ( temp 3-component vector of double)
+0:76          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76              'invocation' ( temp uint)
+0:76            Constant:
+0:76              3 (const int)
+0:76          Sequence
+0:76            Constant:
+0:76              0 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76            Constant:
+0:76              2 (const int)
+0:76        subgroupClusteredMin ( global 3-component vector of double)
+0:76          vector swizzle ( temp 3-component vector of double)
+0:76            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:76              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                Constant:
+0:76                  2 (const int)
+0:76              Constant:
+0:76                3 (const int)
+0:76            Sequence
+0:76              Constant:
+0:76                0 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:76              Constant:
+0:76                2 (const int)
+0:76          Constant:
+0:76            1 (const uint)
+0:77      move second child to first child ( temp 4-component vector of double)
+0:77        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77            'invocation' ( temp uint)
+0:77          Constant:
+0:77            3 (const int)
+0:77        subgroupClusteredMin ( global 4-component vector of double)
+0:77          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:77            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77              Constant:
+0:77                3 (const int)
+0:77            Constant:
+0:77              3 (const int)
+0:77          Constant:
+0:77            1 (const uint)
+0:79      move second child to first child ( temp float)
+0:79        direct index ( temp float)
+0:79          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:79            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79              'invocation' ( temp uint)
+0:79            Constant:
+0:79              0 (const int)
+0:79          Constant:
+0:79            0 (const int)
+0:79        subgroupClusteredMax ( global float)
+0:79          direct index ( temp float)
+0:79            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:79              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                Constant:
+0:79                  0 (const int)
+0:79              Constant:
+0:79                0 (const int)
+0:79            Constant:
+0:79              0 (const int)
+0:79          Constant:
+0:79            1 (const uint)
+0:80      move second child to first child ( temp 2-component vector of float)
+0:80        vector swizzle ( temp 2-component vector of float)
+0:80          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:80            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80              'invocation' ( temp uint)
+0:80            Constant:
+0:80              0 (const int)
+0:80          Sequence
+0:80            Constant:
+0:80              0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80        subgroupClusteredMax ( global 2-component vector of float)
+0:80          vector swizzle ( temp 2-component vector of float)
+0:80            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:80              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80                Constant:
+0:80                  1 (const int)
+0:80              Constant:
+0:80                0 (const int)
+0:80            Sequence
+0:80              Constant:
+0:80                0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80          Constant:
+0:80            1 (const uint)
+0:81      move second child to first child ( temp 3-component vector of float)
+0:81        vector swizzle ( temp 3-component vector of float)
+0:81          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:81            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81              'invocation' ( temp uint)
+0:81            Constant:
+0:81              0 (const int)
+0:81          Sequence
+0:81            Constant:
+0:81              0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81            Constant:
+0:81              2 (const int)
+0:81        subgroupClusteredMax ( global 3-component vector of float)
+0:81          vector swizzle ( temp 3-component vector of float)
+0:81            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:81              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                Constant:
+0:81                  2 (const int)
+0:81              Constant:
+0:81                0 (const int)
+0:81            Sequence
+0:81              Constant:
+0:81                0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81              Constant:
+0:81                2 (const int)
+0:81          Constant:
+0:81            1 (const uint)
+0:82      move second child to first child ( temp 4-component vector of float)
+0:82        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:82          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82            'invocation' ( temp uint)
+0:82          Constant:
+0:82            0 (const int)
+0:82        subgroupClusteredMax ( global 4-component vector of float)
+0:82          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:82            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82              Constant:
+0:82                3 (const int)
+0:82            Constant:
+0:82              0 (const int)
+0:82          Constant:
+0:82            1 (const uint)
+0:84      move second child to first child ( temp int)
+0:84        direct index ( temp int)
+0:84          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84              'invocation' ( temp uint)
+0:84            Constant:
+0:84              1 (const int)
+0:84          Constant:
+0:84            0 (const int)
+0:84        subgroupClusteredMax ( global int)
+0:84          direct index ( temp int)
+0:84            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:84              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                Constant:
+0:84                  0 (const int)
+0:84              Constant:
+0:84                1 (const int)
+0:84            Constant:
+0:84              0 (const int)
+0:84          Constant:
+0:84            1 (const uint)
+0:85      move second child to first child ( temp 2-component vector of int)
+0:85        vector swizzle ( temp 2-component vector of int)
+0:85          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:85            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85              'invocation' ( temp uint)
+0:85            Constant:
+0:85              1 (const int)
+0:85          Sequence
+0:85            Constant:
+0:85              0 (const int)
+0:85            Constant:
+0:85              1 (const int)
+0:85        subgroupClusteredMax ( global 2-component vector of int)
+0:85          vector swizzle ( temp 2-component vector of int)
+0:85            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:85              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85                Constant:
+0:85                  1 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:85            Sequence
+0:85              Constant:
+0:85                0 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:85          Constant:
+0:85            1 (const uint)
+0:86      move second child to first child ( temp 3-component vector of int)
+0:86        vector swizzle ( temp 3-component vector of int)
+0:86          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:86            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86              'invocation' ( temp uint)
+0:86            Constant:
+0:86              1 (const int)
+0:86          Sequence
+0:86            Constant:
+0:86              0 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:86        subgroupClusteredMax ( global 3-component vector of int)
+0:86          vector swizzle ( temp 3-component vector of int)
+0:86            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:86              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86                Constant:
+0:86                  2 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86              Constant:
+0:86                2 (const int)
+0:86          Constant:
+0:86            1 (const uint)
+0:87      move second child to first child ( temp 4-component vector of int)
+0:87        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:87          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87            'invocation' ( temp uint)
+0:87          Constant:
+0:87            1 (const int)
+0:87        subgroupClusteredMax ( global 4-component vector of int)
+0:87          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:87            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87              Constant:
+0:87                3 (const int)
+0:87            Constant:
+0:87              1 (const int)
+0:87          Constant:
+0:87            1 (const uint)
+0:89      move second child to first child ( temp uint)
+0:89        direct index ( temp uint)
+0:89          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:89            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89              'invocation' ( temp uint)
+0:89            Constant:
+0:89              2 (const int)
+0:89          Constant:
+0:89            0 (const int)
+0:89        subgroupClusteredMax ( global uint)
+0:89          direct index ( temp uint)
+0:89            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:89              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89                Constant:
+0:89                  0 (const int)
+0:89              Constant:
+0:89                2 (const int)
+0:89            Constant:
+0:89              0 (const int)
+0:89          Constant:
+0:89            1 (const uint)
+0:90      move second child to first child ( temp 2-component vector of uint)
+0:90        vector swizzle ( temp 2-component vector of uint)
+0:90          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:90            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90              'invocation' ( temp uint)
+0:90            Constant:
+0:90              2 (const int)
+0:90          Sequence
+0:90            Constant:
+0:90              0 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90        subgroupClusteredMax ( global 2-component vector of uint)
+0:90          vector swizzle ( temp 2-component vector of uint)
+0:90            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:90              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90                Constant:
+0:90                  1 (const int)
+0:90              Constant:
+0:90                2 (const int)
+0:90            Sequence
+0:90              Constant:
+0:90                0 (const int)
+0:90              Constant:
+0:90                1 (const int)
+0:90          Constant:
+0:90            1 (const uint)
+0:91      move second child to first child ( temp 3-component vector of uint)
+0:91        vector swizzle ( temp 3-component vector of uint)
+0:91          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:91            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91              'invocation' ( temp uint)
+0:91            Constant:
+0:91              2 (const int)
+0:91          Sequence
+0:91            Constant:
+0:91              0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91            Constant:
+0:91              2 (const int)
+0:91        subgroupClusteredMax ( global 3-component vector of uint)
+0:91          vector swizzle ( temp 3-component vector of uint)
+0:91            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:91              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91                Constant:
+0:91                  2 (const int)
+0:91              Constant:
+0:91                2 (const int)
+0:91            Sequence
+0:91              Constant:
+0:91                0 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:91              Constant:
+0:91                2 (const int)
+0:91          Constant:
+0:91            1 (const uint)
+0:92      move second child to first child ( temp 4-component vector of uint)
+0:92        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:92          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92            'invocation' ( temp uint)
+0:92          Constant:
+0:92            2 (const int)
+0:92        subgroupClusteredMax ( global 4-component vector of uint)
+0:92          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:92            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92              Constant:
+0:92                3 (const int)
+0:92            Constant:
+0:92              2 (const int)
+0:92          Constant:
+0:92            1 (const uint)
+0:94      move second child to first child ( temp double)
+0:94        direct index ( temp double)
+0:94          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:94            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94              'invocation' ( temp uint)
+0:94            Constant:
+0:94              3 (const int)
+0:94          Constant:
+0:94            0 (const int)
+0:94        subgroupClusteredMax ( global double)
+0:94          direct index ( temp double)
+0:94            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:94              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94                Constant:
+0:94                  0 (const int)
+0:94              Constant:
+0:94                3 (const int)
+0:94            Constant:
+0:94              0 (const int)
+0:94          Constant:
+0:94            1 (const uint)
+0:95      move second child to first child ( temp 2-component vector of double)
+0:95        vector swizzle ( temp 2-component vector of double)
+0:95          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:95            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95              'invocation' ( temp uint)
+0:95            Constant:
+0:95              3 (const int)
+0:95          Sequence
+0:95            Constant:
+0:95              0 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95        subgroupClusteredMax ( global 2-component vector of double)
+0:95          vector swizzle ( temp 2-component vector of double)
+0:95            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:95              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95                Constant:
+0:95                  1 (const int)
+0:95              Constant:
+0:95                3 (const int)
+0:95            Sequence
+0:95              Constant:
+0:95                0 (const int)
+0:95              Constant:
+0:95                1 (const int)
+0:95          Constant:
+0:95            1 (const uint)
+0:96      move second child to first child ( temp 3-component vector of double)
+0:96        vector swizzle ( temp 3-component vector of double)
+0:96          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:96            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96              'invocation' ( temp uint)
+0:96            Constant:
+0:96              3 (const int)
+0:96          Sequence
+0:96            Constant:
+0:96              0 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96            Constant:
+0:96              2 (const int)
+0:96        subgroupClusteredMax ( global 3-component vector of double)
+0:96          vector swizzle ( temp 3-component vector of double)
+0:96            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:96              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96                Constant:
+0:96                  2 (const int)
+0:96              Constant:
+0:96                3 (const int)
+0:96            Sequence
+0:96              Constant:
+0:96                0 (const int)
+0:96              Constant:
+0:96                1 (const int)
+0:96              Constant:
+0:96                2 (const int)
+0:96          Constant:
+0:96            1 (const uint)
+0:97      move second child to first child ( temp 4-component vector of double)
+0:97        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:97          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97            'invocation' ( temp uint)
+0:97          Constant:
+0:97            3 (const int)
+0:97        subgroupClusteredMax ( global 4-component vector of double)
+0:97          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:97            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97              Constant:
+0:97                3 (const int)
+0:97            Constant:
+0:97              3 (const int)
+0:97          Constant:
+0:97            1 (const uint)
+0:99      move second child to first child ( temp int)
+0:99        direct index ( temp int)
+0:99          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99              'invocation' ( temp uint)
+0:99            Constant:
+0:99              1 (const int)
+0:99          Constant:
+0:99            0 (const int)
+0:99        subgroupClusteredAnd ( global int)
+0:99          direct index ( temp int)
+0:99            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99                Constant:
+0:99                  0 (const int)
+0:99              Constant:
+0:99                1 (const int)
+0:99            Constant:
+0:99              0 (const int)
+0:99          Constant:
+0:99            1 (const uint)
+0:100      move second child to first child ( temp 2-component vector of int)
+0:100        vector swizzle ( temp 2-component vector of int)
+0:100          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100              'invocation' ( temp uint)
+0:100            Constant:
+0:100              1 (const int)
+0:100          Sequence
+0:100            Constant:
+0:100              0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100        subgroupClusteredAnd ( global 2-component vector of int)
+0:100          vector swizzle ( temp 2-component vector of int)
+0:100            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100                Constant:
+0:100                  1 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100            Sequence
+0:100              Constant:
+0:100                0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100          Constant:
+0:100            1 (const uint)
+0:101      move second child to first child ( temp 3-component vector of int)
+0:101        vector swizzle ( temp 3-component vector of int)
+0:101          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101              'invocation' ( temp uint)
+0:101            Constant:
+0:101              1 (const int)
+0:101          Sequence
+0:101            Constant:
+0:101              0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101            Constant:
+0:101              2 (const int)
+0:101        subgroupClusteredAnd ( global 3-component vector of int)
+0:101          vector swizzle ( temp 3-component vector of int)
+0:101            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101                Constant:
+0:101                  2 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101            Sequence
+0:101              Constant:
+0:101                0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101              Constant:
+0:101                2 (const int)
+0:101          Constant:
+0:101            1 (const uint)
+0:102      move second child to first child ( temp 4-component vector of int)
+0:102        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102            'invocation' ( temp uint)
+0:102          Constant:
+0:102            1 (const int)
+0:102        subgroupClusteredAnd ( global 4-component vector of int)
+0:102          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102              Constant:
+0:102                3 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102          Constant:
+0:102            1 (const uint)
+0:104      move second child to first child ( temp uint)
+0:104        direct index ( temp uint)
+0:104          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104              'invocation' ( temp uint)
+0:104            Constant:
+0:104              2 (const int)
+0:104          Constant:
+0:104            0 (const int)
+0:104        subgroupClusteredAnd ( global uint)
+0:104          direct index ( temp uint)
+0:104            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104                Constant:
+0:104                  0 (const int)
+0:104              Constant:
+0:104                2 (const int)
+0:104            Constant:
+0:104              0 (const int)
+0:104          Constant:
+0:104            1 (const uint)
+0:105      move second child to first child ( temp 2-component vector of uint)
+0:105        vector swizzle ( temp 2-component vector of uint)
+0:105          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105              'invocation' ( temp uint)
+0:105            Constant:
+0:105              2 (const int)
+0:105          Sequence
+0:105            Constant:
+0:105              0 (const int)
+0:105            Constant:
+0:105              1 (const int)
+0:105        subgroupClusteredAnd ( global 2-component vector of uint)
+0:105          vector swizzle ( temp 2-component vector of uint)
+0:105            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105                Constant:
+0:105                  1 (const int)
+0:105              Constant:
+0:105                2 (const int)
+0:105            Sequence
+0:105              Constant:
+0:105                0 (const int)
+0:105              Constant:
+0:105                1 (const int)
+0:105          Constant:
+0:105            1 (const uint)
+0:106      move second child to first child ( temp 3-component vector of uint)
+0:106        vector swizzle ( temp 3-component vector of uint)
+0:106          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106              'invocation' ( temp uint)
+0:106            Constant:
+0:106              2 (const int)
+0:106          Sequence
+0:106            Constant:
+0:106              0 (const int)
+0:106            Constant:
+0:106              1 (const int)
+0:106            Constant:
+0:106              2 (const int)
+0:106        subgroupClusteredAnd ( global 3-component vector of uint)
+0:106          vector swizzle ( temp 3-component vector of uint)
+0:106            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106                Constant:
+0:106                  2 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:106            Sequence
+0:106              Constant:
+0:106                0 (const int)
+0:106              Constant:
+0:106                1 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:106          Constant:
+0:106            1 (const uint)
+0:107      move second child to first child ( temp 4-component vector of uint)
+0:107        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107            'invocation' ( temp uint)
+0:107          Constant:
+0:107            2 (const int)
+0:107        subgroupClusteredAnd ( global 4-component vector of uint)
+0:107          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107              Constant:
+0:107                3 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107          Constant:
+0:107            1 (const uint)
+0:109      move second child to first child ( temp int)
+0:109        direct index ( temp int)
+0:109          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:109            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109              'invocation' ( temp uint)
+0:109            Constant:
+0:109              1 (const int)
+0:109          Constant:
+0:109            0 (const int)
+0:109        Convert bool to int ( temp int)
+0:109          subgroupClusteredAnd ( global bool)
+0:109            Compare Less Than ( temp bool)
+0:109              direct index ( temp int)
+0:109                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:109                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109                    Constant:
+0:109                      0 (const int)
+0:109                  Constant:
+0:109                    1 (const int)
+0:109                Constant:
+0:109                  0 (const int)
+0:109              Constant:
+0:109                0 (const int)
+0:109            Constant:
+0:109              1 (const uint)
+0:110      move second child to first child ( temp 2-component vector of int)
+0:110        vector swizzle ( temp 2-component vector of int)
+0:110          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:110            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110              'invocation' ( temp uint)
+0:110            Constant:
+0:110              1 (const int)
+0:110          Sequence
+0:110            Constant:
+0:110              0 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110        Convert bool to int ( temp 2-component vector of int)
+0:110          subgroupClusteredAnd ( global 2-component vector of bool)
+0:110            Compare Less Than ( global 2-component vector of bool)
+0:110              vector swizzle ( temp 2-component vector of int)
+0:110                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:110                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110                    Constant:
+0:110                      1 (const int)
+0:110                  Constant:
+0:110                    1 (const int)
+0:110                Sequence
+0:110                  Constant:
+0:110                    0 (const int)
+0:110                  Constant:
+0:110                    1 (const int)
+0:110              Constant:
+0:110                0 (const int)
+0:110                0 (const int)
+0:110            Constant:
+0:110              1 (const uint)
+0:111      move second child to first child ( temp 3-component vector of int)
+0:111        vector swizzle ( temp 3-component vector of int)
+0:111          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111              'invocation' ( temp uint)
+0:111            Constant:
+0:111              1 (const int)
+0:111          Sequence
+0:111            Constant:
+0:111              0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111            Constant:
+0:111              2 (const int)
+0:111        Convert bool to int ( temp 3-component vector of int)
+0:111          subgroupClusteredAnd ( global 3-component vector of bool)
+0:111            Compare Less Than ( global 3-component vector of bool)
+0:111              vector swizzle ( temp 3-component vector of int)
+0:111                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111                    Constant:
+0:111                      1 (const int)
+0:111                  Constant:
+0:111                    1 (const int)
+0:111                Sequence
+0:111                  Constant:
+0:111                    0 (const int)
+0:111                  Constant:
+0:111                    1 (const int)
+0:111                  Constant:
+0:111                    2 (const int)
+0:111              Constant:
+0:111                0 (const int)
+0:111                0 (const int)
+0:111                0 (const int)
+0:111            Constant:
+0:111              1 (const uint)
+0:112      move second child to first child ( temp 4-component vector of int)
+0:112        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112            'invocation' ( temp uint)
+0:112          Constant:
+0:112            1 (const int)
+0:112        Convert bool to int ( temp 4-component vector of int)
+0:112          subgroupClusteredAnd ( global 4-component vector of bool)
+0:112            Compare Less Than ( global 4-component vector of bool)
+0:112              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112                  Constant:
+0:112                    1 (const int)
+0:112                Constant:
+0:112                  1 (const int)
+0:112              Constant:
+0:112                0 (const int)
+0:112                0 (const int)
+0:112                0 (const int)
+0:112                0 (const int)
+0:112            Constant:
+0:112              1 (const uint)
+0:114      move second child to first child ( temp int)
+0:114        direct index ( temp int)
+0:114          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114              'invocation' ( temp uint)
+0:114            Constant:
+0:114              1 (const int)
+0:114          Constant:
+0:114            0 (const int)
+0:114        subgroupClusteredOr ( global int)
+0:114          direct index ( temp int)
+0:114            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114                Constant:
+0:114                  0 (const int)
+0:114              Constant:
+0:114                1 (const int)
+0:114            Constant:
+0:114              0 (const int)
+0:114          Constant:
+0:114            1 (const uint)
+0:115      move second child to first child ( temp 2-component vector of int)
+0:115        vector swizzle ( temp 2-component vector of int)
+0:115          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115              'invocation' ( temp uint)
+0:115            Constant:
+0:115              1 (const int)
+0:115          Sequence
+0:115            Constant:
+0:115              0 (const int)
+0:115            Constant:
+0:115              1 (const int)
+0:115        subgroupClusteredOr ( global 2-component vector of int)
+0:115          vector swizzle ( temp 2-component vector of int)
+0:115            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115                Constant:
+0:115                  1 (const int)
+0:115              Constant:
+0:115                1 (const int)
+0:115            Sequence
+0:115              Constant:
+0:115                0 (const int)
+0:115              Constant:
+0:115                1 (const int)
+0:115          Constant:
+0:115            1 (const uint)
+0:116      move second child to first child ( temp 3-component vector of int)
+0:116        vector swizzle ( temp 3-component vector of int)
+0:116          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116              'invocation' ( temp uint)
+0:116            Constant:
+0:116              1 (const int)
+0:116          Sequence
+0:116            Constant:
+0:116              0 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116            Constant:
+0:116              2 (const int)
+0:116        subgroupClusteredOr ( global 3-component vector of int)
+0:116          vector swizzle ( temp 3-component vector of int)
+0:116            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116                Constant:
+0:116                  2 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:116            Sequence
+0:116              Constant:
+0:116                0 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:116              Constant:
+0:116                2 (const int)
+0:116          Constant:
+0:116            1 (const uint)
+0:117      move second child to first child ( temp 4-component vector of int)
+0:117        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117            'invocation' ( temp uint)
+0:117          Constant:
+0:117            1 (const int)
+0:117        subgroupClusteredOr ( global 4-component vector of int)
+0:117          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117              Constant:
+0:117                3 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:117          Constant:
+0:117            1 (const uint)
+0:119      move second child to first child ( temp uint)
+0:119        direct index ( temp uint)
+0:119          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119              'invocation' ( temp uint)
+0:119            Constant:
+0:119              2 (const int)
+0:119          Constant:
+0:119            0 (const int)
+0:119        subgroupClusteredOr ( global uint)
+0:119          direct index ( temp uint)
+0:119            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119                Constant:
+0:119                  0 (const int)
+0:119              Constant:
+0:119                2 (const int)
+0:119            Constant:
+0:119              0 (const int)
+0:119          Constant:
+0:119            1 (const uint)
+0:120      move second child to first child ( temp 2-component vector of uint)
+0:120        vector swizzle ( temp 2-component vector of uint)
+0:120          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:120            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120              'invocation' ( temp uint)
+0:120            Constant:
+0:120              2 (const int)
+0:120          Sequence
+0:120            Constant:
+0:120              0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120        subgroupClusteredOr ( global 2-component vector of uint)
+0:120          vector swizzle ( temp 2-component vector of uint)
+0:120            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:120              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:120                Constant:
+0:120                  1 (const int)
+0:120              Constant:
+0:120                2 (const int)
+0:120            Sequence
+0:120              Constant:
+0:120                0 (const int)
+0:120              Constant:
+0:120                1 (const int)
+0:120          Constant:
+0:120            1 (const uint)
+0:121      move second child to first child ( temp 3-component vector of uint)
+0:121        vector swizzle ( temp 3-component vector of uint)
+0:121          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:121            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121              'invocation' ( temp uint)
+0:121            Constant:
+0:121              2 (const int)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121            Constant:
+0:121              2 (const int)
+0:121        subgroupClusteredOr ( global 3-component vector of uint)
+0:121          vector swizzle ( temp 3-component vector of uint)
+0:121            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:121              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121                Constant:
+0:121                  2 (const int)
+0:121              Constant:
+0:121                2 (const int)
+0:121            Sequence
+0:121              Constant:
+0:121                0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:121              Constant:
+0:121                2 (const int)
+0:121          Constant:
+0:121            1 (const uint)
+0:122      move second child to first child ( temp 4-component vector of uint)
+0:122        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:122          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122            'invocation' ( temp uint)
+0:122          Constant:
+0:122            2 (const int)
+0:122        subgroupClusteredOr ( global 4-component vector of uint)
+0:122          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:122            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122              Constant:
+0:122                3 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:122          Constant:
+0:122            1 (const uint)
+0:124      move second child to first child ( temp int)
+0:124        direct index ( temp int)
+0:124          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:124            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124              'invocation' ( temp uint)
+0:124            Constant:
+0:124              1 (const int)
+0:124          Constant:
+0:124            0 (const int)
+0:124        Convert bool to int ( temp int)
+0:124          subgroupClusteredOr ( global bool)
+0:124            Compare Less Than ( temp bool)
+0:124              direct index ( temp int)
+0:124                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:124                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124                    Constant:
+0:124                      0 (const int)
+0:124                  Constant:
+0:124                    1 (const int)
+0:124                Constant:
+0:124                  0 (const int)
+0:124              Constant:
+0:124                0 (const int)
+0:124            Constant:
+0:124              1 (const uint)
+0:125      move second child to first child ( temp 2-component vector of int)
+0:125        vector swizzle ( temp 2-component vector of int)
+0:125          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:125            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125              'invocation' ( temp uint)
+0:125            Constant:
+0:125              1 (const int)
+0:125          Sequence
+0:125            Constant:
+0:125              0 (const int)
+0:125            Constant:
+0:125              1 (const int)
+0:125        Convert bool to int ( temp 2-component vector of int)
+0:125          subgroupClusteredOr ( global 2-component vector of bool)
+0:125            Compare Less Than ( global 2-component vector of bool)
+0:125              vector swizzle ( temp 2-component vector of int)
+0:125                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:125                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:125                    Constant:
+0:125                      1 (const int)
+0:125                  Constant:
+0:125                    1 (const int)
+0:125                Sequence
+0:125                  Constant:
+0:125                    0 (const int)
+0:125                  Constant:
+0:125                    1 (const int)
+0:125              Constant:
+0:125                0 (const int)
+0:125                0 (const int)
+0:125            Constant:
+0:125              1 (const uint)
+0:126      move second child to first child ( temp 3-component vector of int)
+0:126        vector swizzle ( temp 3-component vector of int)
+0:126          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126              'invocation' ( temp uint)
+0:126            Constant:
+0:126              1 (const int)
+0:126          Sequence
+0:126            Constant:
+0:126              0 (const int)
+0:126            Constant:
+0:126              1 (const int)
+0:126            Constant:
+0:126              2 (const int)
+0:126        Convert bool to int ( temp 3-component vector of int)
+0:126          subgroupClusteredOr ( global 3-component vector of bool)
+0:126            Compare Less Than ( global 3-component vector of bool)
+0:126              vector swizzle ( temp 3-component vector of int)
+0:126                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126                    Constant:
+0:126                      1 (const int)
+0:126                  Constant:
+0:126                    1 (const int)
+0:126                Sequence
+0:126                  Constant:
+0:126                    0 (const int)
+0:126                  Constant:
+0:126                    1 (const int)
+0:126                  Constant:
+0:126                    2 (const int)
+0:126              Constant:
+0:126                0 (const int)
+0:126                0 (const int)
+0:126                0 (const int)
+0:126            Constant:
+0:126              1 (const uint)
+0:127      move second child to first child ( temp 4-component vector of int)
+0:127        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127            'invocation' ( temp uint)
+0:127          Constant:
+0:127            1 (const int)
+0:127        Convert bool to int ( temp 4-component vector of int)
+0:127          subgroupClusteredOr ( global 4-component vector of bool)
+0:127            Compare Less Than ( global 4-component vector of bool)
+0:127              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127                  Constant:
+0:127                    1 (const int)
+0:127                Constant:
+0:127                  1 (const int)
+0:127              Constant:
+0:127                0 (const int)
+0:127                0 (const int)
+0:127                0 (const int)
+0:127                0 (const int)
+0:127            Constant:
+0:127              1 (const uint)
+0:129      move second child to first child ( temp int)
+0:129        direct index ( temp int)
+0:129          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129              'invocation' ( temp uint)
+0:129            Constant:
+0:129              1 (const int)
+0:129          Constant:
+0:129            0 (const int)
+0:129        subgroupClusteredXor ( global int)
+0:129          direct index ( temp int)
+0:129            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129                Constant:
+0:129                  0 (const int)
+0:129              Constant:
+0:129                1 (const int)
+0:129            Constant:
+0:129              0 (const int)
+0:129          Constant:
+0:129            1 (const uint)
+0:130      move second child to first child ( temp 2-component vector of int)
+0:130        vector swizzle ( temp 2-component vector of int)
+0:130          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:130            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130              'invocation' ( temp uint)
+0:130            Constant:
+0:130              1 (const int)
+0:130          Sequence
+0:130            Constant:
+0:130              0 (const int)
+0:130            Constant:
+0:130              1 (const int)
+0:130        subgroupClusteredXor ( global 2-component vector of int)
+0:130          vector swizzle ( temp 2-component vector of int)
+0:130            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:130              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:130                Constant:
+0:130                  1 (const int)
+0:130              Constant:
+0:130                1 (const int)
+0:130            Sequence
+0:130              Constant:
+0:130                0 (const int)
+0:130              Constant:
+0:130                1 (const int)
+0:130          Constant:
+0:130            1 (const uint)
+0:131      move second child to first child ( temp 3-component vector of int)
+0:131        vector swizzle ( temp 3-component vector of int)
+0:131          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:131            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131              'invocation' ( temp uint)
+0:131            Constant:
+0:131              1 (const int)
+0:131          Sequence
+0:131            Constant:
+0:131              0 (const int)
+0:131            Constant:
+0:131              1 (const int)
+0:131            Constant:
+0:131              2 (const int)
+0:131        subgroupClusteredXor ( global 3-component vector of int)
+0:131          vector swizzle ( temp 3-component vector of int)
+0:131            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:131              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131                Constant:
+0:131                  2 (const int)
+0:131              Constant:
+0:131                1 (const int)
+0:131            Sequence
+0:131              Constant:
+0:131                0 (const int)
+0:131              Constant:
+0:131                1 (const int)
+0:131              Constant:
+0:131                2 (const int)
+0:131          Constant:
+0:131            1 (const uint)
+0:132      move second child to first child ( temp 4-component vector of int)
+0:132        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:132          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132            'invocation' ( temp uint)
+0:132          Constant:
+0:132            1 (const int)
+0:132        subgroupClusteredXor ( global 4-component vector of int)
+0:132          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:132            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132              Constant:
+0:132                3 (const int)
+0:132            Constant:
+0:132              1 (const int)
+0:132          Constant:
+0:132            1 (const uint)
+0:134      move second child to first child ( temp uint)
+0:134        direct index ( temp uint)
+0:134          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134              'invocation' ( temp uint)
+0:134            Constant:
+0:134              2 (const int)
+0:134          Constant:
+0:134            0 (const int)
+0:134        subgroupClusteredXor ( global uint)
+0:134          direct index ( temp uint)
+0:134            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134                Constant:
+0:134                  0 (const int)
+0:134              Constant:
+0:134                2 (const int)
+0:134            Constant:
+0:134              0 (const int)
+0:134          Constant:
+0:134            1 (const uint)
+0:135      move second child to first child ( temp 2-component vector of uint)
+0:135        vector swizzle ( temp 2-component vector of uint)
+0:135          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:135            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135              'invocation' ( temp uint)
+0:135            Constant:
+0:135              2 (const int)
+0:135          Sequence
+0:135            Constant:
+0:135              0 (const int)
+0:135            Constant:
+0:135              1 (const int)
+0:135        subgroupClusteredXor ( global 2-component vector of uint)
+0:135          vector swizzle ( temp 2-component vector of uint)
+0:135            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:135              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:135                Constant:
+0:135                  1 (const int)
+0:135              Constant:
+0:135                2 (const int)
+0:135            Sequence
+0:135              Constant:
+0:135                0 (const int)
+0:135              Constant:
+0:135                1 (const int)
+0:135          Constant:
+0:135            1 (const uint)
+0:136      move second child to first child ( temp 3-component vector of uint)
+0:136        vector swizzle ( temp 3-component vector of uint)
+0:136          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:136            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136              'invocation' ( temp uint)
+0:136            Constant:
+0:136              2 (const int)
+0:136          Sequence
+0:136            Constant:
+0:136              0 (const int)
+0:136            Constant:
+0:136              1 (const int)
+0:136            Constant:
+0:136              2 (const int)
+0:136        subgroupClusteredXor ( global 3-component vector of uint)
+0:136          vector swizzle ( temp 3-component vector of uint)
+0:136            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:136              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136                Constant:
+0:136                  2 (const int)
+0:136              Constant:
+0:136                2 (const int)
+0:136            Sequence
+0:136              Constant:
+0:136                0 (const int)
+0:136              Constant:
+0:136                1 (const int)
+0:136              Constant:
+0:136                2 (const int)
+0:136          Constant:
+0:136            1 (const uint)
+0:137      move second child to first child ( temp 4-component vector of uint)
+0:137        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:137          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137            'invocation' ( temp uint)
+0:137          Constant:
+0:137            2 (const int)
+0:137        subgroupClusteredXor ( global 4-component vector of uint)
+0:137          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:137            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137              Constant:
+0:137                3 (const int)
+0:137            Constant:
+0:137              2 (const int)
+0:137          Constant:
+0:137            1 (const uint)
+0:139      move second child to first child ( temp int)
+0:139        direct index ( temp int)
+0:139          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139              'invocation' ( temp uint)
+0:139            Constant:
+0:139              1 (const int)
+0:139          Constant:
+0:139            0 (const int)
+0:139        Convert bool to int ( temp int)
+0:139          subgroupClusteredXor ( global bool)
+0:139            Compare Less Than ( temp bool)
+0:139              direct index ( temp int)
+0:139                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139                    Constant:
+0:139                      0 (const int)
+0:139                  Constant:
+0:139                    1 (const int)
+0:139                Constant:
+0:139                  0 (const int)
+0:139              Constant:
+0:139                0 (const int)
+0:139            Constant:
+0:139              1 (const uint)
+0:140      move second child to first child ( temp 2-component vector of int)
+0:140        vector swizzle ( temp 2-component vector of int)
+0:140          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:140            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140              'invocation' ( temp uint)
+0:140            Constant:
+0:140              1 (const int)
+0:140          Sequence
+0:140            Constant:
+0:140              0 (const int)
+0:140            Constant:
+0:140              1 (const int)
+0:140        Convert bool to int ( temp 2-component vector of int)
+0:140          subgroupClusteredXor ( global 2-component vector of bool)
+0:140            Compare Less Than ( global 2-component vector of bool)
+0:140              vector swizzle ( temp 2-component vector of int)
+0:140                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:140                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:140                    Constant:
+0:140                      1 (const int)
+0:140                  Constant:
+0:140                    1 (const int)
+0:140                Sequence
+0:140                  Constant:
+0:140                    0 (const int)
+0:140                  Constant:
+0:140                    1 (const int)
+0:140              Constant:
+0:140                0 (const int)
+0:140                0 (const int)
+0:140            Constant:
+0:140              1 (const uint)
+0:141      move second child to first child ( temp 3-component vector of int)
+0:141        vector swizzle ( temp 3-component vector of int)
+0:141          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141              'invocation' ( temp uint)
+0:141            Constant:
+0:141              1 (const int)
+0:141          Sequence
+0:141            Constant:
+0:141              0 (const int)
+0:141            Constant:
+0:141              1 (const int)
+0:141            Constant:
+0:141              2 (const int)
+0:141        Convert bool to int ( temp 3-component vector of int)
+0:141          subgroupClusteredXor ( global 3-component vector of bool)
+0:141            Compare Less Than ( global 3-component vector of bool)
+0:141              vector swizzle ( temp 3-component vector of int)
+0:141                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141                    Constant:
+0:141                      1 (const int)
+0:141                  Constant:
+0:141                    1 (const int)
+0:141                Sequence
+0:141                  Constant:
+0:141                    0 (const int)
+0:141                  Constant:
+0:141                    1 (const int)
+0:141                  Constant:
+0:141                    2 (const int)
+0:141              Constant:
+0:141                0 (const int)
+0:141                0 (const int)
+0:141                0 (const int)
+0:141            Constant:
+0:141              1 (const uint)
+0:142      move second child to first child ( temp 4-component vector of int)
+0:142        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142            'invocation' ( temp uint)
+0:142          Constant:
+0:142            1 (const int)
+0:142        Convert bool to int ( temp 4-component vector of int)
+0:142          subgroupClusteredXor ( global 4-component vector of bool)
+0:142            Compare Less Than ( global 4-component vector of bool)
+0:142              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142                  Constant:
+0:142                    1 (const int)
+0:142                Constant:
+0:142                  1 (const int)
+0:142              Constant:
+0:142                0 (const int)
+0:142                0 (const int)
+0:142                0 (const int)
+0:142                0 (const int)
+0:142            Constant:
+0:142              1 (const uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/Test/baseResults/glsl.450.subgroupClusteredNeg.comp.out b/Test/baseResults/glsl.450.subgroupClusteredNeg.comp.out
new file mode 100644
index 0000000..89ba887
--- /dev/null
+++ b/Test/baseResults/glsl.450.subgroupClusteredNeg.comp.out
@@ -0,0 +1,668 @@
+glsl.450.subgroupClusteredNeg.comp
+ERROR: 0:22: 'cluster size' : argument must be at least 1 
+ERROR: 0:24: 'cluster size' : argument must be a power of 2 
+ERROR: 0:27: 'cluster size' : argument must be a power of 2 
+ERROR: 0:29: 'cluster size' : argument must be at least 1 
+ERROR: 0:31: 'cluster size' : argument must be at least 1 
+ERROR: 0:33: 'cluster size' : argument must be compile-time constant 
+ERROR: 0:36: 'cluster size' : argument must be compile-time constant 
+ERROR: 0:37: 'cluster size' : argument must be compile-time constant 
+ERROR: 8 compilation errors.  No code generated.
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+local_size = (8, 1, 1)
+ERROR: node is still EOpNull!
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp int)
+0:17          'a' ( temp int)
+0:17          Constant:
+0:17            1 (const int)
+0:20      Sequence
+0:20        move second child to first child ( temp uint)
+0:20          'invocation' ( temp uint)
+0:20          mod ( temp uint)
+0:20            add ( temp uint)
+0:20              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:20              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:20            Constant:
+0:20              4 (const uint)
+0:22      move second child to first child ( temp 2-component vector of float)
+0:22        vector swizzle ( temp 2-component vector of float)
+0:22          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              'invocation' ( temp uint)
+0:22            Constant:
+0:22              0 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22        subgroupClusteredAdd ( global 2-component vector of float)
+0:22          vector swizzle ( temp 2-component vector of float)
+0:22            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22                Constant:
+0:22                  1 (const int)
+0:22              Constant:
+0:22                0 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22          Constant:
+0:22            0 (const uint)
+0:24      move second child to first child ( temp float)
+0:24        direct index ( temp float)
+0:24          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'invocation' ( temp uint)
+0:24            Constant:
+0:24              0 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:24        subgroupClusteredMul ( global float)
+0:24          direct index ( temp float)
+0:24            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                Constant:
+0:24                  0 (const int)
+0:24              Constant:
+0:24                0 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:24          Constant:
+0:24            3 (const uint)
+0:26      move second child to first child ( temp 2-component vector of int)
+0:26        vector swizzle ( temp 2-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'invocation' ( temp uint)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupClusteredMin ( global 2-component vector of int)
+0:26          vector swizzle ( temp 2-component vector of int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                Constant:
+0:26                  1 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26          Constant:
+0:26            8 (const uint)
+0:27      move second child to first child ( temp 3-component vector of int)
+0:27        vector swizzle ( temp 3-component vector of int)
+0:27          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'invocation' ( temp uint)
+0:27            Constant:
+0:27              1 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupClusteredMin ( global 3-component vector of int)
+0:27          vector swizzle ( temp 3-component vector of int)
+0:27            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27                Constant:
+0:27                  2 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27          Constant:
+0:27            6 (const uint)
+0:29      move second child to first child ( temp float)
+0:29        direct index ( temp float)
+0:29          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'invocation' ( temp uint)
+0:29            Constant:
+0:29              0 (const int)
+0:29          Constant:
+0:29            0 (const int)
+0:29        subgroupClusteredMax ( global float)
+0:29          direct index ( temp float)
+0:29            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                Constant:
+0:29                  0 (const int)
+0:29              Constant:
+0:29                0 (const int)
+0:29            Constant:
+0:29              0 (const int)
+0:29          Constant:
+0:29            4294967295 (const uint)
+0:31      move second child to first child ( temp 4-component vector of int)
+0:31        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:31          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31            'invocation' ( temp uint)
+0:31          Constant:
+0:31            1 (const int)
+0:31        subgroupClusteredAnd ( global 4-component vector of int)
+0:31          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              Constant:
+0:31                3 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31          Constant:
+0:31            4294967293 (const uint)
+0:33      move second child to first child ( temp int)
+0:33        direct index ( temp int)
+0:33          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:33            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33              'invocation' ( temp uint)
+0:33            Constant:
+0:33              1 (const int)
+0:33          Constant:
+0:33            0 (const int)
+0:33        subgroupClusteredOr ( global int)
+0:33          direct index ( temp int)
+0:33            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:33              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                1 (const int)
+0:33            Constant:
+0:33              0 (const int)
+0:33          Convert int to uint ( temp uint)
+0:33            'a' ( temp int)
+0:34      move second child to first child ( temp 2-component vector of int)
+0:34        vector swizzle ( temp 2-component vector of int)
+0:34          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:34            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'invocation' ( temp uint)
+0:34            Constant:
+0:34              1 (const int)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34        subgroupClusteredOr ( global 2-component vector of int)
+0:34          vector swizzle ( temp 2-component vector of int)
+0:34            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                Constant:
+0:34                  1 (const int)
+0:34              Constant:
+0:34                1 (const int)
+0:34            Sequence
+0:34              Constant:
+0:34                0 (const int)
+0:34              Constant:
+0:34                1 (const int)
+0:34          Constant:
+0:34            1 (const uint)
+0:36      move second child to first child ( temp int)
+0:36        direct index ( temp int)
+0:36          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:36            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'invocation' ( temp uint)
+0:36            Constant:
+0:36              1 (const int)
+0:36          Constant:
+0:36            0 (const int)
+0:36        subgroupClusteredXor ( global int)
+0:36          direct index ( temp int)
+0:36            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                Constant:
+0:36                  0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Convert int to uint ( temp uint)
+0:36            add ( temp int)
+0:36              Constant:
+0:36                1 (const int)
+0:36              'a' ( temp int)
+0:37      move second child to first child ( temp 2-component vector of int)
+0:37        vector swizzle ( temp 2-component vector of int)
+0:37          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:37            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              'invocation' ( temp uint)
+0:37            Constant:
+0:37              1 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37        subgroupClusteredXor ( global 2-component vector of int)
+0:37          vector swizzle ( temp 2-component vector of int)
+0:37            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:37              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37                Constant:
+0:37                  1 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37          Convert int to uint ( temp uint)
+0:37            add ( temp int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              'a' ( temp int)
+0:38      move second child to first child ( temp 3-component vector of int)
+0:38        vector swizzle ( temp 3-component vector of int)
+0:38          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:38            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38              'invocation' ( temp uint)
+0:38            Constant:
+0:38              1 (const int)
+0:38          Sequence
+0:38            Constant:
+0:38              0 (const int)
+0:38            Constant:
+0:38              1 (const int)
+0:38            Constant:
+0:38              2 (const int)
+0:38        subgroupClusteredXor ( global 3-component vector of int)
+0:38          vector swizzle ( temp 3-component vector of int)
+0:38            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:38              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38                Constant:
+0:38                  2 (const int)
+0:38              Constant:
+0:38                1 (const int)
+0:38            Sequence
+0:38              Constant:
+0:38                0 (const int)
+0:38              Constant:
+0:38                1 (const int)
+0:38              Constant:
+0:38                2 (const int)
+0:38          Constant:
+0:38            2 (const uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+local_size = (8, 1, 1)
+ERROR: node is still EOpNull!
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp int)
+0:17          'a' ( temp int)
+0:17          Constant:
+0:17            1 (const int)
+0:20      Sequence
+0:20        move second child to first child ( temp uint)
+0:20          'invocation' ( temp uint)
+0:20          mod ( temp uint)
+0:20            add ( temp uint)
+0:20              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:20              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:20            Constant:
+0:20              4 (const uint)
+0:22      move second child to first child ( temp 2-component vector of float)
+0:22        vector swizzle ( temp 2-component vector of float)
+0:22          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              'invocation' ( temp uint)
+0:22            Constant:
+0:22              0 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22        subgroupClusteredAdd ( global 2-component vector of float)
+0:22          vector swizzle ( temp 2-component vector of float)
+0:22            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22                Constant:
+0:22                  1 (const int)
+0:22              Constant:
+0:22                0 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22          Constant:
+0:22            0 (const uint)
+0:24      move second child to first child ( temp float)
+0:24        direct index ( temp float)
+0:24          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'invocation' ( temp uint)
+0:24            Constant:
+0:24              0 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:24        subgroupClusteredMul ( global float)
+0:24          direct index ( temp float)
+0:24            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                Constant:
+0:24                  0 (const int)
+0:24              Constant:
+0:24                0 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:24          Constant:
+0:24            3 (const uint)
+0:26      move second child to first child ( temp 2-component vector of int)
+0:26        vector swizzle ( temp 2-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'invocation' ( temp uint)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupClusteredMin ( global 2-component vector of int)
+0:26          vector swizzle ( temp 2-component vector of int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                Constant:
+0:26                  1 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26          Constant:
+0:26            8 (const uint)
+0:27      move second child to first child ( temp 3-component vector of int)
+0:27        vector swizzle ( temp 3-component vector of int)
+0:27          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'invocation' ( temp uint)
+0:27            Constant:
+0:27              1 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupClusteredMin ( global 3-component vector of int)
+0:27          vector swizzle ( temp 3-component vector of int)
+0:27            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27                Constant:
+0:27                  2 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27          Constant:
+0:27            6 (const uint)
+0:29      move second child to first child ( temp float)
+0:29        direct index ( temp float)
+0:29          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'invocation' ( temp uint)
+0:29            Constant:
+0:29              0 (const int)
+0:29          Constant:
+0:29            0 (const int)
+0:29        subgroupClusteredMax ( global float)
+0:29          direct index ( temp float)
+0:29            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                Constant:
+0:29                  0 (const int)
+0:29              Constant:
+0:29                0 (const int)
+0:29            Constant:
+0:29              0 (const int)
+0:29          Constant:
+0:29            4294967295 (const uint)
+0:31      move second child to first child ( temp 4-component vector of int)
+0:31        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:31          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31            'invocation' ( temp uint)
+0:31          Constant:
+0:31            1 (const int)
+0:31        subgroupClusteredAnd ( global 4-component vector of int)
+0:31          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              Constant:
+0:31                3 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31          Constant:
+0:31            4294967293 (const uint)
+0:33      move second child to first child ( temp int)
+0:33        direct index ( temp int)
+0:33          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:33            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33              'invocation' ( temp uint)
+0:33            Constant:
+0:33              1 (const int)
+0:33          Constant:
+0:33            0 (const int)
+0:33        subgroupClusteredOr ( global int)
+0:33          direct index ( temp int)
+0:33            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:33              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                1 (const int)
+0:33            Constant:
+0:33              0 (const int)
+0:33          Convert int to uint ( temp uint)
+0:33            'a' ( temp int)
+0:34      move second child to first child ( temp 2-component vector of int)
+0:34        vector swizzle ( temp 2-component vector of int)
+0:34          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:34            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'invocation' ( temp uint)
+0:34            Constant:
+0:34              1 (const int)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34        subgroupClusteredOr ( global 2-component vector of int)
+0:34          vector swizzle ( temp 2-component vector of int)
+0:34            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                Constant:
+0:34                  1 (const int)
+0:34              Constant:
+0:34                1 (const int)
+0:34            Sequence
+0:34              Constant:
+0:34                0 (const int)
+0:34              Constant:
+0:34                1 (const int)
+0:34          Constant:
+0:34            1 (const uint)
+0:36      move second child to first child ( temp int)
+0:36        direct index ( temp int)
+0:36          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:36            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'invocation' ( temp uint)
+0:36            Constant:
+0:36              1 (const int)
+0:36          Constant:
+0:36            0 (const int)
+0:36        subgroupClusteredXor ( global int)
+0:36          direct index ( temp int)
+0:36            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                Constant:
+0:36                  0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Convert int to uint ( temp uint)
+0:36            add ( temp int)
+0:36              Constant:
+0:36                1 (const int)
+0:36              'a' ( temp int)
+0:37      move second child to first child ( temp 2-component vector of int)
+0:37        vector swizzle ( temp 2-component vector of int)
+0:37          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:37            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              'invocation' ( temp uint)
+0:37            Constant:
+0:37              1 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37        subgroupClusteredXor ( global 2-component vector of int)
+0:37          vector swizzle ( temp 2-component vector of int)
+0:37            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:37              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37                Constant:
+0:37                  1 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37          Convert int to uint ( temp uint)
+0:37            add ( temp int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              'a' ( temp int)
+0:38      move second child to first child ( temp 3-component vector of int)
+0:38        vector swizzle ( temp 3-component vector of int)
+0:38          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:38            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38              'invocation' ( temp uint)
+0:38            Constant:
+0:38              1 (const int)
+0:38          Sequence
+0:38            Constant:
+0:38              0 (const int)
+0:38            Constant:
+0:38              1 (const int)
+0:38            Constant:
+0:38              2 (const int)
+0:38        subgroupClusteredXor ( global 3-component vector of int)
+0:38          vector swizzle ( temp 3-component vector of int)
+0:38            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:38              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38                Constant:
+0:38                  2 (const int)
+0:38              Constant:
+0:38                1 (const int)
+0:38            Sequence
+0:38              Constant:
+0:38                0 (const int)
+0:38              Constant:
+0:38                1 (const int)
+0:38              Constant:
+0:38                2 (const int)
+0:38          Constant:
+0:38            2 (const uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/Test/baseResults/glsl.450.subgroupPartitioned.comp.out b/Test/baseResults/glsl.450.subgroupPartitioned.comp.out
new file mode 100644
index 0000000..853e083
--- /dev/null
+++ b/Test/baseResults/glsl.450.subgroupPartitioned.comp.out
@@ -0,0 +1,15937 @@
+glsl.450.subgroupPartitioned.comp
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_NV_shader_subgroup_partitioned
+local_size = (8, 1, 1)
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp uint)
+0:17          'invocation' ( temp uint)
+0:17          mod ( temp uint)
+0:17            add ( temp uint)
+0:17              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      Sequence
+0:19        move second child to first child ( temp 4-component vector of uint)
+0:19          'ballot' ( temp 4-component vector of uint)
+0:19          subgroupPartitionNV ( global 4-component vector of uint)
+0:19            'invocation' ( temp uint)
+0:21      move second child to first child ( temp 4-component vector of uint)
+0:21        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:21          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21            'invocation' ( temp uint)
+0:21          Constant:
+0:21            2 (const int)
+0:21        subgroupPartitionNV ( global 4-component vector of uint)
+0:21          direct index ( temp float)
+0:21            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                Constant:
+0:21                  0 (const int)
+0:21              Constant:
+0:21                0 (const int)
+0:21            Constant:
+0:21              0 (const int)
+0:22      move second child to first child ( temp 4-component vector of uint)
+0:22        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:22          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'invocation' ( temp uint)
+0:22          Constant:
+0:22            2 (const int)
+0:22        subgroupPartitionNV ( global 4-component vector of uint)
+0:22          vector swizzle ( temp 2-component vector of float)
+0:22            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22                Constant:
+0:22                  0 (const int)
+0:22              Constant:
+0:22                0 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:23      move second child to first child ( temp 4-component vector of uint)
+0:23        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:23          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:23            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:23            'invocation' ( temp uint)
+0:23          Constant:
+0:23            2 (const int)
+0:23        subgroupPartitionNV ( global 4-component vector of uint)
+0:23          vector swizzle ( temp 3-component vector of float)
+0:23            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                0 (const int)
+0:23            Sequence
+0:23              Constant:
+0:23                0 (const int)
+0:23              Constant:
+0:23                1 (const int)
+0:23              Constant:
+0:23                2 (const int)
+0:24      move second child to first child ( temp 4-component vector of uint)
+0:24        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:24          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24            'invocation' ( temp uint)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupPartitionNV ( global 4-component vector of uint)
+0:24          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              Constant:
+0:24                0 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:26      move second child to first child ( temp 4-component vector of uint)
+0:26        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:26          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26            'invocation' ( temp uint)
+0:26          Constant:
+0:26            2 (const int)
+0:26        subgroupPartitionNV ( global 4-component vector of uint)
+0:26          direct index ( temp int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                Constant:
+0:26                  0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Constant:
+0:26              0 (const int)
+0:27      move second child to first child ( temp 4-component vector of uint)
+0:27        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:27          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'invocation' ( temp uint)
+0:27          Constant:
+0:27            2 (const int)
+0:27        subgroupPartitionNV ( global 4-component vector of uint)
+0:27          vector swizzle ( temp 2-component vector of int)
+0:27            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27                Constant:
+0:27                  0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:28      move second child to first child ( temp 4-component vector of uint)
+0:28        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:28          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28            'invocation' ( temp uint)
+0:28          Constant:
+0:28            2 (const int)
+0:28        subgroupPartitionNV ( global 4-component vector of uint)
+0:28          vector swizzle ( temp 3-component vector of int)
+0:28            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                1 (const int)
+0:28            Sequence
+0:28              Constant:
+0:28                0 (const int)
+0:28              Constant:
+0:28                1 (const int)
+0:28              Constant:
+0:28                2 (const int)
+0:29      move second child to first child ( temp 4-component vector of uint)
+0:29        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29            'invocation' ( temp uint)
+0:29          Constant:
+0:29            2 (const int)
+0:29        subgroupPartitionNV ( global 4-component vector of uint)
+0:29          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              Constant:
+0:29                0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:31      move second child to first child ( temp 4-component vector of uint)
+0:31        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31            'invocation' ( temp uint)
+0:31          Constant:
+0:31            2 (const int)
+0:31        subgroupPartitionNV ( global 4-component vector of uint)
+0:31          direct index ( temp uint)
+0:31            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                Constant:
+0:31                  0 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31            Constant:
+0:31              0 (const int)
+0:32      move second child to first child ( temp 4-component vector of uint)
+0:32        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'invocation' ( temp uint)
+0:32          Constant:
+0:32            2 (const int)
+0:32        subgroupPartitionNV ( global 4-component vector of uint)
+0:32          vector swizzle ( temp 2-component vector of uint)
+0:32            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32                Constant:
+0:32                  0 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:33      move second child to first child ( temp 4-component vector of uint)
+0:33        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:33          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33            'invocation' ( temp uint)
+0:33          Constant:
+0:33            2 (const int)
+0:33        subgroupPartitionNV ( global 4-component vector of uint)
+0:33          vector swizzle ( temp 3-component vector of uint)
+0:33            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:33              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                2 (const int)
+0:33            Sequence
+0:33              Constant:
+0:33                0 (const int)
+0:33              Constant:
+0:33                1 (const int)
+0:33              Constant:
+0:33                2 (const int)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:34          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34            'invocation' ( temp uint)
+0:34          Constant:
+0:34            2 (const int)
+0:34        subgroupPartitionNV ( global 4-component vector of uint)
+0:34          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:34            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              Constant:
+0:34                0 (const int)
+0:34            Constant:
+0:34              2 (const int)
+0:36      move second child to first child ( temp 4-component vector of uint)
+0:36        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:36          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36            'invocation' ( temp uint)
+0:36          Constant:
+0:36            2 (const int)
+0:36        subgroupPartitionNV ( global 4-component vector of uint)
+0:36          direct index ( temp double)
+0:36            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                Constant:
+0:36                  0 (const int)
+0:36              Constant:
+0:36                3 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:37      move second child to first child ( temp 4-component vector of uint)
+0:37        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:37          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'invocation' ( temp uint)
+0:37          Constant:
+0:37            2 (const int)
+0:37        subgroupPartitionNV ( global 4-component vector of uint)
+0:37          vector swizzle ( temp 2-component vector of double)
+0:37            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37                Constant:
+0:37                  0 (const int)
+0:37              Constant:
+0:37                3 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:38      move second child to first child ( temp 4-component vector of uint)
+0:38        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:38          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38            'invocation' ( temp uint)
+0:38          Constant:
+0:38            2 (const int)
+0:38        subgroupPartitionNV ( global 4-component vector of uint)
+0:38          vector swizzle ( temp 3-component vector of double)
+0:38            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:38              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                3 (const int)
+0:38            Sequence
+0:38              Constant:
+0:38                0 (const int)
+0:38              Constant:
+0:38                1 (const int)
+0:38              Constant:
+0:38                2 (const int)
+0:39      move second child to first child ( temp 4-component vector of uint)
+0:39        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:39          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39            'invocation' ( temp uint)
+0:39          Constant:
+0:39            2 (const int)
+0:39        subgroupPartitionNV ( global 4-component vector of uint)
+0:39          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:39            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              3 (const int)
+0:41      move second child to first child ( temp 4-component vector of uint)
+0:41        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:41          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41            'invocation' ( temp uint)
+0:41          Constant:
+0:41            2 (const int)
+0:41        subgroupPartitionNV ( global 4-component vector of uint)
+0:41          Convert int to bool ( temp bool)
+0:41            direct index ( temp int)
+0:41              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                  Constant:
+0:41                    0 (const int)
+0:41                Constant:
+0:41                  1 (const int)
+0:41              Constant:
+0:41                0 (const int)
+0:42      move second child to first child ( temp 4-component vector of uint)
+0:42        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:42          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'invocation' ( temp uint)
+0:42          Constant:
+0:42            2 (const int)
+0:42        subgroupPartitionNV ( global 4-component vector of uint)
+0:42          Convert int to bool ( temp 2-component vector of bool)
+0:42            vector swizzle ( temp 2-component vector of int)
+0:42              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  Constant:
+0:42                    0 (const int)
+0:42                Constant:
+0:42                  1 (const int)
+0:42              Sequence
+0:42                Constant:
+0:42                  0 (const int)
+0:42                Constant:
+0:42                  1 (const int)
+0:43      move second child to first child ( temp 4-component vector of uint)
+0:43        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:43          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:43            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:43            'invocation' ( temp uint)
+0:43          Constant:
+0:43            2 (const int)
+0:43        subgroupPartitionNV ( global 4-component vector of uint)
+0:43          Convert int to bool ( temp 3-component vector of bool)
+0:43            vector swizzle ( temp 3-component vector of int)
+0:43              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:43                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:43                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:43                  Constant:
+0:43                    0 (const int)
+0:43                Constant:
+0:43                  1 (const int)
+0:43              Sequence
+0:43                Constant:
+0:43                  0 (const int)
+0:43                Constant:
+0:43                  1 (const int)
+0:43                Constant:
+0:43                  2 (const int)
+0:44      move second child to first child ( temp 4-component vector of uint)
+0:44        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:44          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44            'invocation' ( temp uint)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupPartitionNV ( global 4-component vector of uint)
+0:44          Convert int to bool ( temp 4-component vector of bool)
+0:44            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                Constant:
+0:44                  0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:46      move second child to first child ( temp float)
+0:46        direct index ( temp float)
+0:46          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'invocation' ( temp uint)
+0:46            Constant:
+0:46              0 (const int)
+0:46          Constant:
+0:46            0 (const int)
+0:46        subgroupPartitionedAddNV ( global float)
+0:46          direct index ( temp float)
+0:46            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                Constant:
+0:46                  0 (const int)
+0:46              Constant:
+0:46                0 (const int)
+0:46            Constant:
+0:46              0 (const int)
+0:46          'ballot' ( temp 4-component vector of uint)
+0:47      move second child to first child ( temp 2-component vector of float)
+0:47        vector swizzle ( temp 2-component vector of float)
+0:47          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              'invocation' ( temp uint)
+0:47            Constant:
+0:47              0 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47        subgroupPartitionedAddNV ( global 2-component vector of float)
+0:47          vector swizzle ( temp 2-component vector of float)
+0:47            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47                Constant:
+0:47                  1 (const int)
+0:47              Constant:
+0:47                0 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47          'ballot' ( temp 4-component vector of uint)
+0:48      move second child to first child ( temp 3-component vector of float)
+0:48        vector swizzle ( temp 3-component vector of float)
+0:48          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:48            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:48              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:48              'invocation' ( temp uint)
+0:48            Constant:
+0:48              0 (const int)
+0:48          Sequence
+0:48            Constant:
+0:48              0 (const int)
+0:48            Constant:
+0:48              1 (const int)
+0:48            Constant:
+0:48              2 (const int)
+0:48        subgroupPartitionedAddNV ( global 3-component vector of float)
+0:48          vector swizzle ( temp 3-component vector of float)
+0:48            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:48              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:48                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:48                Constant:
+0:48                  2 (const int)
+0:48              Constant:
+0:48                0 (const int)
+0:48            Sequence
+0:48              Constant:
+0:48                0 (const int)
+0:48              Constant:
+0:48                1 (const int)
+0:48              Constant:
+0:48                2 (const int)
+0:48          'ballot' ( temp 4-component vector of uint)
+0:49      move second child to first child ( temp 4-component vector of float)
+0:49        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:49          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49            'invocation' ( temp uint)
+0:49          Constant:
+0:49            0 (const int)
+0:49        subgroupPartitionedAddNV ( global 4-component vector of float)
+0:49          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:49            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              Constant:
+0:49                3 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:49          'ballot' ( temp 4-component vector of uint)
+0:51      move second child to first child ( temp int)
+0:51        direct index ( temp int)
+0:51          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'invocation' ( temp uint)
+0:51            Constant:
+0:51              1 (const int)
+0:51          Constant:
+0:51            0 (const int)
+0:51        subgroupPartitionedAddNV ( global int)
+0:51          direct index ( temp int)
+0:51            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                Constant:
+0:51                  0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51            Constant:
+0:51              0 (const int)
+0:51          'ballot' ( temp 4-component vector of uint)
+0:52      move second child to first child ( temp 2-component vector of int)
+0:52        vector swizzle ( temp 2-component vector of int)
+0:52          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              'invocation' ( temp uint)
+0:52            Constant:
+0:52              1 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52        subgroupPartitionedAddNV ( global 2-component vector of int)
+0:52          vector swizzle ( temp 2-component vector of int)
+0:52            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52                Constant:
+0:52                  1 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52          'ballot' ( temp 4-component vector of uint)
+0:53      move second child to first child ( temp 3-component vector of int)
+0:53        vector swizzle ( temp 3-component vector of int)
+0:53          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:53            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:53              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:53              'invocation' ( temp uint)
+0:53            Constant:
+0:53              1 (const int)
+0:53          Sequence
+0:53            Constant:
+0:53              0 (const int)
+0:53            Constant:
+0:53              1 (const int)
+0:53            Constant:
+0:53              2 (const int)
+0:53        subgroupPartitionedAddNV ( global 3-component vector of int)
+0:53          vector swizzle ( temp 3-component vector of int)
+0:53            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:53              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:53                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:53                Constant:
+0:53                  2 (const int)
+0:53              Constant:
+0:53                1 (const int)
+0:53            Sequence
+0:53              Constant:
+0:53                0 (const int)
+0:53              Constant:
+0:53                1 (const int)
+0:53              Constant:
+0:53                2 (const int)
+0:53          'ballot' ( temp 4-component vector of uint)
+0:54      move second child to first child ( temp 4-component vector of int)
+0:54        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54            'invocation' ( temp uint)
+0:54          Constant:
+0:54            1 (const int)
+0:54        subgroupPartitionedAddNV ( global 4-component vector of int)
+0:54          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              Constant:
+0:54                3 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54          'ballot' ( temp 4-component vector of uint)
+0:56      move second child to first child ( temp uint)
+0:56        direct index ( temp uint)
+0:56          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'invocation' ( temp uint)
+0:56            Constant:
+0:56              2 (const int)
+0:56          Constant:
+0:56            0 (const int)
+0:56        subgroupPartitionedAddNV ( global uint)
+0:56          direct index ( temp uint)
+0:56            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                Constant:
+0:56                  0 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:56            Constant:
+0:56              0 (const int)
+0:56          'ballot' ( temp 4-component vector of uint)
+0:57      move second child to first child ( temp 2-component vector of uint)
+0:57        vector swizzle ( temp 2-component vector of uint)
+0:57          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              'invocation' ( temp uint)
+0:57            Constant:
+0:57              2 (const int)
+0:57          Sequence
+0:57            Constant:
+0:57              0 (const int)
+0:57            Constant:
+0:57              1 (const int)
+0:57        subgroupPartitionedAddNV ( global 2-component vector of uint)
+0:57          vector swizzle ( temp 2-component vector of uint)
+0:57            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57                Constant:
+0:57                  1 (const int)
+0:57              Constant:
+0:57                2 (const int)
+0:57            Sequence
+0:57              Constant:
+0:57                0 (const int)
+0:57              Constant:
+0:57                1 (const int)
+0:57          'ballot' ( temp 4-component vector of uint)
+0:58      move second child to first child ( temp 3-component vector of uint)
+0:58        vector swizzle ( temp 3-component vector of uint)
+0:58          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:58            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:58              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:58              'invocation' ( temp uint)
+0:58            Constant:
+0:58              2 (const int)
+0:58          Sequence
+0:58            Constant:
+0:58              0 (const int)
+0:58            Constant:
+0:58              1 (const int)
+0:58            Constant:
+0:58              2 (const int)
+0:58        subgroupPartitionedAddNV ( global 3-component vector of uint)
+0:58          vector swizzle ( temp 3-component vector of uint)
+0:58            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:58              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:58                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:58                Constant:
+0:58                  2 (const int)
+0:58              Constant:
+0:58                2 (const int)
+0:58            Sequence
+0:58              Constant:
+0:58                0 (const int)
+0:58              Constant:
+0:58                1 (const int)
+0:58              Constant:
+0:58                2 (const int)
+0:58          'ballot' ( temp 4-component vector of uint)
+0:59      move second child to first child ( temp 4-component vector of uint)
+0:59        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:59          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59            'invocation' ( temp uint)
+0:59          Constant:
+0:59            2 (const int)
+0:59        subgroupPartitionedAddNV ( global 4-component vector of uint)
+0:59          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:59            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              Constant:
+0:59                3 (const int)
+0:59            Constant:
+0:59              2 (const int)
+0:59          'ballot' ( temp 4-component vector of uint)
+0:61      move second child to first child ( temp double)
+0:61        direct index ( temp double)
+0:61          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'invocation' ( temp uint)
+0:61            Constant:
+0:61              3 (const int)
+0:61          Constant:
+0:61            0 (const int)
+0:61        subgroupPartitionedAddNV ( global double)
+0:61          direct index ( temp double)
+0:61            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                Constant:
+0:61                  0 (const int)
+0:61              Constant:
+0:61                3 (const int)
+0:61            Constant:
+0:61              0 (const int)
+0:61          'ballot' ( temp 4-component vector of uint)
+0:62      move second child to first child ( temp 2-component vector of double)
+0:62        vector swizzle ( temp 2-component vector of double)
+0:62          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              'invocation' ( temp uint)
+0:62            Constant:
+0:62              3 (const int)
+0:62          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62        subgroupPartitionedAddNV ( global 2-component vector of double)
+0:62          vector swizzle ( temp 2-component vector of double)
+0:62            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62                Constant:
+0:62                  1 (const int)
+0:62              Constant:
+0:62                3 (const int)
+0:62            Sequence
+0:62              Constant:
+0:62                0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62          'ballot' ( temp 4-component vector of uint)
+0:63      move second child to first child ( temp 3-component vector of double)
+0:63        vector swizzle ( temp 3-component vector of double)
+0:63          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:63            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63              'invocation' ( temp uint)
+0:63            Constant:
+0:63              3 (const int)
+0:63          Sequence
+0:63            Constant:
+0:63              0 (const int)
+0:63            Constant:
+0:63              1 (const int)
+0:63            Constant:
+0:63              2 (const int)
+0:63        subgroupPartitionedAddNV ( global 3-component vector of double)
+0:63          vector swizzle ( temp 3-component vector of double)
+0:63            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:63              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63                Constant:
+0:63                  2 (const int)
+0:63              Constant:
+0:63                3 (const int)
+0:63            Sequence
+0:63              Constant:
+0:63                0 (const int)
+0:63              Constant:
+0:63                1 (const int)
+0:63              Constant:
+0:63                2 (const int)
+0:63          'ballot' ( temp 4-component vector of uint)
+0:64      move second child to first child ( temp 4-component vector of double)
+0:64        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:64          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64            'invocation' ( temp uint)
+0:64          Constant:
+0:64            3 (const int)
+0:64        subgroupPartitionedAddNV ( global 4-component vector of double)
+0:64          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:64            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              Constant:
+0:64                3 (const int)
+0:64            Constant:
+0:64              3 (const int)
+0:64          'ballot' ( temp 4-component vector of uint)
+0:66      move second child to first child ( temp float)
+0:66        direct index ( temp float)
+0:66          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:66            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'invocation' ( temp uint)
+0:66            Constant:
+0:66              0 (const int)
+0:66          Constant:
+0:66            0 (const int)
+0:66        subgroupPartitionedMulNV ( global float)
+0:66          direct index ( temp float)
+0:66            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:66              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                Constant:
+0:66                  0 (const int)
+0:66              Constant:
+0:66                0 (const int)
+0:66            Constant:
+0:66              0 (const int)
+0:66          'ballot' ( temp 4-component vector of uint)
+0:67      move second child to first child ( temp 2-component vector of float)
+0:67        vector swizzle ( temp 2-component vector of float)
+0:67          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:67            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67              'invocation' ( temp uint)
+0:67            Constant:
+0:67              0 (const int)
+0:67          Sequence
+0:67            Constant:
+0:67              0 (const int)
+0:67            Constant:
+0:67              1 (const int)
+0:67        subgroupPartitionedMulNV ( global 2-component vector of float)
+0:67          vector swizzle ( temp 2-component vector of float)
+0:67            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:67              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                Constant:
+0:67                  1 (const int)
+0:67              Constant:
+0:67                0 (const int)
+0:67            Sequence
+0:67              Constant:
+0:67                0 (const int)
+0:67              Constant:
+0:67                1 (const int)
+0:67          'ballot' ( temp 4-component vector of uint)
+0:68      move second child to first child ( temp 3-component vector of float)
+0:68        vector swizzle ( temp 3-component vector of float)
+0:68          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:68            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68              'invocation' ( temp uint)
+0:68            Constant:
+0:68              0 (const int)
+0:68          Sequence
+0:68            Constant:
+0:68              0 (const int)
+0:68            Constant:
+0:68              1 (const int)
+0:68            Constant:
+0:68              2 (const int)
+0:68        subgroupPartitionedMulNV ( global 3-component vector of float)
+0:68          vector swizzle ( temp 3-component vector of float)
+0:68            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:68              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68                Constant:
+0:68                  2 (const int)
+0:68              Constant:
+0:68                0 (const int)
+0:68            Sequence
+0:68              Constant:
+0:68                0 (const int)
+0:68              Constant:
+0:68                1 (const int)
+0:68              Constant:
+0:68                2 (const int)
+0:68          'ballot' ( temp 4-component vector of uint)
+0:69      move second child to first child ( temp 4-component vector of float)
+0:69        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:69          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69            'invocation' ( temp uint)
+0:69          Constant:
+0:69            0 (const int)
+0:69        subgroupPartitionedMulNV ( global 4-component vector of float)
+0:69          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:69            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              Constant:
+0:69                3 (const int)
+0:69            Constant:
+0:69              0 (const int)
+0:69          'ballot' ( temp 4-component vector of uint)
+0:71      move second child to first child ( temp int)
+0:71        direct index ( temp int)
+0:71          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:71            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'invocation' ( temp uint)
+0:71            Constant:
+0:71              1 (const int)
+0:71          Constant:
+0:71            0 (const int)
+0:71        subgroupPartitionedMulNV ( global int)
+0:71          direct index ( temp int)
+0:71            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:71              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                Constant:
+0:71                  0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:71            Constant:
+0:71              0 (const int)
+0:71          'ballot' ( temp 4-component vector of uint)
+0:72      move second child to first child ( temp 2-component vector of int)
+0:72        vector swizzle ( temp 2-component vector of int)
+0:72          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:72            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72              'invocation' ( temp uint)
+0:72            Constant:
+0:72              1 (const int)
+0:72          Sequence
+0:72            Constant:
+0:72              0 (const int)
+0:72            Constant:
+0:72              1 (const int)
+0:72        subgroupPartitionedMulNV ( global 2-component vector of int)
+0:72          vector swizzle ( temp 2-component vector of int)
+0:72            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:72              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72                Constant:
+0:72                  1 (const int)
+0:72              Constant:
+0:72                1 (const int)
+0:72            Sequence
+0:72              Constant:
+0:72                0 (const int)
+0:72              Constant:
+0:72                1 (const int)
+0:72          'ballot' ( temp 4-component vector of uint)
+0:73      move second child to first child ( temp 3-component vector of int)
+0:73        vector swizzle ( temp 3-component vector of int)
+0:73          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:73            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73              'invocation' ( temp uint)
+0:73            Constant:
+0:73              1 (const int)
+0:73          Sequence
+0:73            Constant:
+0:73              0 (const int)
+0:73            Constant:
+0:73              1 (const int)
+0:73            Constant:
+0:73              2 (const int)
+0:73        subgroupPartitionedMulNV ( global 3-component vector of int)
+0:73          vector swizzle ( temp 3-component vector of int)
+0:73            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:73              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73                Constant:
+0:73                  2 (const int)
+0:73              Constant:
+0:73                1 (const int)
+0:73            Sequence
+0:73              Constant:
+0:73                0 (const int)
+0:73              Constant:
+0:73                1 (const int)
+0:73              Constant:
+0:73                2 (const int)
+0:73          'ballot' ( temp 4-component vector of uint)
+0:74      move second child to first child ( temp 4-component vector of int)
+0:74        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:74          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74            'invocation' ( temp uint)
+0:74          Constant:
+0:74            1 (const int)
+0:74        subgroupPartitionedMulNV ( global 4-component vector of int)
+0:74          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:74            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74              Constant:
+0:74                3 (const int)
+0:74            Constant:
+0:74              1 (const int)
+0:74          'ballot' ( temp 4-component vector of uint)
+0:76      move second child to first child ( temp uint)
+0:76        direct index ( temp uint)
+0:76          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:76            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76              'invocation' ( temp uint)
+0:76            Constant:
+0:76              2 (const int)
+0:76          Constant:
+0:76            0 (const int)
+0:76        subgroupPartitionedMulNV ( global uint)
+0:76          direct index ( temp uint)
+0:76            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:76              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                Constant:
+0:76                  0 (const int)
+0:76              Constant:
+0:76                2 (const int)
+0:76            Constant:
+0:76              0 (const int)
+0:76          'ballot' ( temp 4-component vector of uint)
+0:77      move second child to first child ( temp 2-component vector of uint)
+0:77        vector swizzle ( temp 2-component vector of uint)
+0:77          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:77            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77              'invocation' ( temp uint)
+0:77            Constant:
+0:77              2 (const int)
+0:77          Sequence
+0:77            Constant:
+0:77              0 (const int)
+0:77            Constant:
+0:77              1 (const int)
+0:77        subgroupPartitionedMulNV ( global 2-component vector of uint)
+0:77          vector swizzle ( temp 2-component vector of uint)
+0:77            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:77              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77                Constant:
+0:77                  1 (const int)
+0:77              Constant:
+0:77                2 (const int)
+0:77            Sequence
+0:77              Constant:
+0:77                0 (const int)
+0:77              Constant:
+0:77                1 (const int)
+0:77          'ballot' ( temp 4-component vector of uint)
+0:78      move second child to first child ( temp 3-component vector of uint)
+0:78        vector swizzle ( temp 3-component vector of uint)
+0:78          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:78            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78              'invocation' ( temp uint)
+0:78            Constant:
+0:78              2 (const int)
+0:78          Sequence
+0:78            Constant:
+0:78              0 (const int)
+0:78            Constant:
+0:78              1 (const int)
+0:78            Constant:
+0:78              2 (const int)
+0:78        subgroupPartitionedMulNV ( global 3-component vector of uint)
+0:78          vector swizzle ( temp 3-component vector of uint)
+0:78            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:78              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78                Constant:
+0:78                  2 (const int)
+0:78              Constant:
+0:78                2 (const int)
+0:78            Sequence
+0:78              Constant:
+0:78                0 (const int)
+0:78              Constant:
+0:78                1 (const int)
+0:78              Constant:
+0:78                2 (const int)
+0:78          'ballot' ( temp 4-component vector of uint)
+0:79      move second child to first child ( temp 4-component vector of uint)
+0:79        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:79          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79            'invocation' ( temp uint)
+0:79          Constant:
+0:79            2 (const int)
+0:79        subgroupPartitionedMulNV ( global 4-component vector of uint)
+0:79          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:79            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79              Constant:
+0:79                3 (const int)
+0:79            Constant:
+0:79              2 (const int)
+0:79          'ballot' ( temp 4-component vector of uint)
+0:81      move second child to first child ( temp double)
+0:81        direct index ( temp double)
+0:81          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:81            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81              'invocation' ( temp uint)
+0:81            Constant:
+0:81              3 (const int)
+0:81          Constant:
+0:81            0 (const int)
+0:81        subgroupPartitionedMulNV ( global double)
+0:81          direct index ( temp double)
+0:81            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:81              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                Constant:
+0:81                  0 (const int)
+0:81              Constant:
+0:81                3 (const int)
+0:81            Constant:
+0:81              0 (const int)
+0:81          'ballot' ( temp 4-component vector of uint)
+0:82      move second child to first child ( temp 2-component vector of double)
+0:82        vector swizzle ( temp 2-component vector of double)
+0:82          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:82            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82              'invocation' ( temp uint)
+0:82            Constant:
+0:82              3 (const int)
+0:82          Sequence
+0:82            Constant:
+0:82              0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82        subgroupPartitionedMulNV ( global 2-component vector of double)
+0:82          vector swizzle ( temp 2-component vector of double)
+0:82            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:82              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82                Constant:
+0:82                  1 (const int)
+0:82              Constant:
+0:82                3 (const int)
+0:82            Sequence
+0:82              Constant:
+0:82                0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82          'ballot' ( temp 4-component vector of uint)
+0:83      move second child to first child ( temp 3-component vector of double)
+0:83        vector swizzle ( temp 3-component vector of double)
+0:83          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:83            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83              'invocation' ( temp uint)
+0:83            Constant:
+0:83              3 (const int)
+0:83          Sequence
+0:83            Constant:
+0:83              0 (const int)
+0:83            Constant:
+0:83              1 (const int)
+0:83            Constant:
+0:83              2 (const int)
+0:83        subgroupPartitionedMulNV ( global 3-component vector of double)
+0:83          vector swizzle ( temp 3-component vector of double)
+0:83            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:83              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83                Constant:
+0:83                  2 (const int)
+0:83              Constant:
+0:83                3 (const int)
+0:83            Sequence
+0:83              Constant:
+0:83                0 (const int)
+0:83              Constant:
+0:83                1 (const int)
+0:83              Constant:
+0:83                2 (const int)
+0:83          'ballot' ( temp 4-component vector of uint)
+0:84      move second child to first child ( temp 4-component vector of double)
+0:84        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:84          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84            'invocation' ( temp uint)
+0:84          Constant:
+0:84            3 (const int)
+0:84        subgroupPartitionedMulNV ( global 4-component vector of double)
+0:84          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:84            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84              Constant:
+0:84                3 (const int)
+0:84            Constant:
+0:84              3 (const int)
+0:84          'ballot' ( temp 4-component vector of uint)
+0:86      move second child to first child ( temp float)
+0:86        direct index ( temp float)
+0:86          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:86            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86              'invocation' ( temp uint)
+0:86            Constant:
+0:86              0 (const int)
+0:86          Constant:
+0:86            0 (const int)
+0:86        subgroupPartitionedMinNV ( global float)
+0:86          direct index ( temp float)
+0:86            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:86              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86                Constant:
+0:86                  0 (const int)
+0:86              Constant:
+0:86                0 (const int)
+0:86            Constant:
+0:86              0 (const int)
+0:86          'ballot' ( temp 4-component vector of uint)
+0:87      move second child to first child ( temp 2-component vector of float)
+0:87        vector swizzle ( temp 2-component vector of float)
+0:87          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:87            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87              'invocation' ( temp uint)
+0:87            Constant:
+0:87              0 (const int)
+0:87          Sequence
+0:87            Constant:
+0:87              0 (const int)
+0:87            Constant:
+0:87              1 (const int)
+0:87        subgroupPartitionedMinNV ( global 2-component vector of float)
+0:87          vector swizzle ( temp 2-component vector of float)
+0:87            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:87              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87                Constant:
+0:87                  1 (const int)
+0:87              Constant:
+0:87                0 (const int)
+0:87            Sequence
+0:87              Constant:
+0:87                0 (const int)
+0:87              Constant:
+0:87                1 (const int)
+0:87          'ballot' ( temp 4-component vector of uint)
+0:88      move second child to first child ( temp 3-component vector of float)
+0:88        vector swizzle ( temp 3-component vector of float)
+0:88          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:88            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:88              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:88              'invocation' ( temp uint)
+0:88            Constant:
+0:88              0 (const int)
+0:88          Sequence
+0:88            Constant:
+0:88              0 (const int)
+0:88            Constant:
+0:88              1 (const int)
+0:88            Constant:
+0:88              2 (const int)
+0:88        subgroupPartitionedMinNV ( global 3-component vector of float)
+0:88          vector swizzle ( temp 3-component vector of float)
+0:88            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:88              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:88                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:88                Constant:
+0:88                  2 (const int)
+0:88              Constant:
+0:88                0 (const int)
+0:88            Sequence
+0:88              Constant:
+0:88                0 (const int)
+0:88              Constant:
+0:88                1 (const int)
+0:88              Constant:
+0:88                2 (const int)
+0:88          'ballot' ( temp 4-component vector of uint)
+0:89      move second child to first child ( temp 4-component vector of float)
+0:89        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:89          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89            'invocation' ( temp uint)
+0:89          Constant:
+0:89            0 (const int)
+0:89        subgroupPartitionedMinNV ( global 4-component vector of float)
+0:89          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:89            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89              Constant:
+0:89                3 (const int)
+0:89            Constant:
+0:89              0 (const int)
+0:89          'ballot' ( temp 4-component vector of uint)
+0:91      move second child to first child ( temp int)
+0:91        direct index ( temp int)
+0:91          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:91            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91              'invocation' ( temp uint)
+0:91            Constant:
+0:91              1 (const int)
+0:91          Constant:
+0:91            0 (const int)
+0:91        subgroupPartitionedMinNV ( global int)
+0:91          direct index ( temp int)
+0:91            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:91              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91                Constant:
+0:91                  0 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:91            Constant:
+0:91              0 (const int)
+0:91          'ballot' ( temp 4-component vector of uint)
+0:92      move second child to first child ( temp 2-component vector of int)
+0:92        vector swizzle ( temp 2-component vector of int)
+0:92          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:92            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92              'invocation' ( temp uint)
+0:92            Constant:
+0:92              1 (const int)
+0:92          Sequence
+0:92            Constant:
+0:92              0 (const int)
+0:92            Constant:
+0:92              1 (const int)
+0:92        subgroupPartitionedMinNV ( global 2-component vector of int)
+0:92          vector swizzle ( temp 2-component vector of int)
+0:92            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:92              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92                Constant:
+0:92                  1 (const int)
+0:92              Constant:
+0:92                1 (const int)
+0:92            Sequence
+0:92              Constant:
+0:92                0 (const int)
+0:92              Constant:
+0:92                1 (const int)
+0:92          'ballot' ( temp 4-component vector of uint)
+0:93      move second child to first child ( temp 3-component vector of int)
+0:93        vector swizzle ( temp 3-component vector of int)
+0:93          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:93            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:93              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:93              'invocation' ( temp uint)
+0:93            Constant:
+0:93              1 (const int)
+0:93          Sequence
+0:93            Constant:
+0:93              0 (const int)
+0:93            Constant:
+0:93              1 (const int)
+0:93            Constant:
+0:93              2 (const int)
+0:93        subgroupPartitionedMinNV ( global 3-component vector of int)
+0:93          vector swizzle ( temp 3-component vector of int)
+0:93            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:93              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:93                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:93                Constant:
+0:93                  2 (const int)
+0:93              Constant:
+0:93                1 (const int)
+0:93            Sequence
+0:93              Constant:
+0:93                0 (const int)
+0:93              Constant:
+0:93                1 (const int)
+0:93              Constant:
+0:93                2 (const int)
+0:93          'ballot' ( temp 4-component vector of uint)
+0:94      move second child to first child ( temp 4-component vector of int)
+0:94        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:94          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94            'invocation' ( temp uint)
+0:94          Constant:
+0:94            1 (const int)
+0:94        subgroupPartitionedMinNV ( global 4-component vector of int)
+0:94          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:94            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94              Constant:
+0:94                3 (const int)
+0:94            Constant:
+0:94              1 (const int)
+0:94          'ballot' ( temp 4-component vector of uint)
+0:96      move second child to first child ( temp uint)
+0:96        direct index ( temp uint)
+0:96          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:96            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96              'invocation' ( temp uint)
+0:96            Constant:
+0:96              2 (const int)
+0:96          Constant:
+0:96            0 (const int)
+0:96        subgroupPartitionedMinNV ( global uint)
+0:96          direct index ( temp uint)
+0:96            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:96              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96                Constant:
+0:96                  0 (const int)
+0:96              Constant:
+0:96                2 (const int)
+0:96            Constant:
+0:96              0 (const int)
+0:96          'ballot' ( temp 4-component vector of uint)
+0:97      move second child to first child ( temp 2-component vector of uint)
+0:97        vector swizzle ( temp 2-component vector of uint)
+0:97          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:97            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97              'invocation' ( temp uint)
+0:97            Constant:
+0:97              2 (const int)
+0:97          Sequence
+0:97            Constant:
+0:97              0 (const int)
+0:97            Constant:
+0:97              1 (const int)
+0:97        subgroupPartitionedMinNV ( global 2-component vector of uint)
+0:97          vector swizzle ( temp 2-component vector of uint)
+0:97            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:97              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97                Constant:
+0:97                  1 (const int)
+0:97              Constant:
+0:97                2 (const int)
+0:97            Sequence
+0:97              Constant:
+0:97                0 (const int)
+0:97              Constant:
+0:97                1 (const int)
+0:97          'ballot' ( temp 4-component vector of uint)
+0:98      move second child to first child ( temp 3-component vector of uint)
+0:98        vector swizzle ( temp 3-component vector of uint)
+0:98          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:98            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:98              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:98              'invocation' ( temp uint)
+0:98            Constant:
+0:98              2 (const int)
+0:98          Sequence
+0:98            Constant:
+0:98              0 (const int)
+0:98            Constant:
+0:98              1 (const int)
+0:98            Constant:
+0:98              2 (const int)
+0:98        subgroupPartitionedMinNV ( global 3-component vector of uint)
+0:98          vector swizzle ( temp 3-component vector of uint)
+0:98            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:98              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:98                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:98                Constant:
+0:98                  2 (const int)
+0:98              Constant:
+0:98                2 (const int)
+0:98            Sequence
+0:98              Constant:
+0:98                0 (const int)
+0:98              Constant:
+0:98                1 (const int)
+0:98              Constant:
+0:98                2 (const int)
+0:98          'ballot' ( temp 4-component vector of uint)
+0:99      move second child to first child ( temp 4-component vector of uint)
+0:99        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:99          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99            'invocation' ( temp uint)
+0:99          Constant:
+0:99            2 (const int)
+0:99        subgroupPartitionedMinNV ( global 4-component vector of uint)
+0:99          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:99            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99              Constant:
+0:99                3 (const int)
+0:99            Constant:
+0:99              2 (const int)
+0:99          'ballot' ( temp 4-component vector of uint)
+0:101      move second child to first child ( temp double)
+0:101        direct index ( temp double)
+0:101          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:101            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101              'invocation' ( temp uint)
+0:101            Constant:
+0:101              3 (const int)
+0:101          Constant:
+0:101            0 (const int)
+0:101        subgroupPartitionedMinNV ( global double)
+0:101          direct index ( temp double)
+0:101            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:101              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101                Constant:
+0:101                  0 (const int)
+0:101              Constant:
+0:101                3 (const int)
+0:101            Constant:
+0:101              0 (const int)
+0:101          'ballot' ( temp 4-component vector of uint)
+0:102      move second child to first child ( temp 2-component vector of double)
+0:102        vector swizzle ( temp 2-component vector of double)
+0:102          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:102            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102              'invocation' ( temp uint)
+0:102            Constant:
+0:102              3 (const int)
+0:102          Sequence
+0:102            Constant:
+0:102              0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102        subgroupPartitionedMinNV ( global 2-component vector of double)
+0:102          vector swizzle ( temp 2-component vector of double)
+0:102            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:102              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102                Constant:
+0:102                  1 (const int)
+0:102              Constant:
+0:102                3 (const int)
+0:102            Sequence
+0:102              Constant:
+0:102                0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102          'ballot' ( temp 4-component vector of uint)
+0:103      move second child to first child ( temp 3-component vector of double)
+0:103        vector swizzle ( temp 3-component vector of double)
+0:103          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:103            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:103              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:103              'invocation' ( temp uint)
+0:103            Constant:
+0:103              3 (const int)
+0:103          Sequence
+0:103            Constant:
+0:103              0 (const int)
+0:103            Constant:
+0:103              1 (const int)
+0:103            Constant:
+0:103              2 (const int)
+0:103        subgroupPartitionedMinNV ( global 3-component vector of double)
+0:103          vector swizzle ( temp 3-component vector of double)
+0:103            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:103              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:103                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:103                Constant:
+0:103                  2 (const int)
+0:103              Constant:
+0:103                3 (const int)
+0:103            Sequence
+0:103              Constant:
+0:103                0 (const int)
+0:103              Constant:
+0:103                1 (const int)
+0:103              Constant:
+0:103                2 (const int)
+0:103          'ballot' ( temp 4-component vector of uint)
+0:104      move second child to first child ( temp 4-component vector of double)
+0:104        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:104          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104            'invocation' ( temp uint)
+0:104          Constant:
+0:104            3 (const int)
+0:104        subgroupPartitionedMinNV ( global 4-component vector of double)
+0:104          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:104            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104              Constant:
+0:104                3 (const int)
+0:104            Constant:
+0:104              3 (const int)
+0:104          'ballot' ( temp 4-component vector of uint)
+0:106      move second child to first child ( temp float)
+0:106        direct index ( temp float)
+0:106          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:106            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106              'invocation' ( temp uint)
+0:106            Constant:
+0:106              0 (const int)
+0:106          Constant:
+0:106            0 (const int)
+0:106        subgroupPartitionedMaxNV ( global float)
+0:106          direct index ( temp float)
+0:106            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:106              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106                Constant:
+0:106                  0 (const int)
+0:106              Constant:
+0:106                0 (const int)
+0:106            Constant:
+0:106              0 (const int)
+0:106          'ballot' ( temp 4-component vector of uint)
+0:107      move second child to first child ( temp 2-component vector of float)
+0:107        vector swizzle ( temp 2-component vector of float)
+0:107          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:107            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107              'invocation' ( temp uint)
+0:107            Constant:
+0:107              0 (const int)
+0:107          Sequence
+0:107            Constant:
+0:107              0 (const int)
+0:107            Constant:
+0:107              1 (const int)
+0:107        subgroupPartitionedMaxNV ( global 2-component vector of float)
+0:107          vector swizzle ( temp 2-component vector of float)
+0:107            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:107              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107                Constant:
+0:107                  1 (const int)
+0:107              Constant:
+0:107                0 (const int)
+0:107            Sequence
+0:107              Constant:
+0:107                0 (const int)
+0:107              Constant:
+0:107                1 (const int)
+0:107          'ballot' ( temp 4-component vector of uint)
+0:108      move second child to first child ( temp 3-component vector of float)
+0:108        vector swizzle ( temp 3-component vector of float)
+0:108          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:108            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:108              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:108              'invocation' ( temp uint)
+0:108            Constant:
+0:108              0 (const int)
+0:108          Sequence
+0:108            Constant:
+0:108              0 (const int)
+0:108            Constant:
+0:108              1 (const int)
+0:108            Constant:
+0:108              2 (const int)
+0:108        subgroupPartitionedMaxNV ( global 3-component vector of float)
+0:108          vector swizzle ( temp 3-component vector of float)
+0:108            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:108              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:108                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:108                Constant:
+0:108                  2 (const int)
+0:108              Constant:
+0:108                0 (const int)
+0:108            Sequence
+0:108              Constant:
+0:108                0 (const int)
+0:108              Constant:
+0:108                1 (const int)
+0:108              Constant:
+0:108                2 (const int)
+0:108          'ballot' ( temp 4-component vector of uint)
+0:109      move second child to first child ( temp 4-component vector of float)
+0:109        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:109          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109            'invocation' ( temp uint)
+0:109          Constant:
+0:109            0 (const int)
+0:109        subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:109          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:109            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109              Constant:
+0:109                3 (const int)
+0:109            Constant:
+0:109              0 (const int)
+0:109          'ballot' ( temp 4-component vector of uint)
+0:111      move second child to first child ( temp int)
+0:111        direct index ( temp int)
+0:111          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111              'invocation' ( temp uint)
+0:111            Constant:
+0:111              1 (const int)
+0:111          Constant:
+0:111            0 (const int)
+0:111        subgroupPartitionedMaxNV ( global int)
+0:111          direct index ( temp int)
+0:111            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111                Constant:
+0:111                  0 (const int)
+0:111              Constant:
+0:111                1 (const int)
+0:111            Constant:
+0:111              0 (const int)
+0:111          'ballot' ( temp 4-component vector of uint)
+0:112      move second child to first child ( temp 2-component vector of int)
+0:112        vector swizzle ( temp 2-component vector of int)
+0:112          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112              'invocation' ( temp uint)
+0:112            Constant:
+0:112              1 (const int)
+0:112          Sequence
+0:112            Constant:
+0:112              0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112        subgroupPartitionedMaxNV ( global 2-component vector of int)
+0:112          vector swizzle ( temp 2-component vector of int)
+0:112            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112                Constant:
+0:112                  1 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112            Sequence
+0:112              Constant:
+0:112                0 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112          'ballot' ( temp 4-component vector of uint)
+0:113      move second child to first child ( temp 3-component vector of int)
+0:113        vector swizzle ( temp 3-component vector of int)
+0:113          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:113            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:113              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:113              'invocation' ( temp uint)
+0:113            Constant:
+0:113              1 (const int)
+0:113          Sequence
+0:113            Constant:
+0:113              0 (const int)
+0:113            Constant:
+0:113              1 (const int)
+0:113            Constant:
+0:113              2 (const int)
+0:113        subgroupPartitionedMaxNV ( global 3-component vector of int)
+0:113          vector swizzle ( temp 3-component vector of int)
+0:113            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:113              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:113                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:113                Constant:
+0:113                  2 (const int)
+0:113              Constant:
+0:113                1 (const int)
+0:113            Sequence
+0:113              Constant:
+0:113                0 (const int)
+0:113              Constant:
+0:113                1 (const int)
+0:113              Constant:
+0:113                2 (const int)
+0:113          'ballot' ( temp 4-component vector of uint)
+0:114      move second child to first child ( temp 4-component vector of int)
+0:114        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114            'invocation' ( temp uint)
+0:114          Constant:
+0:114            1 (const int)
+0:114        subgroupPartitionedMaxNV ( global 4-component vector of int)
+0:114          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114              Constant:
+0:114                3 (const int)
+0:114            Constant:
+0:114              1 (const int)
+0:114          'ballot' ( temp 4-component vector of uint)
+0:116      move second child to first child ( temp uint)
+0:116        direct index ( temp uint)
+0:116          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:116            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116              'invocation' ( temp uint)
+0:116            Constant:
+0:116              2 (const int)
+0:116          Constant:
+0:116            0 (const int)
+0:116        subgroupPartitionedMaxNV ( global uint)
+0:116          direct index ( temp uint)
+0:116            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:116              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116                Constant:
+0:116                  0 (const int)
+0:116              Constant:
+0:116                2 (const int)
+0:116            Constant:
+0:116              0 (const int)
+0:116          'ballot' ( temp 4-component vector of uint)
+0:117      move second child to first child ( temp 2-component vector of uint)
+0:117        vector swizzle ( temp 2-component vector of uint)
+0:117          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:117            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117              'invocation' ( temp uint)
+0:117            Constant:
+0:117              2 (const int)
+0:117          Sequence
+0:117            Constant:
+0:117              0 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:117        subgroupPartitionedMaxNV ( global 2-component vector of uint)
+0:117          vector swizzle ( temp 2-component vector of uint)
+0:117            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:117              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117                Constant:
+0:117                  1 (const int)
+0:117              Constant:
+0:117                2 (const int)
+0:117            Sequence
+0:117              Constant:
+0:117                0 (const int)
+0:117              Constant:
+0:117                1 (const int)
+0:117          'ballot' ( temp 4-component vector of uint)
+0:118      move second child to first child ( temp 3-component vector of uint)
+0:118        vector swizzle ( temp 3-component vector of uint)
+0:118          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:118            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:118              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:118              'invocation' ( temp uint)
+0:118            Constant:
+0:118              2 (const int)
+0:118          Sequence
+0:118            Constant:
+0:118              0 (const int)
+0:118            Constant:
+0:118              1 (const int)
+0:118            Constant:
+0:118              2 (const int)
+0:118        subgroupPartitionedMaxNV ( global 3-component vector of uint)
+0:118          vector swizzle ( temp 3-component vector of uint)
+0:118            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:118              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:118                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:118                Constant:
+0:118                  2 (const int)
+0:118              Constant:
+0:118                2 (const int)
+0:118            Sequence
+0:118              Constant:
+0:118                0 (const int)
+0:118              Constant:
+0:118                1 (const int)
+0:118              Constant:
+0:118                2 (const int)
+0:118          'ballot' ( temp 4-component vector of uint)
+0:119      move second child to first child ( temp 4-component vector of uint)
+0:119        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119            'invocation' ( temp uint)
+0:119          Constant:
+0:119            2 (const int)
+0:119        subgroupPartitionedMaxNV ( global 4-component vector of uint)
+0:119          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119              Constant:
+0:119                3 (const int)
+0:119            Constant:
+0:119              2 (const int)
+0:119          'ballot' ( temp 4-component vector of uint)
+0:121      move second child to first child ( temp double)
+0:121        direct index ( temp double)
+0:121          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:121            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121              'invocation' ( temp uint)
+0:121            Constant:
+0:121              3 (const int)
+0:121          Constant:
+0:121            0 (const int)
+0:121        subgroupPartitionedMaxNV ( global double)
+0:121          direct index ( temp double)
+0:121            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:121              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121                Constant:
+0:121                  0 (const int)
+0:121              Constant:
+0:121                3 (const int)
+0:121            Constant:
+0:121              0 (const int)
+0:121          'ballot' ( temp 4-component vector of uint)
+0:122      move second child to first child ( temp 2-component vector of double)
+0:122        vector swizzle ( temp 2-component vector of double)
+0:122          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:122            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122              'invocation' ( temp uint)
+0:122            Constant:
+0:122              3 (const int)
+0:122          Sequence
+0:122            Constant:
+0:122              0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122        subgroupPartitionedMaxNV ( global 2-component vector of double)
+0:122          vector swizzle ( temp 2-component vector of double)
+0:122            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:122              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122                Constant:
+0:122                  1 (const int)
+0:122              Constant:
+0:122                3 (const int)
+0:122            Sequence
+0:122              Constant:
+0:122                0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122          'ballot' ( temp 4-component vector of uint)
+0:123      move second child to first child ( temp 3-component vector of double)
+0:123        vector swizzle ( temp 3-component vector of double)
+0:123          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:123            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:123              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:123              'invocation' ( temp uint)
+0:123            Constant:
+0:123              3 (const int)
+0:123          Sequence
+0:123            Constant:
+0:123              0 (const int)
+0:123            Constant:
+0:123              1 (const int)
+0:123            Constant:
+0:123              2 (const int)
+0:123        subgroupPartitionedMaxNV ( global 3-component vector of double)
+0:123          vector swizzle ( temp 3-component vector of double)
+0:123            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:123              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:123                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:123                Constant:
+0:123                  2 (const int)
+0:123              Constant:
+0:123                3 (const int)
+0:123            Sequence
+0:123              Constant:
+0:123                0 (const int)
+0:123              Constant:
+0:123                1 (const int)
+0:123              Constant:
+0:123                2 (const int)
+0:123          'ballot' ( temp 4-component vector of uint)
+0:124      move second child to first child ( temp 4-component vector of double)
+0:124        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:124          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124            'invocation' ( temp uint)
+0:124          Constant:
+0:124            3 (const int)
+0:124        subgroupPartitionedMaxNV ( global 4-component vector of double)
+0:124          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:124            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124              Constant:
+0:124                3 (const int)
+0:124            Constant:
+0:124              3 (const int)
+0:124          'ballot' ( temp 4-component vector of uint)
+0:126      move second child to first child ( temp int)
+0:126        direct index ( temp int)
+0:126          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126              'invocation' ( temp uint)
+0:126            Constant:
+0:126              1 (const int)
+0:126          Constant:
+0:126            0 (const int)
+0:126        subgroupPartitionedAndNV ( global int)
+0:126          direct index ( temp int)
+0:126            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126                Constant:
+0:126                  0 (const int)
+0:126              Constant:
+0:126                1 (const int)
+0:126            Constant:
+0:126              0 (const int)
+0:126          'ballot' ( temp 4-component vector of uint)
+0:127      move second child to first child ( temp 2-component vector of int)
+0:127        vector swizzle ( temp 2-component vector of int)
+0:127          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127              'invocation' ( temp uint)
+0:127            Constant:
+0:127              1 (const int)
+0:127          Sequence
+0:127            Constant:
+0:127              0 (const int)
+0:127            Constant:
+0:127              1 (const int)
+0:127        subgroupPartitionedAndNV ( global 2-component vector of int)
+0:127          vector swizzle ( temp 2-component vector of int)
+0:127            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127                Constant:
+0:127                  1 (const int)
+0:127              Constant:
+0:127                1 (const int)
+0:127            Sequence
+0:127              Constant:
+0:127                0 (const int)
+0:127              Constant:
+0:127                1 (const int)
+0:127          'ballot' ( temp 4-component vector of uint)
+0:128      move second child to first child ( temp 3-component vector of int)
+0:128        vector swizzle ( temp 3-component vector of int)
+0:128          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:128            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:128              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:128              'invocation' ( temp uint)
+0:128            Constant:
+0:128              1 (const int)
+0:128          Sequence
+0:128            Constant:
+0:128              0 (const int)
+0:128            Constant:
+0:128              1 (const int)
+0:128            Constant:
+0:128              2 (const int)
+0:128        subgroupPartitionedAndNV ( global 3-component vector of int)
+0:128          vector swizzle ( temp 3-component vector of int)
+0:128            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:128              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:128                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:128                Constant:
+0:128                  2 (const int)
+0:128              Constant:
+0:128                1 (const int)
+0:128            Sequence
+0:128              Constant:
+0:128                0 (const int)
+0:128              Constant:
+0:128                1 (const int)
+0:128              Constant:
+0:128                2 (const int)
+0:128          'ballot' ( temp 4-component vector of uint)
+0:129      move second child to first child ( temp 4-component vector of int)
+0:129        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129            'invocation' ( temp uint)
+0:129          Constant:
+0:129            1 (const int)
+0:129        subgroupPartitionedAndNV ( global 4-component vector of int)
+0:129          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129              Constant:
+0:129                3 (const int)
+0:129            Constant:
+0:129              1 (const int)
+0:129          'ballot' ( temp 4-component vector of uint)
+0:131      move second child to first child ( temp uint)
+0:131        direct index ( temp uint)
+0:131          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:131            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131              'invocation' ( temp uint)
+0:131            Constant:
+0:131              2 (const int)
+0:131          Constant:
+0:131            0 (const int)
+0:131        subgroupPartitionedAndNV ( global uint)
+0:131          direct index ( temp uint)
+0:131            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:131              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131                Constant:
+0:131                  0 (const int)
+0:131              Constant:
+0:131                2 (const int)
+0:131            Constant:
+0:131              0 (const int)
+0:131          'ballot' ( temp 4-component vector of uint)
+0:132      move second child to first child ( temp 2-component vector of uint)
+0:132        vector swizzle ( temp 2-component vector of uint)
+0:132          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:132            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132              'invocation' ( temp uint)
+0:132            Constant:
+0:132              2 (const int)
+0:132          Sequence
+0:132            Constant:
+0:132              0 (const int)
+0:132            Constant:
+0:132              1 (const int)
+0:132        subgroupPartitionedAndNV ( global 2-component vector of uint)
+0:132          vector swizzle ( temp 2-component vector of uint)
+0:132            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:132              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132                Constant:
+0:132                  1 (const int)
+0:132              Constant:
+0:132                2 (const int)
+0:132            Sequence
+0:132              Constant:
+0:132                0 (const int)
+0:132              Constant:
+0:132                1 (const int)
+0:132          'ballot' ( temp 4-component vector of uint)
+0:133      move second child to first child ( temp 3-component vector of uint)
+0:133        vector swizzle ( temp 3-component vector of uint)
+0:133          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:133            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:133              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:133              'invocation' ( temp uint)
+0:133            Constant:
+0:133              2 (const int)
+0:133          Sequence
+0:133            Constant:
+0:133              0 (const int)
+0:133            Constant:
+0:133              1 (const int)
+0:133            Constant:
+0:133              2 (const int)
+0:133        subgroupPartitionedAndNV ( global 3-component vector of uint)
+0:133          vector swizzle ( temp 3-component vector of uint)
+0:133            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:133              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:133                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:133                Constant:
+0:133                  2 (const int)
+0:133              Constant:
+0:133                2 (const int)
+0:133            Sequence
+0:133              Constant:
+0:133                0 (const int)
+0:133              Constant:
+0:133                1 (const int)
+0:133              Constant:
+0:133                2 (const int)
+0:133          'ballot' ( temp 4-component vector of uint)
+0:134      move second child to first child ( temp 4-component vector of uint)
+0:134        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134            'invocation' ( temp uint)
+0:134          Constant:
+0:134            2 (const int)
+0:134        subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:134          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134              Constant:
+0:134                3 (const int)
+0:134            Constant:
+0:134              2 (const int)
+0:134          'ballot' ( temp 4-component vector of uint)
+0:136      move second child to first child ( temp int)
+0:136        direct index ( temp int)
+0:136          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:136            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136              'invocation' ( temp uint)
+0:136            Constant:
+0:136              1 (const int)
+0:136          Constant:
+0:136            0 (const int)
+0:136        Convert bool to int ( temp int)
+0:136          subgroupPartitionedAndNV ( global bool)
+0:136            Compare Less Than ( temp bool)
+0:136              direct index ( temp int)
+0:136                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:136                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136                    Constant:
+0:136                      0 (const int)
+0:136                  Constant:
+0:136                    1 (const int)
+0:136                Constant:
+0:136                  0 (const int)
+0:136              Constant:
+0:136                0 (const int)
+0:136            'ballot' ( temp 4-component vector of uint)
+0:137      move second child to first child ( temp 2-component vector of int)
+0:137        vector swizzle ( temp 2-component vector of int)
+0:137          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:137            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137              'invocation' ( temp uint)
+0:137            Constant:
+0:137              1 (const int)
+0:137          Sequence
+0:137            Constant:
+0:137              0 (const int)
+0:137            Constant:
+0:137              1 (const int)
+0:137        Convert bool to int ( temp 2-component vector of int)
+0:137          subgroupPartitionedAndNV ( global 2-component vector of bool)
+0:137            Compare Less Than ( global 2-component vector of bool)
+0:137              vector swizzle ( temp 2-component vector of int)
+0:137                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:137                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137                    Constant:
+0:137                      1 (const int)
+0:137                  Constant:
+0:137                    1 (const int)
+0:137                Sequence
+0:137                  Constant:
+0:137                    0 (const int)
+0:137                  Constant:
+0:137                    1 (const int)
+0:137              Constant:
+0:137                0 (const int)
+0:137                0 (const int)
+0:137            'ballot' ( temp 4-component vector of uint)
+0:138      move second child to first child ( temp 3-component vector of int)
+0:138        vector swizzle ( temp 3-component vector of int)
+0:138          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:138            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:138              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:138              'invocation' ( temp uint)
+0:138            Constant:
+0:138              1 (const int)
+0:138          Sequence
+0:138            Constant:
+0:138              0 (const int)
+0:138            Constant:
+0:138              1 (const int)
+0:138            Constant:
+0:138              2 (const int)
+0:138        Convert bool to int ( temp 3-component vector of int)
+0:138          subgroupPartitionedAndNV ( global 3-component vector of bool)
+0:138            Compare Less Than ( global 3-component vector of bool)
+0:138              vector swizzle ( temp 3-component vector of int)
+0:138                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:138                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:138                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:138                    Constant:
+0:138                      1 (const int)
+0:138                  Constant:
+0:138                    1 (const int)
+0:138                Sequence
+0:138                  Constant:
+0:138                    0 (const int)
+0:138                  Constant:
+0:138                    1 (const int)
+0:138                  Constant:
+0:138                    2 (const int)
+0:138              Constant:
+0:138                0 (const int)
+0:138                0 (const int)
+0:138                0 (const int)
+0:138            'ballot' ( temp 4-component vector of uint)
+0:139      move second child to first child ( temp 4-component vector of int)
+0:139        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139            'invocation' ( temp uint)
+0:139          Constant:
+0:139            1 (const int)
+0:139        Convert bool to int ( temp 4-component vector of int)
+0:139          subgroupPartitionedAndNV ( global 4-component vector of bool)
+0:139            Compare Less Than ( global 4-component vector of bool)
+0:139              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139                  Constant:
+0:139                    1 (const int)
+0:139                Constant:
+0:139                  1 (const int)
+0:139              Constant:
+0:139                0 (const int)
+0:139                0 (const int)
+0:139                0 (const int)
+0:139                0 (const int)
+0:139            'ballot' ( temp 4-component vector of uint)
+0:141      move second child to first child ( temp int)
+0:141        direct index ( temp int)
+0:141          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141              'invocation' ( temp uint)
+0:141            Constant:
+0:141              1 (const int)
+0:141          Constant:
+0:141            0 (const int)
+0:141        subgroupPartitionedOrNV ( global int)
+0:141          direct index ( temp int)
+0:141            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141                Constant:
+0:141                  0 (const int)
+0:141              Constant:
+0:141                1 (const int)
+0:141            Constant:
+0:141              0 (const int)
+0:141          'ballot' ( temp 4-component vector of uint)
+0:142      move second child to first child ( temp 2-component vector of int)
+0:142        vector swizzle ( temp 2-component vector of int)
+0:142          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142              'invocation' ( temp uint)
+0:142            Constant:
+0:142              1 (const int)
+0:142          Sequence
+0:142            Constant:
+0:142              0 (const int)
+0:142            Constant:
+0:142              1 (const int)
+0:142        subgroupPartitionedOrNV ( global 2-component vector of int)
+0:142          vector swizzle ( temp 2-component vector of int)
+0:142            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142                Constant:
+0:142                  1 (const int)
+0:142              Constant:
+0:142                1 (const int)
+0:142            Sequence
+0:142              Constant:
+0:142                0 (const int)
+0:142              Constant:
+0:142                1 (const int)
+0:142          'ballot' ( temp 4-component vector of uint)
+0:143      move second child to first child ( temp 3-component vector of int)
+0:143        vector swizzle ( temp 3-component vector of int)
+0:143          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:143            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:143              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:143              'invocation' ( temp uint)
+0:143            Constant:
+0:143              1 (const int)
+0:143          Sequence
+0:143            Constant:
+0:143              0 (const int)
+0:143            Constant:
+0:143              1 (const int)
+0:143            Constant:
+0:143              2 (const int)
+0:143        subgroupPartitionedOrNV ( global 3-component vector of int)
+0:143          vector swizzle ( temp 3-component vector of int)
+0:143            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:143              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:143                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:143                Constant:
+0:143                  2 (const int)
+0:143              Constant:
+0:143                1 (const int)
+0:143            Sequence
+0:143              Constant:
+0:143                0 (const int)
+0:143              Constant:
+0:143                1 (const int)
+0:143              Constant:
+0:143                2 (const int)
+0:143          'ballot' ( temp 4-component vector of uint)
+0:144      move second child to first child ( temp 4-component vector of int)
+0:144        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:144          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144            'invocation' ( temp uint)
+0:144          Constant:
+0:144            1 (const int)
+0:144        subgroupPartitionedOrNV ( global 4-component vector of int)
+0:144          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:144            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144              Constant:
+0:144                3 (const int)
+0:144            Constant:
+0:144              1 (const int)
+0:144          'ballot' ( temp 4-component vector of uint)
+0:146      move second child to first child ( temp uint)
+0:146        direct index ( temp uint)
+0:146          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:146            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146              'invocation' ( temp uint)
+0:146            Constant:
+0:146              2 (const int)
+0:146          Constant:
+0:146            0 (const int)
+0:146        subgroupPartitionedOrNV ( global uint)
+0:146          direct index ( temp uint)
+0:146            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:146              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146                Constant:
+0:146                  0 (const int)
+0:146              Constant:
+0:146                2 (const int)
+0:146            Constant:
+0:146              0 (const int)
+0:146          'ballot' ( temp 4-component vector of uint)
+0:147      move second child to first child ( temp 2-component vector of uint)
+0:147        vector swizzle ( temp 2-component vector of uint)
+0:147          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:147            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147              'invocation' ( temp uint)
+0:147            Constant:
+0:147              2 (const int)
+0:147          Sequence
+0:147            Constant:
+0:147              0 (const int)
+0:147            Constant:
+0:147              1 (const int)
+0:147        subgroupPartitionedOrNV ( global 2-component vector of uint)
+0:147          vector swizzle ( temp 2-component vector of uint)
+0:147            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:147              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147                Constant:
+0:147                  1 (const int)
+0:147              Constant:
+0:147                2 (const int)
+0:147            Sequence
+0:147              Constant:
+0:147                0 (const int)
+0:147              Constant:
+0:147                1 (const int)
+0:147          'ballot' ( temp 4-component vector of uint)
+0:148      move second child to first child ( temp 3-component vector of uint)
+0:148        vector swizzle ( temp 3-component vector of uint)
+0:148          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:148            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:148              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:148              'invocation' ( temp uint)
+0:148            Constant:
+0:148              2 (const int)
+0:148          Sequence
+0:148            Constant:
+0:148              0 (const int)
+0:148            Constant:
+0:148              1 (const int)
+0:148            Constant:
+0:148              2 (const int)
+0:148        subgroupPartitionedOrNV ( global 3-component vector of uint)
+0:148          vector swizzle ( temp 3-component vector of uint)
+0:148            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:148              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:148                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:148                Constant:
+0:148                  2 (const int)
+0:148              Constant:
+0:148                2 (const int)
+0:148            Sequence
+0:148              Constant:
+0:148                0 (const int)
+0:148              Constant:
+0:148                1 (const int)
+0:148              Constant:
+0:148                2 (const int)
+0:148          'ballot' ( temp 4-component vector of uint)
+0:149      move second child to first child ( temp 4-component vector of uint)
+0:149        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:149          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149            'invocation' ( temp uint)
+0:149          Constant:
+0:149            2 (const int)
+0:149        subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:149          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:149            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149              Constant:
+0:149                3 (const int)
+0:149            Constant:
+0:149              2 (const int)
+0:149          'ballot' ( temp 4-component vector of uint)
+0:151      move second child to first child ( temp int)
+0:151        direct index ( temp int)
+0:151          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:151            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151              'invocation' ( temp uint)
+0:151            Constant:
+0:151              1 (const int)
+0:151          Constant:
+0:151            0 (const int)
+0:151        Convert bool to int ( temp int)
+0:151          subgroupPartitionedOrNV ( global bool)
+0:151            Compare Less Than ( temp bool)
+0:151              direct index ( temp int)
+0:151                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:151                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151                    Constant:
+0:151                      0 (const int)
+0:151                  Constant:
+0:151                    1 (const int)
+0:151                Constant:
+0:151                  0 (const int)
+0:151              Constant:
+0:151                0 (const int)
+0:151            'ballot' ( temp 4-component vector of uint)
+0:152      move second child to first child ( temp 2-component vector of int)
+0:152        vector swizzle ( temp 2-component vector of int)
+0:152          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:152            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152              'invocation' ( temp uint)
+0:152            Constant:
+0:152              1 (const int)
+0:152          Sequence
+0:152            Constant:
+0:152              0 (const int)
+0:152            Constant:
+0:152              1 (const int)
+0:152        Convert bool to int ( temp 2-component vector of int)
+0:152          subgroupPartitionedOrNV ( global 2-component vector of bool)
+0:152            Compare Less Than ( global 2-component vector of bool)
+0:152              vector swizzle ( temp 2-component vector of int)
+0:152                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:152                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152                    Constant:
+0:152                      1 (const int)
+0:152                  Constant:
+0:152                    1 (const int)
+0:152                Sequence
+0:152                  Constant:
+0:152                    0 (const int)
+0:152                  Constant:
+0:152                    1 (const int)
+0:152              Constant:
+0:152                0 (const int)
+0:152                0 (const int)
+0:152            'ballot' ( temp 4-component vector of uint)
+0:153      move second child to first child ( temp 3-component vector of int)
+0:153        vector swizzle ( temp 3-component vector of int)
+0:153          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:153            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:153              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:153              'invocation' ( temp uint)
+0:153            Constant:
+0:153              1 (const int)
+0:153          Sequence
+0:153            Constant:
+0:153              0 (const int)
+0:153            Constant:
+0:153              1 (const int)
+0:153            Constant:
+0:153              2 (const int)
+0:153        Convert bool to int ( temp 3-component vector of int)
+0:153          subgroupPartitionedOrNV ( global 3-component vector of bool)
+0:153            Compare Less Than ( global 3-component vector of bool)
+0:153              vector swizzle ( temp 3-component vector of int)
+0:153                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:153                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:153                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:153                    Constant:
+0:153                      1 (const int)
+0:153                  Constant:
+0:153                    1 (const int)
+0:153                Sequence
+0:153                  Constant:
+0:153                    0 (const int)
+0:153                  Constant:
+0:153                    1 (const int)
+0:153                  Constant:
+0:153                    2 (const int)
+0:153              Constant:
+0:153                0 (const int)
+0:153                0 (const int)
+0:153                0 (const int)
+0:153            'ballot' ( temp 4-component vector of uint)
+0:154      move second child to first child ( temp 4-component vector of int)
+0:154        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:154          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154            'invocation' ( temp uint)
+0:154          Constant:
+0:154            1 (const int)
+0:154        Convert bool to int ( temp 4-component vector of int)
+0:154          subgroupPartitionedOrNV ( global 4-component vector of bool)
+0:154            Compare Less Than ( global 4-component vector of bool)
+0:154              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:154                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154                  Constant:
+0:154                    1 (const int)
+0:154                Constant:
+0:154                  1 (const int)
+0:154              Constant:
+0:154                0 (const int)
+0:154                0 (const int)
+0:154                0 (const int)
+0:154                0 (const int)
+0:154            'ballot' ( temp 4-component vector of uint)
+0:156      move second child to first child ( temp int)
+0:156        direct index ( temp int)
+0:156          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:156            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156              'invocation' ( temp uint)
+0:156            Constant:
+0:156              1 (const int)
+0:156          Constant:
+0:156            0 (const int)
+0:156        subgroupPartitionedXorNV ( global int)
+0:156          direct index ( temp int)
+0:156            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:156              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156                Constant:
+0:156                  0 (const int)
+0:156              Constant:
+0:156                1 (const int)
+0:156            Constant:
+0:156              0 (const int)
+0:156          'ballot' ( temp 4-component vector of uint)
+0:157      move second child to first child ( temp 2-component vector of int)
+0:157        vector swizzle ( temp 2-component vector of int)
+0:157          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:157            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157              'invocation' ( temp uint)
+0:157            Constant:
+0:157              1 (const int)
+0:157          Sequence
+0:157            Constant:
+0:157              0 (const int)
+0:157            Constant:
+0:157              1 (const int)
+0:157        subgroupPartitionedXorNV ( global 2-component vector of int)
+0:157          vector swizzle ( temp 2-component vector of int)
+0:157            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:157              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157                Constant:
+0:157                  1 (const int)
+0:157              Constant:
+0:157                1 (const int)
+0:157            Sequence
+0:157              Constant:
+0:157                0 (const int)
+0:157              Constant:
+0:157                1 (const int)
+0:157          'ballot' ( temp 4-component vector of uint)
+0:158      move second child to first child ( temp 3-component vector of int)
+0:158        vector swizzle ( temp 3-component vector of int)
+0:158          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:158            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:158              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:158              'invocation' ( temp uint)
+0:158            Constant:
+0:158              1 (const int)
+0:158          Sequence
+0:158            Constant:
+0:158              0 (const int)
+0:158            Constant:
+0:158              1 (const int)
+0:158            Constant:
+0:158              2 (const int)
+0:158        subgroupPartitionedXorNV ( global 3-component vector of int)
+0:158          vector swizzle ( temp 3-component vector of int)
+0:158            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:158              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:158                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:158                Constant:
+0:158                  2 (const int)
+0:158              Constant:
+0:158                1 (const int)
+0:158            Sequence
+0:158              Constant:
+0:158                0 (const int)
+0:158              Constant:
+0:158                1 (const int)
+0:158              Constant:
+0:158                2 (const int)
+0:158          'ballot' ( temp 4-component vector of uint)
+0:159      move second child to first child ( temp 4-component vector of int)
+0:159        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:159          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159            'invocation' ( temp uint)
+0:159          Constant:
+0:159            1 (const int)
+0:159        subgroupPartitionedXorNV ( global 4-component vector of int)
+0:159          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:159            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159              Constant:
+0:159                3 (const int)
+0:159            Constant:
+0:159              1 (const int)
+0:159          'ballot' ( temp 4-component vector of uint)
+0:161      move second child to first child ( temp uint)
+0:161        direct index ( temp uint)
+0:161          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:161            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161              'invocation' ( temp uint)
+0:161            Constant:
+0:161              2 (const int)
+0:161          Constant:
+0:161            0 (const int)
+0:161        subgroupPartitionedXorNV ( global uint)
+0:161          direct index ( temp uint)
+0:161            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:161              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161                Constant:
+0:161                  0 (const int)
+0:161              Constant:
+0:161                2 (const int)
+0:161            Constant:
+0:161              0 (const int)
+0:161          'ballot' ( temp 4-component vector of uint)
+0:162      move second child to first child ( temp 2-component vector of uint)
+0:162        vector swizzle ( temp 2-component vector of uint)
+0:162          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:162            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162              'invocation' ( temp uint)
+0:162            Constant:
+0:162              2 (const int)
+0:162          Sequence
+0:162            Constant:
+0:162              0 (const int)
+0:162            Constant:
+0:162              1 (const int)
+0:162        subgroupPartitionedXorNV ( global 2-component vector of uint)
+0:162          vector swizzle ( temp 2-component vector of uint)
+0:162            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:162              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162                Constant:
+0:162                  1 (const int)
+0:162              Constant:
+0:162                2 (const int)
+0:162            Sequence
+0:162              Constant:
+0:162                0 (const int)
+0:162              Constant:
+0:162                1 (const int)
+0:162          'ballot' ( temp 4-component vector of uint)
+0:163      move second child to first child ( temp 3-component vector of uint)
+0:163        vector swizzle ( temp 3-component vector of uint)
+0:163          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:163            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:163              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:163              'invocation' ( temp uint)
+0:163            Constant:
+0:163              2 (const int)
+0:163          Sequence
+0:163            Constant:
+0:163              0 (const int)
+0:163            Constant:
+0:163              1 (const int)
+0:163            Constant:
+0:163              2 (const int)
+0:163        subgroupPartitionedXorNV ( global 3-component vector of uint)
+0:163          vector swizzle ( temp 3-component vector of uint)
+0:163            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:163              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:163                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:163                Constant:
+0:163                  2 (const int)
+0:163              Constant:
+0:163                2 (const int)
+0:163            Sequence
+0:163              Constant:
+0:163                0 (const int)
+0:163              Constant:
+0:163                1 (const int)
+0:163              Constant:
+0:163                2 (const int)
+0:163          'ballot' ( temp 4-component vector of uint)
+0:164      move second child to first child ( temp 4-component vector of uint)
+0:164        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:164          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164            'invocation' ( temp uint)
+0:164          Constant:
+0:164            2 (const int)
+0:164        subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:164          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:164            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164              Constant:
+0:164                3 (const int)
+0:164            Constant:
+0:164              2 (const int)
+0:164          'ballot' ( temp 4-component vector of uint)
+0:166      move second child to first child ( temp int)
+0:166        direct index ( temp int)
+0:166          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:166            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166              'invocation' ( temp uint)
+0:166            Constant:
+0:166              1 (const int)
+0:166          Constant:
+0:166            0 (const int)
+0:166        Convert bool to int ( temp int)
+0:166          subgroupPartitionedXorNV ( global bool)
+0:166            Compare Less Than ( temp bool)
+0:166              direct index ( temp int)
+0:166                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:166                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166                    Constant:
+0:166                      0 (const int)
+0:166                  Constant:
+0:166                    1 (const int)
+0:166                Constant:
+0:166                  0 (const int)
+0:166              Constant:
+0:166                0 (const int)
+0:166            'ballot' ( temp 4-component vector of uint)
+0:167      move second child to first child ( temp 2-component vector of int)
+0:167        vector swizzle ( temp 2-component vector of int)
+0:167          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:167            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167              'invocation' ( temp uint)
+0:167            Constant:
+0:167              1 (const int)
+0:167          Sequence
+0:167            Constant:
+0:167              0 (const int)
+0:167            Constant:
+0:167              1 (const int)
+0:167        Convert bool to int ( temp 2-component vector of int)
+0:167          subgroupPartitionedXorNV ( global 2-component vector of bool)
+0:167            Compare Less Than ( global 2-component vector of bool)
+0:167              vector swizzle ( temp 2-component vector of int)
+0:167                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:167                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167                    Constant:
+0:167                      1 (const int)
+0:167                  Constant:
+0:167                    1 (const int)
+0:167                Sequence
+0:167                  Constant:
+0:167                    0 (const int)
+0:167                  Constant:
+0:167                    1 (const int)
+0:167              Constant:
+0:167                0 (const int)
+0:167                0 (const int)
+0:167            'ballot' ( temp 4-component vector of uint)
+0:168      move second child to first child ( temp 3-component vector of int)
+0:168        vector swizzle ( temp 3-component vector of int)
+0:168          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:168            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:168              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:168              'invocation' ( temp uint)
+0:168            Constant:
+0:168              1 (const int)
+0:168          Sequence
+0:168            Constant:
+0:168              0 (const int)
+0:168            Constant:
+0:168              1 (const int)
+0:168            Constant:
+0:168              2 (const int)
+0:168        Convert bool to int ( temp 3-component vector of int)
+0:168          subgroupPartitionedXorNV ( global 3-component vector of bool)
+0:168            Compare Less Than ( global 3-component vector of bool)
+0:168              vector swizzle ( temp 3-component vector of int)
+0:168                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:168                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:168                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:168                    Constant:
+0:168                      1 (const int)
+0:168                  Constant:
+0:168                    1 (const int)
+0:168                Sequence
+0:168                  Constant:
+0:168                    0 (const int)
+0:168                  Constant:
+0:168                    1 (const int)
+0:168                  Constant:
+0:168                    2 (const int)
+0:168              Constant:
+0:168                0 (const int)
+0:168                0 (const int)
+0:168                0 (const int)
+0:168            'ballot' ( temp 4-component vector of uint)
+0:169      move second child to first child ( temp 4-component vector of int)
+0:169        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:169          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169            'invocation' ( temp uint)
+0:169          Constant:
+0:169            1 (const int)
+0:169        Convert bool to int ( temp 4-component vector of int)
+0:169          subgroupPartitionedXorNV ( global 4-component vector of bool)
+0:169            Compare Less Than ( global 4-component vector of bool)
+0:169              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:169                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169                  Constant:
+0:169                    1 (const int)
+0:169                Constant:
+0:169                  1 (const int)
+0:169              Constant:
+0:169                0 (const int)
+0:169                0 (const int)
+0:169                0 (const int)
+0:169                0 (const int)
+0:169            'ballot' ( temp 4-component vector of uint)
+0:171      move second child to first child ( temp float)
+0:171        direct index ( temp float)
+0:171          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:171            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171              'invocation' ( temp uint)
+0:171            Constant:
+0:171              0 (const int)
+0:171          Constant:
+0:171            0 (const int)
+0:171        subgroupPartitionedInclusiveAddNV ( global float)
+0:171          direct index ( temp float)
+0:171            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:171              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171                Constant:
+0:171                  0 (const int)
+0:171              Constant:
+0:171                0 (const int)
+0:171            Constant:
+0:171              0 (const int)
+0:171          'ballot' ( temp 4-component vector of uint)
+0:172      move second child to first child ( temp 2-component vector of float)
+0:172        vector swizzle ( temp 2-component vector of float)
+0:172          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:172            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172              'invocation' ( temp uint)
+0:172            Constant:
+0:172              0 (const int)
+0:172          Sequence
+0:172            Constant:
+0:172              0 (const int)
+0:172            Constant:
+0:172              1 (const int)
+0:172        subgroupPartitionedInclusiveAddNV ( global 2-component vector of float)
+0:172          vector swizzle ( temp 2-component vector of float)
+0:172            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:172              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172                Constant:
+0:172                  1 (const int)
+0:172              Constant:
+0:172                0 (const int)
+0:172            Sequence
+0:172              Constant:
+0:172                0 (const int)
+0:172              Constant:
+0:172                1 (const int)
+0:172          'ballot' ( temp 4-component vector of uint)
+0:173      move second child to first child ( temp 3-component vector of float)
+0:173        vector swizzle ( temp 3-component vector of float)
+0:173          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:173            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:173              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:173              'invocation' ( temp uint)
+0:173            Constant:
+0:173              0 (const int)
+0:173          Sequence
+0:173            Constant:
+0:173              0 (const int)
+0:173            Constant:
+0:173              1 (const int)
+0:173            Constant:
+0:173              2 (const int)
+0:173        subgroupPartitionedInclusiveAddNV ( global 3-component vector of float)
+0:173          vector swizzle ( temp 3-component vector of float)
+0:173            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:173              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:173                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:173                Constant:
+0:173                  2 (const int)
+0:173              Constant:
+0:173                0 (const int)
+0:173            Sequence
+0:173              Constant:
+0:173                0 (const int)
+0:173              Constant:
+0:173                1 (const int)
+0:173              Constant:
+0:173                2 (const int)
+0:173          'ballot' ( temp 4-component vector of uint)
+0:174      move second child to first child ( temp 4-component vector of float)
+0:174        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:174          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174            'invocation' ( temp uint)
+0:174          Constant:
+0:174            0 (const int)
+0:174        subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:174          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:174            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174              Constant:
+0:174                3 (const int)
+0:174            Constant:
+0:174              0 (const int)
+0:174          'ballot' ( temp 4-component vector of uint)
+0:176      move second child to first child ( temp int)
+0:176        direct index ( temp int)
+0:176          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:176            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176              'invocation' ( temp uint)
+0:176            Constant:
+0:176              1 (const int)
+0:176          Constant:
+0:176            0 (const int)
+0:176        subgroupPartitionedInclusiveAddNV ( global int)
+0:176          direct index ( temp int)
+0:176            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:176              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176                Constant:
+0:176                  0 (const int)
+0:176              Constant:
+0:176                1 (const int)
+0:176            Constant:
+0:176              0 (const int)
+0:176          'ballot' ( temp 4-component vector of uint)
+0:177      move second child to first child ( temp 2-component vector of int)
+0:177        vector swizzle ( temp 2-component vector of int)
+0:177          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:177            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177              'invocation' ( temp uint)
+0:177            Constant:
+0:177              1 (const int)
+0:177          Sequence
+0:177            Constant:
+0:177              0 (const int)
+0:177            Constant:
+0:177              1 (const int)
+0:177        subgroupPartitionedInclusiveAddNV ( global 2-component vector of int)
+0:177          vector swizzle ( temp 2-component vector of int)
+0:177            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:177              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177                Constant:
+0:177                  1 (const int)
+0:177              Constant:
+0:177                1 (const int)
+0:177            Sequence
+0:177              Constant:
+0:177                0 (const int)
+0:177              Constant:
+0:177                1 (const int)
+0:177          'ballot' ( temp 4-component vector of uint)
+0:178      move second child to first child ( temp 3-component vector of int)
+0:178        vector swizzle ( temp 3-component vector of int)
+0:178          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:178            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:178              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:178              'invocation' ( temp uint)
+0:178            Constant:
+0:178              1 (const int)
+0:178          Sequence
+0:178            Constant:
+0:178              0 (const int)
+0:178            Constant:
+0:178              1 (const int)
+0:178            Constant:
+0:178              2 (const int)
+0:178        subgroupPartitionedInclusiveAddNV ( global 3-component vector of int)
+0:178          vector swizzle ( temp 3-component vector of int)
+0:178            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:178              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:178                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:178                Constant:
+0:178                  2 (const int)
+0:178              Constant:
+0:178                1 (const int)
+0:178            Sequence
+0:178              Constant:
+0:178                0 (const int)
+0:178              Constant:
+0:178                1 (const int)
+0:178              Constant:
+0:178                2 (const int)
+0:178          'ballot' ( temp 4-component vector of uint)
+0:179      move second child to first child ( temp 4-component vector of int)
+0:179        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:179          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179            'invocation' ( temp uint)
+0:179          Constant:
+0:179            1 (const int)
+0:179        subgroupPartitionedInclusiveAddNV ( global 4-component vector of int)
+0:179          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:179            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179              Constant:
+0:179                3 (const int)
+0:179            Constant:
+0:179              1 (const int)
+0:179          'ballot' ( temp 4-component vector of uint)
+0:181      move second child to first child ( temp uint)
+0:181        direct index ( temp uint)
+0:181          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:181            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181              'invocation' ( temp uint)
+0:181            Constant:
+0:181              2 (const int)
+0:181          Constant:
+0:181            0 (const int)
+0:181        subgroupPartitionedInclusiveAddNV ( global uint)
+0:181          direct index ( temp uint)
+0:181            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:181              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181                Constant:
+0:181                  0 (const int)
+0:181              Constant:
+0:181                2 (const int)
+0:181            Constant:
+0:181              0 (const int)
+0:181          'ballot' ( temp 4-component vector of uint)
+0:182      move second child to first child ( temp 2-component vector of uint)
+0:182        vector swizzle ( temp 2-component vector of uint)
+0:182          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:182            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182              'invocation' ( temp uint)
+0:182            Constant:
+0:182              2 (const int)
+0:182          Sequence
+0:182            Constant:
+0:182              0 (const int)
+0:182            Constant:
+0:182              1 (const int)
+0:182        subgroupPartitionedInclusiveAddNV ( global 2-component vector of uint)
+0:182          vector swizzle ( temp 2-component vector of uint)
+0:182            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:182              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182                Constant:
+0:182                  1 (const int)
+0:182              Constant:
+0:182                2 (const int)
+0:182            Sequence
+0:182              Constant:
+0:182                0 (const int)
+0:182              Constant:
+0:182                1 (const int)
+0:182          'ballot' ( temp 4-component vector of uint)
+0:183      move second child to first child ( temp 3-component vector of uint)
+0:183        vector swizzle ( temp 3-component vector of uint)
+0:183          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:183            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:183              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:183              'invocation' ( temp uint)
+0:183            Constant:
+0:183              2 (const int)
+0:183          Sequence
+0:183            Constant:
+0:183              0 (const int)
+0:183            Constant:
+0:183              1 (const int)
+0:183            Constant:
+0:183              2 (const int)
+0:183        subgroupPartitionedInclusiveAddNV ( global 3-component vector of uint)
+0:183          vector swizzle ( temp 3-component vector of uint)
+0:183            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:183              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:183                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:183                Constant:
+0:183                  2 (const int)
+0:183              Constant:
+0:183                2 (const int)
+0:183            Sequence
+0:183              Constant:
+0:183                0 (const int)
+0:183              Constant:
+0:183                1 (const int)
+0:183              Constant:
+0:183                2 (const int)
+0:183          'ballot' ( temp 4-component vector of uint)
+0:184      move second child to first child ( temp 4-component vector of uint)
+0:184        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:184          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184            'invocation' ( temp uint)
+0:184          Constant:
+0:184            2 (const int)
+0:184        subgroupPartitionedInclusiveAddNV ( global 4-component vector of uint)
+0:184          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:184            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184              Constant:
+0:184                3 (const int)
+0:184            Constant:
+0:184              2 (const int)
+0:184          'ballot' ( temp 4-component vector of uint)
+0:186      move second child to first child ( temp double)
+0:186        direct index ( temp double)
+0:186          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:186            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186              'invocation' ( temp uint)
+0:186            Constant:
+0:186              3 (const int)
+0:186          Constant:
+0:186            0 (const int)
+0:186        subgroupPartitionedInclusiveAddNV ( global double)
+0:186          direct index ( temp double)
+0:186            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:186              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186                Constant:
+0:186                  0 (const int)
+0:186              Constant:
+0:186                3 (const int)
+0:186            Constant:
+0:186              0 (const int)
+0:186          'ballot' ( temp 4-component vector of uint)
+0:187      move second child to first child ( temp 2-component vector of double)
+0:187        vector swizzle ( temp 2-component vector of double)
+0:187          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:187            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187              'invocation' ( temp uint)
+0:187            Constant:
+0:187              3 (const int)
+0:187          Sequence
+0:187            Constant:
+0:187              0 (const int)
+0:187            Constant:
+0:187              1 (const int)
+0:187        subgroupPartitionedInclusiveAddNV ( global 2-component vector of double)
+0:187          vector swizzle ( temp 2-component vector of double)
+0:187            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:187              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187                Constant:
+0:187                  1 (const int)
+0:187              Constant:
+0:187                3 (const int)
+0:187            Sequence
+0:187              Constant:
+0:187                0 (const int)
+0:187              Constant:
+0:187                1 (const int)
+0:187          'ballot' ( temp 4-component vector of uint)
+0:188      move second child to first child ( temp 3-component vector of double)
+0:188        vector swizzle ( temp 3-component vector of double)
+0:188          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:188            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:188              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:188              'invocation' ( temp uint)
+0:188            Constant:
+0:188              3 (const int)
+0:188          Sequence
+0:188            Constant:
+0:188              0 (const int)
+0:188            Constant:
+0:188              1 (const int)
+0:188            Constant:
+0:188              2 (const int)
+0:188        subgroupPartitionedInclusiveAddNV ( global 3-component vector of double)
+0:188          vector swizzle ( temp 3-component vector of double)
+0:188            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:188              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:188                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:188                Constant:
+0:188                  2 (const int)
+0:188              Constant:
+0:188                3 (const int)
+0:188            Sequence
+0:188              Constant:
+0:188                0 (const int)
+0:188              Constant:
+0:188                1 (const int)
+0:188              Constant:
+0:188                2 (const int)
+0:188          'ballot' ( temp 4-component vector of uint)
+0:189      move second child to first child ( temp 4-component vector of double)
+0:189        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:189          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189            'invocation' ( temp uint)
+0:189          Constant:
+0:189            3 (const int)
+0:189        subgroupPartitionedInclusiveAddNV ( global 4-component vector of double)
+0:189          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:189            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189              Constant:
+0:189                3 (const int)
+0:189            Constant:
+0:189              3 (const int)
+0:189          'ballot' ( temp 4-component vector of uint)
+0:191      move second child to first child ( temp float)
+0:191        direct index ( temp float)
+0:191          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:191            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191              'invocation' ( temp uint)
+0:191            Constant:
+0:191              0 (const int)
+0:191          Constant:
+0:191            0 (const int)
+0:191        subgroupPartitionedInclusiveMulNV ( global float)
+0:191          direct index ( temp float)
+0:191            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:191              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191                Constant:
+0:191                  0 (const int)
+0:191              Constant:
+0:191                0 (const int)
+0:191            Constant:
+0:191              0 (const int)
+0:191          'ballot' ( temp 4-component vector of uint)
+0:192      move second child to first child ( temp 2-component vector of float)
+0:192        vector swizzle ( temp 2-component vector of float)
+0:192          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:192            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192              'invocation' ( temp uint)
+0:192            Constant:
+0:192              0 (const int)
+0:192          Sequence
+0:192            Constant:
+0:192              0 (const int)
+0:192            Constant:
+0:192              1 (const int)
+0:192        subgroupPartitionedInclusiveMulNV ( global 2-component vector of float)
+0:192          vector swizzle ( temp 2-component vector of float)
+0:192            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:192              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192                Constant:
+0:192                  1 (const int)
+0:192              Constant:
+0:192                0 (const int)
+0:192            Sequence
+0:192              Constant:
+0:192                0 (const int)
+0:192              Constant:
+0:192                1 (const int)
+0:192          'ballot' ( temp 4-component vector of uint)
+0:193      move second child to first child ( temp 3-component vector of float)
+0:193        vector swizzle ( temp 3-component vector of float)
+0:193          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:193            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:193              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:193              'invocation' ( temp uint)
+0:193            Constant:
+0:193              0 (const int)
+0:193          Sequence
+0:193            Constant:
+0:193              0 (const int)
+0:193            Constant:
+0:193              1 (const int)
+0:193            Constant:
+0:193              2 (const int)
+0:193        subgroupPartitionedInclusiveMulNV ( global 3-component vector of float)
+0:193          vector swizzle ( temp 3-component vector of float)
+0:193            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:193              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:193                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:193                Constant:
+0:193                  2 (const int)
+0:193              Constant:
+0:193                0 (const int)
+0:193            Sequence
+0:193              Constant:
+0:193                0 (const int)
+0:193              Constant:
+0:193                1 (const int)
+0:193              Constant:
+0:193                2 (const int)
+0:193          'ballot' ( temp 4-component vector of uint)
+0:194      move second child to first child ( temp 4-component vector of float)
+0:194        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:194          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194            'invocation' ( temp uint)
+0:194          Constant:
+0:194            0 (const int)
+0:194        subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:194          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:194            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194              Constant:
+0:194                3 (const int)
+0:194            Constant:
+0:194              0 (const int)
+0:194          'ballot' ( temp 4-component vector of uint)
+0:196      move second child to first child ( temp int)
+0:196        direct index ( temp int)
+0:196          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:196            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196              'invocation' ( temp uint)
+0:196            Constant:
+0:196              1 (const int)
+0:196          Constant:
+0:196            0 (const int)
+0:196        subgroupPartitionedInclusiveMulNV ( global int)
+0:196          direct index ( temp int)
+0:196            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:196              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196                Constant:
+0:196                  0 (const int)
+0:196              Constant:
+0:196                1 (const int)
+0:196            Constant:
+0:196              0 (const int)
+0:196          'ballot' ( temp 4-component vector of uint)
+0:197      move second child to first child ( temp 2-component vector of int)
+0:197        vector swizzle ( temp 2-component vector of int)
+0:197          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:197            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197              'invocation' ( temp uint)
+0:197            Constant:
+0:197              1 (const int)
+0:197          Sequence
+0:197            Constant:
+0:197              0 (const int)
+0:197            Constant:
+0:197              1 (const int)
+0:197        subgroupPartitionedInclusiveMulNV ( global 2-component vector of int)
+0:197          vector swizzle ( temp 2-component vector of int)
+0:197            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:197              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197                Constant:
+0:197                  1 (const int)
+0:197              Constant:
+0:197                1 (const int)
+0:197            Sequence
+0:197              Constant:
+0:197                0 (const int)
+0:197              Constant:
+0:197                1 (const int)
+0:197          'ballot' ( temp 4-component vector of uint)
+0:198      move second child to first child ( temp 3-component vector of int)
+0:198        vector swizzle ( temp 3-component vector of int)
+0:198          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:198            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:198              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:198              'invocation' ( temp uint)
+0:198            Constant:
+0:198              1 (const int)
+0:198          Sequence
+0:198            Constant:
+0:198              0 (const int)
+0:198            Constant:
+0:198              1 (const int)
+0:198            Constant:
+0:198              2 (const int)
+0:198        subgroupPartitionedInclusiveMulNV ( global 3-component vector of int)
+0:198          vector swizzle ( temp 3-component vector of int)
+0:198            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:198              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:198                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:198                Constant:
+0:198                  2 (const int)
+0:198              Constant:
+0:198                1 (const int)
+0:198            Sequence
+0:198              Constant:
+0:198                0 (const int)
+0:198              Constant:
+0:198                1 (const int)
+0:198              Constant:
+0:198                2 (const int)
+0:198          'ballot' ( temp 4-component vector of uint)
+0:199      move second child to first child ( temp 4-component vector of int)
+0:199        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:199          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199            'invocation' ( temp uint)
+0:199          Constant:
+0:199            1 (const int)
+0:199        subgroupPartitionedInclusiveMulNV ( global 4-component vector of int)
+0:199          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:199            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199              Constant:
+0:199                3 (const int)
+0:199            Constant:
+0:199              1 (const int)
+0:199          'ballot' ( temp 4-component vector of uint)
+0:201      move second child to first child ( temp uint)
+0:201        direct index ( temp uint)
+0:201          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:201            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201              'invocation' ( temp uint)
+0:201            Constant:
+0:201              2 (const int)
+0:201          Constant:
+0:201            0 (const int)
+0:201        subgroupPartitionedInclusiveMulNV ( global uint)
+0:201          direct index ( temp uint)
+0:201            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:201              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201                Constant:
+0:201                  0 (const int)
+0:201              Constant:
+0:201                2 (const int)
+0:201            Constant:
+0:201              0 (const int)
+0:201          'ballot' ( temp 4-component vector of uint)
+0:202      move second child to first child ( temp 2-component vector of uint)
+0:202        vector swizzle ( temp 2-component vector of uint)
+0:202          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:202            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202              'invocation' ( temp uint)
+0:202            Constant:
+0:202              2 (const int)
+0:202          Sequence
+0:202            Constant:
+0:202              0 (const int)
+0:202            Constant:
+0:202              1 (const int)
+0:202        subgroupPartitionedInclusiveMulNV ( global 2-component vector of uint)
+0:202          vector swizzle ( temp 2-component vector of uint)
+0:202            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:202              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202                Constant:
+0:202                  1 (const int)
+0:202              Constant:
+0:202                2 (const int)
+0:202            Sequence
+0:202              Constant:
+0:202                0 (const int)
+0:202              Constant:
+0:202                1 (const int)
+0:202          'ballot' ( temp 4-component vector of uint)
+0:203      move second child to first child ( temp 3-component vector of uint)
+0:203        vector swizzle ( temp 3-component vector of uint)
+0:203          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:203            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:203              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:203              'invocation' ( temp uint)
+0:203            Constant:
+0:203              2 (const int)
+0:203          Sequence
+0:203            Constant:
+0:203              0 (const int)
+0:203            Constant:
+0:203              1 (const int)
+0:203            Constant:
+0:203              2 (const int)
+0:203        subgroupPartitionedInclusiveMulNV ( global 3-component vector of uint)
+0:203          vector swizzle ( temp 3-component vector of uint)
+0:203            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:203              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:203                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:203                Constant:
+0:203                  2 (const int)
+0:203              Constant:
+0:203                2 (const int)
+0:203            Sequence
+0:203              Constant:
+0:203                0 (const int)
+0:203              Constant:
+0:203                1 (const int)
+0:203              Constant:
+0:203                2 (const int)
+0:203          'ballot' ( temp 4-component vector of uint)
+0:204      move second child to first child ( temp 4-component vector of uint)
+0:204        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:204          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204            'invocation' ( temp uint)
+0:204          Constant:
+0:204            2 (const int)
+0:204        subgroupPartitionedInclusiveMulNV ( global 4-component vector of uint)
+0:204          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:204            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204              Constant:
+0:204                3 (const int)
+0:204            Constant:
+0:204              2 (const int)
+0:204          'ballot' ( temp 4-component vector of uint)
+0:206      move second child to first child ( temp double)
+0:206        direct index ( temp double)
+0:206          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:206            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206              'invocation' ( temp uint)
+0:206            Constant:
+0:206              3 (const int)
+0:206          Constant:
+0:206            0 (const int)
+0:206        subgroupPartitionedInclusiveMulNV ( global double)
+0:206          direct index ( temp double)
+0:206            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:206              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206                Constant:
+0:206                  0 (const int)
+0:206              Constant:
+0:206                3 (const int)
+0:206            Constant:
+0:206              0 (const int)
+0:206          'ballot' ( temp 4-component vector of uint)
+0:207      move second child to first child ( temp 2-component vector of double)
+0:207        vector swizzle ( temp 2-component vector of double)
+0:207          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:207            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207              'invocation' ( temp uint)
+0:207            Constant:
+0:207              3 (const int)
+0:207          Sequence
+0:207            Constant:
+0:207              0 (const int)
+0:207            Constant:
+0:207              1 (const int)
+0:207        subgroupPartitionedInclusiveMulNV ( global 2-component vector of double)
+0:207          vector swizzle ( temp 2-component vector of double)
+0:207            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:207              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207                Constant:
+0:207                  1 (const int)
+0:207              Constant:
+0:207                3 (const int)
+0:207            Sequence
+0:207              Constant:
+0:207                0 (const int)
+0:207              Constant:
+0:207                1 (const int)
+0:207          'ballot' ( temp 4-component vector of uint)
+0:208      move second child to first child ( temp 3-component vector of double)
+0:208        vector swizzle ( temp 3-component vector of double)
+0:208          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:208            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:208              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:208              'invocation' ( temp uint)
+0:208            Constant:
+0:208              3 (const int)
+0:208          Sequence
+0:208            Constant:
+0:208              0 (const int)
+0:208            Constant:
+0:208              1 (const int)
+0:208            Constant:
+0:208              2 (const int)
+0:208        subgroupPartitionedInclusiveMulNV ( global 3-component vector of double)
+0:208          vector swizzle ( temp 3-component vector of double)
+0:208            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:208              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:208                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:208                Constant:
+0:208                  2 (const int)
+0:208              Constant:
+0:208                3 (const int)
+0:208            Sequence
+0:208              Constant:
+0:208                0 (const int)
+0:208              Constant:
+0:208                1 (const int)
+0:208              Constant:
+0:208                2 (const int)
+0:208          'ballot' ( temp 4-component vector of uint)
+0:209      move second child to first child ( temp 4-component vector of double)
+0:209        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:209          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209            'invocation' ( temp uint)
+0:209          Constant:
+0:209            3 (const int)
+0:209        subgroupPartitionedInclusiveMulNV ( global 4-component vector of double)
+0:209          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:209            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209              Constant:
+0:209                3 (const int)
+0:209            Constant:
+0:209              3 (const int)
+0:209          'ballot' ( temp 4-component vector of uint)
+0:211      move second child to first child ( temp float)
+0:211        direct index ( temp float)
+0:211          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:211            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211              'invocation' ( temp uint)
+0:211            Constant:
+0:211              0 (const int)
+0:211          Constant:
+0:211            0 (const int)
+0:211        subgroupPartitionedInclusiveMinNV ( global float)
+0:211          direct index ( temp float)
+0:211            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:211              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211                Constant:
+0:211                  0 (const int)
+0:211              Constant:
+0:211                0 (const int)
+0:211            Constant:
+0:211              0 (const int)
+0:211          'ballot' ( temp 4-component vector of uint)
+0:212      move second child to first child ( temp 2-component vector of float)
+0:212        vector swizzle ( temp 2-component vector of float)
+0:212          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:212            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212              'invocation' ( temp uint)
+0:212            Constant:
+0:212              0 (const int)
+0:212          Sequence
+0:212            Constant:
+0:212              0 (const int)
+0:212            Constant:
+0:212              1 (const int)
+0:212        subgroupPartitionedInclusiveMinNV ( global 2-component vector of float)
+0:212          vector swizzle ( temp 2-component vector of float)
+0:212            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:212              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212                Constant:
+0:212                  1 (const int)
+0:212              Constant:
+0:212                0 (const int)
+0:212            Sequence
+0:212              Constant:
+0:212                0 (const int)
+0:212              Constant:
+0:212                1 (const int)
+0:212          'ballot' ( temp 4-component vector of uint)
+0:213      move second child to first child ( temp 3-component vector of float)
+0:213        vector swizzle ( temp 3-component vector of float)
+0:213          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:213            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:213              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:213              'invocation' ( temp uint)
+0:213            Constant:
+0:213              0 (const int)
+0:213          Sequence
+0:213            Constant:
+0:213              0 (const int)
+0:213            Constant:
+0:213              1 (const int)
+0:213            Constant:
+0:213              2 (const int)
+0:213        subgroupPartitionedInclusiveMinNV ( global 3-component vector of float)
+0:213          vector swizzle ( temp 3-component vector of float)
+0:213            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:213              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:213                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:213                Constant:
+0:213                  2 (const int)
+0:213              Constant:
+0:213                0 (const int)
+0:213            Sequence
+0:213              Constant:
+0:213                0 (const int)
+0:213              Constant:
+0:213                1 (const int)
+0:213              Constant:
+0:213                2 (const int)
+0:213          'ballot' ( temp 4-component vector of uint)
+0:214      move second child to first child ( temp 4-component vector of float)
+0:214        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:214          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214            'invocation' ( temp uint)
+0:214          Constant:
+0:214            0 (const int)
+0:214        subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:214          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:214            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214              Constant:
+0:214                3 (const int)
+0:214            Constant:
+0:214              0 (const int)
+0:214          'ballot' ( temp 4-component vector of uint)
+0:216      move second child to first child ( temp int)
+0:216        direct index ( temp int)
+0:216          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:216            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216              'invocation' ( temp uint)
+0:216            Constant:
+0:216              1 (const int)
+0:216          Constant:
+0:216            0 (const int)
+0:216        subgroupPartitionedInclusiveMinNV ( global int)
+0:216          direct index ( temp int)
+0:216            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:216              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216                Constant:
+0:216                  0 (const int)
+0:216              Constant:
+0:216                1 (const int)
+0:216            Constant:
+0:216              0 (const int)
+0:216          'ballot' ( temp 4-component vector of uint)
+0:217      move second child to first child ( temp 2-component vector of int)
+0:217        vector swizzle ( temp 2-component vector of int)
+0:217          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:217            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217              'invocation' ( temp uint)
+0:217            Constant:
+0:217              1 (const int)
+0:217          Sequence
+0:217            Constant:
+0:217              0 (const int)
+0:217            Constant:
+0:217              1 (const int)
+0:217        subgroupPartitionedInclusiveMinNV ( global 2-component vector of int)
+0:217          vector swizzle ( temp 2-component vector of int)
+0:217            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:217              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217                Constant:
+0:217                  1 (const int)
+0:217              Constant:
+0:217                1 (const int)
+0:217            Sequence
+0:217              Constant:
+0:217                0 (const int)
+0:217              Constant:
+0:217                1 (const int)
+0:217          'ballot' ( temp 4-component vector of uint)
+0:218      move second child to first child ( temp 3-component vector of int)
+0:218        vector swizzle ( temp 3-component vector of int)
+0:218          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:218            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:218              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:218              'invocation' ( temp uint)
+0:218            Constant:
+0:218              1 (const int)
+0:218          Sequence
+0:218            Constant:
+0:218              0 (const int)
+0:218            Constant:
+0:218              1 (const int)
+0:218            Constant:
+0:218              2 (const int)
+0:218        subgroupPartitionedInclusiveMinNV ( global 3-component vector of int)
+0:218          vector swizzle ( temp 3-component vector of int)
+0:218            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:218              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:218                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:218                Constant:
+0:218                  2 (const int)
+0:218              Constant:
+0:218                1 (const int)
+0:218            Sequence
+0:218              Constant:
+0:218                0 (const int)
+0:218              Constant:
+0:218                1 (const int)
+0:218              Constant:
+0:218                2 (const int)
+0:218          'ballot' ( temp 4-component vector of uint)
+0:219      move second child to first child ( temp 4-component vector of int)
+0:219        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:219          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219            'invocation' ( temp uint)
+0:219          Constant:
+0:219            1 (const int)
+0:219        subgroupPartitionedInclusiveMinNV ( global 4-component vector of int)
+0:219          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:219            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219              Constant:
+0:219                3 (const int)
+0:219            Constant:
+0:219              1 (const int)
+0:219          'ballot' ( temp 4-component vector of uint)
+0:221      move second child to first child ( temp uint)
+0:221        direct index ( temp uint)
+0:221          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:221            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221              'invocation' ( temp uint)
+0:221            Constant:
+0:221              2 (const int)
+0:221          Constant:
+0:221            0 (const int)
+0:221        subgroupPartitionedInclusiveMinNV ( global uint)
+0:221          direct index ( temp uint)
+0:221            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:221              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221                Constant:
+0:221                  0 (const int)
+0:221              Constant:
+0:221                2 (const int)
+0:221            Constant:
+0:221              0 (const int)
+0:221          'ballot' ( temp 4-component vector of uint)
+0:222      move second child to first child ( temp 2-component vector of uint)
+0:222        vector swizzle ( temp 2-component vector of uint)
+0:222          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:222            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222              'invocation' ( temp uint)
+0:222            Constant:
+0:222              2 (const int)
+0:222          Sequence
+0:222            Constant:
+0:222              0 (const int)
+0:222            Constant:
+0:222              1 (const int)
+0:222        subgroupPartitionedInclusiveMinNV ( global 2-component vector of uint)
+0:222          vector swizzle ( temp 2-component vector of uint)
+0:222            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:222              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222                Constant:
+0:222                  1 (const int)
+0:222              Constant:
+0:222                2 (const int)
+0:222            Sequence
+0:222              Constant:
+0:222                0 (const int)
+0:222              Constant:
+0:222                1 (const int)
+0:222          'ballot' ( temp 4-component vector of uint)
+0:223      move second child to first child ( temp 3-component vector of uint)
+0:223        vector swizzle ( temp 3-component vector of uint)
+0:223          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:223            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:223              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:223              'invocation' ( temp uint)
+0:223            Constant:
+0:223              2 (const int)
+0:223          Sequence
+0:223            Constant:
+0:223              0 (const int)
+0:223            Constant:
+0:223              1 (const int)
+0:223            Constant:
+0:223              2 (const int)
+0:223        subgroupPartitionedInclusiveMinNV ( global 3-component vector of uint)
+0:223          vector swizzle ( temp 3-component vector of uint)
+0:223            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:223              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:223                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:223                Constant:
+0:223                  2 (const int)
+0:223              Constant:
+0:223                2 (const int)
+0:223            Sequence
+0:223              Constant:
+0:223                0 (const int)
+0:223              Constant:
+0:223                1 (const int)
+0:223              Constant:
+0:223                2 (const int)
+0:223          'ballot' ( temp 4-component vector of uint)
+0:224      move second child to first child ( temp 4-component vector of uint)
+0:224        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:224          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224            'invocation' ( temp uint)
+0:224          Constant:
+0:224            2 (const int)
+0:224        subgroupPartitionedInclusiveMinNV ( global 4-component vector of uint)
+0:224          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:224            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224              Constant:
+0:224                3 (const int)
+0:224            Constant:
+0:224              2 (const int)
+0:224          'ballot' ( temp 4-component vector of uint)
+0:226      move second child to first child ( temp double)
+0:226        direct index ( temp double)
+0:226          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:226            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226              'invocation' ( temp uint)
+0:226            Constant:
+0:226              3 (const int)
+0:226          Constant:
+0:226            0 (const int)
+0:226        subgroupPartitionedInclusiveMinNV ( global double)
+0:226          direct index ( temp double)
+0:226            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:226              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226                Constant:
+0:226                  0 (const int)
+0:226              Constant:
+0:226                3 (const int)
+0:226            Constant:
+0:226              0 (const int)
+0:226          'ballot' ( temp 4-component vector of uint)
+0:227      move second child to first child ( temp 2-component vector of double)
+0:227        vector swizzle ( temp 2-component vector of double)
+0:227          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:227            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227              'invocation' ( temp uint)
+0:227            Constant:
+0:227              3 (const int)
+0:227          Sequence
+0:227            Constant:
+0:227              0 (const int)
+0:227            Constant:
+0:227              1 (const int)
+0:227        subgroupPartitionedInclusiveMinNV ( global 2-component vector of double)
+0:227          vector swizzle ( temp 2-component vector of double)
+0:227            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:227              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227                Constant:
+0:227                  1 (const int)
+0:227              Constant:
+0:227                3 (const int)
+0:227            Sequence
+0:227              Constant:
+0:227                0 (const int)
+0:227              Constant:
+0:227                1 (const int)
+0:227          'ballot' ( temp 4-component vector of uint)
+0:228      move second child to first child ( temp 3-component vector of double)
+0:228        vector swizzle ( temp 3-component vector of double)
+0:228          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:228            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:228              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:228              'invocation' ( temp uint)
+0:228            Constant:
+0:228              3 (const int)
+0:228          Sequence
+0:228            Constant:
+0:228              0 (const int)
+0:228            Constant:
+0:228              1 (const int)
+0:228            Constant:
+0:228              2 (const int)
+0:228        subgroupPartitionedInclusiveMinNV ( global 3-component vector of double)
+0:228          vector swizzle ( temp 3-component vector of double)
+0:228            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:228              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:228                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:228                Constant:
+0:228                  2 (const int)
+0:228              Constant:
+0:228                3 (const int)
+0:228            Sequence
+0:228              Constant:
+0:228                0 (const int)
+0:228              Constant:
+0:228                1 (const int)
+0:228              Constant:
+0:228                2 (const int)
+0:228          'ballot' ( temp 4-component vector of uint)
+0:229      move second child to first child ( temp 4-component vector of double)
+0:229        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:229          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229            'invocation' ( temp uint)
+0:229          Constant:
+0:229            3 (const int)
+0:229        subgroupPartitionedInclusiveMinNV ( global 4-component vector of double)
+0:229          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:229            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229              Constant:
+0:229                3 (const int)
+0:229            Constant:
+0:229              3 (const int)
+0:229          'ballot' ( temp 4-component vector of uint)
+0:231      move second child to first child ( temp float)
+0:231        direct index ( temp float)
+0:231          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:231            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231              'invocation' ( temp uint)
+0:231            Constant:
+0:231              0 (const int)
+0:231          Constant:
+0:231            0 (const int)
+0:231        subgroupPartitionedInclusiveMaxNV ( global float)
+0:231          direct index ( temp float)
+0:231            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:231              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231                Constant:
+0:231                  0 (const int)
+0:231              Constant:
+0:231                0 (const int)
+0:231            Constant:
+0:231              0 (const int)
+0:231          'ballot' ( temp 4-component vector of uint)
+0:232      move second child to first child ( temp 2-component vector of float)
+0:232        vector swizzle ( temp 2-component vector of float)
+0:232          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:232            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232              'invocation' ( temp uint)
+0:232            Constant:
+0:232              0 (const int)
+0:232          Sequence
+0:232            Constant:
+0:232              0 (const int)
+0:232            Constant:
+0:232              1 (const int)
+0:232        subgroupPartitionedInclusiveMaxNV ( global 2-component vector of float)
+0:232          vector swizzle ( temp 2-component vector of float)
+0:232            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:232              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232                Constant:
+0:232                  1 (const int)
+0:232              Constant:
+0:232                0 (const int)
+0:232            Sequence
+0:232              Constant:
+0:232                0 (const int)
+0:232              Constant:
+0:232                1 (const int)
+0:232          'ballot' ( temp 4-component vector of uint)
+0:233      move second child to first child ( temp 3-component vector of float)
+0:233        vector swizzle ( temp 3-component vector of float)
+0:233          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:233            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:233              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:233              'invocation' ( temp uint)
+0:233            Constant:
+0:233              0 (const int)
+0:233          Sequence
+0:233            Constant:
+0:233              0 (const int)
+0:233            Constant:
+0:233              1 (const int)
+0:233            Constant:
+0:233              2 (const int)
+0:233        subgroupPartitionedInclusiveMaxNV ( global 3-component vector of float)
+0:233          vector swizzle ( temp 3-component vector of float)
+0:233            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:233              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:233                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:233                Constant:
+0:233                  2 (const int)
+0:233              Constant:
+0:233                0 (const int)
+0:233            Sequence
+0:233              Constant:
+0:233                0 (const int)
+0:233              Constant:
+0:233                1 (const int)
+0:233              Constant:
+0:233                2 (const int)
+0:233          'ballot' ( temp 4-component vector of uint)
+0:234      move second child to first child ( temp 4-component vector of float)
+0:234        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:234          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234            'invocation' ( temp uint)
+0:234          Constant:
+0:234            0 (const int)
+0:234        subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:234          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:234            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234              Constant:
+0:234                3 (const int)
+0:234            Constant:
+0:234              0 (const int)
+0:234          'ballot' ( temp 4-component vector of uint)
+0:236      move second child to first child ( temp int)
+0:236        direct index ( temp int)
+0:236          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:236            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236              'invocation' ( temp uint)
+0:236            Constant:
+0:236              1 (const int)
+0:236          Constant:
+0:236            0 (const int)
+0:236        subgroupPartitionedInclusiveMaxNV ( global int)
+0:236          direct index ( temp int)
+0:236            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:236              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236                Constant:
+0:236                  0 (const int)
+0:236              Constant:
+0:236                1 (const int)
+0:236            Constant:
+0:236              0 (const int)
+0:236          'ballot' ( temp 4-component vector of uint)
+0:237      move second child to first child ( temp 2-component vector of int)
+0:237        vector swizzle ( temp 2-component vector of int)
+0:237          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:237            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237              'invocation' ( temp uint)
+0:237            Constant:
+0:237              1 (const int)
+0:237          Sequence
+0:237            Constant:
+0:237              0 (const int)
+0:237            Constant:
+0:237              1 (const int)
+0:237        subgroupPartitionedInclusiveMaxNV ( global 2-component vector of int)
+0:237          vector swizzle ( temp 2-component vector of int)
+0:237            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:237              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237                Constant:
+0:237                  1 (const int)
+0:237              Constant:
+0:237                1 (const int)
+0:237            Sequence
+0:237              Constant:
+0:237                0 (const int)
+0:237              Constant:
+0:237                1 (const int)
+0:237          'ballot' ( temp 4-component vector of uint)
+0:238      move second child to first child ( temp 3-component vector of int)
+0:238        vector swizzle ( temp 3-component vector of int)
+0:238          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:238            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:238              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:238              'invocation' ( temp uint)
+0:238            Constant:
+0:238              1 (const int)
+0:238          Sequence
+0:238            Constant:
+0:238              0 (const int)
+0:238            Constant:
+0:238              1 (const int)
+0:238            Constant:
+0:238              2 (const int)
+0:238        subgroupPartitionedInclusiveMaxNV ( global 3-component vector of int)
+0:238          vector swizzle ( temp 3-component vector of int)
+0:238            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:238              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:238                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:238                Constant:
+0:238                  2 (const int)
+0:238              Constant:
+0:238                1 (const int)
+0:238            Sequence
+0:238              Constant:
+0:238                0 (const int)
+0:238              Constant:
+0:238                1 (const int)
+0:238              Constant:
+0:238                2 (const int)
+0:238          'ballot' ( temp 4-component vector of uint)
+0:239      move second child to first child ( temp 4-component vector of int)
+0:239        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:239          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239            'invocation' ( temp uint)
+0:239          Constant:
+0:239            1 (const int)
+0:239        subgroupPartitionedInclusiveMaxNV ( global 4-component vector of int)
+0:239          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:239            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239              Constant:
+0:239                3 (const int)
+0:239            Constant:
+0:239              1 (const int)
+0:239          'ballot' ( temp 4-component vector of uint)
+0:241      move second child to first child ( temp uint)
+0:241        direct index ( temp uint)
+0:241          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:241            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241              'invocation' ( temp uint)
+0:241            Constant:
+0:241              2 (const int)
+0:241          Constant:
+0:241            0 (const int)
+0:241        subgroupPartitionedInclusiveMaxNV ( global uint)
+0:241          direct index ( temp uint)
+0:241            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:241              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241                Constant:
+0:241                  0 (const int)
+0:241              Constant:
+0:241                2 (const int)
+0:241            Constant:
+0:241              0 (const int)
+0:241          'ballot' ( temp 4-component vector of uint)
+0:242      move second child to first child ( temp 2-component vector of uint)
+0:242        vector swizzle ( temp 2-component vector of uint)
+0:242          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:242            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242              'invocation' ( temp uint)
+0:242            Constant:
+0:242              2 (const int)
+0:242          Sequence
+0:242            Constant:
+0:242              0 (const int)
+0:242            Constant:
+0:242              1 (const int)
+0:242        subgroupPartitionedInclusiveMaxNV ( global 2-component vector of uint)
+0:242          vector swizzle ( temp 2-component vector of uint)
+0:242            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:242              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242                Constant:
+0:242                  1 (const int)
+0:242              Constant:
+0:242                2 (const int)
+0:242            Sequence
+0:242              Constant:
+0:242                0 (const int)
+0:242              Constant:
+0:242                1 (const int)
+0:242          'ballot' ( temp 4-component vector of uint)
+0:243      move second child to first child ( temp 3-component vector of uint)
+0:243        vector swizzle ( temp 3-component vector of uint)
+0:243          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:243            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:243              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:243              'invocation' ( temp uint)
+0:243            Constant:
+0:243              2 (const int)
+0:243          Sequence
+0:243            Constant:
+0:243              0 (const int)
+0:243            Constant:
+0:243              1 (const int)
+0:243            Constant:
+0:243              2 (const int)
+0:243        subgroupPartitionedInclusiveMaxNV ( global 3-component vector of uint)
+0:243          vector swizzle ( temp 3-component vector of uint)
+0:243            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:243              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:243                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:243                Constant:
+0:243                  2 (const int)
+0:243              Constant:
+0:243                2 (const int)
+0:243            Sequence
+0:243              Constant:
+0:243                0 (const int)
+0:243              Constant:
+0:243                1 (const int)
+0:243              Constant:
+0:243                2 (const int)
+0:243          'ballot' ( temp 4-component vector of uint)
+0:244      move second child to first child ( temp 4-component vector of uint)
+0:244        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:244          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244            'invocation' ( temp uint)
+0:244          Constant:
+0:244            2 (const int)
+0:244        subgroupPartitionedInclusiveMaxNV ( global 4-component vector of uint)
+0:244          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:244            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244              Constant:
+0:244                3 (const int)
+0:244            Constant:
+0:244              2 (const int)
+0:244          'ballot' ( temp 4-component vector of uint)
+0:246      move second child to first child ( temp double)
+0:246        direct index ( temp double)
+0:246          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:246            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246              'invocation' ( temp uint)
+0:246            Constant:
+0:246              3 (const int)
+0:246          Constant:
+0:246            0 (const int)
+0:246        subgroupPartitionedInclusiveMaxNV ( global double)
+0:246          direct index ( temp double)
+0:246            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:246              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246                Constant:
+0:246                  0 (const int)
+0:246              Constant:
+0:246                3 (const int)
+0:246            Constant:
+0:246              0 (const int)
+0:246          'ballot' ( temp 4-component vector of uint)
+0:247      move second child to first child ( temp 2-component vector of double)
+0:247        vector swizzle ( temp 2-component vector of double)
+0:247          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:247            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247              'invocation' ( temp uint)
+0:247            Constant:
+0:247              3 (const int)
+0:247          Sequence
+0:247            Constant:
+0:247              0 (const int)
+0:247            Constant:
+0:247              1 (const int)
+0:247        subgroupPartitionedInclusiveMaxNV ( global 2-component vector of double)
+0:247          vector swizzle ( temp 2-component vector of double)
+0:247            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:247              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247                Constant:
+0:247                  1 (const int)
+0:247              Constant:
+0:247                3 (const int)
+0:247            Sequence
+0:247              Constant:
+0:247                0 (const int)
+0:247              Constant:
+0:247                1 (const int)
+0:247          'ballot' ( temp 4-component vector of uint)
+0:248      move second child to first child ( temp 3-component vector of double)
+0:248        vector swizzle ( temp 3-component vector of double)
+0:248          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:248            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:248              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:248              'invocation' ( temp uint)
+0:248            Constant:
+0:248              3 (const int)
+0:248          Sequence
+0:248            Constant:
+0:248              0 (const int)
+0:248            Constant:
+0:248              1 (const int)
+0:248            Constant:
+0:248              2 (const int)
+0:248        subgroupPartitionedInclusiveMaxNV ( global 3-component vector of double)
+0:248          vector swizzle ( temp 3-component vector of double)
+0:248            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:248              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:248                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:248                Constant:
+0:248                  2 (const int)
+0:248              Constant:
+0:248                3 (const int)
+0:248            Sequence
+0:248              Constant:
+0:248                0 (const int)
+0:248              Constant:
+0:248                1 (const int)
+0:248              Constant:
+0:248                2 (const int)
+0:248          'ballot' ( temp 4-component vector of uint)
+0:249      move second child to first child ( temp 4-component vector of double)
+0:249        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:249          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249            'invocation' ( temp uint)
+0:249          Constant:
+0:249            3 (const int)
+0:249        subgroupPartitionedInclusiveMaxNV ( global 4-component vector of double)
+0:249          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:249            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249              Constant:
+0:249                3 (const int)
+0:249            Constant:
+0:249              3 (const int)
+0:249          'ballot' ( temp 4-component vector of uint)
+0:251      move second child to first child ( temp int)
+0:251        direct index ( temp int)
+0:251          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:251            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251              'invocation' ( temp uint)
+0:251            Constant:
+0:251              1 (const int)
+0:251          Constant:
+0:251            0 (const int)
+0:251        subgroupPartitionedInclusiveAndNV ( global int)
+0:251          direct index ( temp int)
+0:251            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:251              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251                Constant:
+0:251                  0 (const int)
+0:251              Constant:
+0:251                1 (const int)
+0:251            Constant:
+0:251              0 (const int)
+0:251          'ballot' ( temp 4-component vector of uint)
+0:252      move second child to first child ( temp 2-component vector of int)
+0:252        vector swizzle ( temp 2-component vector of int)
+0:252          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:252            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252              'invocation' ( temp uint)
+0:252            Constant:
+0:252              1 (const int)
+0:252          Sequence
+0:252            Constant:
+0:252              0 (const int)
+0:252            Constant:
+0:252              1 (const int)
+0:252        subgroupPartitionedInclusiveAndNV ( global 2-component vector of int)
+0:252          vector swizzle ( temp 2-component vector of int)
+0:252            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:252              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252                Constant:
+0:252                  1 (const int)
+0:252              Constant:
+0:252                1 (const int)
+0:252            Sequence
+0:252              Constant:
+0:252                0 (const int)
+0:252              Constant:
+0:252                1 (const int)
+0:252          'ballot' ( temp 4-component vector of uint)
+0:253      move second child to first child ( temp 3-component vector of int)
+0:253        vector swizzle ( temp 3-component vector of int)
+0:253          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:253            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:253              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:253              'invocation' ( temp uint)
+0:253            Constant:
+0:253              1 (const int)
+0:253          Sequence
+0:253            Constant:
+0:253              0 (const int)
+0:253            Constant:
+0:253              1 (const int)
+0:253            Constant:
+0:253              2 (const int)
+0:253        subgroupPartitionedInclusiveAndNV ( global 3-component vector of int)
+0:253          vector swizzle ( temp 3-component vector of int)
+0:253            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:253              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:253                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:253                Constant:
+0:253                  2 (const int)
+0:253              Constant:
+0:253                1 (const int)
+0:253            Sequence
+0:253              Constant:
+0:253                0 (const int)
+0:253              Constant:
+0:253                1 (const int)
+0:253              Constant:
+0:253                2 (const int)
+0:253          'ballot' ( temp 4-component vector of uint)
+0:254      move second child to first child ( temp 4-component vector of int)
+0:254        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:254          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254            'invocation' ( temp uint)
+0:254          Constant:
+0:254            1 (const int)
+0:254        subgroupPartitionedInclusiveAndNV ( global 4-component vector of int)
+0:254          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:254            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254              Constant:
+0:254                3 (const int)
+0:254            Constant:
+0:254              1 (const int)
+0:254          'ballot' ( temp 4-component vector of uint)
+0:256      move second child to first child ( temp uint)
+0:256        direct index ( temp uint)
+0:256          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:256            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256              'invocation' ( temp uint)
+0:256            Constant:
+0:256              2 (const int)
+0:256          Constant:
+0:256            0 (const int)
+0:256        subgroupPartitionedInclusiveAndNV ( global uint)
+0:256          direct index ( temp uint)
+0:256            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:256              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256                Constant:
+0:256                  0 (const int)
+0:256              Constant:
+0:256                2 (const int)
+0:256            Constant:
+0:256              0 (const int)
+0:256          'ballot' ( temp 4-component vector of uint)
+0:257      move second child to first child ( temp 2-component vector of uint)
+0:257        vector swizzle ( temp 2-component vector of uint)
+0:257          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:257            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257              'invocation' ( temp uint)
+0:257            Constant:
+0:257              2 (const int)
+0:257          Sequence
+0:257            Constant:
+0:257              0 (const int)
+0:257            Constant:
+0:257              1 (const int)
+0:257        subgroupPartitionedInclusiveAndNV ( global 2-component vector of uint)
+0:257          vector swizzle ( temp 2-component vector of uint)
+0:257            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:257              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257                Constant:
+0:257                  1 (const int)
+0:257              Constant:
+0:257                2 (const int)
+0:257            Sequence
+0:257              Constant:
+0:257                0 (const int)
+0:257              Constant:
+0:257                1 (const int)
+0:257          'ballot' ( temp 4-component vector of uint)
+0:258      move second child to first child ( temp 3-component vector of uint)
+0:258        vector swizzle ( temp 3-component vector of uint)
+0:258          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:258            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:258              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:258              'invocation' ( temp uint)
+0:258            Constant:
+0:258              2 (const int)
+0:258          Sequence
+0:258            Constant:
+0:258              0 (const int)
+0:258            Constant:
+0:258              1 (const int)
+0:258            Constant:
+0:258              2 (const int)
+0:258        subgroupPartitionedInclusiveAndNV ( global 3-component vector of uint)
+0:258          vector swizzle ( temp 3-component vector of uint)
+0:258            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:258              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:258                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:258                Constant:
+0:258                  2 (const int)
+0:258              Constant:
+0:258                2 (const int)
+0:258            Sequence
+0:258              Constant:
+0:258                0 (const int)
+0:258              Constant:
+0:258                1 (const int)
+0:258              Constant:
+0:258                2 (const int)
+0:258          'ballot' ( temp 4-component vector of uint)
+0:259      move second child to first child ( temp 4-component vector of uint)
+0:259        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:259          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259            'invocation' ( temp uint)
+0:259          Constant:
+0:259            2 (const int)
+0:259        subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:259          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:259            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259              Constant:
+0:259                3 (const int)
+0:259            Constant:
+0:259              2 (const int)
+0:259          'ballot' ( temp 4-component vector of uint)
+0:261      move second child to first child ( temp int)
+0:261        direct index ( temp int)
+0:261          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:261            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261              'invocation' ( temp uint)
+0:261            Constant:
+0:261              1 (const int)
+0:261          Constant:
+0:261            0 (const int)
+0:261        Convert bool to int ( temp int)
+0:261          subgroupPartitionedInclusiveAndNV ( global bool)
+0:261            Compare Less Than ( temp bool)
+0:261              direct index ( temp int)
+0:261                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:261                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261                    Constant:
+0:261                      0 (const int)
+0:261                  Constant:
+0:261                    1 (const int)
+0:261                Constant:
+0:261                  0 (const int)
+0:261              Constant:
+0:261                0 (const int)
+0:261            'ballot' ( temp 4-component vector of uint)
+0:262      move second child to first child ( temp 2-component vector of int)
+0:262        vector swizzle ( temp 2-component vector of int)
+0:262          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:262            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262              'invocation' ( temp uint)
+0:262            Constant:
+0:262              1 (const int)
+0:262          Sequence
+0:262            Constant:
+0:262              0 (const int)
+0:262            Constant:
+0:262              1 (const int)
+0:262        Convert bool to int ( temp 2-component vector of int)
+0:262          subgroupPartitionedInclusiveAndNV ( global 2-component vector of bool)
+0:262            Compare Less Than ( global 2-component vector of bool)
+0:262              vector swizzle ( temp 2-component vector of int)
+0:262                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:262                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262                    Constant:
+0:262                      1 (const int)
+0:262                  Constant:
+0:262                    1 (const int)
+0:262                Sequence
+0:262                  Constant:
+0:262                    0 (const int)
+0:262                  Constant:
+0:262                    1 (const int)
+0:262              Constant:
+0:262                0 (const int)
+0:262                0 (const int)
+0:262            'ballot' ( temp 4-component vector of uint)
+0:263      move second child to first child ( temp 3-component vector of int)
+0:263        vector swizzle ( temp 3-component vector of int)
+0:263          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:263            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:263              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:263              'invocation' ( temp uint)
+0:263            Constant:
+0:263              1 (const int)
+0:263          Sequence
+0:263            Constant:
+0:263              0 (const int)
+0:263            Constant:
+0:263              1 (const int)
+0:263            Constant:
+0:263              2 (const int)
+0:263        Convert bool to int ( temp 3-component vector of int)
+0:263          subgroupPartitionedInclusiveAndNV ( global 3-component vector of bool)
+0:263            Compare Less Than ( global 3-component vector of bool)
+0:263              vector swizzle ( temp 3-component vector of int)
+0:263                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:263                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:263                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:263                    Constant:
+0:263                      1 (const int)
+0:263                  Constant:
+0:263                    1 (const int)
+0:263                Sequence
+0:263                  Constant:
+0:263                    0 (const int)
+0:263                  Constant:
+0:263                    1 (const int)
+0:263                  Constant:
+0:263                    2 (const int)
+0:263              Constant:
+0:263                0 (const int)
+0:263                0 (const int)
+0:263                0 (const int)
+0:263            'ballot' ( temp 4-component vector of uint)
+0:264      move second child to first child ( temp 4-component vector of int)
+0:264        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:264          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264            'invocation' ( temp uint)
+0:264          Constant:
+0:264            1 (const int)
+0:264        Convert bool to int ( temp 4-component vector of int)
+0:264          subgroupPartitionedInclusiveAndNV ( global 4-component vector of bool)
+0:264            Compare Less Than ( global 4-component vector of bool)
+0:264              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:264                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264                  Constant:
+0:264                    1 (const int)
+0:264                Constant:
+0:264                  1 (const int)
+0:264              Constant:
+0:264                0 (const int)
+0:264                0 (const int)
+0:264                0 (const int)
+0:264                0 (const int)
+0:264            'ballot' ( temp 4-component vector of uint)
+0:266      move second child to first child ( temp int)
+0:266        direct index ( temp int)
+0:266          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:266            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266              'invocation' ( temp uint)
+0:266            Constant:
+0:266              1 (const int)
+0:266          Constant:
+0:266            0 (const int)
+0:266        subgroupPartitionedInclusiveOrNV ( global int)
+0:266          direct index ( temp int)
+0:266            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:266              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266                Constant:
+0:266                  0 (const int)
+0:266              Constant:
+0:266                1 (const int)
+0:266            Constant:
+0:266              0 (const int)
+0:266          'ballot' ( temp 4-component vector of uint)
+0:267      move second child to first child ( temp 2-component vector of int)
+0:267        vector swizzle ( temp 2-component vector of int)
+0:267          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:267            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267              'invocation' ( temp uint)
+0:267            Constant:
+0:267              1 (const int)
+0:267          Sequence
+0:267            Constant:
+0:267              0 (const int)
+0:267            Constant:
+0:267              1 (const int)
+0:267        subgroupPartitionedInclusiveOrNV ( global 2-component vector of int)
+0:267          vector swizzle ( temp 2-component vector of int)
+0:267            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:267              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267                Constant:
+0:267                  1 (const int)
+0:267              Constant:
+0:267                1 (const int)
+0:267            Sequence
+0:267              Constant:
+0:267                0 (const int)
+0:267              Constant:
+0:267                1 (const int)
+0:267          'ballot' ( temp 4-component vector of uint)
+0:268      move second child to first child ( temp 3-component vector of int)
+0:268        vector swizzle ( temp 3-component vector of int)
+0:268          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:268            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:268              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:268              'invocation' ( temp uint)
+0:268            Constant:
+0:268              1 (const int)
+0:268          Sequence
+0:268            Constant:
+0:268              0 (const int)
+0:268            Constant:
+0:268              1 (const int)
+0:268            Constant:
+0:268              2 (const int)
+0:268        subgroupPartitionedInclusiveOrNV ( global 3-component vector of int)
+0:268          vector swizzle ( temp 3-component vector of int)
+0:268            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:268              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:268                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:268                Constant:
+0:268                  2 (const int)
+0:268              Constant:
+0:268                1 (const int)
+0:268            Sequence
+0:268              Constant:
+0:268                0 (const int)
+0:268              Constant:
+0:268                1 (const int)
+0:268              Constant:
+0:268                2 (const int)
+0:268          'ballot' ( temp 4-component vector of uint)
+0:269      move second child to first child ( temp 4-component vector of int)
+0:269        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:269          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269            'invocation' ( temp uint)
+0:269          Constant:
+0:269            1 (const int)
+0:269        subgroupPartitionedInclusiveOrNV ( global 4-component vector of int)
+0:269          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:269            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269              Constant:
+0:269                3 (const int)
+0:269            Constant:
+0:269              1 (const int)
+0:269          'ballot' ( temp 4-component vector of uint)
+0:271      move second child to first child ( temp uint)
+0:271        direct index ( temp uint)
+0:271          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:271            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271              'invocation' ( temp uint)
+0:271            Constant:
+0:271              2 (const int)
+0:271          Constant:
+0:271            0 (const int)
+0:271        subgroupPartitionedInclusiveOrNV ( global uint)
+0:271          direct index ( temp uint)
+0:271            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:271              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271                Constant:
+0:271                  0 (const int)
+0:271              Constant:
+0:271                2 (const int)
+0:271            Constant:
+0:271              0 (const int)
+0:271          'ballot' ( temp 4-component vector of uint)
+0:272      move second child to first child ( temp 2-component vector of uint)
+0:272        vector swizzle ( temp 2-component vector of uint)
+0:272          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:272            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272              'invocation' ( temp uint)
+0:272            Constant:
+0:272              2 (const int)
+0:272          Sequence
+0:272            Constant:
+0:272              0 (const int)
+0:272            Constant:
+0:272              1 (const int)
+0:272        subgroupPartitionedInclusiveOrNV ( global 2-component vector of uint)
+0:272          vector swizzle ( temp 2-component vector of uint)
+0:272            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:272              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272                Constant:
+0:272                  1 (const int)
+0:272              Constant:
+0:272                2 (const int)
+0:272            Sequence
+0:272              Constant:
+0:272                0 (const int)
+0:272              Constant:
+0:272                1 (const int)
+0:272          'ballot' ( temp 4-component vector of uint)
+0:273      move second child to first child ( temp 3-component vector of uint)
+0:273        vector swizzle ( temp 3-component vector of uint)
+0:273          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:273            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:273              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:273              'invocation' ( temp uint)
+0:273            Constant:
+0:273              2 (const int)
+0:273          Sequence
+0:273            Constant:
+0:273              0 (const int)
+0:273            Constant:
+0:273              1 (const int)
+0:273            Constant:
+0:273              2 (const int)
+0:273        subgroupPartitionedInclusiveOrNV ( global 3-component vector of uint)
+0:273          vector swizzle ( temp 3-component vector of uint)
+0:273            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:273              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:273                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:273                Constant:
+0:273                  2 (const int)
+0:273              Constant:
+0:273                2 (const int)
+0:273            Sequence
+0:273              Constant:
+0:273                0 (const int)
+0:273              Constant:
+0:273                1 (const int)
+0:273              Constant:
+0:273                2 (const int)
+0:273          'ballot' ( temp 4-component vector of uint)
+0:274      move second child to first child ( temp 4-component vector of uint)
+0:274        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:274          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274            'invocation' ( temp uint)
+0:274          Constant:
+0:274            2 (const int)
+0:274        subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:274          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:274            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274              Constant:
+0:274                3 (const int)
+0:274            Constant:
+0:274              2 (const int)
+0:274          'ballot' ( temp 4-component vector of uint)
+0:276      move second child to first child ( temp int)
+0:276        direct index ( temp int)
+0:276          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:276            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276              'invocation' ( temp uint)
+0:276            Constant:
+0:276              1 (const int)
+0:276          Constant:
+0:276            0 (const int)
+0:276        Convert bool to int ( temp int)
+0:276          subgroupPartitionedInclusiveOrNV ( global bool)
+0:276            Compare Less Than ( temp bool)
+0:276              direct index ( temp int)
+0:276                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:276                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276                    Constant:
+0:276                      0 (const int)
+0:276                  Constant:
+0:276                    1 (const int)
+0:276                Constant:
+0:276                  0 (const int)
+0:276              Constant:
+0:276                0 (const int)
+0:276            'ballot' ( temp 4-component vector of uint)
+0:277      move second child to first child ( temp 2-component vector of int)
+0:277        vector swizzle ( temp 2-component vector of int)
+0:277          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:277            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277              'invocation' ( temp uint)
+0:277            Constant:
+0:277              1 (const int)
+0:277          Sequence
+0:277            Constant:
+0:277              0 (const int)
+0:277            Constant:
+0:277              1 (const int)
+0:277        Convert bool to int ( temp 2-component vector of int)
+0:277          subgroupPartitionedInclusiveOrNV ( global 2-component vector of bool)
+0:277            Compare Less Than ( global 2-component vector of bool)
+0:277              vector swizzle ( temp 2-component vector of int)
+0:277                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:277                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277                    Constant:
+0:277                      1 (const int)
+0:277                  Constant:
+0:277                    1 (const int)
+0:277                Sequence
+0:277                  Constant:
+0:277                    0 (const int)
+0:277                  Constant:
+0:277                    1 (const int)
+0:277              Constant:
+0:277                0 (const int)
+0:277                0 (const int)
+0:277            'ballot' ( temp 4-component vector of uint)
+0:278      move second child to first child ( temp 3-component vector of int)
+0:278        vector swizzle ( temp 3-component vector of int)
+0:278          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:278            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:278              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:278              'invocation' ( temp uint)
+0:278            Constant:
+0:278              1 (const int)
+0:278          Sequence
+0:278            Constant:
+0:278              0 (const int)
+0:278            Constant:
+0:278              1 (const int)
+0:278            Constant:
+0:278              2 (const int)
+0:278        Convert bool to int ( temp 3-component vector of int)
+0:278          subgroupPartitionedInclusiveOrNV ( global 3-component vector of bool)
+0:278            Compare Less Than ( global 3-component vector of bool)
+0:278              vector swizzle ( temp 3-component vector of int)
+0:278                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:278                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:278                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:278                    Constant:
+0:278                      1 (const int)
+0:278                  Constant:
+0:278                    1 (const int)
+0:278                Sequence
+0:278                  Constant:
+0:278                    0 (const int)
+0:278                  Constant:
+0:278                    1 (const int)
+0:278                  Constant:
+0:278                    2 (const int)
+0:278              Constant:
+0:278                0 (const int)
+0:278                0 (const int)
+0:278                0 (const int)
+0:278            'ballot' ( temp 4-component vector of uint)
+0:279      move second child to first child ( temp 4-component vector of int)
+0:279        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:279          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279            'invocation' ( temp uint)
+0:279          Constant:
+0:279            1 (const int)
+0:279        Convert bool to int ( temp 4-component vector of int)
+0:279          subgroupPartitionedInclusiveOrNV ( global 4-component vector of bool)
+0:279            Compare Less Than ( global 4-component vector of bool)
+0:279              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:279                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279                  Constant:
+0:279                    1 (const int)
+0:279                Constant:
+0:279                  1 (const int)
+0:279              Constant:
+0:279                0 (const int)
+0:279                0 (const int)
+0:279                0 (const int)
+0:279                0 (const int)
+0:279            'ballot' ( temp 4-component vector of uint)
+0:281      move second child to first child ( temp int)
+0:281        direct index ( temp int)
+0:281          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:281            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281              'invocation' ( temp uint)
+0:281            Constant:
+0:281              1 (const int)
+0:281          Constant:
+0:281            0 (const int)
+0:281        subgroupPartitionedInclusiveXorNV ( global int)
+0:281          direct index ( temp int)
+0:281            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:281              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281                Constant:
+0:281                  0 (const int)
+0:281              Constant:
+0:281                1 (const int)
+0:281            Constant:
+0:281              0 (const int)
+0:281          'ballot' ( temp 4-component vector of uint)
+0:282      move second child to first child ( temp 2-component vector of int)
+0:282        vector swizzle ( temp 2-component vector of int)
+0:282          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:282            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282              'invocation' ( temp uint)
+0:282            Constant:
+0:282              1 (const int)
+0:282          Sequence
+0:282            Constant:
+0:282              0 (const int)
+0:282            Constant:
+0:282              1 (const int)
+0:282        subgroupPartitionedInclusiveXorNV ( global 2-component vector of int)
+0:282          vector swizzle ( temp 2-component vector of int)
+0:282            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:282              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282                Constant:
+0:282                  1 (const int)
+0:282              Constant:
+0:282                1 (const int)
+0:282            Sequence
+0:282              Constant:
+0:282                0 (const int)
+0:282              Constant:
+0:282                1 (const int)
+0:282          'ballot' ( temp 4-component vector of uint)
+0:283      move second child to first child ( temp 3-component vector of int)
+0:283        vector swizzle ( temp 3-component vector of int)
+0:283          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:283            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:283              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:283              'invocation' ( temp uint)
+0:283            Constant:
+0:283              1 (const int)
+0:283          Sequence
+0:283            Constant:
+0:283              0 (const int)
+0:283            Constant:
+0:283              1 (const int)
+0:283            Constant:
+0:283              2 (const int)
+0:283        subgroupPartitionedInclusiveXorNV ( global 3-component vector of int)
+0:283          vector swizzle ( temp 3-component vector of int)
+0:283            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:283              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:283                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:283                Constant:
+0:283                  2 (const int)
+0:283              Constant:
+0:283                1 (const int)
+0:283            Sequence
+0:283              Constant:
+0:283                0 (const int)
+0:283              Constant:
+0:283                1 (const int)
+0:283              Constant:
+0:283                2 (const int)
+0:283          'ballot' ( temp 4-component vector of uint)
+0:284      move second child to first child ( temp 4-component vector of int)
+0:284        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:284          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284            'invocation' ( temp uint)
+0:284          Constant:
+0:284            1 (const int)
+0:284        subgroupPartitionedInclusiveXorNV ( global 4-component vector of int)
+0:284          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:284            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284              Constant:
+0:284                3 (const int)
+0:284            Constant:
+0:284              1 (const int)
+0:284          'ballot' ( temp 4-component vector of uint)
+0:286      move second child to first child ( temp uint)
+0:286        direct index ( temp uint)
+0:286          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:286            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286              'invocation' ( temp uint)
+0:286            Constant:
+0:286              2 (const int)
+0:286          Constant:
+0:286            0 (const int)
+0:286        subgroupPartitionedInclusiveXorNV ( global uint)
+0:286          direct index ( temp uint)
+0:286            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:286              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286                Constant:
+0:286                  0 (const int)
+0:286              Constant:
+0:286                2 (const int)
+0:286            Constant:
+0:286              0 (const int)
+0:286          'ballot' ( temp 4-component vector of uint)
+0:287      move second child to first child ( temp 2-component vector of uint)
+0:287        vector swizzle ( temp 2-component vector of uint)
+0:287          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:287            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287              'invocation' ( temp uint)
+0:287            Constant:
+0:287              2 (const int)
+0:287          Sequence
+0:287            Constant:
+0:287              0 (const int)
+0:287            Constant:
+0:287              1 (const int)
+0:287        subgroupPartitionedInclusiveXorNV ( global 2-component vector of uint)
+0:287          vector swizzle ( temp 2-component vector of uint)
+0:287            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:287              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287                Constant:
+0:287                  1 (const int)
+0:287              Constant:
+0:287                2 (const int)
+0:287            Sequence
+0:287              Constant:
+0:287                0 (const int)
+0:287              Constant:
+0:287                1 (const int)
+0:287          'ballot' ( temp 4-component vector of uint)
+0:288      move second child to first child ( temp 3-component vector of uint)
+0:288        vector swizzle ( temp 3-component vector of uint)
+0:288          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:288            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:288              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:288              'invocation' ( temp uint)
+0:288            Constant:
+0:288              2 (const int)
+0:288          Sequence
+0:288            Constant:
+0:288              0 (const int)
+0:288            Constant:
+0:288              1 (const int)
+0:288            Constant:
+0:288              2 (const int)
+0:288        subgroupPartitionedInclusiveXorNV ( global 3-component vector of uint)
+0:288          vector swizzle ( temp 3-component vector of uint)
+0:288            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:288              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:288                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:288                Constant:
+0:288                  2 (const int)
+0:288              Constant:
+0:288                2 (const int)
+0:288            Sequence
+0:288              Constant:
+0:288                0 (const int)
+0:288              Constant:
+0:288                1 (const int)
+0:288              Constant:
+0:288                2 (const int)
+0:288          'ballot' ( temp 4-component vector of uint)
+0:289      move second child to first child ( temp 4-component vector of uint)
+0:289        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:289          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289            'invocation' ( temp uint)
+0:289          Constant:
+0:289            2 (const int)
+0:289        subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:289          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:289            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289              Constant:
+0:289                3 (const int)
+0:289            Constant:
+0:289              2 (const int)
+0:289          'ballot' ( temp 4-component vector of uint)
+0:291      move second child to first child ( temp int)
+0:291        direct index ( temp int)
+0:291          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:291            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291              'invocation' ( temp uint)
+0:291            Constant:
+0:291              1 (const int)
+0:291          Constant:
+0:291            0 (const int)
+0:291        Convert bool to int ( temp int)
+0:291          subgroupPartitionedInclusiveXorNV ( global bool)
+0:291            Compare Less Than ( temp bool)
+0:291              direct index ( temp int)
+0:291                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:291                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291                    Constant:
+0:291                      0 (const int)
+0:291                  Constant:
+0:291                    1 (const int)
+0:291                Constant:
+0:291                  0 (const int)
+0:291              Constant:
+0:291                0 (const int)
+0:291            'ballot' ( temp 4-component vector of uint)
+0:292      move second child to first child ( temp 2-component vector of int)
+0:292        vector swizzle ( temp 2-component vector of int)
+0:292          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:292            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292              'invocation' ( temp uint)
+0:292            Constant:
+0:292              1 (const int)
+0:292          Sequence
+0:292            Constant:
+0:292              0 (const int)
+0:292            Constant:
+0:292              1 (const int)
+0:292        Convert bool to int ( temp 2-component vector of int)
+0:292          subgroupPartitionedInclusiveXorNV ( global 2-component vector of bool)
+0:292            Compare Less Than ( global 2-component vector of bool)
+0:292              vector swizzle ( temp 2-component vector of int)
+0:292                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:292                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292                    Constant:
+0:292                      1 (const int)
+0:292                  Constant:
+0:292                    1 (const int)
+0:292                Sequence
+0:292                  Constant:
+0:292                    0 (const int)
+0:292                  Constant:
+0:292                    1 (const int)
+0:292              Constant:
+0:292                0 (const int)
+0:292                0 (const int)
+0:292            'ballot' ( temp 4-component vector of uint)
+0:293      move second child to first child ( temp 3-component vector of int)
+0:293        vector swizzle ( temp 3-component vector of int)
+0:293          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:293            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:293              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:293              'invocation' ( temp uint)
+0:293            Constant:
+0:293              1 (const int)
+0:293          Sequence
+0:293            Constant:
+0:293              0 (const int)
+0:293            Constant:
+0:293              1 (const int)
+0:293            Constant:
+0:293              2 (const int)
+0:293        Convert bool to int ( temp 3-component vector of int)
+0:293          subgroupPartitionedInclusiveXorNV ( global 3-component vector of bool)
+0:293            Compare Less Than ( global 3-component vector of bool)
+0:293              vector swizzle ( temp 3-component vector of int)
+0:293                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:293                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:293                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:293                    Constant:
+0:293                      1 (const int)
+0:293                  Constant:
+0:293                    1 (const int)
+0:293                Sequence
+0:293                  Constant:
+0:293                    0 (const int)
+0:293                  Constant:
+0:293                    1 (const int)
+0:293                  Constant:
+0:293                    2 (const int)
+0:293              Constant:
+0:293                0 (const int)
+0:293                0 (const int)
+0:293                0 (const int)
+0:293            'ballot' ( temp 4-component vector of uint)
+0:294      move second child to first child ( temp 4-component vector of int)
+0:294        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:294          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294            'invocation' ( temp uint)
+0:294          Constant:
+0:294            1 (const int)
+0:294        Convert bool to int ( temp 4-component vector of int)
+0:294          subgroupPartitionedInclusiveXorNV ( global 4-component vector of bool)
+0:294            Compare Less Than ( global 4-component vector of bool)
+0:294              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:294                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294                  Constant:
+0:294                    1 (const int)
+0:294                Constant:
+0:294                  1 (const int)
+0:294              Constant:
+0:294                0 (const int)
+0:294                0 (const int)
+0:294                0 (const int)
+0:294                0 (const int)
+0:294            'ballot' ( temp 4-component vector of uint)
+0:296      move second child to first child ( temp float)
+0:296        direct index ( temp float)
+0:296          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:296            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296              'invocation' ( temp uint)
+0:296            Constant:
+0:296              0 (const int)
+0:296          Constant:
+0:296            0 (const int)
+0:296        subgroupPartitionedExclusiveAddNV ( global float)
+0:296          direct index ( temp float)
+0:296            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:296              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296                Constant:
+0:296                  0 (const int)
+0:296              Constant:
+0:296                0 (const int)
+0:296            Constant:
+0:296              0 (const int)
+0:296          'ballot' ( temp 4-component vector of uint)
+0:297      move second child to first child ( temp 2-component vector of float)
+0:297        vector swizzle ( temp 2-component vector of float)
+0:297          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:297            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297              'invocation' ( temp uint)
+0:297            Constant:
+0:297              0 (const int)
+0:297          Sequence
+0:297            Constant:
+0:297              0 (const int)
+0:297            Constant:
+0:297              1 (const int)
+0:297        subgroupPartitionedExclusiveAddNV ( global 2-component vector of float)
+0:297          vector swizzle ( temp 2-component vector of float)
+0:297            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:297              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297                Constant:
+0:297                  1 (const int)
+0:297              Constant:
+0:297                0 (const int)
+0:297            Sequence
+0:297              Constant:
+0:297                0 (const int)
+0:297              Constant:
+0:297                1 (const int)
+0:297          'ballot' ( temp 4-component vector of uint)
+0:298      move second child to first child ( temp 3-component vector of float)
+0:298        vector swizzle ( temp 3-component vector of float)
+0:298          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:298            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:298              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:298              'invocation' ( temp uint)
+0:298            Constant:
+0:298              0 (const int)
+0:298          Sequence
+0:298            Constant:
+0:298              0 (const int)
+0:298            Constant:
+0:298              1 (const int)
+0:298            Constant:
+0:298              2 (const int)
+0:298        subgroupPartitionedExclusiveAddNV ( global 3-component vector of float)
+0:298          vector swizzle ( temp 3-component vector of float)
+0:298            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:298              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:298                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:298                Constant:
+0:298                  2 (const int)
+0:298              Constant:
+0:298                0 (const int)
+0:298            Sequence
+0:298              Constant:
+0:298                0 (const int)
+0:298              Constant:
+0:298                1 (const int)
+0:298              Constant:
+0:298                2 (const int)
+0:298          'ballot' ( temp 4-component vector of uint)
+0:299      move second child to first child ( temp 4-component vector of float)
+0:299        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:299          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299            'invocation' ( temp uint)
+0:299          Constant:
+0:299            0 (const int)
+0:299        subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:299          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:299            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299              Constant:
+0:299                3 (const int)
+0:299            Constant:
+0:299              0 (const int)
+0:299          'ballot' ( temp 4-component vector of uint)
+0:301      move second child to first child ( temp int)
+0:301        direct index ( temp int)
+0:301          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:301            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301              'invocation' ( temp uint)
+0:301            Constant:
+0:301              1 (const int)
+0:301          Constant:
+0:301            0 (const int)
+0:301        subgroupPartitionedExclusiveAddNV ( global int)
+0:301          direct index ( temp int)
+0:301            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:301              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301                Constant:
+0:301                  0 (const int)
+0:301              Constant:
+0:301                1 (const int)
+0:301            Constant:
+0:301              0 (const int)
+0:301          'ballot' ( temp 4-component vector of uint)
+0:302      move second child to first child ( temp 2-component vector of int)
+0:302        vector swizzle ( temp 2-component vector of int)
+0:302          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:302            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302              'invocation' ( temp uint)
+0:302            Constant:
+0:302              1 (const int)
+0:302          Sequence
+0:302            Constant:
+0:302              0 (const int)
+0:302            Constant:
+0:302              1 (const int)
+0:302        subgroupPartitionedExclusiveAddNV ( global 2-component vector of int)
+0:302          vector swizzle ( temp 2-component vector of int)
+0:302            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:302              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302                Constant:
+0:302                  1 (const int)
+0:302              Constant:
+0:302                1 (const int)
+0:302            Sequence
+0:302              Constant:
+0:302                0 (const int)
+0:302              Constant:
+0:302                1 (const int)
+0:302          'ballot' ( temp 4-component vector of uint)
+0:303      move second child to first child ( temp 3-component vector of int)
+0:303        vector swizzle ( temp 3-component vector of int)
+0:303          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:303            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:303              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:303              'invocation' ( temp uint)
+0:303            Constant:
+0:303              1 (const int)
+0:303          Sequence
+0:303            Constant:
+0:303              0 (const int)
+0:303            Constant:
+0:303              1 (const int)
+0:303            Constant:
+0:303              2 (const int)
+0:303        subgroupPartitionedExclusiveAddNV ( global 3-component vector of int)
+0:303          vector swizzle ( temp 3-component vector of int)
+0:303            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:303              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:303                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:303                Constant:
+0:303                  2 (const int)
+0:303              Constant:
+0:303                1 (const int)
+0:303            Sequence
+0:303              Constant:
+0:303                0 (const int)
+0:303              Constant:
+0:303                1 (const int)
+0:303              Constant:
+0:303                2 (const int)
+0:303          'ballot' ( temp 4-component vector of uint)
+0:304      move second child to first child ( temp 4-component vector of int)
+0:304        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:304          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304            'invocation' ( temp uint)
+0:304          Constant:
+0:304            1 (const int)
+0:304        subgroupPartitionedExclusiveAddNV ( global 4-component vector of int)
+0:304          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:304            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304              Constant:
+0:304                3 (const int)
+0:304            Constant:
+0:304              1 (const int)
+0:304          'ballot' ( temp 4-component vector of uint)
+0:306      move second child to first child ( temp uint)
+0:306        direct index ( temp uint)
+0:306          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:306            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306              'invocation' ( temp uint)
+0:306            Constant:
+0:306              2 (const int)
+0:306          Constant:
+0:306            0 (const int)
+0:306        subgroupPartitionedExclusiveAddNV ( global uint)
+0:306          direct index ( temp uint)
+0:306            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:306              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306                Constant:
+0:306                  0 (const int)
+0:306              Constant:
+0:306                2 (const int)
+0:306            Constant:
+0:306              0 (const int)
+0:306          'ballot' ( temp 4-component vector of uint)
+0:307      move second child to first child ( temp 2-component vector of uint)
+0:307        vector swizzle ( temp 2-component vector of uint)
+0:307          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:307            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307              'invocation' ( temp uint)
+0:307            Constant:
+0:307              2 (const int)
+0:307          Sequence
+0:307            Constant:
+0:307              0 (const int)
+0:307            Constant:
+0:307              1 (const int)
+0:307        subgroupPartitionedExclusiveAddNV ( global 2-component vector of uint)
+0:307          vector swizzle ( temp 2-component vector of uint)
+0:307            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:307              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307                Constant:
+0:307                  1 (const int)
+0:307              Constant:
+0:307                2 (const int)
+0:307            Sequence
+0:307              Constant:
+0:307                0 (const int)
+0:307              Constant:
+0:307                1 (const int)
+0:307          'ballot' ( temp 4-component vector of uint)
+0:308      move second child to first child ( temp 3-component vector of uint)
+0:308        vector swizzle ( temp 3-component vector of uint)
+0:308          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:308            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:308              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:308              'invocation' ( temp uint)
+0:308            Constant:
+0:308              2 (const int)
+0:308          Sequence
+0:308            Constant:
+0:308              0 (const int)
+0:308            Constant:
+0:308              1 (const int)
+0:308            Constant:
+0:308              2 (const int)
+0:308        subgroupPartitionedExclusiveAddNV ( global 3-component vector of uint)
+0:308          vector swizzle ( temp 3-component vector of uint)
+0:308            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:308              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:308                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:308                Constant:
+0:308                  2 (const int)
+0:308              Constant:
+0:308                2 (const int)
+0:308            Sequence
+0:308              Constant:
+0:308                0 (const int)
+0:308              Constant:
+0:308                1 (const int)
+0:308              Constant:
+0:308                2 (const int)
+0:308          'ballot' ( temp 4-component vector of uint)
+0:309      move second child to first child ( temp 4-component vector of uint)
+0:309        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:309          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309            'invocation' ( temp uint)
+0:309          Constant:
+0:309            2 (const int)
+0:309        subgroupPartitionedExclusiveAddNV ( global 4-component vector of uint)
+0:309          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:309            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309              Constant:
+0:309                3 (const int)
+0:309            Constant:
+0:309              2 (const int)
+0:309          'ballot' ( temp 4-component vector of uint)
+0:311      move second child to first child ( temp double)
+0:311        direct index ( temp double)
+0:311          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:311            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311              'invocation' ( temp uint)
+0:311            Constant:
+0:311              3 (const int)
+0:311          Constant:
+0:311            0 (const int)
+0:311        subgroupPartitionedExclusiveAddNV ( global double)
+0:311          direct index ( temp double)
+0:311            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:311              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311                Constant:
+0:311                  0 (const int)
+0:311              Constant:
+0:311                3 (const int)
+0:311            Constant:
+0:311              0 (const int)
+0:311          'ballot' ( temp 4-component vector of uint)
+0:312      move second child to first child ( temp 2-component vector of double)
+0:312        vector swizzle ( temp 2-component vector of double)
+0:312          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:312            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312              'invocation' ( temp uint)
+0:312            Constant:
+0:312              3 (const int)
+0:312          Sequence
+0:312            Constant:
+0:312              0 (const int)
+0:312            Constant:
+0:312              1 (const int)
+0:312        subgroupPartitionedExclusiveAddNV ( global 2-component vector of double)
+0:312          vector swizzle ( temp 2-component vector of double)
+0:312            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:312              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312                Constant:
+0:312                  1 (const int)
+0:312              Constant:
+0:312                3 (const int)
+0:312            Sequence
+0:312              Constant:
+0:312                0 (const int)
+0:312              Constant:
+0:312                1 (const int)
+0:312          'ballot' ( temp 4-component vector of uint)
+0:313      move second child to first child ( temp 3-component vector of double)
+0:313        vector swizzle ( temp 3-component vector of double)
+0:313          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:313            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:313              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:313              'invocation' ( temp uint)
+0:313            Constant:
+0:313              3 (const int)
+0:313          Sequence
+0:313            Constant:
+0:313              0 (const int)
+0:313            Constant:
+0:313              1 (const int)
+0:313            Constant:
+0:313              2 (const int)
+0:313        subgroupPartitionedExclusiveAddNV ( global 3-component vector of double)
+0:313          vector swizzle ( temp 3-component vector of double)
+0:313            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:313              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:313                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:313                Constant:
+0:313                  2 (const int)
+0:313              Constant:
+0:313                3 (const int)
+0:313            Sequence
+0:313              Constant:
+0:313                0 (const int)
+0:313              Constant:
+0:313                1 (const int)
+0:313              Constant:
+0:313                2 (const int)
+0:313          'ballot' ( temp 4-component vector of uint)
+0:314      move second child to first child ( temp 4-component vector of double)
+0:314        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:314          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314            'invocation' ( temp uint)
+0:314          Constant:
+0:314            3 (const int)
+0:314        subgroupPartitionedExclusiveAddNV ( global 4-component vector of double)
+0:314          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:314            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314              Constant:
+0:314                3 (const int)
+0:314            Constant:
+0:314              3 (const int)
+0:314          'ballot' ( temp 4-component vector of uint)
+0:316      move second child to first child ( temp float)
+0:316        direct index ( temp float)
+0:316          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:316            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316              'invocation' ( temp uint)
+0:316            Constant:
+0:316              0 (const int)
+0:316          Constant:
+0:316            0 (const int)
+0:316        subgroupPartitionedExclusiveMulNV ( global float)
+0:316          direct index ( temp float)
+0:316            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:316              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316                Constant:
+0:316                  0 (const int)
+0:316              Constant:
+0:316                0 (const int)
+0:316            Constant:
+0:316              0 (const int)
+0:316          'ballot' ( temp 4-component vector of uint)
+0:317      move second child to first child ( temp 2-component vector of float)
+0:317        vector swizzle ( temp 2-component vector of float)
+0:317          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:317            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317              'invocation' ( temp uint)
+0:317            Constant:
+0:317              0 (const int)
+0:317          Sequence
+0:317            Constant:
+0:317              0 (const int)
+0:317            Constant:
+0:317              1 (const int)
+0:317        subgroupPartitionedExclusiveMulNV ( global 2-component vector of float)
+0:317          vector swizzle ( temp 2-component vector of float)
+0:317            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:317              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317                Constant:
+0:317                  1 (const int)
+0:317              Constant:
+0:317                0 (const int)
+0:317            Sequence
+0:317              Constant:
+0:317                0 (const int)
+0:317              Constant:
+0:317                1 (const int)
+0:317          'ballot' ( temp 4-component vector of uint)
+0:318      move second child to first child ( temp 3-component vector of float)
+0:318        vector swizzle ( temp 3-component vector of float)
+0:318          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:318            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:318              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:318              'invocation' ( temp uint)
+0:318            Constant:
+0:318              0 (const int)
+0:318          Sequence
+0:318            Constant:
+0:318              0 (const int)
+0:318            Constant:
+0:318              1 (const int)
+0:318            Constant:
+0:318              2 (const int)
+0:318        subgroupPartitionedExclusiveMulNV ( global 3-component vector of float)
+0:318          vector swizzle ( temp 3-component vector of float)
+0:318            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:318              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:318                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:318                Constant:
+0:318                  2 (const int)
+0:318              Constant:
+0:318                0 (const int)
+0:318            Sequence
+0:318              Constant:
+0:318                0 (const int)
+0:318              Constant:
+0:318                1 (const int)
+0:318              Constant:
+0:318                2 (const int)
+0:318          'ballot' ( temp 4-component vector of uint)
+0:319      move second child to first child ( temp 4-component vector of float)
+0:319        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:319          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319            'invocation' ( temp uint)
+0:319          Constant:
+0:319            0 (const int)
+0:319        subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:319          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:319            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319              Constant:
+0:319                3 (const int)
+0:319            Constant:
+0:319              0 (const int)
+0:319          'ballot' ( temp 4-component vector of uint)
+0:321      move second child to first child ( temp int)
+0:321        direct index ( temp int)
+0:321          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:321            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321              'invocation' ( temp uint)
+0:321            Constant:
+0:321              1 (const int)
+0:321          Constant:
+0:321            0 (const int)
+0:321        subgroupPartitionedExclusiveMulNV ( global int)
+0:321          direct index ( temp int)
+0:321            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:321              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321                Constant:
+0:321                  0 (const int)
+0:321              Constant:
+0:321                1 (const int)
+0:321            Constant:
+0:321              0 (const int)
+0:321          'ballot' ( temp 4-component vector of uint)
+0:322      move second child to first child ( temp 2-component vector of int)
+0:322        vector swizzle ( temp 2-component vector of int)
+0:322          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:322            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322              'invocation' ( temp uint)
+0:322            Constant:
+0:322              1 (const int)
+0:322          Sequence
+0:322            Constant:
+0:322              0 (const int)
+0:322            Constant:
+0:322              1 (const int)
+0:322        subgroupPartitionedExclusiveMulNV ( global 2-component vector of int)
+0:322          vector swizzle ( temp 2-component vector of int)
+0:322            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:322              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322                Constant:
+0:322                  1 (const int)
+0:322              Constant:
+0:322                1 (const int)
+0:322            Sequence
+0:322              Constant:
+0:322                0 (const int)
+0:322              Constant:
+0:322                1 (const int)
+0:322          'ballot' ( temp 4-component vector of uint)
+0:323      move second child to first child ( temp 3-component vector of int)
+0:323        vector swizzle ( temp 3-component vector of int)
+0:323          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:323            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:323              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:323              'invocation' ( temp uint)
+0:323            Constant:
+0:323              1 (const int)
+0:323          Sequence
+0:323            Constant:
+0:323              0 (const int)
+0:323            Constant:
+0:323              1 (const int)
+0:323            Constant:
+0:323              2 (const int)
+0:323        subgroupPartitionedExclusiveMulNV ( global 3-component vector of int)
+0:323          vector swizzle ( temp 3-component vector of int)
+0:323            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:323              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:323                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:323                Constant:
+0:323                  2 (const int)
+0:323              Constant:
+0:323                1 (const int)
+0:323            Sequence
+0:323              Constant:
+0:323                0 (const int)
+0:323              Constant:
+0:323                1 (const int)
+0:323              Constant:
+0:323                2 (const int)
+0:323          'ballot' ( temp 4-component vector of uint)
+0:324      move second child to first child ( temp 4-component vector of int)
+0:324        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:324          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324            'invocation' ( temp uint)
+0:324          Constant:
+0:324            1 (const int)
+0:324        subgroupPartitionedExclusiveMulNV ( global 4-component vector of int)
+0:324          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:324            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324              Constant:
+0:324                3 (const int)
+0:324            Constant:
+0:324              1 (const int)
+0:324          'ballot' ( temp 4-component vector of uint)
+0:326      move second child to first child ( temp uint)
+0:326        direct index ( temp uint)
+0:326          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:326            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326              'invocation' ( temp uint)
+0:326            Constant:
+0:326              2 (const int)
+0:326          Constant:
+0:326            0 (const int)
+0:326        subgroupPartitionedExclusiveMulNV ( global uint)
+0:326          direct index ( temp uint)
+0:326            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:326              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326                Constant:
+0:326                  0 (const int)
+0:326              Constant:
+0:326                2 (const int)
+0:326            Constant:
+0:326              0 (const int)
+0:326          'ballot' ( temp 4-component vector of uint)
+0:327      move second child to first child ( temp 2-component vector of uint)
+0:327        vector swizzle ( temp 2-component vector of uint)
+0:327          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:327            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327              'invocation' ( temp uint)
+0:327            Constant:
+0:327              2 (const int)
+0:327          Sequence
+0:327            Constant:
+0:327              0 (const int)
+0:327            Constant:
+0:327              1 (const int)
+0:327        subgroupPartitionedExclusiveMulNV ( global 2-component vector of uint)
+0:327          vector swizzle ( temp 2-component vector of uint)
+0:327            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:327              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327                Constant:
+0:327                  1 (const int)
+0:327              Constant:
+0:327                2 (const int)
+0:327            Sequence
+0:327              Constant:
+0:327                0 (const int)
+0:327              Constant:
+0:327                1 (const int)
+0:327          'ballot' ( temp 4-component vector of uint)
+0:328      move second child to first child ( temp 3-component vector of uint)
+0:328        vector swizzle ( temp 3-component vector of uint)
+0:328          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:328            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:328              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:328              'invocation' ( temp uint)
+0:328            Constant:
+0:328              2 (const int)
+0:328          Sequence
+0:328            Constant:
+0:328              0 (const int)
+0:328            Constant:
+0:328              1 (const int)
+0:328            Constant:
+0:328              2 (const int)
+0:328        subgroupPartitionedExclusiveMulNV ( global 3-component vector of uint)
+0:328          vector swizzle ( temp 3-component vector of uint)
+0:328            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:328              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:328                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:328                Constant:
+0:328                  2 (const int)
+0:328              Constant:
+0:328                2 (const int)
+0:328            Sequence
+0:328              Constant:
+0:328                0 (const int)
+0:328              Constant:
+0:328                1 (const int)
+0:328              Constant:
+0:328                2 (const int)
+0:328          'ballot' ( temp 4-component vector of uint)
+0:329      move second child to first child ( temp 4-component vector of uint)
+0:329        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:329          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329            'invocation' ( temp uint)
+0:329          Constant:
+0:329            2 (const int)
+0:329        subgroupPartitionedExclusiveMulNV ( global 4-component vector of uint)
+0:329          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:329            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329              Constant:
+0:329                3 (const int)
+0:329            Constant:
+0:329              2 (const int)
+0:329          'ballot' ( temp 4-component vector of uint)
+0:331      move second child to first child ( temp double)
+0:331        direct index ( temp double)
+0:331          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:331            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331              'invocation' ( temp uint)
+0:331            Constant:
+0:331              3 (const int)
+0:331          Constant:
+0:331            0 (const int)
+0:331        subgroupPartitionedExclusiveMulNV ( global double)
+0:331          direct index ( temp double)
+0:331            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:331              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331                Constant:
+0:331                  0 (const int)
+0:331              Constant:
+0:331                3 (const int)
+0:331            Constant:
+0:331              0 (const int)
+0:331          'ballot' ( temp 4-component vector of uint)
+0:332      move second child to first child ( temp 2-component vector of double)
+0:332        vector swizzle ( temp 2-component vector of double)
+0:332          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:332            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332              'invocation' ( temp uint)
+0:332            Constant:
+0:332              3 (const int)
+0:332          Sequence
+0:332            Constant:
+0:332              0 (const int)
+0:332            Constant:
+0:332              1 (const int)
+0:332        subgroupPartitionedExclusiveMulNV ( global 2-component vector of double)
+0:332          vector swizzle ( temp 2-component vector of double)
+0:332            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:332              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332                Constant:
+0:332                  1 (const int)
+0:332              Constant:
+0:332                3 (const int)
+0:332            Sequence
+0:332              Constant:
+0:332                0 (const int)
+0:332              Constant:
+0:332                1 (const int)
+0:332          'ballot' ( temp 4-component vector of uint)
+0:333      move second child to first child ( temp 3-component vector of double)
+0:333        vector swizzle ( temp 3-component vector of double)
+0:333          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:333            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:333              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:333              'invocation' ( temp uint)
+0:333            Constant:
+0:333              3 (const int)
+0:333          Sequence
+0:333            Constant:
+0:333              0 (const int)
+0:333            Constant:
+0:333              1 (const int)
+0:333            Constant:
+0:333              2 (const int)
+0:333        subgroupPartitionedExclusiveMulNV ( global 3-component vector of double)
+0:333          vector swizzle ( temp 3-component vector of double)
+0:333            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:333              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:333                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:333                Constant:
+0:333                  2 (const int)
+0:333              Constant:
+0:333                3 (const int)
+0:333            Sequence
+0:333              Constant:
+0:333                0 (const int)
+0:333              Constant:
+0:333                1 (const int)
+0:333              Constant:
+0:333                2 (const int)
+0:333          'ballot' ( temp 4-component vector of uint)
+0:334      move second child to first child ( temp 4-component vector of double)
+0:334        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:334          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334            'invocation' ( temp uint)
+0:334          Constant:
+0:334            3 (const int)
+0:334        subgroupPartitionedExclusiveMulNV ( global 4-component vector of double)
+0:334          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:334            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334              Constant:
+0:334                3 (const int)
+0:334            Constant:
+0:334              3 (const int)
+0:334          'ballot' ( temp 4-component vector of uint)
+0:336      move second child to first child ( temp float)
+0:336        direct index ( temp float)
+0:336          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:336            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336              'invocation' ( temp uint)
+0:336            Constant:
+0:336              0 (const int)
+0:336          Constant:
+0:336            0 (const int)
+0:336        subgroupPartitionedExclusiveMinNV ( global float)
+0:336          direct index ( temp float)
+0:336            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:336              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336                Constant:
+0:336                  0 (const int)
+0:336              Constant:
+0:336                0 (const int)
+0:336            Constant:
+0:336              0 (const int)
+0:336          'ballot' ( temp 4-component vector of uint)
+0:337      move second child to first child ( temp 2-component vector of float)
+0:337        vector swizzle ( temp 2-component vector of float)
+0:337          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:337            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337              'invocation' ( temp uint)
+0:337            Constant:
+0:337              0 (const int)
+0:337          Sequence
+0:337            Constant:
+0:337              0 (const int)
+0:337            Constant:
+0:337              1 (const int)
+0:337        subgroupPartitionedExclusiveMinNV ( global 2-component vector of float)
+0:337          vector swizzle ( temp 2-component vector of float)
+0:337            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:337              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337                Constant:
+0:337                  1 (const int)
+0:337              Constant:
+0:337                0 (const int)
+0:337            Sequence
+0:337              Constant:
+0:337                0 (const int)
+0:337              Constant:
+0:337                1 (const int)
+0:337          'ballot' ( temp 4-component vector of uint)
+0:338      move second child to first child ( temp 3-component vector of float)
+0:338        vector swizzle ( temp 3-component vector of float)
+0:338          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:338            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:338              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:338              'invocation' ( temp uint)
+0:338            Constant:
+0:338              0 (const int)
+0:338          Sequence
+0:338            Constant:
+0:338              0 (const int)
+0:338            Constant:
+0:338              1 (const int)
+0:338            Constant:
+0:338              2 (const int)
+0:338        subgroupPartitionedExclusiveMinNV ( global 3-component vector of float)
+0:338          vector swizzle ( temp 3-component vector of float)
+0:338            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:338              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:338                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:338                Constant:
+0:338                  2 (const int)
+0:338              Constant:
+0:338                0 (const int)
+0:338            Sequence
+0:338              Constant:
+0:338                0 (const int)
+0:338              Constant:
+0:338                1 (const int)
+0:338              Constant:
+0:338                2 (const int)
+0:338          'ballot' ( temp 4-component vector of uint)
+0:339      move second child to first child ( temp 4-component vector of float)
+0:339        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:339          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339            'invocation' ( temp uint)
+0:339          Constant:
+0:339            0 (const int)
+0:339        subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:339          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:339            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339              Constant:
+0:339                3 (const int)
+0:339            Constant:
+0:339              0 (const int)
+0:339          'ballot' ( temp 4-component vector of uint)
+0:341      move second child to first child ( temp int)
+0:341        direct index ( temp int)
+0:341          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:341            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341              'invocation' ( temp uint)
+0:341            Constant:
+0:341              1 (const int)
+0:341          Constant:
+0:341            0 (const int)
+0:341        subgroupPartitionedExclusiveMinNV ( global int)
+0:341          direct index ( temp int)
+0:341            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:341              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341                Constant:
+0:341                  0 (const int)
+0:341              Constant:
+0:341                1 (const int)
+0:341            Constant:
+0:341              0 (const int)
+0:341          'ballot' ( temp 4-component vector of uint)
+0:342      move second child to first child ( temp 2-component vector of int)
+0:342        vector swizzle ( temp 2-component vector of int)
+0:342          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:342            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342              'invocation' ( temp uint)
+0:342            Constant:
+0:342              1 (const int)
+0:342          Sequence
+0:342            Constant:
+0:342              0 (const int)
+0:342            Constant:
+0:342              1 (const int)
+0:342        subgroupPartitionedExclusiveMinNV ( global 2-component vector of int)
+0:342          vector swizzle ( temp 2-component vector of int)
+0:342            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:342              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342                Constant:
+0:342                  1 (const int)
+0:342              Constant:
+0:342                1 (const int)
+0:342            Sequence
+0:342              Constant:
+0:342                0 (const int)
+0:342              Constant:
+0:342                1 (const int)
+0:342          'ballot' ( temp 4-component vector of uint)
+0:343      move second child to first child ( temp 3-component vector of int)
+0:343        vector swizzle ( temp 3-component vector of int)
+0:343          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:343            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:343              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:343              'invocation' ( temp uint)
+0:343            Constant:
+0:343              1 (const int)
+0:343          Sequence
+0:343            Constant:
+0:343              0 (const int)
+0:343            Constant:
+0:343              1 (const int)
+0:343            Constant:
+0:343              2 (const int)
+0:343        subgroupPartitionedExclusiveMinNV ( global 3-component vector of int)
+0:343          vector swizzle ( temp 3-component vector of int)
+0:343            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:343              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:343                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:343                Constant:
+0:343                  2 (const int)
+0:343              Constant:
+0:343                1 (const int)
+0:343            Sequence
+0:343              Constant:
+0:343                0 (const int)
+0:343              Constant:
+0:343                1 (const int)
+0:343              Constant:
+0:343                2 (const int)
+0:343          'ballot' ( temp 4-component vector of uint)
+0:344      move second child to first child ( temp 4-component vector of int)
+0:344        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:344          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344            'invocation' ( temp uint)
+0:344          Constant:
+0:344            1 (const int)
+0:344        subgroupPartitionedExclusiveMinNV ( global 4-component vector of int)
+0:344          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:344            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344              Constant:
+0:344                3 (const int)
+0:344            Constant:
+0:344              1 (const int)
+0:344          'ballot' ( temp 4-component vector of uint)
+0:346      move second child to first child ( temp uint)
+0:346        direct index ( temp uint)
+0:346          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:346            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346              'invocation' ( temp uint)
+0:346            Constant:
+0:346              2 (const int)
+0:346          Constant:
+0:346            0 (const int)
+0:346        subgroupPartitionedExclusiveMinNV ( global uint)
+0:346          direct index ( temp uint)
+0:346            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:346              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346                Constant:
+0:346                  0 (const int)
+0:346              Constant:
+0:346                2 (const int)
+0:346            Constant:
+0:346              0 (const int)
+0:346          'ballot' ( temp 4-component vector of uint)
+0:347      move second child to first child ( temp 2-component vector of uint)
+0:347        vector swizzle ( temp 2-component vector of uint)
+0:347          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:347            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347              'invocation' ( temp uint)
+0:347            Constant:
+0:347              2 (const int)
+0:347          Sequence
+0:347            Constant:
+0:347              0 (const int)
+0:347            Constant:
+0:347              1 (const int)
+0:347        subgroupPartitionedExclusiveMinNV ( global 2-component vector of uint)
+0:347          vector swizzle ( temp 2-component vector of uint)
+0:347            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:347              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347                Constant:
+0:347                  1 (const int)
+0:347              Constant:
+0:347                2 (const int)
+0:347            Sequence
+0:347              Constant:
+0:347                0 (const int)
+0:347              Constant:
+0:347                1 (const int)
+0:347          'ballot' ( temp 4-component vector of uint)
+0:348      move second child to first child ( temp 3-component vector of uint)
+0:348        vector swizzle ( temp 3-component vector of uint)
+0:348          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:348            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:348              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:348              'invocation' ( temp uint)
+0:348            Constant:
+0:348              2 (const int)
+0:348          Sequence
+0:348            Constant:
+0:348              0 (const int)
+0:348            Constant:
+0:348              1 (const int)
+0:348            Constant:
+0:348              2 (const int)
+0:348        subgroupPartitionedExclusiveMinNV ( global 3-component vector of uint)
+0:348          vector swizzle ( temp 3-component vector of uint)
+0:348            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:348              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:348                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:348                Constant:
+0:348                  2 (const int)
+0:348              Constant:
+0:348                2 (const int)
+0:348            Sequence
+0:348              Constant:
+0:348                0 (const int)
+0:348              Constant:
+0:348                1 (const int)
+0:348              Constant:
+0:348                2 (const int)
+0:348          'ballot' ( temp 4-component vector of uint)
+0:349      move second child to first child ( temp 4-component vector of uint)
+0:349        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:349          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349            'invocation' ( temp uint)
+0:349          Constant:
+0:349            2 (const int)
+0:349        subgroupPartitionedExclusiveMinNV ( global 4-component vector of uint)
+0:349          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:349            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349              Constant:
+0:349                3 (const int)
+0:349            Constant:
+0:349              2 (const int)
+0:349          'ballot' ( temp 4-component vector of uint)
+0:351      move second child to first child ( temp double)
+0:351        direct index ( temp double)
+0:351          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:351            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351              'invocation' ( temp uint)
+0:351            Constant:
+0:351              3 (const int)
+0:351          Constant:
+0:351            0 (const int)
+0:351        subgroupPartitionedExclusiveMinNV ( global double)
+0:351          direct index ( temp double)
+0:351            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:351              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351                Constant:
+0:351                  0 (const int)
+0:351              Constant:
+0:351                3 (const int)
+0:351            Constant:
+0:351              0 (const int)
+0:351          'ballot' ( temp 4-component vector of uint)
+0:352      move second child to first child ( temp 2-component vector of double)
+0:352        vector swizzle ( temp 2-component vector of double)
+0:352          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:352            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352              'invocation' ( temp uint)
+0:352            Constant:
+0:352              3 (const int)
+0:352          Sequence
+0:352            Constant:
+0:352              0 (const int)
+0:352            Constant:
+0:352              1 (const int)
+0:352        subgroupPartitionedExclusiveMinNV ( global 2-component vector of double)
+0:352          vector swizzle ( temp 2-component vector of double)
+0:352            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:352              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352                Constant:
+0:352                  1 (const int)
+0:352              Constant:
+0:352                3 (const int)
+0:352            Sequence
+0:352              Constant:
+0:352                0 (const int)
+0:352              Constant:
+0:352                1 (const int)
+0:352          'ballot' ( temp 4-component vector of uint)
+0:353      move second child to first child ( temp 3-component vector of double)
+0:353        vector swizzle ( temp 3-component vector of double)
+0:353          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:353            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:353              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:353              'invocation' ( temp uint)
+0:353            Constant:
+0:353              3 (const int)
+0:353          Sequence
+0:353            Constant:
+0:353              0 (const int)
+0:353            Constant:
+0:353              1 (const int)
+0:353            Constant:
+0:353              2 (const int)
+0:353        subgroupPartitionedExclusiveMinNV ( global 3-component vector of double)
+0:353          vector swizzle ( temp 3-component vector of double)
+0:353            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:353              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:353                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:353                Constant:
+0:353                  2 (const int)
+0:353              Constant:
+0:353                3 (const int)
+0:353            Sequence
+0:353              Constant:
+0:353                0 (const int)
+0:353              Constant:
+0:353                1 (const int)
+0:353              Constant:
+0:353                2 (const int)
+0:353          'ballot' ( temp 4-component vector of uint)
+0:354      move second child to first child ( temp 4-component vector of double)
+0:354        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:354          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354            'invocation' ( temp uint)
+0:354          Constant:
+0:354            3 (const int)
+0:354        subgroupPartitionedExclusiveMinNV ( global 4-component vector of double)
+0:354          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:354            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354              Constant:
+0:354                3 (const int)
+0:354            Constant:
+0:354              3 (const int)
+0:354          'ballot' ( temp 4-component vector of uint)
+0:356      move second child to first child ( temp float)
+0:356        direct index ( temp float)
+0:356          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:356            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356              'invocation' ( temp uint)
+0:356            Constant:
+0:356              0 (const int)
+0:356          Constant:
+0:356            0 (const int)
+0:356        subgroupPartitionedExclusiveMaxNV ( global float)
+0:356          direct index ( temp float)
+0:356            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:356              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356                Constant:
+0:356                  0 (const int)
+0:356              Constant:
+0:356                0 (const int)
+0:356            Constant:
+0:356              0 (const int)
+0:356          'ballot' ( temp 4-component vector of uint)
+0:357      move second child to first child ( temp 2-component vector of float)
+0:357        vector swizzle ( temp 2-component vector of float)
+0:357          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:357            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357              'invocation' ( temp uint)
+0:357            Constant:
+0:357              0 (const int)
+0:357          Sequence
+0:357            Constant:
+0:357              0 (const int)
+0:357            Constant:
+0:357              1 (const int)
+0:357        subgroupPartitionedExclusiveMaxNV ( global 2-component vector of float)
+0:357          vector swizzle ( temp 2-component vector of float)
+0:357            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:357              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357                Constant:
+0:357                  1 (const int)
+0:357              Constant:
+0:357                0 (const int)
+0:357            Sequence
+0:357              Constant:
+0:357                0 (const int)
+0:357              Constant:
+0:357                1 (const int)
+0:357          'ballot' ( temp 4-component vector of uint)
+0:358      move second child to first child ( temp 3-component vector of float)
+0:358        vector swizzle ( temp 3-component vector of float)
+0:358          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:358            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:358              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:358              'invocation' ( temp uint)
+0:358            Constant:
+0:358              0 (const int)
+0:358          Sequence
+0:358            Constant:
+0:358              0 (const int)
+0:358            Constant:
+0:358              1 (const int)
+0:358            Constant:
+0:358              2 (const int)
+0:358        subgroupPartitionedExclusiveMaxNV ( global 3-component vector of float)
+0:358          vector swizzle ( temp 3-component vector of float)
+0:358            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:358              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:358                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:358                Constant:
+0:358                  2 (const int)
+0:358              Constant:
+0:358                0 (const int)
+0:358            Sequence
+0:358              Constant:
+0:358                0 (const int)
+0:358              Constant:
+0:358                1 (const int)
+0:358              Constant:
+0:358                2 (const int)
+0:358          'ballot' ( temp 4-component vector of uint)
+0:359      move second child to first child ( temp 4-component vector of float)
+0:359        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:359          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359            'invocation' ( temp uint)
+0:359          Constant:
+0:359            0 (const int)
+0:359        subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:359          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:359            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359              Constant:
+0:359                3 (const int)
+0:359            Constant:
+0:359              0 (const int)
+0:359          'ballot' ( temp 4-component vector of uint)
+0:361      move second child to first child ( temp int)
+0:361        direct index ( temp int)
+0:361          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:361            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361              'invocation' ( temp uint)
+0:361            Constant:
+0:361              1 (const int)
+0:361          Constant:
+0:361            0 (const int)
+0:361        subgroupPartitionedExclusiveMaxNV ( global int)
+0:361          direct index ( temp int)
+0:361            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:361              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361                Constant:
+0:361                  0 (const int)
+0:361              Constant:
+0:361                1 (const int)
+0:361            Constant:
+0:361              0 (const int)
+0:361          'ballot' ( temp 4-component vector of uint)
+0:362      move second child to first child ( temp 2-component vector of int)
+0:362        vector swizzle ( temp 2-component vector of int)
+0:362          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:362            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362              'invocation' ( temp uint)
+0:362            Constant:
+0:362              1 (const int)
+0:362          Sequence
+0:362            Constant:
+0:362              0 (const int)
+0:362            Constant:
+0:362              1 (const int)
+0:362        subgroupPartitionedExclusiveMaxNV ( global 2-component vector of int)
+0:362          vector swizzle ( temp 2-component vector of int)
+0:362            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:362              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362                Constant:
+0:362                  1 (const int)
+0:362              Constant:
+0:362                1 (const int)
+0:362            Sequence
+0:362              Constant:
+0:362                0 (const int)
+0:362              Constant:
+0:362                1 (const int)
+0:362          'ballot' ( temp 4-component vector of uint)
+0:363      move second child to first child ( temp 3-component vector of int)
+0:363        vector swizzle ( temp 3-component vector of int)
+0:363          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:363            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:363              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:363              'invocation' ( temp uint)
+0:363            Constant:
+0:363              1 (const int)
+0:363          Sequence
+0:363            Constant:
+0:363              0 (const int)
+0:363            Constant:
+0:363              1 (const int)
+0:363            Constant:
+0:363              2 (const int)
+0:363        subgroupPartitionedExclusiveMaxNV ( global 3-component vector of int)
+0:363          vector swizzle ( temp 3-component vector of int)
+0:363            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:363              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:363                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:363                Constant:
+0:363                  2 (const int)
+0:363              Constant:
+0:363                1 (const int)
+0:363            Sequence
+0:363              Constant:
+0:363                0 (const int)
+0:363              Constant:
+0:363                1 (const int)
+0:363              Constant:
+0:363                2 (const int)
+0:363          'ballot' ( temp 4-component vector of uint)
+0:364      move second child to first child ( temp 4-component vector of int)
+0:364        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:364          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364            'invocation' ( temp uint)
+0:364          Constant:
+0:364            1 (const int)
+0:364        subgroupPartitionedExclusiveMaxNV ( global 4-component vector of int)
+0:364          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:364            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364              Constant:
+0:364                3 (const int)
+0:364            Constant:
+0:364              1 (const int)
+0:364          'ballot' ( temp 4-component vector of uint)
+0:366      move second child to first child ( temp uint)
+0:366        direct index ( temp uint)
+0:366          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:366            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366              'invocation' ( temp uint)
+0:366            Constant:
+0:366              2 (const int)
+0:366          Constant:
+0:366            0 (const int)
+0:366        subgroupPartitionedExclusiveMaxNV ( global uint)
+0:366          direct index ( temp uint)
+0:366            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:366              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366                Constant:
+0:366                  0 (const int)
+0:366              Constant:
+0:366                2 (const int)
+0:366            Constant:
+0:366              0 (const int)
+0:366          'ballot' ( temp 4-component vector of uint)
+0:367      move second child to first child ( temp 2-component vector of uint)
+0:367        vector swizzle ( temp 2-component vector of uint)
+0:367          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:367            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367              'invocation' ( temp uint)
+0:367            Constant:
+0:367              2 (const int)
+0:367          Sequence
+0:367            Constant:
+0:367              0 (const int)
+0:367            Constant:
+0:367              1 (const int)
+0:367        subgroupPartitionedExclusiveMaxNV ( global 2-component vector of uint)
+0:367          vector swizzle ( temp 2-component vector of uint)
+0:367            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:367              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367                Constant:
+0:367                  1 (const int)
+0:367              Constant:
+0:367                2 (const int)
+0:367            Sequence
+0:367              Constant:
+0:367                0 (const int)
+0:367              Constant:
+0:367                1 (const int)
+0:367          'ballot' ( temp 4-component vector of uint)
+0:368      move second child to first child ( temp 3-component vector of uint)
+0:368        vector swizzle ( temp 3-component vector of uint)
+0:368          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:368            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:368              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:368              'invocation' ( temp uint)
+0:368            Constant:
+0:368              2 (const int)
+0:368          Sequence
+0:368            Constant:
+0:368              0 (const int)
+0:368            Constant:
+0:368              1 (const int)
+0:368            Constant:
+0:368              2 (const int)
+0:368        subgroupPartitionedExclusiveMaxNV ( global 3-component vector of uint)
+0:368          vector swizzle ( temp 3-component vector of uint)
+0:368            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:368              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:368                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:368                Constant:
+0:368                  2 (const int)
+0:368              Constant:
+0:368                2 (const int)
+0:368            Sequence
+0:368              Constant:
+0:368                0 (const int)
+0:368              Constant:
+0:368                1 (const int)
+0:368              Constant:
+0:368                2 (const int)
+0:368          'ballot' ( temp 4-component vector of uint)
+0:369      move second child to first child ( temp 4-component vector of uint)
+0:369        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:369          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369            'invocation' ( temp uint)
+0:369          Constant:
+0:369            2 (const int)
+0:369        subgroupPartitionedExclusiveMaxNV ( global 4-component vector of uint)
+0:369          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:369            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369              Constant:
+0:369                3 (const int)
+0:369            Constant:
+0:369              2 (const int)
+0:369          'ballot' ( temp 4-component vector of uint)
+0:371      move second child to first child ( temp double)
+0:371        direct index ( temp double)
+0:371          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:371            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371              'invocation' ( temp uint)
+0:371            Constant:
+0:371              3 (const int)
+0:371          Constant:
+0:371            0 (const int)
+0:371        subgroupPartitionedExclusiveMaxNV ( global double)
+0:371          direct index ( temp double)
+0:371            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:371              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371                Constant:
+0:371                  0 (const int)
+0:371              Constant:
+0:371                3 (const int)
+0:371            Constant:
+0:371              0 (const int)
+0:371          'ballot' ( temp 4-component vector of uint)
+0:372      move second child to first child ( temp 2-component vector of double)
+0:372        vector swizzle ( temp 2-component vector of double)
+0:372          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:372            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372              'invocation' ( temp uint)
+0:372            Constant:
+0:372              3 (const int)
+0:372          Sequence
+0:372            Constant:
+0:372              0 (const int)
+0:372            Constant:
+0:372              1 (const int)
+0:372        subgroupPartitionedExclusiveMaxNV ( global 2-component vector of double)
+0:372          vector swizzle ( temp 2-component vector of double)
+0:372            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:372              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372                Constant:
+0:372                  1 (const int)
+0:372              Constant:
+0:372                3 (const int)
+0:372            Sequence
+0:372              Constant:
+0:372                0 (const int)
+0:372              Constant:
+0:372                1 (const int)
+0:372          'ballot' ( temp 4-component vector of uint)
+0:373      move second child to first child ( temp 3-component vector of double)
+0:373        vector swizzle ( temp 3-component vector of double)
+0:373          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:373            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:373              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:373              'invocation' ( temp uint)
+0:373            Constant:
+0:373              3 (const int)
+0:373          Sequence
+0:373            Constant:
+0:373              0 (const int)
+0:373            Constant:
+0:373              1 (const int)
+0:373            Constant:
+0:373              2 (const int)
+0:373        subgroupPartitionedExclusiveMaxNV ( global 3-component vector of double)
+0:373          vector swizzle ( temp 3-component vector of double)
+0:373            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:373              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:373                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:373                Constant:
+0:373                  2 (const int)
+0:373              Constant:
+0:373                3 (const int)
+0:373            Sequence
+0:373              Constant:
+0:373                0 (const int)
+0:373              Constant:
+0:373                1 (const int)
+0:373              Constant:
+0:373                2 (const int)
+0:373          'ballot' ( temp 4-component vector of uint)
+0:374      move second child to first child ( temp 4-component vector of double)
+0:374        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:374          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374            'invocation' ( temp uint)
+0:374          Constant:
+0:374            3 (const int)
+0:374        subgroupPartitionedExclusiveMaxNV ( global 4-component vector of double)
+0:374          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:374            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374              Constant:
+0:374                3 (const int)
+0:374            Constant:
+0:374              3 (const int)
+0:374          'ballot' ( temp 4-component vector of uint)
+0:376      move second child to first child ( temp int)
+0:376        direct index ( temp int)
+0:376          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:376            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376              'invocation' ( temp uint)
+0:376            Constant:
+0:376              1 (const int)
+0:376          Constant:
+0:376            0 (const int)
+0:376        subgroupPartitionedExclusiveAndNV ( global int)
+0:376          direct index ( temp int)
+0:376            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:376              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376                Constant:
+0:376                  0 (const int)
+0:376              Constant:
+0:376                1 (const int)
+0:376            Constant:
+0:376              0 (const int)
+0:376          'ballot' ( temp 4-component vector of uint)
+0:377      move second child to first child ( temp 2-component vector of int)
+0:377        vector swizzle ( temp 2-component vector of int)
+0:377          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:377            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377              'invocation' ( temp uint)
+0:377            Constant:
+0:377              1 (const int)
+0:377          Sequence
+0:377            Constant:
+0:377              0 (const int)
+0:377            Constant:
+0:377              1 (const int)
+0:377        subgroupPartitionedExclusiveAndNV ( global 2-component vector of int)
+0:377          vector swizzle ( temp 2-component vector of int)
+0:377            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:377              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377                Constant:
+0:377                  1 (const int)
+0:377              Constant:
+0:377                1 (const int)
+0:377            Sequence
+0:377              Constant:
+0:377                0 (const int)
+0:377              Constant:
+0:377                1 (const int)
+0:377          'ballot' ( temp 4-component vector of uint)
+0:378      move second child to first child ( temp 3-component vector of int)
+0:378        vector swizzle ( temp 3-component vector of int)
+0:378          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:378            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:378              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:378              'invocation' ( temp uint)
+0:378            Constant:
+0:378              1 (const int)
+0:378          Sequence
+0:378            Constant:
+0:378              0 (const int)
+0:378            Constant:
+0:378              1 (const int)
+0:378            Constant:
+0:378              2 (const int)
+0:378        subgroupPartitionedExclusiveAndNV ( global 3-component vector of int)
+0:378          vector swizzle ( temp 3-component vector of int)
+0:378            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:378              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:378                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:378                Constant:
+0:378                  2 (const int)
+0:378              Constant:
+0:378                1 (const int)
+0:378            Sequence
+0:378              Constant:
+0:378                0 (const int)
+0:378              Constant:
+0:378                1 (const int)
+0:378              Constant:
+0:378                2 (const int)
+0:378          'ballot' ( temp 4-component vector of uint)
+0:379      move second child to first child ( temp 4-component vector of int)
+0:379        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:379          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379            'invocation' ( temp uint)
+0:379          Constant:
+0:379            1 (const int)
+0:379        subgroupPartitionedExclusiveAndNV ( global 4-component vector of int)
+0:379          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:379            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379              Constant:
+0:379                3 (const int)
+0:379            Constant:
+0:379              1 (const int)
+0:379          'ballot' ( temp 4-component vector of uint)
+0:381      move second child to first child ( temp uint)
+0:381        direct index ( temp uint)
+0:381          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:381            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381              'invocation' ( temp uint)
+0:381            Constant:
+0:381              2 (const int)
+0:381          Constant:
+0:381            0 (const int)
+0:381        subgroupPartitionedExclusiveAndNV ( global uint)
+0:381          direct index ( temp uint)
+0:381            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:381              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381                Constant:
+0:381                  0 (const int)
+0:381              Constant:
+0:381                2 (const int)
+0:381            Constant:
+0:381              0 (const int)
+0:381          'ballot' ( temp 4-component vector of uint)
+0:382      move second child to first child ( temp 2-component vector of uint)
+0:382        vector swizzle ( temp 2-component vector of uint)
+0:382          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:382            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382              'invocation' ( temp uint)
+0:382            Constant:
+0:382              2 (const int)
+0:382          Sequence
+0:382            Constant:
+0:382              0 (const int)
+0:382            Constant:
+0:382              1 (const int)
+0:382        subgroupPartitionedExclusiveAndNV ( global 2-component vector of uint)
+0:382          vector swizzle ( temp 2-component vector of uint)
+0:382            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:382              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382                Constant:
+0:382                  1 (const int)
+0:382              Constant:
+0:382                2 (const int)
+0:382            Sequence
+0:382              Constant:
+0:382                0 (const int)
+0:382              Constant:
+0:382                1 (const int)
+0:382          'ballot' ( temp 4-component vector of uint)
+0:383      move second child to first child ( temp 3-component vector of uint)
+0:383        vector swizzle ( temp 3-component vector of uint)
+0:383          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:383            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:383              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:383              'invocation' ( temp uint)
+0:383            Constant:
+0:383              2 (const int)
+0:383          Sequence
+0:383            Constant:
+0:383              0 (const int)
+0:383            Constant:
+0:383              1 (const int)
+0:383            Constant:
+0:383              2 (const int)
+0:383        subgroupPartitionedExclusiveAndNV ( global 3-component vector of uint)
+0:383          vector swizzle ( temp 3-component vector of uint)
+0:383            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:383              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:383                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:383                Constant:
+0:383                  2 (const int)
+0:383              Constant:
+0:383                2 (const int)
+0:383            Sequence
+0:383              Constant:
+0:383                0 (const int)
+0:383              Constant:
+0:383                1 (const int)
+0:383              Constant:
+0:383                2 (const int)
+0:383          'ballot' ( temp 4-component vector of uint)
+0:384      move second child to first child ( temp 4-component vector of uint)
+0:384        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:384          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384            'invocation' ( temp uint)
+0:384          Constant:
+0:384            2 (const int)
+0:384        subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:384          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:384            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384              Constant:
+0:384                3 (const int)
+0:384            Constant:
+0:384              2 (const int)
+0:384          'ballot' ( temp 4-component vector of uint)
+0:386      move second child to first child ( temp int)
+0:386        direct index ( temp int)
+0:386          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:386            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386              'invocation' ( temp uint)
+0:386            Constant:
+0:386              1 (const int)
+0:386          Constant:
+0:386            0 (const int)
+0:386        Convert bool to int ( temp int)
+0:386          subgroupPartitionedExclusiveAndNV ( global bool)
+0:386            Compare Less Than ( temp bool)
+0:386              direct index ( temp int)
+0:386                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:386                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386                    Constant:
+0:386                      0 (const int)
+0:386                  Constant:
+0:386                    1 (const int)
+0:386                Constant:
+0:386                  0 (const int)
+0:386              Constant:
+0:386                0 (const int)
+0:386            'ballot' ( temp 4-component vector of uint)
+0:387      move second child to first child ( temp 2-component vector of int)
+0:387        vector swizzle ( temp 2-component vector of int)
+0:387          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:387            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387              'invocation' ( temp uint)
+0:387            Constant:
+0:387              1 (const int)
+0:387          Sequence
+0:387            Constant:
+0:387              0 (const int)
+0:387            Constant:
+0:387              1 (const int)
+0:387        Convert bool to int ( temp 2-component vector of int)
+0:387          subgroupPartitionedExclusiveAndNV ( global 2-component vector of bool)
+0:387            Compare Less Than ( global 2-component vector of bool)
+0:387              vector swizzle ( temp 2-component vector of int)
+0:387                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:387                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387                    Constant:
+0:387                      1 (const int)
+0:387                  Constant:
+0:387                    1 (const int)
+0:387                Sequence
+0:387                  Constant:
+0:387                    0 (const int)
+0:387                  Constant:
+0:387                    1 (const int)
+0:387              Constant:
+0:387                0 (const int)
+0:387                0 (const int)
+0:387            'ballot' ( temp 4-component vector of uint)
+0:388      move second child to first child ( temp 3-component vector of int)
+0:388        vector swizzle ( temp 3-component vector of int)
+0:388          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:388            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:388              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:388              'invocation' ( temp uint)
+0:388            Constant:
+0:388              1 (const int)
+0:388          Sequence
+0:388            Constant:
+0:388              0 (const int)
+0:388            Constant:
+0:388              1 (const int)
+0:388            Constant:
+0:388              2 (const int)
+0:388        Convert bool to int ( temp 3-component vector of int)
+0:388          subgroupPartitionedExclusiveAndNV ( global 3-component vector of bool)
+0:388            Compare Less Than ( global 3-component vector of bool)
+0:388              vector swizzle ( temp 3-component vector of int)
+0:388                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:388                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:388                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:388                    Constant:
+0:388                      1 (const int)
+0:388                  Constant:
+0:388                    1 (const int)
+0:388                Sequence
+0:388                  Constant:
+0:388                    0 (const int)
+0:388                  Constant:
+0:388                    1 (const int)
+0:388                  Constant:
+0:388                    2 (const int)
+0:388              Constant:
+0:388                0 (const int)
+0:388                0 (const int)
+0:388                0 (const int)
+0:388            'ballot' ( temp 4-component vector of uint)
+0:389      move second child to first child ( temp 4-component vector of int)
+0:389        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:389          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389            'invocation' ( temp uint)
+0:389          Constant:
+0:389            1 (const int)
+0:389        Convert bool to int ( temp 4-component vector of int)
+0:389          subgroupPartitionedExclusiveAndNV ( global 4-component vector of bool)
+0:389            Compare Less Than ( global 4-component vector of bool)
+0:389              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:389                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389                  Constant:
+0:389                    1 (const int)
+0:389                Constant:
+0:389                  1 (const int)
+0:389              Constant:
+0:389                0 (const int)
+0:389                0 (const int)
+0:389                0 (const int)
+0:389                0 (const int)
+0:389            'ballot' ( temp 4-component vector of uint)
+0:391      move second child to first child ( temp int)
+0:391        direct index ( temp int)
+0:391          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:391            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391              'invocation' ( temp uint)
+0:391            Constant:
+0:391              1 (const int)
+0:391          Constant:
+0:391            0 (const int)
+0:391        subgroupPartitionedExclusiveOrNV ( global int)
+0:391          direct index ( temp int)
+0:391            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:391              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391                Constant:
+0:391                  0 (const int)
+0:391              Constant:
+0:391                1 (const int)
+0:391            Constant:
+0:391              0 (const int)
+0:391          'ballot' ( temp 4-component vector of uint)
+0:392      move second child to first child ( temp 2-component vector of int)
+0:392        vector swizzle ( temp 2-component vector of int)
+0:392          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:392            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392              'invocation' ( temp uint)
+0:392            Constant:
+0:392              1 (const int)
+0:392          Sequence
+0:392            Constant:
+0:392              0 (const int)
+0:392            Constant:
+0:392              1 (const int)
+0:392        subgroupPartitionedExclusiveOrNV ( global 2-component vector of int)
+0:392          vector swizzle ( temp 2-component vector of int)
+0:392            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:392              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392                Constant:
+0:392                  1 (const int)
+0:392              Constant:
+0:392                1 (const int)
+0:392            Sequence
+0:392              Constant:
+0:392                0 (const int)
+0:392              Constant:
+0:392                1 (const int)
+0:392          'ballot' ( temp 4-component vector of uint)
+0:393      move second child to first child ( temp 3-component vector of int)
+0:393        vector swizzle ( temp 3-component vector of int)
+0:393          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:393            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:393              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:393              'invocation' ( temp uint)
+0:393            Constant:
+0:393              1 (const int)
+0:393          Sequence
+0:393            Constant:
+0:393              0 (const int)
+0:393            Constant:
+0:393              1 (const int)
+0:393            Constant:
+0:393              2 (const int)
+0:393        subgroupPartitionedExclusiveOrNV ( global 3-component vector of int)
+0:393          vector swizzle ( temp 3-component vector of int)
+0:393            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:393              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:393                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:393                Constant:
+0:393                  2 (const int)
+0:393              Constant:
+0:393                1 (const int)
+0:393            Sequence
+0:393              Constant:
+0:393                0 (const int)
+0:393              Constant:
+0:393                1 (const int)
+0:393              Constant:
+0:393                2 (const int)
+0:393          'ballot' ( temp 4-component vector of uint)
+0:394      move second child to first child ( temp 4-component vector of int)
+0:394        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:394          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:394            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:394            'invocation' ( temp uint)
+0:394          Constant:
+0:394            1 (const int)
+0:394        subgroupPartitionedExclusiveOrNV ( global 4-component vector of int)
+0:394          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:394            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:394              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:394              Constant:
+0:394                3 (const int)
+0:394            Constant:
+0:394              1 (const int)
+0:394          'ballot' ( temp 4-component vector of uint)
+0:396      move second child to first child ( temp uint)
+0:396        direct index ( temp uint)
+0:396          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:396            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:396              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:396              'invocation' ( temp uint)
+0:396            Constant:
+0:396              2 (const int)
+0:396          Constant:
+0:396            0 (const int)
+0:396        subgroupPartitionedExclusiveOrNV ( global uint)
+0:396          direct index ( temp uint)
+0:396            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:396              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:396                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:396                Constant:
+0:396                  0 (const int)
+0:396              Constant:
+0:396                2 (const int)
+0:396            Constant:
+0:396              0 (const int)
+0:396          'ballot' ( temp 4-component vector of uint)
+0:397      move second child to first child ( temp 2-component vector of uint)
+0:397        vector swizzle ( temp 2-component vector of uint)
+0:397          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:397            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:397              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:397              'invocation' ( temp uint)
+0:397            Constant:
+0:397              2 (const int)
+0:397          Sequence
+0:397            Constant:
+0:397              0 (const int)
+0:397            Constant:
+0:397              1 (const int)
+0:397        subgroupPartitionedExclusiveOrNV ( global 2-component vector of uint)
+0:397          vector swizzle ( temp 2-component vector of uint)
+0:397            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:397              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:397                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:397                Constant:
+0:397                  1 (const int)
+0:397              Constant:
+0:397                2 (const int)
+0:397            Sequence
+0:397              Constant:
+0:397                0 (const int)
+0:397              Constant:
+0:397                1 (const int)
+0:397          'ballot' ( temp 4-component vector of uint)
+0:398      move second child to first child ( temp 3-component vector of uint)
+0:398        vector swizzle ( temp 3-component vector of uint)
+0:398          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:398            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:398              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:398              'invocation' ( temp uint)
+0:398            Constant:
+0:398              2 (const int)
+0:398          Sequence
+0:398            Constant:
+0:398              0 (const int)
+0:398            Constant:
+0:398              1 (const int)
+0:398            Constant:
+0:398              2 (const int)
+0:398        subgroupPartitionedExclusiveOrNV ( global 3-component vector of uint)
+0:398          vector swizzle ( temp 3-component vector of uint)
+0:398            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:398              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:398                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:398                Constant:
+0:398                  2 (const int)
+0:398              Constant:
+0:398                2 (const int)
+0:398            Sequence
+0:398              Constant:
+0:398                0 (const int)
+0:398              Constant:
+0:398                1 (const int)
+0:398              Constant:
+0:398                2 (const int)
+0:398          'ballot' ( temp 4-component vector of uint)
+0:399      move second child to first child ( temp 4-component vector of uint)
+0:399        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:399          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:399            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:399            'invocation' ( temp uint)
+0:399          Constant:
+0:399            2 (const int)
+0:399        subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:399          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:399            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:399              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:399              Constant:
+0:399                3 (const int)
+0:399            Constant:
+0:399              2 (const int)
+0:399          'ballot' ( temp 4-component vector of uint)
+0:401      move second child to first child ( temp int)
+0:401        direct index ( temp int)
+0:401          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:401            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:401              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:401              'invocation' ( temp uint)
+0:401            Constant:
+0:401              1 (const int)
+0:401          Constant:
+0:401            0 (const int)
+0:401        Convert bool to int ( temp int)
+0:401          subgroupPartitionedExclusiveOrNV ( global bool)
+0:401            Compare Less Than ( temp bool)
+0:401              direct index ( temp int)
+0:401                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:401                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:401                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:401                    Constant:
+0:401                      0 (const int)
+0:401                  Constant:
+0:401                    1 (const int)
+0:401                Constant:
+0:401                  0 (const int)
+0:401              Constant:
+0:401                0 (const int)
+0:401            'ballot' ( temp 4-component vector of uint)
+0:402      move second child to first child ( temp 2-component vector of int)
+0:402        vector swizzle ( temp 2-component vector of int)
+0:402          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:402            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:402              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:402              'invocation' ( temp uint)
+0:402            Constant:
+0:402              1 (const int)
+0:402          Sequence
+0:402            Constant:
+0:402              0 (const int)
+0:402            Constant:
+0:402              1 (const int)
+0:402        Convert bool to int ( temp 2-component vector of int)
+0:402          subgroupPartitionedExclusiveOrNV ( global 2-component vector of bool)
+0:402            Compare Less Than ( global 2-component vector of bool)
+0:402              vector swizzle ( temp 2-component vector of int)
+0:402                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:402                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:402                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:402                    Constant:
+0:402                      1 (const int)
+0:402                  Constant:
+0:402                    1 (const int)
+0:402                Sequence
+0:402                  Constant:
+0:402                    0 (const int)
+0:402                  Constant:
+0:402                    1 (const int)
+0:402              Constant:
+0:402                0 (const int)
+0:402                0 (const int)
+0:402            'ballot' ( temp 4-component vector of uint)
+0:403      move second child to first child ( temp 3-component vector of int)
+0:403        vector swizzle ( temp 3-component vector of int)
+0:403          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:403            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:403              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:403              'invocation' ( temp uint)
+0:403            Constant:
+0:403              1 (const int)
+0:403          Sequence
+0:403            Constant:
+0:403              0 (const int)
+0:403            Constant:
+0:403              1 (const int)
+0:403            Constant:
+0:403              2 (const int)
+0:403        Convert bool to int ( temp 3-component vector of int)
+0:403          subgroupPartitionedExclusiveOrNV ( global 3-component vector of bool)
+0:403            Compare Less Than ( global 3-component vector of bool)
+0:403              vector swizzle ( temp 3-component vector of int)
+0:403                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:403                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:403                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:403                    Constant:
+0:403                      1 (const int)
+0:403                  Constant:
+0:403                    1 (const int)
+0:403                Sequence
+0:403                  Constant:
+0:403                    0 (const int)
+0:403                  Constant:
+0:403                    1 (const int)
+0:403                  Constant:
+0:403                    2 (const int)
+0:403              Constant:
+0:403                0 (const int)
+0:403                0 (const int)
+0:403                0 (const int)
+0:403            'ballot' ( temp 4-component vector of uint)
+0:404      move second child to first child ( temp 4-component vector of int)
+0:404        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:404          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:404            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:404            'invocation' ( temp uint)
+0:404          Constant:
+0:404            1 (const int)
+0:404        Convert bool to int ( temp 4-component vector of int)
+0:404          subgroupPartitionedExclusiveOrNV ( global 4-component vector of bool)
+0:404            Compare Less Than ( global 4-component vector of bool)
+0:404              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:404                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:404                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:404                  Constant:
+0:404                    1 (const int)
+0:404                Constant:
+0:404                  1 (const int)
+0:404              Constant:
+0:404                0 (const int)
+0:404                0 (const int)
+0:404                0 (const int)
+0:404                0 (const int)
+0:404            'ballot' ( temp 4-component vector of uint)
+0:406      move second child to first child ( temp int)
+0:406        direct index ( temp int)
+0:406          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:406            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:406              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:406              'invocation' ( temp uint)
+0:406            Constant:
+0:406              1 (const int)
+0:406          Constant:
+0:406            0 (const int)
+0:406        subgroupPartitionedExclusiveXorNV ( global int)
+0:406          direct index ( temp int)
+0:406            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:406              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:406                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:406                Constant:
+0:406                  0 (const int)
+0:406              Constant:
+0:406                1 (const int)
+0:406            Constant:
+0:406              0 (const int)
+0:406          'ballot' ( temp 4-component vector of uint)
+0:407      move second child to first child ( temp 2-component vector of int)
+0:407        vector swizzle ( temp 2-component vector of int)
+0:407          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:407            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:407              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:407              'invocation' ( temp uint)
+0:407            Constant:
+0:407              1 (const int)
+0:407          Sequence
+0:407            Constant:
+0:407              0 (const int)
+0:407            Constant:
+0:407              1 (const int)
+0:407        subgroupPartitionedExclusiveXorNV ( global 2-component vector of int)
+0:407          vector swizzle ( temp 2-component vector of int)
+0:407            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:407              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:407                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:407                Constant:
+0:407                  1 (const int)
+0:407              Constant:
+0:407                1 (const int)
+0:407            Sequence
+0:407              Constant:
+0:407                0 (const int)
+0:407              Constant:
+0:407                1 (const int)
+0:407          'ballot' ( temp 4-component vector of uint)
+0:408      move second child to first child ( temp 3-component vector of int)
+0:408        vector swizzle ( temp 3-component vector of int)
+0:408          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:408            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:408              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:408              'invocation' ( temp uint)
+0:408            Constant:
+0:408              1 (const int)
+0:408          Sequence
+0:408            Constant:
+0:408              0 (const int)
+0:408            Constant:
+0:408              1 (const int)
+0:408            Constant:
+0:408              2 (const int)
+0:408        subgroupPartitionedExclusiveXorNV ( global 3-component vector of int)
+0:408          vector swizzle ( temp 3-component vector of int)
+0:408            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:408              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:408                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:408                Constant:
+0:408                  2 (const int)
+0:408              Constant:
+0:408                1 (const int)
+0:408            Sequence
+0:408              Constant:
+0:408                0 (const int)
+0:408              Constant:
+0:408                1 (const int)
+0:408              Constant:
+0:408                2 (const int)
+0:408          'ballot' ( temp 4-component vector of uint)
+0:409      move second child to first child ( temp 4-component vector of int)
+0:409        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:409          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:409            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:409            'invocation' ( temp uint)
+0:409          Constant:
+0:409            1 (const int)
+0:409        subgroupPartitionedExclusiveXorNV ( global 4-component vector of int)
+0:409          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:409            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:409              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:409              Constant:
+0:409                3 (const int)
+0:409            Constant:
+0:409              1 (const int)
+0:409          'ballot' ( temp 4-component vector of uint)
+0:411      move second child to first child ( temp uint)
+0:411        direct index ( temp uint)
+0:411          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:411            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:411              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:411              'invocation' ( temp uint)
+0:411            Constant:
+0:411              2 (const int)
+0:411          Constant:
+0:411            0 (const int)
+0:411        subgroupPartitionedExclusiveXorNV ( global uint)
+0:411          direct index ( temp uint)
+0:411            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:411              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:411                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:411                Constant:
+0:411                  0 (const int)
+0:411              Constant:
+0:411                2 (const int)
+0:411            Constant:
+0:411              0 (const int)
+0:411          'ballot' ( temp 4-component vector of uint)
+0:412      move second child to first child ( temp 2-component vector of uint)
+0:412        vector swizzle ( temp 2-component vector of uint)
+0:412          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:412            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:412              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:412              'invocation' ( temp uint)
+0:412            Constant:
+0:412              2 (const int)
+0:412          Sequence
+0:412            Constant:
+0:412              0 (const int)
+0:412            Constant:
+0:412              1 (const int)
+0:412        subgroupPartitionedExclusiveXorNV ( global 2-component vector of uint)
+0:412          vector swizzle ( temp 2-component vector of uint)
+0:412            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:412              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:412                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:412                Constant:
+0:412                  1 (const int)
+0:412              Constant:
+0:412                2 (const int)
+0:412            Sequence
+0:412              Constant:
+0:412                0 (const int)
+0:412              Constant:
+0:412                1 (const int)
+0:412          'ballot' ( temp 4-component vector of uint)
+0:413      move second child to first child ( temp 3-component vector of uint)
+0:413        vector swizzle ( temp 3-component vector of uint)
+0:413          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:413            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:413              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:413              'invocation' ( temp uint)
+0:413            Constant:
+0:413              2 (const int)
+0:413          Sequence
+0:413            Constant:
+0:413              0 (const int)
+0:413            Constant:
+0:413              1 (const int)
+0:413            Constant:
+0:413              2 (const int)
+0:413        subgroupPartitionedExclusiveXorNV ( global 3-component vector of uint)
+0:413          vector swizzle ( temp 3-component vector of uint)
+0:413            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:413              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:413                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:413                Constant:
+0:413                  2 (const int)
+0:413              Constant:
+0:413                2 (const int)
+0:413            Sequence
+0:413              Constant:
+0:413                0 (const int)
+0:413              Constant:
+0:413                1 (const int)
+0:413              Constant:
+0:413                2 (const int)
+0:413          'ballot' ( temp 4-component vector of uint)
+0:414      move second child to first child ( temp 4-component vector of uint)
+0:414        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:414          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:414            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:414            'invocation' ( temp uint)
+0:414          Constant:
+0:414            2 (const int)
+0:414        subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:414          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:414            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:414              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:414              Constant:
+0:414                3 (const int)
+0:414            Constant:
+0:414              2 (const int)
+0:414          'ballot' ( temp 4-component vector of uint)
+0:416      move second child to first child ( temp int)
+0:416        direct index ( temp int)
+0:416          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:416            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:416              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:416              'invocation' ( temp uint)
+0:416            Constant:
+0:416              1 (const int)
+0:416          Constant:
+0:416            0 (const int)
+0:416        Convert bool to int ( temp int)
+0:416          subgroupPartitionedExclusiveXorNV ( global bool)
+0:416            Compare Less Than ( temp bool)
+0:416              direct index ( temp int)
+0:416                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:416                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:416                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:416                    Constant:
+0:416                      0 (const int)
+0:416                  Constant:
+0:416                    1 (const int)
+0:416                Constant:
+0:416                  0 (const int)
+0:416              Constant:
+0:416                0 (const int)
+0:416            'ballot' ( temp 4-component vector of uint)
+0:417      move second child to first child ( temp 2-component vector of int)
+0:417        vector swizzle ( temp 2-component vector of int)
+0:417          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:417            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:417              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:417              'invocation' ( temp uint)
+0:417            Constant:
+0:417              1 (const int)
+0:417          Sequence
+0:417            Constant:
+0:417              0 (const int)
+0:417            Constant:
+0:417              1 (const int)
+0:417        Convert bool to int ( temp 2-component vector of int)
+0:417          subgroupPartitionedExclusiveXorNV ( global 2-component vector of bool)
+0:417            Compare Less Than ( global 2-component vector of bool)
+0:417              vector swizzle ( temp 2-component vector of int)
+0:417                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:417                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:417                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:417                    Constant:
+0:417                      1 (const int)
+0:417                  Constant:
+0:417                    1 (const int)
+0:417                Sequence
+0:417                  Constant:
+0:417                    0 (const int)
+0:417                  Constant:
+0:417                    1 (const int)
+0:417              Constant:
+0:417                0 (const int)
+0:417                0 (const int)
+0:417            'ballot' ( temp 4-component vector of uint)
+0:418      move second child to first child ( temp 3-component vector of int)
+0:418        vector swizzle ( temp 3-component vector of int)
+0:418          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:418            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:418              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:418              'invocation' ( temp uint)
+0:418            Constant:
+0:418              1 (const int)
+0:418          Sequence
+0:418            Constant:
+0:418              0 (const int)
+0:418            Constant:
+0:418              1 (const int)
+0:418            Constant:
+0:418              2 (const int)
+0:418        Convert bool to int ( temp 3-component vector of int)
+0:418          subgroupPartitionedExclusiveXorNV ( global 3-component vector of bool)
+0:418            Compare Less Than ( global 3-component vector of bool)
+0:418              vector swizzle ( temp 3-component vector of int)
+0:418                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:418                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:418                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:418                    Constant:
+0:418                      1 (const int)
+0:418                  Constant:
+0:418                    1 (const int)
+0:418                Sequence
+0:418                  Constant:
+0:418                    0 (const int)
+0:418                  Constant:
+0:418                    1 (const int)
+0:418                  Constant:
+0:418                    2 (const int)
+0:418              Constant:
+0:418                0 (const int)
+0:418                0 (const int)
+0:418                0 (const int)
+0:418            'ballot' ( temp 4-component vector of uint)
+0:419      move second child to first child ( temp 4-component vector of int)
+0:419        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:419          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:419            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:419            'invocation' ( temp uint)
+0:419          Constant:
+0:419            1 (const int)
+0:419        Convert bool to int ( temp 4-component vector of int)
+0:419          subgroupPartitionedExclusiveXorNV ( global 4-component vector of bool)
+0:419            Compare Less Than ( global 4-component vector of bool)
+0:419              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:419                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:419                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:419                  Constant:
+0:419                    1 (const int)
+0:419                Constant:
+0:419                  1 (const int)
+0:419              Constant:
+0:419                0 (const int)
+0:419                0 (const int)
+0:419                0 (const int)
+0:419                0 (const int)
+0:419            'ballot' ( temp 4-component vector of uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_NV_shader_subgroup_partitioned
+local_size = (8, 1, 1)
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp uint)
+0:17          'invocation' ( temp uint)
+0:17          mod ( temp uint)
+0:17            add ( temp uint)
+0:17              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      Sequence
+0:19        move second child to first child ( temp 4-component vector of uint)
+0:19          'ballot' ( temp 4-component vector of uint)
+0:19          subgroupPartitionNV ( global 4-component vector of uint)
+0:19            'invocation' ( temp uint)
+0:21      move second child to first child ( temp 4-component vector of uint)
+0:21        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:21          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21            'invocation' ( temp uint)
+0:21          Constant:
+0:21            2 (const int)
+0:21        subgroupPartitionNV ( global 4-component vector of uint)
+0:21          direct index ( temp float)
+0:21            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                Constant:
+0:21                  0 (const int)
+0:21              Constant:
+0:21                0 (const int)
+0:21            Constant:
+0:21              0 (const int)
+0:22      move second child to first child ( temp 4-component vector of uint)
+0:22        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:22          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'invocation' ( temp uint)
+0:22          Constant:
+0:22            2 (const int)
+0:22        subgroupPartitionNV ( global 4-component vector of uint)
+0:22          vector swizzle ( temp 2-component vector of float)
+0:22            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22                Constant:
+0:22                  0 (const int)
+0:22              Constant:
+0:22                0 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:23      move second child to first child ( temp 4-component vector of uint)
+0:23        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:23          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:23            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:23            'invocation' ( temp uint)
+0:23          Constant:
+0:23            2 (const int)
+0:23        subgroupPartitionNV ( global 4-component vector of uint)
+0:23          vector swizzle ( temp 3-component vector of float)
+0:23            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                0 (const int)
+0:23            Sequence
+0:23              Constant:
+0:23                0 (const int)
+0:23              Constant:
+0:23                1 (const int)
+0:23              Constant:
+0:23                2 (const int)
+0:24      move second child to first child ( temp 4-component vector of uint)
+0:24        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:24          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24            'invocation' ( temp uint)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupPartitionNV ( global 4-component vector of uint)
+0:24          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              Constant:
+0:24                0 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:26      move second child to first child ( temp 4-component vector of uint)
+0:26        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:26          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26            'invocation' ( temp uint)
+0:26          Constant:
+0:26            2 (const int)
+0:26        subgroupPartitionNV ( global 4-component vector of uint)
+0:26          direct index ( temp int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                Constant:
+0:26                  0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Constant:
+0:26              0 (const int)
+0:27      move second child to first child ( temp 4-component vector of uint)
+0:27        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:27          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'invocation' ( temp uint)
+0:27          Constant:
+0:27            2 (const int)
+0:27        subgroupPartitionNV ( global 4-component vector of uint)
+0:27          vector swizzle ( temp 2-component vector of int)
+0:27            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27                Constant:
+0:27                  0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:28      move second child to first child ( temp 4-component vector of uint)
+0:28        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:28          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28            'invocation' ( temp uint)
+0:28          Constant:
+0:28            2 (const int)
+0:28        subgroupPartitionNV ( global 4-component vector of uint)
+0:28          vector swizzle ( temp 3-component vector of int)
+0:28            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                1 (const int)
+0:28            Sequence
+0:28              Constant:
+0:28                0 (const int)
+0:28              Constant:
+0:28                1 (const int)
+0:28              Constant:
+0:28                2 (const int)
+0:29      move second child to first child ( temp 4-component vector of uint)
+0:29        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29            'invocation' ( temp uint)
+0:29          Constant:
+0:29            2 (const int)
+0:29        subgroupPartitionNV ( global 4-component vector of uint)
+0:29          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              Constant:
+0:29                0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:31      move second child to first child ( temp 4-component vector of uint)
+0:31        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31            'invocation' ( temp uint)
+0:31          Constant:
+0:31            2 (const int)
+0:31        subgroupPartitionNV ( global 4-component vector of uint)
+0:31          direct index ( temp uint)
+0:31            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                Constant:
+0:31                  0 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31            Constant:
+0:31              0 (const int)
+0:32      move second child to first child ( temp 4-component vector of uint)
+0:32        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'invocation' ( temp uint)
+0:32          Constant:
+0:32            2 (const int)
+0:32        subgroupPartitionNV ( global 4-component vector of uint)
+0:32          vector swizzle ( temp 2-component vector of uint)
+0:32            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32                Constant:
+0:32                  0 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:33      move second child to first child ( temp 4-component vector of uint)
+0:33        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:33          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33            'invocation' ( temp uint)
+0:33          Constant:
+0:33            2 (const int)
+0:33        subgroupPartitionNV ( global 4-component vector of uint)
+0:33          vector swizzle ( temp 3-component vector of uint)
+0:33            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:33              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                2 (const int)
+0:33            Sequence
+0:33              Constant:
+0:33                0 (const int)
+0:33              Constant:
+0:33                1 (const int)
+0:33              Constant:
+0:33                2 (const int)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:34          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34            'invocation' ( temp uint)
+0:34          Constant:
+0:34            2 (const int)
+0:34        subgroupPartitionNV ( global 4-component vector of uint)
+0:34          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:34            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              Constant:
+0:34                0 (const int)
+0:34            Constant:
+0:34              2 (const int)
+0:36      move second child to first child ( temp 4-component vector of uint)
+0:36        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:36          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36            'invocation' ( temp uint)
+0:36          Constant:
+0:36            2 (const int)
+0:36        subgroupPartitionNV ( global 4-component vector of uint)
+0:36          direct index ( temp double)
+0:36            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                Constant:
+0:36                  0 (const int)
+0:36              Constant:
+0:36                3 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:37      move second child to first child ( temp 4-component vector of uint)
+0:37        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:37          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'invocation' ( temp uint)
+0:37          Constant:
+0:37            2 (const int)
+0:37        subgroupPartitionNV ( global 4-component vector of uint)
+0:37          vector swizzle ( temp 2-component vector of double)
+0:37            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37                Constant:
+0:37                  0 (const int)
+0:37              Constant:
+0:37                3 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:38      move second child to first child ( temp 4-component vector of uint)
+0:38        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:38          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38            'invocation' ( temp uint)
+0:38          Constant:
+0:38            2 (const int)
+0:38        subgroupPartitionNV ( global 4-component vector of uint)
+0:38          vector swizzle ( temp 3-component vector of double)
+0:38            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:38              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                3 (const int)
+0:38            Sequence
+0:38              Constant:
+0:38                0 (const int)
+0:38              Constant:
+0:38                1 (const int)
+0:38              Constant:
+0:38                2 (const int)
+0:39      move second child to first child ( temp 4-component vector of uint)
+0:39        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:39          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39            'invocation' ( temp uint)
+0:39          Constant:
+0:39            2 (const int)
+0:39        subgroupPartitionNV ( global 4-component vector of uint)
+0:39          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:39            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              3 (const int)
+0:41      move second child to first child ( temp 4-component vector of uint)
+0:41        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:41          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41            'invocation' ( temp uint)
+0:41          Constant:
+0:41            2 (const int)
+0:41        subgroupPartitionNV ( global 4-component vector of uint)
+0:41          Convert int to bool ( temp bool)
+0:41            direct index ( temp int)
+0:41              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                  Constant:
+0:41                    0 (const int)
+0:41                Constant:
+0:41                  1 (const int)
+0:41              Constant:
+0:41                0 (const int)
+0:42      move second child to first child ( temp 4-component vector of uint)
+0:42        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:42          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'invocation' ( temp uint)
+0:42          Constant:
+0:42            2 (const int)
+0:42        subgroupPartitionNV ( global 4-component vector of uint)
+0:42          Convert int to bool ( temp 2-component vector of bool)
+0:42            vector swizzle ( temp 2-component vector of int)
+0:42              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  Constant:
+0:42                    0 (const int)
+0:42                Constant:
+0:42                  1 (const int)
+0:42              Sequence
+0:42                Constant:
+0:42                  0 (const int)
+0:42                Constant:
+0:42                  1 (const int)
+0:43      move second child to first child ( temp 4-component vector of uint)
+0:43        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:43          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:43            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:43            'invocation' ( temp uint)
+0:43          Constant:
+0:43            2 (const int)
+0:43        subgroupPartitionNV ( global 4-component vector of uint)
+0:43          Convert int to bool ( temp 3-component vector of bool)
+0:43            vector swizzle ( temp 3-component vector of int)
+0:43              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:43                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:43                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:43                  Constant:
+0:43                    0 (const int)
+0:43                Constant:
+0:43                  1 (const int)
+0:43              Sequence
+0:43                Constant:
+0:43                  0 (const int)
+0:43                Constant:
+0:43                  1 (const int)
+0:43                Constant:
+0:43                  2 (const int)
+0:44      move second child to first child ( temp 4-component vector of uint)
+0:44        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:44          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44            'invocation' ( temp uint)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupPartitionNV ( global 4-component vector of uint)
+0:44          Convert int to bool ( temp 4-component vector of bool)
+0:44            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                Constant:
+0:44                  0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:46      move second child to first child ( temp float)
+0:46        direct index ( temp float)
+0:46          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'invocation' ( temp uint)
+0:46            Constant:
+0:46              0 (const int)
+0:46          Constant:
+0:46            0 (const int)
+0:46        subgroupPartitionedAddNV ( global float)
+0:46          direct index ( temp float)
+0:46            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                Constant:
+0:46                  0 (const int)
+0:46              Constant:
+0:46                0 (const int)
+0:46            Constant:
+0:46              0 (const int)
+0:46          'ballot' ( temp 4-component vector of uint)
+0:47      move second child to first child ( temp 2-component vector of float)
+0:47        vector swizzle ( temp 2-component vector of float)
+0:47          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              'invocation' ( temp uint)
+0:47            Constant:
+0:47              0 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47        subgroupPartitionedAddNV ( global 2-component vector of float)
+0:47          vector swizzle ( temp 2-component vector of float)
+0:47            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47                Constant:
+0:47                  1 (const int)
+0:47              Constant:
+0:47                0 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47          'ballot' ( temp 4-component vector of uint)
+0:48      move second child to first child ( temp 3-component vector of float)
+0:48        vector swizzle ( temp 3-component vector of float)
+0:48          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:48            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:48              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:48              'invocation' ( temp uint)
+0:48            Constant:
+0:48              0 (const int)
+0:48          Sequence
+0:48            Constant:
+0:48              0 (const int)
+0:48            Constant:
+0:48              1 (const int)
+0:48            Constant:
+0:48              2 (const int)
+0:48        subgroupPartitionedAddNV ( global 3-component vector of float)
+0:48          vector swizzle ( temp 3-component vector of float)
+0:48            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:48              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:48                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:48                Constant:
+0:48                  2 (const int)
+0:48              Constant:
+0:48                0 (const int)
+0:48            Sequence
+0:48              Constant:
+0:48                0 (const int)
+0:48              Constant:
+0:48                1 (const int)
+0:48              Constant:
+0:48                2 (const int)
+0:48          'ballot' ( temp 4-component vector of uint)
+0:49      move second child to first child ( temp 4-component vector of float)
+0:49        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:49          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49            'invocation' ( temp uint)
+0:49          Constant:
+0:49            0 (const int)
+0:49        subgroupPartitionedAddNV ( global 4-component vector of float)
+0:49          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:49            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              Constant:
+0:49                3 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:49          'ballot' ( temp 4-component vector of uint)
+0:51      move second child to first child ( temp int)
+0:51        direct index ( temp int)
+0:51          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'invocation' ( temp uint)
+0:51            Constant:
+0:51              1 (const int)
+0:51          Constant:
+0:51            0 (const int)
+0:51        subgroupPartitionedAddNV ( global int)
+0:51          direct index ( temp int)
+0:51            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                Constant:
+0:51                  0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51            Constant:
+0:51              0 (const int)
+0:51          'ballot' ( temp 4-component vector of uint)
+0:52      move second child to first child ( temp 2-component vector of int)
+0:52        vector swizzle ( temp 2-component vector of int)
+0:52          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              'invocation' ( temp uint)
+0:52            Constant:
+0:52              1 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52        subgroupPartitionedAddNV ( global 2-component vector of int)
+0:52          vector swizzle ( temp 2-component vector of int)
+0:52            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52                Constant:
+0:52                  1 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52          'ballot' ( temp 4-component vector of uint)
+0:53      move second child to first child ( temp 3-component vector of int)
+0:53        vector swizzle ( temp 3-component vector of int)
+0:53          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:53            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:53              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:53              'invocation' ( temp uint)
+0:53            Constant:
+0:53              1 (const int)
+0:53          Sequence
+0:53            Constant:
+0:53              0 (const int)
+0:53            Constant:
+0:53              1 (const int)
+0:53            Constant:
+0:53              2 (const int)
+0:53        subgroupPartitionedAddNV ( global 3-component vector of int)
+0:53          vector swizzle ( temp 3-component vector of int)
+0:53            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:53              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:53                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:53                Constant:
+0:53                  2 (const int)
+0:53              Constant:
+0:53                1 (const int)
+0:53            Sequence
+0:53              Constant:
+0:53                0 (const int)
+0:53              Constant:
+0:53                1 (const int)
+0:53              Constant:
+0:53                2 (const int)
+0:53          'ballot' ( temp 4-component vector of uint)
+0:54      move second child to first child ( temp 4-component vector of int)
+0:54        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54            'invocation' ( temp uint)
+0:54          Constant:
+0:54            1 (const int)
+0:54        subgroupPartitionedAddNV ( global 4-component vector of int)
+0:54          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              Constant:
+0:54                3 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54          'ballot' ( temp 4-component vector of uint)
+0:56      move second child to first child ( temp uint)
+0:56        direct index ( temp uint)
+0:56          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'invocation' ( temp uint)
+0:56            Constant:
+0:56              2 (const int)
+0:56          Constant:
+0:56            0 (const int)
+0:56        subgroupPartitionedAddNV ( global uint)
+0:56          direct index ( temp uint)
+0:56            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                Constant:
+0:56                  0 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:56            Constant:
+0:56              0 (const int)
+0:56          'ballot' ( temp 4-component vector of uint)
+0:57      move second child to first child ( temp 2-component vector of uint)
+0:57        vector swizzle ( temp 2-component vector of uint)
+0:57          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              'invocation' ( temp uint)
+0:57            Constant:
+0:57              2 (const int)
+0:57          Sequence
+0:57            Constant:
+0:57              0 (const int)
+0:57            Constant:
+0:57              1 (const int)
+0:57        subgroupPartitionedAddNV ( global 2-component vector of uint)
+0:57          vector swizzle ( temp 2-component vector of uint)
+0:57            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57                Constant:
+0:57                  1 (const int)
+0:57              Constant:
+0:57                2 (const int)
+0:57            Sequence
+0:57              Constant:
+0:57                0 (const int)
+0:57              Constant:
+0:57                1 (const int)
+0:57          'ballot' ( temp 4-component vector of uint)
+0:58      move second child to first child ( temp 3-component vector of uint)
+0:58        vector swizzle ( temp 3-component vector of uint)
+0:58          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:58            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:58              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:58              'invocation' ( temp uint)
+0:58            Constant:
+0:58              2 (const int)
+0:58          Sequence
+0:58            Constant:
+0:58              0 (const int)
+0:58            Constant:
+0:58              1 (const int)
+0:58            Constant:
+0:58              2 (const int)
+0:58        subgroupPartitionedAddNV ( global 3-component vector of uint)
+0:58          vector swizzle ( temp 3-component vector of uint)
+0:58            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:58              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:58                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:58                Constant:
+0:58                  2 (const int)
+0:58              Constant:
+0:58                2 (const int)
+0:58            Sequence
+0:58              Constant:
+0:58                0 (const int)
+0:58              Constant:
+0:58                1 (const int)
+0:58              Constant:
+0:58                2 (const int)
+0:58          'ballot' ( temp 4-component vector of uint)
+0:59      move second child to first child ( temp 4-component vector of uint)
+0:59        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:59          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59            'invocation' ( temp uint)
+0:59          Constant:
+0:59            2 (const int)
+0:59        subgroupPartitionedAddNV ( global 4-component vector of uint)
+0:59          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:59            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              Constant:
+0:59                3 (const int)
+0:59            Constant:
+0:59              2 (const int)
+0:59          'ballot' ( temp 4-component vector of uint)
+0:61      move second child to first child ( temp double)
+0:61        direct index ( temp double)
+0:61          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'invocation' ( temp uint)
+0:61            Constant:
+0:61              3 (const int)
+0:61          Constant:
+0:61            0 (const int)
+0:61        subgroupPartitionedAddNV ( global double)
+0:61          direct index ( temp double)
+0:61            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                Constant:
+0:61                  0 (const int)
+0:61              Constant:
+0:61                3 (const int)
+0:61            Constant:
+0:61              0 (const int)
+0:61          'ballot' ( temp 4-component vector of uint)
+0:62      move second child to first child ( temp 2-component vector of double)
+0:62        vector swizzle ( temp 2-component vector of double)
+0:62          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              'invocation' ( temp uint)
+0:62            Constant:
+0:62              3 (const int)
+0:62          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62        subgroupPartitionedAddNV ( global 2-component vector of double)
+0:62          vector swizzle ( temp 2-component vector of double)
+0:62            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62                Constant:
+0:62                  1 (const int)
+0:62              Constant:
+0:62                3 (const int)
+0:62            Sequence
+0:62              Constant:
+0:62                0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62          'ballot' ( temp 4-component vector of uint)
+0:63      move second child to first child ( temp 3-component vector of double)
+0:63        vector swizzle ( temp 3-component vector of double)
+0:63          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:63            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63              'invocation' ( temp uint)
+0:63            Constant:
+0:63              3 (const int)
+0:63          Sequence
+0:63            Constant:
+0:63              0 (const int)
+0:63            Constant:
+0:63              1 (const int)
+0:63            Constant:
+0:63              2 (const int)
+0:63        subgroupPartitionedAddNV ( global 3-component vector of double)
+0:63          vector swizzle ( temp 3-component vector of double)
+0:63            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:63              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:63                Constant:
+0:63                  2 (const int)
+0:63              Constant:
+0:63                3 (const int)
+0:63            Sequence
+0:63              Constant:
+0:63                0 (const int)
+0:63              Constant:
+0:63                1 (const int)
+0:63              Constant:
+0:63                2 (const int)
+0:63          'ballot' ( temp 4-component vector of uint)
+0:64      move second child to first child ( temp 4-component vector of double)
+0:64        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:64          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64            'invocation' ( temp uint)
+0:64          Constant:
+0:64            3 (const int)
+0:64        subgroupPartitionedAddNV ( global 4-component vector of double)
+0:64          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:64            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              Constant:
+0:64                3 (const int)
+0:64            Constant:
+0:64              3 (const int)
+0:64          'ballot' ( temp 4-component vector of uint)
+0:66      move second child to first child ( temp float)
+0:66        direct index ( temp float)
+0:66          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:66            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'invocation' ( temp uint)
+0:66            Constant:
+0:66              0 (const int)
+0:66          Constant:
+0:66            0 (const int)
+0:66        subgroupPartitionedMulNV ( global float)
+0:66          direct index ( temp float)
+0:66            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:66              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                Constant:
+0:66                  0 (const int)
+0:66              Constant:
+0:66                0 (const int)
+0:66            Constant:
+0:66              0 (const int)
+0:66          'ballot' ( temp 4-component vector of uint)
+0:67      move second child to first child ( temp 2-component vector of float)
+0:67        vector swizzle ( temp 2-component vector of float)
+0:67          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:67            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67              'invocation' ( temp uint)
+0:67            Constant:
+0:67              0 (const int)
+0:67          Sequence
+0:67            Constant:
+0:67              0 (const int)
+0:67            Constant:
+0:67              1 (const int)
+0:67        subgroupPartitionedMulNV ( global 2-component vector of float)
+0:67          vector swizzle ( temp 2-component vector of float)
+0:67            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:67              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                Constant:
+0:67                  1 (const int)
+0:67              Constant:
+0:67                0 (const int)
+0:67            Sequence
+0:67              Constant:
+0:67                0 (const int)
+0:67              Constant:
+0:67                1 (const int)
+0:67          'ballot' ( temp 4-component vector of uint)
+0:68      move second child to first child ( temp 3-component vector of float)
+0:68        vector swizzle ( temp 3-component vector of float)
+0:68          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:68            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68              'invocation' ( temp uint)
+0:68            Constant:
+0:68              0 (const int)
+0:68          Sequence
+0:68            Constant:
+0:68              0 (const int)
+0:68            Constant:
+0:68              1 (const int)
+0:68            Constant:
+0:68              2 (const int)
+0:68        subgroupPartitionedMulNV ( global 3-component vector of float)
+0:68          vector swizzle ( temp 3-component vector of float)
+0:68            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:68              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:68                Constant:
+0:68                  2 (const int)
+0:68              Constant:
+0:68                0 (const int)
+0:68            Sequence
+0:68              Constant:
+0:68                0 (const int)
+0:68              Constant:
+0:68                1 (const int)
+0:68              Constant:
+0:68                2 (const int)
+0:68          'ballot' ( temp 4-component vector of uint)
+0:69      move second child to first child ( temp 4-component vector of float)
+0:69        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:69          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69            'invocation' ( temp uint)
+0:69          Constant:
+0:69            0 (const int)
+0:69        subgroupPartitionedMulNV ( global 4-component vector of float)
+0:69          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:69            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              Constant:
+0:69                3 (const int)
+0:69            Constant:
+0:69              0 (const int)
+0:69          'ballot' ( temp 4-component vector of uint)
+0:71      move second child to first child ( temp int)
+0:71        direct index ( temp int)
+0:71          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:71            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'invocation' ( temp uint)
+0:71            Constant:
+0:71              1 (const int)
+0:71          Constant:
+0:71            0 (const int)
+0:71        subgroupPartitionedMulNV ( global int)
+0:71          direct index ( temp int)
+0:71            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:71              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                Constant:
+0:71                  0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:71            Constant:
+0:71              0 (const int)
+0:71          'ballot' ( temp 4-component vector of uint)
+0:72      move second child to first child ( temp 2-component vector of int)
+0:72        vector swizzle ( temp 2-component vector of int)
+0:72          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:72            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72              'invocation' ( temp uint)
+0:72            Constant:
+0:72              1 (const int)
+0:72          Sequence
+0:72            Constant:
+0:72              0 (const int)
+0:72            Constant:
+0:72              1 (const int)
+0:72        subgroupPartitionedMulNV ( global 2-component vector of int)
+0:72          vector swizzle ( temp 2-component vector of int)
+0:72            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:72              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72                Constant:
+0:72                  1 (const int)
+0:72              Constant:
+0:72                1 (const int)
+0:72            Sequence
+0:72              Constant:
+0:72                0 (const int)
+0:72              Constant:
+0:72                1 (const int)
+0:72          'ballot' ( temp 4-component vector of uint)
+0:73      move second child to first child ( temp 3-component vector of int)
+0:73        vector swizzle ( temp 3-component vector of int)
+0:73          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:73            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73              'invocation' ( temp uint)
+0:73            Constant:
+0:73              1 (const int)
+0:73          Sequence
+0:73            Constant:
+0:73              0 (const int)
+0:73            Constant:
+0:73              1 (const int)
+0:73            Constant:
+0:73              2 (const int)
+0:73        subgroupPartitionedMulNV ( global 3-component vector of int)
+0:73          vector swizzle ( temp 3-component vector of int)
+0:73            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:73              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:73                Constant:
+0:73                  2 (const int)
+0:73              Constant:
+0:73                1 (const int)
+0:73            Sequence
+0:73              Constant:
+0:73                0 (const int)
+0:73              Constant:
+0:73                1 (const int)
+0:73              Constant:
+0:73                2 (const int)
+0:73          'ballot' ( temp 4-component vector of uint)
+0:74      move second child to first child ( temp 4-component vector of int)
+0:74        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:74          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74            'invocation' ( temp uint)
+0:74          Constant:
+0:74            1 (const int)
+0:74        subgroupPartitionedMulNV ( global 4-component vector of int)
+0:74          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:74            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74              Constant:
+0:74                3 (const int)
+0:74            Constant:
+0:74              1 (const int)
+0:74          'ballot' ( temp 4-component vector of uint)
+0:76      move second child to first child ( temp uint)
+0:76        direct index ( temp uint)
+0:76          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:76            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76              'invocation' ( temp uint)
+0:76            Constant:
+0:76              2 (const int)
+0:76          Constant:
+0:76            0 (const int)
+0:76        subgroupPartitionedMulNV ( global uint)
+0:76          direct index ( temp uint)
+0:76            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:76              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                Constant:
+0:76                  0 (const int)
+0:76              Constant:
+0:76                2 (const int)
+0:76            Constant:
+0:76              0 (const int)
+0:76          'ballot' ( temp 4-component vector of uint)
+0:77      move second child to first child ( temp 2-component vector of uint)
+0:77        vector swizzle ( temp 2-component vector of uint)
+0:77          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:77            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77              'invocation' ( temp uint)
+0:77            Constant:
+0:77              2 (const int)
+0:77          Sequence
+0:77            Constant:
+0:77              0 (const int)
+0:77            Constant:
+0:77              1 (const int)
+0:77        subgroupPartitionedMulNV ( global 2-component vector of uint)
+0:77          vector swizzle ( temp 2-component vector of uint)
+0:77            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:77              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77                Constant:
+0:77                  1 (const int)
+0:77              Constant:
+0:77                2 (const int)
+0:77            Sequence
+0:77              Constant:
+0:77                0 (const int)
+0:77              Constant:
+0:77                1 (const int)
+0:77          'ballot' ( temp 4-component vector of uint)
+0:78      move second child to first child ( temp 3-component vector of uint)
+0:78        vector swizzle ( temp 3-component vector of uint)
+0:78          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:78            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78              'invocation' ( temp uint)
+0:78            Constant:
+0:78              2 (const int)
+0:78          Sequence
+0:78            Constant:
+0:78              0 (const int)
+0:78            Constant:
+0:78              1 (const int)
+0:78            Constant:
+0:78              2 (const int)
+0:78        subgroupPartitionedMulNV ( global 3-component vector of uint)
+0:78          vector swizzle ( temp 3-component vector of uint)
+0:78            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:78              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:78                Constant:
+0:78                  2 (const int)
+0:78              Constant:
+0:78                2 (const int)
+0:78            Sequence
+0:78              Constant:
+0:78                0 (const int)
+0:78              Constant:
+0:78                1 (const int)
+0:78              Constant:
+0:78                2 (const int)
+0:78          'ballot' ( temp 4-component vector of uint)
+0:79      move second child to first child ( temp 4-component vector of uint)
+0:79        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:79          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79            'invocation' ( temp uint)
+0:79          Constant:
+0:79            2 (const int)
+0:79        subgroupPartitionedMulNV ( global 4-component vector of uint)
+0:79          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:79            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79              Constant:
+0:79                3 (const int)
+0:79            Constant:
+0:79              2 (const int)
+0:79          'ballot' ( temp 4-component vector of uint)
+0:81      move second child to first child ( temp double)
+0:81        direct index ( temp double)
+0:81          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:81            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81              'invocation' ( temp uint)
+0:81            Constant:
+0:81              3 (const int)
+0:81          Constant:
+0:81            0 (const int)
+0:81        subgroupPartitionedMulNV ( global double)
+0:81          direct index ( temp double)
+0:81            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:81              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                Constant:
+0:81                  0 (const int)
+0:81              Constant:
+0:81                3 (const int)
+0:81            Constant:
+0:81              0 (const int)
+0:81          'ballot' ( temp 4-component vector of uint)
+0:82      move second child to first child ( temp 2-component vector of double)
+0:82        vector swizzle ( temp 2-component vector of double)
+0:82          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:82            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82              'invocation' ( temp uint)
+0:82            Constant:
+0:82              3 (const int)
+0:82          Sequence
+0:82            Constant:
+0:82              0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82        subgroupPartitionedMulNV ( global 2-component vector of double)
+0:82          vector swizzle ( temp 2-component vector of double)
+0:82            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:82              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82                Constant:
+0:82                  1 (const int)
+0:82              Constant:
+0:82                3 (const int)
+0:82            Sequence
+0:82              Constant:
+0:82                0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82          'ballot' ( temp 4-component vector of uint)
+0:83      move second child to first child ( temp 3-component vector of double)
+0:83        vector swizzle ( temp 3-component vector of double)
+0:83          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:83            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83              'invocation' ( temp uint)
+0:83            Constant:
+0:83              3 (const int)
+0:83          Sequence
+0:83            Constant:
+0:83              0 (const int)
+0:83            Constant:
+0:83              1 (const int)
+0:83            Constant:
+0:83              2 (const int)
+0:83        subgroupPartitionedMulNV ( global 3-component vector of double)
+0:83          vector swizzle ( temp 3-component vector of double)
+0:83            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:83              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:83                Constant:
+0:83                  2 (const int)
+0:83              Constant:
+0:83                3 (const int)
+0:83            Sequence
+0:83              Constant:
+0:83                0 (const int)
+0:83              Constant:
+0:83                1 (const int)
+0:83              Constant:
+0:83                2 (const int)
+0:83          'ballot' ( temp 4-component vector of uint)
+0:84      move second child to first child ( temp 4-component vector of double)
+0:84        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:84          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84            'invocation' ( temp uint)
+0:84          Constant:
+0:84            3 (const int)
+0:84        subgroupPartitionedMulNV ( global 4-component vector of double)
+0:84          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:84            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84              Constant:
+0:84                3 (const int)
+0:84            Constant:
+0:84              3 (const int)
+0:84          'ballot' ( temp 4-component vector of uint)
+0:86      move second child to first child ( temp float)
+0:86        direct index ( temp float)
+0:86          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:86            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86              'invocation' ( temp uint)
+0:86            Constant:
+0:86              0 (const int)
+0:86          Constant:
+0:86            0 (const int)
+0:86        subgroupPartitionedMinNV ( global float)
+0:86          direct index ( temp float)
+0:86            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:86              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86                Constant:
+0:86                  0 (const int)
+0:86              Constant:
+0:86                0 (const int)
+0:86            Constant:
+0:86              0 (const int)
+0:86          'ballot' ( temp 4-component vector of uint)
+0:87      move second child to first child ( temp 2-component vector of float)
+0:87        vector swizzle ( temp 2-component vector of float)
+0:87          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:87            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87              'invocation' ( temp uint)
+0:87            Constant:
+0:87              0 (const int)
+0:87          Sequence
+0:87            Constant:
+0:87              0 (const int)
+0:87            Constant:
+0:87              1 (const int)
+0:87        subgroupPartitionedMinNV ( global 2-component vector of float)
+0:87          vector swizzle ( temp 2-component vector of float)
+0:87            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:87              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87                Constant:
+0:87                  1 (const int)
+0:87              Constant:
+0:87                0 (const int)
+0:87            Sequence
+0:87              Constant:
+0:87                0 (const int)
+0:87              Constant:
+0:87                1 (const int)
+0:87          'ballot' ( temp 4-component vector of uint)
+0:88      move second child to first child ( temp 3-component vector of float)
+0:88        vector swizzle ( temp 3-component vector of float)
+0:88          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:88            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:88              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:88              'invocation' ( temp uint)
+0:88            Constant:
+0:88              0 (const int)
+0:88          Sequence
+0:88            Constant:
+0:88              0 (const int)
+0:88            Constant:
+0:88              1 (const int)
+0:88            Constant:
+0:88              2 (const int)
+0:88        subgroupPartitionedMinNV ( global 3-component vector of float)
+0:88          vector swizzle ( temp 3-component vector of float)
+0:88            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:88              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:88                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:88                Constant:
+0:88                  2 (const int)
+0:88              Constant:
+0:88                0 (const int)
+0:88            Sequence
+0:88              Constant:
+0:88                0 (const int)
+0:88              Constant:
+0:88                1 (const int)
+0:88              Constant:
+0:88                2 (const int)
+0:88          'ballot' ( temp 4-component vector of uint)
+0:89      move second child to first child ( temp 4-component vector of float)
+0:89        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:89          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89            'invocation' ( temp uint)
+0:89          Constant:
+0:89            0 (const int)
+0:89        subgroupPartitionedMinNV ( global 4-component vector of float)
+0:89          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:89            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89              Constant:
+0:89                3 (const int)
+0:89            Constant:
+0:89              0 (const int)
+0:89          'ballot' ( temp 4-component vector of uint)
+0:91      move second child to first child ( temp int)
+0:91        direct index ( temp int)
+0:91          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:91            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91              'invocation' ( temp uint)
+0:91            Constant:
+0:91              1 (const int)
+0:91          Constant:
+0:91            0 (const int)
+0:91        subgroupPartitionedMinNV ( global int)
+0:91          direct index ( temp int)
+0:91            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:91              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91                Constant:
+0:91                  0 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:91            Constant:
+0:91              0 (const int)
+0:91          'ballot' ( temp 4-component vector of uint)
+0:92      move second child to first child ( temp 2-component vector of int)
+0:92        vector swizzle ( temp 2-component vector of int)
+0:92          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:92            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92              'invocation' ( temp uint)
+0:92            Constant:
+0:92              1 (const int)
+0:92          Sequence
+0:92            Constant:
+0:92              0 (const int)
+0:92            Constant:
+0:92              1 (const int)
+0:92        subgroupPartitionedMinNV ( global 2-component vector of int)
+0:92          vector swizzle ( temp 2-component vector of int)
+0:92            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:92              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92                Constant:
+0:92                  1 (const int)
+0:92              Constant:
+0:92                1 (const int)
+0:92            Sequence
+0:92              Constant:
+0:92                0 (const int)
+0:92              Constant:
+0:92                1 (const int)
+0:92          'ballot' ( temp 4-component vector of uint)
+0:93      move second child to first child ( temp 3-component vector of int)
+0:93        vector swizzle ( temp 3-component vector of int)
+0:93          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:93            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:93              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:93              'invocation' ( temp uint)
+0:93            Constant:
+0:93              1 (const int)
+0:93          Sequence
+0:93            Constant:
+0:93              0 (const int)
+0:93            Constant:
+0:93              1 (const int)
+0:93            Constant:
+0:93              2 (const int)
+0:93        subgroupPartitionedMinNV ( global 3-component vector of int)
+0:93          vector swizzle ( temp 3-component vector of int)
+0:93            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:93              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:93                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:93                Constant:
+0:93                  2 (const int)
+0:93              Constant:
+0:93                1 (const int)
+0:93            Sequence
+0:93              Constant:
+0:93                0 (const int)
+0:93              Constant:
+0:93                1 (const int)
+0:93              Constant:
+0:93                2 (const int)
+0:93          'ballot' ( temp 4-component vector of uint)
+0:94      move second child to first child ( temp 4-component vector of int)
+0:94        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:94          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94            'invocation' ( temp uint)
+0:94          Constant:
+0:94            1 (const int)
+0:94        subgroupPartitionedMinNV ( global 4-component vector of int)
+0:94          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:94            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94              Constant:
+0:94                3 (const int)
+0:94            Constant:
+0:94              1 (const int)
+0:94          'ballot' ( temp 4-component vector of uint)
+0:96      move second child to first child ( temp uint)
+0:96        direct index ( temp uint)
+0:96          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:96            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96              'invocation' ( temp uint)
+0:96            Constant:
+0:96              2 (const int)
+0:96          Constant:
+0:96            0 (const int)
+0:96        subgroupPartitionedMinNV ( global uint)
+0:96          direct index ( temp uint)
+0:96            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:96              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96                Constant:
+0:96                  0 (const int)
+0:96              Constant:
+0:96                2 (const int)
+0:96            Constant:
+0:96              0 (const int)
+0:96          'ballot' ( temp 4-component vector of uint)
+0:97      move second child to first child ( temp 2-component vector of uint)
+0:97        vector swizzle ( temp 2-component vector of uint)
+0:97          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:97            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97              'invocation' ( temp uint)
+0:97            Constant:
+0:97              2 (const int)
+0:97          Sequence
+0:97            Constant:
+0:97              0 (const int)
+0:97            Constant:
+0:97              1 (const int)
+0:97        subgroupPartitionedMinNV ( global 2-component vector of uint)
+0:97          vector swizzle ( temp 2-component vector of uint)
+0:97            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:97              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97                Constant:
+0:97                  1 (const int)
+0:97              Constant:
+0:97                2 (const int)
+0:97            Sequence
+0:97              Constant:
+0:97                0 (const int)
+0:97              Constant:
+0:97                1 (const int)
+0:97          'ballot' ( temp 4-component vector of uint)
+0:98      move second child to first child ( temp 3-component vector of uint)
+0:98        vector swizzle ( temp 3-component vector of uint)
+0:98          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:98            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:98              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:98              'invocation' ( temp uint)
+0:98            Constant:
+0:98              2 (const int)
+0:98          Sequence
+0:98            Constant:
+0:98              0 (const int)
+0:98            Constant:
+0:98              1 (const int)
+0:98            Constant:
+0:98              2 (const int)
+0:98        subgroupPartitionedMinNV ( global 3-component vector of uint)
+0:98          vector swizzle ( temp 3-component vector of uint)
+0:98            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:98              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:98                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:98                Constant:
+0:98                  2 (const int)
+0:98              Constant:
+0:98                2 (const int)
+0:98            Sequence
+0:98              Constant:
+0:98                0 (const int)
+0:98              Constant:
+0:98                1 (const int)
+0:98              Constant:
+0:98                2 (const int)
+0:98          'ballot' ( temp 4-component vector of uint)
+0:99      move second child to first child ( temp 4-component vector of uint)
+0:99        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:99          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99            'invocation' ( temp uint)
+0:99          Constant:
+0:99            2 (const int)
+0:99        subgroupPartitionedMinNV ( global 4-component vector of uint)
+0:99          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:99            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99              Constant:
+0:99                3 (const int)
+0:99            Constant:
+0:99              2 (const int)
+0:99          'ballot' ( temp 4-component vector of uint)
+0:101      move second child to first child ( temp double)
+0:101        direct index ( temp double)
+0:101          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:101            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101              'invocation' ( temp uint)
+0:101            Constant:
+0:101              3 (const int)
+0:101          Constant:
+0:101            0 (const int)
+0:101        subgroupPartitionedMinNV ( global double)
+0:101          direct index ( temp double)
+0:101            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:101              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101                Constant:
+0:101                  0 (const int)
+0:101              Constant:
+0:101                3 (const int)
+0:101            Constant:
+0:101              0 (const int)
+0:101          'ballot' ( temp 4-component vector of uint)
+0:102      move second child to first child ( temp 2-component vector of double)
+0:102        vector swizzle ( temp 2-component vector of double)
+0:102          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:102            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102              'invocation' ( temp uint)
+0:102            Constant:
+0:102              3 (const int)
+0:102          Sequence
+0:102            Constant:
+0:102              0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102        subgroupPartitionedMinNV ( global 2-component vector of double)
+0:102          vector swizzle ( temp 2-component vector of double)
+0:102            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:102              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102                Constant:
+0:102                  1 (const int)
+0:102              Constant:
+0:102                3 (const int)
+0:102            Sequence
+0:102              Constant:
+0:102                0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102          'ballot' ( temp 4-component vector of uint)
+0:103      move second child to first child ( temp 3-component vector of double)
+0:103        vector swizzle ( temp 3-component vector of double)
+0:103          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:103            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:103              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:103              'invocation' ( temp uint)
+0:103            Constant:
+0:103              3 (const int)
+0:103          Sequence
+0:103            Constant:
+0:103              0 (const int)
+0:103            Constant:
+0:103              1 (const int)
+0:103            Constant:
+0:103              2 (const int)
+0:103        subgroupPartitionedMinNV ( global 3-component vector of double)
+0:103          vector swizzle ( temp 3-component vector of double)
+0:103            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:103              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:103                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:103                Constant:
+0:103                  2 (const int)
+0:103              Constant:
+0:103                3 (const int)
+0:103            Sequence
+0:103              Constant:
+0:103                0 (const int)
+0:103              Constant:
+0:103                1 (const int)
+0:103              Constant:
+0:103                2 (const int)
+0:103          'ballot' ( temp 4-component vector of uint)
+0:104      move second child to first child ( temp 4-component vector of double)
+0:104        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:104          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104            'invocation' ( temp uint)
+0:104          Constant:
+0:104            3 (const int)
+0:104        subgroupPartitionedMinNV ( global 4-component vector of double)
+0:104          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:104            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104              Constant:
+0:104                3 (const int)
+0:104            Constant:
+0:104              3 (const int)
+0:104          'ballot' ( temp 4-component vector of uint)
+0:106      move second child to first child ( temp float)
+0:106        direct index ( temp float)
+0:106          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:106            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106              'invocation' ( temp uint)
+0:106            Constant:
+0:106              0 (const int)
+0:106          Constant:
+0:106            0 (const int)
+0:106        subgroupPartitionedMaxNV ( global float)
+0:106          direct index ( temp float)
+0:106            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:106              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106                Constant:
+0:106                  0 (const int)
+0:106              Constant:
+0:106                0 (const int)
+0:106            Constant:
+0:106              0 (const int)
+0:106          'ballot' ( temp 4-component vector of uint)
+0:107      move second child to first child ( temp 2-component vector of float)
+0:107        vector swizzle ( temp 2-component vector of float)
+0:107          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:107            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107              'invocation' ( temp uint)
+0:107            Constant:
+0:107              0 (const int)
+0:107          Sequence
+0:107            Constant:
+0:107              0 (const int)
+0:107            Constant:
+0:107              1 (const int)
+0:107        subgroupPartitionedMaxNV ( global 2-component vector of float)
+0:107          vector swizzle ( temp 2-component vector of float)
+0:107            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:107              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107                Constant:
+0:107                  1 (const int)
+0:107              Constant:
+0:107                0 (const int)
+0:107            Sequence
+0:107              Constant:
+0:107                0 (const int)
+0:107              Constant:
+0:107                1 (const int)
+0:107          'ballot' ( temp 4-component vector of uint)
+0:108      move second child to first child ( temp 3-component vector of float)
+0:108        vector swizzle ( temp 3-component vector of float)
+0:108          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:108            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:108              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:108              'invocation' ( temp uint)
+0:108            Constant:
+0:108              0 (const int)
+0:108          Sequence
+0:108            Constant:
+0:108              0 (const int)
+0:108            Constant:
+0:108              1 (const int)
+0:108            Constant:
+0:108              2 (const int)
+0:108        subgroupPartitionedMaxNV ( global 3-component vector of float)
+0:108          vector swizzle ( temp 3-component vector of float)
+0:108            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:108              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:108                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:108                Constant:
+0:108                  2 (const int)
+0:108              Constant:
+0:108                0 (const int)
+0:108            Sequence
+0:108              Constant:
+0:108                0 (const int)
+0:108              Constant:
+0:108                1 (const int)
+0:108              Constant:
+0:108                2 (const int)
+0:108          'ballot' ( temp 4-component vector of uint)
+0:109      move second child to first child ( temp 4-component vector of float)
+0:109        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:109          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109            'invocation' ( temp uint)
+0:109          Constant:
+0:109            0 (const int)
+0:109        subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:109          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:109            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109              Constant:
+0:109                3 (const int)
+0:109            Constant:
+0:109              0 (const int)
+0:109          'ballot' ( temp 4-component vector of uint)
+0:111      move second child to first child ( temp int)
+0:111        direct index ( temp int)
+0:111          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111              'invocation' ( temp uint)
+0:111            Constant:
+0:111              1 (const int)
+0:111          Constant:
+0:111            0 (const int)
+0:111        subgroupPartitionedMaxNV ( global int)
+0:111          direct index ( temp int)
+0:111            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:111              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111                Constant:
+0:111                  0 (const int)
+0:111              Constant:
+0:111                1 (const int)
+0:111            Constant:
+0:111              0 (const int)
+0:111          'ballot' ( temp 4-component vector of uint)
+0:112      move second child to first child ( temp 2-component vector of int)
+0:112        vector swizzle ( temp 2-component vector of int)
+0:112          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112              'invocation' ( temp uint)
+0:112            Constant:
+0:112              1 (const int)
+0:112          Sequence
+0:112            Constant:
+0:112              0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112        subgroupPartitionedMaxNV ( global 2-component vector of int)
+0:112          vector swizzle ( temp 2-component vector of int)
+0:112            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:112              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112                Constant:
+0:112                  1 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112            Sequence
+0:112              Constant:
+0:112                0 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112          'ballot' ( temp 4-component vector of uint)
+0:113      move second child to first child ( temp 3-component vector of int)
+0:113        vector swizzle ( temp 3-component vector of int)
+0:113          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:113            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:113              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:113              'invocation' ( temp uint)
+0:113            Constant:
+0:113              1 (const int)
+0:113          Sequence
+0:113            Constant:
+0:113              0 (const int)
+0:113            Constant:
+0:113              1 (const int)
+0:113            Constant:
+0:113              2 (const int)
+0:113        subgroupPartitionedMaxNV ( global 3-component vector of int)
+0:113          vector swizzle ( temp 3-component vector of int)
+0:113            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:113              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:113                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:113                Constant:
+0:113                  2 (const int)
+0:113              Constant:
+0:113                1 (const int)
+0:113            Sequence
+0:113              Constant:
+0:113                0 (const int)
+0:113              Constant:
+0:113                1 (const int)
+0:113              Constant:
+0:113                2 (const int)
+0:113          'ballot' ( temp 4-component vector of uint)
+0:114      move second child to first child ( temp 4-component vector of int)
+0:114        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114            'invocation' ( temp uint)
+0:114          Constant:
+0:114            1 (const int)
+0:114        subgroupPartitionedMaxNV ( global 4-component vector of int)
+0:114          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114              Constant:
+0:114                3 (const int)
+0:114            Constant:
+0:114              1 (const int)
+0:114          'ballot' ( temp 4-component vector of uint)
+0:116      move second child to first child ( temp uint)
+0:116        direct index ( temp uint)
+0:116          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:116            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116              'invocation' ( temp uint)
+0:116            Constant:
+0:116              2 (const int)
+0:116          Constant:
+0:116            0 (const int)
+0:116        subgroupPartitionedMaxNV ( global uint)
+0:116          direct index ( temp uint)
+0:116            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:116              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116                Constant:
+0:116                  0 (const int)
+0:116              Constant:
+0:116                2 (const int)
+0:116            Constant:
+0:116              0 (const int)
+0:116          'ballot' ( temp 4-component vector of uint)
+0:117      move second child to first child ( temp 2-component vector of uint)
+0:117        vector swizzle ( temp 2-component vector of uint)
+0:117          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:117            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117              'invocation' ( temp uint)
+0:117            Constant:
+0:117              2 (const int)
+0:117          Sequence
+0:117            Constant:
+0:117              0 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:117        subgroupPartitionedMaxNV ( global 2-component vector of uint)
+0:117          vector swizzle ( temp 2-component vector of uint)
+0:117            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:117              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117                Constant:
+0:117                  1 (const int)
+0:117              Constant:
+0:117                2 (const int)
+0:117            Sequence
+0:117              Constant:
+0:117                0 (const int)
+0:117              Constant:
+0:117                1 (const int)
+0:117          'ballot' ( temp 4-component vector of uint)
+0:118      move second child to first child ( temp 3-component vector of uint)
+0:118        vector swizzle ( temp 3-component vector of uint)
+0:118          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:118            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:118              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:118              'invocation' ( temp uint)
+0:118            Constant:
+0:118              2 (const int)
+0:118          Sequence
+0:118            Constant:
+0:118              0 (const int)
+0:118            Constant:
+0:118              1 (const int)
+0:118            Constant:
+0:118              2 (const int)
+0:118        subgroupPartitionedMaxNV ( global 3-component vector of uint)
+0:118          vector swizzle ( temp 3-component vector of uint)
+0:118            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:118              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:118                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:118                Constant:
+0:118                  2 (const int)
+0:118              Constant:
+0:118                2 (const int)
+0:118            Sequence
+0:118              Constant:
+0:118                0 (const int)
+0:118              Constant:
+0:118                1 (const int)
+0:118              Constant:
+0:118                2 (const int)
+0:118          'ballot' ( temp 4-component vector of uint)
+0:119      move second child to first child ( temp 4-component vector of uint)
+0:119        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119            'invocation' ( temp uint)
+0:119          Constant:
+0:119            2 (const int)
+0:119        subgroupPartitionedMaxNV ( global 4-component vector of uint)
+0:119          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:119            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:119              Constant:
+0:119                3 (const int)
+0:119            Constant:
+0:119              2 (const int)
+0:119          'ballot' ( temp 4-component vector of uint)
+0:121      move second child to first child ( temp double)
+0:121        direct index ( temp double)
+0:121          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:121            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121              'invocation' ( temp uint)
+0:121            Constant:
+0:121              3 (const int)
+0:121          Constant:
+0:121            0 (const int)
+0:121        subgroupPartitionedMaxNV ( global double)
+0:121          direct index ( temp double)
+0:121            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:121              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:121                Constant:
+0:121                  0 (const int)
+0:121              Constant:
+0:121                3 (const int)
+0:121            Constant:
+0:121              0 (const int)
+0:121          'ballot' ( temp 4-component vector of uint)
+0:122      move second child to first child ( temp 2-component vector of double)
+0:122        vector swizzle ( temp 2-component vector of double)
+0:122          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:122            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122              'invocation' ( temp uint)
+0:122            Constant:
+0:122              3 (const int)
+0:122          Sequence
+0:122            Constant:
+0:122              0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122        subgroupPartitionedMaxNV ( global 2-component vector of double)
+0:122          vector swizzle ( temp 2-component vector of double)
+0:122            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:122              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:122                Constant:
+0:122                  1 (const int)
+0:122              Constant:
+0:122                3 (const int)
+0:122            Sequence
+0:122              Constant:
+0:122                0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122          'ballot' ( temp 4-component vector of uint)
+0:123      move second child to first child ( temp 3-component vector of double)
+0:123        vector swizzle ( temp 3-component vector of double)
+0:123          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:123            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:123              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:123              'invocation' ( temp uint)
+0:123            Constant:
+0:123              3 (const int)
+0:123          Sequence
+0:123            Constant:
+0:123              0 (const int)
+0:123            Constant:
+0:123              1 (const int)
+0:123            Constant:
+0:123              2 (const int)
+0:123        subgroupPartitionedMaxNV ( global 3-component vector of double)
+0:123          vector swizzle ( temp 3-component vector of double)
+0:123            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:123              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:123                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:123                Constant:
+0:123                  2 (const int)
+0:123              Constant:
+0:123                3 (const int)
+0:123            Sequence
+0:123              Constant:
+0:123                0 (const int)
+0:123              Constant:
+0:123                1 (const int)
+0:123              Constant:
+0:123                2 (const int)
+0:123          'ballot' ( temp 4-component vector of uint)
+0:124      move second child to first child ( temp 4-component vector of double)
+0:124        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:124          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124            'invocation' ( temp uint)
+0:124          Constant:
+0:124            3 (const int)
+0:124        subgroupPartitionedMaxNV ( global 4-component vector of double)
+0:124          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:124            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:124              Constant:
+0:124                3 (const int)
+0:124            Constant:
+0:124              3 (const int)
+0:124          'ballot' ( temp 4-component vector of uint)
+0:126      move second child to first child ( temp int)
+0:126        direct index ( temp int)
+0:126          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126              'invocation' ( temp uint)
+0:126            Constant:
+0:126              1 (const int)
+0:126          Constant:
+0:126            0 (const int)
+0:126        subgroupPartitionedAndNV ( global int)
+0:126          direct index ( temp int)
+0:126            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:126              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:126                Constant:
+0:126                  0 (const int)
+0:126              Constant:
+0:126                1 (const int)
+0:126            Constant:
+0:126              0 (const int)
+0:126          'ballot' ( temp 4-component vector of uint)
+0:127      move second child to first child ( temp 2-component vector of int)
+0:127        vector swizzle ( temp 2-component vector of int)
+0:127          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127              'invocation' ( temp uint)
+0:127            Constant:
+0:127              1 (const int)
+0:127          Sequence
+0:127            Constant:
+0:127              0 (const int)
+0:127            Constant:
+0:127              1 (const int)
+0:127        subgroupPartitionedAndNV ( global 2-component vector of int)
+0:127          vector swizzle ( temp 2-component vector of int)
+0:127            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:127              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:127                Constant:
+0:127                  1 (const int)
+0:127              Constant:
+0:127                1 (const int)
+0:127            Sequence
+0:127              Constant:
+0:127                0 (const int)
+0:127              Constant:
+0:127                1 (const int)
+0:127          'ballot' ( temp 4-component vector of uint)
+0:128      move second child to first child ( temp 3-component vector of int)
+0:128        vector swizzle ( temp 3-component vector of int)
+0:128          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:128            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:128              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:128              'invocation' ( temp uint)
+0:128            Constant:
+0:128              1 (const int)
+0:128          Sequence
+0:128            Constant:
+0:128              0 (const int)
+0:128            Constant:
+0:128              1 (const int)
+0:128            Constant:
+0:128              2 (const int)
+0:128        subgroupPartitionedAndNV ( global 3-component vector of int)
+0:128          vector swizzle ( temp 3-component vector of int)
+0:128            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:128              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:128                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:128                Constant:
+0:128                  2 (const int)
+0:128              Constant:
+0:128                1 (const int)
+0:128            Sequence
+0:128              Constant:
+0:128                0 (const int)
+0:128              Constant:
+0:128                1 (const int)
+0:128              Constant:
+0:128                2 (const int)
+0:128          'ballot' ( temp 4-component vector of uint)
+0:129      move second child to first child ( temp 4-component vector of int)
+0:129        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129            'invocation' ( temp uint)
+0:129          Constant:
+0:129            1 (const int)
+0:129        subgroupPartitionedAndNV ( global 4-component vector of int)
+0:129          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:129            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:129              Constant:
+0:129                3 (const int)
+0:129            Constant:
+0:129              1 (const int)
+0:129          'ballot' ( temp 4-component vector of uint)
+0:131      move second child to first child ( temp uint)
+0:131        direct index ( temp uint)
+0:131          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:131            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131              'invocation' ( temp uint)
+0:131            Constant:
+0:131              2 (const int)
+0:131          Constant:
+0:131            0 (const int)
+0:131        subgroupPartitionedAndNV ( global uint)
+0:131          direct index ( temp uint)
+0:131            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:131              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:131                Constant:
+0:131                  0 (const int)
+0:131              Constant:
+0:131                2 (const int)
+0:131            Constant:
+0:131              0 (const int)
+0:131          'ballot' ( temp 4-component vector of uint)
+0:132      move second child to first child ( temp 2-component vector of uint)
+0:132        vector swizzle ( temp 2-component vector of uint)
+0:132          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:132            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132              'invocation' ( temp uint)
+0:132            Constant:
+0:132              2 (const int)
+0:132          Sequence
+0:132            Constant:
+0:132              0 (const int)
+0:132            Constant:
+0:132              1 (const int)
+0:132        subgroupPartitionedAndNV ( global 2-component vector of uint)
+0:132          vector swizzle ( temp 2-component vector of uint)
+0:132            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:132              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:132                Constant:
+0:132                  1 (const int)
+0:132              Constant:
+0:132                2 (const int)
+0:132            Sequence
+0:132              Constant:
+0:132                0 (const int)
+0:132              Constant:
+0:132                1 (const int)
+0:132          'ballot' ( temp 4-component vector of uint)
+0:133      move second child to first child ( temp 3-component vector of uint)
+0:133        vector swizzle ( temp 3-component vector of uint)
+0:133          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:133            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:133              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:133              'invocation' ( temp uint)
+0:133            Constant:
+0:133              2 (const int)
+0:133          Sequence
+0:133            Constant:
+0:133              0 (const int)
+0:133            Constant:
+0:133              1 (const int)
+0:133            Constant:
+0:133              2 (const int)
+0:133        subgroupPartitionedAndNV ( global 3-component vector of uint)
+0:133          vector swizzle ( temp 3-component vector of uint)
+0:133            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:133              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:133                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:133                Constant:
+0:133                  2 (const int)
+0:133              Constant:
+0:133                2 (const int)
+0:133            Sequence
+0:133              Constant:
+0:133                0 (const int)
+0:133              Constant:
+0:133                1 (const int)
+0:133              Constant:
+0:133                2 (const int)
+0:133          'ballot' ( temp 4-component vector of uint)
+0:134      move second child to first child ( temp 4-component vector of uint)
+0:134        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134            'invocation' ( temp uint)
+0:134          Constant:
+0:134            2 (const int)
+0:134        subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:134          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:134            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:134              Constant:
+0:134                3 (const int)
+0:134            Constant:
+0:134              2 (const int)
+0:134          'ballot' ( temp 4-component vector of uint)
+0:136      move second child to first child ( temp int)
+0:136        direct index ( temp int)
+0:136          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:136            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136              'invocation' ( temp uint)
+0:136            Constant:
+0:136              1 (const int)
+0:136          Constant:
+0:136            0 (const int)
+0:136        Convert bool to int ( temp int)
+0:136          subgroupPartitionedAndNV ( global bool)
+0:136            Compare Less Than ( temp bool)
+0:136              direct index ( temp int)
+0:136                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:136                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:136                    Constant:
+0:136                      0 (const int)
+0:136                  Constant:
+0:136                    1 (const int)
+0:136                Constant:
+0:136                  0 (const int)
+0:136              Constant:
+0:136                0 (const int)
+0:136            'ballot' ( temp 4-component vector of uint)
+0:137      move second child to first child ( temp 2-component vector of int)
+0:137        vector swizzle ( temp 2-component vector of int)
+0:137          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:137            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137              'invocation' ( temp uint)
+0:137            Constant:
+0:137              1 (const int)
+0:137          Sequence
+0:137            Constant:
+0:137              0 (const int)
+0:137            Constant:
+0:137              1 (const int)
+0:137        Convert bool to int ( temp 2-component vector of int)
+0:137          subgroupPartitionedAndNV ( global 2-component vector of bool)
+0:137            Compare Less Than ( global 2-component vector of bool)
+0:137              vector swizzle ( temp 2-component vector of int)
+0:137                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:137                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:137                    Constant:
+0:137                      1 (const int)
+0:137                  Constant:
+0:137                    1 (const int)
+0:137                Sequence
+0:137                  Constant:
+0:137                    0 (const int)
+0:137                  Constant:
+0:137                    1 (const int)
+0:137              Constant:
+0:137                0 (const int)
+0:137                0 (const int)
+0:137            'ballot' ( temp 4-component vector of uint)
+0:138      move second child to first child ( temp 3-component vector of int)
+0:138        vector swizzle ( temp 3-component vector of int)
+0:138          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:138            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:138              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:138              'invocation' ( temp uint)
+0:138            Constant:
+0:138              1 (const int)
+0:138          Sequence
+0:138            Constant:
+0:138              0 (const int)
+0:138            Constant:
+0:138              1 (const int)
+0:138            Constant:
+0:138              2 (const int)
+0:138        Convert bool to int ( temp 3-component vector of int)
+0:138          subgroupPartitionedAndNV ( global 3-component vector of bool)
+0:138            Compare Less Than ( global 3-component vector of bool)
+0:138              vector swizzle ( temp 3-component vector of int)
+0:138                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:138                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:138                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:138                    Constant:
+0:138                      1 (const int)
+0:138                  Constant:
+0:138                    1 (const int)
+0:138                Sequence
+0:138                  Constant:
+0:138                    0 (const int)
+0:138                  Constant:
+0:138                    1 (const int)
+0:138                  Constant:
+0:138                    2 (const int)
+0:138              Constant:
+0:138                0 (const int)
+0:138                0 (const int)
+0:138                0 (const int)
+0:138            'ballot' ( temp 4-component vector of uint)
+0:139      move second child to first child ( temp 4-component vector of int)
+0:139        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139            'invocation' ( temp uint)
+0:139          Constant:
+0:139            1 (const int)
+0:139        Convert bool to int ( temp 4-component vector of int)
+0:139          subgroupPartitionedAndNV ( global 4-component vector of bool)
+0:139            Compare Less Than ( global 4-component vector of bool)
+0:139              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:139                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:139                  Constant:
+0:139                    1 (const int)
+0:139                Constant:
+0:139                  1 (const int)
+0:139              Constant:
+0:139                0 (const int)
+0:139                0 (const int)
+0:139                0 (const int)
+0:139                0 (const int)
+0:139            'ballot' ( temp 4-component vector of uint)
+0:141      move second child to first child ( temp int)
+0:141        direct index ( temp int)
+0:141          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141              'invocation' ( temp uint)
+0:141            Constant:
+0:141              1 (const int)
+0:141          Constant:
+0:141            0 (const int)
+0:141        subgroupPartitionedOrNV ( global int)
+0:141          direct index ( temp int)
+0:141            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:141              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:141                Constant:
+0:141                  0 (const int)
+0:141              Constant:
+0:141                1 (const int)
+0:141            Constant:
+0:141              0 (const int)
+0:141          'ballot' ( temp 4-component vector of uint)
+0:142      move second child to first child ( temp 2-component vector of int)
+0:142        vector swizzle ( temp 2-component vector of int)
+0:142          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142              'invocation' ( temp uint)
+0:142            Constant:
+0:142              1 (const int)
+0:142          Sequence
+0:142            Constant:
+0:142              0 (const int)
+0:142            Constant:
+0:142              1 (const int)
+0:142        subgroupPartitionedOrNV ( global 2-component vector of int)
+0:142          vector swizzle ( temp 2-component vector of int)
+0:142            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:142              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:142                Constant:
+0:142                  1 (const int)
+0:142              Constant:
+0:142                1 (const int)
+0:142            Sequence
+0:142              Constant:
+0:142                0 (const int)
+0:142              Constant:
+0:142                1 (const int)
+0:142          'ballot' ( temp 4-component vector of uint)
+0:143      move second child to first child ( temp 3-component vector of int)
+0:143        vector swizzle ( temp 3-component vector of int)
+0:143          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:143            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:143              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:143              'invocation' ( temp uint)
+0:143            Constant:
+0:143              1 (const int)
+0:143          Sequence
+0:143            Constant:
+0:143              0 (const int)
+0:143            Constant:
+0:143              1 (const int)
+0:143            Constant:
+0:143              2 (const int)
+0:143        subgroupPartitionedOrNV ( global 3-component vector of int)
+0:143          vector swizzle ( temp 3-component vector of int)
+0:143            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:143              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:143                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:143                Constant:
+0:143                  2 (const int)
+0:143              Constant:
+0:143                1 (const int)
+0:143            Sequence
+0:143              Constant:
+0:143                0 (const int)
+0:143              Constant:
+0:143                1 (const int)
+0:143              Constant:
+0:143                2 (const int)
+0:143          'ballot' ( temp 4-component vector of uint)
+0:144      move second child to first child ( temp 4-component vector of int)
+0:144        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:144          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144            'invocation' ( temp uint)
+0:144          Constant:
+0:144            1 (const int)
+0:144        subgroupPartitionedOrNV ( global 4-component vector of int)
+0:144          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:144            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:144              Constant:
+0:144                3 (const int)
+0:144            Constant:
+0:144              1 (const int)
+0:144          'ballot' ( temp 4-component vector of uint)
+0:146      move second child to first child ( temp uint)
+0:146        direct index ( temp uint)
+0:146          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:146            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146              'invocation' ( temp uint)
+0:146            Constant:
+0:146              2 (const int)
+0:146          Constant:
+0:146            0 (const int)
+0:146        subgroupPartitionedOrNV ( global uint)
+0:146          direct index ( temp uint)
+0:146            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:146              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:146                Constant:
+0:146                  0 (const int)
+0:146              Constant:
+0:146                2 (const int)
+0:146            Constant:
+0:146              0 (const int)
+0:146          'ballot' ( temp 4-component vector of uint)
+0:147      move second child to first child ( temp 2-component vector of uint)
+0:147        vector swizzle ( temp 2-component vector of uint)
+0:147          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:147            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147              'invocation' ( temp uint)
+0:147            Constant:
+0:147              2 (const int)
+0:147          Sequence
+0:147            Constant:
+0:147              0 (const int)
+0:147            Constant:
+0:147              1 (const int)
+0:147        subgroupPartitionedOrNV ( global 2-component vector of uint)
+0:147          vector swizzle ( temp 2-component vector of uint)
+0:147            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:147              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:147                Constant:
+0:147                  1 (const int)
+0:147              Constant:
+0:147                2 (const int)
+0:147            Sequence
+0:147              Constant:
+0:147                0 (const int)
+0:147              Constant:
+0:147                1 (const int)
+0:147          'ballot' ( temp 4-component vector of uint)
+0:148      move second child to first child ( temp 3-component vector of uint)
+0:148        vector swizzle ( temp 3-component vector of uint)
+0:148          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:148            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:148              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:148              'invocation' ( temp uint)
+0:148            Constant:
+0:148              2 (const int)
+0:148          Sequence
+0:148            Constant:
+0:148              0 (const int)
+0:148            Constant:
+0:148              1 (const int)
+0:148            Constant:
+0:148              2 (const int)
+0:148        subgroupPartitionedOrNV ( global 3-component vector of uint)
+0:148          vector swizzle ( temp 3-component vector of uint)
+0:148            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:148              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:148                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:148                Constant:
+0:148                  2 (const int)
+0:148              Constant:
+0:148                2 (const int)
+0:148            Sequence
+0:148              Constant:
+0:148                0 (const int)
+0:148              Constant:
+0:148                1 (const int)
+0:148              Constant:
+0:148                2 (const int)
+0:148          'ballot' ( temp 4-component vector of uint)
+0:149      move second child to first child ( temp 4-component vector of uint)
+0:149        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:149          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149            'invocation' ( temp uint)
+0:149          Constant:
+0:149            2 (const int)
+0:149        subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:149          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:149            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:149              Constant:
+0:149                3 (const int)
+0:149            Constant:
+0:149              2 (const int)
+0:149          'ballot' ( temp 4-component vector of uint)
+0:151      move second child to first child ( temp int)
+0:151        direct index ( temp int)
+0:151          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:151            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151              'invocation' ( temp uint)
+0:151            Constant:
+0:151              1 (const int)
+0:151          Constant:
+0:151            0 (const int)
+0:151        Convert bool to int ( temp int)
+0:151          subgroupPartitionedOrNV ( global bool)
+0:151            Compare Less Than ( temp bool)
+0:151              direct index ( temp int)
+0:151                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:151                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:151                    Constant:
+0:151                      0 (const int)
+0:151                  Constant:
+0:151                    1 (const int)
+0:151                Constant:
+0:151                  0 (const int)
+0:151              Constant:
+0:151                0 (const int)
+0:151            'ballot' ( temp 4-component vector of uint)
+0:152      move second child to first child ( temp 2-component vector of int)
+0:152        vector swizzle ( temp 2-component vector of int)
+0:152          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:152            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152              'invocation' ( temp uint)
+0:152            Constant:
+0:152              1 (const int)
+0:152          Sequence
+0:152            Constant:
+0:152              0 (const int)
+0:152            Constant:
+0:152              1 (const int)
+0:152        Convert bool to int ( temp 2-component vector of int)
+0:152          subgroupPartitionedOrNV ( global 2-component vector of bool)
+0:152            Compare Less Than ( global 2-component vector of bool)
+0:152              vector swizzle ( temp 2-component vector of int)
+0:152                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:152                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:152                    Constant:
+0:152                      1 (const int)
+0:152                  Constant:
+0:152                    1 (const int)
+0:152                Sequence
+0:152                  Constant:
+0:152                    0 (const int)
+0:152                  Constant:
+0:152                    1 (const int)
+0:152              Constant:
+0:152                0 (const int)
+0:152                0 (const int)
+0:152            'ballot' ( temp 4-component vector of uint)
+0:153      move second child to first child ( temp 3-component vector of int)
+0:153        vector swizzle ( temp 3-component vector of int)
+0:153          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:153            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:153              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:153              'invocation' ( temp uint)
+0:153            Constant:
+0:153              1 (const int)
+0:153          Sequence
+0:153            Constant:
+0:153              0 (const int)
+0:153            Constant:
+0:153              1 (const int)
+0:153            Constant:
+0:153              2 (const int)
+0:153        Convert bool to int ( temp 3-component vector of int)
+0:153          subgroupPartitionedOrNV ( global 3-component vector of bool)
+0:153            Compare Less Than ( global 3-component vector of bool)
+0:153              vector swizzle ( temp 3-component vector of int)
+0:153                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:153                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:153                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:153                    Constant:
+0:153                      1 (const int)
+0:153                  Constant:
+0:153                    1 (const int)
+0:153                Sequence
+0:153                  Constant:
+0:153                    0 (const int)
+0:153                  Constant:
+0:153                    1 (const int)
+0:153                  Constant:
+0:153                    2 (const int)
+0:153              Constant:
+0:153                0 (const int)
+0:153                0 (const int)
+0:153                0 (const int)
+0:153            'ballot' ( temp 4-component vector of uint)
+0:154      move second child to first child ( temp 4-component vector of int)
+0:154        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:154          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154            'invocation' ( temp uint)
+0:154          Constant:
+0:154            1 (const int)
+0:154        Convert bool to int ( temp 4-component vector of int)
+0:154          subgroupPartitionedOrNV ( global 4-component vector of bool)
+0:154            Compare Less Than ( global 4-component vector of bool)
+0:154              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:154                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:154                  Constant:
+0:154                    1 (const int)
+0:154                Constant:
+0:154                  1 (const int)
+0:154              Constant:
+0:154                0 (const int)
+0:154                0 (const int)
+0:154                0 (const int)
+0:154                0 (const int)
+0:154            'ballot' ( temp 4-component vector of uint)
+0:156      move second child to first child ( temp int)
+0:156        direct index ( temp int)
+0:156          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:156            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156              'invocation' ( temp uint)
+0:156            Constant:
+0:156              1 (const int)
+0:156          Constant:
+0:156            0 (const int)
+0:156        subgroupPartitionedXorNV ( global int)
+0:156          direct index ( temp int)
+0:156            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:156              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:156                Constant:
+0:156                  0 (const int)
+0:156              Constant:
+0:156                1 (const int)
+0:156            Constant:
+0:156              0 (const int)
+0:156          'ballot' ( temp 4-component vector of uint)
+0:157      move second child to first child ( temp 2-component vector of int)
+0:157        vector swizzle ( temp 2-component vector of int)
+0:157          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:157            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157              'invocation' ( temp uint)
+0:157            Constant:
+0:157              1 (const int)
+0:157          Sequence
+0:157            Constant:
+0:157              0 (const int)
+0:157            Constant:
+0:157              1 (const int)
+0:157        subgroupPartitionedXorNV ( global 2-component vector of int)
+0:157          vector swizzle ( temp 2-component vector of int)
+0:157            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:157              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:157                Constant:
+0:157                  1 (const int)
+0:157              Constant:
+0:157                1 (const int)
+0:157            Sequence
+0:157              Constant:
+0:157                0 (const int)
+0:157              Constant:
+0:157                1 (const int)
+0:157          'ballot' ( temp 4-component vector of uint)
+0:158      move second child to first child ( temp 3-component vector of int)
+0:158        vector swizzle ( temp 3-component vector of int)
+0:158          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:158            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:158              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:158              'invocation' ( temp uint)
+0:158            Constant:
+0:158              1 (const int)
+0:158          Sequence
+0:158            Constant:
+0:158              0 (const int)
+0:158            Constant:
+0:158              1 (const int)
+0:158            Constant:
+0:158              2 (const int)
+0:158        subgroupPartitionedXorNV ( global 3-component vector of int)
+0:158          vector swizzle ( temp 3-component vector of int)
+0:158            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:158              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:158                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:158                Constant:
+0:158                  2 (const int)
+0:158              Constant:
+0:158                1 (const int)
+0:158            Sequence
+0:158              Constant:
+0:158                0 (const int)
+0:158              Constant:
+0:158                1 (const int)
+0:158              Constant:
+0:158                2 (const int)
+0:158          'ballot' ( temp 4-component vector of uint)
+0:159      move second child to first child ( temp 4-component vector of int)
+0:159        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:159          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159            'invocation' ( temp uint)
+0:159          Constant:
+0:159            1 (const int)
+0:159        subgroupPartitionedXorNV ( global 4-component vector of int)
+0:159          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:159            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:159              Constant:
+0:159                3 (const int)
+0:159            Constant:
+0:159              1 (const int)
+0:159          'ballot' ( temp 4-component vector of uint)
+0:161      move second child to first child ( temp uint)
+0:161        direct index ( temp uint)
+0:161          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:161            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161              'invocation' ( temp uint)
+0:161            Constant:
+0:161              2 (const int)
+0:161          Constant:
+0:161            0 (const int)
+0:161        subgroupPartitionedXorNV ( global uint)
+0:161          direct index ( temp uint)
+0:161            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:161              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:161                Constant:
+0:161                  0 (const int)
+0:161              Constant:
+0:161                2 (const int)
+0:161            Constant:
+0:161              0 (const int)
+0:161          'ballot' ( temp 4-component vector of uint)
+0:162      move second child to first child ( temp 2-component vector of uint)
+0:162        vector swizzle ( temp 2-component vector of uint)
+0:162          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:162            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162              'invocation' ( temp uint)
+0:162            Constant:
+0:162              2 (const int)
+0:162          Sequence
+0:162            Constant:
+0:162              0 (const int)
+0:162            Constant:
+0:162              1 (const int)
+0:162        subgroupPartitionedXorNV ( global 2-component vector of uint)
+0:162          vector swizzle ( temp 2-component vector of uint)
+0:162            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:162              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:162                Constant:
+0:162                  1 (const int)
+0:162              Constant:
+0:162                2 (const int)
+0:162            Sequence
+0:162              Constant:
+0:162                0 (const int)
+0:162              Constant:
+0:162                1 (const int)
+0:162          'ballot' ( temp 4-component vector of uint)
+0:163      move second child to first child ( temp 3-component vector of uint)
+0:163        vector swizzle ( temp 3-component vector of uint)
+0:163          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:163            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:163              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:163              'invocation' ( temp uint)
+0:163            Constant:
+0:163              2 (const int)
+0:163          Sequence
+0:163            Constant:
+0:163              0 (const int)
+0:163            Constant:
+0:163              1 (const int)
+0:163            Constant:
+0:163              2 (const int)
+0:163        subgroupPartitionedXorNV ( global 3-component vector of uint)
+0:163          vector swizzle ( temp 3-component vector of uint)
+0:163            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:163              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:163                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:163                Constant:
+0:163                  2 (const int)
+0:163              Constant:
+0:163                2 (const int)
+0:163            Sequence
+0:163              Constant:
+0:163                0 (const int)
+0:163              Constant:
+0:163                1 (const int)
+0:163              Constant:
+0:163                2 (const int)
+0:163          'ballot' ( temp 4-component vector of uint)
+0:164      move second child to first child ( temp 4-component vector of uint)
+0:164        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:164          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164            'invocation' ( temp uint)
+0:164          Constant:
+0:164            2 (const int)
+0:164        subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:164          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:164            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:164              Constant:
+0:164                3 (const int)
+0:164            Constant:
+0:164              2 (const int)
+0:164          'ballot' ( temp 4-component vector of uint)
+0:166      move second child to first child ( temp int)
+0:166        direct index ( temp int)
+0:166          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:166            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166              'invocation' ( temp uint)
+0:166            Constant:
+0:166              1 (const int)
+0:166          Constant:
+0:166            0 (const int)
+0:166        Convert bool to int ( temp int)
+0:166          subgroupPartitionedXorNV ( global bool)
+0:166            Compare Less Than ( temp bool)
+0:166              direct index ( temp int)
+0:166                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:166                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:166                    Constant:
+0:166                      0 (const int)
+0:166                  Constant:
+0:166                    1 (const int)
+0:166                Constant:
+0:166                  0 (const int)
+0:166              Constant:
+0:166                0 (const int)
+0:166            'ballot' ( temp 4-component vector of uint)
+0:167      move second child to first child ( temp 2-component vector of int)
+0:167        vector swizzle ( temp 2-component vector of int)
+0:167          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:167            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167              'invocation' ( temp uint)
+0:167            Constant:
+0:167              1 (const int)
+0:167          Sequence
+0:167            Constant:
+0:167              0 (const int)
+0:167            Constant:
+0:167              1 (const int)
+0:167        Convert bool to int ( temp 2-component vector of int)
+0:167          subgroupPartitionedXorNV ( global 2-component vector of bool)
+0:167            Compare Less Than ( global 2-component vector of bool)
+0:167              vector swizzle ( temp 2-component vector of int)
+0:167                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:167                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:167                    Constant:
+0:167                      1 (const int)
+0:167                  Constant:
+0:167                    1 (const int)
+0:167                Sequence
+0:167                  Constant:
+0:167                    0 (const int)
+0:167                  Constant:
+0:167                    1 (const int)
+0:167              Constant:
+0:167                0 (const int)
+0:167                0 (const int)
+0:167            'ballot' ( temp 4-component vector of uint)
+0:168      move second child to first child ( temp 3-component vector of int)
+0:168        vector swizzle ( temp 3-component vector of int)
+0:168          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:168            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:168              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:168              'invocation' ( temp uint)
+0:168            Constant:
+0:168              1 (const int)
+0:168          Sequence
+0:168            Constant:
+0:168              0 (const int)
+0:168            Constant:
+0:168              1 (const int)
+0:168            Constant:
+0:168              2 (const int)
+0:168        Convert bool to int ( temp 3-component vector of int)
+0:168          subgroupPartitionedXorNV ( global 3-component vector of bool)
+0:168            Compare Less Than ( global 3-component vector of bool)
+0:168              vector swizzle ( temp 3-component vector of int)
+0:168                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:168                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:168                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:168                    Constant:
+0:168                      1 (const int)
+0:168                  Constant:
+0:168                    1 (const int)
+0:168                Sequence
+0:168                  Constant:
+0:168                    0 (const int)
+0:168                  Constant:
+0:168                    1 (const int)
+0:168                  Constant:
+0:168                    2 (const int)
+0:168              Constant:
+0:168                0 (const int)
+0:168                0 (const int)
+0:168                0 (const int)
+0:168            'ballot' ( temp 4-component vector of uint)
+0:169      move second child to first child ( temp 4-component vector of int)
+0:169        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:169          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169            'invocation' ( temp uint)
+0:169          Constant:
+0:169            1 (const int)
+0:169        Convert bool to int ( temp 4-component vector of int)
+0:169          subgroupPartitionedXorNV ( global 4-component vector of bool)
+0:169            Compare Less Than ( global 4-component vector of bool)
+0:169              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:169                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:169                  Constant:
+0:169                    1 (const int)
+0:169                Constant:
+0:169                  1 (const int)
+0:169              Constant:
+0:169                0 (const int)
+0:169                0 (const int)
+0:169                0 (const int)
+0:169                0 (const int)
+0:169            'ballot' ( temp 4-component vector of uint)
+0:171      move second child to first child ( temp float)
+0:171        direct index ( temp float)
+0:171          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:171            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171              'invocation' ( temp uint)
+0:171            Constant:
+0:171              0 (const int)
+0:171          Constant:
+0:171            0 (const int)
+0:171        subgroupPartitionedInclusiveAddNV ( global float)
+0:171          direct index ( temp float)
+0:171            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:171              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:171                Constant:
+0:171                  0 (const int)
+0:171              Constant:
+0:171                0 (const int)
+0:171            Constant:
+0:171              0 (const int)
+0:171          'ballot' ( temp 4-component vector of uint)
+0:172      move second child to first child ( temp 2-component vector of float)
+0:172        vector swizzle ( temp 2-component vector of float)
+0:172          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:172            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172              'invocation' ( temp uint)
+0:172            Constant:
+0:172              0 (const int)
+0:172          Sequence
+0:172            Constant:
+0:172              0 (const int)
+0:172            Constant:
+0:172              1 (const int)
+0:172        subgroupPartitionedInclusiveAddNV ( global 2-component vector of float)
+0:172          vector swizzle ( temp 2-component vector of float)
+0:172            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:172              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:172                Constant:
+0:172                  1 (const int)
+0:172              Constant:
+0:172                0 (const int)
+0:172            Sequence
+0:172              Constant:
+0:172                0 (const int)
+0:172              Constant:
+0:172                1 (const int)
+0:172          'ballot' ( temp 4-component vector of uint)
+0:173      move second child to first child ( temp 3-component vector of float)
+0:173        vector swizzle ( temp 3-component vector of float)
+0:173          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:173            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:173              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:173              'invocation' ( temp uint)
+0:173            Constant:
+0:173              0 (const int)
+0:173          Sequence
+0:173            Constant:
+0:173              0 (const int)
+0:173            Constant:
+0:173              1 (const int)
+0:173            Constant:
+0:173              2 (const int)
+0:173        subgroupPartitionedInclusiveAddNV ( global 3-component vector of float)
+0:173          vector swizzle ( temp 3-component vector of float)
+0:173            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:173              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:173                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:173                Constant:
+0:173                  2 (const int)
+0:173              Constant:
+0:173                0 (const int)
+0:173            Sequence
+0:173              Constant:
+0:173                0 (const int)
+0:173              Constant:
+0:173                1 (const int)
+0:173              Constant:
+0:173                2 (const int)
+0:173          'ballot' ( temp 4-component vector of uint)
+0:174      move second child to first child ( temp 4-component vector of float)
+0:174        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:174          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174            'invocation' ( temp uint)
+0:174          Constant:
+0:174            0 (const int)
+0:174        subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:174          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:174            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:174              Constant:
+0:174                3 (const int)
+0:174            Constant:
+0:174              0 (const int)
+0:174          'ballot' ( temp 4-component vector of uint)
+0:176      move second child to first child ( temp int)
+0:176        direct index ( temp int)
+0:176          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:176            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176              'invocation' ( temp uint)
+0:176            Constant:
+0:176              1 (const int)
+0:176          Constant:
+0:176            0 (const int)
+0:176        subgroupPartitionedInclusiveAddNV ( global int)
+0:176          direct index ( temp int)
+0:176            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:176              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:176                Constant:
+0:176                  0 (const int)
+0:176              Constant:
+0:176                1 (const int)
+0:176            Constant:
+0:176              0 (const int)
+0:176          'ballot' ( temp 4-component vector of uint)
+0:177      move second child to first child ( temp 2-component vector of int)
+0:177        vector swizzle ( temp 2-component vector of int)
+0:177          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:177            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177              'invocation' ( temp uint)
+0:177            Constant:
+0:177              1 (const int)
+0:177          Sequence
+0:177            Constant:
+0:177              0 (const int)
+0:177            Constant:
+0:177              1 (const int)
+0:177        subgroupPartitionedInclusiveAddNV ( global 2-component vector of int)
+0:177          vector swizzle ( temp 2-component vector of int)
+0:177            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:177              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:177                Constant:
+0:177                  1 (const int)
+0:177              Constant:
+0:177                1 (const int)
+0:177            Sequence
+0:177              Constant:
+0:177                0 (const int)
+0:177              Constant:
+0:177                1 (const int)
+0:177          'ballot' ( temp 4-component vector of uint)
+0:178      move second child to first child ( temp 3-component vector of int)
+0:178        vector swizzle ( temp 3-component vector of int)
+0:178          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:178            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:178              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:178              'invocation' ( temp uint)
+0:178            Constant:
+0:178              1 (const int)
+0:178          Sequence
+0:178            Constant:
+0:178              0 (const int)
+0:178            Constant:
+0:178              1 (const int)
+0:178            Constant:
+0:178              2 (const int)
+0:178        subgroupPartitionedInclusiveAddNV ( global 3-component vector of int)
+0:178          vector swizzle ( temp 3-component vector of int)
+0:178            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:178              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:178                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:178                Constant:
+0:178                  2 (const int)
+0:178              Constant:
+0:178                1 (const int)
+0:178            Sequence
+0:178              Constant:
+0:178                0 (const int)
+0:178              Constant:
+0:178                1 (const int)
+0:178              Constant:
+0:178                2 (const int)
+0:178          'ballot' ( temp 4-component vector of uint)
+0:179      move second child to first child ( temp 4-component vector of int)
+0:179        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:179          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179            'invocation' ( temp uint)
+0:179          Constant:
+0:179            1 (const int)
+0:179        subgroupPartitionedInclusiveAddNV ( global 4-component vector of int)
+0:179          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:179            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:179              Constant:
+0:179                3 (const int)
+0:179            Constant:
+0:179              1 (const int)
+0:179          'ballot' ( temp 4-component vector of uint)
+0:181      move second child to first child ( temp uint)
+0:181        direct index ( temp uint)
+0:181          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:181            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181              'invocation' ( temp uint)
+0:181            Constant:
+0:181              2 (const int)
+0:181          Constant:
+0:181            0 (const int)
+0:181        subgroupPartitionedInclusiveAddNV ( global uint)
+0:181          direct index ( temp uint)
+0:181            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:181              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:181                Constant:
+0:181                  0 (const int)
+0:181              Constant:
+0:181                2 (const int)
+0:181            Constant:
+0:181              0 (const int)
+0:181          'ballot' ( temp 4-component vector of uint)
+0:182      move second child to first child ( temp 2-component vector of uint)
+0:182        vector swizzle ( temp 2-component vector of uint)
+0:182          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:182            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182              'invocation' ( temp uint)
+0:182            Constant:
+0:182              2 (const int)
+0:182          Sequence
+0:182            Constant:
+0:182              0 (const int)
+0:182            Constant:
+0:182              1 (const int)
+0:182        subgroupPartitionedInclusiveAddNV ( global 2-component vector of uint)
+0:182          vector swizzle ( temp 2-component vector of uint)
+0:182            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:182              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:182                Constant:
+0:182                  1 (const int)
+0:182              Constant:
+0:182                2 (const int)
+0:182            Sequence
+0:182              Constant:
+0:182                0 (const int)
+0:182              Constant:
+0:182                1 (const int)
+0:182          'ballot' ( temp 4-component vector of uint)
+0:183      move second child to first child ( temp 3-component vector of uint)
+0:183        vector swizzle ( temp 3-component vector of uint)
+0:183          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:183            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:183              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:183              'invocation' ( temp uint)
+0:183            Constant:
+0:183              2 (const int)
+0:183          Sequence
+0:183            Constant:
+0:183              0 (const int)
+0:183            Constant:
+0:183              1 (const int)
+0:183            Constant:
+0:183              2 (const int)
+0:183        subgroupPartitionedInclusiveAddNV ( global 3-component vector of uint)
+0:183          vector swizzle ( temp 3-component vector of uint)
+0:183            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:183              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:183                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:183                Constant:
+0:183                  2 (const int)
+0:183              Constant:
+0:183                2 (const int)
+0:183            Sequence
+0:183              Constant:
+0:183                0 (const int)
+0:183              Constant:
+0:183                1 (const int)
+0:183              Constant:
+0:183                2 (const int)
+0:183          'ballot' ( temp 4-component vector of uint)
+0:184      move second child to first child ( temp 4-component vector of uint)
+0:184        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:184          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184            'invocation' ( temp uint)
+0:184          Constant:
+0:184            2 (const int)
+0:184        subgroupPartitionedInclusiveAddNV ( global 4-component vector of uint)
+0:184          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:184            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:184              Constant:
+0:184                3 (const int)
+0:184            Constant:
+0:184              2 (const int)
+0:184          'ballot' ( temp 4-component vector of uint)
+0:186      move second child to first child ( temp double)
+0:186        direct index ( temp double)
+0:186          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:186            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186              'invocation' ( temp uint)
+0:186            Constant:
+0:186              3 (const int)
+0:186          Constant:
+0:186            0 (const int)
+0:186        subgroupPartitionedInclusiveAddNV ( global double)
+0:186          direct index ( temp double)
+0:186            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:186              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:186                Constant:
+0:186                  0 (const int)
+0:186              Constant:
+0:186                3 (const int)
+0:186            Constant:
+0:186              0 (const int)
+0:186          'ballot' ( temp 4-component vector of uint)
+0:187      move second child to first child ( temp 2-component vector of double)
+0:187        vector swizzle ( temp 2-component vector of double)
+0:187          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:187            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187              'invocation' ( temp uint)
+0:187            Constant:
+0:187              3 (const int)
+0:187          Sequence
+0:187            Constant:
+0:187              0 (const int)
+0:187            Constant:
+0:187              1 (const int)
+0:187        subgroupPartitionedInclusiveAddNV ( global 2-component vector of double)
+0:187          vector swizzle ( temp 2-component vector of double)
+0:187            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:187              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:187                Constant:
+0:187                  1 (const int)
+0:187              Constant:
+0:187                3 (const int)
+0:187            Sequence
+0:187              Constant:
+0:187                0 (const int)
+0:187              Constant:
+0:187                1 (const int)
+0:187          'ballot' ( temp 4-component vector of uint)
+0:188      move second child to first child ( temp 3-component vector of double)
+0:188        vector swizzle ( temp 3-component vector of double)
+0:188          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:188            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:188              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:188              'invocation' ( temp uint)
+0:188            Constant:
+0:188              3 (const int)
+0:188          Sequence
+0:188            Constant:
+0:188              0 (const int)
+0:188            Constant:
+0:188              1 (const int)
+0:188            Constant:
+0:188              2 (const int)
+0:188        subgroupPartitionedInclusiveAddNV ( global 3-component vector of double)
+0:188          vector swizzle ( temp 3-component vector of double)
+0:188            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:188              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:188                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:188                Constant:
+0:188                  2 (const int)
+0:188              Constant:
+0:188                3 (const int)
+0:188            Sequence
+0:188              Constant:
+0:188                0 (const int)
+0:188              Constant:
+0:188                1 (const int)
+0:188              Constant:
+0:188                2 (const int)
+0:188          'ballot' ( temp 4-component vector of uint)
+0:189      move second child to first child ( temp 4-component vector of double)
+0:189        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:189          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189            'invocation' ( temp uint)
+0:189          Constant:
+0:189            3 (const int)
+0:189        subgroupPartitionedInclusiveAddNV ( global 4-component vector of double)
+0:189          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:189            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:189              Constant:
+0:189                3 (const int)
+0:189            Constant:
+0:189              3 (const int)
+0:189          'ballot' ( temp 4-component vector of uint)
+0:191      move second child to first child ( temp float)
+0:191        direct index ( temp float)
+0:191          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:191            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191              'invocation' ( temp uint)
+0:191            Constant:
+0:191              0 (const int)
+0:191          Constant:
+0:191            0 (const int)
+0:191        subgroupPartitionedInclusiveMulNV ( global float)
+0:191          direct index ( temp float)
+0:191            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:191              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:191                Constant:
+0:191                  0 (const int)
+0:191              Constant:
+0:191                0 (const int)
+0:191            Constant:
+0:191              0 (const int)
+0:191          'ballot' ( temp 4-component vector of uint)
+0:192      move second child to first child ( temp 2-component vector of float)
+0:192        vector swizzle ( temp 2-component vector of float)
+0:192          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:192            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192              'invocation' ( temp uint)
+0:192            Constant:
+0:192              0 (const int)
+0:192          Sequence
+0:192            Constant:
+0:192              0 (const int)
+0:192            Constant:
+0:192              1 (const int)
+0:192        subgroupPartitionedInclusiveMulNV ( global 2-component vector of float)
+0:192          vector swizzle ( temp 2-component vector of float)
+0:192            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:192              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:192                Constant:
+0:192                  1 (const int)
+0:192              Constant:
+0:192                0 (const int)
+0:192            Sequence
+0:192              Constant:
+0:192                0 (const int)
+0:192              Constant:
+0:192                1 (const int)
+0:192          'ballot' ( temp 4-component vector of uint)
+0:193      move second child to first child ( temp 3-component vector of float)
+0:193        vector swizzle ( temp 3-component vector of float)
+0:193          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:193            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:193              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:193              'invocation' ( temp uint)
+0:193            Constant:
+0:193              0 (const int)
+0:193          Sequence
+0:193            Constant:
+0:193              0 (const int)
+0:193            Constant:
+0:193              1 (const int)
+0:193            Constant:
+0:193              2 (const int)
+0:193        subgroupPartitionedInclusiveMulNV ( global 3-component vector of float)
+0:193          vector swizzle ( temp 3-component vector of float)
+0:193            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:193              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:193                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:193                Constant:
+0:193                  2 (const int)
+0:193              Constant:
+0:193                0 (const int)
+0:193            Sequence
+0:193              Constant:
+0:193                0 (const int)
+0:193              Constant:
+0:193                1 (const int)
+0:193              Constant:
+0:193                2 (const int)
+0:193          'ballot' ( temp 4-component vector of uint)
+0:194      move second child to first child ( temp 4-component vector of float)
+0:194        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:194          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194            'invocation' ( temp uint)
+0:194          Constant:
+0:194            0 (const int)
+0:194        subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:194          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:194            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:194              Constant:
+0:194                3 (const int)
+0:194            Constant:
+0:194              0 (const int)
+0:194          'ballot' ( temp 4-component vector of uint)
+0:196      move second child to first child ( temp int)
+0:196        direct index ( temp int)
+0:196          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:196            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196              'invocation' ( temp uint)
+0:196            Constant:
+0:196              1 (const int)
+0:196          Constant:
+0:196            0 (const int)
+0:196        subgroupPartitionedInclusiveMulNV ( global int)
+0:196          direct index ( temp int)
+0:196            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:196              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:196                Constant:
+0:196                  0 (const int)
+0:196              Constant:
+0:196                1 (const int)
+0:196            Constant:
+0:196              0 (const int)
+0:196          'ballot' ( temp 4-component vector of uint)
+0:197      move second child to first child ( temp 2-component vector of int)
+0:197        vector swizzle ( temp 2-component vector of int)
+0:197          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:197            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197              'invocation' ( temp uint)
+0:197            Constant:
+0:197              1 (const int)
+0:197          Sequence
+0:197            Constant:
+0:197              0 (const int)
+0:197            Constant:
+0:197              1 (const int)
+0:197        subgroupPartitionedInclusiveMulNV ( global 2-component vector of int)
+0:197          vector swizzle ( temp 2-component vector of int)
+0:197            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:197              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:197                Constant:
+0:197                  1 (const int)
+0:197              Constant:
+0:197                1 (const int)
+0:197            Sequence
+0:197              Constant:
+0:197                0 (const int)
+0:197              Constant:
+0:197                1 (const int)
+0:197          'ballot' ( temp 4-component vector of uint)
+0:198      move second child to first child ( temp 3-component vector of int)
+0:198        vector swizzle ( temp 3-component vector of int)
+0:198          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:198            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:198              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:198              'invocation' ( temp uint)
+0:198            Constant:
+0:198              1 (const int)
+0:198          Sequence
+0:198            Constant:
+0:198              0 (const int)
+0:198            Constant:
+0:198              1 (const int)
+0:198            Constant:
+0:198              2 (const int)
+0:198        subgroupPartitionedInclusiveMulNV ( global 3-component vector of int)
+0:198          vector swizzle ( temp 3-component vector of int)
+0:198            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:198              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:198                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:198                Constant:
+0:198                  2 (const int)
+0:198              Constant:
+0:198                1 (const int)
+0:198            Sequence
+0:198              Constant:
+0:198                0 (const int)
+0:198              Constant:
+0:198                1 (const int)
+0:198              Constant:
+0:198                2 (const int)
+0:198          'ballot' ( temp 4-component vector of uint)
+0:199      move second child to first child ( temp 4-component vector of int)
+0:199        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:199          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199            'invocation' ( temp uint)
+0:199          Constant:
+0:199            1 (const int)
+0:199        subgroupPartitionedInclusiveMulNV ( global 4-component vector of int)
+0:199          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:199            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:199              Constant:
+0:199                3 (const int)
+0:199            Constant:
+0:199              1 (const int)
+0:199          'ballot' ( temp 4-component vector of uint)
+0:201      move second child to first child ( temp uint)
+0:201        direct index ( temp uint)
+0:201          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:201            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201              'invocation' ( temp uint)
+0:201            Constant:
+0:201              2 (const int)
+0:201          Constant:
+0:201            0 (const int)
+0:201        subgroupPartitionedInclusiveMulNV ( global uint)
+0:201          direct index ( temp uint)
+0:201            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:201              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:201                Constant:
+0:201                  0 (const int)
+0:201              Constant:
+0:201                2 (const int)
+0:201            Constant:
+0:201              0 (const int)
+0:201          'ballot' ( temp 4-component vector of uint)
+0:202      move second child to first child ( temp 2-component vector of uint)
+0:202        vector swizzle ( temp 2-component vector of uint)
+0:202          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:202            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202              'invocation' ( temp uint)
+0:202            Constant:
+0:202              2 (const int)
+0:202          Sequence
+0:202            Constant:
+0:202              0 (const int)
+0:202            Constant:
+0:202              1 (const int)
+0:202        subgroupPartitionedInclusiveMulNV ( global 2-component vector of uint)
+0:202          vector swizzle ( temp 2-component vector of uint)
+0:202            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:202              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:202                Constant:
+0:202                  1 (const int)
+0:202              Constant:
+0:202                2 (const int)
+0:202            Sequence
+0:202              Constant:
+0:202                0 (const int)
+0:202              Constant:
+0:202                1 (const int)
+0:202          'ballot' ( temp 4-component vector of uint)
+0:203      move second child to first child ( temp 3-component vector of uint)
+0:203        vector swizzle ( temp 3-component vector of uint)
+0:203          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:203            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:203              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:203              'invocation' ( temp uint)
+0:203            Constant:
+0:203              2 (const int)
+0:203          Sequence
+0:203            Constant:
+0:203              0 (const int)
+0:203            Constant:
+0:203              1 (const int)
+0:203            Constant:
+0:203              2 (const int)
+0:203        subgroupPartitionedInclusiveMulNV ( global 3-component vector of uint)
+0:203          vector swizzle ( temp 3-component vector of uint)
+0:203            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:203              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:203                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:203                Constant:
+0:203                  2 (const int)
+0:203              Constant:
+0:203                2 (const int)
+0:203            Sequence
+0:203              Constant:
+0:203                0 (const int)
+0:203              Constant:
+0:203                1 (const int)
+0:203              Constant:
+0:203                2 (const int)
+0:203          'ballot' ( temp 4-component vector of uint)
+0:204      move second child to first child ( temp 4-component vector of uint)
+0:204        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:204          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204            'invocation' ( temp uint)
+0:204          Constant:
+0:204            2 (const int)
+0:204        subgroupPartitionedInclusiveMulNV ( global 4-component vector of uint)
+0:204          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:204            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:204              Constant:
+0:204                3 (const int)
+0:204            Constant:
+0:204              2 (const int)
+0:204          'ballot' ( temp 4-component vector of uint)
+0:206      move second child to first child ( temp double)
+0:206        direct index ( temp double)
+0:206          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:206            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206              'invocation' ( temp uint)
+0:206            Constant:
+0:206              3 (const int)
+0:206          Constant:
+0:206            0 (const int)
+0:206        subgroupPartitionedInclusiveMulNV ( global double)
+0:206          direct index ( temp double)
+0:206            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:206              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:206                Constant:
+0:206                  0 (const int)
+0:206              Constant:
+0:206                3 (const int)
+0:206            Constant:
+0:206              0 (const int)
+0:206          'ballot' ( temp 4-component vector of uint)
+0:207      move second child to first child ( temp 2-component vector of double)
+0:207        vector swizzle ( temp 2-component vector of double)
+0:207          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:207            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207              'invocation' ( temp uint)
+0:207            Constant:
+0:207              3 (const int)
+0:207          Sequence
+0:207            Constant:
+0:207              0 (const int)
+0:207            Constant:
+0:207              1 (const int)
+0:207        subgroupPartitionedInclusiveMulNV ( global 2-component vector of double)
+0:207          vector swizzle ( temp 2-component vector of double)
+0:207            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:207              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:207                Constant:
+0:207                  1 (const int)
+0:207              Constant:
+0:207                3 (const int)
+0:207            Sequence
+0:207              Constant:
+0:207                0 (const int)
+0:207              Constant:
+0:207                1 (const int)
+0:207          'ballot' ( temp 4-component vector of uint)
+0:208      move second child to first child ( temp 3-component vector of double)
+0:208        vector swizzle ( temp 3-component vector of double)
+0:208          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:208            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:208              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:208              'invocation' ( temp uint)
+0:208            Constant:
+0:208              3 (const int)
+0:208          Sequence
+0:208            Constant:
+0:208              0 (const int)
+0:208            Constant:
+0:208              1 (const int)
+0:208            Constant:
+0:208              2 (const int)
+0:208        subgroupPartitionedInclusiveMulNV ( global 3-component vector of double)
+0:208          vector swizzle ( temp 3-component vector of double)
+0:208            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:208              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:208                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:208                Constant:
+0:208                  2 (const int)
+0:208              Constant:
+0:208                3 (const int)
+0:208            Sequence
+0:208              Constant:
+0:208                0 (const int)
+0:208              Constant:
+0:208                1 (const int)
+0:208              Constant:
+0:208                2 (const int)
+0:208          'ballot' ( temp 4-component vector of uint)
+0:209      move second child to first child ( temp 4-component vector of double)
+0:209        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:209          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209            'invocation' ( temp uint)
+0:209          Constant:
+0:209            3 (const int)
+0:209        subgroupPartitionedInclusiveMulNV ( global 4-component vector of double)
+0:209          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:209            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:209              Constant:
+0:209                3 (const int)
+0:209            Constant:
+0:209              3 (const int)
+0:209          'ballot' ( temp 4-component vector of uint)
+0:211      move second child to first child ( temp float)
+0:211        direct index ( temp float)
+0:211          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:211            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211              'invocation' ( temp uint)
+0:211            Constant:
+0:211              0 (const int)
+0:211          Constant:
+0:211            0 (const int)
+0:211        subgroupPartitionedInclusiveMinNV ( global float)
+0:211          direct index ( temp float)
+0:211            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:211              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:211                Constant:
+0:211                  0 (const int)
+0:211              Constant:
+0:211                0 (const int)
+0:211            Constant:
+0:211              0 (const int)
+0:211          'ballot' ( temp 4-component vector of uint)
+0:212      move second child to first child ( temp 2-component vector of float)
+0:212        vector swizzle ( temp 2-component vector of float)
+0:212          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:212            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212              'invocation' ( temp uint)
+0:212            Constant:
+0:212              0 (const int)
+0:212          Sequence
+0:212            Constant:
+0:212              0 (const int)
+0:212            Constant:
+0:212              1 (const int)
+0:212        subgroupPartitionedInclusiveMinNV ( global 2-component vector of float)
+0:212          vector swizzle ( temp 2-component vector of float)
+0:212            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:212              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:212                Constant:
+0:212                  1 (const int)
+0:212              Constant:
+0:212                0 (const int)
+0:212            Sequence
+0:212              Constant:
+0:212                0 (const int)
+0:212              Constant:
+0:212                1 (const int)
+0:212          'ballot' ( temp 4-component vector of uint)
+0:213      move second child to first child ( temp 3-component vector of float)
+0:213        vector swizzle ( temp 3-component vector of float)
+0:213          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:213            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:213              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:213              'invocation' ( temp uint)
+0:213            Constant:
+0:213              0 (const int)
+0:213          Sequence
+0:213            Constant:
+0:213              0 (const int)
+0:213            Constant:
+0:213              1 (const int)
+0:213            Constant:
+0:213              2 (const int)
+0:213        subgroupPartitionedInclusiveMinNV ( global 3-component vector of float)
+0:213          vector swizzle ( temp 3-component vector of float)
+0:213            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:213              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:213                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:213                Constant:
+0:213                  2 (const int)
+0:213              Constant:
+0:213                0 (const int)
+0:213            Sequence
+0:213              Constant:
+0:213                0 (const int)
+0:213              Constant:
+0:213                1 (const int)
+0:213              Constant:
+0:213                2 (const int)
+0:213          'ballot' ( temp 4-component vector of uint)
+0:214      move second child to first child ( temp 4-component vector of float)
+0:214        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:214          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214            'invocation' ( temp uint)
+0:214          Constant:
+0:214            0 (const int)
+0:214        subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:214          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:214            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:214              Constant:
+0:214                3 (const int)
+0:214            Constant:
+0:214              0 (const int)
+0:214          'ballot' ( temp 4-component vector of uint)
+0:216      move second child to first child ( temp int)
+0:216        direct index ( temp int)
+0:216          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:216            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216              'invocation' ( temp uint)
+0:216            Constant:
+0:216              1 (const int)
+0:216          Constant:
+0:216            0 (const int)
+0:216        subgroupPartitionedInclusiveMinNV ( global int)
+0:216          direct index ( temp int)
+0:216            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:216              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:216                Constant:
+0:216                  0 (const int)
+0:216              Constant:
+0:216                1 (const int)
+0:216            Constant:
+0:216              0 (const int)
+0:216          'ballot' ( temp 4-component vector of uint)
+0:217      move second child to first child ( temp 2-component vector of int)
+0:217        vector swizzle ( temp 2-component vector of int)
+0:217          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:217            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217              'invocation' ( temp uint)
+0:217            Constant:
+0:217              1 (const int)
+0:217          Sequence
+0:217            Constant:
+0:217              0 (const int)
+0:217            Constant:
+0:217              1 (const int)
+0:217        subgroupPartitionedInclusiveMinNV ( global 2-component vector of int)
+0:217          vector swizzle ( temp 2-component vector of int)
+0:217            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:217              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:217                Constant:
+0:217                  1 (const int)
+0:217              Constant:
+0:217                1 (const int)
+0:217            Sequence
+0:217              Constant:
+0:217                0 (const int)
+0:217              Constant:
+0:217                1 (const int)
+0:217          'ballot' ( temp 4-component vector of uint)
+0:218      move second child to first child ( temp 3-component vector of int)
+0:218        vector swizzle ( temp 3-component vector of int)
+0:218          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:218            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:218              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:218              'invocation' ( temp uint)
+0:218            Constant:
+0:218              1 (const int)
+0:218          Sequence
+0:218            Constant:
+0:218              0 (const int)
+0:218            Constant:
+0:218              1 (const int)
+0:218            Constant:
+0:218              2 (const int)
+0:218        subgroupPartitionedInclusiveMinNV ( global 3-component vector of int)
+0:218          vector swizzle ( temp 3-component vector of int)
+0:218            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:218              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:218                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:218                Constant:
+0:218                  2 (const int)
+0:218              Constant:
+0:218                1 (const int)
+0:218            Sequence
+0:218              Constant:
+0:218                0 (const int)
+0:218              Constant:
+0:218                1 (const int)
+0:218              Constant:
+0:218                2 (const int)
+0:218          'ballot' ( temp 4-component vector of uint)
+0:219      move second child to first child ( temp 4-component vector of int)
+0:219        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:219          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219            'invocation' ( temp uint)
+0:219          Constant:
+0:219            1 (const int)
+0:219        subgroupPartitionedInclusiveMinNV ( global 4-component vector of int)
+0:219          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:219            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:219              Constant:
+0:219                3 (const int)
+0:219            Constant:
+0:219              1 (const int)
+0:219          'ballot' ( temp 4-component vector of uint)
+0:221      move second child to first child ( temp uint)
+0:221        direct index ( temp uint)
+0:221          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:221            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221              'invocation' ( temp uint)
+0:221            Constant:
+0:221              2 (const int)
+0:221          Constant:
+0:221            0 (const int)
+0:221        subgroupPartitionedInclusiveMinNV ( global uint)
+0:221          direct index ( temp uint)
+0:221            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:221              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:221                Constant:
+0:221                  0 (const int)
+0:221              Constant:
+0:221                2 (const int)
+0:221            Constant:
+0:221              0 (const int)
+0:221          'ballot' ( temp 4-component vector of uint)
+0:222      move second child to first child ( temp 2-component vector of uint)
+0:222        vector swizzle ( temp 2-component vector of uint)
+0:222          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:222            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222              'invocation' ( temp uint)
+0:222            Constant:
+0:222              2 (const int)
+0:222          Sequence
+0:222            Constant:
+0:222              0 (const int)
+0:222            Constant:
+0:222              1 (const int)
+0:222        subgroupPartitionedInclusiveMinNV ( global 2-component vector of uint)
+0:222          vector swizzle ( temp 2-component vector of uint)
+0:222            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:222              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:222                Constant:
+0:222                  1 (const int)
+0:222              Constant:
+0:222                2 (const int)
+0:222            Sequence
+0:222              Constant:
+0:222                0 (const int)
+0:222              Constant:
+0:222                1 (const int)
+0:222          'ballot' ( temp 4-component vector of uint)
+0:223      move second child to first child ( temp 3-component vector of uint)
+0:223        vector swizzle ( temp 3-component vector of uint)
+0:223          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:223            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:223              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:223              'invocation' ( temp uint)
+0:223            Constant:
+0:223              2 (const int)
+0:223          Sequence
+0:223            Constant:
+0:223              0 (const int)
+0:223            Constant:
+0:223              1 (const int)
+0:223            Constant:
+0:223              2 (const int)
+0:223        subgroupPartitionedInclusiveMinNV ( global 3-component vector of uint)
+0:223          vector swizzle ( temp 3-component vector of uint)
+0:223            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:223              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:223                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:223                Constant:
+0:223                  2 (const int)
+0:223              Constant:
+0:223                2 (const int)
+0:223            Sequence
+0:223              Constant:
+0:223                0 (const int)
+0:223              Constant:
+0:223                1 (const int)
+0:223              Constant:
+0:223                2 (const int)
+0:223          'ballot' ( temp 4-component vector of uint)
+0:224      move second child to first child ( temp 4-component vector of uint)
+0:224        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:224          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224            'invocation' ( temp uint)
+0:224          Constant:
+0:224            2 (const int)
+0:224        subgroupPartitionedInclusiveMinNV ( global 4-component vector of uint)
+0:224          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:224            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:224              Constant:
+0:224                3 (const int)
+0:224            Constant:
+0:224              2 (const int)
+0:224          'ballot' ( temp 4-component vector of uint)
+0:226      move second child to first child ( temp double)
+0:226        direct index ( temp double)
+0:226          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:226            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226              'invocation' ( temp uint)
+0:226            Constant:
+0:226              3 (const int)
+0:226          Constant:
+0:226            0 (const int)
+0:226        subgroupPartitionedInclusiveMinNV ( global double)
+0:226          direct index ( temp double)
+0:226            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:226              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:226                Constant:
+0:226                  0 (const int)
+0:226              Constant:
+0:226                3 (const int)
+0:226            Constant:
+0:226              0 (const int)
+0:226          'ballot' ( temp 4-component vector of uint)
+0:227      move second child to first child ( temp 2-component vector of double)
+0:227        vector swizzle ( temp 2-component vector of double)
+0:227          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:227            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227              'invocation' ( temp uint)
+0:227            Constant:
+0:227              3 (const int)
+0:227          Sequence
+0:227            Constant:
+0:227              0 (const int)
+0:227            Constant:
+0:227              1 (const int)
+0:227        subgroupPartitionedInclusiveMinNV ( global 2-component vector of double)
+0:227          vector swizzle ( temp 2-component vector of double)
+0:227            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:227              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:227                Constant:
+0:227                  1 (const int)
+0:227              Constant:
+0:227                3 (const int)
+0:227            Sequence
+0:227              Constant:
+0:227                0 (const int)
+0:227              Constant:
+0:227                1 (const int)
+0:227          'ballot' ( temp 4-component vector of uint)
+0:228      move second child to first child ( temp 3-component vector of double)
+0:228        vector swizzle ( temp 3-component vector of double)
+0:228          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:228            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:228              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:228              'invocation' ( temp uint)
+0:228            Constant:
+0:228              3 (const int)
+0:228          Sequence
+0:228            Constant:
+0:228              0 (const int)
+0:228            Constant:
+0:228              1 (const int)
+0:228            Constant:
+0:228              2 (const int)
+0:228        subgroupPartitionedInclusiveMinNV ( global 3-component vector of double)
+0:228          vector swizzle ( temp 3-component vector of double)
+0:228            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:228              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:228                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:228                Constant:
+0:228                  2 (const int)
+0:228              Constant:
+0:228                3 (const int)
+0:228            Sequence
+0:228              Constant:
+0:228                0 (const int)
+0:228              Constant:
+0:228                1 (const int)
+0:228              Constant:
+0:228                2 (const int)
+0:228          'ballot' ( temp 4-component vector of uint)
+0:229      move second child to first child ( temp 4-component vector of double)
+0:229        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:229          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229            'invocation' ( temp uint)
+0:229          Constant:
+0:229            3 (const int)
+0:229        subgroupPartitionedInclusiveMinNV ( global 4-component vector of double)
+0:229          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:229            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:229              Constant:
+0:229                3 (const int)
+0:229            Constant:
+0:229              3 (const int)
+0:229          'ballot' ( temp 4-component vector of uint)
+0:231      move second child to first child ( temp float)
+0:231        direct index ( temp float)
+0:231          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:231            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231              'invocation' ( temp uint)
+0:231            Constant:
+0:231              0 (const int)
+0:231          Constant:
+0:231            0 (const int)
+0:231        subgroupPartitionedInclusiveMaxNV ( global float)
+0:231          direct index ( temp float)
+0:231            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:231              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:231                Constant:
+0:231                  0 (const int)
+0:231              Constant:
+0:231                0 (const int)
+0:231            Constant:
+0:231              0 (const int)
+0:231          'ballot' ( temp 4-component vector of uint)
+0:232      move second child to first child ( temp 2-component vector of float)
+0:232        vector swizzle ( temp 2-component vector of float)
+0:232          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:232            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232              'invocation' ( temp uint)
+0:232            Constant:
+0:232              0 (const int)
+0:232          Sequence
+0:232            Constant:
+0:232              0 (const int)
+0:232            Constant:
+0:232              1 (const int)
+0:232        subgroupPartitionedInclusiveMaxNV ( global 2-component vector of float)
+0:232          vector swizzle ( temp 2-component vector of float)
+0:232            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:232              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:232                Constant:
+0:232                  1 (const int)
+0:232              Constant:
+0:232                0 (const int)
+0:232            Sequence
+0:232              Constant:
+0:232                0 (const int)
+0:232              Constant:
+0:232                1 (const int)
+0:232          'ballot' ( temp 4-component vector of uint)
+0:233      move second child to first child ( temp 3-component vector of float)
+0:233        vector swizzle ( temp 3-component vector of float)
+0:233          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:233            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:233              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:233              'invocation' ( temp uint)
+0:233            Constant:
+0:233              0 (const int)
+0:233          Sequence
+0:233            Constant:
+0:233              0 (const int)
+0:233            Constant:
+0:233              1 (const int)
+0:233            Constant:
+0:233              2 (const int)
+0:233        subgroupPartitionedInclusiveMaxNV ( global 3-component vector of float)
+0:233          vector swizzle ( temp 3-component vector of float)
+0:233            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:233              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:233                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:233                Constant:
+0:233                  2 (const int)
+0:233              Constant:
+0:233                0 (const int)
+0:233            Sequence
+0:233              Constant:
+0:233                0 (const int)
+0:233              Constant:
+0:233                1 (const int)
+0:233              Constant:
+0:233                2 (const int)
+0:233          'ballot' ( temp 4-component vector of uint)
+0:234      move second child to first child ( temp 4-component vector of float)
+0:234        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:234          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234            'invocation' ( temp uint)
+0:234          Constant:
+0:234            0 (const int)
+0:234        subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:234          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:234            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:234              Constant:
+0:234                3 (const int)
+0:234            Constant:
+0:234              0 (const int)
+0:234          'ballot' ( temp 4-component vector of uint)
+0:236      move second child to first child ( temp int)
+0:236        direct index ( temp int)
+0:236          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:236            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236              'invocation' ( temp uint)
+0:236            Constant:
+0:236              1 (const int)
+0:236          Constant:
+0:236            0 (const int)
+0:236        subgroupPartitionedInclusiveMaxNV ( global int)
+0:236          direct index ( temp int)
+0:236            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:236              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:236                Constant:
+0:236                  0 (const int)
+0:236              Constant:
+0:236                1 (const int)
+0:236            Constant:
+0:236              0 (const int)
+0:236          'ballot' ( temp 4-component vector of uint)
+0:237      move second child to first child ( temp 2-component vector of int)
+0:237        vector swizzle ( temp 2-component vector of int)
+0:237          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:237            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237              'invocation' ( temp uint)
+0:237            Constant:
+0:237              1 (const int)
+0:237          Sequence
+0:237            Constant:
+0:237              0 (const int)
+0:237            Constant:
+0:237              1 (const int)
+0:237        subgroupPartitionedInclusiveMaxNV ( global 2-component vector of int)
+0:237          vector swizzle ( temp 2-component vector of int)
+0:237            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:237              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:237                Constant:
+0:237                  1 (const int)
+0:237              Constant:
+0:237                1 (const int)
+0:237            Sequence
+0:237              Constant:
+0:237                0 (const int)
+0:237              Constant:
+0:237                1 (const int)
+0:237          'ballot' ( temp 4-component vector of uint)
+0:238      move second child to first child ( temp 3-component vector of int)
+0:238        vector swizzle ( temp 3-component vector of int)
+0:238          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:238            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:238              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:238              'invocation' ( temp uint)
+0:238            Constant:
+0:238              1 (const int)
+0:238          Sequence
+0:238            Constant:
+0:238              0 (const int)
+0:238            Constant:
+0:238              1 (const int)
+0:238            Constant:
+0:238              2 (const int)
+0:238        subgroupPartitionedInclusiveMaxNV ( global 3-component vector of int)
+0:238          vector swizzle ( temp 3-component vector of int)
+0:238            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:238              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:238                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:238                Constant:
+0:238                  2 (const int)
+0:238              Constant:
+0:238                1 (const int)
+0:238            Sequence
+0:238              Constant:
+0:238                0 (const int)
+0:238              Constant:
+0:238                1 (const int)
+0:238              Constant:
+0:238                2 (const int)
+0:238          'ballot' ( temp 4-component vector of uint)
+0:239      move second child to first child ( temp 4-component vector of int)
+0:239        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:239          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239            'invocation' ( temp uint)
+0:239          Constant:
+0:239            1 (const int)
+0:239        subgroupPartitionedInclusiveMaxNV ( global 4-component vector of int)
+0:239          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:239            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:239              Constant:
+0:239                3 (const int)
+0:239            Constant:
+0:239              1 (const int)
+0:239          'ballot' ( temp 4-component vector of uint)
+0:241      move second child to first child ( temp uint)
+0:241        direct index ( temp uint)
+0:241          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:241            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241              'invocation' ( temp uint)
+0:241            Constant:
+0:241              2 (const int)
+0:241          Constant:
+0:241            0 (const int)
+0:241        subgroupPartitionedInclusiveMaxNV ( global uint)
+0:241          direct index ( temp uint)
+0:241            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:241              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:241                Constant:
+0:241                  0 (const int)
+0:241              Constant:
+0:241                2 (const int)
+0:241            Constant:
+0:241              0 (const int)
+0:241          'ballot' ( temp 4-component vector of uint)
+0:242      move second child to first child ( temp 2-component vector of uint)
+0:242        vector swizzle ( temp 2-component vector of uint)
+0:242          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:242            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242              'invocation' ( temp uint)
+0:242            Constant:
+0:242              2 (const int)
+0:242          Sequence
+0:242            Constant:
+0:242              0 (const int)
+0:242            Constant:
+0:242              1 (const int)
+0:242        subgroupPartitionedInclusiveMaxNV ( global 2-component vector of uint)
+0:242          vector swizzle ( temp 2-component vector of uint)
+0:242            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:242              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:242                Constant:
+0:242                  1 (const int)
+0:242              Constant:
+0:242                2 (const int)
+0:242            Sequence
+0:242              Constant:
+0:242                0 (const int)
+0:242              Constant:
+0:242                1 (const int)
+0:242          'ballot' ( temp 4-component vector of uint)
+0:243      move second child to first child ( temp 3-component vector of uint)
+0:243        vector swizzle ( temp 3-component vector of uint)
+0:243          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:243            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:243              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:243              'invocation' ( temp uint)
+0:243            Constant:
+0:243              2 (const int)
+0:243          Sequence
+0:243            Constant:
+0:243              0 (const int)
+0:243            Constant:
+0:243              1 (const int)
+0:243            Constant:
+0:243              2 (const int)
+0:243        subgroupPartitionedInclusiveMaxNV ( global 3-component vector of uint)
+0:243          vector swizzle ( temp 3-component vector of uint)
+0:243            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:243              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:243                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:243                Constant:
+0:243                  2 (const int)
+0:243              Constant:
+0:243                2 (const int)
+0:243            Sequence
+0:243              Constant:
+0:243                0 (const int)
+0:243              Constant:
+0:243                1 (const int)
+0:243              Constant:
+0:243                2 (const int)
+0:243          'ballot' ( temp 4-component vector of uint)
+0:244      move second child to first child ( temp 4-component vector of uint)
+0:244        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:244          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244            'invocation' ( temp uint)
+0:244          Constant:
+0:244            2 (const int)
+0:244        subgroupPartitionedInclusiveMaxNV ( global 4-component vector of uint)
+0:244          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:244            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:244              Constant:
+0:244                3 (const int)
+0:244            Constant:
+0:244              2 (const int)
+0:244          'ballot' ( temp 4-component vector of uint)
+0:246      move second child to first child ( temp double)
+0:246        direct index ( temp double)
+0:246          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:246            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246              'invocation' ( temp uint)
+0:246            Constant:
+0:246              3 (const int)
+0:246          Constant:
+0:246            0 (const int)
+0:246        subgroupPartitionedInclusiveMaxNV ( global double)
+0:246          direct index ( temp double)
+0:246            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:246              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:246                Constant:
+0:246                  0 (const int)
+0:246              Constant:
+0:246                3 (const int)
+0:246            Constant:
+0:246              0 (const int)
+0:246          'ballot' ( temp 4-component vector of uint)
+0:247      move second child to first child ( temp 2-component vector of double)
+0:247        vector swizzle ( temp 2-component vector of double)
+0:247          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:247            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247              'invocation' ( temp uint)
+0:247            Constant:
+0:247              3 (const int)
+0:247          Sequence
+0:247            Constant:
+0:247              0 (const int)
+0:247            Constant:
+0:247              1 (const int)
+0:247        subgroupPartitionedInclusiveMaxNV ( global 2-component vector of double)
+0:247          vector swizzle ( temp 2-component vector of double)
+0:247            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:247              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:247                Constant:
+0:247                  1 (const int)
+0:247              Constant:
+0:247                3 (const int)
+0:247            Sequence
+0:247              Constant:
+0:247                0 (const int)
+0:247              Constant:
+0:247                1 (const int)
+0:247          'ballot' ( temp 4-component vector of uint)
+0:248      move second child to first child ( temp 3-component vector of double)
+0:248        vector swizzle ( temp 3-component vector of double)
+0:248          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:248            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:248              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:248              'invocation' ( temp uint)
+0:248            Constant:
+0:248              3 (const int)
+0:248          Sequence
+0:248            Constant:
+0:248              0 (const int)
+0:248            Constant:
+0:248              1 (const int)
+0:248            Constant:
+0:248              2 (const int)
+0:248        subgroupPartitionedInclusiveMaxNV ( global 3-component vector of double)
+0:248          vector swizzle ( temp 3-component vector of double)
+0:248            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:248              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:248                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:248                Constant:
+0:248                  2 (const int)
+0:248              Constant:
+0:248                3 (const int)
+0:248            Sequence
+0:248              Constant:
+0:248                0 (const int)
+0:248              Constant:
+0:248                1 (const int)
+0:248              Constant:
+0:248                2 (const int)
+0:248          'ballot' ( temp 4-component vector of uint)
+0:249      move second child to first child ( temp 4-component vector of double)
+0:249        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:249          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249            'invocation' ( temp uint)
+0:249          Constant:
+0:249            3 (const int)
+0:249        subgroupPartitionedInclusiveMaxNV ( global 4-component vector of double)
+0:249          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:249            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:249              Constant:
+0:249                3 (const int)
+0:249            Constant:
+0:249              3 (const int)
+0:249          'ballot' ( temp 4-component vector of uint)
+0:251      move second child to first child ( temp int)
+0:251        direct index ( temp int)
+0:251          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:251            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251              'invocation' ( temp uint)
+0:251            Constant:
+0:251              1 (const int)
+0:251          Constant:
+0:251            0 (const int)
+0:251        subgroupPartitionedInclusiveAndNV ( global int)
+0:251          direct index ( temp int)
+0:251            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:251              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:251                Constant:
+0:251                  0 (const int)
+0:251              Constant:
+0:251                1 (const int)
+0:251            Constant:
+0:251              0 (const int)
+0:251          'ballot' ( temp 4-component vector of uint)
+0:252      move second child to first child ( temp 2-component vector of int)
+0:252        vector swizzle ( temp 2-component vector of int)
+0:252          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:252            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252              'invocation' ( temp uint)
+0:252            Constant:
+0:252              1 (const int)
+0:252          Sequence
+0:252            Constant:
+0:252              0 (const int)
+0:252            Constant:
+0:252              1 (const int)
+0:252        subgroupPartitionedInclusiveAndNV ( global 2-component vector of int)
+0:252          vector swizzle ( temp 2-component vector of int)
+0:252            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:252              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:252                Constant:
+0:252                  1 (const int)
+0:252              Constant:
+0:252                1 (const int)
+0:252            Sequence
+0:252              Constant:
+0:252                0 (const int)
+0:252              Constant:
+0:252                1 (const int)
+0:252          'ballot' ( temp 4-component vector of uint)
+0:253      move second child to first child ( temp 3-component vector of int)
+0:253        vector swizzle ( temp 3-component vector of int)
+0:253          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:253            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:253              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:253              'invocation' ( temp uint)
+0:253            Constant:
+0:253              1 (const int)
+0:253          Sequence
+0:253            Constant:
+0:253              0 (const int)
+0:253            Constant:
+0:253              1 (const int)
+0:253            Constant:
+0:253              2 (const int)
+0:253        subgroupPartitionedInclusiveAndNV ( global 3-component vector of int)
+0:253          vector swizzle ( temp 3-component vector of int)
+0:253            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:253              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:253                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:253                Constant:
+0:253                  2 (const int)
+0:253              Constant:
+0:253                1 (const int)
+0:253            Sequence
+0:253              Constant:
+0:253                0 (const int)
+0:253              Constant:
+0:253                1 (const int)
+0:253              Constant:
+0:253                2 (const int)
+0:253          'ballot' ( temp 4-component vector of uint)
+0:254      move second child to first child ( temp 4-component vector of int)
+0:254        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:254          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254            'invocation' ( temp uint)
+0:254          Constant:
+0:254            1 (const int)
+0:254        subgroupPartitionedInclusiveAndNV ( global 4-component vector of int)
+0:254          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:254            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:254              Constant:
+0:254                3 (const int)
+0:254            Constant:
+0:254              1 (const int)
+0:254          'ballot' ( temp 4-component vector of uint)
+0:256      move second child to first child ( temp uint)
+0:256        direct index ( temp uint)
+0:256          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:256            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256              'invocation' ( temp uint)
+0:256            Constant:
+0:256              2 (const int)
+0:256          Constant:
+0:256            0 (const int)
+0:256        subgroupPartitionedInclusiveAndNV ( global uint)
+0:256          direct index ( temp uint)
+0:256            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:256              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:256                Constant:
+0:256                  0 (const int)
+0:256              Constant:
+0:256                2 (const int)
+0:256            Constant:
+0:256              0 (const int)
+0:256          'ballot' ( temp 4-component vector of uint)
+0:257      move second child to first child ( temp 2-component vector of uint)
+0:257        vector swizzle ( temp 2-component vector of uint)
+0:257          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:257            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257              'invocation' ( temp uint)
+0:257            Constant:
+0:257              2 (const int)
+0:257          Sequence
+0:257            Constant:
+0:257              0 (const int)
+0:257            Constant:
+0:257              1 (const int)
+0:257        subgroupPartitionedInclusiveAndNV ( global 2-component vector of uint)
+0:257          vector swizzle ( temp 2-component vector of uint)
+0:257            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:257              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:257                Constant:
+0:257                  1 (const int)
+0:257              Constant:
+0:257                2 (const int)
+0:257            Sequence
+0:257              Constant:
+0:257                0 (const int)
+0:257              Constant:
+0:257                1 (const int)
+0:257          'ballot' ( temp 4-component vector of uint)
+0:258      move second child to first child ( temp 3-component vector of uint)
+0:258        vector swizzle ( temp 3-component vector of uint)
+0:258          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:258            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:258              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:258              'invocation' ( temp uint)
+0:258            Constant:
+0:258              2 (const int)
+0:258          Sequence
+0:258            Constant:
+0:258              0 (const int)
+0:258            Constant:
+0:258              1 (const int)
+0:258            Constant:
+0:258              2 (const int)
+0:258        subgroupPartitionedInclusiveAndNV ( global 3-component vector of uint)
+0:258          vector swizzle ( temp 3-component vector of uint)
+0:258            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:258              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:258                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:258                Constant:
+0:258                  2 (const int)
+0:258              Constant:
+0:258                2 (const int)
+0:258            Sequence
+0:258              Constant:
+0:258                0 (const int)
+0:258              Constant:
+0:258                1 (const int)
+0:258              Constant:
+0:258                2 (const int)
+0:258          'ballot' ( temp 4-component vector of uint)
+0:259      move second child to first child ( temp 4-component vector of uint)
+0:259        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:259          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259            'invocation' ( temp uint)
+0:259          Constant:
+0:259            2 (const int)
+0:259        subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:259          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:259            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:259              Constant:
+0:259                3 (const int)
+0:259            Constant:
+0:259              2 (const int)
+0:259          'ballot' ( temp 4-component vector of uint)
+0:261      move second child to first child ( temp int)
+0:261        direct index ( temp int)
+0:261          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:261            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261              'invocation' ( temp uint)
+0:261            Constant:
+0:261              1 (const int)
+0:261          Constant:
+0:261            0 (const int)
+0:261        Convert bool to int ( temp int)
+0:261          subgroupPartitionedInclusiveAndNV ( global bool)
+0:261            Compare Less Than ( temp bool)
+0:261              direct index ( temp int)
+0:261                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:261                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:261                    Constant:
+0:261                      0 (const int)
+0:261                  Constant:
+0:261                    1 (const int)
+0:261                Constant:
+0:261                  0 (const int)
+0:261              Constant:
+0:261                0 (const int)
+0:261            'ballot' ( temp 4-component vector of uint)
+0:262      move second child to first child ( temp 2-component vector of int)
+0:262        vector swizzle ( temp 2-component vector of int)
+0:262          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:262            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262              'invocation' ( temp uint)
+0:262            Constant:
+0:262              1 (const int)
+0:262          Sequence
+0:262            Constant:
+0:262              0 (const int)
+0:262            Constant:
+0:262              1 (const int)
+0:262        Convert bool to int ( temp 2-component vector of int)
+0:262          subgroupPartitionedInclusiveAndNV ( global 2-component vector of bool)
+0:262            Compare Less Than ( global 2-component vector of bool)
+0:262              vector swizzle ( temp 2-component vector of int)
+0:262                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:262                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:262                    Constant:
+0:262                      1 (const int)
+0:262                  Constant:
+0:262                    1 (const int)
+0:262                Sequence
+0:262                  Constant:
+0:262                    0 (const int)
+0:262                  Constant:
+0:262                    1 (const int)
+0:262              Constant:
+0:262                0 (const int)
+0:262                0 (const int)
+0:262            'ballot' ( temp 4-component vector of uint)
+0:263      move second child to first child ( temp 3-component vector of int)
+0:263        vector swizzle ( temp 3-component vector of int)
+0:263          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:263            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:263              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:263              'invocation' ( temp uint)
+0:263            Constant:
+0:263              1 (const int)
+0:263          Sequence
+0:263            Constant:
+0:263              0 (const int)
+0:263            Constant:
+0:263              1 (const int)
+0:263            Constant:
+0:263              2 (const int)
+0:263        Convert bool to int ( temp 3-component vector of int)
+0:263          subgroupPartitionedInclusiveAndNV ( global 3-component vector of bool)
+0:263            Compare Less Than ( global 3-component vector of bool)
+0:263              vector swizzle ( temp 3-component vector of int)
+0:263                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:263                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:263                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:263                    Constant:
+0:263                      1 (const int)
+0:263                  Constant:
+0:263                    1 (const int)
+0:263                Sequence
+0:263                  Constant:
+0:263                    0 (const int)
+0:263                  Constant:
+0:263                    1 (const int)
+0:263                  Constant:
+0:263                    2 (const int)
+0:263              Constant:
+0:263                0 (const int)
+0:263                0 (const int)
+0:263                0 (const int)
+0:263            'ballot' ( temp 4-component vector of uint)
+0:264      move second child to first child ( temp 4-component vector of int)
+0:264        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:264          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264            'invocation' ( temp uint)
+0:264          Constant:
+0:264            1 (const int)
+0:264        Convert bool to int ( temp 4-component vector of int)
+0:264          subgroupPartitionedInclusiveAndNV ( global 4-component vector of bool)
+0:264            Compare Less Than ( global 4-component vector of bool)
+0:264              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:264                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:264                  Constant:
+0:264                    1 (const int)
+0:264                Constant:
+0:264                  1 (const int)
+0:264              Constant:
+0:264                0 (const int)
+0:264                0 (const int)
+0:264                0 (const int)
+0:264                0 (const int)
+0:264            'ballot' ( temp 4-component vector of uint)
+0:266      move second child to first child ( temp int)
+0:266        direct index ( temp int)
+0:266          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:266            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266              'invocation' ( temp uint)
+0:266            Constant:
+0:266              1 (const int)
+0:266          Constant:
+0:266            0 (const int)
+0:266        subgroupPartitionedInclusiveOrNV ( global int)
+0:266          direct index ( temp int)
+0:266            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:266              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:266                Constant:
+0:266                  0 (const int)
+0:266              Constant:
+0:266                1 (const int)
+0:266            Constant:
+0:266              0 (const int)
+0:266          'ballot' ( temp 4-component vector of uint)
+0:267      move second child to first child ( temp 2-component vector of int)
+0:267        vector swizzle ( temp 2-component vector of int)
+0:267          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:267            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267              'invocation' ( temp uint)
+0:267            Constant:
+0:267              1 (const int)
+0:267          Sequence
+0:267            Constant:
+0:267              0 (const int)
+0:267            Constant:
+0:267              1 (const int)
+0:267        subgroupPartitionedInclusiveOrNV ( global 2-component vector of int)
+0:267          vector swizzle ( temp 2-component vector of int)
+0:267            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:267              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:267                Constant:
+0:267                  1 (const int)
+0:267              Constant:
+0:267                1 (const int)
+0:267            Sequence
+0:267              Constant:
+0:267                0 (const int)
+0:267              Constant:
+0:267                1 (const int)
+0:267          'ballot' ( temp 4-component vector of uint)
+0:268      move second child to first child ( temp 3-component vector of int)
+0:268        vector swizzle ( temp 3-component vector of int)
+0:268          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:268            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:268              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:268              'invocation' ( temp uint)
+0:268            Constant:
+0:268              1 (const int)
+0:268          Sequence
+0:268            Constant:
+0:268              0 (const int)
+0:268            Constant:
+0:268              1 (const int)
+0:268            Constant:
+0:268              2 (const int)
+0:268        subgroupPartitionedInclusiveOrNV ( global 3-component vector of int)
+0:268          vector swizzle ( temp 3-component vector of int)
+0:268            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:268              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:268                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:268                Constant:
+0:268                  2 (const int)
+0:268              Constant:
+0:268                1 (const int)
+0:268            Sequence
+0:268              Constant:
+0:268                0 (const int)
+0:268              Constant:
+0:268                1 (const int)
+0:268              Constant:
+0:268                2 (const int)
+0:268          'ballot' ( temp 4-component vector of uint)
+0:269      move second child to first child ( temp 4-component vector of int)
+0:269        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:269          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269            'invocation' ( temp uint)
+0:269          Constant:
+0:269            1 (const int)
+0:269        subgroupPartitionedInclusiveOrNV ( global 4-component vector of int)
+0:269          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:269            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:269              Constant:
+0:269                3 (const int)
+0:269            Constant:
+0:269              1 (const int)
+0:269          'ballot' ( temp 4-component vector of uint)
+0:271      move second child to first child ( temp uint)
+0:271        direct index ( temp uint)
+0:271          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:271            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271              'invocation' ( temp uint)
+0:271            Constant:
+0:271              2 (const int)
+0:271          Constant:
+0:271            0 (const int)
+0:271        subgroupPartitionedInclusiveOrNV ( global uint)
+0:271          direct index ( temp uint)
+0:271            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:271              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:271                Constant:
+0:271                  0 (const int)
+0:271              Constant:
+0:271                2 (const int)
+0:271            Constant:
+0:271              0 (const int)
+0:271          'ballot' ( temp 4-component vector of uint)
+0:272      move second child to first child ( temp 2-component vector of uint)
+0:272        vector swizzle ( temp 2-component vector of uint)
+0:272          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:272            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272              'invocation' ( temp uint)
+0:272            Constant:
+0:272              2 (const int)
+0:272          Sequence
+0:272            Constant:
+0:272              0 (const int)
+0:272            Constant:
+0:272              1 (const int)
+0:272        subgroupPartitionedInclusiveOrNV ( global 2-component vector of uint)
+0:272          vector swizzle ( temp 2-component vector of uint)
+0:272            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:272              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:272                Constant:
+0:272                  1 (const int)
+0:272              Constant:
+0:272                2 (const int)
+0:272            Sequence
+0:272              Constant:
+0:272                0 (const int)
+0:272              Constant:
+0:272                1 (const int)
+0:272          'ballot' ( temp 4-component vector of uint)
+0:273      move second child to first child ( temp 3-component vector of uint)
+0:273        vector swizzle ( temp 3-component vector of uint)
+0:273          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:273            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:273              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:273              'invocation' ( temp uint)
+0:273            Constant:
+0:273              2 (const int)
+0:273          Sequence
+0:273            Constant:
+0:273              0 (const int)
+0:273            Constant:
+0:273              1 (const int)
+0:273            Constant:
+0:273              2 (const int)
+0:273        subgroupPartitionedInclusiveOrNV ( global 3-component vector of uint)
+0:273          vector swizzle ( temp 3-component vector of uint)
+0:273            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:273              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:273                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:273                Constant:
+0:273                  2 (const int)
+0:273              Constant:
+0:273                2 (const int)
+0:273            Sequence
+0:273              Constant:
+0:273                0 (const int)
+0:273              Constant:
+0:273                1 (const int)
+0:273              Constant:
+0:273                2 (const int)
+0:273          'ballot' ( temp 4-component vector of uint)
+0:274      move second child to first child ( temp 4-component vector of uint)
+0:274        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:274          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274            'invocation' ( temp uint)
+0:274          Constant:
+0:274            2 (const int)
+0:274        subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:274          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:274            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:274              Constant:
+0:274                3 (const int)
+0:274            Constant:
+0:274              2 (const int)
+0:274          'ballot' ( temp 4-component vector of uint)
+0:276      move second child to first child ( temp int)
+0:276        direct index ( temp int)
+0:276          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:276            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276              'invocation' ( temp uint)
+0:276            Constant:
+0:276              1 (const int)
+0:276          Constant:
+0:276            0 (const int)
+0:276        Convert bool to int ( temp int)
+0:276          subgroupPartitionedInclusiveOrNV ( global bool)
+0:276            Compare Less Than ( temp bool)
+0:276              direct index ( temp int)
+0:276                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:276                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:276                    Constant:
+0:276                      0 (const int)
+0:276                  Constant:
+0:276                    1 (const int)
+0:276                Constant:
+0:276                  0 (const int)
+0:276              Constant:
+0:276                0 (const int)
+0:276            'ballot' ( temp 4-component vector of uint)
+0:277      move second child to first child ( temp 2-component vector of int)
+0:277        vector swizzle ( temp 2-component vector of int)
+0:277          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:277            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277              'invocation' ( temp uint)
+0:277            Constant:
+0:277              1 (const int)
+0:277          Sequence
+0:277            Constant:
+0:277              0 (const int)
+0:277            Constant:
+0:277              1 (const int)
+0:277        Convert bool to int ( temp 2-component vector of int)
+0:277          subgroupPartitionedInclusiveOrNV ( global 2-component vector of bool)
+0:277            Compare Less Than ( global 2-component vector of bool)
+0:277              vector swizzle ( temp 2-component vector of int)
+0:277                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:277                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:277                    Constant:
+0:277                      1 (const int)
+0:277                  Constant:
+0:277                    1 (const int)
+0:277                Sequence
+0:277                  Constant:
+0:277                    0 (const int)
+0:277                  Constant:
+0:277                    1 (const int)
+0:277              Constant:
+0:277                0 (const int)
+0:277                0 (const int)
+0:277            'ballot' ( temp 4-component vector of uint)
+0:278      move second child to first child ( temp 3-component vector of int)
+0:278        vector swizzle ( temp 3-component vector of int)
+0:278          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:278            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:278              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:278              'invocation' ( temp uint)
+0:278            Constant:
+0:278              1 (const int)
+0:278          Sequence
+0:278            Constant:
+0:278              0 (const int)
+0:278            Constant:
+0:278              1 (const int)
+0:278            Constant:
+0:278              2 (const int)
+0:278        Convert bool to int ( temp 3-component vector of int)
+0:278          subgroupPartitionedInclusiveOrNV ( global 3-component vector of bool)
+0:278            Compare Less Than ( global 3-component vector of bool)
+0:278              vector swizzle ( temp 3-component vector of int)
+0:278                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:278                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:278                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:278                    Constant:
+0:278                      1 (const int)
+0:278                  Constant:
+0:278                    1 (const int)
+0:278                Sequence
+0:278                  Constant:
+0:278                    0 (const int)
+0:278                  Constant:
+0:278                    1 (const int)
+0:278                  Constant:
+0:278                    2 (const int)
+0:278              Constant:
+0:278                0 (const int)
+0:278                0 (const int)
+0:278                0 (const int)
+0:278            'ballot' ( temp 4-component vector of uint)
+0:279      move second child to first child ( temp 4-component vector of int)
+0:279        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:279          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279            'invocation' ( temp uint)
+0:279          Constant:
+0:279            1 (const int)
+0:279        Convert bool to int ( temp 4-component vector of int)
+0:279          subgroupPartitionedInclusiveOrNV ( global 4-component vector of bool)
+0:279            Compare Less Than ( global 4-component vector of bool)
+0:279              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:279                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:279                  Constant:
+0:279                    1 (const int)
+0:279                Constant:
+0:279                  1 (const int)
+0:279              Constant:
+0:279                0 (const int)
+0:279                0 (const int)
+0:279                0 (const int)
+0:279                0 (const int)
+0:279            'ballot' ( temp 4-component vector of uint)
+0:281      move second child to first child ( temp int)
+0:281        direct index ( temp int)
+0:281          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:281            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281              'invocation' ( temp uint)
+0:281            Constant:
+0:281              1 (const int)
+0:281          Constant:
+0:281            0 (const int)
+0:281        subgroupPartitionedInclusiveXorNV ( global int)
+0:281          direct index ( temp int)
+0:281            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:281              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:281                Constant:
+0:281                  0 (const int)
+0:281              Constant:
+0:281                1 (const int)
+0:281            Constant:
+0:281              0 (const int)
+0:281          'ballot' ( temp 4-component vector of uint)
+0:282      move second child to first child ( temp 2-component vector of int)
+0:282        vector swizzle ( temp 2-component vector of int)
+0:282          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:282            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282              'invocation' ( temp uint)
+0:282            Constant:
+0:282              1 (const int)
+0:282          Sequence
+0:282            Constant:
+0:282              0 (const int)
+0:282            Constant:
+0:282              1 (const int)
+0:282        subgroupPartitionedInclusiveXorNV ( global 2-component vector of int)
+0:282          vector swizzle ( temp 2-component vector of int)
+0:282            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:282              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:282                Constant:
+0:282                  1 (const int)
+0:282              Constant:
+0:282                1 (const int)
+0:282            Sequence
+0:282              Constant:
+0:282                0 (const int)
+0:282              Constant:
+0:282                1 (const int)
+0:282          'ballot' ( temp 4-component vector of uint)
+0:283      move second child to first child ( temp 3-component vector of int)
+0:283        vector swizzle ( temp 3-component vector of int)
+0:283          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:283            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:283              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:283              'invocation' ( temp uint)
+0:283            Constant:
+0:283              1 (const int)
+0:283          Sequence
+0:283            Constant:
+0:283              0 (const int)
+0:283            Constant:
+0:283              1 (const int)
+0:283            Constant:
+0:283              2 (const int)
+0:283        subgroupPartitionedInclusiveXorNV ( global 3-component vector of int)
+0:283          vector swizzle ( temp 3-component vector of int)
+0:283            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:283              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:283                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:283                Constant:
+0:283                  2 (const int)
+0:283              Constant:
+0:283                1 (const int)
+0:283            Sequence
+0:283              Constant:
+0:283                0 (const int)
+0:283              Constant:
+0:283                1 (const int)
+0:283              Constant:
+0:283                2 (const int)
+0:283          'ballot' ( temp 4-component vector of uint)
+0:284      move second child to first child ( temp 4-component vector of int)
+0:284        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:284          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284            'invocation' ( temp uint)
+0:284          Constant:
+0:284            1 (const int)
+0:284        subgroupPartitionedInclusiveXorNV ( global 4-component vector of int)
+0:284          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:284            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:284              Constant:
+0:284                3 (const int)
+0:284            Constant:
+0:284              1 (const int)
+0:284          'ballot' ( temp 4-component vector of uint)
+0:286      move second child to first child ( temp uint)
+0:286        direct index ( temp uint)
+0:286          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:286            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286              'invocation' ( temp uint)
+0:286            Constant:
+0:286              2 (const int)
+0:286          Constant:
+0:286            0 (const int)
+0:286        subgroupPartitionedInclusiveXorNV ( global uint)
+0:286          direct index ( temp uint)
+0:286            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:286              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:286                Constant:
+0:286                  0 (const int)
+0:286              Constant:
+0:286                2 (const int)
+0:286            Constant:
+0:286              0 (const int)
+0:286          'ballot' ( temp 4-component vector of uint)
+0:287      move second child to first child ( temp 2-component vector of uint)
+0:287        vector swizzle ( temp 2-component vector of uint)
+0:287          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:287            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287              'invocation' ( temp uint)
+0:287            Constant:
+0:287              2 (const int)
+0:287          Sequence
+0:287            Constant:
+0:287              0 (const int)
+0:287            Constant:
+0:287              1 (const int)
+0:287        subgroupPartitionedInclusiveXorNV ( global 2-component vector of uint)
+0:287          vector swizzle ( temp 2-component vector of uint)
+0:287            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:287              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:287                Constant:
+0:287                  1 (const int)
+0:287              Constant:
+0:287                2 (const int)
+0:287            Sequence
+0:287              Constant:
+0:287                0 (const int)
+0:287              Constant:
+0:287                1 (const int)
+0:287          'ballot' ( temp 4-component vector of uint)
+0:288      move second child to first child ( temp 3-component vector of uint)
+0:288        vector swizzle ( temp 3-component vector of uint)
+0:288          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:288            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:288              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:288              'invocation' ( temp uint)
+0:288            Constant:
+0:288              2 (const int)
+0:288          Sequence
+0:288            Constant:
+0:288              0 (const int)
+0:288            Constant:
+0:288              1 (const int)
+0:288            Constant:
+0:288              2 (const int)
+0:288        subgroupPartitionedInclusiveXorNV ( global 3-component vector of uint)
+0:288          vector swizzle ( temp 3-component vector of uint)
+0:288            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:288              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:288                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:288                Constant:
+0:288                  2 (const int)
+0:288              Constant:
+0:288                2 (const int)
+0:288            Sequence
+0:288              Constant:
+0:288                0 (const int)
+0:288              Constant:
+0:288                1 (const int)
+0:288              Constant:
+0:288                2 (const int)
+0:288          'ballot' ( temp 4-component vector of uint)
+0:289      move second child to first child ( temp 4-component vector of uint)
+0:289        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:289          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289            'invocation' ( temp uint)
+0:289          Constant:
+0:289            2 (const int)
+0:289        subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:289          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:289            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:289              Constant:
+0:289                3 (const int)
+0:289            Constant:
+0:289              2 (const int)
+0:289          'ballot' ( temp 4-component vector of uint)
+0:291      move second child to first child ( temp int)
+0:291        direct index ( temp int)
+0:291          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:291            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291              'invocation' ( temp uint)
+0:291            Constant:
+0:291              1 (const int)
+0:291          Constant:
+0:291            0 (const int)
+0:291        Convert bool to int ( temp int)
+0:291          subgroupPartitionedInclusiveXorNV ( global bool)
+0:291            Compare Less Than ( temp bool)
+0:291              direct index ( temp int)
+0:291                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:291                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:291                    Constant:
+0:291                      0 (const int)
+0:291                  Constant:
+0:291                    1 (const int)
+0:291                Constant:
+0:291                  0 (const int)
+0:291              Constant:
+0:291                0 (const int)
+0:291            'ballot' ( temp 4-component vector of uint)
+0:292      move second child to first child ( temp 2-component vector of int)
+0:292        vector swizzle ( temp 2-component vector of int)
+0:292          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:292            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292              'invocation' ( temp uint)
+0:292            Constant:
+0:292              1 (const int)
+0:292          Sequence
+0:292            Constant:
+0:292              0 (const int)
+0:292            Constant:
+0:292              1 (const int)
+0:292        Convert bool to int ( temp 2-component vector of int)
+0:292          subgroupPartitionedInclusiveXorNV ( global 2-component vector of bool)
+0:292            Compare Less Than ( global 2-component vector of bool)
+0:292              vector swizzle ( temp 2-component vector of int)
+0:292                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:292                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:292                    Constant:
+0:292                      1 (const int)
+0:292                  Constant:
+0:292                    1 (const int)
+0:292                Sequence
+0:292                  Constant:
+0:292                    0 (const int)
+0:292                  Constant:
+0:292                    1 (const int)
+0:292              Constant:
+0:292                0 (const int)
+0:292                0 (const int)
+0:292            'ballot' ( temp 4-component vector of uint)
+0:293      move second child to first child ( temp 3-component vector of int)
+0:293        vector swizzle ( temp 3-component vector of int)
+0:293          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:293            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:293              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:293              'invocation' ( temp uint)
+0:293            Constant:
+0:293              1 (const int)
+0:293          Sequence
+0:293            Constant:
+0:293              0 (const int)
+0:293            Constant:
+0:293              1 (const int)
+0:293            Constant:
+0:293              2 (const int)
+0:293        Convert bool to int ( temp 3-component vector of int)
+0:293          subgroupPartitionedInclusiveXorNV ( global 3-component vector of bool)
+0:293            Compare Less Than ( global 3-component vector of bool)
+0:293              vector swizzle ( temp 3-component vector of int)
+0:293                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:293                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:293                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:293                    Constant:
+0:293                      1 (const int)
+0:293                  Constant:
+0:293                    1 (const int)
+0:293                Sequence
+0:293                  Constant:
+0:293                    0 (const int)
+0:293                  Constant:
+0:293                    1 (const int)
+0:293                  Constant:
+0:293                    2 (const int)
+0:293              Constant:
+0:293                0 (const int)
+0:293                0 (const int)
+0:293                0 (const int)
+0:293            'ballot' ( temp 4-component vector of uint)
+0:294      move second child to first child ( temp 4-component vector of int)
+0:294        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:294          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294            'invocation' ( temp uint)
+0:294          Constant:
+0:294            1 (const int)
+0:294        Convert bool to int ( temp 4-component vector of int)
+0:294          subgroupPartitionedInclusiveXorNV ( global 4-component vector of bool)
+0:294            Compare Less Than ( global 4-component vector of bool)
+0:294              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:294                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:294                  Constant:
+0:294                    1 (const int)
+0:294                Constant:
+0:294                  1 (const int)
+0:294              Constant:
+0:294                0 (const int)
+0:294                0 (const int)
+0:294                0 (const int)
+0:294                0 (const int)
+0:294            'ballot' ( temp 4-component vector of uint)
+0:296      move second child to first child ( temp float)
+0:296        direct index ( temp float)
+0:296          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:296            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296              'invocation' ( temp uint)
+0:296            Constant:
+0:296              0 (const int)
+0:296          Constant:
+0:296            0 (const int)
+0:296        subgroupPartitionedExclusiveAddNV ( global float)
+0:296          direct index ( temp float)
+0:296            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:296              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:296                Constant:
+0:296                  0 (const int)
+0:296              Constant:
+0:296                0 (const int)
+0:296            Constant:
+0:296              0 (const int)
+0:296          'ballot' ( temp 4-component vector of uint)
+0:297      move second child to first child ( temp 2-component vector of float)
+0:297        vector swizzle ( temp 2-component vector of float)
+0:297          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:297            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297              'invocation' ( temp uint)
+0:297            Constant:
+0:297              0 (const int)
+0:297          Sequence
+0:297            Constant:
+0:297              0 (const int)
+0:297            Constant:
+0:297              1 (const int)
+0:297        subgroupPartitionedExclusiveAddNV ( global 2-component vector of float)
+0:297          vector swizzle ( temp 2-component vector of float)
+0:297            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:297              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:297                Constant:
+0:297                  1 (const int)
+0:297              Constant:
+0:297                0 (const int)
+0:297            Sequence
+0:297              Constant:
+0:297                0 (const int)
+0:297              Constant:
+0:297                1 (const int)
+0:297          'ballot' ( temp 4-component vector of uint)
+0:298      move second child to first child ( temp 3-component vector of float)
+0:298        vector swizzle ( temp 3-component vector of float)
+0:298          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:298            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:298              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:298              'invocation' ( temp uint)
+0:298            Constant:
+0:298              0 (const int)
+0:298          Sequence
+0:298            Constant:
+0:298              0 (const int)
+0:298            Constant:
+0:298              1 (const int)
+0:298            Constant:
+0:298              2 (const int)
+0:298        subgroupPartitionedExclusiveAddNV ( global 3-component vector of float)
+0:298          vector swizzle ( temp 3-component vector of float)
+0:298            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:298              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:298                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:298                Constant:
+0:298                  2 (const int)
+0:298              Constant:
+0:298                0 (const int)
+0:298            Sequence
+0:298              Constant:
+0:298                0 (const int)
+0:298              Constant:
+0:298                1 (const int)
+0:298              Constant:
+0:298                2 (const int)
+0:298          'ballot' ( temp 4-component vector of uint)
+0:299      move second child to first child ( temp 4-component vector of float)
+0:299        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:299          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299            'invocation' ( temp uint)
+0:299          Constant:
+0:299            0 (const int)
+0:299        subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:299          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:299            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:299              Constant:
+0:299                3 (const int)
+0:299            Constant:
+0:299              0 (const int)
+0:299          'ballot' ( temp 4-component vector of uint)
+0:301      move second child to first child ( temp int)
+0:301        direct index ( temp int)
+0:301          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:301            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301              'invocation' ( temp uint)
+0:301            Constant:
+0:301              1 (const int)
+0:301          Constant:
+0:301            0 (const int)
+0:301        subgroupPartitionedExclusiveAddNV ( global int)
+0:301          direct index ( temp int)
+0:301            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:301              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:301                Constant:
+0:301                  0 (const int)
+0:301              Constant:
+0:301                1 (const int)
+0:301            Constant:
+0:301              0 (const int)
+0:301          'ballot' ( temp 4-component vector of uint)
+0:302      move second child to first child ( temp 2-component vector of int)
+0:302        vector swizzle ( temp 2-component vector of int)
+0:302          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:302            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302              'invocation' ( temp uint)
+0:302            Constant:
+0:302              1 (const int)
+0:302          Sequence
+0:302            Constant:
+0:302              0 (const int)
+0:302            Constant:
+0:302              1 (const int)
+0:302        subgroupPartitionedExclusiveAddNV ( global 2-component vector of int)
+0:302          vector swizzle ( temp 2-component vector of int)
+0:302            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:302              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:302                Constant:
+0:302                  1 (const int)
+0:302              Constant:
+0:302                1 (const int)
+0:302            Sequence
+0:302              Constant:
+0:302                0 (const int)
+0:302              Constant:
+0:302                1 (const int)
+0:302          'ballot' ( temp 4-component vector of uint)
+0:303      move second child to first child ( temp 3-component vector of int)
+0:303        vector swizzle ( temp 3-component vector of int)
+0:303          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:303            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:303              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:303              'invocation' ( temp uint)
+0:303            Constant:
+0:303              1 (const int)
+0:303          Sequence
+0:303            Constant:
+0:303              0 (const int)
+0:303            Constant:
+0:303              1 (const int)
+0:303            Constant:
+0:303              2 (const int)
+0:303        subgroupPartitionedExclusiveAddNV ( global 3-component vector of int)
+0:303          vector swizzle ( temp 3-component vector of int)
+0:303            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:303              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:303                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:303                Constant:
+0:303                  2 (const int)
+0:303              Constant:
+0:303                1 (const int)
+0:303            Sequence
+0:303              Constant:
+0:303                0 (const int)
+0:303              Constant:
+0:303                1 (const int)
+0:303              Constant:
+0:303                2 (const int)
+0:303          'ballot' ( temp 4-component vector of uint)
+0:304      move second child to first child ( temp 4-component vector of int)
+0:304        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:304          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304            'invocation' ( temp uint)
+0:304          Constant:
+0:304            1 (const int)
+0:304        subgroupPartitionedExclusiveAddNV ( global 4-component vector of int)
+0:304          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:304            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:304              Constant:
+0:304                3 (const int)
+0:304            Constant:
+0:304              1 (const int)
+0:304          'ballot' ( temp 4-component vector of uint)
+0:306      move second child to first child ( temp uint)
+0:306        direct index ( temp uint)
+0:306          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:306            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306              'invocation' ( temp uint)
+0:306            Constant:
+0:306              2 (const int)
+0:306          Constant:
+0:306            0 (const int)
+0:306        subgroupPartitionedExclusiveAddNV ( global uint)
+0:306          direct index ( temp uint)
+0:306            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:306              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:306                Constant:
+0:306                  0 (const int)
+0:306              Constant:
+0:306                2 (const int)
+0:306            Constant:
+0:306              0 (const int)
+0:306          'ballot' ( temp 4-component vector of uint)
+0:307      move second child to first child ( temp 2-component vector of uint)
+0:307        vector swizzle ( temp 2-component vector of uint)
+0:307          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:307            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307              'invocation' ( temp uint)
+0:307            Constant:
+0:307              2 (const int)
+0:307          Sequence
+0:307            Constant:
+0:307              0 (const int)
+0:307            Constant:
+0:307              1 (const int)
+0:307        subgroupPartitionedExclusiveAddNV ( global 2-component vector of uint)
+0:307          vector swizzle ( temp 2-component vector of uint)
+0:307            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:307              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:307                Constant:
+0:307                  1 (const int)
+0:307              Constant:
+0:307                2 (const int)
+0:307            Sequence
+0:307              Constant:
+0:307                0 (const int)
+0:307              Constant:
+0:307                1 (const int)
+0:307          'ballot' ( temp 4-component vector of uint)
+0:308      move second child to first child ( temp 3-component vector of uint)
+0:308        vector swizzle ( temp 3-component vector of uint)
+0:308          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:308            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:308              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:308              'invocation' ( temp uint)
+0:308            Constant:
+0:308              2 (const int)
+0:308          Sequence
+0:308            Constant:
+0:308              0 (const int)
+0:308            Constant:
+0:308              1 (const int)
+0:308            Constant:
+0:308              2 (const int)
+0:308        subgroupPartitionedExclusiveAddNV ( global 3-component vector of uint)
+0:308          vector swizzle ( temp 3-component vector of uint)
+0:308            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:308              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:308                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:308                Constant:
+0:308                  2 (const int)
+0:308              Constant:
+0:308                2 (const int)
+0:308            Sequence
+0:308              Constant:
+0:308                0 (const int)
+0:308              Constant:
+0:308                1 (const int)
+0:308              Constant:
+0:308                2 (const int)
+0:308          'ballot' ( temp 4-component vector of uint)
+0:309      move second child to first child ( temp 4-component vector of uint)
+0:309        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:309          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309            'invocation' ( temp uint)
+0:309          Constant:
+0:309            2 (const int)
+0:309        subgroupPartitionedExclusiveAddNV ( global 4-component vector of uint)
+0:309          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:309            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:309              Constant:
+0:309                3 (const int)
+0:309            Constant:
+0:309              2 (const int)
+0:309          'ballot' ( temp 4-component vector of uint)
+0:311      move second child to first child ( temp double)
+0:311        direct index ( temp double)
+0:311          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:311            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311              'invocation' ( temp uint)
+0:311            Constant:
+0:311              3 (const int)
+0:311          Constant:
+0:311            0 (const int)
+0:311        subgroupPartitionedExclusiveAddNV ( global double)
+0:311          direct index ( temp double)
+0:311            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:311              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:311                Constant:
+0:311                  0 (const int)
+0:311              Constant:
+0:311                3 (const int)
+0:311            Constant:
+0:311              0 (const int)
+0:311          'ballot' ( temp 4-component vector of uint)
+0:312      move second child to first child ( temp 2-component vector of double)
+0:312        vector swizzle ( temp 2-component vector of double)
+0:312          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:312            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312              'invocation' ( temp uint)
+0:312            Constant:
+0:312              3 (const int)
+0:312          Sequence
+0:312            Constant:
+0:312              0 (const int)
+0:312            Constant:
+0:312              1 (const int)
+0:312        subgroupPartitionedExclusiveAddNV ( global 2-component vector of double)
+0:312          vector swizzle ( temp 2-component vector of double)
+0:312            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:312              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:312                Constant:
+0:312                  1 (const int)
+0:312              Constant:
+0:312                3 (const int)
+0:312            Sequence
+0:312              Constant:
+0:312                0 (const int)
+0:312              Constant:
+0:312                1 (const int)
+0:312          'ballot' ( temp 4-component vector of uint)
+0:313      move second child to first child ( temp 3-component vector of double)
+0:313        vector swizzle ( temp 3-component vector of double)
+0:313          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:313            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:313              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:313              'invocation' ( temp uint)
+0:313            Constant:
+0:313              3 (const int)
+0:313          Sequence
+0:313            Constant:
+0:313              0 (const int)
+0:313            Constant:
+0:313              1 (const int)
+0:313            Constant:
+0:313              2 (const int)
+0:313        subgroupPartitionedExclusiveAddNV ( global 3-component vector of double)
+0:313          vector swizzle ( temp 3-component vector of double)
+0:313            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:313              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:313                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:313                Constant:
+0:313                  2 (const int)
+0:313              Constant:
+0:313                3 (const int)
+0:313            Sequence
+0:313              Constant:
+0:313                0 (const int)
+0:313              Constant:
+0:313                1 (const int)
+0:313              Constant:
+0:313                2 (const int)
+0:313          'ballot' ( temp 4-component vector of uint)
+0:314      move second child to first child ( temp 4-component vector of double)
+0:314        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:314          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314            'invocation' ( temp uint)
+0:314          Constant:
+0:314            3 (const int)
+0:314        subgroupPartitionedExclusiveAddNV ( global 4-component vector of double)
+0:314          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:314            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:314              Constant:
+0:314                3 (const int)
+0:314            Constant:
+0:314              3 (const int)
+0:314          'ballot' ( temp 4-component vector of uint)
+0:316      move second child to first child ( temp float)
+0:316        direct index ( temp float)
+0:316          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:316            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316              'invocation' ( temp uint)
+0:316            Constant:
+0:316              0 (const int)
+0:316          Constant:
+0:316            0 (const int)
+0:316        subgroupPartitionedExclusiveMulNV ( global float)
+0:316          direct index ( temp float)
+0:316            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:316              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:316                Constant:
+0:316                  0 (const int)
+0:316              Constant:
+0:316                0 (const int)
+0:316            Constant:
+0:316              0 (const int)
+0:316          'ballot' ( temp 4-component vector of uint)
+0:317      move second child to first child ( temp 2-component vector of float)
+0:317        vector swizzle ( temp 2-component vector of float)
+0:317          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:317            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317              'invocation' ( temp uint)
+0:317            Constant:
+0:317              0 (const int)
+0:317          Sequence
+0:317            Constant:
+0:317              0 (const int)
+0:317            Constant:
+0:317              1 (const int)
+0:317        subgroupPartitionedExclusiveMulNV ( global 2-component vector of float)
+0:317          vector swizzle ( temp 2-component vector of float)
+0:317            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:317              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:317                Constant:
+0:317                  1 (const int)
+0:317              Constant:
+0:317                0 (const int)
+0:317            Sequence
+0:317              Constant:
+0:317                0 (const int)
+0:317              Constant:
+0:317                1 (const int)
+0:317          'ballot' ( temp 4-component vector of uint)
+0:318      move second child to first child ( temp 3-component vector of float)
+0:318        vector swizzle ( temp 3-component vector of float)
+0:318          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:318            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:318              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:318              'invocation' ( temp uint)
+0:318            Constant:
+0:318              0 (const int)
+0:318          Sequence
+0:318            Constant:
+0:318              0 (const int)
+0:318            Constant:
+0:318              1 (const int)
+0:318            Constant:
+0:318              2 (const int)
+0:318        subgroupPartitionedExclusiveMulNV ( global 3-component vector of float)
+0:318          vector swizzle ( temp 3-component vector of float)
+0:318            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:318              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:318                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:318                Constant:
+0:318                  2 (const int)
+0:318              Constant:
+0:318                0 (const int)
+0:318            Sequence
+0:318              Constant:
+0:318                0 (const int)
+0:318              Constant:
+0:318                1 (const int)
+0:318              Constant:
+0:318                2 (const int)
+0:318          'ballot' ( temp 4-component vector of uint)
+0:319      move second child to first child ( temp 4-component vector of float)
+0:319        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:319          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319            'invocation' ( temp uint)
+0:319          Constant:
+0:319            0 (const int)
+0:319        subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:319          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:319            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:319              Constant:
+0:319                3 (const int)
+0:319            Constant:
+0:319              0 (const int)
+0:319          'ballot' ( temp 4-component vector of uint)
+0:321      move second child to first child ( temp int)
+0:321        direct index ( temp int)
+0:321          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:321            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321              'invocation' ( temp uint)
+0:321            Constant:
+0:321              1 (const int)
+0:321          Constant:
+0:321            0 (const int)
+0:321        subgroupPartitionedExclusiveMulNV ( global int)
+0:321          direct index ( temp int)
+0:321            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:321              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:321                Constant:
+0:321                  0 (const int)
+0:321              Constant:
+0:321                1 (const int)
+0:321            Constant:
+0:321              0 (const int)
+0:321          'ballot' ( temp 4-component vector of uint)
+0:322      move second child to first child ( temp 2-component vector of int)
+0:322        vector swizzle ( temp 2-component vector of int)
+0:322          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:322            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322              'invocation' ( temp uint)
+0:322            Constant:
+0:322              1 (const int)
+0:322          Sequence
+0:322            Constant:
+0:322              0 (const int)
+0:322            Constant:
+0:322              1 (const int)
+0:322        subgroupPartitionedExclusiveMulNV ( global 2-component vector of int)
+0:322          vector swizzle ( temp 2-component vector of int)
+0:322            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:322              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:322                Constant:
+0:322                  1 (const int)
+0:322              Constant:
+0:322                1 (const int)
+0:322            Sequence
+0:322              Constant:
+0:322                0 (const int)
+0:322              Constant:
+0:322                1 (const int)
+0:322          'ballot' ( temp 4-component vector of uint)
+0:323      move second child to first child ( temp 3-component vector of int)
+0:323        vector swizzle ( temp 3-component vector of int)
+0:323          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:323            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:323              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:323              'invocation' ( temp uint)
+0:323            Constant:
+0:323              1 (const int)
+0:323          Sequence
+0:323            Constant:
+0:323              0 (const int)
+0:323            Constant:
+0:323              1 (const int)
+0:323            Constant:
+0:323              2 (const int)
+0:323        subgroupPartitionedExclusiveMulNV ( global 3-component vector of int)
+0:323          vector swizzle ( temp 3-component vector of int)
+0:323            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:323              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:323                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:323                Constant:
+0:323                  2 (const int)
+0:323              Constant:
+0:323                1 (const int)
+0:323            Sequence
+0:323              Constant:
+0:323                0 (const int)
+0:323              Constant:
+0:323                1 (const int)
+0:323              Constant:
+0:323                2 (const int)
+0:323          'ballot' ( temp 4-component vector of uint)
+0:324      move second child to first child ( temp 4-component vector of int)
+0:324        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:324          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324            'invocation' ( temp uint)
+0:324          Constant:
+0:324            1 (const int)
+0:324        subgroupPartitionedExclusiveMulNV ( global 4-component vector of int)
+0:324          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:324            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:324              Constant:
+0:324                3 (const int)
+0:324            Constant:
+0:324              1 (const int)
+0:324          'ballot' ( temp 4-component vector of uint)
+0:326      move second child to first child ( temp uint)
+0:326        direct index ( temp uint)
+0:326          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:326            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326              'invocation' ( temp uint)
+0:326            Constant:
+0:326              2 (const int)
+0:326          Constant:
+0:326            0 (const int)
+0:326        subgroupPartitionedExclusiveMulNV ( global uint)
+0:326          direct index ( temp uint)
+0:326            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:326              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:326                Constant:
+0:326                  0 (const int)
+0:326              Constant:
+0:326                2 (const int)
+0:326            Constant:
+0:326              0 (const int)
+0:326          'ballot' ( temp 4-component vector of uint)
+0:327      move second child to first child ( temp 2-component vector of uint)
+0:327        vector swizzle ( temp 2-component vector of uint)
+0:327          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:327            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327              'invocation' ( temp uint)
+0:327            Constant:
+0:327              2 (const int)
+0:327          Sequence
+0:327            Constant:
+0:327              0 (const int)
+0:327            Constant:
+0:327              1 (const int)
+0:327        subgroupPartitionedExclusiveMulNV ( global 2-component vector of uint)
+0:327          vector swizzle ( temp 2-component vector of uint)
+0:327            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:327              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:327                Constant:
+0:327                  1 (const int)
+0:327              Constant:
+0:327                2 (const int)
+0:327            Sequence
+0:327              Constant:
+0:327                0 (const int)
+0:327              Constant:
+0:327                1 (const int)
+0:327          'ballot' ( temp 4-component vector of uint)
+0:328      move second child to first child ( temp 3-component vector of uint)
+0:328        vector swizzle ( temp 3-component vector of uint)
+0:328          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:328            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:328              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:328              'invocation' ( temp uint)
+0:328            Constant:
+0:328              2 (const int)
+0:328          Sequence
+0:328            Constant:
+0:328              0 (const int)
+0:328            Constant:
+0:328              1 (const int)
+0:328            Constant:
+0:328              2 (const int)
+0:328        subgroupPartitionedExclusiveMulNV ( global 3-component vector of uint)
+0:328          vector swizzle ( temp 3-component vector of uint)
+0:328            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:328              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:328                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:328                Constant:
+0:328                  2 (const int)
+0:328              Constant:
+0:328                2 (const int)
+0:328            Sequence
+0:328              Constant:
+0:328                0 (const int)
+0:328              Constant:
+0:328                1 (const int)
+0:328              Constant:
+0:328                2 (const int)
+0:328          'ballot' ( temp 4-component vector of uint)
+0:329      move second child to first child ( temp 4-component vector of uint)
+0:329        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:329          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329            'invocation' ( temp uint)
+0:329          Constant:
+0:329            2 (const int)
+0:329        subgroupPartitionedExclusiveMulNV ( global 4-component vector of uint)
+0:329          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:329            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:329              Constant:
+0:329                3 (const int)
+0:329            Constant:
+0:329              2 (const int)
+0:329          'ballot' ( temp 4-component vector of uint)
+0:331      move second child to first child ( temp double)
+0:331        direct index ( temp double)
+0:331          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:331            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331              'invocation' ( temp uint)
+0:331            Constant:
+0:331              3 (const int)
+0:331          Constant:
+0:331            0 (const int)
+0:331        subgroupPartitionedExclusiveMulNV ( global double)
+0:331          direct index ( temp double)
+0:331            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:331              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:331                Constant:
+0:331                  0 (const int)
+0:331              Constant:
+0:331                3 (const int)
+0:331            Constant:
+0:331              0 (const int)
+0:331          'ballot' ( temp 4-component vector of uint)
+0:332      move second child to first child ( temp 2-component vector of double)
+0:332        vector swizzle ( temp 2-component vector of double)
+0:332          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:332            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332              'invocation' ( temp uint)
+0:332            Constant:
+0:332              3 (const int)
+0:332          Sequence
+0:332            Constant:
+0:332              0 (const int)
+0:332            Constant:
+0:332              1 (const int)
+0:332        subgroupPartitionedExclusiveMulNV ( global 2-component vector of double)
+0:332          vector swizzle ( temp 2-component vector of double)
+0:332            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:332              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:332                Constant:
+0:332                  1 (const int)
+0:332              Constant:
+0:332                3 (const int)
+0:332            Sequence
+0:332              Constant:
+0:332                0 (const int)
+0:332              Constant:
+0:332                1 (const int)
+0:332          'ballot' ( temp 4-component vector of uint)
+0:333      move second child to first child ( temp 3-component vector of double)
+0:333        vector swizzle ( temp 3-component vector of double)
+0:333          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:333            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:333              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:333              'invocation' ( temp uint)
+0:333            Constant:
+0:333              3 (const int)
+0:333          Sequence
+0:333            Constant:
+0:333              0 (const int)
+0:333            Constant:
+0:333              1 (const int)
+0:333            Constant:
+0:333              2 (const int)
+0:333        subgroupPartitionedExclusiveMulNV ( global 3-component vector of double)
+0:333          vector swizzle ( temp 3-component vector of double)
+0:333            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:333              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:333                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:333                Constant:
+0:333                  2 (const int)
+0:333              Constant:
+0:333                3 (const int)
+0:333            Sequence
+0:333              Constant:
+0:333                0 (const int)
+0:333              Constant:
+0:333                1 (const int)
+0:333              Constant:
+0:333                2 (const int)
+0:333          'ballot' ( temp 4-component vector of uint)
+0:334      move second child to first child ( temp 4-component vector of double)
+0:334        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:334          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334            'invocation' ( temp uint)
+0:334          Constant:
+0:334            3 (const int)
+0:334        subgroupPartitionedExclusiveMulNV ( global 4-component vector of double)
+0:334          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:334            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:334              Constant:
+0:334                3 (const int)
+0:334            Constant:
+0:334              3 (const int)
+0:334          'ballot' ( temp 4-component vector of uint)
+0:336      move second child to first child ( temp float)
+0:336        direct index ( temp float)
+0:336          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:336            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336              'invocation' ( temp uint)
+0:336            Constant:
+0:336              0 (const int)
+0:336          Constant:
+0:336            0 (const int)
+0:336        subgroupPartitionedExclusiveMinNV ( global float)
+0:336          direct index ( temp float)
+0:336            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:336              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:336                Constant:
+0:336                  0 (const int)
+0:336              Constant:
+0:336                0 (const int)
+0:336            Constant:
+0:336              0 (const int)
+0:336          'ballot' ( temp 4-component vector of uint)
+0:337      move second child to first child ( temp 2-component vector of float)
+0:337        vector swizzle ( temp 2-component vector of float)
+0:337          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:337            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337              'invocation' ( temp uint)
+0:337            Constant:
+0:337              0 (const int)
+0:337          Sequence
+0:337            Constant:
+0:337              0 (const int)
+0:337            Constant:
+0:337              1 (const int)
+0:337        subgroupPartitionedExclusiveMinNV ( global 2-component vector of float)
+0:337          vector swizzle ( temp 2-component vector of float)
+0:337            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:337              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:337                Constant:
+0:337                  1 (const int)
+0:337              Constant:
+0:337                0 (const int)
+0:337            Sequence
+0:337              Constant:
+0:337                0 (const int)
+0:337              Constant:
+0:337                1 (const int)
+0:337          'ballot' ( temp 4-component vector of uint)
+0:338      move second child to first child ( temp 3-component vector of float)
+0:338        vector swizzle ( temp 3-component vector of float)
+0:338          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:338            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:338              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:338              'invocation' ( temp uint)
+0:338            Constant:
+0:338              0 (const int)
+0:338          Sequence
+0:338            Constant:
+0:338              0 (const int)
+0:338            Constant:
+0:338              1 (const int)
+0:338            Constant:
+0:338              2 (const int)
+0:338        subgroupPartitionedExclusiveMinNV ( global 3-component vector of float)
+0:338          vector swizzle ( temp 3-component vector of float)
+0:338            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:338              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:338                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:338                Constant:
+0:338                  2 (const int)
+0:338              Constant:
+0:338                0 (const int)
+0:338            Sequence
+0:338              Constant:
+0:338                0 (const int)
+0:338              Constant:
+0:338                1 (const int)
+0:338              Constant:
+0:338                2 (const int)
+0:338          'ballot' ( temp 4-component vector of uint)
+0:339      move second child to first child ( temp 4-component vector of float)
+0:339        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:339          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339            'invocation' ( temp uint)
+0:339          Constant:
+0:339            0 (const int)
+0:339        subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:339          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:339            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:339              Constant:
+0:339                3 (const int)
+0:339            Constant:
+0:339              0 (const int)
+0:339          'ballot' ( temp 4-component vector of uint)
+0:341      move second child to first child ( temp int)
+0:341        direct index ( temp int)
+0:341          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:341            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341              'invocation' ( temp uint)
+0:341            Constant:
+0:341              1 (const int)
+0:341          Constant:
+0:341            0 (const int)
+0:341        subgroupPartitionedExclusiveMinNV ( global int)
+0:341          direct index ( temp int)
+0:341            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:341              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:341                Constant:
+0:341                  0 (const int)
+0:341              Constant:
+0:341                1 (const int)
+0:341            Constant:
+0:341              0 (const int)
+0:341          'ballot' ( temp 4-component vector of uint)
+0:342      move second child to first child ( temp 2-component vector of int)
+0:342        vector swizzle ( temp 2-component vector of int)
+0:342          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:342            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342              'invocation' ( temp uint)
+0:342            Constant:
+0:342              1 (const int)
+0:342          Sequence
+0:342            Constant:
+0:342              0 (const int)
+0:342            Constant:
+0:342              1 (const int)
+0:342        subgroupPartitionedExclusiveMinNV ( global 2-component vector of int)
+0:342          vector swizzle ( temp 2-component vector of int)
+0:342            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:342              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:342                Constant:
+0:342                  1 (const int)
+0:342              Constant:
+0:342                1 (const int)
+0:342            Sequence
+0:342              Constant:
+0:342                0 (const int)
+0:342              Constant:
+0:342                1 (const int)
+0:342          'ballot' ( temp 4-component vector of uint)
+0:343      move second child to first child ( temp 3-component vector of int)
+0:343        vector swizzle ( temp 3-component vector of int)
+0:343          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:343            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:343              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:343              'invocation' ( temp uint)
+0:343            Constant:
+0:343              1 (const int)
+0:343          Sequence
+0:343            Constant:
+0:343              0 (const int)
+0:343            Constant:
+0:343              1 (const int)
+0:343            Constant:
+0:343              2 (const int)
+0:343        subgroupPartitionedExclusiveMinNV ( global 3-component vector of int)
+0:343          vector swizzle ( temp 3-component vector of int)
+0:343            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:343              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:343                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:343                Constant:
+0:343                  2 (const int)
+0:343              Constant:
+0:343                1 (const int)
+0:343            Sequence
+0:343              Constant:
+0:343                0 (const int)
+0:343              Constant:
+0:343                1 (const int)
+0:343              Constant:
+0:343                2 (const int)
+0:343          'ballot' ( temp 4-component vector of uint)
+0:344      move second child to first child ( temp 4-component vector of int)
+0:344        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:344          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344            'invocation' ( temp uint)
+0:344          Constant:
+0:344            1 (const int)
+0:344        subgroupPartitionedExclusiveMinNV ( global 4-component vector of int)
+0:344          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:344            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:344              Constant:
+0:344                3 (const int)
+0:344            Constant:
+0:344              1 (const int)
+0:344          'ballot' ( temp 4-component vector of uint)
+0:346      move second child to first child ( temp uint)
+0:346        direct index ( temp uint)
+0:346          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:346            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346              'invocation' ( temp uint)
+0:346            Constant:
+0:346              2 (const int)
+0:346          Constant:
+0:346            0 (const int)
+0:346        subgroupPartitionedExclusiveMinNV ( global uint)
+0:346          direct index ( temp uint)
+0:346            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:346              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:346                Constant:
+0:346                  0 (const int)
+0:346              Constant:
+0:346                2 (const int)
+0:346            Constant:
+0:346              0 (const int)
+0:346          'ballot' ( temp 4-component vector of uint)
+0:347      move second child to first child ( temp 2-component vector of uint)
+0:347        vector swizzle ( temp 2-component vector of uint)
+0:347          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:347            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347              'invocation' ( temp uint)
+0:347            Constant:
+0:347              2 (const int)
+0:347          Sequence
+0:347            Constant:
+0:347              0 (const int)
+0:347            Constant:
+0:347              1 (const int)
+0:347        subgroupPartitionedExclusiveMinNV ( global 2-component vector of uint)
+0:347          vector swizzle ( temp 2-component vector of uint)
+0:347            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:347              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:347                Constant:
+0:347                  1 (const int)
+0:347              Constant:
+0:347                2 (const int)
+0:347            Sequence
+0:347              Constant:
+0:347                0 (const int)
+0:347              Constant:
+0:347                1 (const int)
+0:347          'ballot' ( temp 4-component vector of uint)
+0:348      move second child to first child ( temp 3-component vector of uint)
+0:348        vector swizzle ( temp 3-component vector of uint)
+0:348          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:348            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:348              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:348              'invocation' ( temp uint)
+0:348            Constant:
+0:348              2 (const int)
+0:348          Sequence
+0:348            Constant:
+0:348              0 (const int)
+0:348            Constant:
+0:348              1 (const int)
+0:348            Constant:
+0:348              2 (const int)
+0:348        subgroupPartitionedExclusiveMinNV ( global 3-component vector of uint)
+0:348          vector swizzle ( temp 3-component vector of uint)
+0:348            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:348              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:348                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:348                Constant:
+0:348                  2 (const int)
+0:348              Constant:
+0:348                2 (const int)
+0:348            Sequence
+0:348              Constant:
+0:348                0 (const int)
+0:348              Constant:
+0:348                1 (const int)
+0:348              Constant:
+0:348                2 (const int)
+0:348          'ballot' ( temp 4-component vector of uint)
+0:349      move second child to first child ( temp 4-component vector of uint)
+0:349        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:349          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349            'invocation' ( temp uint)
+0:349          Constant:
+0:349            2 (const int)
+0:349        subgroupPartitionedExclusiveMinNV ( global 4-component vector of uint)
+0:349          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:349            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:349              Constant:
+0:349                3 (const int)
+0:349            Constant:
+0:349              2 (const int)
+0:349          'ballot' ( temp 4-component vector of uint)
+0:351      move second child to first child ( temp double)
+0:351        direct index ( temp double)
+0:351          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:351            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351              'invocation' ( temp uint)
+0:351            Constant:
+0:351              3 (const int)
+0:351          Constant:
+0:351            0 (const int)
+0:351        subgroupPartitionedExclusiveMinNV ( global double)
+0:351          direct index ( temp double)
+0:351            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:351              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:351                Constant:
+0:351                  0 (const int)
+0:351              Constant:
+0:351                3 (const int)
+0:351            Constant:
+0:351              0 (const int)
+0:351          'ballot' ( temp 4-component vector of uint)
+0:352      move second child to first child ( temp 2-component vector of double)
+0:352        vector swizzle ( temp 2-component vector of double)
+0:352          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:352            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352              'invocation' ( temp uint)
+0:352            Constant:
+0:352              3 (const int)
+0:352          Sequence
+0:352            Constant:
+0:352              0 (const int)
+0:352            Constant:
+0:352              1 (const int)
+0:352        subgroupPartitionedExclusiveMinNV ( global 2-component vector of double)
+0:352          vector swizzle ( temp 2-component vector of double)
+0:352            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:352              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:352                Constant:
+0:352                  1 (const int)
+0:352              Constant:
+0:352                3 (const int)
+0:352            Sequence
+0:352              Constant:
+0:352                0 (const int)
+0:352              Constant:
+0:352                1 (const int)
+0:352          'ballot' ( temp 4-component vector of uint)
+0:353      move second child to first child ( temp 3-component vector of double)
+0:353        vector swizzle ( temp 3-component vector of double)
+0:353          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:353            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:353              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:353              'invocation' ( temp uint)
+0:353            Constant:
+0:353              3 (const int)
+0:353          Sequence
+0:353            Constant:
+0:353              0 (const int)
+0:353            Constant:
+0:353              1 (const int)
+0:353            Constant:
+0:353              2 (const int)
+0:353        subgroupPartitionedExclusiveMinNV ( global 3-component vector of double)
+0:353          vector swizzle ( temp 3-component vector of double)
+0:353            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:353              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:353                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:353                Constant:
+0:353                  2 (const int)
+0:353              Constant:
+0:353                3 (const int)
+0:353            Sequence
+0:353              Constant:
+0:353                0 (const int)
+0:353              Constant:
+0:353                1 (const int)
+0:353              Constant:
+0:353                2 (const int)
+0:353          'ballot' ( temp 4-component vector of uint)
+0:354      move second child to first child ( temp 4-component vector of double)
+0:354        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:354          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354            'invocation' ( temp uint)
+0:354          Constant:
+0:354            3 (const int)
+0:354        subgroupPartitionedExclusiveMinNV ( global 4-component vector of double)
+0:354          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:354            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:354              Constant:
+0:354                3 (const int)
+0:354            Constant:
+0:354              3 (const int)
+0:354          'ballot' ( temp 4-component vector of uint)
+0:356      move second child to first child ( temp float)
+0:356        direct index ( temp float)
+0:356          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:356            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356              'invocation' ( temp uint)
+0:356            Constant:
+0:356              0 (const int)
+0:356          Constant:
+0:356            0 (const int)
+0:356        subgroupPartitionedExclusiveMaxNV ( global float)
+0:356          direct index ( temp float)
+0:356            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:356              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:356                Constant:
+0:356                  0 (const int)
+0:356              Constant:
+0:356                0 (const int)
+0:356            Constant:
+0:356              0 (const int)
+0:356          'ballot' ( temp 4-component vector of uint)
+0:357      move second child to first child ( temp 2-component vector of float)
+0:357        vector swizzle ( temp 2-component vector of float)
+0:357          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:357            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357              'invocation' ( temp uint)
+0:357            Constant:
+0:357              0 (const int)
+0:357          Sequence
+0:357            Constant:
+0:357              0 (const int)
+0:357            Constant:
+0:357              1 (const int)
+0:357        subgroupPartitionedExclusiveMaxNV ( global 2-component vector of float)
+0:357          vector swizzle ( temp 2-component vector of float)
+0:357            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:357              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:357                Constant:
+0:357                  1 (const int)
+0:357              Constant:
+0:357                0 (const int)
+0:357            Sequence
+0:357              Constant:
+0:357                0 (const int)
+0:357              Constant:
+0:357                1 (const int)
+0:357          'ballot' ( temp 4-component vector of uint)
+0:358      move second child to first child ( temp 3-component vector of float)
+0:358        vector swizzle ( temp 3-component vector of float)
+0:358          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:358            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:358              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:358              'invocation' ( temp uint)
+0:358            Constant:
+0:358              0 (const int)
+0:358          Sequence
+0:358            Constant:
+0:358              0 (const int)
+0:358            Constant:
+0:358              1 (const int)
+0:358            Constant:
+0:358              2 (const int)
+0:358        subgroupPartitionedExclusiveMaxNV ( global 3-component vector of float)
+0:358          vector swizzle ( temp 3-component vector of float)
+0:358            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:358              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:358                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:358                Constant:
+0:358                  2 (const int)
+0:358              Constant:
+0:358                0 (const int)
+0:358            Sequence
+0:358              Constant:
+0:358                0 (const int)
+0:358              Constant:
+0:358                1 (const int)
+0:358              Constant:
+0:358                2 (const int)
+0:358          'ballot' ( temp 4-component vector of uint)
+0:359      move second child to first child ( temp 4-component vector of float)
+0:359        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:359          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359            'invocation' ( temp uint)
+0:359          Constant:
+0:359            0 (const int)
+0:359        subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:359          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:359            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:359              Constant:
+0:359                3 (const int)
+0:359            Constant:
+0:359              0 (const int)
+0:359          'ballot' ( temp 4-component vector of uint)
+0:361      move second child to first child ( temp int)
+0:361        direct index ( temp int)
+0:361          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:361            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361              'invocation' ( temp uint)
+0:361            Constant:
+0:361              1 (const int)
+0:361          Constant:
+0:361            0 (const int)
+0:361        subgroupPartitionedExclusiveMaxNV ( global int)
+0:361          direct index ( temp int)
+0:361            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:361              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:361                Constant:
+0:361                  0 (const int)
+0:361              Constant:
+0:361                1 (const int)
+0:361            Constant:
+0:361              0 (const int)
+0:361          'ballot' ( temp 4-component vector of uint)
+0:362      move second child to first child ( temp 2-component vector of int)
+0:362        vector swizzle ( temp 2-component vector of int)
+0:362          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:362            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362              'invocation' ( temp uint)
+0:362            Constant:
+0:362              1 (const int)
+0:362          Sequence
+0:362            Constant:
+0:362              0 (const int)
+0:362            Constant:
+0:362              1 (const int)
+0:362        subgroupPartitionedExclusiveMaxNV ( global 2-component vector of int)
+0:362          vector swizzle ( temp 2-component vector of int)
+0:362            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:362              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:362                Constant:
+0:362                  1 (const int)
+0:362              Constant:
+0:362                1 (const int)
+0:362            Sequence
+0:362              Constant:
+0:362                0 (const int)
+0:362              Constant:
+0:362                1 (const int)
+0:362          'ballot' ( temp 4-component vector of uint)
+0:363      move second child to first child ( temp 3-component vector of int)
+0:363        vector swizzle ( temp 3-component vector of int)
+0:363          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:363            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:363              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:363              'invocation' ( temp uint)
+0:363            Constant:
+0:363              1 (const int)
+0:363          Sequence
+0:363            Constant:
+0:363              0 (const int)
+0:363            Constant:
+0:363              1 (const int)
+0:363            Constant:
+0:363              2 (const int)
+0:363        subgroupPartitionedExclusiveMaxNV ( global 3-component vector of int)
+0:363          vector swizzle ( temp 3-component vector of int)
+0:363            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:363              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:363                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:363                Constant:
+0:363                  2 (const int)
+0:363              Constant:
+0:363                1 (const int)
+0:363            Sequence
+0:363              Constant:
+0:363                0 (const int)
+0:363              Constant:
+0:363                1 (const int)
+0:363              Constant:
+0:363                2 (const int)
+0:363          'ballot' ( temp 4-component vector of uint)
+0:364      move second child to first child ( temp 4-component vector of int)
+0:364        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:364          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364            'invocation' ( temp uint)
+0:364          Constant:
+0:364            1 (const int)
+0:364        subgroupPartitionedExclusiveMaxNV ( global 4-component vector of int)
+0:364          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:364            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:364              Constant:
+0:364                3 (const int)
+0:364            Constant:
+0:364              1 (const int)
+0:364          'ballot' ( temp 4-component vector of uint)
+0:366      move second child to first child ( temp uint)
+0:366        direct index ( temp uint)
+0:366          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:366            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366              'invocation' ( temp uint)
+0:366            Constant:
+0:366              2 (const int)
+0:366          Constant:
+0:366            0 (const int)
+0:366        subgroupPartitionedExclusiveMaxNV ( global uint)
+0:366          direct index ( temp uint)
+0:366            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:366              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:366                Constant:
+0:366                  0 (const int)
+0:366              Constant:
+0:366                2 (const int)
+0:366            Constant:
+0:366              0 (const int)
+0:366          'ballot' ( temp 4-component vector of uint)
+0:367      move second child to first child ( temp 2-component vector of uint)
+0:367        vector swizzle ( temp 2-component vector of uint)
+0:367          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:367            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367              'invocation' ( temp uint)
+0:367            Constant:
+0:367              2 (const int)
+0:367          Sequence
+0:367            Constant:
+0:367              0 (const int)
+0:367            Constant:
+0:367              1 (const int)
+0:367        subgroupPartitionedExclusiveMaxNV ( global 2-component vector of uint)
+0:367          vector swizzle ( temp 2-component vector of uint)
+0:367            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:367              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:367                Constant:
+0:367                  1 (const int)
+0:367              Constant:
+0:367                2 (const int)
+0:367            Sequence
+0:367              Constant:
+0:367                0 (const int)
+0:367              Constant:
+0:367                1 (const int)
+0:367          'ballot' ( temp 4-component vector of uint)
+0:368      move second child to first child ( temp 3-component vector of uint)
+0:368        vector swizzle ( temp 3-component vector of uint)
+0:368          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:368            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:368              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:368              'invocation' ( temp uint)
+0:368            Constant:
+0:368              2 (const int)
+0:368          Sequence
+0:368            Constant:
+0:368              0 (const int)
+0:368            Constant:
+0:368              1 (const int)
+0:368            Constant:
+0:368              2 (const int)
+0:368        subgroupPartitionedExclusiveMaxNV ( global 3-component vector of uint)
+0:368          vector swizzle ( temp 3-component vector of uint)
+0:368            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:368              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:368                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:368                Constant:
+0:368                  2 (const int)
+0:368              Constant:
+0:368                2 (const int)
+0:368            Sequence
+0:368              Constant:
+0:368                0 (const int)
+0:368              Constant:
+0:368                1 (const int)
+0:368              Constant:
+0:368                2 (const int)
+0:368          'ballot' ( temp 4-component vector of uint)
+0:369      move second child to first child ( temp 4-component vector of uint)
+0:369        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:369          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369            'invocation' ( temp uint)
+0:369          Constant:
+0:369            2 (const int)
+0:369        subgroupPartitionedExclusiveMaxNV ( global 4-component vector of uint)
+0:369          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:369            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:369              Constant:
+0:369                3 (const int)
+0:369            Constant:
+0:369              2 (const int)
+0:369          'ballot' ( temp 4-component vector of uint)
+0:371      move second child to first child ( temp double)
+0:371        direct index ( temp double)
+0:371          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:371            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371              'invocation' ( temp uint)
+0:371            Constant:
+0:371              3 (const int)
+0:371          Constant:
+0:371            0 (const int)
+0:371        subgroupPartitionedExclusiveMaxNV ( global double)
+0:371          direct index ( temp double)
+0:371            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:371              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:371                Constant:
+0:371                  0 (const int)
+0:371              Constant:
+0:371                3 (const int)
+0:371            Constant:
+0:371              0 (const int)
+0:371          'ballot' ( temp 4-component vector of uint)
+0:372      move second child to first child ( temp 2-component vector of double)
+0:372        vector swizzle ( temp 2-component vector of double)
+0:372          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:372            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372              'invocation' ( temp uint)
+0:372            Constant:
+0:372              3 (const int)
+0:372          Sequence
+0:372            Constant:
+0:372              0 (const int)
+0:372            Constant:
+0:372              1 (const int)
+0:372        subgroupPartitionedExclusiveMaxNV ( global 2-component vector of double)
+0:372          vector swizzle ( temp 2-component vector of double)
+0:372            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:372              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:372                Constant:
+0:372                  1 (const int)
+0:372              Constant:
+0:372                3 (const int)
+0:372            Sequence
+0:372              Constant:
+0:372                0 (const int)
+0:372              Constant:
+0:372                1 (const int)
+0:372          'ballot' ( temp 4-component vector of uint)
+0:373      move second child to first child ( temp 3-component vector of double)
+0:373        vector swizzle ( temp 3-component vector of double)
+0:373          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:373            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:373              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:373              'invocation' ( temp uint)
+0:373            Constant:
+0:373              3 (const int)
+0:373          Sequence
+0:373            Constant:
+0:373              0 (const int)
+0:373            Constant:
+0:373              1 (const int)
+0:373            Constant:
+0:373              2 (const int)
+0:373        subgroupPartitionedExclusiveMaxNV ( global 3-component vector of double)
+0:373          vector swizzle ( temp 3-component vector of double)
+0:373            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:373              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:373                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:373                Constant:
+0:373                  2 (const int)
+0:373              Constant:
+0:373                3 (const int)
+0:373            Sequence
+0:373              Constant:
+0:373                0 (const int)
+0:373              Constant:
+0:373                1 (const int)
+0:373              Constant:
+0:373                2 (const int)
+0:373          'ballot' ( temp 4-component vector of uint)
+0:374      move second child to first child ( temp 4-component vector of double)
+0:374        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:374          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374            'invocation' ( temp uint)
+0:374          Constant:
+0:374            3 (const int)
+0:374        subgroupPartitionedExclusiveMaxNV ( global 4-component vector of double)
+0:374          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:374            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:374              Constant:
+0:374                3 (const int)
+0:374            Constant:
+0:374              3 (const int)
+0:374          'ballot' ( temp 4-component vector of uint)
+0:376      move second child to first child ( temp int)
+0:376        direct index ( temp int)
+0:376          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:376            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376              'invocation' ( temp uint)
+0:376            Constant:
+0:376              1 (const int)
+0:376          Constant:
+0:376            0 (const int)
+0:376        subgroupPartitionedExclusiveAndNV ( global int)
+0:376          direct index ( temp int)
+0:376            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:376              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:376                Constant:
+0:376                  0 (const int)
+0:376              Constant:
+0:376                1 (const int)
+0:376            Constant:
+0:376              0 (const int)
+0:376          'ballot' ( temp 4-component vector of uint)
+0:377      move second child to first child ( temp 2-component vector of int)
+0:377        vector swizzle ( temp 2-component vector of int)
+0:377          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:377            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377              'invocation' ( temp uint)
+0:377            Constant:
+0:377              1 (const int)
+0:377          Sequence
+0:377            Constant:
+0:377              0 (const int)
+0:377            Constant:
+0:377              1 (const int)
+0:377        subgroupPartitionedExclusiveAndNV ( global 2-component vector of int)
+0:377          vector swizzle ( temp 2-component vector of int)
+0:377            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:377              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:377                Constant:
+0:377                  1 (const int)
+0:377              Constant:
+0:377                1 (const int)
+0:377            Sequence
+0:377              Constant:
+0:377                0 (const int)
+0:377              Constant:
+0:377                1 (const int)
+0:377          'ballot' ( temp 4-component vector of uint)
+0:378      move second child to first child ( temp 3-component vector of int)
+0:378        vector swizzle ( temp 3-component vector of int)
+0:378          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:378            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:378              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:378              'invocation' ( temp uint)
+0:378            Constant:
+0:378              1 (const int)
+0:378          Sequence
+0:378            Constant:
+0:378              0 (const int)
+0:378            Constant:
+0:378              1 (const int)
+0:378            Constant:
+0:378              2 (const int)
+0:378        subgroupPartitionedExclusiveAndNV ( global 3-component vector of int)
+0:378          vector swizzle ( temp 3-component vector of int)
+0:378            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:378              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:378                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:378                Constant:
+0:378                  2 (const int)
+0:378              Constant:
+0:378                1 (const int)
+0:378            Sequence
+0:378              Constant:
+0:378                0 (const int)
+0:378              Constant:
+0:378                1 (const int)
+0:378              Constant:
+0:378                2 (const int)
+0:378          'ballot' ( temp 4-component vector of uint)
+0:379      move second child to first child ( temp 4-component vector of int)
+0:379        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:379          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379            'invocation' ( temp uint)
+0:379          Constant:
+0:379            1 (const int)
+0:379        subgroupPartitionedExclusiveAndNV ( global 4-component vector of int)
+0:379          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:379            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:379              Constant:
+0:379                3 (const int)
+0:379            Constant:
+0:379              1 (const int)
+0:379          'ballot' ( temp 4-component vector of uint)
+0:381      move second child to first child ( temp uint)
+0:381        direct index ( temp uint)
+0:381          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:381            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381              'invocation' ( temp uint)
+0:381            Constant:
+0:381              2 (const int)
+0:381          Constant:
+0:381            0 (const int)
+0:381        subgroupPartitionedExclusiveAndNV ( global uint)
+0:381          direct index ( temp uint)
+0:381            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:381              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:381                Constant:
+0:381                  0 (const int)
+0:381              Constant:
+0:381                2 (const int)
+0:381            Constant:
+0:381              0 (const int)
+0:381          'ballot' ( temp 4-component vector of uint)
+0:382      move second child to first child ( temp 2-component vector of uint)
+0:382        vector swizzle ( temp 2-component vector of uint)
+0:382          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:382            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382              'invocation' ( temp uint)
+0:382            Constant:
+0:382              2 (const int)
+0:382          Sequence
+0:382            Constant:
+0:382              0 (const int)
+0:382            Constant:
+0:382              1 (const int)
+0:382        subgroupPartitionedExclusiveAndNV ( global 2-component vector of uint)
+0:382          vector swizzle ( temp 2-component vector of uint)
+0:382            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:382              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:382                Constant:
+0:382                  1 (const int)
+0:382              Constant:
+0:382                2 (const int)
+0:382            Sequence
+0:382              Constant:
+0:382                0 (const int)
+0:382              Constant:
+0:382                1 (const int)
+0:382          'ballot' ( temp 4-component vector of uint)
+0:383      move second child to first child ( temp 3-component vector of uint)
+0:383        vector swizzle ( temp 3-component vector of uint)
+0:383          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:383            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:383              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:383              'invocation' ( temp uint)
+0:383            Constant:
+0:383              2 (const int)
+0:383          Sequence
+0:383            Constant:
+0:383              0 (const int)
+0:383            Constant:
+0:383              1 (const int)
+0:383            Constant:
+0:383              2 (const int)
+0:383        subgroupPartitionedExclusiveAndNV ( global 3-component vector of uint)
+0:383          vector swizzle ( temp 3-component vector of uint)
+0:383            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:383              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:383                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:383                Constant:
+0:383                  2 (const int)
+0:383              Constant:
+0:383                2 (const int)
+0:383            Sequence
+0:383              Constant:
+0:383                0 (const int)
+0:383              Constant:
+0:383                1 (const int)
+0:383              Constant:
+0:383                2 (const int)
+0:383          'ballot' ( temp 4-component vector of uint)
+0:384      move second child to first child ( temp 4-component vector of uint)
+0:384        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:384          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384            'invocation' ( temp uint)
+0:384          Constant:
+0:384            2 (const int)
+0:384        subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:384          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:384            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:384              Constant:
+0:384                3 (const int)
+0:384            Constant:
+0:384              2 (const int)
+0:384          'ballot' ( temp 4-component vector of uint)
+0:386      move second child to first child ( temp int)
+0:386        direct index ( temp int)
+0:386          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:386            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386              'invocation' ( temp uint)
+0:386            Constant:
+0:386              1 (const int)
+0:386          Constant:
+0:386            0 (const int)
+0:386        Convert bool to int ( temp int)
+0:386          subgroupPartitionedExclusiveAndNV ( global bool)
+0:386            Compare Less Than ( temp bool)
+0:386              direct index ( temp int)
+0:386                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:386                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:386                    Constant:
+0:386                      0 (const int)
+0:386                  Constant:
+0:386                    1 (const int)
+0:386                Constant:
+0:386                  0 (const int)
+0:386              Constant:
+0:386                0 (const int)
+0:386            'ballot' ( temp 4-component vector of uint)
+0:387      move second child to first child ( temp 2-component vector of int)
+0:387        vector swizzle ( temp 2-component vector of int)
+0:387          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:387            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387              'invocation' ( temp uint)
+0:387            Constant:
+0:387              1 (const int)
+0:387          Sequence
+0:387            Constant:
+0:387              0 (const int)
+0:387            Constant:
+0:387              1 (const int)
+0:387        Convert bool to int ( temp 2-component vector of int)
+0:387          subgroupPartitionedExclusiveAndNV ( global 2-component vector of bool)
+0:387            Compare Less Than ( global 2-component vector of bool)
+0:387              vector swizzle ( temp 2-component vector of int)
+0:387                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:387                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:387                    Constant:
+0:387                      1 (const int)
+0:387                  Constant:
+0:387                    1 (const int)
+0:387                Sequence
+0:387                  Constant:
+0:387                    0 (const int)
+0:387                  Constant:
+0:387                    1 (const int)
+0:387              Constant:
+0:387                0 (const int)
+0:387                0 (const int)
+0:387            'ballot' ( temp 4-component vector of uint)
+0:388      move second child to first child ( temp 3-component vector of int)
+0:388        vector swizzle ( temp 3-component vector of int)
+0:388          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:388            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:388              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:388              'invocation' ( temp uint)
+0:388            Constant:
+0:388              1 (const int)
+0:388          Sequence
+0:388            Constant:
+0:388              0 (const int)
+0:388            Constant:
+0:388              1 (const int)
+0:388            Constant:
+0:388              2 (const int)
+0:388        Convert bool to int ( temp 3-component vector of int)
+0:388          subgroupPartitionedExclusiveAndNV ( global 3-component vector of bool)
+0:388            Compare Less Than ( global 3-component vector of bool)
+0:388              vector swizzle ( temp 3-component vector of int)
+0:388                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:388                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:388                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:388                    Constant:
+0:388                      1 (const int)
+0:388                  Constant:
+0:388                    1 (const int)
+0:388                Sequence
+0:388                  Constant:
+0:388                    0 (const int)
+0:388                  Constant:
+0:388                    1 (const int)
+0:388                  Constant:
+0:388                    2 (const int)
+0:388              Constant:
+0:388                0 (const int)
+0:388                0 (const int)
+0:388                0 (const int)
+0:388            'ballot' ( temp 4-component vector of uint)
+0:389      move second child to first child ( temp 4-component vector of int)
+0:389        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:389          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389            'invocation' ( temp uint)
+0:389          Constant:
+0:389            1 (const int)
+0:389        Convert bool to int ( temp 4-component vector of int)
+0:389          subgroupPartitionedExclusiveAndNV ( global 4-component vector of bool)
+0:389            Compare Less Than ( global 4-component vector of bool)
+0:389              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:389                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:389                  Constant:
+0:389                    1 (const int)
+0:389                Constant:
+0:389                  1 (const int)
+0:389              Constant:
+0:389                0 (const int)
+0:389                0 (const int)
+0:389                0 (const int)
+0:389                0 (const int)
+0:389            'ballot' ( temp 4-component vector of uint)
+0:391      move second child to first child ( temp int)
+0:391        direct index ( temp int)
+0:391          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:391            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391              'invocation' ( temp uint)
+0:391            Constant:
+0:391              1 (const int)
+0:391          Constant:
+0:391            0 (const int)
+0:391        subgroupPartitionedExclusiveOrNV ( global int)
+0:391          direct index ( temp int)
+0:391            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:391              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:391                Constant:
+0:391                  0 (const int)
+0:391              Constant:
+0:391                1 (const int)
+0:391            Constant:
+0:391              0 (const int)
+0:391          'ballot' ( temp 4-component vector of uint)
+0:392      move second child to first child ( temp 2-component vector of int)
+0:392        vector swizzle ( temp 2-component vector of int)
+0:392          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:392            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392              'invocation' ( temp uint)
+0:392            Constant:
+0:392              1 (const int)
+0:392          Sequence
+0:392            Constant:
+0:392              0 (const int)
+0:392            Constant:
+0:392              1 (const int)
+0:392        subgroupPartitionedExclusiveOrNV ( global 2-component vector of int)
+0:392          vector swizzle ( temp 2-component vector of int)
+0:392            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:392              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:392                Constant:
+0:392                  1 (const int)
+0:392              Constant:
+0:392                1 (const int)
+0:392            Sequence
+0:392              Constant:
+0:392                0 (const int)
+0:392              Constant:
+0:392                1 (const int)
+0:392          'ballot' ( temp 4-component vector of uint)
+0:393      move second child to first child ( temp 3-component vector of int)
+0:393        vector swizzle ( temp 3-component vector of int)
+0:393          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:393            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:393              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:393              'invocation' ( temp uint)
+0:393            Constant:
+0:393              1 (const int)
+0:393          Sequence
+0:393            Constant:
+0:393              0 (const int)
+0:393            Constant:
+0:393              1 (const int)
+0:393            Constant:
+0:393              2 (const int)
+0:393        subgroupPartitionedExclusiveOrNV ( global 3-component vector of int)
+0:393          vector swizzle ( temp 3-component vector of int)
+0:393            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:393              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:393                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:393                Constant:
+0:393                  2 (const int)
+0:393              Constant:
+0:393                1 (const int)
+0:393            Sequence
+0:393              Constant:
+0:393                0 (const int)
+0:393              Constant:
+0:393                1 (const int)
+0:393              Constant:
+0:393                2 (const int)
+0:393          'ballot' ( temp 4-component vector of uint)
+0:394      move second child to first child ( temp 4-component vector of int)
+0:394        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:394          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:394            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:394            'invocation' ( temp uint)
+0:394          Constant:
+0:394            1 (const int)
+0:394        subgroupPartitionedExclusiveOrNV ( global 4-component vector of int)
+0:394          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:394            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:394              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:394              Constant:
+0:394                3 (const int)
+0:394            Constant:
+0:394              1 (const int)
+0:394          'ballot' ( temp 4-component vector of uint)
+0:396      move second child to first child ( temp uint)
+0:396        direct index ( temp uint)
+0:396          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:396            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:396              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:396              'invocation' ( temp uint)
+0:396            Constant:
+0:396              2 (const int)
+0:396          Constant:
+0:396            0 (const int)
+0:396        subgroupPartitionedExclusiveOrNV ( global uint)
+0:396          direct index ( temp uint)
+0:396            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:396              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:396                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:396                Constant:
+0:396                  0 (const int)
+0:396              Constant:
+0:396                2 (const int)
+0:396            Constant:
+0:396              0 (const int)
+0:396          'ballot' ( temp 4-component vector of uint)
+0:397      move second child to first child ( temp 2-component vector of uint)
+0:397        vector swizzle ( temp 2-component vector of uint)
+0:397          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:397            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:397              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:397              'invocation' ( temp uint)
+0:397            Constant:
+0:397              2 (const int)
+0:397          Sequence
+0:397            Constant:
+0:397              0 (const int)
+0:397            Constant:
+0:397              1 (const int)
+0:397        subgroupPartitionedExclusiveOrNV ( global 2-component vector of uint)
+0:397          vector swizzle ( temp 2-component vector of uint)
+0:397            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:397              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:397                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:397                Constant:
+0:397                  1 (const int)
+0:397              Constant:
+0:397                2 (const int)
+0:397            Sequence
+0:397              Constant:
+0:397                0 (const int)
+0:397              Constant:
+0:397                1 (const int)
+0:397          'ballot' ( temp 4-component vector of uint)
+0:398      move second child to first child ( temp 3-component vector of uint)
+0:398        vector swizzle ( temp 3-component vector of uint)
+0:398          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:398            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:398              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:398              'invocation' ( temp uint)
+0:398            Constant:
+0:398              2 (const int)
+0:398          Sequence
+0:398            Constant:
+0:398              0 (const int)
+0:398            Constant:
+0:398              1 (const int)
+0:398            Constant:
+0:398              2 (const int)
+0:398        subgroupPartitionedExclusiveOrNV ( global 3-component vector of uint)
+0:398          vector swizzle ( temp 3-component vector of uint)
+0:398            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:398              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:398                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:398                Constant:
+0:398                  2 (const int)
+0:398              Constant:
+0:398                2 (const int)
+0:398            Sequence
+0:398              Constant:
+0:398                0 (const int)
+0:398              Constant:
+0:398                1 (const int)
+0:398              Constant:
+0:398                2 (const int)
+0:398          'ballot' ( temp 4-component vector of uint)
+0:399      move second child to first child ( temp 4-component vector of uint)
+0:399        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:399          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:399            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:399            'invocation' ( temp uint)
+0:399          Constant:
+0:399            2 (const int)
+0:399        subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:399          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:399            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:399              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:399              Constant:
+0:399                3 (const int)
+0:399            Constant:
+0:399              2 (const int)
+0:399          'ballot' ( temp 4-component vector of uint)
+0:401      move second child to first child ( temp int)
+0:401        direct index ( temp int)
+0:401          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:401            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:401              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:401              'invocation' ( temp uint)
+0:401            Constant:
+0:401              1 (const int)
+0:401          Constant:
+0:401            0 (const int)
+0:401        Convert bool to int ( temp int)
+0:401          subgroupPartitionedExclusiveOrNV ( global bool)
+0:401            Compare Less Than ( temp bool)
+0:401              direct index ( temp int)
+0:401                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:401                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:401                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:401                    Constant:
+0:401                      0 (const int)
+0:401                  Constant:
+0:401                    1 (const int)
+0:401                Constant:
+0:401                  0 (const int)
+0:401              Constant:
+0:401                0 (const int)
+0:401            'ballot' ( temp 4-component vector of uint)
+0:402      move second child to first child ( temp 2-component vector of int)
+0:402        vector swizzle ( temp 2-component vector of int)
+0:402          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:402            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:402              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:402              'invocation' ( temp uint)
+0:402            Constant:
+0:402              1 (const int)
+0:402          Sequence
+0:402            Constant:
+0:402              0 (const int)
+0:402            Constant:
+0:402              1 (const int)
+0:402        Convert bool to int ( temp 2-component vector of int)
+0:402          subgroupPartitionedExclusiveOrNV ( global 2-component vector of bool)
+0:402            Compare Less Than ( global 2-component vector of bool)
+0:402              vector swizzle ( temp 2-component vector of int)
+0:402                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:402                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:402                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:402                    Constant:
+0:402                      1 (const int)
+0:402                  Constant:
+0:402                    1 (const int)
+0:402                Sequence
+0:402                  Constant:
+0:402                    0 (const int)
+0:402                  Constant:
+0:402                    1 (const int)
+0:402              Constant:
+0:402                0 (const int)
+0:402                0 (const int)
+0:402            'ballot' ( temp 4-component vector of uint)
+0:403      move second child to first child ( temp 3-component vector of int)
+0:403        vector swizzle ( temp 3-component vector of int)
+0:403          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:403            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:403              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:403              'invocation' ( temp uint)
+0:403            Constant:
+0:403              1 (const int)
+0:403          Sequence
+0:403            Constant:
+0:403              0 (const int)
+0:403            Constant:
+0:403              1 (const int)
+0:403            Constant:
+0:403              2 (const int)
+0:403        Convert bool to int ( temp 3-component vector of int)
+0:403          subgroupPartitionedExclusiveOrNV ( global 3-component vector of bool)
+0:403            Compare Less Than ( global 3-component vector of bool)
+0:403              vector swizzle ( temp 3-component vector of int)
+0:403                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:403                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:403                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:403                    Constant:
+0:403                      1 (const int)
+0:403                  Constant:
+0:403                    1 (const int)
+0:403                Sequence
+0:403                  Constant:
+0:403                    0 (const int)
+0:403                  Constant:
+0:403                    1 (const int)
+0:403                  Constant:
+0:403                    2 (const int)
+0:403              Constant:
+0:403                0 (const int)
+0:403                0 (const int)
+0:403                0 (const int)
+0:403            'ballot' ( temp 4-component vector of uint)
+0:404      move second child to first child ( temp 4-component vector of int)
+0:404        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:404          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:404            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:404            'invocation' ( temp uint)
+0:404          Constant:
+0:404            1 (const int)
+0:404        Convert bool to int ( temp 4-component vector of int)
+0:404          subgroupPartitionedExclusiveOrNV ( global 4-component vector of bool)
+0:404            Compare Less Than ( global 4-component vector of bool)
+0:404              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:404                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:404                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:404                  Constant:
+0:404                    1 (const int)
+0:404                Constant:
+0:404                  1 (const int)
+0:404              Constant:
+0:404                0 (const int)
+0:404                0 (const int)
+0:404                0 (const int)
+0:404                0 (const int)
+0:404            'ballot' ( temp 4-component vector of uint)
+0:406      move second child to first child ( temp int)
+0:406        direct index ( temp int)
+0:406          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:406            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:406              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:406              'invocation' ( temp uint)
+0:406            Constant:
+0:406              1 (const int)
+0:406          Constant:
+0:406            0 (const int)
+0:406        subgroupPartitionedExclusiveXorNV ( global int)
+0:406          direct index ( temp int)
+0:406            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:406              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:406                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:406                Constant:
+0:406                  0 (const int)
+0:406              Constant:
+0:406                1 (const int)
+0:406            Constant:
+0:406              0 (const int)
+0:406          'ballot' ( temp 4-component vector of uint)
+0:407      move second child to first child ( temp 2-component vector of int)
+0:407        vector swizzle ( temp 2-component vector of int)
+0:407          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:407            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:407              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:407              'invocation' ( temp uint)
+0:407            Constant:
+0:407              1 (const int)
+0:407          Sequence
+0:407            Constant:
+0:407              0 (const int)
+0:407            Constant:
+0:407              1 (const int)
+0:407        subgroupPartitionedExclusiveXorNV ( global 2-component vector of int)
+0:407          vector swizzle ( temp 2-component vector of int)
+0:407            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:407              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:407                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:407                Constant:
+0:407                  1 (const int)
+0:407              Constant:
+0:407                1 (const int)
+0:407            Sequence
+0:407              Constant:
+0:407                0 (const int)
+0:407              Constant:
+0:407                1 (const int)
+0:407          'ballot' ( temp 4-component vector of uint)
+0:408      move second child to first child ( temp 3-component vector of int)
+0:408        vector swizzle ( temp 3-component vector of int)
+0:408          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:408            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:408              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:408              'invocation' ( temp uint)
+0:408            Constant:
+0:408              1 (const int)
+0:408          Sequence
+0:408            Constant:
+0:408              0 (const int)
+0:408            Constant:
+0:408              1 (const int)
+0:408            Constant:
+0:408              2 (const int)
+0:408        subgroupPartitionedExclusiveXorNV ( global 3-component vector of int)
+0:408          vector swizzle ( temp 3-component vector of int)
+0:408            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:408              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:408                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:408                Constant:
+0:408                  2 (const int)
+0:408              Constant:
+0:408                1 (const int)
+0:408            Sequence
+0:408              Constant:
+0:408                0 (const int)
+0:408              Constant:
+0:408                1 (const int)
+0:408              Constant:
+0:408                2 (const int)
+0:408          'ballot' ( temp 4-component vector of uint)
+0:409      move second child to first child ( temp 4-component vector of int)
+0:409        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:409          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:409            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:409            'invocation' ( temp uint)
+0:409          Constant:
+0:409            1 (const int)
+0:409        subgroupPartitionedExclusiveXorNV ( global 4-component vector of int)
+0:409          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:409            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:409              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:409              Constant:
+0:409                3 (const int)
+0:409            Constant:
+0:409              1 (const int)
+0:409          'ballot' ( temp 4-component vector of uint)
+0:411      move second child to first child ( temp uint)
+0:411        direct index ( temp uint)
+0:411          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:411            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:411              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:411              'invocation' ( temp uint)
+0:411            Constant:
+0:411              2 (const int)
+0:411          Constant:
+0:411            0 (const int)
+0:411        subgroupPartitionedExclusiveXorNV ( global uint)
+0:411          direct index ( temp uint)
+0:411            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:411              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:411                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:411                Constant:
+0:411                  0 (const int)
+0:411              Constant:
+0:411                2 (const int)
+0:411            Constant:
+0:411              0 (const int)
+0:411          'ballot' ( temp 4-component vector of uint)
+0:412      move second child to first child ( temp 2-component vector of uint)
+0:412        vector swizzle ( temp 2-component vector of uint)
+0:412          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:412            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:412              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:412              'invocation' ( temp uint)
+0:412            Constant:
+0:412              2 (const int)
+0:412          Sequence
+0:412            Constant:
+0:412              0 (const int)
+0:412            Constant:
+0:412              1 (const int)
+0:412        subgroupPartitionedExclusiveXorNV ( global 2-component vector of uint)
+0:412          vector swizzle ( temp 2-component vector of uint)
+0:412            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:412              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:412                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:412                Constant:
+0:412                  1 (const int)
+0:412              Constant:
+0:412                2 (const int)
+0:412            Sequence
+0:412              Constant:
+0:412                0 (const int)
+0:412              Constant:
+0:412                1 (const int)
+0:412          'ballot' ( temp 4-component vector of uint)
+0:413      move second child to first child ( temp 3-component vector of uint)
+0:413        vector swizzle ( temp 3-component vector of uint)
+0:413          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:413            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:413              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:413              'invocation' ( temp uint)
+0:413            Constant:
+0:413              2 (const int)
+0:413          Sequence
+0:413            Constant:
+0:413              0 (const int)
+0:413            Constant:
+0:413              1 (const int)
+0:413            Constant:
+0:413              2 (const int)
+0:413        subgroupPartitionedExclusiveXorNV ( global 3-component vector of uint)
+0:413          vector swizzle ( temp 3-component vector of uint)
+0:413            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:413              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:413                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:413                Constant:
+0:413                  2 (const int)
+0:413              Constant:
+0:413                2 (const int)
+0:413            Sequence
+0:413              Constant:
+0:413                0 (const int)
+0:413              Constant:
+0:413                1 (const int)
+0:413              Constant:
+0:413                2 (const int)
+0:413          'ballot' ( temp 4-component vector of uint)
+0:414      move second child to first child ( temp 4-component vector of uint)
+0:414        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:414          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:414            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:414            'invocation' ( temp uint)
+0:414          Constant:
+0:414            2 (const int)
+0:414        subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:414          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:414            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:414              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:414              Constant:
+0:414                3 (const int)
+0:414            Constant:
+0:414              2 (const int)
+0:414          'ballot' ( temp 4-component vector of uint)
+0:416      move second child to first child ( temp int)
+0:416        direct index ( temp int)
+0:416          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:416            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:416              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:416              'invocation' ( temp uint)
+0:416            Constant:
+0:416              1 (const int)
+0:416          Constant:
+0:416            0 (const int)
+0:416        Convert bool to int ( temp int)
+0:416          subgroupPartitionedExclusiveXorNV ( global bool)
+0:416            Compare Less Than ( temp bool)
+0:416              direct index ( temp int)
+0:416                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:416                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:416                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:416                    Constant:
+0:416                      0 (const int)
+0:416                  Constant:
+0:416                    1 (const int)
+0:416                Constant:
+0:416                  0 (const int)
+0:416              Constant:
+0:416                0 (const int)
+0:416            'ballot' ( temp 4-component vector of uint)
+0:417      move second child to first child ( temp 2-component vector of int)
+0:417        vector swizzle ( temp 2-component vector of int)
+0:417          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:417            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:417              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:417              'invocation' ( temp uint)
+0:417            Constant:
+0:417              1 (const int)
+0:417          Sequence
+0:417            Constant:
+0:417              0 (const int)
+0:417            Constant:
+0:417              1 (const int)
+0:417        Convert bool to int ( temp 2-component vector of int)
+0:417          subgroupPartitionedExclusiveXorNV ( global 2-component vector of bool)
+0:417            Compare Less Than ( global 2-component vector of bool)
+0:417              vector swizzle ( temp 2-component vector of int)
+0:417                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:417                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:417                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:417                    Constant:
+0:417                      1 (const int)
+0:417                  Constant:
+0:417                    1 (const int)
+0:417                Sequence
+0:417                  Constant:
+0:417                    0 (const int)
+0:417                  Constant:
+0:417                    1 (const int)
+0:417              Constant:
+0:417                0 (const int)
+0:417                0 (const int)
+0:417            'ballot' ( temp 4-component vector of uint)
+0:418      move second child to first child ( temp 3-component vector of int)
+0:418        vector swizzle ( temp 3-component vector of int)
+0:418          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:418            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:418              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:418              'invocation' ( temp uint)
+0:418            Constant:
+0:418              1 (const int)
+0:418          Sequence
+0:418            Constant:
+0:418              0 (const int)
+0:418            Constant:
+0:418              1 (const int)
+0:418            Constant:
+0:418              2 (const int)
+0:418        Convert bool to int ( temp 3-component vector of int)
+0:418          subgroupPartitionedExclusiveXorNV ( global 3-component vector of bool)
+0:418            Compare Less Than ( global 3-component vector of bool)
+0:418              vector swizzle ( temp 3-component vector of int)
+0:418                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:418                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:418                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:418                    Constant:
+0:418                      1 (const int)
+0:418                  Constant:
+0:418                    1 (const int)
+0:418                Sequence
+0:418                  Constant:
+0:418                    0 (const int)
+0:418                  Constant:
+0:418                    1 (const int)
+0:418                  Constant:
+0:418                    2 (const int)
+0:418              Constant:
+0:418                0 (const int)
+0:418                0 (const int)
+0:418                0 (const int)
+0:418            'ballot' ( temp 4-component vector of uint)
+0:419      move second child to first child ( temp 4-component vector of int)
+0:419        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:419          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:419            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:419            'invocation' ( temp uint)
+0:419          Constant:
+0:419            1 (const int)
+0:419        Convert bool to int ( temp 4-component vector of int)
+0:419          subgroupPartitionedExclusiveXorNV ( global 4-component vector of bool)
+0:419            Compare Less Than ( global 4-component vector of bool)
+0:419              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:419                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:419                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:419                  Constant:
+0:419                    1 (const int)
+0:419                Constant:
+0:419                  1 (const int)
+0:419              Constant:
+0:419                0 (const int)
+0:419                0 (const int)
+0:419                0 (const int)
+0:419                0 (const int)
+0:419            'ballot' ( temp 4-component vector of uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/Test/baseResults/glsl.450.subgroupQuad.comp.out b/Test/baseResults/glsl.450.subgroupQuad.comp.out
new file mode 100644
index 0000000..5e6c01e
--- /dev/null
+++ b/Test/baseResults/glsl.450.subgroupQuad.comp.out
@@ -0,0 +1,4069 @@
+glsl.450.subgroupQuad.comp
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_quad
+local_size = (8, 1, 1)
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp uint)
+0:17          'invocation' ( temp uint)
+0:17          mod ( temp uint)
+0:17            add ( temp uint)
+0:17              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      move second child to first child ( temp float)
+0:19        direct index ( temp float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'invocation' ( temp uint)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Constant:
+0:19            0 (const int)
+0:19        subgroupQuadBroadcast ( global float)
+0:19          direct index ( temp float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                Constant:
+0:19                  0 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Constant:
+0:19            1 (const uint)
+0:20      move second child to first child ( temp 2-component vector of float)
+0:20        vector swizzle ( temp 2-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'invocation' ( temp uint)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20        subgroupQuadBroadcast ( global 2-component vector of float)
+0:20          vector swizzle ( temp 2-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                Constant:
+0:20                  1 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20          Constant:
+0:20            1 (const uint)
+0:21      move second child to first child ( temp 3-component vector of float)
+0:21        vector swizzle ( temp 3-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'invocation' ( temp uint)
+0:21            Constant:
+0:21              0 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21            Constant:
+0:21              2 (const int)
+0:21        subgroupQuadBroadcast ( global 3-component vector of float)
+0:21          vector swizzle ( temp 3-component vector of float)
+0:21            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                Constant:
+0:21                  2 (const int)
+0:21              Constant:
+0:21                0 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21              Constant:
+0:21                2 (const int)
+0:21          Constant:
+0:21            1 (const uint)
+0:22      move second child to first child ( temp 4-component vector of float)
+0:22        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'invocation' ( temp uint)
+0:22          Constant:
+0:22            0 (const int)
+0:22        subgroupQuadBroadcast ( global 4-component vector of float)
+0:22          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              Constant:
+0:22                3 (const int)
+0:22            Constant:
+0:22              0 (const int)
+0:22          Constant:
+0:22            1 (const uint)
+0:24      move second child to first child ( temp int)
+0:24        direct index ( temp int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'invocation' ( temp uint)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:24        subgroupQuadBroadcast ( global int)
+0:24          direct index ( temp int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                Constant:
+0:24                  0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:24          Constant:
+0:24            1 (const uint)
+0:25      move second child to first child ( temp 2-component vector of int)
+0:25        vector swizzle ( temp 2-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'invocation' ( temp uint)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25        subgroupQuadBroadcast ( global 2-component vector of int)
+0:25          vector swizzle ( temp 2-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                Constant:
+0:25                  1 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25          Constant:
+0:25            1 (const uint)
+0:26      move second child to first child ( temp 3-component vector of int)
+0:26        vector swizzle ( temp 3-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'invocation' ( temp uint)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26        subgroupQuadBroadcast ( global 3-component vector of int)
+0:26          vector swizzle ( temp 3-component vector of int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                Constant:
+0:26                  2 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26          Constant:
+0:26            1 (const uint)
+0:27      move second child to first child ( temp 4-component vector of int)
+0:27        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'invocation' ( temp uint)
+0:27          Constant:
+0:27            1 (const int)
+0:27        subgroupQuadBroadcast ( global 4-component vector of int)
+0:27          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              Constant:
+0:27                3 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27          Constant:
+0:27            1 (const uint)
+0:29      move second child to first child ( temp uint)
+0:29        direct index ( temp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'invocation' ( temp uint)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            0 (const int)
+0:29        subgroupQuadBroadcast ( global uint)
+0:29          direct index ( temp uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                Constant:
+0:29                  0 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Constant:
+0:29              0 (const int)
+0:29          Constant:
+0:29            1 (const uint)
+0:30      move second child to first child ( temp 2-component vector of uint)
+0:30        vector swizzle ( temp 2-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'invocation' ( temp uint)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30        subgroupQuadBroadcast ( global 2-component vector of uint)
+0:30          vector swizzle ( temp 2-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                Constant:
+0:30                  1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30          Constant:
+0:30            1 (const uint)
+0:31      move second child to first child ( temp 3-component vector of uint)
+0:31        vector swizzle ( temp 3-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'invocation' ( temp uint)
+0:31            Constant:
+0:31              2 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31        subgroupQuadBroadcast ( global 3-component vector of uint)
+0:31          vector swizzle ( temp 3-component vector of uint)
+0:31            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                Constant:
+0:31                  2 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31          Constant:
+0:31            1 (const uint)
+0:32      move second child to first child ( temp 4-component vector of uint)
+0:32        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'invocation' ( temp uint)
+0:32          Constant:
+0:32            2 (const int)
+0:32        subgroupQuadBroadcast ( global 4-component vector of uint)
+0:32          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              Constant:
+0:32                3 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32          Constant:
+0:32            1 (const uint)
+0:34      move second child to first child ( temp double)
+0:34        direct index ( temp double)
+0:34          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'invocation' ( temp uint)
+0:34            Constant:
+0:34              3 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupQuadBroadcast ( global double)
+0:34          direct index ( temp double)
+0:34            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                3 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          Constant:
+0:34            1 (const uint)
+0:35      move second child to first child ( temp 2-component vector of double)
+0:35        vector swizzle ( temp 2-component vector of double)
+0:35          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'invocation' ( temp uint)
+0:35            Constant:
+0:35              3 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35        subgroupQuadBroadcast ( global 2-component vector of double)
+0:35          vector swizzle ( temp 2-component vector of double)
+0:35            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                Constant:
+0:35                  1 (const int)
+0:35              Constant:
+0:35                3 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:35          Constant:
+0:35            1 (const uint)
+0:36      move second child to first child ( temp 3-component vector of double)
+0:36        vector swizzle ( temp 3-component vector of double)
+0:36          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'invocation' ( temp uint)
+0:36            Constant:
+0:36              3 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36            Constant:
+0:36              2 (const int)
+0:36        subgroupQuadBroadcast ( global 3-component vector of double)
+0:36          vector swizzle ( temp 3-component vector of double)
+0:36            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                Constant:
+0:36                  2 (const int)
+0:36              Constant:
+0:36                3 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:36              Constant:
+0:36                2 (const int)
+0:36          Constant:
+0:36            1 (const uint)
+0:37      move second child to first child ( temp 4-component vector of double)
+0:37        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'invocation' ( temp uint)
+0:37          Constant:
+0:37            3 (const int)
+0:37        subgroupQuadBroadcast ( global 4-component vector of double)
+0:37          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              Constant:
+0:37                3 (const int)
+0:37            Constant:
+0:37              3 (const int)
+0:37          Constant:
+0:37            1 (const uint)
+0:39      move second child to first child ( temp int)
+0:39        direct index ( temp int)
+0:39          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'invocation' ( temp uint)
+0:39            Constant:
+0:39              1 (const int)
+0:39          Constant:
+0:39            0 (const int)
+0:39        Convert bool to int ( temp int)
+0:39          subgroupQuadBroadcast ( global bool)
+0:39            Compare Less Than ( temp bool)
+0:39              direct index ( temp int)
+0:39                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                    Constant:
+0:39                      0 (const int)
+0:39                  Constant:
+0:39                    1 (const int)
+0:39                Constant:
+0:39                  0 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              1 (const uint)
+0:40      move second child to first child ( temp 2-component vector of int)
+0:40        vector swizzle ( temp 2-component vector of int)
+0:40          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'invocation' ( temp uint)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40        Convert bool to int ( temp 2-component vector of int)
+0:40          subgroupQuadBroadcast ( global 2-component vector of bool)
+0:40            Compare Less Than ( global 2-component vector of bool)
+0:40              vector swizzle ( temp 2-component vector of int)
+0:40                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                    Constant:
+0:40                      1 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                Sequence
+0:40                  Constant:
+0:40                    0 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40                0 (const int)
+0:40            Constant:
+0:40              1 (const uint)
+0:41      move second child to first child ( temp 3-component vector of int)
+0:41        vector swizzle ( temp 3-component vector of int)
+0:41          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'invocation' ( temp uint)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41            Constant:
+0:41              2 (const int)
+0:41        Convert bool to int ( temp 3-component vector of int)
+0:41          subgroupQuadBroadcast ( global 3-component vector of bool)
+0:41            Compare Less Than ( global 3-component vector of bool)
+0:41              vector swizzle ( temp 3-component vector of int)
+0:41                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                    Constant:
+0:41                      1 (const int)
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                Sequence
+0:41                  Constant:
+0:41                    0 (const int)
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                  Constant:
+0:41                    2 (const int)
+0:41              Constant:
+0:41                0 (const int)
+0:41                0 (const int)
+0:41                0 (const int)
+0:41            Constant:
+0:41              1 (const uint)
+0:42      move second child to first child ( temp 4-component vector of int)
+0:42        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'invocation' ( temp uint)
+0:42          Constant:
+0:42            1 (const int)
+0:42        Convert bool to int ( temp 4-component vector of int)
+0:42          subgroupQuadBroadcast ( global 4-component vector of bool)
+0:42            Compare Less Than ( global 4-component vector of bool)
+0:42              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  Constant:
+0:42                    1 (const int)
+0:42                Constant:
+0:42                  1 (const int)
+0:42              Constant:
+0:42                0 (const int)
+0:42                0 (const int)
+0:42                0 (const int)
+0:42                0 (const int)
+0:42            Constant:
+0:42              1 (const uint)
+0:44      move second child to first child ( temp float)
+0:44        direct index ( temp float)
+0:44          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'invocation' ( temp uint)
+0:44            Constant:
+0:44              0 (const int)
+0:44          Constant:
+0:44            0 (const int)
+0:44        subgroupQuadSwapHorizontal ( global float)
+0:44          direct index ( temp float)
+0:44            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                Constant:
+0:44                  0 (const int)
+0:44              Constant:
+0:44                0 (const int)
+0:44            Constant:
+0:44              0 (const int)
+0:45      move second child to first child ( temp 2-component vector of float)
+0:45        vector swizzle ( temp 2-component vector of float)
+0:45          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'invocation' ( temp uint)
+0:45            Constant:
+0:45              0 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45        subgroupQuadSwapHorizontal ( global 2-component vector of float)
+0:45          vector swizzle ( temp 2-component vector of float)
+0:45            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                Constant:
+0:45                  1 (const int)
+0:45              Constant:
+0:45                0 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:46      move second child to first child ( temp 3-component vector of float)
+0:46        vector swizzle ( temp 3-component vector of float)
+0:46          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'invocation' ( temp uint)
+0:46            Constant:
+0:46              0 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46        subgroupQuadSwapHorizontal ( global 3-component vector of float)
+0:46          vector swizzle ( temp 3-component vector of float)
+0:46            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                Constant:
+0:46                  2 (const int)
+0:46              Constant:
+0:46                0 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:47      move second child to first child ( temp 4-component vector of float)
+0:47        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'invocation' ( temp uint)
+0:47          Constant:
+0:47            0 (const int)
+0:47        subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:47          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              Constant:
+0:47                3 (const int)
+0:47            Constant:
+0:47              0 (const int)
+0:49      move second child to first child ( temp int)
+0:49        direct index ( temp int)
+0:49          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'invocation' ( temp uint)
+0:49            Constant:
+0:49              1 (const int)
+0:49          Constant:
+0:49            0 (const int)
+0:49        subgroupQuadSwapHorizontal ( global int)
+0:49          direct index ( temp int)
+0:49            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                Constant:
+0:49                  0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:50      move second child to first child ( temp 2-component vector of int)
+0:50        vector swizzle ( temp 2-component vector of int)
+0:50          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'invocation' ( temp uint)
+0:50            Constant:
+0:50              1 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50        subgroupQuadSwapHorizontal ( global 2-component vector of int)
+0:50          vector swizzle ( temp 2-component vector of int)
+0:50            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                Constant:
+0:50                  1 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:51      move second child to first child ( temp 3-component vector of int)
+0:51        vector swizzle ( temp 3-component vector of int)
+0:51          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'invocation' ( temp uint)
+0:51            Constant:
+0:51              1 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:51        subgroupQuadSwapHorizontal ( global 3-component vector of int)
+0:51          vector swizzle ( temp 3-component vector of int)
+0:51            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                Constant:
+0:51                  2 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51              Constant:
+0:51                2 (const int)
+0:52      move second child to first child ( temp 4-component vector of int)
+0:52        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'invocation' ( temp uint)
+0:52          Constant:
+0:52            1 (const int)
+0:52        subgroupQuadSwapHorizontal ( global 4-component vector of int)
+0:52          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              Constant:
+0:52                3 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:54      move second child to first child ( temp uint)
+0:54        direct index ( temp uint)
+0:54          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'invocation' ( temp uint)
+0:54            Constant:
+0:54              2 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupQuadSwapHorizontal ( global uint)
+0:54          direct index ( temp uint)
+0:54            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                Constant:
+0:54                  0 (const int)
+0:54              Constant:
+0:54                2 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:55      move second child to first child ( temp 2-component vector of uint)
+0:55        vector swizzle ( temp 2-component vector of uint)
+0:55          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'invocation' ( temp uint)
+0:55            Constant:
+0:55              2 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55        subgroupQuadSwapHorizontal ( global 2-component vector of uint)
+0:55          vector swizzle ( temp 2-component vector of uint)
+0:55            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                Constant:
+0:55                  1 (const int)
+0:55              Constant:
+0:55                2 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:56      move second child to first child ( temp 3-component vector of uint)
+0:56        vector swizzle ( temp 3-component vector of uint)
+0:56          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'invocation' ( temp uint)
+0:56            Constant:
+0:56              2 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56            Constant:
+0:56              2 (const int)
+0:56        subgroupQuadSwapHorizontal ( global 3-component vector of uint)
+0:56          vector swizzle ( temp 3-component vector of uint)
+0:56            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                Constant:
+0:56                  2 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:57      move second child to first child ( temp 4-component vector of uint)
+0:57        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'invocation' ( temp uint)
+0:57          Constant:
+0:57            2 (const int)
+0:57        subgroupQuadSwapHorizontal ( global 4-component vector of uint)
+0:57          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              Constant:
+0:57                3 (const int)
+0:57            Constant:
+0:57              2 (const int)
+0:59      move second child to first child ( temp double)
+0:59        direct index ( temp double)
+0:59          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'invocation' ( temp uint)
+0:59            Constant:
+0:59              3 (const int)
+0:59          Constant:
+0:59            0 (const int)
+0:59        subgroupQuadSwapHorizontal ( global double)
+0:59          direct index ( temp double)
+0:59            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                Constant:
+0:59                  0 (const int)
+0:59              Constant:
+0:59                3 (const int)
+0:59            Constant:
+0:59              0 (const int)
+0:60      move second child to first child ( temp 2-component vector of double)
+0:60        vector swizzle ( temp 2-component vector of double)
+0:60          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'invocation' ( temp uint)
+0:60            Constant:
+0:60              3 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60        subgroupQuadSwapHorizontal ( global 2-component vector of double)
+0:60          vector swizzle ( temp 2-component vector of double)
+0:60            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                Constant:
+0:60                  1 (const int)
+0:60              Constant:
+0:60                3 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:61      move second child to first child ( temp 3-component vector of double)
+0:61        vector swizzle ( temp 3-component vector of double)
+0:61          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'invocation' ( temp uint)
+0:61            Constant:
+0:61              3 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61            Constant:
+0:61              2 (const int)
+0:61        subgroupQuadSwapHorizontal ( global 3-component vector of double)
+0:61          vector swizzle ( temp 3-component vector of double)
+0:61            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                Constant:
+0:61                  2 (const int)
+0:61              Constant:
+0:61                3 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61              Constant:
+0:61                2 (const int)
+0:62      move second child to first child ( temp 4-component vector of double)
+0:62        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'invocation' ( temp uint)
+0:62          Constant:
+0:62            3 (const int)
+0:62        subgroupQuadSwapHorizontal ( global 4-component vector of double)
+0:62          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              Constant:
+0:62                3 (const int)
+0:62            Constant:
+0:62              3 (const int)
+0:64      move second child to first child ( temp int)
+0:64        direct index ( temp int)
+0:64          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'invocation' ( temp uint)
+0:64            Constant:
+0:64              1 (const int)
+0:64          Constant:
+0:64            0 (const int)
+0:64        Convert bool to int ( temp int)
+0:64          subgroupQuadSwapHorizontal ( global bool)
+0:64            Compare Less Than ( temp bool)
+0:64              direct index ( temp int)
+0:64                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                    Constant:
+0:64                      0 (const int)
+0:64                  Constant:
+0:64                    1 (const int)
+0:64                Constant:
+0:64                  0 (const int)
+0:64              Constant:
+0:64                0 (const int)
+0:65      move second child to first child ( temp 2-component vector of int)
+0:65        vector swizzle ( temp 2-component vector of int)
+0:65          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'invocation' ( temp uint)
+0:65            Constant:
+0:65              1 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65        Convert bool to int ( temp 2-component vector of int)
+0:65          subgroupQuadSwapHorizontal ( global 2-component vector of bool)
+0:65            Compare Less Than ( global 2-component vector of bool)
+0:65              vector swizzle ( temp 2-component vector of int)
+0:65                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                    Constant:
+0:65                      1 (const int)
+0:65                  Constant:
+0:65                    1 (const int)
+0:65                Sequence
+0:65                  Constant:
+0:65                    0 (const int)
+0:65                  Constant:
+0:65                    1 (const int)
+0:65              Constant:
+0:65                0 (const int)
+0:65                0 (const int)
+0:66      move second child to first child ( temp 3-component vector of int)
+0:66        vector swizzle ( temp 3-component vector of int)
+0:66          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'invocation' ( temp uint)
+0:66            Constant:
+0:66              1 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66        Convert bool to int ( temp 3-component vector of int)
+0:66          subgroupQuadSwapHorizontal ( global 3-component vector of bool)
+0:66            Compare Less Than ( global 3-component vector of bool)
+0:66              vector swizzle ( temp 3-component vector of int)
+0:66                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                    Constant:
+0:66                      1 (const int)
+0:66                  Constant:
+0:66                    1 (const int)
+0:66                Sequence
+0:66                  Constant:
+0:66                    0 (const int)
+0:66                  Constant:
+0:66                    1 (const int)
+0:66                  Constant:
+0:66                    2 (const int)
+0:66              Constant:
+0:66                0 (const int)
+0:66                0 (const int)
+0:66                0 (const int)
+0:67      move second child to first child ( temp 4-component vector of int)
+0:67        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'invocation' ( temp uint)
+0:67          Constant:
+0:67            1 (const int)
+0:67        Convert bool to int ( temp 4-component vector of int)
+0:67          subgroupQuadSwapHorizontal ( global 4-component vector of bool)
+0:67            Compare Less Than ( global 4-component vector of bool)
+0:67              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                  Constant:
+0:67                    1 (const int)
+0:67                Constant:
+0:67                  1 (const int)
+0:67              Constant:
+0:67                0 (const int)
+0:67                0 (const int)
+0:67                0 (const int)
+0:67                0 (const int)
+0:69      move second child to first child ( temp float)
+0:69        direct index ( temp float)
+0:69          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:69            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'invocation' ( temp uint)
+0:69            Constant:
+0:69              0 (const int)
+0:69          Constant:
+0:69            0 (const int)
+0:69        subgroupQuadSwapVertical ( global float)
+0:69          direct index ( temp float)
+0:69            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:69              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                Constant:
+0:69                  0 (const int)
+0:69              Constant:
+0:69                0 (const int)
+0:69            Constant:
+0:69              0 (const int)
+0:70      move second child to first child ( temp 2-component vector of float)
+0:70        vector swizzle ( temp 2-component vector of float)
+0:70          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:70            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70              'invocation' ( temp uint)
+0:70            Constant:
+0:70              0 (const int)
+0:70          Sequence
+0:70            Constant:
+0:70              0 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70        subgroupQuadSwapVertical ( global 2-component vector of float)
+0:70          vector swizzle ( temp 2-component vector of float)
+0:70            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:70              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70                Constant:
+0:70                  1 (const int)
+0:70              Constant:
+0:70                0 (const int)
+0:70            Sequence
+0:70              Constant:
+0:70                0 (const int)
+0:70              Constant:
+0:70                1 (const int)
+0:71      move second child to first child ( temp 3-component vector of float)
+0:71        vector swizzle ( temp 3-component vector of float)
+0:71          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:71            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'invocation' ( temp uint)
+0:71            Constant:
+0:71              0 (const int)
+0:71          Sequence
+0:71            Constant:
+0:71              0 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71            Constant:
+0:71              2 (const int)
+0:71        subgroupQuadSwapVertical ( global 3-component vector of float)
+0:71          vector swizzle ( temp 3-component vector of float)
+0:71            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:71              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                Constant:
+0:71                  2 (const int)
+0:71              Constant:
+0:71                0 (const int)
+0:71            Sequence
+0:71              Constant:
+0:71                0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:71              Constant:
+0:71                2 (const int)
+0:72      move second child to first child ( temp 4-component vector of float)
+0:72        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:72          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72            'invocation' ( temp uint)
+0:72          Constant:
+0:72            0 (const int)
+0:72        subgroupQuadSwapVertical ( global 4-component vector of float)
+0:72          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:72            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72              Constant:
+0:72                3 (const int)
+0:72            Constant:
+0:72              0 (const int)
+0:74      move second child to first child ( temp int)
+0:74        direct index ( temp int)
+0:74          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:74            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74              'invocation' ( temp uint)
+0:74            Constant:
+0:74              1 (const int)
+0:74          Constant:
+0:74            0 (const int)
+0:74        subgroupQuadSwapVertical ( global int)
+0:74          direct index ( temp int)
+0:74            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:74              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                Constant:
+0:74                  0 (const int)
+0:74              Constant:
+0:74                1 (const int)
+0:74            Constant:
+0:74              0 (const int)
+0:75      move second child to first child ( temp 2-component vector of int)
+0:75        vector swizzle ( temp 2-component vector of int)
+0:75          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:75            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75              'invocation' ( temp uint)
+0:75            Constant:
+0:75              1 (const int)
+0:75          Sequence
+0:75            Constant:
+0:75              0 (const int)
+0:75            Constant:
+0:75              1 (const int)
+0:75        subgroupQuadSwapVertical ( global 2-component vector of int)
+0:75          vector swizzle ( temp 2-component vector of int)
+0:75            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:75              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75                Constant:
+0:75                  1 (const int)
+0:75              Constant:
+0:75                1 (const int)
+0:75            Sequence
+0:75              Constant:
+0:75                0 (const int)
+0:75              Constant:
+0:75                1 (const int)
+0:76      move second child to first child ( temp 3-component vector of int)
+0:76        vector swizzle ( temp 3-component vector of int)
+0:76          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:76            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76              'invocation' ( temp uint)
+0:76            Constant:
+0:76              1 (const int)
+0:76          Sequence
+0:76            Constant:
+0:76              0 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76            Constant:
+0:76              2 (const int)
+0:76        subgroupQuadSwapVertical ( global 3-component vector of int)
+0:76          vector swizzle ( temp 3-component vector of int)
+0:76            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:76              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                Constant:
+0:76                  2 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:76            Sequence
+0:76              Constant:
+0:76                0 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:76              Constant:
+0:76                2 (const int)
+0:77      move second child to first child ( temp 4-component vector of int)
+0:77        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:77          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77            'invocation' ( temp uint)
+0:77          Constant:
+0:77            1 (const int)
+0:77        subgroupQuadSwapVertical ( global 4-component vector of int)
+0:77          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:77            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77              Constant:
+0:77                3 (const int)
+0:77            Constant:
+0:77              1 (const int)
+0:79      move second child to first child ( temp uint)
+0:79        direct index ( temp uint)
+0:79          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:79            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79              'invocation' ( temp uint)
+0:79            Constant:
+0:79              2 (const int)
+0:79          Constant:
+0:79            0 (const int)
+0:79        subgroupQuadSwapVertical ( global uint)
+0:79          direct index ( temp uint)
+0:79            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:79              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                Constant:
+0:79                  0 (const int)
+0:79              Constant:
+0:79                2 (const int)
+0:79            Constant:
+0:79              0 (const int)
+0:80      move second child to first child ( temp 2-component vector of uint)
+0:80        vector swizzle ( temp 2-component vector of uint)
+0:80          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:80            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80              'invocation' ( temp uint)
+0:80            Constant:
+0:80              2 (const int)
+0:80          Sequence
+0:80            Constant:
+0:80              0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80        subgroupQuadSwapVertical ( global 2-component vector of uint)
+0:80          vector swizzle ( temp 2-component vector of uint)
+0:80            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:80              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80                Constant:
+0:80                  1 (const int)
+0:80              Constant:
+0:80                2 (const int)
+0:80            Sequence
+0:80              Constant:
+0:80                0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:81      move second child to first child ( temp 3-component vector of uint)
+0:81        vector swizzle ( temp 3-component vector of uint)
+0:81          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:81            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81              'invocation' ( temp uint)
+0:81            Constant:
+0:81              2 (const int)
+0:81          Sequence
+0:81            Constant:
+0:81              0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81            Constant:
+0:81              2 (const int)
+0:81        subgroupQuadSwapVertical ( global 3-component vector of uint)
+0:81          vector swizzle ( temp 3-component vector of uint)
+0:81            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:81              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                Constant:
+0:81                  2 (const int)
+0:81              Constant:
+0:81                2 (const int)
+0:81            Sequence
+0:81              Constant:
+0:81                0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81              Constant:
+0:81                2 (const int)
+0:82      move second child to first child ( temp 4-component vector of uint)
+0:82        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:82          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82            'invocation' ( temp uint)
+0:82          Constant:
+0:82            2 (const int)
+0:82        subgroupQuadSwapVertical ( global 4-component vector of uint)
+0:82          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:82            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82              Constant:
+0:82                3 (const int)
+0:82            Constant:
+0:82              2 (const int)
+0:84      move second child to first child ( temp double)
+0:84        direct index ( temp double)
+0:84          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:84            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84              'invocation' ( temp uint)
+0:84            Constant:
+0:84              3 (const int)
+0:84          Constant:
+0:84            0 (const int)
+0:84        subgroupQuadSwapVertical ( global double)
+0:84          direct index ( temp double)
+0:84            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:84              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                Constant:
+0:84                  0 (const int)
+0:84              Constant:
+0:84                3 (const int)
+0:84            Constant:
+0:84              0 (const int)
+0:85      move second child to first child ( temp 2-component vector of double)
+0:85        vector swizzle ( temp 2-component vector of double)
+0:85          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:85            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85              'invocation' ( temp uint)
+0:85            Constant:
+0:85              3 (const int)
+0:85          Sequence
+0:85            Constant:
+0:85              0 (const int)
+0:85            Constant:
+0:85              1 (const int)
+0:85        subgroupQuadSwapVertical ( global 2-component vector of double)
+0:85          vector swizzle ( temp 2-component vector of double)
+0:85            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:85              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85                Constant:
+0:85                  1 (const int)
+0:85              Constant:
+0:85                3 (const int)
+0:85            Sequence
+0:85              Constant:
+0:85                0 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:86      move second child to first child ( temp 3-component vector of double)
+0:86        vector swizzle ( temp 3-component vector of double)
+0:86          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:86            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86              'invocation' ( temp uint)
+0:86            Constant:
+0:86              3 (const int)
+0:86          Sequence
+0:86            Constant:
+0:86              0 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:86        subgroupQuadSwapVertical ( global 3-component vector of double)
+0:86          vector swizzle ( temp 3-component vector of double)
+0:86            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:86              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86                Constant:
+0:86                  2 (const int)
+0:86              Constant:
+0:86                3 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86              Constant:
+0:86                2 (const int)
+0:87      move second child to first child ( temp 4-component vector of double)
+0:87        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:87          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87            'invocation' ( temp uint)
+0:87          Constant:
+0:87            3 (const int)
+0:87        subgroupQuadSwapVertical ( global 4-component vector of double)
+0:87          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:87            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87              Constant:
+0:87                3 (const int)
+0:87            Constant:
+0:87              3 (const int)
+0:89      move second child to first child ( temp int)
+0:89        direct index ( temp int)
+0:89          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:89            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89              'invocation' ( temp uint)
+0:89            Constant:
+0:89              1 (const int)
+0:89          Constant:
+0:89            0 (const int)
+0:89        Convert bool to int ( temp int)
+0:89          subgroupQuadSwapVertical ( global bool)
+0:89            Compare Less Than ( temp bool)
+0:89              direct index ( temp int)
+0:89                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:89                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89                    Constant:
+0:89                      0 (const int)
+0:89                  Constant:
+0:89                    1 (const int)
+0:89                Constant:
+0:89                  0 (const int)
+0:89              Constant:
+0:89                0 (const int)
+0:90      move second child to first child ( temp 2-component vector of int)
+0:90        vector swizzle ( temp 2-component vector of int)
+0:90          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:90            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90              'invocation' ( temp uint)
+0:90            Constant:
+0:90              1 (const int)
+0:90          Sequence
+0:90            Constant:
+0:90              0 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90        Convert bool to int ( temp 2-component vector of int)
+0:90          subgroupQuadSwapVertical ( global 2-component vector of bool)
+0:90            Compare Less Than ( global 2-component vector of bool)
+0:90              vector swizzle ( temp 2-component vector of int)
+0:90                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:90                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90                    Constant:
+0:90                      1 (const int)
+0:90                  Constant:
+0:90                    1 (const int)
+0:90                Sequence
+0:90                  Constant:
+0:90                    0 (const int)
+0:90                  Constant:
+0:90                    1 (const int)
+0:90              Constant:
+0:90                0 (const int)
+0:90                0 (const int)
+0:91      move second child to first child ( temp 3-component vector of int)
+0:91        vector swizzle ( temp 3-component vector of int)
+0:91          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:91            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91              'invocation' ( temp uint)
+0:91            Constant:
+0:91              1 (const int)
+0:91          Sequence
+0:91            Constant:
+0:91              0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91            Constant:
+0:91              2 (const int)
+0:91        Convert bool to int ( temp 3-component vector of int)
+0:91          subgroupQuadSwapVertical ( global 3-component vector of bool)
+0:91            Compare Less Than ( global 3-component vector of bool)
+0:91              vector swizzle ( temp 3-component vector of int)
+0:91                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:91                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91                    Constant:
+0:91                      1 (const int)
+0:91                  Constant:
+0:91                    1 (const int)
+0:91                Sequence
+0:91                  Constant:
+0:91                    0 (const int)
+0:91                  Constant:
+0:91                    1 (const int)
+0:91                  Constant:
+0:91                    2 (const int)
+0:91              Constant:
+0:91                0 (const int)
+0:91                0 (const int)
+0:91                0 (const int)
+0:92      move second child to first child ( temp 4-component vector of int)
+0:92        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:92          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92            'invocation' ( temp uint)
+0:92          Constant:
+0:92            1 (const int)
+0:92        Convert bool to int ( temp 4-component vector of int)
+0:92          subgroupQuadSwapVertical ( global 4-component vector of bool)
+0:92            Compare Less Than ( global 4-component vector of bool)
+0:92              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:92                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92                  Constant:
+0:92                    1 (const int)
+0:92                Constant:
+0:92                  1 (const int)
+0:92              Constant:
+0:92                0 (const int)
+0:92                0 (const int)
+0:92                0 (const int)
+0:92                0 (const int)
+0:94      move second child to first child ( temp float)
+0:94        direct index ( temp float)
+0:94          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:94            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94              'invocation' ( temp uint)
+0:94            Constant:
+0:94              0 (const int)
+0:94          Constant:
+0:94            0 (const int)
+0:94        subgroupQuadSwapDiagonal ( global float)
+0:94          direct index ( temp float)
+0:94            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:94              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94                Constant:
+0:94                  0 (const int)
+0:94              Constant:
+0:94                0 (const int)
+0:94            Constant:
+0:94              0 (const int)
+0:95      move second child to first child ( temp 2-component vector of float)
+0:95        vector swizzle ( temp 2-component vector of float)
+0:95          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:95            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95              'invocation' ( temp uint)
+0:95            Constant:
+0:95              0 (const int)
+0:95          Sequence
+0:95            Constant:
+0:95              0 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95        subgroupQuadSwapDiagonal ( global 2-component vector of float)
+0:95          vector swizzle ( temp 2-component vector of float)
+0:95            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:95              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95                Constant:
+0:95                  1 (const int)
+0:95              Constant:
+0:95                0 (const int)
+0:95            Sequence
+0:95              Constant:
+0:95                0 (const int)
+0:95              Constant:
+0:95                1 (const int)
+0:96      move second child to first child ( temp 3-component vector of float)
+0:96        vector swizzle ( temp 3-component vector of float)
+0:96          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:96            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96              'invocation' ( temp uint)
+0:96            Constant:
+0:96              0 (const int)
+0:96          Sequence
+0:96            Constant:
+0:96              0 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96            Constant:
+0:96              2 (const int)
+0:96        subgroupQuadSwapDiagonal ( global 3-component vector of float)
+0:96          vector swizzle ( temp 3-component vector of float)
+0:96            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:96              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96                Constant:
+0:96                  2 (const int)
+0:96              Constant:
+0:96                0 (const int)
+0:96            Sequence
+0:96              Constant:
+0:96                0 (const int)
+0:96              Constant:
+0:96                1 (const int)
+0:96              Constant:
+0:96                2 (const int)
+0:97      move second child to first child ( temp 4-component vector of float)
+0:97        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:97          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97            'invocation' ( temp uint)
+0:97          Constant:
+0:97            0 (const int)
+0:97        subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:97          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:97            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97              Constant:
+0:97                3 (const int)
+0:97            Constant:
+0:97              0 (const int)
+0:99      move second child to first child ( temp int)
+0:99        direct index ( temp int)
+0:99          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99              'invocation' ( temp uint)
+0:99            Constant:
+0:99              1 (const int)
+0:99          Constant:
+0:99            0 (const int)
+0:99        subgroupQuadSwapDiagonal ( global int)
+0:99          direct index ( temp int)
+0:99            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99                Constant:
+0:99                  0 (const int)
+0:99              Constant:
+0:99                1 (const int)
+0:99            Constant:
+0:99              0 (const int)
+0:100      move second child to first child ( temp 2-component vector of int)
+0:100        vector swizzle ( temp 2-component vector of int)
+0:100          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100              'invocation' ( temp uint)
+0:100            Constant:
+0:100              1 (const int)
+0:100          Sequence
+0:100            Constant:
+0:100              0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100        subgroupQuadSwapDiagonal ( global 2-component vector of int)
+0:100          vector swizzle ( temp 2-component vector of int)
+0:100            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100                Constant:
+0:100                  1 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100            Sequence
+0:100              Constant:
+0:100                0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:101      move second child to first child ( temp 3-component vector of int)
+0:101        vector swizzle ( temp 3-component vector of int)
+0:101          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101              'invocation' ( temp uint)
+0:101            Constant:
+0:101              1 (const int)
+0:101          Sequence
+0:101            Constant:
+0:101              0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101            Constant:
+0:101              2 (const int)
+0:101        subgroupQuadSwapDiagonal ( global 3-component vector of int)
+0:101          vector swizzle ( temp 3-component vector of int)
+0:101            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101                Constant:
+0:101                  2 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101            Sequence
+0:101              Constant:
+0:101                0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101              Constant:
+0:101                2 (const int)
+0:102      move second child to first child ( temp 4-component vector of int)
+0:102        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102            'invocation' ( temp uint)
+0:102          Constant:
+0:102            1 (const int)
+0:102        subgroupQuadSwapDiagonal ( global 4-component vector of int)
+0:102          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102              Constant:
+0:102                3 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:104      move second child to first child ( temp uint)
+0:104        direct index ( temp uint)
+0:104          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104              'invocation' ( temp uint)
+0:104            Constant:
+0:104              2 (const int)
+0:104          Constant:
+0:104            0 (const int)
+0:104        subgroupQuadSwapDiagonal ( global uint)
+0:104          direct index ( temp uint)
+0:104            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104                Constant:
+0:104                  0 (const int)
+0:104              Constant:
+0:104                2 (const int)
+0:104            Constant:
+0:104              0 (const int)
+0:105      move second child to first child ( temp 2-component vector of uint)
+0:105        vector swizzle ( temp 2-component vector of uint)
+0:105          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105              'invocation' ( temp uint)
+0:105            Constant:
+0:105              2 (const int)
+0:105          Sequence
+0:105            Constant:
+0:105              0 (const int)
+0:105            Constant:
+0:105              1 (const int)
+0:105        subgroupQuadSwapDiagonal ( global 2-component vector of uint)
+0:105          vector swizzle ( temp 2-component vector of uint)
+0:105            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105                Constant:
+0:105                  1 (const int)
+0:105              Constant:
+0:105                2 (const int)
+0:105            Sequence
+0:105              Constant:
+0:105                0 (const int)
+0:105              Constant:
+0:105                1 (const int)
+0:106      move second child to first child ( temp 3-component vector of uint)
+0:106        vector swizzle ( temp 3-component vector of uint)
+0:106          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106              'invocation' ( temp uint)
+0:106            Constant:
+0:106              2 (const int)
+0:106          Sequence
+0:106            Constant:
+0:106              0 (const int)
+0:106            Constant:
+0:106              1 (const int)
+0:106            Constant:
+0:106              2 (const int)
+0:106        subgroupQuadSwapDiagonal ( global 3-component vector of uint)
+0:106          vector swizzle ( temp 3-component vector of uint)
+0:106            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106                Constant:
+0:106                  2 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:106            Sequence
+0:106              Constant:
+0:106                0 (const int)
+0:106              Constant:
+0:106                1 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:107      move second child to first child ( temp 4-component vector of uint)
+0:107        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107            'invocation' ( temp uint)
+0:107          Constant:
+0:107            2 (const int)
+0:107        subgroupQuadSwapDiagonal ( global 4-component vector of uint)
+0:107          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107              Constant:
+0:107                3 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:109      move second child to first child ( temp double)
+0:109        direct index ( temp double)
+0:109          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:109            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109              'invocation' ( temp uint)
+0:109            Constant:
+0:109              3 (const int)
+0:109          Constant:
+0:109            0 (const int)
+0:109        subgroupQuadSwapDiagonal ( global double)
+0:109          direct index ( temp double)
+0:109            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:109              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109                Constant:
+0:109                  0 (const int)
+0:109              Constant:
+0:109                3 (const int)
+0:109            Constant:
+0:109              0 (const int)
+0:110      move second child to first child ( temp 2-component vector of double)
+0:110        vector swizzle ( temp 2-component vector of double)
+0:110          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:110            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110              'invocation' ( temp uint)
+0:110            Constant:
+0:110              3 (const int)
+0:110          Sequence
+0:110            Constant:
+0:110              0 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110        subgroupQuadSwapDiagonal ( global 2-component vector of double)
+0:110          vector swizzle ( temp 2-component vector of double)
+0:110            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:110              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110                Constant:
+0:110                  1 (const int)
+0:110              Constant:
+0:110                3 (const int)
+0:110            Sequence
+0:110              Constant:
+0:110                0 (const int)
+0:110              Constant:
+0:110                1 (const int)
+0:111      move second child to first child ( temp 3-component vector of double)
+0:111        vector swizzle ( temp 3-component vector of double)
+0:111          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:111            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111              'invocation' ( temp uint)
+0:111            Constant:
+0:111              3 (const int)
+0:111          Sequence
+0:111            Constant:
+0:111              0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111            Constant:
+0:111              2 (const int)
+0:111        subgroupQuadSwapDiagonal ( global 3-component vector of double)
+0:111          vector swizzle ( temp 3-component vector of double)
+0:111            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:111              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111                Constant:
+0:111                  2 (const int)
+0:111              Constant:
+0:111                3 (const int)
+0:111            Sequence
+0:111              Constant:
+0:111                0 (const int)
+0:111              Constant:
+0:111                1 (const int)
+0:111              Constant:
+0:111                2 (const int)
+0:112      move second child to first child ( temp 4-component vector of double)
+0:112        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:112          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112            'invocation' ( temp uint)
+0:112          Constant:
+0:112            3 (const int)
+0:112        subgroupQuadSwapDiagonal ( global 4-component vector of double)
+0:112          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:112            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112              Constant:
+0:112                3 (const int)
+0:112            Constant:
+0:112              3 (const int)
+0:114      move second child to first child ( temp int)
+0:114        direct index ( temp int)
+0:114          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114              'invocation' ( temp uint)
+0:114            Constant:
+0:114              1 (const int)
+0:114          Constant:
+0:114            0 (const int)
+0:114        Convert bool to int ( temp int)
+0:114          subgroupQuadSwapDiagonal ( global bool)
+0:114            Compare Less Than ( temp bool)
+0:114              direct index ( temp int)
+0:114                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114                    Constant:
+0:114                      0 (const int)
+0:114                  Constant:
+0:114                    1 (const int)
+0:114                Constant:
+0:114                  0 (const int)
+0:114              Constant:
+0:114                0 (const int)
+0:115      move second child to first child ( temp 2-component vector of int)
+0:115        vector swizzle ( temp 2-component vector of int)
+0:115          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115              'invocation' ( temp uint)
+0:115            Constant:
+0:115              1 (const int)
+0:115          Sequence
+0:115            Constant:
+0:115              0 (const int)
+0:115            Constant:
+0:115              1 (const int)
+0:115        Convert bool to int ( temp 2-component vector of int)
+0:115          subgroupQuadSwapDiagonal ( global 2-component vector of bool)
+0:115            Compare Less Than ( global 2-component vector of bool)
+0:115              vector swizzle ( temp 2-component vector of int)
+0:115                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115                    Constant:
+0:115                      1 (const int)
+0:115                  Constant:
+0:115                    1 (const int)
+0:115                Sequence
+0:115                  Constant:
+0:115                    0 (const int)
+0:115                  Constant:
+0:115                    1 (const int)
+0:115              Constant:
+0:115                0 (const int)
+0:115                0 (const int)
+0:116      move second child to first child ( temp 3-component vector of int)
+0:116        vector swizzle ( temp 3-component vector of int)
+0:116          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116              'invocation' ( temp uint)
+0:116            Constant:
+0:116              1 (const int)
+0:116          Sequence
+0:116            Constant:
+0:116              0 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116            Constant:
+0:116              2 (const int)
+0:116        Convert bool to int ( temp 3-component vector of int)
+0:116          subgroupQuadSwapDiagonal ( global 3-component vector of bool)
+0:116            Compare Less Than ( global 3-component vector of bool)
+0:116              vector swizzle ( temp 3-component vector of int)
+0:116                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116                    Constant:
+0:116                      1 (const int)
+0:116                  Constant:
+0:116                    1 (const int)
+0:116                Sequence
+0:116                  Constant:
+0:116                    0 (const int)
+0:116                  Constant:
+0:116                    1 (const int)
+0:116                  Constant:
+0:116                    2 (const int)
+0:116              Constant:
+0:116                0 (const int)
+0:116                0 (const int)
+0:116                0 (const int)
+0:117      move second child to first child ( temp 4-component vector of int)
+0:117        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117            'invocation' ( temp uint)
+0:117          Constant:
+0:117            1 (const int)
+0:117        Convert bool to int ( temp 4-component vector of int)
+0:117          subgroupQuadSwapDiagonal ( global 4-component vector of bool)
+0:117            Compare Less Than ( global 4-component vector of bool)
+0:117              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117                  Constant:
+0:117                    1 (const int)
+0:117                Constant:
+0:117                  1 (const int)
+0:117              Constant:
+0:117                0 (const int)
+0:117                0 (const int)
+0:117                0 (const int)
+0:117                0 (const int)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_quad
+local_size = (8, 1, 1)
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp uint)
+0:17          'invocation' ( temp uint)
+0:17          mod ( temp uint)
+0:17            add ( temp uint)
+0:17              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      move second child to first child ( temp float)
+0:19        direct index ( temp float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'invocation' ( temp uint)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Constant:
+0:19            0 (const int)
+0:19        subgroupQuadBroadcast ( global float)
+0:19          direct index ( temp float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                Constant:
+0:19                  0 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Constant:
+0:19            1 (const uint)
+0:20      move second child to first child ( temp 2-component vector of float)
+0:20        vector swizzle ( temp 2-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'invocation' ( temp uint)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20        subgroupQuadBroadcast ( global 2-component vector of float)
+0:20          vector swizzle ( temp 2-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                Constant:
+0:20                  1 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20          Constant:
+0:20            1 (const uint)
+0:21      move second child to first child ( temp 3-component vector of float)
+0:21        vector swizzle ( temp 3-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'invocation' ( temp uint)
+0:21            Constant:
+0:21              0 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21            Constant:
+0:21              2 (const int)
+0:21        subgroupQuadBroadcast ( global 3-component vector of float)
+0:21          vector swizzle ( temp 3-component vector of float)
+0:21            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                Constant:
+0:21                  2 (const int)
+0:21              Constant:
+0:21                0 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21              Constant:
+0:21                2 (const int)
+0:21          Constant:
+0:21            1 (const uint)
+0:22      move second child to first child ( temp 4-component vector of float)
+0:22        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'invocation' ( temp uint)
+0:22          Constant:
+0:22            0 (const int)
+0:22        subgroupQuadBroadcast ( global 4-component vector of float)
+0:22          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              Constant:
+0:22                3 (const int)
+0:22            Constant:
+0:22              0 (const int)
+0:22          Constant:
+0:22            1 (const uint)
+0:24      move second child to first child ( temp int)
+0:24        direct index ( temp int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'invocation' ( temp uint)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:24        subgroupQuadBroadcast ( global int)
+0:24          direct index ( temp int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                Constant:
+0:24                  0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:24          Constant:
+0:24            1 (const uint)
+0:25      move second child to first child ( temp 2-component vector of int)
+0:25        vector swizzle ( temp 2-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'invocation' ( temp uint)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25        subgroupQuadBroadcast ( global 2-component vector of int)
+0:25          vector swizzle ( temp 2-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                Constant:
+0:25                  1 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25          Constant:
+0:25            1 (const uint)
+0:26      move second child to first child ( temp 3-component vector of int)
+0:26        vector swizzle ( temp 3-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'invocation' ( temp uint)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26        subgroupQuadBroadcast ( global 3-component vector of int)
+0:26          vector swizzle ( temp 3-component vector of int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                Constant:
+0:26                  2 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26          Constant:
+0:26            1 (const uint)
+0:27      move second child to first child ( temp 4-component vector of int)
+0:27        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'invocation' ( temp uint)
+0:27          Constant:
+0:27            1 (const int)
+0:27        subgroupQuadBroadcast ( global 4-component vector of int)
+0:27          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              Constant:
+0:27                3 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27          Constant:
+0:27            1 (const uint)
+0:29      move second child to first child ( temp uint)
+0:29        direct index ( temp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'invocation' ( temp uint)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            0 (const int)
+0:29        subgroupQuadBroadcast ( global uint)
+0:29          direct index ( temp uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                Constant:
+0:29                  0 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Constant:
+0:29              0 (const int)
+0:29          Constant:
+0:29            1 (const uint)
+0:30      move second child to first child ( temp 2-component vector of uint)
+0:30        vector swizzle ( temp 2-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'invocation' ( temp uint)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30        subgroupQuadBroadcast ( global 2-component vector of uint)
+0:30          vector swizzle ( temp 2-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                Constant:
+0:30                  1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30          Constant:
+0:30            1 (const uint)
+0:31      move second child to first child ( temp 3-component vector of uint)
+0:31        vector swizzle ( temp 3-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'invocation' ( temp uint)
+0:31            Constant:
+0:31              2 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31        subgroupQuadBroadcast ( global 3-component vector of uint)
+0:31          vector swizzle ( temp 3-component vector of uint)
+0:31            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                Constant:
+0:31                  2 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31          Constant:
+0:31            1 (const uint)
+0:32      move second child to first child ( temp 4-component vector of uint)
+0:32        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'invocation' ( temp uint)
+0:32          Constant:
+0:32            2 (const int)
+0:32        subgroupQuadBroadcast ( global 4-component vector of uint)
+0:32          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              Constant:
+0:32                3 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32          Constant:
+0:32            1 (const uint)
+0:34      move second child to first child ( temp double)
+0:34        direct index ( temp double)
+0:34          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'invocation' ( temp uint)
+0:34            Constant:
+0:34              3 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupQuadBroadcast ( global double)
+0:34          direct index ( temp double)
+0:34            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                3 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          Constant:
+0:34            1 (const uint)
+0:35      move second child to first child ( temp 2-component vector of double)
+0:35        vector swizzle ( temp 2-component vector of double)
+0:35          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'invocation' ( temp uint)
+0:35            Constant:
+0:35              3 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35        subgroupQuadBroadcast ( global 2-component vector of double)
+0:35          vector swizzle ( temp 2-component vector of double)
+0:35            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                Constant:
+0:35                  1 (const int)
+0:35              Constant:
+0:35                3 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:35          Constant:
+0:35            1 (const uint)
+0:36      move second child to first child ( temp 3-component vector of double)
+0:36        vector swizzle ( temp 3-component vector of double)
+0:36          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'invocation' ( temp uint)
+0:36            Constant:
+0:36              3 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36            Constant:
+0:36              2 (const int)
+0:36        subgroupQuadBroadcast ( global 3-component vector of double)
+0:36          vector swizzle ( temp 3-component vector of double)
+0:36            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                Constant:
+0:36                  2 (const int)
+0:36              Constant:
+0:36                3 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:36              Constant:
+0:36                2 (const int)
+0:36          Constant:
+0:36            1 (const uint)
+0:37      move second child to first child ( temp 4-component vector of double)
+0:37        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'invocation' ( temp uint)
+0:37          Constant:
+0:37            3 (const int)
+0:37        subgroupQuadBroadcast ( global 4-component vector of double)
+0:37          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              Constant:
+0:37                3 (const int)
+0:37            Constant:
+0:37              3 (const int)
+0:37          Constant:
+0:37            1 (const uint)
+0:39      move second child to first child ( temp int)
+0:39        direct index ( temp int)
+0:39          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'invocation' ( temp uint)
+0:39            Constant:
+0:39              1 (const int)
+0:39          Constant:
+0:39            0 (const int)
+0:39        Convert bool to int ( temp int)
+0:39          subgroupQuadBroadcast ( global bool)
+0:39            Compare Less Than ( temp bool)
+0:39              direct index ( temp int)
+0:39                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                    Constant:
+0:39                      0 (const int)
+0:39                  Constant:
+0:39                    1 (const int)
+0:39                Constant:
+0:39                  0 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              1 (const uint)
+0:40      move second child to first child ( temp 2-component vector of int)
+0:40        vector swizzle ( temp 2-component vector of int)
+0:40          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'invocation' ( temp uint)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40        Convert bool to int ( temp 2-component vector of int)
+0:40          subgroupQuadBroadcast ( global 2-component vector of bool)
+0:40            Compare Less Than ( global 2-component vector of bool)
+0:40              vector swizzle ( temp 2-component vector of int)
+0:40                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                    Constant:
+0:40                      1 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                Sequence
+0:40                  Constant:
+0:40                    0 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40                0 (const int)
+0:40            Constant:
+0:40              1 (const uint)
+0:41      move second child to first child ( temp 3-component vector of int)
+0:41        vector swizzle ( temp 3-component vector of int)
+0:41          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'invocation' ( temp uint)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41            Constant:
+0:41              2 (const int)
+0:41        Convert bool to int ( temp 3-component vector of int)
+0:41          subgroupQuadBroadcast ( global 3-component vector of bool)
+0:41            Compare Less Than ( global 3-component vector of bool)
+0:41              vector swizzle ( temp 3-component vector of int)
+0:41                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                    Constant:
+0:41                      1 (const int)
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                Sequence
+0:41                  Constant:
+0:41                    0 (const int)
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                  Constant:
+0:41                    2 (const int)
+0:41              Constant:
+0:41                0 (const int)
+0:41                0 (const int)
+0:41                0 (const int)
+0:41            Constant:
+0:41              1 (const uint)
+0:42      move second child to first child ( temp 4-component vector of int)
+0:42        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'invocation' ( temp uint)
+0:42          Constant:
+0:42            1 (const int)
+0:42        Convert bool to int ( temp 4-component vector of int)
+0:42          subgroupQuadBroadcast ( global 4-component vector of bool)
+0:42            Compare Less Than ( global 4-component vector of bool)
+0:42              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  Constant:
+0:42                    1 (const int)
+0:42                Constant:
+0:42                  1 (const int)
+0:42              Constant:
+0:42                0 (const int)
+0:42                0 (const int)
+0:42                0 (const int)
+0:42                0 (const int)
+0:42            Constant:
+0:42              1 (const uint)
+0:44      move second child to first child ( temp float)
+0:44        direct index ( temp float)
+0:44          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'invocation' ( temp uint)
+0:44            Constant:
+0:44              0 (const int)
+0:44          Constant:
+0:44            0 (const int)
+0:44        subgroupQuadSwapHorizontal ( global float)
+0:44          direct index ( temp float)
+0:44            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                Constant:
+0:44                  0 (const int)
+0:44              Constant:
+0:44                0 (const int)
+0:44            Constant:
+0:44              0 (const int)
+0:45      move second child to first child ( temp 2-component vector of float)
+0:45        vector swizzle ( temp 2-component vector of float)
+0:45          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'invocation' ( temp uint)
+0:45            Constant:
+0:45              0 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45        subgroupQuadSwapHorizontal ( global 2-component vector of float)
+0:45          vector swizzle ( temp 2-component vector of float)
+0:45            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                Constant:
+0:45                  1 (const int)
+0:45              Constant:
+0:45                0 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:46      move second child to first child ( temp 3-component vector of float)
+0:46        vector swizzle ( temp 3-component vector of float)
+0:46          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'invocation' ( temp uint)
+0:46            Constant:
+0:46              0 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46        subgroupQuadSwapHorizontal ( global 3-component vector of float)
+0:46          vector swizzle ( temp 3-component vector of float)
+0:46            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                Constant:
+0:46                  2 (const int)
+0:46              Constant:
+0:46                0 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:47      move second child to first child ( temp 4-component vector of float)
+0:47        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'invocation' ( temp uint)
+0:47          Constant:
+0:47            0 (const int)
+0:47        subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:47          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              Constant:
+0:47                3 (const int)
+0:47            Constant:
+0:47              0 (const int)
+0:49      move second child to first child ( temp int)
+0:49        direct index ( temp int)
+0:49          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'invocation' ( temp uint)
+0:49            Constant:
+0:49              1 (const int)
+0:49          Constant:
+0:49            0 (const int)
+0:49        subgroupQuadSwapHorizontal ( global int)
+0:49          direct index ( temp int)
+0:49            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                Constant:
+0:49                  0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:50      move second child to first child ( temp 2-component vector of int)
+0:50        vector swizzle ( temp 2-component vector of int)
+0:50          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'invocation' ( temp uint)
+0:50            Constant:
+0:50              1 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50        subgroupQuadSwapHorizontal ( global 2-component vector of int)
+0:50          vector swizzle ( temp 2-component vector of int)
+0:50            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                Constant:
+0:50                  1 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:51      move second child to first child ( temp 3-component vector of int)
+0:51        vector swizzle ( temp 3-component vector of int)
+0:51          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'invocation' ( temp uint)
+0:51            Constant:
+0:51              1 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:51        subgroupQuadSwapHorizontal ( global 3-component vector of int)
+0:51          vector swizzle ( temp 3-component vector of int)
+0:51            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                Constant:
+0:51                  2 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51              Constant:
+0:51                2 (const int)
+0:52      move second child to first child ( temp 4-component vector of int)
+0:52        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'invocation' ( temp uint)
+0:52          Constant:
+0:52            1 (const int)
+0:52        subgroupQuadSwapHorizontal ( global 4-component vector of int)
+0:52          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              Constant:
+0:52                3 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:54      move second child to first child ( temp uint)
+0:54        direct index ( temp uint)
+0:54          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'invocation' ( temp uint)
+0:54            Constant:
+0:54              2 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupQuadSwapHorizontal ( global uint)
+0:54          direct index ( temp uint)
+0:54            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                Constant:
+0:54                  0 (const int)
+0:54              Constant:
+0:54                2 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:55      move second child to first child ( temp 2-component vector of uint)
+0:55        vector swizzle ( temp 2-component vector of uint)
+0:55          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'invocation' ( temp uint)
+0:55            Constant:
+0:55              2 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55        subgroupQuadSwapHorizontal ( global 2-component vector of uint)
+0:55          vector swizzle ( temp 2-component vector of uint)
+0:55            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                Constant:
+0:55                  1 (const int)
+0:55              Constant:
+0:55                2 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:56      move second child to first child ( temp 3-component vector of uint)
+0:56        vector swizzle ( temp 3-component vector of uint)
+0:56          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'invocation' ( temp uint)
+0:56            Constant:
+0:56              2 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56            Constant:
+0:56              2 (const int)
+0:56        subgroupQuadSwapHorizontal ( global 3-component vector of uint)
+0:56          vector swizzle ( temp 3-component vector of uint)
+0:56            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                Constant:
+0:56                  2 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:57      move second child to first child ( temp 4-component vector of uint)
+0:57        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'invocation' ( temp uint)
+0:57          Constant:
+0:57            2 (const int)
+0:57        subgroupQuadSwapHorizontal ( global 4-component vector of uint)
+0:57          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              Constant:
+0:57                3 (const int)
+0:57            Constant:
+0:57              2 (const int)
+0:59      move second child to first child ( temp double)
+0:59        direct index ( temp double)
+0:59          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'invocation' ( temp uint)
+0:59            Constant:
+0:59              3 (const int)
+0:59          Constant:
+0:59            0 (const int)
+0:59        subgroupQuadSwapHorizontal ( global double)
+0:59          direct index ( temp double)
+0:59            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                Constant:
+0:59                  0 (const int)
+0:59              Constant:
+0:59                3 (const int)
+0:59            Constant:
+0:59              0 (const int)
+0:60      move second child to first child ( temp 2-component vector of double)
+0:60        vector swizzle ( temp 2-component vector of double)
+0:60          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'invocation' ( temp uint)
+0:60            Constant:
+0:60              3 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60        subgroupQuadSwapHorizontal ( global 2-component vector of double)
+0:60          vector swizzle ( temp 2-component vector of double)
+0:60            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                Constant:
+0:60                  1 (const int)
+0:60              Constant:
+0:60                3 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:61      move second child to first child ( temp 3-component vector of double)
+0:61        vector swizzle ( temp 3-component vector of double)
+0:61          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'invocation' ( temp uint)
+0:61            Constant:
+0:61              3 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61            Constant:
+0:61              2 (const int)
+0:61        subgroupQuadSwapHorizontal ( global 3-component vector of double)
+0:61          vector swizzle ( temp 3-component vector of double)
+0:61            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                Constant:
+0:61                  2 (const int)
+0:61              Constant:
+0:61                3 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61              Constant:
+0:61                2 (const int)
+0:62      move second child to first child ( temp 4-component vector of double)
+0:62        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'invocation' ( temp uint)
+0:62          Constant:
+0:62            3 (const int)
+0:62        subgroupQuadSwapHorizontal ( global 4-component vector of double)
+0:62          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              Constant:
+0:62                3 (const int)
+0:62            Constant:
+0:62              3 (const int)
+0:64      move second child to first child ( temp int)
+0:64        direct index ( temp int)
+0:64          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'invocation' ( temp uint)
+0:64            Constant:
+0:64              1 (const int)
+0:64          Constant:
+0:64            0 (const int)
+0:64        Convert bool to int ( temp int)
+0:64          subgroupQuadSwapHorizontal ( global bool)
+0:64            Compare Less Than ( temp bool)
+0:64              direct index ( temp int)
+0:64                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                    Constant:
+0:64                      0 (const int)
+0:64                  Constant:
+0:64                    1 (const int)
+0:64                Constant:
+0:64                  0 (const int)
+0:64              Constant:
+0:64                0 (const int)
+0:65      move second child to first child ( temp 2-component vector of int)
+0:65        vector swizzle ( temp 2-component vector of int)
+0:65          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'invocation' ( temp uint)
+0:65            Constant:
+0:65              1 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65        Convert bool to int ( temp 2-component vector of int)
+0:65          subgroupQuadSwapHorizontal ( global 2-component vector of bool)
+0:65            Compare Less Than ( global 2-component vector of bool)
+0:65              vector swizzle ( temp 2-component vector of int)
+0:65                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                    Constant:
+0:65                      1 (const int)
+0:65                  Constant:
+0:65                    1 (const int)
+0:65                Sequence
+0:65                  Constant:
+0:65                    0 (const int)
+0:65                  Constant:
+0:65                    1 (const int)
+0:65              Constant:
+0:65                0 (const int)
+0:65                0 (const int)
+0:66      move second child to first child ( temp 3-component vector of int)
+0:66        vector swizzle ( temp 3-component vector of int)
+0:66          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'invocation' ( temp uint)
+0:66            Constant:
+0:66              1 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66        Convert bool to int ( temp 3-component vector of int)
+0:66          subgroupQuadSwapHorizontal ( global 3-component vector of bool)
+0:66            Compare Less Than ( global 3-component vector of bool)
+0:66              vector swizzle ( temp 3-component vector of int)
+0:66                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                    Constant:
+0:66                      1 (const int)
+0:66                  Constant:
+0:66                    1 (const int)
+0:66                Sequence
+0:66                  Constant:
+0:66                    0 (const int)
+0:66                  Constant:
+0:66                    1 (const int)
+0:66                  Constant:
+0:66                    2 (const int)
+0:66              Constant:
+0:66                0 (const int)
+0:66                0 (const int)
+0:66                0 (const int)
+0:67      move second child to first child ( temp 4-component vector of int)
+0:67        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'invocation' ( temp uint)
+0:67          Constant:
+0:67            1 (const int)
+0:67        Convert bool to int ( temp 4-component vector of int)
+0:67          subgroupQuadSwapHorizontal ( global 4-component vector of bool)
+0:67            Compare Less Than ( global 4-component vector of bool)
+0:67              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                  Constant:
+0:67                    1 (const int)
+0:67                Constant:
+0:67                  1 (const int)
+0:67              Constant:
+0:67                0 (const int)
+0:67                0 (const int)
+0:67                0 (const int)
+0:67                0 (const int)
+0:69      move second child to first child ( temp float)
+0:69        direct index ( temp float)
+0:69          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:69            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'invocation' ( temp uint)
+0:69            Constant:
+0:69              0 (const int)
+0:69          Constant:
+0:69            0 (const int)
+0:69        subgroupQuadSwapVertical ( global float)
+0:69          direct index ( temp float)
+0:69            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:69              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                Constant:
+0:69                  0 (const int)
+0:69              Constant:
+0:69                0 (const int)
+0:69            Constant:
+0:69              0 (const int)
+0:70      move second child to first child ( temp 2-component vector of float)
+0:70        vector swizzle ( temp 2-component vector of float)
+0:70          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:70            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70              'invocation' ( temp uint)
+0:70            Constant:
+0:70              0 (const int)
+0:70          Sequence
+0:70            Constant:
+0:70              0 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70        subgroupQuadSwapVertical ( global 2-component vector of float)
+0:70          vector swizzle ( temp 2-component vector of float)
+0:70            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:70              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70                Constant:
+0:70                  1 (const int)
+0:70              Constant:
+0:70                0 (const int)
+0:70            Sequence
+0:70              Constant:
+0:70                0 (const int)
+0:70              Constant:
+0:70                1 (const int)
+0:71      move second child to first child ( temp 3-component vector of float)
+0:71        vector swizzle ( temp 3-component vector of float)
+0:71          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:71            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'invocation' ( temp uint)
+0:71            Constant:
+0:71              0 (const int)
+0:71          Sequence
+0:71            Constant:
+0:71              0 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71            Constant:
+0:71              2 (const int)
+0:71        subgroupQuadSwapVertical ( global 3-component vector of float)
+0:71          vector swizzle ( temp 3-component vector of float)
+0:71            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:71              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                Constant:
+0:71                  2 (const int)
+0:71              Constant:
+0:71                0 (const int)
+0:71            Sequence
+0:71              Constant:
+0:71                0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:71              Constant:
+0:71                2 (const int)
+0:72      move second child to first child ( temp 4-component vector of float)
+0:72        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:72          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72            'invocation' ( temp uint)
+0:72          Constant:
+0:72            0 (const int)
+0:72        subgroupQuadSwapVertical ( global 4-component vector of float)
+0:72          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:72            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72              Constant:
+0:72                3 (const int)
+0:72            Constant:
+0:72              0 (const int)
+0:74      move second child to first child ( temp int)
+0:74        direct index ( temp int)
+0:74          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:74            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74              'invocation' ( temp uint)
+0:74            Constant:
+0:74              1 (const int)
+0:74          Constant:
+0:74            0 (const int)
+0:74        subgroupQuadSwapVertical ( global int)
+0:74          direct index ( temp int)
+0:74            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:74              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:74                Constant:
+0:74                  0 (const int)
+0:74              Constant:
+0:74                1 (const int)
+0:74            Constant:
+0:74              0 (const int)
+0:75      move second child to first child ( temp 2-component vector of int)
+0:75        vector swizzle ( temp 2-component vector of int)
+0:75          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:75            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75              'invocation' ( temp uint)
+0:75            Constant:
+0:75              1 (const int)
+0:75          Sequence
+0:75            Constant:
+0:75              0 (const int)
+0:75            Constant:
+0:75              1 (const int)
+0:75        subgroupQuadSwapVertical ( global 2-component vector of int)
+0:75          vector swizzle ( temp 2-component vector of int)
+0:75            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:75              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:75                Constant:
+0:75                  1 (const int)
+0:75              Constant:
+0:75                1 (const int)
+0:75            Sequence
+0:75              Constant:
+0:75                0 (const int)
+0:75              Constant:
+0:75                1 (const int)
+0:76      move second child to first child ( temp 3-component vector of int)
+0:76        vector swizzle ( temp 3-component vector of int)
+0:76          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:76            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76              'invocation' ( temp uint)
+0:76            Constant:
+0:76              1 (const int)
+0:76          Sequence
+0:76            Constant:
+0:76              0 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76            Constant:
+0:76              2 (const int)
+0:76        subgroupQuadSwapVertical ( global 3-component vector of int)
+0:76          vector swizzle ( temp 3-component vector of int)
+0:76            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:76              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:76                Constant:
+0:76                  2 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:76            Sequence
+0:76              Constant:
+0:76                0 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:76              Constant:
+0:76                2 (const int)
+0:77      move second child to first child ( temp 4-component vector of int)
+0:77        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:77          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77            'invocation' ( temp uint)
+0:77          Constant:
+0:77            1 (const int)
+0:77        subgroupQuadSwapVertical ( global 4-component vector of int)
+0:77          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:77            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:77              Constant:
+0:77                3 (const int)
+0:77            Constant:
+0:77              1 (const int)
+0:79      move second child to first child ( temp uint)
+0:79        direct index ( temp uint)
+0:79          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:79            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79              'invocation' ( temp uint)
+0:79            Constant:
+0:79              2 (const int)
+0:79          Constant:
+0:79            0 (const int)
+0:79        subgroupQuadSwapVertical ( global uint)
+0:79          direct index ( temp uint)
+0:79            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:79              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:79                Constant:
+0:79                  0 (const int)
+0:79              Constant:
+0:79                2 (const int)
+0:79            Constant:
+0:79              0 (const int)
+0:80      move second child to first child ( temp 2-component vector of uint)
+0:80        vector swizzle ( temp 2-component vector of uint)
+0:80          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:80            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80              'invocation' ( temp uint)
+0:80            Constant:
+0:80              2 (const int)
+0:80          Sequence
+0:80            Constant:
+0:80              0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80        subgroupQuadSwapVertical ( global 2-component vector of uint)
+0:80          vector swizzle ( temp 2-component vector of uint)
+0:80            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:80              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:80                Constant:
+0:80                  1 (const int)
+0:80              Constant:
+0:80                2 (const int)
+0:80            Sequence
+0:80              Constant:
+0:80                0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:81      move second child to first child ( temp 3-component vector of uint)
+0:81        vector swizzle ( temp 3-component vector of uint)
+0:81          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:81            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81              'invocation' ( temp uint)
+0:81            Constant:
+0:81              2 (const int)
+0:81          Sequence
+0:81            Constant:
+0:81              0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81            Constant:
+0:81              2 (const int)
+0:81        subgroupQuadSwapVertical ( global 3-component vector of uint)
+0:81          vector swizzle ( temp 3-component vector of uint)
+0:81            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:81              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:81                Constant:
+0:81                  2 (const int)
+0:81              Constant:
+0:81                2 (const int)
+0:81            Sequence
+0:81              Constant:
+0:81                0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81              Constant:
+0:81                2 (const int)
+0:82      move second child to first child ( temp 4-component vector of uint)
+0:82        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:82          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82            'invocation' ( temp uint)
+0:82          Constant:
+0:82            2 (const int)
+0:82        subgroupQuadSwapVertical ( global 4-component vector of uint)
+0:82          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:82            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:82              Constant:
+0:82                3 (const int)
+0:82            Constant:
+0:82              2 (const int)
+0:84      move second child to first child ( temp double)
+0:84        direct index ( temp double)
+0:84          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:84            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84              'invocation' ( temp uint)
+0:84            Constant:
+0:84              3 (const int)
+0:84          Constant:
+0:84            0 (const int)
+0:84        subgroupQuadSwapVertical ( global double)
+0:84          direct index ( temp double)
+0:84            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:84              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:84                Constant:
+0:84                  0 (const int)
+0:84              Constant:
+0:84                3 (const int)
+0:84            Constant:
+0:84              0 (const int)
+0:85      move second child to first child ( temp 2-component vector of double)
+0:85        vector swizzle ( temp 2-component vector of double)
+0:85          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:85            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85              'invocation' ( temp uint)
+0:85            Constant:
+0:85              3 (const int)
+0:85          Sequence
+0:85            Constant:
+0:85              0 (const int)
+0:85            Constant:
+0:85              1 (const int)
+0:85        subgroupQuadSwapVertical ( global 2-component vector of double)
+0:85          vector swizzle ( temp 2-component vector of double)
+0:85            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:85              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:85                Constant:
+0:85                  1 (const int)
+0:85              Constant:
+0:85                3 (const int)
+0:85            Sequence
+0:85              Constant:
+0:85                0 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:86      move second child to first child ( temp 3-component vector of double)
+0:86        vector swizzle ( temp 3-component vector of double)
+0:86          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:86            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86              'invocation' ( temp uint)
+0:86            Constant:
+0:86              3 (const int)
+0:86          Sequence
+0:86            Constant:
+0:86              0 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:86        subgroupQuadSwapVertical ( global 3-component vector of double)
+0:86          vector swizzle ( temp 3-component vector of double)
+0:86            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:86              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:86                Constant:
+0:86                  2 (const int)
+0:86              Constant:
+0:86                3 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86              Constant:
+0:86                2 (const int)
+0:87      move second child to first child ( temp 4-component vector of double)
+0:87        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:87          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87            'invocation' ( temp uint)
+0:87          Constant:
+0:87            3 (const int)
+0:87        subgroupQuadSwapVertical ( global 4-component vector of double)
+0:87          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:87            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:87              Constant:
+0:87                3 (const int)
+0:87            Constant:
+0:87              3 (const int)
+0:89      move second child to first child ( temp int)
+0:89        direct index ( temp int)
+0:89          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:89            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89              'invocation' ( temp uint)
+0:89            Constant:
+0:89              1 (const int)
+0:89          Constant:
+0:89            0 (const int)
+0:89        Convert bool to int ( temp int)
+0:89          subgroupQuadSwapVertical ( global bool)
+0:89            Compare Less Than ( temp bool)
+0:89              direct index ( temp int)
+0:89                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:89                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:89                    Constant:
+0:89                      0 (const int)
+0:89                  Constant:
+0:89                    1 (const int)
+0:89                Constant:
+0:89                  0 (const int)
+0:89              Constant:
+0:89                0 (const int)
+0:90      move second child to first child ( temp 2-component vector of int)
+0:90        vector swizzle ( temp 2-component vector of int)
+0:90          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:90            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90              'invocation' ( temp uint)
+0:90            Constant:
+0:90              1 (const int)
+0:90          Sequence
+0:90            Constant:
+0:90              0 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90        Convert bool to int ( temp 2-component vector of int)
+0:90          subgroupQuadSwapVertical ( global 2-component vector of bool)
+0:90            Compare Less Than ( global 2-component vector of bool)
+0:90              vector swizzle ( temp 2-component vector of int)
+0:90                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:90                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:90                    Constant:
+0:90                      1 (const int)
+0:90                  Constant:
+0:90                    1 (const int)
+0:90                Sequence
+0:90                  Constant:
+0:90                    0 (const int)
+0:90                  Constant:
+0:90                    1 (const int)
+0:90              Constant:
+0:90                0 (const int)
+0:90                0 (const int)
+0:91      move second child to first child ( temp 3-component vector of int)
+0:91        vector swizzle ( temp 3-component vector of int)
+0:91          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:91            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91              'invocation' ( temp uint)
+0:91            Constant:
+0:91              1 (const int)
+0:91          Sequence
+0:91            Constant:
+0:91              0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91            Constant:
+0:91              2 (const int)
+0:91        Convert bool to int ( temp 3-component vector of int)
+0:91          subgroupQuadSwapVertical ( global 3-component vector of bool)
+0:91            Compare Less Than ( global 3-component vector of bool)
+0:91              vector swizzle ( temp 3-component vector of int)
+0:91                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:91                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:91                    Constant:
+0:91                      1 (const int)
+0:91                  Constant:
+0:91                    1 (const int)
+0:91                Sequence
+0:91                  Constant:
+0:91                    0 (const int)
+0:91                  Constant:
+0:91                    1 (const int)
+0:91                  Constant:
+0:91                    2 (const int)
+0:91              Constant:
+0:91                0 (const int)
+0:91                0 (const int)
+0:91                0 (const int)
+0:92      move second child to first child ( temp 4-component vector of int)
+0:92        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:92          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92            'invocation' ( temp uint)
+0:92          Constant:
+0:92            1 (const int)
+0:92        Convert bool to int ( temp 4-component vector of int)
+0:92          subgroupQuadSwapVertical ( global 4-component vector of bool)
+0:92            Compare Less Than ( global 4-component vector of bool)
+0:92              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:92                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:92                  Constant:
+0:92                    1 (const int)
+0:92                Constant:
+0:92                  1 (const int)
+0:92              Constant:
+0:92                0 (const int)
+0:92                0 (const int)
+0:92                0 (const int)
+0:92                0 (const int)
+0:94      move second child to first child ( temp float)
+0:94        direct index ( temp float)
+0:94          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:94            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94              'invocation' ( temp uint)
+0:94            Constant:
+0:94              0 (const int)
+0:94          Constant:
+0:94            0 (const int)
+0:94        subgroupQuadSwapDiagonal ( global float)
+0:94          direct index ( temp float)
+0:94            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:94              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:94                Constant:
+0:94                  0 (const int)
+0:94              Constant:
+0:94                0 (const int)
+0:94            Constant:
+0:94              0 (const int)
+0:95      move second child to first child ( temp 2-component vector of float)
+0:95        vector swizzle ( temp 2-component vector of float)
+0:95          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:95            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95              'invocation' ( temp uint)
+0:95            Constant:
+0:95              0 (const int)
+0:95          Sequence
+0:95            Constant:
+0:95              0 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95        subgroupQuadSwapDiagonal ( global 2-component vector of float)
+0:95          vector swizzle ( temp 2-component vector of float)
+0:95            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:95              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:95                Constant:
+0:95                  1 (const int)
+0:95              Constant:
+0:95                0 (const int)
+0:95            Sequence
+0:95              Constant:
+0:95                0 (const int)
+0:95              Constant:
+0:95                1 (const int)
+0:96      move second child to first child ( temp 3-component vector of float)
+0:96        vector swizzle ( temp 3-component vector of float)
+0:96          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:96            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96              'invocation' ( temp uint)
+0:96            Constant:
+0:96              0 (const int)
+0:96          Sequence
+0:96            Constant:
+0:96              0 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96            Constant:
+0:96              2 (const int)
+0:96        subgroupQuadSwapDiagonal ( global 3-component vector of float)
+0:96          vector swizzle ( temp 3-component vector of float)
+0:96            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:96              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:96                Constant:
+0:96                  2 (const int)
+0:96              Constant:
+0:96                0 (const int)
+0:96            Sequence
+0:96              Constant:
+0:96                0 (const int)
+0:96              Constant:
+0:96                1 (const int)
+0:96              Constant:
+0:96                2 (const int)
+0:97      move second child to first child ( temp 4-component vector of float)
+0:97        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:97          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97            'invocation' ( temp uint)
+0:97          Constant:
+0:97            0 (const int)
+0:97        subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:97          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:97            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:97              Constant:
+0:97                3 (const int)
+0:97            Constant:
+0:97              0 (const int)
+0:99      move second child to first child ( temp int)
+0:99        direct index ( temp int)
+0:99          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99              'invocation' ( temp uint)
+0:99            Constant:
+0:99              1 (const int)
+0:99          Constant:
+0:99            0 (const int)
+0:99        subgroupQuadSwapDiagonal ( global int)
+0:99          direct index ( temp int)
+0:99            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:99              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:99                Constant:
+0:99                  0 (const int)
+0:99              Constant:
+0:99                1 (const int)
+0:99            Constant:
+0:99              0 (const int)
+0:100      move second child to first child ( temp 2-component vector of int)
+0:100        vector swizzle ( temp 2-component vector of int)
+0:100          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100              'invocation' ( temp uint)
+0:100            Constant:
+0:100              1 (const int)
+0:100          Sequence
+0:100            Constant:
+0:100              0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100        subgroupQuadSwapDiagonal ( global 2-component vector of int)
+0:100          vector swizzle ( temp 2-component vector of int)
+0:100            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:100              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:100                Constant:
+0:100                  1 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100            Sequence
+0:100              Constant:
+0:100                0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:101      move second child to first child ( temp 3-component vector of int)
+0:101        vector swizzle ( temp 3-component vector of int)
+0:101          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101              'invocation' ( temp uint)
+0:101            Constant:
+0:101              1 (const int)
+0:101          Sequence
+0:101            Constant:
+0:101              0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101            Constant:
+0:101              2 (const int)
+0:101        subgroupQuadSwapDiagonal ( global 3-component vector of int)
+0:101          vector swizzle ( temp 3-component vector of int)
+0:101            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:101              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:101                Constant:
+0:101                  2 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101            Sequence
+0:101              Constant:
+0:101                0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101              Constant:
+0:101                2 (const int)
+0:102      move second child to first child ( temp 4-component vector of int)
+0:102        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102            'invocation' ( temp uint)
+0:102          Constant:
+0:102            1 (const int)
+0:102        subgroupQuadSwapDiagonal ( global 4-component vector of int)
+0:102          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:102            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:102              Constant:
+0:102                3 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:104      move second child to first child ( temp uint)
+0:104        direct index ( temp uint)
+0:104          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104              'invocation' ( temp uint)
+0:104            Constant:
+0:104              2 (const int)
+0:104          Constant:
+0:104            0 (const int)
+0:104        subgroupQuadSwapDiagonal ( global uint)
+0:104          direct index ( temp uint)
+0:104            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:104              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:104                Constant:
+0:104                  0 (const int)
+0:104              Constant:
+0:104                2 (const int)
+0:104            Constant:
+0:104              0 (const int)
+0:105      move second child to first child ( temp 2-component vector of uint)
+0:105        vector swizzle ( temp 2-component vector of uint)
+0:105          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105              'invocation' ( temp uint)
+0:105            Constant:
+0:105              2 (const int)
+0:105          Sequence
+0:105            Constant:
+0:105              0 (const int)
+0:105            Constant:
+0:105              1 (const int)
+0:105        subgroupQuadSwapDiagonal ( global 2-component vector of uint)
+0:105          vector swizzle ( temp 2-component vector of uint)
+0:105            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:105              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:105                Constant:
+0:105                  1 (const int)
+0:105              Constant:
+0:105                2 (const int)
+0:105            Sequence
+0:105              Constant:
+0:105                0 (const int)
+0:105              Constant:
+0:105                1 (const int)
+0:106      move second child to first child ( temp 3-component vector of uint)
+0:106        vector swizzle ( temp 3-component vector of uint)
+0:106          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106              'invocation' ( temp uint)
+0:106            Constant:
+0:106              2 (const int)
+0:106          Sequence
+0:106            Constant:
+0:106              0 (const int)
+0:106            Constant:
+0:106              1 (const int)
+0:106            Constant:
+0:106              2 (const int)
+0:106        subgroupQuadSwapDiagonal ( global 3-component vector of uint)
+0:106          vector swizzle ( temp 3-component vector of uint)
+0:106            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:106              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:106                Constant:
+0:106                  2 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:106            Sequence
+0:106              Constant:
+0:106                0 (const int)
+0:106              Constant:
+0:106                1 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:107      move second child to first child ( temp 4-component vector of uint)
+0:107        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107            'invocation' ( temp uint)
+0:107          Constant:
+0:107            2 (const int)
+0:107        subgroupQuadSwapDiagonal ( global 4-component vector of uint)
+0:107          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:107            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:107              Constant:
+0:107                3 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:109      move second child to first child ( temp double)
+0:109        direct index ( temp double)
+0:109          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:109            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109              'invocation' ( temp uint)
+0:109            Constant:
+0:109              3 (const int)
+0:109          Constant:
+0:109            0 (const int)
+0:109        subgroupQuadSwapDiagonal ( global double)
+0:109          direct index ( temp double)
+0:109            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:109              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:109                Constant:
+0:109                  0 (const int)
+0:109              Constant:
+0:109                3 (const int)
+0:109            Constant:
+0:109              0 (const int)
+0:110      move second child to first child ( temp 2-component vector of double)
+0:110        vector swizzle ( temp 2-component vector of double)
+0:110          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:110            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110              'invocation' ( temp uint)
+0:110            Constant:
+0:110              3 (const int)
+0:110          Sequence
+0:110            Constant:
+0:110              0 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110        subgroupQuadSwapDiagonal ( global 2-component vector of double)
+0:110          vector swizzle ( temp 2-component vector of double)
+0:110            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:110              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:110                Constant:
+0:110                  1 (const int)
+0:110              Constant:
+0:110                3 (const int)
+0:110            Sequence
+0:110              Constant:
+0:110                0 (const int)
+0:110              Constant:
+0:110                1 (const int)
+0:111      move second child to first child ( temp 3-component vector of double)
+0:111        vector swizzle ( temp 3-component vector of double)
+0:111          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:111            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111              'invocation' ( temp uint)
+0:111            Constant:
+0:111              3 (const int)
+0:111          Sequence
+0:111            Constant:
+0:111              0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111            Constant:
+0:111              2 (const int)
+0:111        subgroupQuadSwapDiagonal ( global 3-component vector of double)
+0:111          vector swizzle ( temp 3-component vector of double)
+0:111            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:111              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:111                Constant:
+0:111                  2 (const int)
+0:111              Constant:
+0:111                3 (const int)
+0:111            Sequence
+0:111              Constant:
+0:111                0 (const int)
+0:111              Constant:
+0:111                1 (const int)
+0:111              Constant:
+0:111                2 (const int)
+0:112      move second child to first child ( temp 4-component vector of double)
+0:112        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:112          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112            'invocation' ( temp uint)
+0:112          Constant:
+0:112            3 (const int)
+0:112        subgroupQuadSwapDiagonal ( global 4-component vector of double)
+0:112          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:112            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:112              Constant:
+0:112                3 (const int)
+0:112            Constant:
+0:112              3 (const int)
+0:114      move second child to first child ( temp int)
+0:114        direct index ( temp int)
+0:114          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114              'invocation' ( temp uint)
+0:114            Constant:
+0:114              1 (const int)
+0:114          Constant:
+0:114            0 (const int)
+0:114        Convert bool to int ( temp int)
+0:114          subgroupQuadSwapDiagonal ( global bool)
+0:114            Compare Less Than ( temp bool)
+0:114              direct index ( temp int)
+0:114                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:114                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:114                    Constant:
+0:114                      0 (const int)
+0:114                  Constant:
+0:114                    1 (const int)
+0:114                Constant:
+0:114                  0 (const int)
+0:114              Constant:
+0:114                0 (const int)
+0:115      move second child to first child ( temp 2-component vector of int)
+0:115        vector swizzle ( temp 2-component vector of int)
+0:115          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115              'invocation' ( temp uint)
+0:115            Constant:
+0:115              1 (const int)
+0:115          Sequence
+0:115            Constant:
+0:115              0 (const int)
+0:115            Constant:
+0:115              1 (const int)
+0:115        Convert bool to int ( temp 2-component vector of int)
+0:115          subgroupQuadSwapDiagonal ( global 2-component vector of bool)
+0:115            Compare Less Than ( global 2-component vector of bool)
+0:115              vector swizzle ( temp 2-component vector of int)
+0:115                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:115                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:115                    Constant:
+0:115                      1 (const int)
+0:115                  Constant:
+0:115                    1 (const int)
+0:115                Sequence
+0:115                  Constant:
+0:115                    0 (const int)
+0:115                  Constant:
+0:115                    1 (const int)
+0:115              Constant:
+0:115                0 (const int)
+0:115                0 (const int)
+0:116      move second child to first child ( temp 3-component vector of int)
+0:116        vector swizzle ( temp 3-component vector of int)
+0:116          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116              'invocation' ( temp uint)
+0:116            Constant:
+0:116              1 (const int)
+0:116          Sequence
+0:116            Constant:
+0:116              0 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116            Constant:
+0:116              2 (const int)
+0:116        Convert bool to int ( temp 3-component vector of int)
+0:116          subgroupQuadSwapDiagonal ( global 3-component vector of bool)
+0:116            Compare Less Than ( global 3-component vector of bool)
+0:116              vector swizzle ( temp 3-component vector of int)
+0:116                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:116                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:116                    Constant:
+0:116                      1 (const int)
+0:116                  Constant:
+0:116                    1 (const int)
+0:116                Sequence
+0:116                  Constant:
+0:116                    0 (const int)
+0:116                  Constant:
+0:116                    1 (const int)
+0:116                  Constant:
+0:116                    2 (const int)
+0:116              Constant:
+0:116                0 (const int)
+0:116                0 (const int)
+0:116                0 (const int)
+0:117      move second child to first child ( temp 4-component vector of int)
+0:117        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117            'invocation' ( temp uint)
+0:117          Constant:
+0:117            1 (const int)
+0:117        Convert bool to int ( temp 4-component vector of int)
+0:117          subgroupQuadSwapDiagonal ( global 4-component vector of bool)
+0:117            Compare Less Than ( global 4-component vector of bool)
+0:117              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:117                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:117                  Constant:
+0:117                    1 (const int)
+0:117                Constant:
+0:117                  1 (const int)
+0:117              Constant:
+0:117                0 (const int)
+0:117                0 (const int)
+0:117                0 (const int)
+0:117                0 (const int)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/Test/baseResults/glsl.450.subgroupShuffle.comp.out b/Test/baseResults/glsl.450.subgroupShuffle.comp.out
new file mode 100644
index 0000000..d0384d0
--- /dev/null
+++ b/Test/baseResults/glsl.450.subgroupShuffle.comp.out
@@ -0,0 +1,2101 @@
+glsl.450.subgroupShuffle.comp
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_shuffle
+local_size = (8, 8, 1)
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp uint)
+0:17          'invocation' ( temp uint)
+0:17          mod ( temp uint)
+0:17            add ( temp uint)
+0:17              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      move second child to first child ( temp float)
+0:19        direct index ( temp float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'invocation' ( temp uint)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Constant:
+0:19            0 (const int)
+0:19        subgroupShuffle ( global float)
+0:19          direct index ( temp float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                Constant:
+0:19                  0 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          'invocation' ( temp uint)
+0:20      move second child to first child ( temp 2-component vector of float)
+0:20        vector swizzle ( temp 2-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'invocation' ( temp uint)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20        subgroupShuffle ( global 2-component vector of float)
+0:20          vector swizzle ( temp 2-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                Constant:
+0:20                  1 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20          'invocation' ( temp uint)
+0:21      move second child to first child ( temp 3-component vector of float)
+0:21        vector swizzle ( temp 3-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'invocation' ( temp uint)
+0:21            Constant:
+0:21              0 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21            Constant:
+0:21              2 (const int)
+0:21        subgroupShuffle ( global 3-component vector of float)
+0:21          vector swizzle ( temp 3-component vector of float)
+0:21            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                Constant:
+0:21                  2 (const int)
+0:21              Constant:
+0:21                0 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21              Constant:
+0:21                2 (const int)
+0:21          'invocation' ( temp uint)
+0:22      move second child to first child ( temp 4-component vector of float)
+0:22        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'invocation' ( temp uint)
+0:22          Constant:
+0:22            0 (const int)
+0:22        subgroupShuffle ( global 4-component vector of float)
+0:22          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              Constant:
+0:22                3 (const int)
+0:22            Constant:
+0:22              0 (const int)
+0:22          'invocation' ( temp uint)
+0:24      move second child to first child ( temp int)
+0:24        direct index ( temp int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'invocation' ( temp uint)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:24        subgroupShuffle ( global int)
+0:24          direct index ( temp int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                Constant:
+0:24                  0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:24          'invocation' ( temp uint)
+0:25      move second child to first child ( temp 2-component vector of int)
+0:25        vector swizzle ( temp 2-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'invocation' ( temp uint)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25        subgroupShuffle ( global 2-component vector of int)
+0:25          vector swizzle ( temp 2-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                Constant:
+0:25                  1 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25          'invocation' ( temp uint)
+0:26      move second child to first child ( temp 3-component vector of int)
+0:26        vector swizzle ( temp 3-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'invocation' ( temp uint)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26        subgroupShuffle ( global 3-component vector of int)
+0:26          vector swizzle ( temp 3-component vector of int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                Constant:
+0:26                  2 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26          'invocation' ( temp uint)
+0:27      move second child to first child ( temp 4-component vector of int)
+0:27        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'invocation' ( temp uint)
+0:27          Constant:
+0:27            1 (const int)
+0:27        subgroupShuffle ( global 4-component vector of int)
+0:27          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              Constant:
+0:27                3 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27          'invocation' ( temp uint)
+0:29      move second child to first child ( temp uint)
+0:29        direct index ( temp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'invocation' ( temp uint)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            0 (const int)
+0:29        subgroupShuffle ( global uint)
+0:29          direct index ( temp uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                Constant:
+0:29                  0 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Constant:
+0:29              0 (const int)
+0:29          'invocation' ( temp uint)
+0:30      move second child to first child ( temp 2-component vector of uint)
+0:30        vector swizzle ( temp 2-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'invocation' ( temp uint)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30        subgroupShuffle ( global 2-component vector of uint)
+0:30          vector swizzle ( temp 2-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                Constant:
+0:30                  1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30          'invocation' ( temp uint)
+0:31      move second child to first child ( temp 3-component vector of uint)
+0:31        vector swizzle ( temp 3-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'invocation' ( temp uint)
+0:31            Constant:
+0:31              2 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31        subgroupShuffle ( global 3-component vector of uint)
+0:31          vector swizzle ( temp 3-component vector of uint)
+0:31            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                Constant:
+0:31                  2 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31          'invocation' ( temp uint)
+0:32      move second child to first child ( temp 4-component vector of uint)
+0:32        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'invocation' ( temp uint)
+0:32          Constant:
+0:32            2 (const int)
+0:32        subgroupShuffle ( global 4-component vector of uint)
+0:32          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              Constant:
+0:32                3 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32          'invocation' ( temp uint)
+0:34      move second child to first child ( temp double)
+0:34        direct index ( temp double)
+0:34          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'invocation' ( temp uint)
+0:34            Constant:
+0:34              3 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupShuffle ( global double)
+0:34          direct index ( temp double)
+0:34            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                3 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          'invocation' ( temp uint)
+0:35      move second child to first child ( temp 2-component vector of double)
+0:35        vector swizzle ( temp 2-component vector of double)
+0:35          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'invocation' ( temp uint)
+0:35            Constant:
+0:35              3 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35        subgroupShuffle ( global 2-component vector of double)
+0:35          vector swizzle ( temp 2-component vector of double)
+0:35            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                Constant:
+0:35                  1 (const int)
+0:35              Constant:
+0:35                3 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:35          'invocation' ( temp uint)
+0:36      move second child to first child ( temp 3-component vector of double)
+0:36        vector swizzle ( temp 3-component vector of double)
+0:36          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'invocation' ( temp uint)
+0:36            Constant:
+0:36              3 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36            Constant:
+0:36              2 (const int)
+0:36        subgroupShuffle ( global 3-component vector of double)
+0:36          vector swizzle ( temp 3-component vector of double)
+0:36            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                Constant:
+0:36                  2 (const int)
+0:36              Constant:
+0:36                3 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:36              Constant:
+0:36                2 (const int)
+0:36          'invocation' ( temp uint)
+0:37      move second child to first child ( temp 4-component vector of double)
+0:37        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'invocation' ( temp uint)
+0:37          Constant:
+0:37            3 (const int)
+0:37        subgroupShuffle ( global 4-component vector of double)
+0:37          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              Constant:
+0:37                3 (const int)
+0:37            Constant:
+0:37              3 (const int)
+0:37          'invocation' ( temp uint)
+0:39      move second child to first child ( temp int)
+0:39        direct index ( temp int)
+0:39          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'invocation' ( temp uint)
+0:39            Constant:
+0:39              1 (const int)
+0:39          Constant:
+0:39            0 (const int)
+0:39        Convert bool to int ( temp int)
+0:39          subgroupShuffle ( global bool)
+0:39            Compare Less Than ( temp bool)
+0:39              direct index ( temp int)
+0:39                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                    Constant:
+0:39                      0 (const int)
+0:39                  Constant:
+0:39                    1 (const int)
+0:39                Constant:
+0:39                  0 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            'invocation' ( temp uint)
+0:40      move second child to first child ( temp 2-component vector of int)
+0:40        vector swizzle ( temp 2-component vector of int)
+0:40          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'invocation' ( temp uint)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40        Convert bool to int ( temp 2-component vector of int)
+0:40          subgroupShuffle ( global 2-component vector of bool)
+0:40            Compare Less Than ( global 2-component vector of bool)
+0:40              vector swizzle ( temp 2-component vector of int)
+0:40                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                    Constant:
+0:40                      1 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                Sequence
+0:40                  Constant:
+0:40                    0 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40                0 (const int)
+0:40            'invocation' ( temp uint)
+0:41      move second child to first child ( temp 3-component vector of int)
+0:41        vector swizzle ( temp 3-component vector of int)
+0:41          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'invocation' ( temp uint)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41            Constant:
+0:41              2 (const int)
+0:41        Convert bool to int ( temp 3-component vector of int)
+0:41          subgroupShuffle ( global 3-component vector of bool)
+0:41            Compare Less Than ( global 3-component vector of bool)
+0:41              vector swizzle ( temp 3-component vector of int)
+0:41                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                    Constant:
+0:41                      1 (const int)
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                Sequence
+0:41                  Constant:
+0:41                    0 (const int)
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                  Constant:
+0:41                    2 (const int)
+0:41              Constant:
+0:41                0 (const int)
+0:41                0 (const int)
+0:41                0 (const int)
+0:41            'invocation' ( temp uint)
+0:42      move second child to first child ( temp 4-component vector of int)
+0:42        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'invocation' ( temp uint)
+0:42          Constant:
+0:42            1 (const int)
+0:42        Convert bool to int ( temp 4-component vector of int)
+0:42          subgroupShuffle ( global 4-component vector of bool)
+0:42            Compare Less Than ( global 4-component vector of bool)
+0:42              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  Constant:
+0:42                    1 (const int)
+0:42                Constant:
+0:42                  1 (const int)
+0:42              Constant:
+0:42                0 (const int)
+0:42                0 (const int)
+0:42                0 (const int)
+0:42                0 (const int)
+0:42            'invocation' ( temp uint)
+0:44      move second child to first child ( temp float)
+0:44        direct index ( temp float)
+0:44          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'invocation' ( temp uint)
+0:44            Constant:
+0:44              0 (const int)
+0:44          Constant:
+0:44            0 (const int)
+0:44        subgroupShuffleXor ( global float)
+0:44          direct index ( temp float)
+0:44            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                Constant:
+0:44                  0 (const int)
+0:44              Constant:
+0:44                0 (const int)
+0:44            Constant:
+0:44              0 (const int)
+0:44          'invocation' ( temp uint)
+0:45      move second child to first child ( temp 2-component vector of float)
+0:45        vector swizzle ( temp 2-component vector of float)
+0:45          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'invocation' ( temp uint)
+0:45            Constant:
+0:45              0 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45        subgroupShuffleXor ( global 2-component vector of float)
+0:45          vector swizzle ( temp 2-component vector of float)
+0:45            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                Constant:
+0:45                  1 (const int)
+0:45              Constant:
+0:45                0 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45          'invocation' ( temp uint)
+0:46      move second child to first child ( temp 3-component vector of float)
+0:46        vector swizzle ( temp 3-component vector of float)
+0:46          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'invocation' ( temp uint)
+0:46            Constant:
+0:46              0 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46        subgroupShuffleXor ( global 3-component vector of float)
+0:46          vector swizzle ( temp 3-component vector of float)
+0:46            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                Constant:
+0:46                  2 (const int)
+0:46              Constant:
+0:46                0 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46          'invocation' ( temp uint)
+0:47      move second child to first child ( temp 4-component vector of float)
+0:47        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'invocation' ( temp uint)
+0:47          Constant:
+0:47            0 (const int)
+0:47        subgroupShuffleXor ( global 4-component vector of float)
+0:47          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              Constant:
+0:47                3 (const int)
+0:47            Constant:
+0:47              0 (const int)
+0:47          'invocation' ( temp uint)
+0:49      move second child to first child ( temp int)
+0:49        direct index ( temp int)
+0:49          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'invocation' ( temp uint)
+0:49            Constant:
+0:49              1 (const int)
+0:49          Constant:
+0:49            0 (const int)
+0:49        subgroupShuffleXor ( global int)
+0:49          direct index ( temp int)
+0:49            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                Constant:
+0:49                  0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:49          'invocation' ( temp uint)
+0:50      move second child to first child ( temp 2-component vector of int)
+0:50        vector swizzle ( temp 2-component vector of int)
+0:50          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'invocation' ( temp uint)
+0:50            Constant:
+0:50              1 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50        subgroupShuffleXor ( global 2-component vector of int)
+0:50          vector swizzle ( temp 2-component vector of int)
+0:50            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                Constant:
+0:50                  1 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50          'invocation' ( temp uint)
+0:51      move second child to first child ( temp 3-component vector of int)
+0:51        vector swizzle ( temp 3-component vector of int)
+0:51          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'invocation' ( temp uint)
+0:51            Constant:
+0:51              1 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:51        subgroupShuffleXor ( global 3-component vector of int)
+0:51          vector swizzle ( temp 3-component vector of int)
+0:51            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                Constant:
+0:51                  2 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51              Constant:
+0:51                2 (const int)
+0:51          'invocation' ( temp uint)
+0:52      move second child to first child ( temp 4-component vector of int)
+0:52        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'invocation' ( temp uint)
+0:52          Constant:
+0:52            1 (const int)
+0:52        subgroupShuffleXor ( global 4-component vector of int)
+0:52          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              Constant:
+0:52                3 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52          'invocation' ( temp uint)
+0:54      move second child to first child ( temp uint)
+0:54        direct index ( temp uint)
+0:54          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'invocation' ( temp uint)
+0:54            Constant:
+0:54              2 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupShuffleXor ( global uint)
+0:54          direct index ( temp uint)
+0:54            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                Constant:
+0:54                  0 (const int)
+0:54              Constant:
+0:54                2 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:54          'invocation' ( temp uint)
+0:55      move second child to first child ( temp 2-component vector of uint)
+0:55        vector swizzle ( temp 2-component vector of uint)
+0:55          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'invocation' ( temp uint)
+0:55            Constant:
+0:55              2 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55        subgroupShuffleXor ( global 2-component vector of uint)
+0:55          vector swizzle ( temp 2-component vector of uint)
+0:55            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                Constant:
+0:55                  1 (const int)
+0:55              Constant:
+0:55                2 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55          'invocation' ( temp uint)
+0:56      move second child to first child ( temp 3-component vector of uint)
+0:56        vector swizzle ( temp 3-component vector of uint)
+0:56          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'invocation' ( temp uint)
+0:56            Constant:
+0:56              2 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56            Constant:
+0:56              2 (const int)
+0:56        subgroupShuffleXor ( global 3-component vector of uint)
+0:56          vector swizzle ( temp 3-component vector of uint)
+0:56            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                Constant:
+0:56                  2 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:56          'invocation' ( temp uint)
+0:57      move second child to first child ( temp 4-component vector of uint)
+0:57        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'invocation' ( temp uint)
+0:57          Constant:
+0:57            2 (const int)
+0:57        subgroupShuffleXor ( global 4-component vector of uint)
+0:57          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              Constant:
+0:57                3 (const int)
+0:57            Constant:
+0:57              2 (const int)
+0:57          'invocation' ( temp uint)
+0:59      move second child to first child ( temp double)
+0:59        direct index ( temp double)
+0:59          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'invocation' ( temp uint)
+0:59            Constant:
+0:59              3 (const int)
+0:59          Constant:
+0:59            0 (const int)
+0:59        subgroupShuffleXor ( global double)
+0:59          direct index ( temp double)
+0:59            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                Constant:
+0:59                  0 (const int)
+0:59              Constant:
+0:59                3 (const int)
+0:59            Constant:
+0:59              0 (const int)
+0:59          'invocation' ( temp uint)
+0:60      move second child to first child ( temp 2-component vector of double)
+0:60        vector swizzle ( temp 2-component vector of double)
+0:60          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'invocation' ( temp uint)
+0:60            Constant:
+0:60              3 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60        subgroupShuffleXor ( global 2-component vector of double)
+0:60          vector swizzle ( temp 2-component vector of double)
+0:60            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                Constant:
+0:60                  1 (const int)
+0:60              Constant:
+0:60                3 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60          'invocation' ( temp uint)
+0:61      move second child to first child ( temp 3-component vector of double)
+0:61        vector swizzle ( temp 3-component vector of double)
+0:61          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'invocation' ( temp uint)
+0:61            Constant:
+0:61              3 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61            Constant:
+0:61              2 (const int)
+0:61        subgroupShuffleXor ( global 3-component vector of double)
+0:61          vector swizzle ( temp 3-component vector of double)
+0:61            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                Constant:
+0:61                  2 (const int)
+0:61              Constant:
+0:61                3 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61              Constant:
+0:61                2 (const int)
+0:61          'invocation' ( temp uint)
+0:62      move second child to first child ( temp 4-component vector of double)
+0:62        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'invocation' ( temp uint)
+0:62          Constant:
+0:62            3 (const int)
+0:62        subgroupShuffleXor ( global 4-component vector of double)
+0:62          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              Constant:
+0:62                3 (const int)
+0:62            Constant:
+0:62              3 (const int)
+0:62          'invocation' ( temp uint)
+0:64      move second child to first child ( temp int)
+0:64        direct index ( temp int)
+0:64          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'invocation' ( temp uint)
+0:64            Constant:
+0:64              1 (const int)
+0:64          Constant:
+0:64            0 (const int)
+0:64        Convert bool to int ( temp int)
+0:64          subgroupShuffleXor ( global bool)
+0:64            Compare Less Than ( temp bool)
+0:64              direct index ( temp int)
+0:64                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                    Constant:
+0:64                      0 (const int)
+0:64                  Constant:
+0:64                    1 (const int)
+0:64                Constant:
+0:64                  0 (const int)
+0:64              Constant:
+0:64                0 (const int)
+0:64            'invocation' ( temp uint)
+0:65      move second child to first child ( temp 2-component vector of int)
+0:65        vector swizzle ( temp 2-component vector of int)
+0:65          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'invocation' ( temp uint)
+0:65            Constant:
+0:65              1 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65        Convert bool to int ( temp 2-component vector of int)
+0:65          subgroupShuffleXor ( global 2-component vector of bool)
+0:65            Compare Less Than ( global 2-component vector of bool)
+0:65              vector swizzle ( temp 2-component vector of int)
+0:65                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                    Constant:
+0:65                      1 (const int)
+0:65                  Constant:
+0:65                    1 (const int)
+0:65                Sequence
+0:65                  Constant:
+0:65                    0 (const int)
+0:65                  Constant:
+0:65                    1 (const int)
+0:65              Constant:
+0:65                0 (const int)
+0:65                0 (const int)
+0:65            'invocation' ( temp uint)
+0:66      move second child to first child ( temp 3-component vector of int)
+0:66        vector swizzle ( temp 3-component vector of int)
+0:66          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'invocation' ( temp uint)
+0:66            Constant:
+0:66              1 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66        Convert bool to int ( temp 3-component vector of int)
+0:66          subgroupShuffleXor ( global 3-component vector of bool)
+0:66            Compare Less Than ( global 3-component vector of bool)
+0:66              vector swizzle ( temp 3-component vector of int)
+0:66                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                    Constant:
+0:66                      1 (const int)
+0:66                  Constant:
+0:66                    1 (const int)
+0:66                Sequence
+0:66                  Constant:
+0:66                    0 (const int)
+0:66                  Constant:
+0:66                    1 (const int)
+0:66                  Constant:
+0:66                    2 (const int)
+0:66              Constant:
+0:66                0 (const int)
+0:66                0 (const int)
+0:66                0 (const int)
+0:66            'invocation' ( temp uint)
+0:67      move second child to first child ( temp 4-component vector of int)
+0:67        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'invocation' ( temp uint)
+0:67          Constant:
+0:67            1 (const int)
+0:67        Convert bool to int ( temp 4-component vector of int)
+0:67          subgroupShuffleXor ( global 4-component vector of bool)
+0:67            Compare Less Than ( global 4-component vector of bool)
+0:67              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                  Constant:
+0:67                    1 (const int)
+0:67                Constant:
+0:67                  1 (const int)
+0:67              Constant:
+0:67                0 (const int)
+0:67                0 (const int)
+0:67                0 (const int)
+0:67                0 (const int)
+0:67            'invocation' ( temp uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_shuffle
+local_size = (8, 8, 1)
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp uint)
+0:17          'invocation' ( temp uint)
+0:17          mod ( temp uint)
+0:17            add ( temp uint)
+0:17              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      move second child to first child ( temp float)
+0:19        direct index ( temp float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'invocation' ( temp uint)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Constant:
+0:19            0 (const int)
+0:19        subgroupShuffle ( global float)
+0:19          direct index ( temp float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                Constant:
+0:19                  0 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          'invocation' ( temp uint)
+0:20      move second child to first child ( temp 2-component vector of float)
+0:20        vector swizzle ( temp 2-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'invocation' ( temp uint)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20        subgroupShuffle ( global 2-component vector of float)
+0:20          vector swizzle ( temp 2-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                Constant:
+0:20                  1 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20          'invocation' ( temp uint)
+0:21      move second child to first child ( temp 3-component vector of float)
+0:21        vector swizzle ( temp 3-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'invocation' ( temp uint)
+0:21            Constant:
+0:21              0 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21            Constant:
+0:21              2 (const int)
+0:21        subgroupShuffle ( global 3-component vector of float)
+0:21          vector swizzle ( temp 3-component vector of float)
+0:21            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                Constant:
+0:21                  2 (const int)
+0:21              Constant:
+0:21                0 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21              Constant:
+0:21                2 (const int)
+0:21          'invocation' ( temp uint)
+0:22      move second child to first child ( temp 4-component vector of float)
+0:22        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'invocation' ( temp uint)
+0:22          Constant:
+0:22            0 (const int)
+0:22        subgroupShuffle ( global 4-component vector of float)
+0:22          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              Constant:
+0:22                3 (const int)
+0:22            Constant:
+0:22              0 (const int)
+0:22          'invocation' ( temp uint)
+0:24      move second child to first child ( temp int)
+0:24        direct index ( temp int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'invocation' ( temp uint)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:24        subgroupShuffle ( global int)
+0:24          direct index ( temp int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                Constant:
+0:24                  0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:24          'invocation' ( temp uint)
+0:25      move second child to first child ( temp 2-component vector of int)
+0:25        vector swizzle ( temp 2-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'invocation' ( temp uint)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25        subgroupShuffle ( global 2-component vector of int)
+0:25          vector swizzle ( temp 2-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                Constant:
+0:25                  1 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25          'invocation' ( temp uint)
+0:26      move second child to first child ( temp 3-component vector of int)
+0:26        vector swizzle ( temp 3-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'invocation' ( temp uint)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26        subgroupShuffle ( global 3-component vector of int)
+0:26          vector swizzle ( temp 3-component vector of int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                Constant:
+0:26                  2 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26          'invocation' ( temp uint)
+0:27      move second child to first child ( temp 4-component vector of int)
+0:27        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'invocation' ( temp uint)
+0:27          Constant:
+0:27            1 (const int)
+0:27        subgroupShuffle ( global 4-component vector of int)
+0:27          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              Constant:
+0:27                3 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27          'invocation' ( temp uint)
+0:29      move second child to first child ( temp uint)
+0:29        direct index ( temp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'invocation' ( temp uint)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            0 (const int)
+0:29        subgroupShuffle ( global uint)
+0:29          direct index ( temp uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                Constant:
+0:29                  0 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Constant:
+0:29              0 (const int)
+0:29          'invocation' ( temp uint)
+0:30      move second child to first child ( temp 2-component vector of uint)
+0:30        vector swizzle ( temp 2-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'invocation' ( temp uint)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30        subgroupShuffle ( global 2-component vector of uint)
+0:30          vector swizzle ( temp 2-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                Constant:
+0:30                  1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30          'invocation' ( temp uint)
+0:31      move second child to first child ( temp 3-component vector of uint)
+0:31        vector swizzle ( temp 3-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'invocation' ( temp uint)
+0:31            Constant:
+0:31              2 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31        subgroupShuffle ( global 3-component vector of uint)
+0:31          vector swizzle ( temp 3-component vector of uint)
+0:31            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                Constant:
+0:31                  2 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31          'invocation' ( temp uint)
+0:32      move second child to first child ( temp 4-component vector of uint)
+0:32        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'invocation' ( temp uint)
+0:32          Constant:
+0:32            2 (const int)
+0:32        subgroupShuffle ( global 4-component vector of uint)
+0:32          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              Constant:
+0:32                3 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32          'invocation' ( temp uint)
+0:34      move second child to first child ( temp double)
+0:34        direct index ( temp double)
+0:34          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'invocation' ( temp uint)
+0:34            Constant:
+0:34              3 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupShuffle ( global double)
+0:34          direct index ( temp double)
+0:34            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                3 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          'invocation' ( temp uint)
+0:35      move second child to first child ( temp 2-component vector of double)
+0:35        vector swizzle ( temp 2-component vector of double)
+0:35          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'invocation' ( temp uint)
+0:35            Constant:
+0:35              3 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35        subgroupShuffle ( global 2-component vector of double)
+0:35          vector swizzle ( temp 2-component vector of double)
+0:35            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                Constant:
+0:35                  1 (const int)
+0:35              Constant:
+0:35                3 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:35          'invocation' ( temp uint)
+0:36      move second child to first child ( temp 3-component vector of double)
+0:36        vector swizzle ( temp 3-component vector of double)
+0:36          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'invocation' ( temp uint)
+0:36            Constant:
+0:36              3 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36            Constant:
+0:36              2 (const int)
+0:36        subgroupShuffle ( global 3-component vector of double)
+0:36          vector swizzle ( temp 3-component vector of double)
+0:36            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                Constant:
+0:36                  2 (const int)
+0:36              Constant:
+0:36                3 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:36              Constant:
+0:36                2 (const int)
+0:36          'invocation' ( temp uint)
+0:37      move second child to first child ( temp 4-component vector of double)
+0:37        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'invocation' ( temp uint)
+0:37          Constant:
+0:37            3 (const int)
+0:37        subgroupShuffle ( global 4-component vector of double)
+0:37          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              Constant:
+0:37                3 (const int)
+0:37            Constant:
+0:37              3 (const int)
+0:37          'invocation' ( temp uint)
+0:39      move second child to first child ( temp int)
+0:39        direct index ( temp int)
+0:39          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'invocation' ( temp uint)
+0:39            Constant:
+0:39              1 (const int)
+0:39          Constant:
+0:39            0 (const int)
+0:39        Convert bool to int ( temp int)
+0:39          subgroupShuffle ( global bool)
+0:39            Compare Less Than ( temp bool)
+0:39              direct index ( temp int)
+0:39                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                    Constant:
+0:39                      0 (const int)
+0:39                  Constant:
+0:39                    1 (const int)
+0:39                Constant:
+0:39                  0 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            'invocation' ( temp uint)
+0:40      move second child to first child ( temp 2-component vector of int)
+0:40        vector swizzle ( temp 2-component vector of int)
+0:40          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'invocation' ( temp uint)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40        Convert bool to int ( temp 2-component vector of int)
+0:40          subgroupShuffle ( global 2-component vector of bool)
+0:40            Compare Less Than ( global 2-component vector of bool)
+0:40              vector swizzle ( temp 2-component vector of int)
+0:40                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                    Constant:
+0:40                      1 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                Sequence
+0:40                  Constant:
+0:40                    0 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40                0 (const int)
+0:40            'invocation' ( temp uint)
+0:41      move second child to first child ( temp 3-component vector of int)
+0:41        vector swizzle ( temp 3-component vector of int)
+0:41          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'invocation' ( temp uint)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41            Constant:
+0:41              2 (const int)
+0:41        Convert bool to int ( temp 3-component vector of int)
+0:41          subgroupShuffle ( global 3-component vector of bool)
+0:41            Compare Less Than ( global 3-component vector of bool)
+0:41              vector swizzle ( temp 3-component vector of int)
+0:41                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                    Constant:
+0:41                      1 (const int)
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                Sequence
+0:41                  Constant:
+0:41                    0 (const int)
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                  Constant:
+0:41                    2 (const int)
+0:41              Constant:
+0:41                0 (const int)
+0:41                0 (const int)
+0:41                0 (const int)
+0:41            'invocation' ( temp uint)
+0:42      move second child to first child ( temp 4-component vector of int)
+0:42        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'invocation' ( temp uint)
+0:42          Constant:
+0:42            1 (const int)
+0:42        Convert bool to int ( temp 4-component vector of int)
+0:42          subgroupShuffle ( global 4-component vector of bool)
+0:42            Compare Less Than ( global 4-component vector of bool)
+0:42              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  Constant:
+0:42                    1 (const int)
+0:42                Constant:
+0:42                  1 (const int)
+0:42              Constant:
+0:42                0 (const int)
+0:42                0 (const int)
+0:42                0 (const int)
+0:42                0 (const int)
+0:42            'invocation' ( temp uint)
+0:44      move second child to first child ( temp float)
+0:44        direct index ( temp float)
+0:44          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'invocation' ( temp uint)
+0:44            Constant:
+0:44              0 (const int)
+0:44          Constant:
+0:44            0 (const int)
+0:44        subgroupShuffleXor ( global float)
+0:44          direct index ( temp float)
+0:44            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                Constant:
+0:44                  0 (const int)
+0:44              Constant:
+0:44                0 (const int)
+0:44            Constant:
+0:44              0 (const int)
+0:44          'invocation' ( temp uint)
+0:45      move second child to first child ( temp 2-component vector of float)
+0:45        vector swizzle ( temp 2-component vector of float)
+0:45          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'invocation' ( temp uint)
+0:45            Constant:
+0:45              0 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45        subgroupShuffleXor ( global 2-component vector of float)
+0:45          vector swizzle ( temp 2-component vector of float)
+0:45            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                Constant:
+0:45                  1 (const int)
+0:45              Constant:
+0:45                0 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45          'invocation' ( temp uint)
+0:46      move second child to first child ( temp 3-component vector of float)
+0:46        vector swizzle ( temp 3-component vector of float)
+0:46          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'invocation' ( temp uint)
+0:46            Constant:
+0:46              0 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46        subgroupShuffleXor ( global 3-component vector of float)
+0:46          vector swizzle ( temp 3-component vector of float)
+0:46            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                Constant:
+0:46                  2 (const int)
+0:46              Constant:
+0:46                0 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46          'invocation' ( temp uint)
+0:47      move second child to first child ( temp 4-component vector of float)
+0:47        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'invocation' ( temp uint)
+0:47          Constant:
+0:47            0 (const int)
+0:47        subgroupShuffleXor ( global 4-component vector of float)
+0:47          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              Constant:
+0:47                3 (const int)
+0:47            Constant:
+0:47              0 (const int)
+0:47          'invocation' ( temp uint)
+0:49      move second child to first child ( temp int)
+0:49        direct index ( temp int)
+0:49          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'invocation' ( temp uint)
+0:49            Constant:
+0:49              1 (const int)
+0:49          Constant:
+0:49            0 (const int)
+0:49        subgroupShuffleXor ( global int)
+0:49          direct index ( temp int)
+0:49            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                Constant:
+0:49                  0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:49          'invocation' ( temp uint)
+0:50      move second child to first child ( temp 2-component vector of int)
+0:50        vector swizzle ( temp 2-component vector of int)
+0:50          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'invocation' ( temp uint)
+0:50            Constant:
+0:50              1 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50        subgroupShuffleXor ( global 2-component vector of int)
+0:50          vector swizzle ( temp 2-component vector of int)
+0:50            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                Constant:
+0:50                  1 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50          'invocation' ( temp uint)
+0:51      move second child to first child ( temp 3-component vector of int)
+0:51        vector swizzle ( temp 3-component vector of int)
+0:51          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'invocation' ( temp uint)
+0:51            Constant:
+0:51              1 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:51        subgroupShuffleXor ( global 3-component vector of int)
+0:51          vector swizzle ( temp 3-component vector of int)
+0:51            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                Constant:
+0:51                  2 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51              Constant:
+0:51                2 (const int)
+0:51          'invocation' ( temp uint)
+0:52      move second child to first child ( temp 4-component vector of int)
+0:52        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'invocation' ( temp uint)
+0:52          Constant:
+0:52            1 (const int)
+0:52        subgroupShuffleXor ( global 4-component vector of int)
+0:52          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              Constant:
+0:52                3 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52          'invocation' ( temp uint)
+0:54      move second child to first child ( temp uint)
+0:54        direct index ( temp uint)
+0:54          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'invocation' ( temp uint)
+0:54            Constant:
+0:54              2 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupShuffleXor ( global uint)
+0:54          direct index ( temp uint)
+0:54            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                Constant:
+0:54                  0 (const int)
+0:54              Constant:
+0:54                2 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:54          'invocation' ( temp uint)
+0:55      move second child to first child ( temp 2-component vector of uint)
+0:55        vector swizzle ( temp 2-component vector of uint)
+0:55          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'invocation' ( temp uint)
+0:55            Constant:
+0:55              2 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55        subgroupShuffleXor ( global 2-component vector of uint)
+0:55          vector swizzle ( temp 2-component vector of uint)
+0:55            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                Constant:
+0:55                  1 (const int)
+0:55              Constant:
+0:55                2 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55          'invocation' ( temp uint)
+0:56      move second child to first child ( temp 3-component vector of uint)
+0:56        vector swizzle ( temp 3-component vector of uint)
+0:56          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'invocation' ( temp uint)
+0:56            Constant:
+0:56              2 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56            Constant:
+0:56              2 (const int)
+0:56        subgroupShuffleXor ( global 3-component vector of uint)
+0:56          vector swizzle ( temp 3-component vector of uint)
+0:56            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                Constant:
+0:56                  2 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:56          'invocation' ( temp uint)
+0:57      move second child to first child ( temp 4-component vector of uint)
+0:57        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'invocation' ( temp uint)
+0:57          Constant:
+0:57            2 (const int)
+0:57        subgroupShuffleXor ( global 4-component vector of uint)
+0:57          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              Constant:
+0:57                3 (const int)
+0:57            Constant:
+0:57              2 (const int)
+0:57          'invocation' ( temp uint)
+0:59      move second child to first child ( temp double)
+0:59        direct index ( temp double)
+0:59          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'invocation' ( temp uint)
+0:59            Constant:
+0:59              3 (const int)
+0:59          Constant:
+0:59            0 (const int)
+0:59        subgroupShuffleXor ( global double)
+0:59          direct index ( temp double)
+0:59            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                Constant:
+0:59                  0 (const int)
+0:59              Constant:
+0:59                3 (const int)
+0:59            Constant:
+0:59              0 (const int)
+0:59          'invocation' ( temp uint)
+0:60      move second child to first child ( temp 2-component vector of double)
+0:60        vector swizzle ( temp 2-component vector of double)
+0:60          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'invocation' ( temp uint)
+0:60            Constant:
+0:60              3 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60        subgroupShuffleXor ( global 2-component vector of double)
+0:60          vector swizzle ( temp 2-component vector of double)
+0:60            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                Constant:
+0:60                  1 (const int)
+0:60              Constant:
+0:60                3 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60          'invocation' ( temp uint)
+0:61      move second child to first child ( temp 3-component vector of double)
+0:61        vector swizzle ( temp 3-component vector of double)
+0:61          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'invocation' ( temp uint)
+0:61            Constant:
+0:61              3 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61            Constant:
+0:61              2 (const int)
+0:61        subgroupShuffleXor ( global 3-component vector of double)
+0:61          vector swizzle ( temp 3-component vector of double)
+0:61            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                Constant:
+0:61                  2 (const int)
+0:61              Constant:
+0:61                3 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61              Constant:
+0:61                2 (const int)
+0:61          'invocation' ( temp uint)
+0:62      move second child to first child ( temp 4-component vector of double)
+0:62        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'invocation' ( temp uint)
+0:62          Constant:
+0:62            3 (const int)
+0:62        subgroupShuffleXor ( global 4-component vector of double)
+0:62          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              Constant:
+0:62                3 (const int)
+0:62            Constant:
+0:62              3 (const int)
+0:62          'invocation' ( temp uint)
+0:64      move second child to first child ( temp int)
+0:64        direct index ( temp int)
+0:64          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'invocation' ( temp uint)
+0:64            Constant:
+0:64              1 (const int)
+0:64          Constant:
+0:64            0 (const int)
+0:64        Convert bool to int ( temp int)
+0:64          subgroupShuffleXor ( global bool)
+0:64            Compare Less Than ( temp bool)
+0:64              direct index ( temp int)
+0:64                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                    Constant:
+0:64                      0 (const int)
+0:64                  Constant:
+0:64                    1 (const int)
+0:64                Constant:
+0:64                  0 (const int)
+0:64              Constant:
+0:64                0 (const int)
+0:64            'invocation' ( temp uint)
+0:65      move second child to first child ( temp 2-component vector of int)
+0:65        vector swizzle ( temp 2-component vector of int)
+0:65          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'invocation' ( temp uint)
+0:65            Constant:
+0:65              1 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65        Convert bool to int ( temp 2-component vector of int)
+0:65          subgroupShuffleXor ( global 2-component vector of bool)
+0:65            Compare Less Than ( global 2-component vector of bool)
+0:65              vector swizzle ( temp 2-component vector of int)
+0:65                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                    Constant:
+0:65                      1 (const int)
+0:65                  Constant:
+0:65                    1 (const int)
+0:65                Sequence
+0:65                  Constant:
+0:65                    0 (const int)
+0:65                  Constant:
+0:65                    1 (const int)
+0:65              Constant:
+0:65                0 (const int)
+0:65                0 (const int)
+0:65            'invocation' ( temp uint)
+0:66      move second child to first child ( temp 3-component vector of int)
+0:66        vector swizzle ( temp 3-component vector of int)
+0:66          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'invocation' ( temp uint)
+0:66            Constant:
+0:66              1 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66        Convert bool to int ( temp 3-component vector of int)
+0:66          subgroupShuffleXor ( global 3-component vector of bool)
+0:66            Compare Less Than ( global 3-component vector of bool)
+0:66              vector swizzle ( temp 3-component vector of int)
+0:66                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                    Constant:
+0:66                      1 (const int)
+0:66                  Constant:
+0:66                    1 (const int)
+0:66                Sequence
+0:66                  Constant:
+0:66                    0 (const int)
+0:66                  Constant:
+0:66                    1 (const int)
+0:66                  Constant:
+0:66                    2 (const int)
+0:66              Constant:
+0:66                0 (const int)
+0:66                0 (const int)
+0:66                0 (const int)
+0:66            'invocation' ( temp uint)
+0:67      move second child to first child ( temp 4-component vector of int)
+0:67        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'invocation' ( temp uint)
+0:67          Constant:
+0:67            1 (const int)
+0:67        Convert bool to int ( temp 4-component vector of int)
+0:67          subgroupShuffleXor ( global 4-component vector of bool)
+0:67            Compare Less Than ( global 4-component vector of bool)
+0:67              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                  Constant:
+0:67                    1 (const int)
+0:67                Constant:
+0:67                  1 (const int)
+0:67              Constant:
+0:67                0 (const int)
+0:67                0 (const int)
+0:67                0 (const int)
+0:67                0 (const int)
+0:67            'invocation' ( temp uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/Test/baseResults/glsl.450.subgroupShuffleRelative.comp.out b/Test/baseResults/glsl.450.subgroupShuffleRelative.comp.out
new file mode 100644
index 0000000..0982950
--- /dev/null
+++ b/Test/baseResults/glsl.450.subgroupShuffleRelative.comp.out
@@ -0,0 +1,2101 @@
+glsl.450.subgroupShuffleRelative.comp
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_shuffle_relative
+local_size = (8, 8, 1)
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp uint)
+0:17          'invocation' ( temp uint)
+0:17          mod ( temp uint)
+0:17            add ( temp uint)
+0:17              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      move second child to first child ( temp float)
+0:19        direct index ( temp float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'invocation' ( temp uint)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Constant:
+0:19            0 (const int)
+0:19        subgroupShuffleUp ( global float)
+0:19          direct index ( temp float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                Constant:
+0:19                  0 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          'invocation' ( temp uint)
+0:20      move second child to first child ( temp 2-component vector of float)
+0:20        vector swizzle ( temp 2-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'invocation' ( temp uint)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20        subgroupShuffleUp ( global 2-component vector of float)
+0:20          vector swizzle ( temp 2-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                Constant:
+0:20                  1 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20          'invocation' ( temp uint)
+0:21      move second child to first child ( temp 3-component vector of float)
+0:21        vector swizzle ( temp 3-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'invocation' ( temp uint)
+0:21            Constant:
+0:21              0 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21            Constant:
+0:21              2 (const int)
+0:21        subgroupShuffleUp ( global 3-component vector of float)
+0:21          vector swizzle ( temp 3-component vector of float)
+0:21            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                Constant:
+0:21                  2 (const int)
+0:21              Constant:
+0:21                0 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21              Constant:
+0:21                2 (const int)
+0:21          'invocation' ( temp uint)
+0:22      move second child to first child ( temp 4-component vector of float)
+0:22        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'invocation' ( temp uint)
+0:22          Constant:
+0:22            0 (const int)
+0:22        subgroupShuffleUp ( global 4-component vector of float)
+0:22          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              Constant:
+0:22                3 (const int)
+0:22            Constant:
+0:22              0 (const int)
+0:22          'invocation' ( temp uint)
+0:24      move second child to first child ( temp int)
+0:24        direct index ( temp int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'invocation' ( temp uint)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:24        subgroupShuffleUp ( global int)
+0:24          direct index ( temp int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                Constant:
+0:24                  0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:24          'invocation' ( temp uint)
+0:25      move second child to first child ( temp 2-component vector of int)
+0:25        vector swizzle ( temp 2-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'invocation' ( temp uint)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25        subgroupShuffleUp ( global 2-component vector of int)
+0:25          vector swizzle ( temp 2-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                Constant:
+0:25                  1 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25          'invocation' ( temp uint)
+0:26      move second child to first child ( temp 3-component vector of int)
+0:26        vector swizzle ( temp 3-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'invocation' ( temp uint)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26        subgroupShuffleUp ( global 3-component vector of int)
+0:26          vector swizzle ( temp 3-component vector of int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                Constant:
+0:26                  2 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26          'invocation' ( temp uint)
+0:27      move second child to first child ( temp 4-component vector of int)
+0:27        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'invocation' ( temp uint)
+0:27          Constant:
+0:27            1 (const int)
+0:27        subgroupShuffleUp ( global 4-component vector of int)
+0:27          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              Constant:
+0:27                3 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27          'invocation' ( temp uint)
+0:29      move second child to first child ( temp uint)
+0:29        direct index ( temp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'invocation' ( temp uint)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            0 (const int)
+0:29        subgroupShuffleUp ( global uint)
+0:29          direct index ( temp uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                Constant:
+0:29                  0 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Constant:
+0:29              0 (const int)
+0:29          'invocation' ( temp uint)
+0:30      move second child to first child ( temp 2-component vector of uint)
+0:30        vector swizzle ( temp 2-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'invocation' ( temp uint)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30        subgroupShuffleUp ( global 2-component vector of uint)
+0:30          vector swizzle ( temp 2-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                Constant:
+0:30                  1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30          'invocation' ( temp uint)
+0:31      move second child to first child ( temp 3-component vector of uint)
+0:31        vector swizzle ( temp 3-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'invocation' ( temp uint)
+0:31            Constant:
+0:31              2 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31        subgroupShuffleUp ( global 3-component vector of uint)
+0:31          vector swizzle ( temp 3-component vector of uint)
+0:31            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                Constant:
+0:31                  2 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31          'invocation' ( temp uint)
+0:32      move second child to first child ( temp 4-component vector of uint)
+0:32        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'invocation' ( temp uint)
+0:32          Constant:
+0:32            2 (const int)
+0:32        subgroupShuffleUp ( global 4-component vector of uint)
+0:32          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              Constant:
+0:32                3 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32          'invocation' ( temp uint)
+0:34      move second child to first child ( temp double)
+0:34        direct index ( temp double)
+0:34          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'invocation' ( temp uint)
+0:34            Constant:
+0:34              3 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupShuffleUp ( global double)
+0:34          direct index ( temp double)
+0:34            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                3 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          'invocation' ( temp uint)
+0:35      move second child to first child ( temp 2-component vector of double)
+0:35        vector swizzle ( temp 2-component vector of double)
+0:35          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'invocation' ( temp uint)
+0:35            Constant:
+0:35              3 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35        subgroupShuffleUp ( global 2-component vector of double)
+0:35          vector swizzle ( temp 2-component vector of double)
+0:35            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                Constant:
+0:35                  1 (const int)
+0:35              Constant:
+0:35                3 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:35          'invocation' ( temp uint)
+0:36      move second child to first child ( temp 3-component vector of double)
+0:36        vector swizzle ( temp 3-component vector of double)
+0:36          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'invocation' ( temp uint)
+0:36            Constant:
+0:36              3 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36            Constant:
+0:36              2 (const int)
+0:36        subgroupShuffleUp ( global 3-component vector of double)
+0:36          vector swizzle ( temp 3-component vector of double)
+0:36            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                Constant:
+0:36                  2 (const int)
+0:36              Constant:
+0:36                3 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:36              Constant:
+0:36                2 (const int)
+0:36          'invocation' ( temp uint)
+0:37      move second child to first child ( temp 4-component vector of double)
+0:37        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'invocation' ( temp uint)
+0:37          Constant:
+0:37            3 (const int)
+0:37        subgroupShuffleUp ( global 4-component vector of double)
+0:37          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              Constant:
+0:37                3 (const int)
+0:37            Constant:
+0:37              3 (const int)
+0:37          'invocation' ( temp uint)
+0:39      move second child to first child ( temp int)
+0:39        direct index ( temp int)
+0:39          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'invocation' ( temp uint)
+0:39            Constant:
+0:39              1 (const int)
+0:39          Constant:
+0:39            0 (const int)
+0:39        Convert bool to int ( temp int)
+0:39          subgroupShuffleUp ( global bool)
+0:39            Compare Less Than ( temp bool)
+0:39              direct index ( temp int)
+0:39                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                    Constant:
+0:39                      0 (const int)
+0:39                  Constant:
+0:39                    1 (const int)
+0:39                Constant:
+0:39                  0 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            'invocation' ( temp uint)
+0:40      move second child to first child ( temp 2-component vector of int)
+0:40        vector swizzle ( temp 2-component vector of int)
+0:40          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'invocation' ( temp uint)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40        Convert bool to int ( temp 2-component vector of int)
+0:40          subgroupShuffleUp ( global 2-component vector of bool)
+0:40            Compare Less Than ( global 2-component vector of bool)
+0:40              vector swizzle ( temp 2-component vector of int)
+0:40                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                    Constant:
+0:40                      1 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                Sequence
+0:40                  Constant:
+0:40                    0 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40                0 (const int)
+0:40            'invocation' ( temp uint)
+0:41      move second child to first child ( temp 3-component vector of int)
+0:41        vector swizzle ( temp 3-component vector of int)
+0:41          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'invocation' ( temp uint)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41            Constant:
+0:41              2 (const int)
+0:41        Convert bool to int ( temp 3-component vector of int)
+0:41          subgroupShuffleUp ( global 3-component vector of bool)
+0:41            Compare Less Than ( global 3-component vector of bool)
+0:41              vector swizzle ( temp 3-component vector of int)
+0:41                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                    Constant:
+0:41                      1 (const int)
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                Sequence
+0:41                  Constant:
+0:41                    0 (const int)
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                  Constant:
+0:41                    2 (const int)
+0:41              Constant:
+0:41                0 (const int)
+0:41                0 (const int)
+0:41                0 (const int)
+0:41            'invocation' ( temp uint)
+0:42      move second child to first child ( temp 4-component vector of int)
+0:42        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'invocation' ( temp uint)
+0:42          Constant:
+0:42            1 (const int)
+0:42        Convert bool to int ( temp 4-component vector of int)
+0:42          subgroupShuffleUp ( global 4-component vector of bool)
+0:42            Compare Less Than ( global 4-component vector of bool)
+0:42              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  Constant:
+0:42                    1 (const int)
+0:42                Constant:
+0:42                  1 (const int)
+0:42              Constant:
+0:42                0 (const int)
+0:42                0 (const int)
+0:42                0 (const int)
+0:42                0 (const int)
+0:42            'invocation' ( temp uint)
+0:44      move second child to first child ( temp float)
+0:44        direct index ( temp float)
+0:44          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'invocation' ( temp uint)
+0:44            Constant:
+0:44              0 (const int)
+0:44          Constant:
+0:44            0 (const int)
+0:44        subgroupShuffleDown ( global float)
+0:44          direct index ( temp float)
+0:44            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                Constant:
+0:44                  0 (const int)
+0:44              Constant:
+0:44                0 (const int)
+0:44            Constant:
+0:44              0 (const int)
+0:44          'invocation' ( temp uint)
+0:45      move second child to first child ( temp 2-component vector of float)
+0:45        vector swizzle ( temp 2-component vector of float)
+0:45          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'invocation' ( temp uint)
+0:45            Constant:
+0:45              0 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45        subgroupShuffleDown ( global 2-component vector of float)
+0:45          vector swizzle ( temp 2-component vector of float)
+0:45            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                Constant:
+0:45                  1 (const int)
+0:45              Constant:
+0:45                0 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45          'invocation' ( temp uint)
+0:46      move second child to first child ( temp 3-component vector of float)
+0:46        vector swizzle ( temp 3-component vector of float)
+0:46          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'invocation' ( temp uint)
+0:46            Constant:
+0:46              0 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46        subgroupShuffleDown ( global 3-component vector of float)
+0:46          vector swizzle ( temp 3-component vector of float)
+0:46            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                Constant:
+0:46                  2 (const int)
+0:46              Constant:
+0:46                0 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46          'invocation' ( temp uint)
+0:47      move second child to first child ( temp 4-component vector of float)
+0:47        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'invocation' ( temp uint)
+0:47          Constant:
+0:47            0 (const int)
+0:47        subgroupShuffleDown ( global 4-component vector of float)
+0:47          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              Constant:
+0:47                3 (const int)
+0:47            Constant:
+0:47              0 (const int)
+0:47          'invocation' ( temp uint)
+0:49      move second child to first child ( temp int)
+0:49        direct index ( temp int)
+0:49          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'invocation' ( temp uint)
+0:49            Constant:
+0:49              1 (const int)
+0:49          Constant:
+0:49            0 (const int)
+0:49        subgroupShuffleDown ( global int)
+0:49          direct index ( temp int)
+0:49            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                Constant:
+0:49                  0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:49          'invocation' ( temp uint)
+0:50      move second child to first child ( temp 2-component vector of int)
+0:50        vector swizzle ( temp 2-component vector of int)
+0:50          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'invocation' ( temp uint)
+0:50            Constant:
+0:50              1 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50        subgroupShuffleDown ( global 2-component vector of int)
+0:50          vector swizzle ( temp 2-component vector of int)
+0:50            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                Constant:
+0:50                  1 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50          'invocation' ( temp uint)
+0:51      move second child to first child ( temp 3-component vector of int)
+0:51        vector swizzle ( temp 3-component vector of int)
+0:51          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'invocation' ( temp uint)
+0:51            Constant:
+0:51              1 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:51        subgroupShuffleDown ( global 3-component vector of int)
+0:51          vector swizzle ( temp 3-component vector of int)
+0:51            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                Constant:
+0:51                  2 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51              Constant:
+0:51                2 (const int)
+0:51          'invocation' ( temp uint)
+0:52      move second child to first child ( temp 4-component vector of int)
+0:52        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'invocation' ( temp uint)
+0:52          Constant:
+0:52            1 (const int)
+0:52        subgroupShuffleDown ( global 4-component vector of int)
+0:52          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              Constant:
+0:52                3 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52          'invocation' ( temp uint)
+0:54      move second child to first child ( temp uint)
+0:54        direct index ( temp uint)
+0:54          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'invocation' ( temp uint)
+0:54            Constant:
+0:54              2 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupShuffleDown ( global uint)
+0:54          direct index ( temp uint)
+0:54            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                Constant:
+0:54                  0 (const int)
+0:54              Constant:
+0:54                2 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:54          'invocation' ( temp uint)
+0:55      move second child to first child ( temp 2-component vector of uint)
+0:55        vector swizzle ( temp 2-component vector of uint)
+0:55          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'invocation' ( temp uint)
+0:55            Constant:
+0:55              2 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55        subgroupShuffleDown ( global 2-component vector of uint)
+0:55          vector swizzle ( temp 2-component vector of uint)
+0:55            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                Constant:
+0:55                  1 (const int)
+0:55              Constant:
+0:55                2 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55          'invocation' ( temp uint)
+0:56      move second child to first child ( temp 3-component vector of uint)
+0:56        vector swizzle ( temp 3-component vector of uint)
+0:56          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'invocation' ( temp uint)
+0:56            Constant:
+0:56              2 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56            Constant:
+0:56              2 (const int)
+0:56        subgroupShuffleDown ( global 3-component vector of uint)
+0:56          vector swizzle ( temp 3-component vector of uint)
+0:56            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                Constant:
+0:56                  2 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:56          'invocation' ( temp uint)
+0:57      move second child to first child ( temp 4-component vector of uint)
+0:57        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'invocation' ( temp uint)
+0:57          Constant:
+0:57            2 (const int)
+0:57        subgroupShuffleDown ( global 4-component vector of uint)
+0:57          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              Constant:
+0:57                3 (const int)
+0:57            Constant:
+0:57              2 (const int)
+0:57          'invocation' ( temp uint)
+0:59      move second child to first child ( temp double)
+0:59        direct index ( temp double)
+0:59          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'invocation' ( temp uint)
+0:59            Constant:
+0:59              3 (const int)
+0:59          Constant:
+0:59            0 (const int)
+0:59        subgroupShuffleDown ( global double)
+0:59          direct index ( temp double)
+0:59            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                Constant:
+0:59                  0 (const int)
+0:59              Constant:
+0:59                3 (const int)
+0:59            Constant:
+0:59              0 (const int)
+0:59          'invocation' ( temp uint)
+0:60      move second child to first child ( temp 2-component vector of double)
+0:60        vector swizzle ( temp 2-component vector of double)
+0:60          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'invocation' ( temp uint)
+0:60            Constant:
+0:60              3 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60        subgroupShuffleDown ( global 2-component vector of double)
+0:60          vector swizzle ( temp 2-component vector of double)
+0:60            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                Constant:
+0:60                  1 (const int)
+0:60              Constant:
+0:60                3 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60          'invocation' ( temp uint)
+0:61      move second child to first child ( temp 3-component vector of double)
+0:61        vector swizzle ( temp 3-component vector of double)
+0:61          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'invocation' ( temp uint)
+0:61            Constant:
+0:61              3 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61            Constant:
+0:61              2 (const int)
+0:61        subgroupShuffleDown ( global 3-component vector of double)
+0:61          vector swizzle ( temp 3-component vector of double)
+0:61            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                Constant:
+0:61                  2 (const int)
+0:61              Constant:
+0:61                3 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61              Constant:
+0:61                2 (const int)
+0:61          'invocation' ( temp uint)
+0:62      move second child to first child ( temp 4-component vector of double)
+0:62        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'invocation' ( temp uint)
+0:62          Constant:
+0:62            3 (const int)
+0:62        subgroupShuffleDown ( global 4-component vector of double)
+0:62          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              Constant:
+0:62                3 (const int)
+0:62            Constant:
+0:62              3 (const int)
+0:62          'invocation' ( temp uint)
+0:64      move second child to first child ( temp int)
+0:64        direct index ( temp int)
+0:64          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'invocation' ( temp uint)
+0:64            Constant:
+0:64              1 (const int)
+0:64          Constant:
+0:64            0 (const int)
+0:64        Convert bool to int ( temp int)
+0:64          subgroupShuffleDown ( global bool)
+0:64            Compare Less Than ( temp bool)
+0:64              direct index ( temp int)
+0:64                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                    Constant:
+0:64                      0 (const int)
+0:64                  Constant:
+0:64                    1 (const int)
+0:64                Constant:
+0:64                  0 (const int)
+0:64              Constant:
+0:64                0 (const int)
+0:64            'invocation' ( temp uint)
+0:65      move second child to first child ( temp 2-component vector of int)
+0:65        vector swizzle ( temp 2-component vector of int)
+0:65          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'invocation' ( temp uint)
+0:65            Constant:
+0:65              1 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65        Convert bool to int ( temp 2-component vector of int)
+0:65          subgroupShuffleDown ( global 2-component vector of bool)
+0:65            Compare Less Than ( global 2-component vector of bool)
+0:65              vector swizzle ( temp 2-component vector of int)
+0:65                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                    Constant:
+0:65                      1 (const int)
+0:65                  Constant:
+0:65                    1 (const int)
+0:65                Sequence
+0:65                  Constant:
+0:65                    0 (const int)
+0:65                  Constant:
+0:65                    1 (const int)
+0:65              Constant:
+0:65                0 (const int)
+0:65                0 (const int)
+0:65            'invocation' ( temp uint)
+0:66      move second child to first child ( temp 3-component vector of int)
+0:66        vector swizzle ( temp 3-component vector of int)
+0:66          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'invocation' ( temp uint)
+0:66            Constant:
+0:66              1 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66        Convert bool to int ( temp 3-component vector of int)
+0:66          subgroupShuffleDown ( global 3-component vector of bool)
+0:66            Compare Less Than ( global 3-component vector of bool)
+0:66              vector swizzle ( temp 3-component vector of int)
+0:66                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                    Constant:
+0:66                      1 (const int)
+0:66                  Constant:
+0:66                    1 (const int)
+0:66                Sequence
+0:66                  Constant:
+0:66                    0 (const int)
+0:66                  Constant:
+0:66                    1 (const int)
+0:66                  Constant:
+0:66                    2 (const int)
+0:66              Constant:
+0:66                0 (const int)
+0:66                0 (const int)
+0:66                0 (const int)
+0:66            'invocation' ( temp uint)
+0:67      move second child to first child ( temp 4-component vector of int)
+0:67        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'invocation' ( temp uint)
+0:67          Constant:
+0:67            1 (const int)
+0:67        Convert bool to int ( temp 4-component vector of int)
+0:67          subgroupShuffleDown ( global 4-component vector of bool)
+0:67            Compare Less Than ( global 4-component vector of bool)
+0:67              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                  Constant:
+0:67                    1 (const int)
+0:67                Constant:
+0:67                  1 (const int)
+0:67              Constant:
+0:67                0 (const int)
+0:67                0 (const int)
+0:67                0 (const int)
+0:67                0 (const int)
+0:67            'invocation' ( temp uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_shuffle_relative
+local_size = (8, 8, 1)
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp uint)
+0:17          'invocation' ( temp uint)
+0:17          mod ( temp uint)
+0:17            add ( temp uint)
+0:17              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      move second child to first child ( temp float)
+0:19        direct index ( temp float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19              'invocation' ( temp uint)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Constant:
+0:19            0 (const int)
+0:19        subgroupShuffleUp ( global float)
+0:19          direct index ( temp float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:19                Constant:
+0:19                  0 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          'invocation' ( temp uint)
+0:20      move second child to first child ( temp 2-component vector of float)
+0:20        vector swizzle ( temp 2-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20              'invocation' ( temp uint)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20        subgroupShuffleUp ( global 2-component vector of float)
+0:20          vector swizzle ( temp 2-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:20                Constant:
+0:20                  1 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20          'invocation' ( temp uint)
+0:21      move second child to first child ( temp 3-component vector of float)
+0:21        vector swizzle ( temp 3-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21              'invocation' ( temp uint)
+0:21            Constant:
+0:21              0 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21            Constant:
+0:21              2 (const int)
+0:21        subgroupShuffleUp ( global 3-component vector of float)
+0:21          vector swizzle ( temp 3-component vector of float)
+0:21            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:21                Constant:
+0:21                  2 (const int)
+0:21              Constant:
+0:21                0 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21              Constant:
+0:21                2 (const int)
+0:21          'invocation' ( temp uint)
+0:22      move second child to first child ( temp 4-component vector of float)
+0:22        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22            'invocation' ( temp uint)
+0:22          Constant:
+0:22            0 (const int)
+0:22        subgroupShuffleUp ( global 4-component vector of float)
+0:22          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:22              Constant:
+0:22                3 (const int)
+0:22            Constant:
+0:22              0 (const int)
+0:22          'invocation' ( temp uint)
+0:24      move second child to first child ( temp int)
+0:24        direct index ( temp int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'invocation' ( temp uint)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:24        subgroupShuffleUp ( global int)
+0:24          direct index ( temp int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                Constant:
+0:24                  0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:24          'invocation' ( temp uint)
+0:25      move second child to first child ( temp 2-component vector of int)
+0:25        vector swizzle ( temp 2-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'invocation' ( temp uint)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25        subgroupShuffleUp ( global 2-component vector of int)
+0:25          vector swizzle ( temp 2-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                Constant:
+0:25                  1 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25          'invocation' ( temp uint)
+0:26      move second child to first child ( temp 3-component vector of int)
+0:26        vector swizzle ( temp 3-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'invocation' ( temp uint)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26        subgroupShuffleUp ( global 3-component vector of int)
+0:26          vector swizzle ( temp 3-component vector of int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                Constant:
+0:26                  2 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26          'invocation' ( temp uint)
+0:27      move second child to first child ( temp 4-component vector of int)
+0:27        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'invocation' ( temp uint)
+0:27          Constant:
+0:27            1 (const int)
+0:27        subgroupShuffleUp ( global 4-component vector of int)
+0:27          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              Constant:
+0:27                3 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27          'invocation' ( temp uint)
+0:29      move second child to first child ( temp uint)
+0:29        direct index ( temp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'invocation' ( temp uint)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            0 (const int)
+0:29        subgroupShuffleUp ( global uint)
+0:29          direct index ( temp uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                Constant:
+0:29                  0 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Constant:
+0:29              0 (const int)
+0:29          'invocation' ( temp uint)
+0:30      move second child to first child ( temp 2-component vector of uint)
+0:30        vector swizzle ( temp 2-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'invocation' ( temp uint)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30        subgroupShuffleUp ( global 2-component vector of uint)
+0:30          vector swizzle ( temp 2-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                Constant:
+0:30                  1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30          'invocation' ( temp uint)
+0:31      move second child to first child ( temp 3-component vector of uint)
+0:31        vector swizzle ( temp 3-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'invocation' ( temp uint)
+0:31            Constant:
+0:31              2 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31        subgroupShuffleUp ( global 3-component vector of uint)
+0:31          vector swizzle ( temp 3-component vector of uint)
+0:31            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                Constant:
+0:31                  2 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31          'invocation' ( temp uint)
+0:32      move second child to first child ( temp 4-component vector of uint)
+0:32        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'invocation' ( temp uint)
+0:32          Constant:
+0:32            2 (const int)
+0:32        subgroupShuffleUp ( global 4-component vector of uint)
+0:32          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              Constant:
+0:32                3 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32          'invocation' ( temp uint)
+0:34      move second child to first child ( temp double)
+0:34        direct index ( temp double)
+0:34          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'invocation' ( temp uint)
+0:34            Constant:
+0:34              3 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupShuffleUp ( global double)
+0:34          direct index ( temp double)
+0:34            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                3 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          'invocation' ( temp uint)
+0:35      move second child to first child ( temp 2-component vector of double)
+0:35        vector swizzle ( temp 2-component vector of double)
+0:35          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'invocation' ( temp uint)
+0:35            Constant:
+0:35              3 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35        subgroupShuffleUp ( global 2-component vector of double)
+0:35          vector swizzle ( temp 2-component vector of double)
+0:35            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                Constant:
+0:35                  1 (const int)
+0:35              Constant:
+0:35                3 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:35          'invocation' ( temp uint)
+0:36      move second child to first child ( temp 3-component vector of double)
+0:36        vector swizzle ( temp 3-component vector of double)
+0:36          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'invocation' ( temp uint)
+0:36            Constant:
+0:36              3 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36            Constant:
+0:36              2 (const int)
+0:36        subgroupShuffleUp ( global 3-component vector of double)
+0:36          vector swizzle ( temp 3-component vector of double)
+0:36            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                Constant:
+0:36                  2 (const int)
+0:36              Constant:
+0:36                3 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:36              Constant:
+0:36                2 (const int)
+0:36          'invocation' ( temp uint)
+0:37      move second child to first child ( temp 4-component vector of double)
+0:37        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'invocation' ( temp uint)
+0:37          Constant:
+0:37            3 (const int)
+0:37        subgroupShuffleUp ( global 4-component vector of double)
+0:37          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:37            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              Constant:
+0:37                3 (const int)
+0:37            Constant:
+0:37              3 (const int)
+0:37          'invocation' ( temp uint)
+0:39      move second child to first child ( temp int)
+0:39        direct index ( temp int)
+0:39          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'invocation' ( temp uint)
+0:39            Constant:
+0:39              1 (const int)
+0:39          Constant:
+0:39            0 (const int)
+0:39        Convert bool to int ( temp int)
+0:39          subgroupShuffleUp ( global bool)
+0:39            Compare Less Than ( temp bool)
+0:39              direct index ( temp int)
+0:39                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:39                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                    Constant:
+0:39                      0 (const int)
+0:39                  Constant:
+0:39                    1 (const int)
+0:39                Constant:
+0:39                  0 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            'invocation' ( temp uint)
+0:40      move second child to first child ( temp 2-component vector of int)
+0:40        vector swizzle ( temp 2-component vector of int)
+0:40          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'invocation' ( temp uint)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40        Convert bool to int ( temp 2-component vector of int)
+0:40          subgroupShuffleUp ( global 2-component vector of bool)
+0:40            Compare Less Than ( global 2-component vector of bool)
+0:40              vector swizzle ( temp 2-component vector of int)
+0:40                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:40                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                    Constant:
+0:40                      1 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                Sequence
+0:40                  Constant:
+0:40                    0 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40                0 (const int)
+0:40            'invocation' ( temp uint)
+0:41      move second child to first child ( temp 3-component vector of int)
+0:41        vector swizzle ( temp 3-component vector of int)
+0:41          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'invocation' ( temp uint)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41            Constant:
+0:41              2 (const int)
+0:41        Convert bool to int ( temp 3-component vector of int)
+0:41          subgroupShuffleUp ( global 3-component vector of bool)
+0:41            Compare Less Than ( global 3-component vector of bool)
+0:41              vector swizzle ( temp 3-component vector of int)
+0:41                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:41                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                    Constant:
+0:41                      1 (const int)
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                Sequence
+0:41                  Constant:
+0:41                    0 (const int)
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                  Constant:
+0:41                    2 (const int)
+0:41              Constant:
+0:41                0 (const int)
+0:41                0 (const int)
+0:41                0 (const int)
+0:41            'invocation' ( temp uint)
+0:42      move second child to first child ( temp 4-component vector of int)
+0:42        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'invocation' ( temp uint)
+0:42          Constant:
+0:42            1 (const int)
+0:42        Convert bool to int ( temp 4-component vector of int)
+0:42          subgroupShuffleUp ( global 4-component vector of bool)
+0:42            Compare Less Than ( global 4-component vector of bool)
+0:42              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:42                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42                  Constant:
+0:42                    1 (const int)
+0:42                Constant:
+0:42                  1 (const int)
+0:42              Constant:
+0:42                0 (const int)
+0:42                0 (const int)
+0:42                0 (const int)
+0:42                0 (const int)
+0:42            'invocation' ( temp uint)
+0:44      move second child to first child ( temp float)
+0:44        direct index ( temp float)
+0:44          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'invocation' ( temp uint)
+0:44            Constant:
+0:44              0 (const int)
+0:44          Constant:
+0:44            0 (const int)
+0:44        subgroupShuffleDown ( global float)
+0:44          direct index ( temp float)
+0:44            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                Constant:
+0:44                  0 (const int)
+0:44              Constant:
+0:44                0 (const int)
+0:44            Constant:
+0:44              0 (const int)
+0:44          'invocation' ( temp uint)
+0:45      move second child to first child ( temp 2-component vector of float)
+0:45        vector swizzle ( temp 2-component vector of float)
+0:45          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'invocation' ( temp uint)
+0:45            Constant:
+0:45              0 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45        subgroupShuffleDown ( global 2-component vector of float)
+0:45          vector swizzle ( temp 2-component vector of float)
+0:45            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                Constant:
+0:45                  1 (const int)
+0:45              Constant:
+0:45                0 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45          'invocation' ( temp uint)
+0:46      move second child to first child ( temp 3-component vector of float)
+0:46        vector swizzle ( temp 3-component vector of float)
+0:46          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'invocation' ( temp uint)
+0:46            Constant:
+0:46              0 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46        subgroupShuffleDown ( global 3-component vector of float)
+0:46          vector swizzle ( temp 3-component vector of float)
+0:46            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:46              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                Constant:
+0:46                  2 (const int)
+0:46              Constant:
+0:46                0 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46          'invocation' ( temp uint)
+0:47      move second child to first child ( temp 4-component vector of float)
+0:47        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'invocation' ( temp uint)
+0:47          Constant:
+0:47            0 (const int)
+0:47        subgroupShuffleDown ( global 4-component vector of float)
+0:47          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:47            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47              Constant:
+0:47                3 (const int)
+0:47            Constant:
+0:47              0 (const int)
+0:47          'invocation' ( temp uint)
+0:49      move second child to first child ( temp int)
+0:49        direct index ( temp int)
+0:49          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'invocation' ( temp uint)
+0:49            Constant:
+0:49              1 (const int)
+0:49          Constant:
+0:49            0 (const int)
+0:49        subgroupShuffleDown ( global int)
+0:49          direct index ( temp int)
+0:49            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                Constant:
+0:49                  0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:49          'invocation' ( temp uint)
+0:50      move second child to first child ( temp 2-component vector of int)
+0:50        vector swizzle ( temp 2-component vector of int)
+0:50          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'invocation' ( temp uint)
+0:50            Constant:
+0:50              1 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50        subgroupShuffleDown ( global 2-component vector of int)
+0:50          vector swizzle ( temp 2-component vector of int)
+0:50            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                Constant:
+0:50                  1 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50          'invocation' ( temp uint)
+0:51      move second child to first child ( temp 3-component vector of int)
+0:51        vector swizzle ( temp 3-component vector of int)
+0:51          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'invocation' ( temp uint)
+0:51            Constant:
+0:51              1 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:51        subgroupShuffleDown ( global 3-component vector of int)
+0:51          vector swizzle ( temp 3-component vector of int)
+0:51            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                Constant:
+0:51                  2 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51              Constant:
+0:51                2 (const int)
+0:51          'invocation' ( temp uint)
+0:52      move second child to first child ( temp 4-component vector of int)
+0:52        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'invocation' ( temp uint)
+0:52          Constant:
+0:52            1 (const int)
+0:52        subgroupShuffleDown ( global 4-component vector of int)
+0:52          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:52            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              Constant:
+0:52                3 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52          'invocation' ( temp uint)
+0:54      move second child to first child ( temp uint)
+0:54        direct index ( temp uint)
+0:54          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'invocation' ( temp uint)
+0:54            Constant:
+0:54              2 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupShuffleDown ( global uint)
+0:54          direct index ( temp uint)
+0:54            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                Constant:
+0:54                  0 (const int)
+0:54              Constant:
+0:54                2 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:54          'invocation' ( temp uint)
+0:55      move second child to first child ( temp 2-component vector of uint)
+0:55        vector swizzle ( temp 2-component vector of uint)
+0:55          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'invocation' ( temp uint)
+0:55            Constant:
+0:55              2 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55        subgroupShuffleDown ( global 2-component vector of uint)
+0:55          vector swizzle ( temp 2-component vector of uint)
+0:55            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                Constant:
+0:55                  1 (const int)
+0:55              Constant:
+0:55                2 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55          'invocation' ( temp uint)
+0:56      move second child to first child ( temp 3-component vector of uint)
+0:56        vector swizzle ( temp 3-component vector of uint)
+0:56          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'invocation' ( temp uint)
+0:56            Constant:
+0:56              2 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56            Constant:
+0:56              2 (const int)
+0:56        subgroupShuffleDown ( global 3-component vector of uint)
+0:56          vector swizzle ( temp 3-component vector of uint)
+0:56            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:56              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                Constant:
+0:56                  2 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:56              Constant:
+0:56                2 (const int)
+0:56          'invocation' ( temp uint)
+0:57      move second child to first child ( temp 4-component vector of uint)
+0:57        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'invocation' ( temp uint)
+0:57          Constant:
+0:57            2 (const int)
+0:57        subgroupShuffleDown ( global 4-component vector of uint)
+0:57          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:57            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              Constant:
+0:57                3 (const int)
+0:57            Constant:
+0:57              2 (const int)
+0:57          'invocation' ( temp uint)
+0:59      move second child to first child ( temp double)
+0:59        direct index ( temp double)
+0:59          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'invocation' ( temp uint)
+0:59            Constant:
+0:59              3 (const int)
+0:59          Constant:
+0:59            0 (const int)
+0:59        subgroupShuffleDown ( global double)
+0:59          direct index ( temp double)
+0:59            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                Constant:
+0:59                  0 (const int)
+0:59              Constant:
+0:59                3 (const int)
+0:59            Constant:
+0:59              0 (const int)
+0:59          'invocation' ( temp uint)
+0:60      move second child to first child ( temp 2-component vector of double)
+0:60        vector swizzle ( temp 2-component vector of double)
+0:60          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'invocation' ( temp uint)
+0:60            Constant:
+0:60              3 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60        subgroupShuffleDown ( global 2-component vector of double)
+0:60          vector swizzle ( temp 2-component vector of double)
+0:60            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                Constant:
+0:60                  1 (const int)
+0:60              Constant:
+0:60                3 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60          'invocation' ( temp uint)
+0:61      move second child to first child ( temp 3-component vector of double)
+0:61        vector swizzle ( temp 3-component vector of double)
+0:61          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'invocation' ( temp uint)
+0:61            Constant:
+0:61              3 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61            Constant:
+0:61              2 (const int)
+0:61        subgroupShuffleDown ( global 3-component vector of double)
+0:61          vector swizzle ( temp 3-component vector of double)
+0:61            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:61              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                Constant:
+0:61                  2 (const int)
+0:61              Constant:
+0:61                3 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61              Constant:
+0:61                2 (const int)
+0:61          'invocation' ( temp uint)
+0:62      move second child to first child ( temp 4-component vector of double)
+0:62        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'invocation' ( temp uint)
+0:62          Constant:
+0:62            3 (const int)
+0:62        subgroupShuffleDown ( global 4-component vector of double)
+0:62          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:62            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              Constant:
+0:62                3 (const int)
+0:62            Constant:
+0:62              3 (const int)
+0:62          'invocation' ( temp uint)
+0:64      move second child to first child ( temp int)
+0:64        direct index ( temp int)
+0:64          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'invocation' ( temp uint)
+0:64            Constant:
+0:64              1 (const int)
+0:64          Constant:
+0:64            0 (const int)
+0:64        Convert bool to int ( temp int)
+0:64          subgroupShuffleDown ( global bool)
+0:64            Compare Less Than ( temp bool)
+0:64              direct index ( temp int)
+0:64                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:64                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                    Constant:
+0:64                      0 (const int)
+0:64                  Constant:
+0:64                    1 (const int)
+0:64                Constant:
+0:64                  0 (const int)
+0:64              Constant:
+0:64                0 (const int)
+0:64            'invocation' ( temp uint)
+0:65      move second child to first child ( temp 2-component vector of int)
+0:65        vector swizzle ( temp 2-component vector of int)
+0:65          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'invocation' ( temp uint)
+0:65            Constant:
+0:65              1 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65        Convert bool to int ( temp 2-component vector of int)
+0:65          subgroupShuffleDown ( global 2-component vector of bool)
+0:65            Compare Less Than ( global 2-component vector of bool)
+0:65              vector swizzle ( temp 2-component vector of int)
+0:65                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:65                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                    Constant:
+0:65                      1 (const int)
+0:65                  Constant:
+0:65                    1 (const int)
+0:65                Sequence
+0:65                  Constant:
+0:65                    0 (const int)
+0:65                  Constant:
+0:65                    1 (const int)
+0:65              Constant:
+0:65                0 (const int)
+0:65                0 (const int)
+0:65            'invocation' ( temp uint)
+0:66      move second child to first child ( temp 3-component vector of int)
+0:66        vector swizzle ( temp 3-component vector of int)
+0:66          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'invocation' ( temp uint)
+0:66            Constant:
+0:66              1 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66        Convert bool to int ( temp 3-component vector of int)
+0:66          subgroupShuffleDown ( global 3-component vector of bool)
+0:66            Compare Less Than ( global 3-component vector of bool)
+0:66              vector swizzle ( temp 3-component vector of int)
+0:66                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:66                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                    Constant:
+0:66                      1 (const int)
+0:66                  Constant:
+0:66                    1 (const int)
+0:66                Sequence
+0:66                  Constant:
+0:66                    0 (const int)
+0:66                  Constant:
+0:66                    1 (const int)
+0:66                  Constant:
+0:66                    2 (const int)
+0:66              Constant:
+0:66                0 (const int)
+0:66                0 (const int)
+0:66                0 (const int)
+0:66            'invocation' ( temp uint)
+0:67      move second child to first child ( temp 4-component vector of int)
+0:67        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'invocation' ( temp uint)
+0:67          Constant:
+0:67            1 (const int)
+0:67        Convert bool to int ( temp 4-component vector of int)
+0:67          subgroupShuffleDown ( global 4-component vector of bool)
+0:67            Compare Less Than ( global 4-component vector of bool)
+0:67              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:67                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67                  Constant:
+0:67                    1 (const int)
+0:67                Constant:
+0:67                  1 (const int)
+0:67              Constant:
+0:67                0 (const int)
+0:67                0 (const int)
+0:67                0 (const int)
+0:67                0 (const int)
+0:67            'invocation' ( temp uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/Test/baseResults/glsl.450.subgroupVote.comp.out b/Test/baseResults/glsl.450.subgroupVote.comp.out
new file mode 100644
index 0000000..2c389da
--- /dev/null
+++ b/Test/baseResults/glsl.450.subgroupVote.comp.out
@@ -0,0 +1,971 @@
+glsl.450.subgroupVote.comp
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_vote
+local_size = (8, 8, 1)
+0:? Sequence
+0:16  Function Definition: main( ( global void)
+0:16    Function Parameters: 
+0:18    Sequence
+0:18      Sequence
+0:18        move second child to first child ( temp uint)
+0:18          'invocation' ( temp uint)
+0:18          mod ( temp uint)
+0:18            add ( temp uint)
+0:18              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:18              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:18            Constant:
+0:18              4 (const uint)
+0:20      Test condition and select ( temp void)
+0:20        Condition
+0:20        subgroupAll ( global bool)
+0:20          Compare Less Than ( temp bool)
+0:20            r: direct index for structure (layout( column_major shared) buffer int)
+0:20              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:20                'invocation' ( temp uint)
+0:20              Constant:
+0:20                4 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20        true case
+0:22        Sequence
+0:22          move second child to first child ( temp int)
+0:22            r: direct index for structure (layout( column_major shared) buffer int)
+0:22              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:22                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:22                'invocation' ( temp uint)
+0:22              Constant:
+0:22                4 (const int)
+0:22            Convert bool to int ( temp int)
+0:22              subgroupAllEqual ( global bool)
+0:22                direct index ( temp float)
+0:22                  f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:22                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:22                      Constant:
+0:22                        0 (const int)
+0:22                    Constant:
+0:22                      0 (const int)
+0:22                  Constant:
+0:22                    0 (const int)
+0:23          move second child to first child ( temp int)
+0:23            r: direct index for structure (layout( column_major shared) buffer int)
+0:23              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:23                'invocation' ( temp uint)
+0:23              Constant:
+0:23                4 (const int)
+0:23            Convert bool to int ( temp int)
+0:23              subgroupAllEqual ( global bool)
+0:23                vector swizzle ( temp 2-component vector of float)
+0:23                  f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:23                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:23                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:23                      Constant:
+0:23                        1 (const int)
+0:23                    Constant:
+0:23                      0 (const int)
+0:23                  Sequence
+0:23                    Constant:
+0:23                      0 (const int)
+0:23                    Constant:
+0:23                      1 (const int)
+0:24          move second child to first child ( temp int)
+0:24            r: direct index for structure (layout( column_major shared) buffer int)
+0:24              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:24                'invocation' ( temp uint)
+0:24              Constant:
+0:24                4 (const int)
+0:24            Convert bool to int ( temp int)
+0:24              subgroupAllEqual ( global bool)
+0:24                vector swizzle ( temp 3-component vector of float)
+0:24                  f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:24                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:24                      Constant:
+0:24                        2 (const int)
+0:24                    Constant:
+0:24                      0 (const int)
+0:24                  Sequence
+0:24                    Constant:
+0:24                      0 (const int)
+0:24                    Constant:
+0:24                      1 (const int)
+0:24                    Constant:
+0:24                      2 (const int)
+0:25          move second child to first child ( temp int)
+0:25            r: direct index for structure (layout( column_major shared) buffer int)
+0:25              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:25                'invocation' ( temp uint)
+0:25              Constant:
+0:25                4 (const int)
+0:25            Convert bool to int ( temp int)
+0:25              subgroupAllEqual ( global bool)
+0:25                f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:25                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:25                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:25                    Constant:
+0:25                      3 (const int)
+0:25                  Constant:
+0:25                    0 (const int)
+0:27          move second child to first child ( temp int)
+0:27            r: direct index for structure (layout( column_major shared) buffer int)
+0:27              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:27                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:27                'invocation' ( temp uint)
+0:27              Constant:
+0:27                4 (const int)
+0:27            Convert bool to int ( temp int)
+0:27              subgroupAllEqual ( global bool)
+0:27                direct index ( temp int)
+0:27                  i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:27                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:27                      Constant:
+0:27                        0 (const int)
+0:27                    Constant:
+0:27                      1 (const int)
+0:27                  Constant:
+0:27                    0 (const int)
+0:28          move second child to first child ( temp int)
+0:28            r: direct index for structure (layout( column_major shared) buffer int)
+0:28              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:28                'invocation' ( temp uint)
+0:28              Constant:
+0:28                4 (const int)
+0:28            Convert bool to int ( temp int)
+0:28              subgroupAllEqual ( global bool)
+0:28                vector swizzle ( temp 2-component vector of int)
+0:28                  i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:28                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:28                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:28                      Constant:
+0:28                        1 (const int)
+0:28                    Constant:
+0:28                      1 (const int)
+0:28                  Sequence
+0:28                    Constant:
+0:28                      0 (const int)
+0:28                    Constant:
+0:28                      1 (const int)
+0:29          move second child to first child ( temp int)
+0:29            r: direct index for structure (layout( column_major shared) buffer int)
+0:29              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:29                'invocation' ( temp uint)
+0:29              Constant:
+0:29                4 (const int)
+0:29            Convert bool to int ( temp int)
+0:29              subgroupAllEqual ( global bool)
+0:29                vector swizzle ( temp 3-component vector of int)
+0:29                  i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:29                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:29                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:29                      Constant:
+0:29                        2 (const int)
+0:29                    Constant:
+0:29                      1 (const int)
+0:29                  Sequence
+0:29                    Constant:
+0:29                      0 (const int)
+0:29                    Constant:
+0:29                      1 (const int)
+0:29                    Constant:
+0:29                      2 (const int)
+0:30          move second child to first child ( temp int)
+0:30            r: direct index for structure (layout( column_major shared) buffer int)
+0:30              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:30                'invocation' ( temp uint)
+0:30              Constant:
+0:30                4 (const int)
+0:30            Convert bool to int ( temp int)
+0:30              subgroupAllEqual ( global bool)
+0:30                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:30                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:30                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:30                    Constant:
+0:30                      3 (const int)
+0:30                  Constant:
+0:30                    1 (const int)
+0:32          move second child to first child ( temp int)
+0:32            r: direct index for structure (layout( column_major shared) buffer int)
+0:32              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:32                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:32                'invocation' ( temp uint)
+0:32              Constant:
+0:32                4 (const int)
+0:32            Convert bool to int ( temp int)
+0:32              subgroupAllEqual ( global bool)
+0:32                direct index ( temp uint)
+0:32                  u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:32                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:32                      Constant:
+0:32                        0 (const int)
+0:32                    Constant:
+0:32                      2 (const int)
+0:32                  Constant:
+0:32                    0 (const int)
+0:33          move second child to first child ( temp int)
+0:33            r: direct index for structure (layout( column_major shared) buffer int)
+0:33              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:33                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:33                'invocation' ( temp uint)
+0:33              Constant:
+0:33                4 (const int)
+0:33            Convert bool to int ( temp int)
+0:33              subgroupAllEqual ( global bool)
+0:33                vector swizzle ( temp 2-component vector of uint)
+0:33                  u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:33                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:33                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:33                      Constant:
+0:33                        1 (const int)
+0:33                    Constant:
+0:33                      2 (const int)
+0:33                  Sequence
+0:33                    Constant:
+0:33                      0 (const int)
+0:33                    Constant:
+0:33                      1 (const int)
+0:34          move second child to first child ( temp int)
+0:34            r: direct index for structure (layout( column_major shared) buffer int)
+0:34              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:34                'invocation' ( temp uint)
+0:34              Constant:
+0:34                4 (const int)
+0:34            Convert bool to int ( temp int)
+0:34              subgroupAllEqual ( global bool)
+0:34                vector swizzle ( temp 3-component vector of uint)
+0:34                  u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:34                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:34                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:34                      Constant:
+0:34                        2 (const int)
+0:34                    Constant:
+0:34                      2 (const int)
+0:34                  Sequence
+0:34                    Constant:
+0:34                      0 (const int)
+0:34                    Constant:
+0:34                      1 (const int)
+0:34                    Constant:
+0:34                      2 (const int)
+0:35          move second child to first child ( temp int)
+0:35            r: direct index for structure (layout( column_major shared) buffer int)
+0:35              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:35                'invocation' ( temp uint)
+0:35              Constant:
+0:35                4 (const int)
+0:35            Convert bool to int ( temp int)
+0:35              subgroupAllEqual ( global bool)
+0:35                u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:35                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:35                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:35                    Constant:
+0:35                      3 (const int)
+0:35                  Constant:
+0:35                    2 (const int)
+0:20        false case
+0:37        Test condition and select ( temp void)
+0:37          Condition
+0:37          subgroupAny ( global bool)
+0:37            Compare Less Than ( temp bool)
+0:37              r: direct index for structure (layout( column_major shared) buffer int)
+0:37                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:37                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:37                  'invocation' ( temp uint)
+0:37                Constant:
+0:37                  4 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37          true case
+0:39          Sequence
+0:39            move second child to first child ( temp int)
+0:39              r: direct index for structure (layout( column_major shared) buffer int)
+0:39                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:39                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:39                  'invocation' ( temp uint)
+0:39                Constant:
+0:39                  4 (const int)
+0:39              Convert bool to int ( temp int)
+0:39                subgroupAllEqual ( global bool)
+0:39                  direct index ( temp double)
+0:39                    d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:39                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:39                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:39                        Constant:
+0:39                          0 (const int)
+0:39                      Constant:
+0:39                        3 (const int)
+0:39                    Constant:
+0:39                      0 (const int)
+0:40            move second child to first child ( temp int)
+0:40              r: direct index for structure (layout( column_major shared) buffer int)
+0:40                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:40                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:40                  'invocation' ( temp uint)
+0:40                Constant:
+0:40                  4 (const int)
+0:40              Convert bool to int ( temp int)
+0:40                subgroupAllEqual ( global bool)
+0:40                  vector swizzle ( temp 2-component vector of double)
+0:40                    d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:40                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:40                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:40                        Constant:
+0:40                          1 (const int)
+0:40                      Constant:
+0:40                        3 (const int)
+0:40                    Sequence
+0:40                      Constant:
+0:40                        0 (const int)
+0:40                      Constant:
+0:40                        1 (const int)
+0:41            move second child to first child ( temp int)
+0:41              r: direct index for structure (layout( column_major shared) buffer int)
+0:41                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:41                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:41                  'invocation' ( temp uint)
+0:41                Constant:
+0:41                  4 (const int)
+0:41              Convert bool to int ( temp int)
+0:41                subgroupAllEqual ( global bool)
+0:41                  vector swizzle ( temp 3-component vector of double)
+0:41                    d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:41                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:41                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:41                        Constant:
+0:41                          2 (const int)
+0:41                      Constant:
+0:41                        3 (const int)
+0:41                    Sequence
+0:41                      Constant:
+0:41                        0 (const int)
+0:41                      Constant:
+0:41                        1 (const int)
+0:41                      Constant:
+0:41                        2 (const int)
+0:42            move second child to first child ( temp int)
+0:42              r: direct index for structure (layout( column_major shared) buffer int)
+0:42                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:42                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:42                  'invocation' ( temp uint)
+0:42                Constant:
+0:42                  4 (const int)
+0:42              Convert bool to int ( temp int)
+0:42                subgroupAllEqual ( global bool)
+0:42                  d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:42                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:42                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:42                      Constant:
+0:42                        3 (const int)
+0:42                    Constant:
+0:42                      3 (const int)
+0:44            move second child to first child ( temp int)
+0:44              r: direct index for structure (layout( column_major shared) buffer int)
+0:44                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:44                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:44                  'invocation' ( temp uint)
+0:44                Constant:
+0:44                  4 (const int)
+0:44              Construct int ( temp int)
+0:44                Convert bool to int ( temp int)
+0:44                  subgroupAllEqual ( global bool)
+0:44                    Compare Less Than ( temp bool)
+0:44                      direct index ( temp int)
+0:44                        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44                          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:44                            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:44                            Constant:
+0:44                              0 (const int)
+0:44                          Constant:
+0:44                            1 (const int)
+0:44                        Constant:
+0:44                          0 (const int)
+0:44                      Constant:
+0:44                        0 (const int)
+0:45            move second child to first child ( temp int)
+0:45              r: direct index for structure (layout( column_major shared) buffer int)
+0:45                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:45                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:45                  'invocation' ( temp uint)
+0:45                Constant:
+0:45                  4 (const int)
+0:45              Construct int ( temp int)
+0:45                Construct ivec2 ( temp 2-component vector of int)
+0:45                  Convert bool to int ( temp int)
+0:45                    subgroupAllEqual ( global bool)
+0:45                      Compare Less Than ( global 2-component vector of bool)
+0:45                        vector swizzle ( temp 2-component vector of int)
+0:45                          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45                            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:45                              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:45                              Constant:
+0:45                                1 (const int)
+0:45                            Constant:
+0:45                              1 (const int)
+0:45                          Sequence
+0:45                            Constant:
+0:45                              0 (const int)
+0:45                            Constant:
+0:45                              1 (const int)
+0:45                        Constant:
+0:45                          0 (const int)
+0:45                          0 (const int)
+0:46            move second child to first child ( temp int)
+0:46              r: direct index for structure (layout( column_major shared) buffer int)
+0:46                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:46                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:46                  'invocation' ( temp uint)
+0:46                Constant:
+0:46                  4 (const int)
+0:46              Construct int ( temp int)
+0:46                Construct ivec3 ( temp 3-component vector of int)
+0:46                  Convert bool to int ( temp int)
+0:46                    subgroupAllEqual ( global bool)
+0:46                      Compare Less Than ( global 3-component vector of bool)
+0:46                        vector swizzle ( temp 3-component vector of int)
+0:46                          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46                            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:46                              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:46                              Constant:
+0:46                                1 (const int)
+0:46                            Constant:
+0:46                              1 (const int)
+0:46                          Sequence
+0:46                            Constant:
+0:46                              0 (const int)
+0:46                            Constant:
+0:46                              1 (const int)
+0:46                            Constant:
+0:46                              2 (const int)
+0:46                        Constant:
+0:46                          0 (const int)
+0:46                          0 (const int)
+0:46                          0 (const int)
+0:47            move second child to first child ( temp int)
+0:47              r: direct index for structure (layout( column_major shared) buffer int)
+0:47                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:47                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:47                  'invocation' ( temp uint)
+0:47                Constant:
+0:47                  4 (const int)
+0:47              Construct int ( temp int)
+0:47                Construct ivec4 ( temp 4-component vector of int)
+0:47                  Convert bool to int ( temp int)
+0:47                    subgroupAllEqual ( global bool)
+0:47                      Compare Less Than ( global 4-component vector of bool)
+0:47                        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47                          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:47                            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:47                            Constant:
+0:47                              1 (const int)
+0:47                          Constant:
+0:47                            1 (const int)
+0:47                        Constant:
+0:47                          0 (const int)
+0:47                          0 (const int)
+0:47                          0 (const int)
+0:47                          0 (const int)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_vote
+local_size = (8, 8, 1)
+0:? Sequence
+0:16  Function Definition: main( ( global void)
+0:16    Function Parameters: 
+0:18    Sequence
+0:18      Sequence
+0:18        move second child to first child ( temp uint)
+0:18          'invocation' ( temp uint)
+0:18          mod ( temp uint)
+0:18            add ( temp uint)
+0:18              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:18              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:18            Constant:
+0:18              4 (const uint)
+0:20      Test condition and select ( temp void)
+0:20        Condition
+0:20        subgroupAll ( global bool)
+0:20          Compare Less Than ( temp bool)
+0:20            r: direct index for structure (layout( column_major shared) buffer int)
+0:20              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:20                'invocation' ( temp uint)
+0:20              Constant:
+0:20                4 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20        true case
+0:22        Sequence
+0:22          move second child to first child ( temp int)
+0:22            r: direct index for structure (layout( column_major shared) buffer int)
+0:22              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:22                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:22                'invocation' ( temp uint)
+0:22              Constant:
+0:22                4 (const int)
+0:22            Convert bool to int ( temp int)
+0:22              subgroupAllEqual ( global bool)
+0:22                direct index ( temp float)
+0:22                  f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:22                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:22                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:22                      Constant:
+0:22                        0 (const int)
+0:22                    Constant:
+0:22                      0 (const int)
+0:22                  Constant:
+0:22                    0 (const int)
+0:23          move second child to first child ( temp int)
+0:23            r: direct index for structure (layout( column_major shared) buffer int)
+0:23              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:23                'invocation' ( temp uint)
+0:23              Constant:
+0:23                4 (const int)
+0:23            Convert bool to int ( temp int)
+0:23              subgroupAllEqual ( global bool)
+0:23                vector swizzle ( temp 2-component vector of float)
+0:23                  f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:23                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:23                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:23                      Constant:
+0:23                        1 (const int)
+0:23                    Constant:
+0:23                      0 (const int)
+0:23                  Sequence
+0:23                    Constant:
+0:23                      0 (const int)
+0:23                    Constant:
+0:23                      1 (const int)
+0:24          move second child to first child ( temp int)
+0:24            r: direct index for structure (layout( column_major shared) buffer int)
+0:24              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:24                'invocation' ( temp uint)
+0:24              Constant:
+0:24                4 (const int)
+0:24            Convert bool to int ( temp int)
+0:24              subgroupAllEqual ( global bool)
+0:24                vector swizzle ( temp 3-component vector of float)
+0:24                  f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:24                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:24                      Constant:
+0:24                        2 (const int)
+0:24                    Constant:
+0:24                      0 (const int)
+0:24                  Sequence
+0:24                    Constant:
+0:24                      0 (const int)
+0:24                    Constant:
+0:24                      1 (const int)
+0:24                    Constant:
+0:24                      2 (const int)
+0:25          move second child to first child ( temp int)
+0:25            r: direct index for structure (layout( column_major shared) buffer int)
+0:25              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:25                'invocation' ( temp uint)
+0:25              Constant:
+0:25                4 (const int)
+0:25            Convert bool to int ( temp int)
+0:25              subgroupAllEqual ( global bool)
+0:25                f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:25                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:25                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:25                    Constant:
+0:25                      3 (const int)
+0:25                  Constant:
+0:25                    0 (const int)
+0:27          move second child to first child ( temp int)
+0:27            r: direct index for structure (layout( column_major shared) buffer int)
+0:27              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:27                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:27                'invocation' ( temp uint)
+0:27              Constant:
+0:27                4 (const int)
+0:27            Convert bool to int ( temp int)
+0:27              subgroupAllEqual ( global bool)
+0:27                direct index ( temp int)
+0:27                  i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:27                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:27                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:27                      Constant:
+0:27                        0 (const int)
+0:27                    Constant:
+0:27                      1 (const int)
+0:27                  Constant:
+0:27                    0 (const int)
+0:28          move second child to first child ( temp int)
+0:28            r: direct index for structure (layout( column_major shared) buffer int)
+0:28              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:28                'invocation' ( temp uint)
+0:28              Constant:
+0:28                4 (const int)
+0:28            Convert bool to int ( temp int)
+0:28              subgroupAllEqual ( global bool)
+0:28                vector swizzle ( temp 2-component vector of int)
+0:28                  i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:28                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:28                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:28                      Constant:
+0:28                        1 (const int)
+0:28                    Constant:
+0:28                      1 (const int)
+0:28                  Sequence
+0:28                    Constant:
+0:28                      0 (const int)
+0:28                    Constant:
+0:28                      1 (const int)
+0:29          move second child to first child ( temp int)
+0:29            r: direct index for structure (layout( column_major shared) buffer int)
+0:29              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:29                'invocation' ( temp uint)
+0:29              Constant:
+0:29                4 (const int)
+0:29            Convert bool to int ( temp int)
+0:29              subgroupAllEqual ( global bool)
+0:29                vector swizzle ( temp 3-component vector of int)
+0:29                  i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:29                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:29                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:29                      Constant:
+0:29                        2 (const int)
+0:29                    Constant:
+0:29                      1 (const int)
+0:29                  Sequence
+0:29                    Constant:
+0:29                      0 (const int)
+0:29                    Constant:
+0:29                      1 (const int)
+0:29                    Constant:
+0:29                      2 (const int)
+0:30          move second child to first child ( temp int)
+0:30            r: direct index for structure (layout( column_major shared) buffer int)
+0:30              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:30                'invocation' ( temp uint)
+0:30              Constant:
+0:30                4 (const int)
+0:30            Convert bool to int ( temp int)
+0:30              subgroupAllEqual ( global bool)
+0:30                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:30                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:30                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:30                    Constant:
+0:30                      3 (const int)
+0:30                  Constant:
+0:30                    1 (const int)
+0:32          move second child to first child ( temp int)
+0:32            r: direct index for structure (layout( column_major shared) buffer int)
+0:32              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:32                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:32                'invocation' ( temp uint)
+0:32              Constant:
+0:32                4 (const int)
+0:32            Convert bool to int ( temp int)
+0:32              subgroupAllEqual ( global bool)
+0:32                direct index ( temp uint)
+0:32                  u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:32                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:32                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:32                      Constant:
+0:32                        0 (const int)
+0:32                    Constant:
+0:32                      2 (const int)
+0:32                  Constant:
+0:32                    0 (const int)
+0:33          move second child to first child ( temp int)
+0:33            r: direct index for structure (layout( column_major shared) buffer int)
+0:33              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:33                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:33                'invocation' ( temp uint)
+0:33              Constant:
+0:33                4 (const int)
+0:33            Convert bool to int ( temp int)
+0:33              subgroupAllEqual ( global bool)
+0:33                vector swizzle ( temp 2-component vector of uint)
+0:33                  u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:33                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:33                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:33                      Constant:
+0:33                        1 (const int)
+0:33                    Constant:
+0:33                      2 (const int)
+0:33                  Sequence
+0:33                    Constant:
+0:33                      0 (const int)
+0:33                    Constant:
+0:33                      1 (const int)
+0:34          move second child to first child ( temp int)
+0:34            r: direct index for structure (layout( column_major shared) buffer int)
+0:34              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:34                'invocation' ( temp uint)
+0:34              Constant:
+0:34                4 (const int)
+0:34            Convert bool to int ( temp int)
+0:34              subgroupAllEqual ( global bool)
+0:34                vector swizzle ( temp 3-component vector of uint)
+0:34                  u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:34                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:34                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:34                      Constant:
+0:34                        2 (const int)
+0:34                    Constant:
+0:34                      2 (const int)
+0:34                  Sequence
+0:34                    Constant:
+0:34                      0 (const int)
+0:34                    Constant:
+0:34                      1 (const int)
+0:34                    Constant:
+0:34                      2 (const int)
+0:35          move second child to first child ( temp int)
+0:35            r: direct index for structure (layout( column_major shared) buffer int)
+0:35              indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:35                'invocation' ( temp uint)
+0:35              Constant:
+0:35                4 (const int)
+0:35            Convert bool to int ( temp int)
+0:35              subgroupAllEqual ( global bool)
+0:35                u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:35                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:35                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:35                    Constant:
+0:35                      3 (const int)
+0:35                  Constant:
+0:35                    2 (const int)
+0:20        false case
+0:37        Test condition and select ( temp void)
+0:37          Condition
+0:37          subgroupAny ( global bool)
+0:37            Compare Less Than ( temp bool)
+0:37              r: direct index for structure (layout( column_major shared) buffer int)
+0:37                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:37                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:37                  'invocation' ( temp uint)
+0:37                Constant:
+0:37                  4 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37          true case
+0:39          Sequence
+0:39            move second child to first child ( temp int)
+0:39              r: direct index for structure (layout( column_major shared) buffer int)
+0:39                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:39                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:39                  'invocation' ( temp uint)
+0:39                Constant:
+0:39                  4 (const int)
+0:39              Convert bool to int ( temp int)
+0:39                subgroupAllEqual ( global bool)
+0:39                  direct index ( temp double)
+0:39                    d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:39                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:39                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:39                        Constant:
+0:39                          0 (const int)
+0:39                      Constant:
+0:39                        3 (const int)
+0:39                    Constant:
+0:39                      0 (const int)
+0:40            move second child to first child ( temp int)
+0:40              r: direct index for structure (layout( column_major shared) buffer int)
+0:40                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:40                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:40                  'invocation' ( temp uint)
+0:40                Constant:
+0:40                  4 (const int)
+0:40              Convert bool to int ( temp int)
+0:40                subgroupAllEqual ( global bool)
+0:40                  vector swizzle ( temp 2-component vector of double)
+0:40                    d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:40                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:40                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:40                        Constant:
+0:40                          1 (const int)
+0:40                      Constant:
+0:40                        3 (const int)
+0:40                    Sequence
+0:40                      Constant:
+0:40                        0 (const int)
+0:40                      Constant:
+0:40                        1 (const int)
+0:41            move second child to first child ( temp int)
+0:41              r: direct index for structure (layout( column_major shared) buffer int)
+0:41                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:41                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:41                  'invocation' ( temp uint)
+0:41                Constant:
+0:41                  4 (const int)
+0:41              Convert bool to int ( temp int)
+0:41                subgroupAllEqual ( global bool)
+0:41                  vector swizzle ( temp 3-component vector of double)
+0:41                    d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:41                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:41                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:41                        Constant:
+0:41                          2 (const int)
+0:41                      Constant:
+0:41                        3 (const int)
+0:41                    Sequence
+0:41                      Constant:
+0:41                        0 (const int)
+0:41                      Constant:
+0:41                        1 (const int)
+0:41                      Constant:
+0:41                        2 (const int)
+0:42            move second child to first child ( temp int)
+0:42              r: direct index for structure (layout( column_major shared) buffer int)
+0:42                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:42                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:42                  'invocation' ( temp uint)
+0:42                Constant:
+0:42                  4 (const int)
+0:42              Convert bool to int ( temp int)
+0:42                subgroupAllEqual ( global bool)
+0:42                  d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:42                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:42                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:42                      Constant:
+0:42                        3 (const int)
+0:42                    Constant:
+0:42                      3 (const int)
+0:44            move second child to first child ( temp int)
+0:44              r: direct index for structure (layout( column_major shared) buffer int)
+0:44                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:44                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:44                  'invocation' ( temp uint)
+0:44                Constant:
+0:44                  4 (const int)
+0:44              Construct int ( temp int)
+0:44                Convert bool to int ( temp int)
+0:44                  subgroupAllEqual ( global bool)
+0:44                    Compare Less Than ( temp bool)
+0:44                      direct index ( temp int)
+0:44                        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44                          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:44                            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:44                            Constant:
+0:44                              0 (const int)
+0:44                          Constant:
+0:44                            1 (const int)
+0:44                        Constant:
+0:44                          0 (const int)
+0:44                      Constant:
+0:44                        0 (const int)
+0:45            move second child to first child ( temp int)
+0:45              r: direct index for structure (layout( column_major shared) buffer int)
+0:45                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:45                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:45                  'invocation' ( temp uint)
+0:45                Constant:
+0:45                  4 (const int)
+0:45              Construct int ( temp int)
+0:45                Construct ivec2 ( temp 2-component vector of int)
+0:45                  Convert bool to int ( temp int)
+0:45                    subgroupAllEqual ( global bool)
+0:45                      Compare Less Than ( global 2-component vector of bool)
+0:45                        vector swizzle ( temp 2-component vector of int)
+0:45                          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45                            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:45                              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:45                              Constant:
+0:45                                1 (const int)
+0:45                            Constant:
+0:45                              1 (const int)
+0:45                          Sequence
+0:45                            Constant:
+0:45                              0 (const int)
+0:45                            Constant:
+0:45                              1 (const int)
+0:45                        Constant:
+0:45                          0 (const int)
+0:45                          0 (const int)
+0:46            move second child to first child ( temp int)
+0:46              r: direct index for structure (layout( column_major shared) buffer int)
+0:46                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:46                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:46                  'invocation' ( temp uint)
+0:46                Constant:
+0:46                  4 (const int)
+0:46              Construct int ( temp int)
+0:46                Construct ivec3 ( temp 3-component vector of int)
+0:46                  Convert bool to int ( temp int)
+0:46                    subgroupAllEqual ( global bool)
+0:46                      Compare Less Than ( global 3-component vector of bool)
+0:46                        vector swizzle ( temp 3-component vector of int)
+0:46                          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46                            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:46                              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:46                              Constant:
+0:46                                1 (const int)
+0:46                            Constant:
+0:46                              1 (const int)
+0:46                          Sequence
+0:46                            Constant:
+0:46                              0 (const int)
+0:46                            Constant:
+0:46                              1 (const int)
+0:46                            Constant:
+0:46                              2 (const int)
+0:46                        Constant:
+0:46                          0 (const int)
+0:46                          0 (const int)
+0:46                          0 (const int)
+0:47            move second child to first child ( temp int)
+0:47              r: direct index for structure (layout( column_major shared) buffer int)
+0:47                indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:47                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:47                  'invocation' ( temp uint)
+0:47                Constant:
+0:47                  4 (const int)
+0:47              Construct int ( temp int)
+0:47                Construct ivec4 ( temp 4-component vector of int)
+0:47                  Convert bool to int ( temp int)
+0:47                    subgroupAllEqual ( global bool)
+0:47                      Compare Less Than ( global 4-component vector of bool)
+0:47                        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47                          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:47                            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+0:47                            Constant:
+0:47                              1 (const int)
+0:47                          Constant:
+0:47                            1 (const int)
+0:47                        Constant:
+0:47                          0 (const int)
+0:47                          0 (const int)
+0:47                          0 (const int)
+0:47                          0 (const int)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4, layout( column_major shared) buffer int r})
+
diff --git a/Test/baseResults/glsl.460.subgroup.mesh.out b/Test/baseResults/glsl.460.subgroup.mesh.out
new file mode 100644
index 0000000..bb0e4eb
--- /dev/null
+++ b/Test/baseResults/glsl.460.subgroup.mesh.out
@@ -0,0 +1,1237 @@
+glsl.460.subgroup.mesh
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_SubgroupID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:78: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+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:298: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:299: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:300: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:301: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_mesh_shader
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+max_vertices = 81
+max_primitives = 32
+output primitive = triangles
+local_size = (32, 1, 1)
+ERROR: node is still EOpNull!
+0:3  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3    Function Parameters: 
+0:3      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:6      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8      subgroupBarrier ( global void)
+0:9      subgroupMemoryBarrier ( global void)
+0:10      subgroupMemoryBarrierBuffer ( global void)
+0:11      subgroupMemoryBarrierImage ( global void)
+0:12      subgroupElect ( global bool)
+0:13      'gl_NumSubgroups' ( in uint NumSubgroups)
+0:14      'gl_SubgroupID' ( in uint SubgroupID)
+0:15      subgroupMemoryBarrierShared ( global void)
+0:17      subgroupAll ( global bool)
+0:17        Constant:
+0:17          true (const bool)
+0:18      subgroupAny ( global bool)
+0:18        Constant:
+0:18          false (const bool)
+0:19      subgroupAllEqual ( global bool)
+0:19        'f4' ( in 4-component vector of float)
+0:21      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26      subgroupBroadcast ( global 4-component vector of float)
+0:26        'f4' ( in 4-component vector of float)
+0:26        Constant:
+0:26          0 (const uint)
+0:27      subgroupBroadcastFirst ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of uint)
+0:28          'ballot' ( temp 4-component vector of uint)
+0:28          subgroupBallot ( global 4-component vector of uint)
+0:28            Constant:
+0:28              false (const bool)
+0:29      subgroupInverseBallot ( global bool)
+0:29        Constant:
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:30      subgroupBallotBitExtract ( global bool)
+0:30        'ballot' ( temp 4-component vector of uint)
+0:30        Constant:
+0:30          0 (const uint)
+0:31      subgroupBallotBitCount ( global uint)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:32      subgroupBallotInclusiveBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotExclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotFindLSB ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindMSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:37      subgroupShuffle ( global 4-component vector of float)
+0:37        'f4' ( in 4-component vector of float)
+0:37        Constant:
+0:37          0 (const uint)
+0:38      subgroupShuffleXor ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          1 (const uint)
+0:39      subgroupShuffleUp ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleDown ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        'result' ( temp 4-component vector of float)
+0:42        subgroupAdd ( global 4-component vector of float)
+0:42          'f4' ( in 4-component vector of float)
+0:43      subgroupMul ( global 4-component vector of float)
+0:43        'f4' ( in 4-component vector of float)
+0:44      subgroupMin ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMax ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupAnd ( global 4-component vector of uint)
+0:46        'ballot' ( temp 4-component vector of uint)
+0:47      subgroupOr ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupXor ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupInclusiveAdd ( global 4-component vector of float)
+0:49        'f4' ( in 4-component vector of float)
+0:50      subgroupInclusiveMul ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMin ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMax ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53        'ballot' ( temp 4-component vector of uint)
+0:54      subgroupInclusiveOr ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveXor ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupExclusiveAdd ( global 4-component vector of float)
+0:56        'f4' ( in 4-component vector of float)
+0:57      subgroupExclusiveMul ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMin ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMax ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60        'ballot' ( temp 4-component vector of uint)
+0:61      subgroupExclusiveOr ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveXor ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:64      subgroupClusteredAdd ( global 4-component vector of float)
+0:64        'f4' ( in 4-component vector of float)
+0:64        Constant:
+0:64          2 (const uint)
+0:65      subgroupClusteredMul ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMin ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMax ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredAnd ( global 4-component vector of uint)
+0:68        'ballot' ( temp 4-component vector of uint)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredOr ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredXor ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:72      subgroupQuadBroadcast ( global 4-component vector of float)
+0:72        'f4' ( in 4-component vector of float)
+0:72        Constant:
+0:72          0 (const uint)
+0:73      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:74      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:77      Sequence
+0:77        move second child to first child ( temp 4-component vector of uint)
+0:77          'parti' ( temp 4-component vector of uint)
+0:77          subgroupPartitionNV ( global 4-component vector of uint)
+0:77            'f4' ( in 4-component vector of float)
+0:78      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:78        'f4' ( in 4-component vector of float)
+0:78        'parti' ( temp 4-component vector of uint)
+0:79      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:79        'f4' ( in 4-component vector of float)
+0:79        'parti' ( temp 4-component vector of uint)
+0:80      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:82        'ballot' ( temp 4-component vector of uint)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:83        'ballot' ( temp 4-component vector of uint)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:85        'f4' ( in 4-component vector of float)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:86        'f4' ( in 4-component vector of float)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:89        'ballot' ( temp 4-component vector of uint)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:90        'ballot' ( temp 4-component vector of uint)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:92        'f4' ( in 4-component vector of float)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:93        'f4' ( in 4-component vector of float)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:96        'ballot' ( temp 4-component vector of uint)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:97        'ballot' ( temp 4-component vector of uint)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:100      Branch: Return with expression
+0:100        'result' ( temp 4-component vector of float)
+0:120  Function Definition: main( ( global void)
+0:120    Function Parameters: 
+0:122    Sequence
+0:122      Sequence
+0:122        move second child to first child ( temp uint)
+0:122          'iid' ( temp uint)
+0:122          direct index ( temp uint)
+0:122            'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:122            Constant:
+0:122              0 (const int)
+0:123      Sequence
+0:123        move second child to first child ( temp uint)
+0:123          'gid' ( temp uint)
+0:123          direct index ( temp uint)
+0:123            'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:123            Constant:
+0:123              0 (const int)
+0:125      move second child to first child ( temp 4-component vector of float)
+0:125        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:125          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:125            'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:125            'iid' ( temp uint)
+0:125          Constant:
+0:125            0 (const int)
+0:125        Constant:
+0:125          1.000000
+0:125          1.000000
+0:125          1.000000
+0:125          1.000000
+0:126      move second child to first child ( temp float)
+0:126        gl_PointSize: direct index for structure ( out float PointSize)
+0:126          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:126            'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:126            'iid' ( temp uint)
+0:126          Constant:
+0:126            1 (const int)
+0:126        Constant:
+0:126          2.000000
+0:127      move second child to first child ( temp float)
+0:127        direct index ( temp float ClipDistance)
+0:127          gl_ClipDistance: direct index for structure ( out unsized 4-element array of float ClipDistance)
+0:127            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:127              'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:127              'iid' ( temp uint)
+0:127            Constant:
+0:127              2 (const int)
+0:127          Constant:
+0:127            3 (const int)
+0:127        Constant:
+0:127          3.000000
+0:128      move second child to first child ( temp float)
+0:128        direct index ( temp float CullDistance)
+0:128          gl_CullDistance: direct index for structure ( out unsized 3-element array of float CullDistance)
+0:128            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:128              'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:128              'iid' ( temp uint)
+0:128            Constant:
+0:128              3 (const int)
+0:128          Constant:
+0:128            2 (const int)
+0:128        Constant:
+0:128          4.000000
+0:130      MemoryBarrierShared ( global void)
+0:130      Barrier ( global void)
+0:132      move second child to first child ( temp 4-component vector of float)
+0:132        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:132          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:132            'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:132            add ( temp uint)
+0:132              'iid' ( temp uint)
+0:132              Constant:
+0:132                1 (const uint)
+0:132          Constant:
+0:132            0 (const int)
+0:132        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:132          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:132            'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:132            'iid' ( temp uint)
+0:132          Constant:
+0:132            0 (const int)
+0:133      move second child to first child ( temp float)
+0:133        gl_PointSize: direct index for structure ( out float PointSize)
+0:133          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:133            'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:133            add ( temp uint)
+0:133              'iid' ( temp uint)
+0:133              Constant:
+0:133                1 (const uint)
+0:133          Constant:
+0:133            1 (const int)
+0:133        gl_PointSize: direct index for structure ( out float PointSize)
+0:133          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:133            'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:133            'iid' ( temp uint)
+0:133          Constant:
+0:133            1 (const int)
+0:134      move second child to first child ( temp float)
+0:134        direct index ( temp float ClipDistance)
+0:134          gl_ClipDistance: direct index for structure ( out unsized 4-element array of float ClipDistance)
+0:134            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:134              'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:134              add ( temp uint)
+0:134                'iid' ( temp uint)
+0:134                Constant:
+0:134                  1 (const uint)
+0:134            Constant:
+0:134              2 (const int)
+0:134          Constant:
+0:134            3 (const int)
+0:134        direct index ( temp float ClipDistance)
+0:134          gl_ClipDistance: direct index for structure ( out unsized 4-element array of float ClipDistance)
+0:134            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:134              'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:134              'iid' ( temp uint)
+0:134            Constant:
+0:134              2 (const int)
+0:134          Constant:
+0:134            3 (const int)
+0:135      move second child to first child ( temp float)
+0:135        direct index ( temp float CullDistance)
+0:135          gl_CullDistance: direct index for structure ( out unsized 3-element array of float CullDistance)
+0:135            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:135              'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:135              add ( temp uint)
+0:135                'iid' ( temp uint)
+0:135                Constant:
+0:135                  1 (const uint)
+0:135            Constant:
+0:135              3 (const int)
+0:135          Constant:
+0:135            2 (const int)
+0:135        direct index ( temp float CullDistance)
+0:135          gl_CullDistance: direct index for structure ( out unsized 3-element array of float CullDistance)
+0:135            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:135              'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:135              'iid' ( temp uint)
+0:135            Constant:
+0:135              3 (const int)
+0:135          Constant:
+0:135            2 (const int)
+0:137      MemoryBarrierShared ( global void)
+0:137      Barrier ( global void)
+0:139      move second child to first child ( temp int)
+0:139        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:139          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:139            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:139            'iid' ( temp uint)
+0:139          Constant:
+0:139            0 (const int)
+0:139        Constant:
+0:139          6 (const int)
+0:140      move second child to first child ( temp int)
+0:140        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:140          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:140            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:140            'iid' ( temp uint)
+0:140          Constant:
+0:140            1 (const int)
+0:140        Constant:
+0:140          7 (const int)
+0:141      move second child to first child ( temp int)
+0:141        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:141          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:141            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:141            'iid' ( temp uint)
+0:141          Constant:
+0:141            2 (const int)
+0:141        Constant:
+0:141          8 (const int)
+0:142      move second child to first child ( temp int)
+0:142        direct index ( perprimitiveNV temp int ViewportMaskNV)
+0:142          gl_ViewportMask: direct index for structure ( perprimitiveNV out unsized 1-element array of int ViewportMaskNV)
+0:142            indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:142              'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:142              'iid' ( temp uint)
+0:142            Constant:
+0:142              3 (const int)
+0:142          Constant:
+0:142            0 (const int)
+0:142        Constant:
+0:142          9 (const int)
+0:144      MemoryBarrierShared ( global void)
+0:144      Barrier ( global void)
+0:146      move second child to first child ( temp int)
+0:146        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:146          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:146            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:146            add ( temp uint)
+0:146              'iid' ( temp uint)
+0:146              Constant:
+0:146                1 (const uint)
+0:146          Constant:
+0:146            0 (const int)
+0:146        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:146          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:146            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:146            'iid' ( temp uint)
+0:146          Constant:
+0:146            0 (const int)
+0:147      move second child to first child ( temp int)
+0:147        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:147          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:147            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:147            add ( temp uint)
+0:147              'iid' ( temp uint)
+0:147              Constant:
+0:147                1 (const uint)
+0:147          Constant:
+0:147            1 (const int)
+0:147        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:147          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:147            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:147            'iid' ( temp uint)
+0:147          Constant:
+0:147            1 (const int)
+0:148      move second child to first child ( temp int)
+0:148        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:148          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:148            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:148            add ( temp uint)
+0:148              'iid' ( temp uint)
+0:148              Constant:
+0:148                1 (const uint)
+0:148          Constant:
+0:148            2 (const int)
+0:148        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:148          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:148            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:148            'iid' ( temp uint)
+0:148          Constant:
+0:148            2 (const int)
+0:149      move second child to first child ( temp int)
+0:149        direct index ( perprimitiveNV temp int ViewportMaskNV)
+0:149          gl_ViewportMask: direct index for structure ( perprimitiveNV out unsized 1-element array of int ViewportMaskNV)
+0:149            indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:149              'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:149              add ( temp uint)
+0:149                'iid' ( temp uint)
+0:149                Constant:
+0:149                  1 (const uint)
+0:149            Constant:
+0:149              3 (const int)
+0:149          Constant:
+0:149            0 (const int)
+0:149        direct index ( perprimitiveNV temp int ViewportMaskNV)
+0:149          gl_ViewportMask: direct index for structure ( perprimitiveNV out unsized 1-element array of int ViewportMaskNV)
+0:149            indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:149              'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:149              'iid' ( temp uint)
+0:149            Constant:
+0:149              3 (const int)
+0:149          Constant:
+0:149            0 (const int)
+0:151      MemoryBarrierShared ( global void)
+0:151      Barrier ( global void)
+0:154      move second child to first child ( temp uint)
+0:154        direct index ( temp uint PrimitiveIndicesNV)
+0:154          'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+0:154          Constant:
+0:154            0 (const int)
+0:154        Constant:
+0:154          257 (const uint)
+0:155      move second child to first child ( temp uint)
+0:155        direct index ( temp uint PrimitiveIndicesNV)
+0:155          'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+0:155          Constant:
+0:155            95 (const int)
+0:155        Constant:
+0:155          2 (const uint)
+0:156      move second child to first child ( temp uint)
+0:156        indirect index ( temp uint PrimitiveIndicesNV)
+0:156          'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+0:156          'gid' ( temp uint)
+0:156        indirect index ( temp uint PrimitiveIndicesNV)
+0:156          'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+0:156          subtract ( temp uint)
+0:156            'gid' ( temp uint)
+0:156            Constant:
+0:156              1 (const uint)
+0:159      writePackedPrimitiveIndices4x8NV ( global void)
+0:159        Convert int to uint ( temp uint)
+0:159          'gl_DrawID' ( in int DrawId)
+0:159        Constant:
+0:159          16909060 (const uint)
+0:161      move second child to first child ( temp uint)
+0:161        'gl_PrimitiveCountNV' ( out uint PrimitiveCountNV)
+0:161        Constant:
+0:161          96 (const uint)
+0:163      MemoryBarrierShared ( global void)
+0:163      Barrier ( global void)
+0:167  Function Definition: basic_works( ( global void)
+0:167    Function Parameters: 
+0:169    Sequence
+0:169      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:170      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:171      subgroupBarrier ( global void)
+0:172      subgroupMemoryBarrier ( global void)
+0:173      subgroupMemoryBarrierBuffer ( global void)
+0:174      subgroupMemoryBarrierImage ( global void)
+0:175      subgroupElect ( global bool)
+0:176      'gl_NumSubgroups' ( in uint NumSubgroups)
+0:177      'gl_SubgroupID' ( in uint SubgroupID)
+0:178      subgroupMemoryBarrierShared ( global void)
+0:182  Function Definition: ballot_works(vf4; ( global void)
+0:182    Function Parameters: 
+0:182      'f4' ( in 4-component vector of float)
+0:183    Sequence
+0:183      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:184      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:185      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:186      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:187      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:188      subgroupBroadcast ( global 4-component vector of float)
+0:188        'f4' ( in 4-component vector of float)
+0:188        Constant:
+0:188          0 (const uint)
+0:189      subgroupBroadcastFirst ( global 4-component vector of float)
+0:189        'f4' ( in 4-component vector of float)
+0:190      Sequence
+0:190        move second child to first child ( temp 4-component vector of uint)
+0:190          'ballot' ( temp 4-component vector of uint)
+0:190          subgroupBallot ( global 4-component vector of uint)
+0:190            Constant:
+0:190              false (const bool)
+0:191      subgroupInverseBallot ( global bool)
+0:191        Constant:
+0:191          1 (const uint)
+0:191          1 (const uint)
+0:191          1 (const uint)
+0:191          1 (const uint)
+0:192      subgroupBallotBitExtract ( global bool)
+0:192        'ballot' ( temp 4-component vector of uint)
+0:192        Constant:
+0:192          0 (const uint)
+0:193      subgroupBallotBitCount ( global uint)
+0:193        'ballot' ( temp 4-component vector of uint)
+0:194      subgroupBallotInclusiveBitCount ( global uint)
+0:194        'ballot' ( temp 4-component vector of uint)
+0:195      subgroupBallotExclusiveBitCount ( global uint)
+0:195        'ballot' ( temp 4-component vector of uint)
+0:196      subgroupBallotFindLSB ( global uint)
+0:196        'ballot' ( temp 4-component vector of uint)
+0:197      subgroupBallotFindMSB ( global uint)
+0:197        'ballot' ( temp 4-component vector of uint)
+0:201  Function Definition: vote_works(vf4; ( global void)
+0:201    Function Parameters: 
+0:201      'f4' ( in 4-component vector of float)
+0:203    Sequence
+0:203      subgroupAll ( global bool)
+0:203        Constant:
+0:203          true (const bool)
+0:204      subgroupAny ( global bool)
+0:204        Constant:
+0:204          false (const bool)
+0:205      subgroupAllEqual ( global bool)
+0:205        'f4' ( in 4-component vector of float)
+0:210  Function Definition: shuffle_works(vf4; ( global void)
+0:210    Function Parameters: 
+0:210      'f4' ( in 4-component vector of float)
+0:212    Sequence
+0:212      subgroupShuffle ( global 4-component vector of float)
+0:212        'f4' ( in 4-component vector of float)
+0:212        Constant:
+0:212          0 (const uint)
+0:213      subgroupShuffleXor ( global 4-component vector of float)
+0:213        'f4' ( in 4-component vector of float)
+0:213        Constant:
+0:213          1 (const uint)
+0:214      subgroupShuffleUp ( global 4-component vector of float)
+0:214        'f4' ( in 4-component vector of float)
+0:214        Constant:
+0:214          1 (const uint)
+0:215      subgroupShuffleDown ( global 4-component vector of float)
+0:215        'f4' ( in 4-component vector of float)
+0:215        Constant:
+0:215          1 (const uint)
+0:219  Function Definition: arith_works(vf4; ( global void)
+0:219    Function Parameters: 
+0:219      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:222      subgroupAdd ( global 4-component vector of float)
+0:222        'f4' ( in 4-component vector of float)
+0:223      subgroupMul ( global 4-component vector of float)
+0:223        'f4' ( in 4-component vector of float)
+0:224      subgroupMin ( global 4-component vector of float)
+0:224        'f4' ( in 4-component vector of float)
+0:225      subgroupMax ( global 4-component vector of float)
+0:225        'f4' ( in 4-component vector of float)
+0:226      subgroupAnd ( global 4-component vector of uint)
+0:226        'ballot' ( temp 4-component vector of uint)
+0:227      subgroupOr ( global 4-component vector of uint)
+0:227        'ballot' ( temp 4-component vector of uint)
+0:228      subgroupXor ( global 4-component vector of uint)
+0:228        'ballot' ( temp 4-component vector of uint)
+0:229      subgroupInclusiveAdd ( global 4-component vector of float)
+0:229        'f4' ( in 4-component vector of float)
+0:230      subgroupInclusiveMul ( global 4-component vector of float)
+0:230        'f4' ( in 4-component vector of float)
+0:231      subgroupInclusiveMin ( global 4-component vector of float)
+0:231        'f4' ( in 4-component vector of float)
+0:232      subgroupInclusiveMax ( global 4-component vector of float)
+0:232        'f4' ( in 4-component vector of float)
+0:233      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:233        'ballot' ( temp 4-component vector of uint)
+0:234      subgroupInclusiveOr ( global 4-component vector of uint)
+0:234        'ballot' ( temp 4-component vector of uint)
+0:235      subgroupInclusiveXor ( global 4-component vector of uint)
+0:235        'ballot' ( temp 4-component vector of uint)
+0:236      subgroupExclusiveAdd ( global 4-component vector of float)
+0:236        'f4' ( in 4-component vector of float)
+0:237      subgroupExclusiveMul ( global 4-component vector of float)
+0:237        'f4' ( in 4-component vector of float)
+0:238      subgroupExclusiveMin ( global 4-component vector of float)
+0:238        'f4' ( in 4-component vector of float)
+0:239      subgroupExclusiveMax ( global 4-component vector of float)
+0:239        'f4' ( in 4-component vector of float)
+0:240      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:240        'ballot' ( temp 4-component vector of uint)
+0:241      subgroupExclusiveOr ( global 4-component vector of uint)
+0:241        'ballot' ( temp 4-component vector of uint)
+0:242      subgroupExclusiveXor ( global 4-component vector of uint)
+0:242        'ballot' ( temp 4-component vector of uint)
+0:246  Function Definition: clustered_works(vf4; ( global void)
+0:246    Function Parameters: 
+0:246      'f4' ( in 4-component vector of float)
+0:248    Sequence
+0:248      Sequence
+0:248        move second child to first child ( temp 4-component vector of uint)
+0:248          'ballot' ( temp 4-component vector of uint)
+0:248          Constant:
+0:248            85 (const uint)
+0:248            0 (const uint)
+0:248            0 (const uint)
+0:248            0 (const uint)
+0:249      subgroupClusteredAdd ( global 4-component vector of float)
+0:249        'f4' ( in 4-component vector of float)
+0:249        Constant:
+0:249          2 (const uint)
+0:250      subgroupClusteredMul ( global 4-component vector of float)
+0:250        'f4' ( in 4-component vector of float)
+0:250        Constant:
+0:250          2 (const uint)
+0:251      subgroupClusteredMin ( global 4-component vector of float)
+0:251        'f4' ( in 4-component vector of float)
+0:251        Constant:
+0:251          2 (const uint)
+0:252      subgroupClusteredMax ( global 4-component vector of float)
+0:252        'f4' ( in 4-component vector of float)
+0:252        Constant:
+0:252          2 (const uint)
+0:253      subgroupClusteredAnd ( global 4-component vector of uint)
+0:253        'ballot' ( temp 4-component vector of uint)
+0:253        Constant:
+0:253          2 (const uint)
+0:254      subgroupClusteredOr ( global 4-component vector of uint)
+0:254        'ballot' ( temp 4-component vector of uint)
+0:254        Constant:
+0:254          2 (const uint)
+0:255      subgroupClusteredXor ( global 4-component vector of uint)
+0:255        'ballot' ( temp 4-component vector of uint)
+0:255        Constant:
+0:255          2 (const uint)
+0:259  Function Definition: quad_works(vf4; ( global void)
+0:259    Function Parameters: 
+0:259      'f4' ( in 4-component vector of float)
+0:261    Sequence
+0:261      subgroupQuadBroadcast ( global 4-component vector of float)
+0:261        'f4' ( in 4-component vector of float)
+0:261        Constant:
+0:261          0 (const uint)
+0:262      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:262        'f4' ( in 4-component vector of float)
+0:263      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:263        'f4' ( in 4-component vector of float)
+0:264      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:264        'f4' ( in 4-component vector of float)
+0:268  Function Definition: partitioned_works(vf4; ( global void)
+0:268    Function Parameters: 
+0:268      'f4' ( in 4-component vector of float)
+0:270    Sequence
+0:270      Sequence
+0:270        move second child to first child ( temp 4-component vector of uint)
+0:270          'parti' ( temp 4-component vector of uint)
+0:270          subgroupPartitionNV ( global 4-component vector of uint)
+0:270            'f4' ( in 4-component vector of float)
+0:271      Sequence
+0:271        move second child to first child ( temp 4-component vector of uint)
+0:271          'ballot' ( temp 4-component vector of uint)
+0:271          Constant:
+0:271            85 (const uint)
+0:271            0 (const uint)
+0:271            0 (const uint)
+0:271            0 (const uint)
+0:272      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:272        'f4' ( in 4-component vector of float)
+0:272        'parti' ( temp 4-component vector of uint)
+0:273      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:273        'f4' ( in 4-component vector of float)
+0:273        'parti' ( temp 4-component vector of uint)
+0:274      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:274        'f4' ( in 4-component vector of float)
+0:274        'parti' ( temp 4-component vector of uint)
+0:275      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:275        'f4' ( in 4-component vector of float)
+0:275        'parti' ( temp 4-component vector of uint)
+0:276      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:276        'ballot' ( temp 4-component vector of uint)
+0:276        'parti' ( temp 4-component vector of uint)
+0:277      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:277        'ballot' ( temp 4-component vector of uint)
+0:277        'parti' ( temp 4-component vector of uint)
+0:278      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:278        'ballot' ( temp 4-component vector of uint)
+0:278        'parti' ( temp 4-component vector of uint)
+0:279      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:279        'f4' ( in 4-component vector of float)
+0:279        'parti' ( temp 4-component vector of uint)
+0:280      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:280        'f4' ( in 4-component vector of float)
+0:280        'parti' ( temp 4-component vector of uint)
+0:281      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:281        'f4' ( in 4-component vector of float)
+0:281        'parti' ( temp 4-component vector of uint)
+0:282      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:282        'f4' ( in 4-component vector of float)
+0:282        'parti' ( temp 4-component vector of uint)
+0:283      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:283        'ballot' ( temp 4-component vector of uint)
+0:283        'parti' ( temp 4-component vector of uint)
+0:284      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:284        'ballot' ( temp 4-component vector of uint)
+0:284        'parti' ( temp 4-component vector of uint)
+0:285      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:285        'ballot' ( temp 4-component vector of uint)
+0:285        'parti' ( temp 4-component vector of uint)
+0:286      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:286        'f4' ( in 4-component vector of float)
+0:286        'parti' ( temp 4-component vector of uint)
+0:287      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:287        'f4' ( in 4-component vector of float)
+0:287        'parti' ( temp 4-component vector of uint)
+0:288      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:288        'f4' ( in 4-component vector of float)
+0:288        'parti' ( temp 4-component vector of uint)
+0:289      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:289        'f4' ( in 4-component vector of float)
+0:289        'parti' ( temp 4-component vector of uint)
+0:290      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:290        'ballot' ( temp 4-component vector of uint)
+0:290        'parti' ( temp 4-component vector of uint)
+0:291      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:291        'ballot' ( temp 4-component vector of uint)
+0:291        'parti' ( temp 4-component vector of uint)
+0:292      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:292        'ballot' ( temp 4-component vector of uint)
+0:292        'parti' ( temp 4-component vector of uint)
+0:296  Function Definition: sm_builtins_err( ( global void)
+0:296    Function Parameters: 
+0:298    Sequence
+0:298      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:299      'gl_SMCountNV' ( in uint SMCountNV)
+0:300      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:301      'gl_SMIDNV' ( in uint SMIDNV)
+0:308  Function Definition: sm_builtins( ( global void)
+0:308    Function Parameters: 
+0:310    Sequence
+0:310      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:311      'gl_SMCountNV' ( in uint SMCountNV)
+0:312      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:313      'gl_SMIDNV' ( in uint SMIDNV)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       32 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of unsized-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of unsized-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:?     'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out unsized 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of unsized-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:?     'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+
+
+Linked mesh stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_mesh_shader
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+max_vertices = 81
+max_primitives = 32
+output primitive = triangles
+local_size = (32, 1, 1)
+ERROR: node is still EOpNull!
+0:120  Function Definition: main( ( global void)
+0:120    Function Parameters: 
+0:122    Sequence
+0:122      Sequence
+0:122        move second child to first child ( temp uint)
+0:122          'iid' ( temp uint)
+0:122          direct index ( temp uint)
+0:122            'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:122            Constant:
+0:122              0 (const int)
+0:123      Sequence
+0:123        move second child to first child ( temp uint)
+0:123          'gid' ( temp uint)
+0:123          direct index ( temp uint)
+0:123            'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:123            Constant:
+0:123              0 (const int)
+0:125      move second child to first child ( temp 4-component vector of float)
+0:125        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:125          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:125            'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:125            'iid' ( temp uint)
+0:125          Constant:
+0:125            0 (const int)
+0:125        Constant:
+0:125          1.000000
+0:125          1.000000
+0:125          1.000000
+0:125          1.000000
+0:126      move second child to first child ( temp float)
+0:126        gl_PointSize: direct index for structure ( out float PointSize)
+0:126          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:126            'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:126            'iid' ( temp uint)
+0:126          Constant:
+0:126            1 (const int)
+0:126        Constant:
+0:126          2.000000
+0:127      move second child to first child ( temp float)
+0:127        direct index ( temp float ClipDistance)
+0:127          gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)
+0:127            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:127              'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:127              'iid' ( temp uint)
+0:127            Constant:
+0:127              2 (const int)
+0:127          Constant:
+0:127            3 (const int)
+0:127        Constant:
+0:127          3.000000
+0:128      move second child to first child ( temp float)
+0:128        direct index ( temp float CullDistance)
+0:128          gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance)
+0:128            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:128              'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:128              'iid' ( temp uint)
+0:128            Constant:
+0:128              3 (const int)
+0:128          Constant:
+0:128            2 (const int)
+0:128        Constant:
+0:128          4.000000
+0:130      MemoryBarrierShared ( global void)
+0:130      Barrier ( global void)
+0:132      move second child to first child ( temp 4-component vector of float)
+0:132        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:132          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:132            'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:132            add ( temp uint)
+0:132              'iid' ( temp uint)
+0:132              Constant:
+0:132                1 (const uint)
+0:132          Constant:
+0:132            0 (const int)
+0:132        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:132          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:132            'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:132            'iid' ( temp uint)
+0:132          Constant:
+0:132            0 (const int)
+0:133      move second child to first child ( temp float)
+0:133        gl_PointSize: direct index for structure ( out float PointSize)
+0:133          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:133            'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:133            add ( temp uint)
+0:133              'iid' ( temp uint)
+0:133              Constant:
+0:133                1 (const uint)
+0:133          Constant:
+0:133            1 (const int)
+0:133        gl_PointSize: direct index for structure ( out float PointSize)
+0:133          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:133            'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:133            'iid' ( temp uint)
+0:133          Constant:
+0:133            1 (const int)
+0:134      move second child to first child ( temp float)
+0:134        direct index ( temp float ClipDistance)
+0:134          gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)
+0:134            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:134              'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:134              add ( temp uint)
+0:134                'iid' ( temp uint)
+0:134                Constant:
+0:134                  1 (const uint)
+0:134            Constant:
+0:134              2 (const int)
+0:134          Constant:
+0:134            3 (const int)
+0:134        direct index ( temp float ClipDistance)
+0:134          gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)
+0:134            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:134              'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:134              'iid' ( temp uint)
+0:134            Constant:
+0:134              2 (const int)
+0:134          Constant:
+0:134            3 (const int)
+0:135      move second child to first child ( temp float)
+0:135        direct index ( temp float CullDistance)
+0:135          gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance)
+0:135            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:135              'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:135              add ( temp uint)
+0:135                'iid' ( temp uint)
+0:135                Constant:
+0:135                  1 (const uint)
+0:135            Constant:
+0:135              3 (const int)
+0:135          Constant:
+0:135            2 (const int)
+0:135        direct index ( temp float CullDistance)
+0:135          gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance)
+0:135            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:135              'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:135              'iid' ( temp uint)
+0:135            Constant:
+0:135              3 (const int)
+0:135          Constant:
+0:135            2 (const int)
+0:137      MemoryBarrierShared ( global void)
+0:137      Barrier ( global void)
+0:139      move second child to first child ( temp int)
+0:139        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:139          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:139            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:139            'iid' ( temp uint)
+0:139          Constant:
+0:139            0 (const int)
+0:139        Constant:
+0:139          6 (const int)
+0:140      move second child to first child ( temp int)
+0:140        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:140          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:140            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:140            'iid' ( temp uint)
+0:140          Constant:
+0:140            1 (const int)
+0:140        Constant:
+0:140          7 (const int)
+0:141      move second child to first child ( temp int)
+0:141        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:141          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:141            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:141            'iid' ( temp uint)
+0:141          Constant:
+0:141            2 (const int)
+0:141        Constant:
+0:141          8 (const int)
+0:142      move second child to first child ( temp int)
+0:142        direct index ( perprimitiveNV temp int ViewportMaskNV)
+0:142          gl_ViewportMask: direct index for structure ( perprimitiveNV out 1-element array of int ViewportMaskNV)
+0:142            indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:142              'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:142              'iid' ( temp uint)
+0:142            Constant:
+0:142              3 (const int)
+0:142          Constant:
+0:142            0 (const int)
+0:142        Constant:
+0:142          9 (const int)
+0:144      MemoryBarrierShared ( global void)
+0:144      Barrier ( global void)
+0:146      move second child to first child ( temp int)
+0:146        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:146          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:146            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:146            add ( temp uint)
+0:146              'iid' ( temp uint)
+0:146              Constant:
+0:146                1 (const uint)
+0:146          Constant:
+0:146            0 (const int)
+0:146        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:146          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:146            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:146            'iid' ( temp uint)
+0:146          Constant:
+0:146            0 (const int)
+0:147      move second child to first child ( temp int)
+0:147        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:147          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:147            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:147            add ( temp uint)
+0:147              'iid' ( temp uint)
+0:147              Constant:
+0:147                1 (const uint)
+0:147          Constant:
+0:147            1 (const int)
+0:147        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:147          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:147            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:147            'iid' ( temp uint)
+0:147          Constant:
+0:147            1 (const int)
+0:148      move second child to first child ( temp int)
+0:148        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:148          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:148            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:148            add ( temp uint)
+0:148              'iid' ( temp uint)
+0:148              Constant:
+0:148                1 (const uint)
+0:148          Constant:
+0:148            2 (const int)
+0:148        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:148          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:148            'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:148            'iid' ( temp uint)
+0:148          Constant:
+0:148            2 (const int)
+0:149      move second child to first child ( temp int)
+0:149        direct index ( perprimitiveNV temp int ViewportMaskNV)
+0:149          gl_ViewportMask: direct index for structure ( perprimitiveNV out 1-element array of int ViewportMaskNV)
+0:149            indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:149              'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:149              add ( temp uint)
+0:149                'iid' ( temp uint)
+0:149                Constant:
+0:149                  1 (const uint)
+0:149            Constant:
+0:149              3 (const int)
+0:149          Constant:
+0:149            0 (const int)
+0:149        direct index ( perprimitiveNV temp int ViewportMaskNV)
+0:149          gl_ViewportMask: direct index for structure ( perprimitiveNV out 1-element array of int ViewportMaskNV)
+0:149            indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:149              'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:149              'iid' ( temp uint)
+0:149            Constant:
+0:149              3 (const int)
+0:149          Constant:
+0:149            0 (const int)
+0:151      MemoryBarrierShared ( global void)
+0:151      Barrier ( global void)
+0:154      move second child to first child ( temp uint)
+0:154        direct index ( temp uint PrimitiveIndicesNV)
+0:154          'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+0:154          Constant:
+0:154            0 (const int)
+0:154        Constant:
+0:154          257 (const uint)
+0:155      move second child to first child ( temp uint)
+0:155        direct index ( temp uint PrimitiveIndicesNV)
+0:155          'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+0:155          Constant:
+0:155            95 (const int)
+0:155        Constant:
+0:155          2 (const uint)
+0:156      move second child to first child ( temp uint)
+0:156        indirect index ( temp uint PrimitiveIndicesNV)
+0:156          'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+0:156          'gid' ( temp uint)
+0:156        indirect index ( temp uint PrimitiveIndicesNV)
+0:156          'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+0:156          subtract ( temp uint)
+0:156            'gid' ( temp uint)
+0:156            Constant:
+0:156              1 (const uint)
+0:159      writePackedPrimitiveIndices4x8NV ( global void)
+0:159        Convert int to uint ( temp uint)
+0:159          'gl_DrawID' ( in int DrawId)
+0:159        Constant:
+0:159          16909060 (const uint)
+0:161      move second child to first child ( temp uint)
+0:161        'gl_PrimitiveCountNV' ( out uint PrimitiveCountNV)
+0:161        Constant:
+0:161          96 (const uint)
+0:163      MemoryBarrierShared ( global void)
+0:163      Barrier ( global void)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       32 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'gl_MeshVerticesNV' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance,  perviewNV out 4-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV,  perviewNV out 4-element array of 1-element array of float ClipDistancePerViewNV gl_ClipDistancePerViewNV,  perviewNV out 4-element array of 1-element array of float CullDistancePerViewNV gl_CullDistancePerViewNV})
+0:?     'gl_MeshPrimitivesNV' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out 1-element array of int ViewportMaskNV gl_ViewportMask,  perprimitiveNV perviewNV out 4-element array of int LayerPerViewNV gl_LayerPerViewNV,  perprimitiveNV perviewNV out 4-element array of 1-element array of int ViewportMaskPerViewNV gl_ViewportMaskPerViewNV})
+0:?     'gl_PrimitiveIndicesNV' ( out 96-element array of uint PrimitiveIndicesNV)
+
diff --git a/Test/baseResults/glsl.460.subgroup.rahit.out b/Test/baseResults/glsl.460.subgroup.rahit.out
new file mode 100644
index 0000000..0a1e4f4
--- /dev/null
+++ b/Test/baseResults/glsl.460.subgroup.rahit.out
@@ -0,0 +1,795 @@
+glsl.460.subgroup.rahit
+ERROR: 0:7: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_NumSubgroups' : undeclared identifier 
+ERROR: 0:15: 'gl_SubgroupID' : undeclared identifier 
+ERROR: 0:16: 'subgroupMemoryBarrierShared' : no matching overloaded function found 
+ERROR: 0:18: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:22: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:38: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:41: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:43: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:65: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:73: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:78: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:259: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:260: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:261: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:262: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:4  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:4    Function Parameters: 
+0:4      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:7      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:8      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:9      subgroupBarrier ( global void)
+0:10      subgroupMemoryBarrier ( global void)
+0:11      subgroupMemoryBarrierBuffer ( global void)
+0:12      subgroupMemoryBarrierImage ( global void)
+0:13      subgroupElect ( global bool)
+0:14      'gl_NumSubgroups' ( temp float)
+0:15      'gl_SubgroupID' ( temp float)
+0:16      Constant:
+0:16        0.000000
+0:18      subgroupAll ( global bool)
+0:18        Constant:
+0:18          true (const bool)
+0:19      subgroupAny ( global bool)
+0:19        Constant:
+0:19          false (const bool)
+0:20      subgroupAllEqual ( global bool)
+0:20        'f4' ( in 4-component vector of float)
+0:22      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:23      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:24      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:25      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:26      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:27      subgroupBroadcast ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:27        Constant:
+0:27          0 (const uint)
+0:28      subgroupBroadcastFirst ( global 4-component vector of float)
+0:28        'f4' ( in 4-component vector of float)
+0:29      Sequence
+0:29        move second child to first child ( temp 4-component vector of uint)
+0:29          'ballot' ( temp 4-component vector of uint)
+0:29          subgroupBallot ( global 4-component vector of uint)
+0:29            Constant:
+0:29              false (const bool)
+0:30      subgroupInverseBallot ( global bool)
+0:30        Constant:
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:31      subgroupBallotBitExtract ( global bool)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:31        Constant:
+0:31          0 (const uint)
+0:32      subgroupBallotBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotInclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotExclusiveBitCount ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindLSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:36      subgroupBallotFindMSB ( global uint)
+0:36        'ballot' ( temp 4-component vector of uint)
+0:38      subgroupShuffle ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          0 (const uint)
+0:39      subgroupShuffleXor ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleUp ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:41      subgroupShuffleDown ( global 4-component vector of float)
+0:41        'f4' ( in 4-component vector of float)
+0:41        Constant:
+0:41          1 (const uint)
+0:43      move second child to first child ( temp 4-component vector of float)
+0:43        'result' ( temp 4-component vector of float)
+0:43        subgroupAdd ( global 4-component vector of float)
+0:43          'f4' ( in 4-component vector of float)
+0:44      subgroupMul ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMin ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupMax ( global 4-component vector of float)
+0:46        'f4' ( in 4-component vector of float)
+0:47      subgroupAnd ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupOr ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupXor ( global 4-component vector of uint)
+0:49        'ballot' ( temp 4-component vector of uint)
+0:50      subgroupInclusiveAdd ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMul ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMin ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveMax ( global 4-component vector of float)
+0:53        'f4' ( in 4-component vector of float)
+0:54      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveOr ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupInclusiveXor ( global 4-component vector of uint)
+0:56        'ballot' ( temp 4-component vector of uint)
+0:57      subgroupExclusiveAdd ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMul ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMin ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveMax ( global 4-component vector of float)
+0:60        'f4' ( in 4-component vector of float)
+0:61      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveOr ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:63      subgroupExclusiveXor ( global 4-component vector of uint)
+0:63        'ballot' ( temp 4-component vector of uint)
+0:65      subgroupClusteredAdd ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMul ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMin ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredMax ( global 4-component vector of float)
+0:68        'f4' ( in 4-component vector of float)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredAnd ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredOr ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:71      subgroupClusteredXor ( global 4-component vector of uint)
+0:71        'ballot' ( temp 4-component vector of uint)
+0:71        Constant:
+0:71          2 (const uint)
+0:73      subgroupQuadBroadcast ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:73        Constant:
+0:73          0 (const uint)
+0:74      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:76      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:76        'f4' ( in 4-component vector of float)
+0:78      Sequence
+0:78        move second child to first child ( temp 4-component vector of uint)
+0:78          'parti' ( temp 4-component vector of uint)
+0:78          subgroupPartitionNV ( global 4-component vector of uint)
+0:78            'f4' ( in 4-component vector of float)
+0:79      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:79        'f4' ( in 4-component vector of float)
+0:79        'parti' ( temp 4-component vector of uint)
+0:80      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:82        'f4' ( in 4-component vector of float)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:83        'ballot' ( temp 4-component vector of uint)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:85        'ballot' ( temp 4-component vector of uint)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:86        'f4' ( in 4-component vector of float)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:89        'f4' ( in 4-component vector of float)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:90        'ballot' ( temp 4-component vector of uint)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:92        'ballot' ( temp 4-component vector of uint)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:93        'f4' ( in 4-component vector of float)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:96        'f4' ( in 4-component vector of float)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:97        'ballot' ( temp 4-component vector of uint)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:99      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:99        'ballot' ( temp 4-component vector of uint)
+0:99        'parti' ( temp 4-component vector of uint)
+0:101      Branch: Return with expression
+0:101        'result' ( temp 4-component vector of float)
+0:106  Function Definition: main( ( global void)
+0:106    Function Parameters: 
+0:108    Sequence
+0:108      Sequence
+0:108        move second child to first child ( temp 3-component vector of uint)
+0:108          'v0' ( temp 3-component vector of uint)
+0:108          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:109      Sequence
+0:109        move second child to first child ( temp 3-component vector of uint)
+0:109          'v1' ( temp 3-component vector of uint)
+0:109          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:110      Sequence
+0:110        move second child to first child ( temp int)
+0:110          'v2' ( temp int)
+0:110          'gl_PrimitiveID' ( in int PrimitiveID)
+0:111      Sequence
+0:111        move second child to first child ( temp int)
+0:111          'v3' ( temp int)
+0:111          'gl_InstanceID' ( in int InstanceId)
+0:112      Sequence
+0:112        move second child to first child ( temp int)
+0:112          'v4' ( temp int)
+0:112          'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:113      Sequence
+0:113        move second child to first child ( temp 3-component vector of float)
+0:113          'v5' ( temp 3-component vector of float)
+0:113          'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:114      Sequence
+0:114        move second child to first child ( temp 3-component vector of float)
+0:114          'v6' ( temp 3-component vector of float)
+0:114          'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:115      Sequence
+0:115        move second child to first child ( temp 3-component vector of float)
+0:115          'v7' ( temp 3-component vector of float)
+0:115          'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:116      Sequence
+0:116        move second child to first child ( temp 3-component vector of float)
+0:116          'v8' ( temp 3-component vector of float)
+0:116          'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:117      Sequence
+0:117        move second child to first child ( temp float)
+0:117          'v9' ( temp float)
+0:117          'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:118      Sequence
+0:118        move second child to first child ( temp float)
+0:118          'v10' ( temp float)
+0:118          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:119      Sequence
+0:119        move second child to first child ( temp float)
+0:119          'v11' ( temp float)
+0:119          'gl_HitTNV' ( in float HitTNV)
+0:120      Sequence
+0:120        move second child to first child ( temp uint)
+0:120          'v12' ( temp uint)
+0:120          'gl_HitKindNV' ( in uint HitKindNV)
+0:121      Sequence
+0:121        move second child to first child ( temp 4X3 matrix of float)
+0:121          'v13' ( temp 4X3 matrix of float)
+0:121          'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:122      Sequence
+0:122        move second child to first child ( temp 4X3 matrix of float)
+0:122          'v14' ( temp 4X3 matrix of float)
+0:122          'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:123      move second child to first child ( temp 4-component vector of float)
+0:123        'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+0:123        Constant:
+0:123          0.500000
+0:123          0.500000
+0:123          0.500000
+0:123          0.500000
+0:124      Test condition and select ( temp void)
+0:124        Condition
+0:124        Compare Equal ( temp bool)
+0:124          'v2' ( temp int)
+0:124          Constant:
+0:124            1 (const int)
+0:124        true case
+0:125        ignoreIntersectionNV ( global void)
+0:124        false case
+0:127        terminateRayNV ( global void)
+0:131  Function Definition: basic_works( ( global void)
+0:131    Function Parameters: 
+0:133    Sequence
+0:133      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:134      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:135      subgroupBarrier ( global void)
+0:136      subgroupMemoryBarrier ( global void)
+0:137      subgroupMemoryBarrierBuffer ( global void)
+0:138      subgroupMemoryBarrierImage ( global void)
+0:139      subgroupElect ( global bool)
+0:143  Function Definition: ballot_works(vf4; ( global void)
+0:143    Function Parameters: 
+0:143      'f4' ( in 4-component vector of float)
+0:144    Sequence
+0:144      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:145      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:146      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:147      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:148      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:149      subgroupBroadcast ( global 4-component vector of float)
+0:149        'f4' ( in 4-component vector of float)
+0:149        Constant:
+0:149          0 (const uint)
+0:150      subgroupBroadcastFirst ( global 4-component vector of float)
+0:150        'f4' ( in 4-component vector of float)
+0:151      Sequence
+0:151        move second child to first child ( temp 4-component vector of uint)
+0:151          'ballot' ( temp 4-component vector of uint)
+0:151          subgroupBallot ( global 4-component vector of uint)
+0:151            Constant:
+0:151              false (const bool)
+0:152      subgroupInverseBallot ( global bool)
+0:152        Constant:
+0:152          1 (const uint)
+0:152          1 (const uint)
+0:152          1 (const uint)
+0:152          1 (const uint)
+0:153      subgroupBallotBitExtract ( global bool)
+0:153        'ballot' ( temp 4-component vector of uint)
+0:153        Constant:
+0:153          0 (const uint)
+0:154      subgroupBallotBitCount ( global uint)
+0:154        'ballot' ( temp 4-component vector of uint)
+0:155      subgroupBallotInclusiveBitCount ( global uint)
+0:155        'ballot' ( temp 4-component vector of uint)
+0:156      subgroupBallotExclusiveBitCount ( global uint)
+0:156        'ballot' ( temp 4-component vector of uint)
+0:157      subgroupBallotFindLSB ( global uint)
+0:157        'ballot' ( temp 4-component vector of uint)
+0:158      subgroupBallotFindMSB ( global uint)
+0:158        'ballot' ( temp 4-component vector of uint)
+0:162  Function Definition: vote_works(vf4; ( global void)
+0:162    Function Parameters: 
+0:162      'f4' ( in 4-component vector of float)
+0:164    Sequence
+0:164      subgroupAll ( global bool)
+0:164        Constant:
+0:164          true (const bool)
+0:165      subgroupAny ( global bool)
+0:165        Constant:
+0:165          false (const bool)
+0:166      subgroupAllEqual ( global bool)
+0:166        'f4' ( in 4-component vector of float)
+0:171  Function Definition: shuffle_works(vf4; ( global void)
+0:171    Function Parameters: 
+0:171      'f4' ( in 4-component vector of float)
+0:173    Sequence
+0:173      subgroupShuffle ( global 4-component vector of float)
+0:173        'f4' ( in 4-component vector of float)
+0:173        Constant:
+0:173          0 (const uint)
+0:174      subgroupShuffleXor ( global 4-component vector of float)
+0:174        'f4' ( in 4-component vector of float)
+0:174        Constant:
+0:174          1 (const uint)
+0:175      subgroupShuffleUp ( global 4-component vector of float)
+0:175        'f4' ( in 4-component vector of float)
+0:175        Constant:
+0:175          1 (const uint)
+0:176      subgroupShuffleDown ( global 4-component vector of float)
+0:176        'f4' ( in 4-component vector of float)
+0:176        Constant:
+0:176          1 (const uint)
+0:180  Function Definition: arith_works(vf4; ( global void)
+0:180    Function Parameters: 
+0:180      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:183      subgroupAdd ( global 4-component vector of float)
+0:183        'f4' ( in 4-component vector of float)
+0:184      subgroupMul ( global 4-component vector of float)
+0:184        'f4' ( in 4-component vector of float)
+0:185      subgroupMin ( global 4-component vector of float)
+0:185        'f4' ( in 4-component vector of float)
+0:186      subgroupMax ( global 4-component vector of float)
+0:186        'f4' ( in 4-component vector of float)
+0:187      subgroupAnd ( global 4-component vector of uint)
+0:187        'ballot' ( temp 4-component vector of uint)
+0:188      subgroupOr ( global 4-component vector of uint)
+0:188        'ballot' ( temp 4-component vector of uint)
+0:189      subgroupXor ( global 4-component vector of uint)
+0:189        'ballot' ( temp 4-component vector of uint)
+0:190      subgroupInclusiveAdd ( global 4-component vector of float)
+0:190        'f4' ( in 4-component vector of float)
+0:191      subgroupInclusiveMul ( global 4-component vector of float)
+0:191        'f4' ( in 4-component vector of float)
+0:192      subgroupInclusiveMin ( global 4-component vector of float)
+0:192        'f4' ( in 4-component vector of float)
+0:193      subgroupInclusiveMax ( global 4-component vector of float)
+0:193        'f4' ( in 4-component vector of float)
+0:194      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:194        'ballot' ( temp 4-component vector of uint)
+0:195      subgroupInclusiveOr ( global 4-component vector of uint)
+0:195        'ballot' ( temp 4-component vector of uint)
+0:196      subgroupInclusiveXor ( global 4-component vector of uint)
+0:196        'ballot' ( temp 4-component vector of uint)
+0:197      subgroupExclusiveAdd ( global 4-component vector of float)
+0:197        'f4' ( in 4-component vector of float)
+0:198      subgroupExclusiveMul ( global 4-component vector of float)
+0:198        'f4' ( in 4-component vector of float)
+0:199      subgroupExclusiveMin ( global 4-component vector of float)
+0:199        'f4' ( in 4-component vector of float)
+0:200      subgroupExclusiveMax ( global 4-component vector of float)
+0:200        'f4' ( in 4-component vector of float)
+0:201      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:201        'ballot' ( temp 4-component vector of uint)
+0:202      subgroupExclusiveOr ( global 4-component vector of uint)
+0:202        'ballot' ( temp 4-component vector of uint)
+0:203      subgroupExclusiveXor ( global 4-component vector of uint)
+0:203        'ballot' ( temp 4-component vector of uint)
+0:207  Function Definition: clustered_works(vf4; ( global void)
+0:207    Function Parameters: 
+0:207      'f4' ( in 4-component vector of float)
+0:209    Sequence
+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      subgroupClusteredAdd ( global 4-component vector of float)
+0:210        'f4' ( in 4-component vector of float)
+0:210        Constant:
+0:210          2 (const uint)
+0:211      subgroupClusteredMul ( global 4-component vector of float)
+0:211        'f4' ( in 4-component vector of float)
+0:211        Constant:
+0:211          2 (const uint)
+0:212      subgroupClusteredMin ( global 4-component vector of float)
+0:212        'f4' ( in 4-component vector of float)
+0:212        Constant:
+0:212          2 (const uint)
+0:213      subgroupClusteredMax ( global 4-component vector of float)
+0:213        'f4' ( in 4-component vector of float)
+0:213        Constant:
+0:213          2 (const uint)
+0:214      subgroupClusteredAnd ( global 4-component vector of uint)
+0:214        'ballot' ( temp 4-component vector of uint)
+0:214        Constant:
+0:214          2 (const uint)
+0:215      subgroupClusteredOr ( global 4-component vector of uint)
+0:215        'ballot' ( temp 4-component vector of uint)
+0:215        Constant:
+0:215          2 (const uint)
+0:216      subgroupClusteredXor ( global 4-component vector of uint)
+0:216        'ballot' ( temp 4-component vector of uint)
+0:216        Constant:
+0:216          2 (const uint)
+0:220  Function Definition: quad_works(vf4; ( global void)
+0:220    Function Parameters: 
+0:220      'f4' ( in 4-component vector of float)
+0:222    Sequence
+0:222      subgroupQuadBroadcast ( global 4-component vector of float)
+0:222        'f4' ( in 4-component vector of float)
+0:222        Constant:
+0:222          0 (const uint)
+0:223      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:223        'f4' ( in 4-component vector of float)
+0:224      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:224        'f4' ( in 4-component vector of float)
+0:225      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:225        'f4' ( in 4-component vector of float)
+0:229  Function Definition: partitioned_works(vf4; ( global void)
+0:229    Function Parameters: 
+0:229      'f4' ( in 4-component vector of float)
+0:231    Sequence
+0:231      Sequence
+0:231        move second child to first child ( temp 4-component vector of uint)
+0:231          'parti' ( temp 4-component vector of uint)
+0:231          subgroupPartitionNV ( global 4-component vector of uint)
+0:231            'f4' ( in 4-component vector of float)
+0:232      Sequence
+0:232        move second child to first child ( temp 4-component vector of uint)
+0:232          'ballot' ( temp 4-component vector of uint)
+0:232          Constant:
+0:232            85 (const uint)
+0:232            0 (const uint)
+0:232            0 (const uint)
+0:232            0 (const uint)
+0:233      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:233        'f4' ( in 4-component vector of float)
+0:233        'parti' ( temp 4-component vector of uint)
+0:234      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:234        'f4' ( in 4-component vector of float)
+0:234        'parti' ( temp 4-component vector of uint)
+0:235      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:235        'f4' ( in 4-component vector of float)
+0:235        'parti' ( temp 4-component vector of uint)
+0:236      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:236        'f4' ( in 4-component vector of float)
+0:236        'parti' ( temp 4-component vector of uint)
+0:237      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:237        'ballot' ( temp 4-component vector of uint)
+0:237        'parti' ( temp 4-component vector of uint)
+0:238      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:238        'ballot' ( temp 4-component vector of uint)
+0:238        'parti' ( temp 4-component vector of uint)
+0:239      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:239        'ballot' ( temp 4-component vector of uint)
+0:239        'parti' ( temp 4-component vector of uint)
+0:240      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:240        'f4' ( in 4-component vector of float)
+0:240        'parti' ( temp 4-component vector of uint)
+0:241      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:241        'f4' ( in 4-component vector of float)
+0:241        'parti' ( temp 4-component vector of uint)
+0:242      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:242        'f4' ( in 4-component vector of float)
+0:242        'parti' ( temp 4-component vector of uint)
+0:243      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:243        'f4' ( in 4-component vector of float)
+0:243        'parti' ( temp 4-component vector of uint)
+0:244      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:244        'ballot' ( temp 4-component vector of uint)
+0:244        'parti' ( temp 4-component vector of uint)
+0:245      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:245        'ballot' ( temp 4-component vector of uint)
+0:245        'parti' ( temp 4-component vector of uint)
+0:246      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:246        'ballot' ( temp 4-component vector of uint)
+0:246        'parti' ( temp 4-component vector of uint)
+0:247      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:247        'f4' ( in 4-component vector of float)
+0:247        'parti' ( temp 4-component vector of uint)
+0:248      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:248        'f4' ( in 4-component vector of float)
+0:248        'parti' ( temp 4-component vector of uint)
+0:249      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:249        'f4' ( in 4-component vector of float)
+0:249        'parti' ( temp 4-component vector of uint)
+0:250      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:250        'f4' ( in 4-component vector of float)
+0:250        'parti' ( temp 4-component vector of uint)
+0:251      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:251        'ballot' ( temp 4-component vector of uint)
+0:251        'parti' ( temp 4-component vector of uint)
+0:252      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:252        'ballot' ( temp 4-component vector of uint)
+0:252        'parti' ( temp 4-component vector of uint)
+0:253      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:253        'ballot' ( temp 4-component vector of uint)
+0:253        'parti' ( temp 4-component vector of uint)
+0:257  Function Definition: sm_builtins_err( ( global void)
+0:257    Function Parameters: 
+0:259    Sequence
+0:259      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:260      'gl_SMCountNV' ( in uint SMCountNV)
+0:261      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:262      'gl_SMIDNV' ( in uint SMIDNV)
+0:269  Function Definition: sm_builtins( ( global void)
+0:269    Function Parameters: 
+0:271    Sequence
+0:271      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:272      'gl_SMCountNV' ( in uint SMCountNV)
+0:273      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:274      'gl_SMIDNV' ( in uint SMIDNV)
+0:?   Linker Objects
+0:?     'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
+
+Linked any-hit stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:106  Function Definition: main( ( global void)
+0:106    Function Parameters: 
+0:108    Sequence
+0:108      Sequence
+0:108        move second child to first child ( temp 3-component vector of uint)
+0:108          'v0' ( temp 3-component vector of uint)
+0:108          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:109      Sequence
+0:109        move second child to first child ( temp 3-component vector of uint)
+0:109          'v1' ( temp 3-component vector of uint)
+0:109          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:110      Sequence
+0:110        move second child to first child ( temp int)
+0:110          'v2' ( temp int)
+0:110          'gl_PrimitiveID' ( in int PrimitiveID)
+0:111      Sequence
+0:111        move second child to first child ( temp int)
+0:111          'v3' ( temp int)
+0:111          'gl_InstanceID' ( in int InstanceId)
+0:112      Sequence
+0:112        move second child to first child ( temp int)
+0:112          'v4' ( temp int)
+0:112          'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:113      Sequence
+0:113        move second child to first child ( temp 3-component vector of float)
+0:113          'v5' ( temp 3-component vector of float)
+0:113          'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:114      Sequence
+0:114        move second child to first child ( temp 3-component vector of float)
+0:114          'v6' ( temp 3-component vector of float)
+0:114          'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:115      Sequence
+0:115        move second child to first child ( temp 3-component vector of float)
+0:115          'v7' ( temp 3-component vector of float)
+0:115          'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:116      Sequence
+0:116        move second child to first child ( temp 3-component vector of float)
+0:116          'v8' ( temp 3-component vector of float)
+0:116          'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:117      Sequence
+0:117        move second child to first child ( temp float)
+0:117          'v9' ( temp float)
+0:117          'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:118      Sequence
+0:118        move second child to first child ( temp float)
+0:118          'v10' ( temp float)
+0:118          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:119      Sequence
+0:119        move second child to first child ( temp float)
+0:119          'v11' ( temp float)
+0:119          'gl_HitTNV' ( in float HitTNV)
+0:120      Sequence
+0:120        move second child to first child ( temp uint)
+0:120          'v12' ( temp uint)
+0:120          'gl_HitKindNV' ( in uint HitKindNV)
+0:121      Sequence
+0:121        move second child to first child ( temp 4X3 matrix of float)
+0:121          'v13' ( temp 4X3 matrix of float)
+0:121          'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:122      Sequence
+0:122        move second child to first child ( temp 4X3 matrix of float)
+0:122          'v14' ( temp 4X3 matrix of float)
+0:122          'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:123      move second child to first child ( temp 4-component vector of float)
+0:123        'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+0:123        Constant:
+0:123          0.500000
+0:123          0.500000
+0:123          0.500000
+0:123          0.500000
+0:124      Test condition and select ( temp void)
+0:124        Condition
+0:124        Compare Equal ( temp bool)
+0:124          'v2' ( temp int)
+0:124          Constant:
+0:124            1 (const int)
+0:124        true case
+0:125        ignoreIntersectionNV ( global void)
+0:124        false case
+0:127        terminateRayNV ( global void)
+0:?   Linker Objects
+0:?     'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
diff --git a/Test/baseResults/glsl.460.subgroup.rcall.out b/Test/baseResults/glsl.460.subgroup.rcall.out
new file mode 100644
index 0000000..6bffdc9
--- /dev/null
+++ b/Test/baseResults/glsl.460.subgroup.rcall.out
@@ -0,0 +1,683 @@
+glsl.460.subgroup.rcall
+ERROR: 0:7: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_NumSubgroups' : undeclared identifier 
+ERROR: 0:15: 'gl_SubgroupID' : undeclared identifier 
+ERROR: 0:16: 'subgroupMemoryBarrierShared' : no matching overloaded function found 
+ERROR: 0:18: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:22: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:38: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:41: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:43: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:65: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:73: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:78: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:247: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:248: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:249: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:250: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:4  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:4    Function Parameters: 
+0:4      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:7      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:8      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:9      subgroupBarrier ( global void)
+0:10      subgroupMemoryBarrier ( global void)
+0:11      subgroupMemoryBarrierBuffer ( global void)
+0:12      subgroupMemoryBarrierImage ( global void)
+0:13      subgroupElect ( global bool)
+0:14      'gl_NumSubgroups' ( temp float)
+0:15      'gl_SubgroupID' ( temp float)
+0:16      Constant:
+0:16        0.000000
+0:18      subgroupAll ( global bool)
+0:18        Constant:
+0:18          true (const bool)
+0:19      subgroupAny ( global bool)
+0:19        Constant:
+0:19          false (const bool)
+0:20      subgroupAllEqual ( global bool)
+0:20        'f4' ( in 4-component vector of float)
+0:22      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:23      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:24      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:25      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:26      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:27      subgroupBroadcast ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:27        Constant:
+0:27          0 (const uint)
+0:28      subgroupBroadcastFirst ( global 4-component vector of float)
+0:28        'f4' ( in 4-component vector of float)
+0:29      Sequence
+0:29        move second child to first child ( temp 4-component vector of uint)
+0:29          'ballot' ( temp 4-component vector of uint)
+0:29          subgroupBallot ( global 4-component vector of uint)
+0:29            Constant:
+0:29              false (const bool)
+0:30      subgroupInverseBallot ( global bool)
+0:30        Constant:
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:31      subgroupBallotBitExtract ( global bool)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:31        Constant:
+0:31          0 (const uint)
+0:32      subgroupBallotBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotInclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotExclusiveBitCount ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindLSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:36      subgroupBallotFindMSB ( global uint)
+0:36        'ballot' ( temp 4-component vector of uint)
+0:38      subgroupShuffle ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          0 (const uint)
+0:39      subgroupShuffleXor ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleUp ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:41      subgroupShuffleDown ( global 4-component vector of float)
+0:41        'f4' ( in 4-component vector of float)
+0:41        Constant:
+0:41          1 (const uint)
+0:43      move second child to first child ( temp 4-component vector of float)
+0:43        'result' ( temp 4-component vector of float)
+0:43        subgroupAdd ( global 4-component vector of float)
+0:43          'f4' ( in 4-component vector of float)
+0:44      subgroupMul ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMin ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupMax ( global 4-component vector of float)
+0:46        'f4' ( in 4-component vector of float)
+0:47      subgroupAnd ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupOr ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupXor ( global 4-component vector of uint)
+0:49        'ballot' ( temp 4-component vector of uint)
+0:50      subgroupInclusiveAdd ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMul ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMin ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveMax ( global 4-component vector of float)
+0:53        'f4' ( in 4-component vector of float)
+0:54      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveOr ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupInclusiveXor ( global 4-component vector of uint)
+0:56        'ballot' ( temp 4-component vector of uint)
+0:57      subgroupExclusiveAdd ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMul ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMin ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveMax ( global 4-component vector of float)
+0:60        'f4' ( in 4-component vector of float)
+0:61      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveOr ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:63      subgroupExclusiveXor ( global 4-component vector of uint)
+0:63        'ballot' ( temp 4-component vector of uint)
+0:65      subgroupClusteredAdd ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMul ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMin ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredMax ( global 4-component vector of float)
+0:68        'f4' ( in 4-component vector of float)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredAnd ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredOr ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:71      subgroupClusteredXor ( global 4-component vector of uint)
+0:71        'ballot' ( temp 4-component vector of uint)
+0:71        Constant:
+0:71          2 (const uint)
+0:73      subgroupQuadBroadcast ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:73        Constant:
+0:73          0 (const uint)
+0:74      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:76      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:76        'f4' ( in 4-component vector of float)
+0:78      Sequence
+0:78        move second child to first child ( temp 4-component vector of uint)
+0:78          'parti' ( temp 4-component vector of uint)
+0:78          subgroupPartitionNV ( global 4-component vector of uint)
+0:78            'f4' ( in 4-component vector of float)
+0:79      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:79        'f4' ( in 4-component vector of float)
+0:79        'parti' ( temp 4-component vector of uint)
+0:80      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:82        'f4' ( in 4-component vector of float)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:83        'ballot' ( temp 4-component vector of uint)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:85        'ballot' ( temp 4-component vector of uint)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:86        'f4' ( in 4-component vector of float)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:89        'f4' ( in 4-component vector of float)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:90        'ballot' ( temp 4-component vector of uint)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:92        'ballot' ( temp 4-component vector of uint)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:93        'f4' ( in 4-component vector of float)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:96        'f4' ( in 4-component vector of float)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:97        'ballot' ( temp 4-component vector of uint)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:99      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:99        'ballot' ( temp 4-component vector of uint)
+0:99        'parti' ( temp 4-component vector of uint)
+0:101      Branch: Return with expression
+0:101        'result' ( temp 4-component vector of float)
+0:109  Function Definition: main( ( global void)
+0:109    Function Parameters: 
+0:111    Sequence
+0:111      Sequence
+0:111        move second child to first child ( temp 3-component vector of uint)
+0:111          'id' ( temp 3-component vector of uint)
+0:111          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:112      Sequence
+0:112        move second child to first child ( temp 3-component vector of uint)
+0:112          'size' ( temp 3-component vector of uint)
+0:112          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:113      move second child to first child ( temp uint)
+0:113        data1: direct index for structure ( callableDataInNV uint)
+0:113          'anon@0' (layout( location=1) callableDataInNV block{ callableDataInNV uint data1})
+0:113          Constant:
+0:113            0 (const uint)
+0:113        Constant:
+0:113          256 (const uint)
+0:114      executeCallableNV ( global void)
+0:114        Constant:
+0:114          2 (const uint)
+0:114        Constant:
+0:114          1 (const int)
+0:119  Function Definition: basic_works( ( global void)
+0:119    Function Parameters: 
+0:121    Sequence
+0:121      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:122      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:123      subgroupBarrier ( global void)
+0:124      subgroupMemoryBarrier ( global void)
+0:125      subgroupMemoryBarrierBuffer ( global void)
+0:126      subgroupMemoryBarrierImage ( global void)
+0:127      subgroupElect ( global bool)
+0:131  Function Definition: ballot_works(vf4; ( global void)
+0:131    Function Parameters: 
+0:131      'f4' ( in 4-component vector of float)
+0:132    Sequence
+0:132      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:133      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:134      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:135      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:136      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:137      subgroupBroadcast ( global 4-component vector of float)
+0:137        'f4' ( in 4-component vector of float)
+0:137        Constant:
+0:137          0 (const uint)
+0:138      subgroupBroadcastFirst ( global 4-component vector of float)
+0:138        'f4' ( in 4-component vector of float)
+0:139      Sequence
+0:139        move second child to first child ( temp 4-component vector of uint)
+0:139          'ballot' ( temp 4-component vector of uint)
+0:139          subgroupBallot ( global 4-component vector of uint)
+0:139            Constant:
+0:139              false (const bool)
+0:140      subgroupInverseBallot ( global bool)
+0:140        Constant:
+0:140          1 (const uint)
+0:140          1 (const uint)
+0:140          1 (const uint)
+0:140          1 (const uint)
+0:141      subgroupBallotBitExtract ( global bool)
+0:141        'ballot' ( temp 4-component vector of uint)
+0:141        Constant:
+0:141          0 (const uint)
+0:142      subgroupBallotBitCount ( global uint)
+0:142        'ballot' ( temp 4-component vector of uint)
+0:143      subgroupBallotInclusiveBitCount ( global uint)
+0:143        'ballot' ( temp 4-component vector of uint)
+0:144      subgroupBallotExclusiveBitCount ( global uint)
+0:144        'ballot' ( temp 4-component vector of uint)
+0:145      subgroupBallotFindLSB ( global uint)
+0:145        'ballot' ( temp 4-component vector of uint)
+0:146      subgroupBallotFindMSB ( global uint)
+0:146        'ballot' ( temp 4-component vector of uint)
+0:150  Function Definition: vote_works(vf4; ( global void)
+0:150    Function Parameters: 
+0:150      'f4' ( in 4-component vector of float)
+0:152    Sequence
+0:152      subgroupAll ( global bool)
+0:152        Constant:
+0:152          true (const bool)
+0:153      subgroupAny ( global bool)
+0:153        Constant:
+0:153          false (const bool)
+0:154      subgroupAllEqual ( global bool)
+0:154        'f4' ( in 4-component vector of float)
+0:159  Function Definition: shuffle_works(vf4; ( global void)
+0:159    Function Parameters: 
+0:159      'f4' ( in 4-component vector of float)
+0:161    Sequence
+0:161      subgroupShuffle ( global 4-component vector of float)
+0:161        'f4' ( in 4-component vector of float)
+0:161        Constant:
+0:161          0 (const uint)
+0:162      subgroupShuffleXor ( global 4-component vector of float)
+0:162        'f4' ( in 4-component vector of float)
+0:162        Constant:
+0:162          1 (const uint)
+0:163      subgroupShuffleUp ( global 4-component vector of float)
+0:163        'f4' ( in 4-component vector of float)
+0:163        Constant:
+0:163          1 (const uint)
+0:164      subgroupShuffleDown ( global 4-component vector of float)
+0:164        'f4' ( in 4-component vector of float)
+0:164        Constant:
+0:164          1 (const uint)
+0:168  Function Definition: arith_works(vf4; ( global void)
+0:168    Function Parameters: 
+0:168      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:171      subgroupAdd ( global 4-component vector of float)
+0:171        'f4' ( in 4-component vector of float)
+0:172      subgroupMul ( global 4-component vector of float)
+0:172        'f4' ( in 4-component vector of float)
+0:173      subgroupMin ( global 4-component vector of float)
+0:173        'f4' ( in 4-component vector of float)
+0:174      subgroupMax ( global 4-component vector of float)
+0:174        'f4' ( in 4-component vector of float)
+0:175      subgroupAnd ( global 4-component vector of uint)
+0:175        'ballot' ( temp 4-component vector of uint)
+0:176      subgroupOr ( global 4-component vector of uint)
+0:176        'ballot' ( temp 4-component vector of uint)
+0:177      subgroupXor ( global 4-component vector of uint)
+0:177        'ballot' ( temp 4-component vector of uint)
+0:178      subgroupInclusiveAdd ( global 4-component vector of float)
+0:178        'f4' ( in 4-component vector of float)
+0:179      subgroupInclusiveMul ( global 4-component vector of float)
+0:179        'f4' ( in 4-component vector of float)
+0:180      subgroupInclusiveMin ( global 4-component vector of float)
+0:180        'f4' ( in 4-component vector of float)
+0:181      subgroupInclusiveMax ( global 4-component vector of float)
+0:181        'f4' ( in 4-component vector of float)
+0:182      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:182        'ballot' ( temp 4-component vector of uint)
+0:183      subgroupInclusiveOr ( global 4-component vector of uint)
+0:183        'ballot' ( temp 4-component vector of uint)
+0:184      subgroupInclusiveXor ( global 4-component vector of uint)
+0:184        'ballot' ( temp 4-component vector of uint)
+0:185      subgroupExclusiveAdd ( global 4-component vector of float)
+0:185        'f4' ( in 4-component vector of float)
+0:186      subgroupExclusiveMul ( global 4-component vector of float)
+0:186        'f4' ( in 4-component vector of float)
+0:187      subgroupExclusiveMin ( global 4-component vector of float)
+0:187        'f4' ( in 4-component vector of float)
+0:188      subgroupExclusiveMax ( global 4-component vector of float)
+0:188        'f4' ( in 4-component vector of float)
+0:189      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:189        'ballot' ( temp 4-component vector of uint)
+0:190      subgroupExclusiveOr ( global 4-component vector of uint)
+0:190        'ballot' ( temp 4-component vector of uint)
+0:191      subgroupExclusiveXor ( global 4-component vector of uint)
+0:191        'ballot' ( temp 4-component vector of uint)
+0:195  Function Definition: clustered_works(vf4; ( global void)
+0:195    Function Parameters: 
+0:195      'f4' ( in 4-component vector of float)
+0:197    Sequence
+0:197      Sequence
+0:197        move second child to first child ( temp 4-component vector of uint)
+0:197          'ballot' ( temp 4-component vector of uint)
+0:197          Constant:
+0:197            85 (const uint)
+0:197            0 (const uint)
+0:197            0 (const uint)
+0:197            0 (const uint)
+0:198      subgroupClusteredAdd ( global 4-component vector of float)
+0:198        'f4' ( in 4-component vector of float)
+0:198        Constant:
+0:198          2 (const uint)
+0:199      subgroupClusteredMul ( global 4-component vector of float)
+0:199        'f4' ( in 4-component vector of float)
+0:199        Constant:
+0:199          2 (const uint)
+0:200      subgroupClusteredMin ( global 4-component vector of float)
+0:200        'f4' ( in 4-component vector of float)
+0:200        Constant:
+0:200          2 (const uint)
+0:201      subgroupClusteredMax ( global 4-component vector of float)
+0:201        'f4' ( in 4-component vector of float)
+0:201        Constant:
+0:201          2 (const uint)
+0:202      subgroupClusteredAnd ( global 4-component vector of uint)
+0:202        'ballot' ( temp 4-component vector of uint)
+0:202        Constant:
+0:202          2 (const uint)
+0:203      subgroupClusteredOr ( global 4-component vector of uint)
+0:203        'ballot' ( temp 4-component vector of uint)
+0:203        Constant:
+0:203          2 (const uint)
+0:204      subgroupClusteredXor ( global 4-component vector of uint)
+0:204        'ballot' ( temp 4-component vector of uint)
+0:204        Constant:
+0:204          2 (const uint)
+0:208  Function Definition: quad_works(vf4; ( global void)
+0:208    Function Parameters: 
+0:208      'f4' ( in 4-component vector of float)
+0:210    Sequence
+0:210      subgroupQuadBroadcast ( global 4-component vector of float)
+0:210        'f4' ( in 4-component vector of float)
+0:210        Constant:
+0:210          0 (const uint)
+0:211      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:211        'f4' ( in 4-component vector of float)
+0:212      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:212        'f4' ( in 4-component vector of float)
+0:213      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:213        'f4' ( in 4-component vector of float)
+0:217  Function Definition: partitioned_works(vf4; ( global void)
+0:217    Function Parameters: 
+0:217      'f4' ( in 4-component vector of float)
+0:219    Sequence
+0:219      Sequence
+0:219        move second child to first child ( temp 4-component vector of uint)
+0:219          'parti' ( temp 4-component vector of uint)
+0:219          subgroupPartitionNV ( global 4-component vector of uint)
+0:219            'f4' ( in 4-component vector of float)
+0:220      Sequence
+0:220        move second child to first child ( temp 4-component vector of uint)
+0:220          'ballot' ( temp 4-component vector of uint)
+0:220          Constant:
+0:220            85 (const uint)
+0:220            0 (const uint)
+0:220            0 (const uint)
+0:220            0 (const uint)
+0:221      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:221        'f4' ( in 4-component vector of float)
+0:221        'parti' ( temp 4-component vector of uint)
+0:222      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:222        'f4' ( in 4-component vector of float)
+0:222        'parti' ( temp 4-component vector of uint)
+0:223      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:223        'f4' ( in 4-component vector of float)
+0:223        'parti' ( temp 4-component vector of uint)
+0:224      subgroupPartitionedMaxNV ( 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      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:225        'ballot' ( temp 4-component vector of uint)
+0:225        'parti' ( temp 4-component vector of uint)
+0:226      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:226        'ballot' ( temp 4-component vector of uint)
+0:226        'parti' ( temp 4-component vector of uint)
+0:227      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:227        'ballot' ( temp 4-component vector of uint)
+0:227        'parti' ( temp 4-component vector of uint)
+0:228      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:228        'f4' ( in 4-component vector of float)
+0:228        'parti' ( temp 4-component vector of uint)
+0:229      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:229        'f4' ( in 4-component vector of float)
+0:229        'parti' ( temp 4-component vector of uint)
+0:230      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:230        'f4' ( in 4-component vector of float)
+0:230        'parti' ( temp 4-component vector of uint)
+0:231      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:231        'f4' ( in 4-component vector of float)
+0:231        'parti' ( temp 4-component vector of uint)
+0:232      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:232        'ballot' ( temp 4-component vector of uint)
+0:232        'parti' ( temp 4-component vector of uint)
+0:233      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:233        'ballot' ( temp 4-component vector of uint)
+0:233        'parti' ( temp 4-component vector of uint)
+0:234      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:234        'ballot' ( temp 4-component vector of uint)
+0:234        'parti' ( temp 4-component vector of uint)
+0:235      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:235        'f4' ( in 4-component vector of float)
+0:235        'parti' ( temp 4-component vector of uint)
+0:236      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:236        'f4' ( in 4-component vector of float)
+0:236        'parti' ( temp 4-component vector of uint)
+0:237      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:237        'f4' ( in 4-component vector of float)
+0:237        'parti' ( temp 4-component vector of uint)
+0:238      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:238        'f4' ( in 4-component vector of float)
+0:238        'parti' ( temp 4-component vector of uint)
+0:239      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:239        'ballot' ( temp 4-component vector of uint)
+0:239        'parti' ( temp 4-component vector of uint)
+0:240      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:240        'ballot' ( temp 4-component vector of uint)
+0:240        'parti' ( temp 4-component vector of uint)
+0:241      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:241        'ballot' ( temp 4-component vector of uint)
+0:241        'parti' ( temp 4-component vector of uint)
+0:245  Function Definition: sm_builtins_err( ( global void)
+0:245    Function Parameters: 
+0:247    Sequence
+0:247      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:248      'gl_SMCountNV' ( in uint SMCountNV)
+0:249      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:250      'gl_SMIDNV' ( in uint SMIDNV)
+0:257  Function Definition: sm_builtins( ( global void)
+0:257    Function Parameters: 
+0:259    Sequence
+0:259      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:260      'gl_SMCountNV' ( in uint SMCountNV)
+0:261      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:262      'gl_SMIDNV' ( in uint SMIDNV)
+0:?   Linker Objects
+0:?     'data0' (layout( location=0) callableDataNV 4-component vector of float)
+0:?     'anon@0' (layout( location=1) callableDataInNV block{ callableDataInNV uint data1})
+
+
+Linked callable stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:109  Function Definition: main( ( global void)
+0:109    Function Parameters: 
+0:111    Sequence
+0:111      Sequence
+0:111        move second child to first child ( temp 3-component vector of uint)
+0:111          'id' ( temp 3-component vector of uint)
+0:111          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:112      Sequence
+0:112        move second child to first child ( temp 3-component vector of uint)
+0:112          'size' ( temp 3-component vector of uint)
+0:112          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:113      move second child to first child ( temp uint)
+0:113        data1: direct index for structure ( callableDataInNV uint)
+0:113          'anon@0' (layout( location=1) callableDataInNV block{ callableDataInNV uint data1})
+0:113          Constant:
+0:113            0 (const uint)
+0:113        Constant:
+0:113          256 (const uint)
+0:114      executeCallableNV ( global void)
+0:114        Constant:
+0:114          2 (const uint)
+0:114        Constant:
+0:114          1 (const int)
+0:?   Linker Objects
+0:?     'data0' (layout( location=0) callableDataNV 4-component vector of float)
+0:?     'anon@0' (layout( location=1) callableDataInNV block{ callableDataInNV uint data1})
+
diff --git a/Test/baseResults/glsl.460.subgroup.rchit.out b/Test/baseResults/glsl.460.subgroup.rchit.out
new file mode 100644
index 0000000..1ea9e69
--- /dev/null
+++ b/Test/baseResults/glsl.460.subgroup.rchit.out
@@ -0,0 +1,817 @@
+glsl.460.subgroup.rchit
+ERROR: 0:7: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_NumSubgroups' : undeclared identifier 
+ERROR: 0:15: 'gl_SubgroupID' : undeclared identifier 
+ERROR: 0:16: 'subgroupMemoryBarrierShared' : no matching overloaded function found 
+ERROR: 0:18: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:22: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:38: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:41: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:43: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:65: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:73: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:78: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:257: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:258: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:259: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:260: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:4  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:4    Function Parameters: 
+0:4      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:7      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:8      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:9      subgroupBarrier ( global void)
+0:10      subgroupMemoryBarrier ( global void)
+0:11      subgroupMemoryBarrierBuffer ( global void)
+0:12      subgroupMemoryBarrierImage ( global void)
+0:13      subgroupElect ( global bool)
+0:14      'gl_NumSubgroups' ( temp float)
+0:15      'gl_SubgroupID' ( temp float)
+0:16      Constant:
+0:16        0.000000
+0:18      subgroupAll ( global bool)
+0:18        Constant:
+0:18          true (const bool)
+0:19      subgroupAny ( global bool)
+0:19        Constant:
+0:19          false (const bool)
+0:20      subgroupAllEqual ( global bool)
+0:20        'f4' ( in 4-component vector of float)
+0:22      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:23      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:24      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:25      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:26      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:27      subgroupBroadcast ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:27        Constant:
+0:27          0 (const uint)
+0:28      subgroupBroadcastFirst ( global 4-component vector of float)
+0:28        'f4' ( in 4-component vector of float)
+0:29      Sequence
+0:29        move second child to first child ( temp 4-component vector of uint)
+0:29          'ballot' ( temp 4-component vector of uint)
+0:29          subgroupBallot ( global 4-component vector of uint)
+0:29            Constant:
+0:29              false (const bool)
+0:30      subgroupInverseBallot ( global bool)
+0:30        Constant:
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:31      subgroupBallotBitExtract ( global bool)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:31        Constant:
+0:31          0 (const uint)
+0:32      subgroupBallotBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotInclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotExclusiveBitCount ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindLSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:36      subgroupBallotFindMSB ( global uint)
+0:36        'ballot' ( temp 4-component vector of uint)
+0:38      subgroupShuffle ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          0 (const uint)
+0:39      subgroupShuffleXor ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleUp ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:41      subgroupShuffleDown ( global 4-component vector of float)
+0:41        'f4' ( in 4-component vector of float)
+0:41        Constant:
+0:41          1 (const uint)
+0:43      move second child to first child ( temp 4-component vector of float)
+0:43        'result' ( temp 4-component vector of float)
+0:43        subgroupAdd ( global 4-component vector of float)
+0:43          'f4' ( in 4-component vector of float)
+0:44      subgroupMul ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMin ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupMax ( global 4-component vector of float)
+0:46        'f4' ( in 4-component vector of float)
+0:47      subgroupAnd ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupOr ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupXor ( global 4-component vector of uint)
+0:49        'ballot' ( temp 4-component vector of uint)
+0:50      subgroupInclusiveAdd ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMul ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMin ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveMax ( global 4-component vector of float)
+0:53        'f4' ( in 4-component vector of float)
+0:54      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveOr ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupInclusiveXor ( global 4-component vector of uint)
+0:56        'ballot' ( temp 4-component vector of uint)
+0:57      subgroupExclusiveAdd ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMul ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMin ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveMax ( global 4-component vector of float)
+0:60        'f4' ( in 4-component vector of float)
+0:61      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveOr ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:63      subgroupExclusiveXor ( global 4-component vector of uint)
+0:63        'ballot' ( temp 4-component vector of uint)
+0:65      subgroupClusteredAdd ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMul ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMin ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredMax ( global 4-component vector of float)
+0:68        'f4' ( in 4-component vector of float)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredAnd ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredOr ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:71      subgroupClusteredXor ( global 4-component vector of uint)
+0:71        'ballot' ( temp 4-component vector of uint)
+0:71        Constant:
+0:71          2 (const uint)
+0:73      subgroupQuadBroadcast ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:73        Constant:
+0:73          0 (const uint)
+0:74      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:76      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:76        'f4' ( in 4-component vector of float)
+0:78      Sequence
+0:78        move second child to first child ( temp 4-component vector of uint)
+0:78          'parti' ( temp 4-component vector of uint)
+0:78          subgroupPartitionNV ( global 4-component vector of uint)
+0:78            'f4' ( in 4-component vector of float)
+0:79      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:79        'f4' ( in 4-component vector of float)
+0:79        'parti' ( temp 4-component vector of uint)
+0:80      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:82        'f4' ( in 4-component vector of float)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:83        'ballot' ( temp 4-component vector of uint)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:85        'ballot' ( temp 4-component vector of uint)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:86        'f4' ( in 4-component vector of float)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:89        'f4' ( in 4-component vector of float)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:90        'ballot' ( temp 4-component vector of uint)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:92        'ballot' ( temp 4-component vector of uint)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:93        'f4' ( in 4-component vector of float)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:96        'f4' ( in 4-component vector of float)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:97        'ballot' ( temp 4-component vector of uint)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:99      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:99        'ballot' ( temp 4-component vector of uint)
+0:99        'parti' ( temp 4-component vector of uint)
+0:101      Branch: Return with expression
+0:101        'result' ( temp 4-component vector of float)
+0:108  Function Definition: main( ( global void)
+0:108    Function Parameters: 
+0:110    Sequence
+0:110      Sequence
+0:110        move second child to first child ( temp 3-component vector of uint)
+0:110          'v0' ( temp 3-component vector of uint)
+0:110          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:111      Sequence
+0:111        move second child to first child ( temp 3-component vector of uint)
+0:111          'v1' ( temp 3-component vector of uint)
+0:111          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:112      Sequence
+0:112        move second child to first child ( temp int)
+0:112          'v2' ( temp int)
+0:112          'gl_PrimitiveID' ( in int PrimitiveID)
+0:113      Sequence
+0:113        move second child to first child ( temp int)
+0:113          'v3' ( temp int)
+0:113          'gl_InstanceID' ( in int InstanceId)
+0:114      Sequence
+0:114        move second child to first child ( temp int)
+0:114          'v4' ( temp int)
+0:114          'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:115      Sequence
+0:115        move second child to first child ( temp 3-component vector of float)
+0:115          'v5' ( temp 3-component vector of float)
+0:115          'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:116      Sequence
+0:116        move second child to first child ( temp 3-component vector of float)
+0:116          'v6' ( temp 3-component vector of float)
+0:116          'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:117      Sequence
+0:117        move second child to first child ( temp 3-component vector of float)
+0:117          'v7' ( temp 3-component vector of float)
+0:117          'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:118      Sequence
+0:118        move second child to first child ( temp 3-component vector of float)
+0:118          'v8' ( temp 3-component vector of float)
+0:118          'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:119      Sequence
+0:119        move second child to first child ( temp float)
+0:119          'v9' ( temp float)
+0:119          'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:120      Sequence
+0:120        move second child to first child ( temp float)
+0:120          'v10' ( temp float)
+0:120          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:121      Sequence
+0:121        move second child to first child ( temp float)
+0:121          'v11' ( temp float)
+0:121          'gl_HitTNV' ( in float HitTNV)
+0:122      Sequence
+0:122        move second child to first child ( temp uint)
+0:122          'v12' ( temp uint)
+0:122          'gl_HitKindNV' ( in uint HitKindNV)
+0:123      Sequence
+0:123        move second child to first child ( temp 4X3 matrix of float)
+0:123          'v13' ( temp 4X3 matrix of float)
+0:123          'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:124      Sequence
+0:124        move second child to first child ( temp 4X3 matrix of float)
+0:124          'v14' ( temp 4X3 matrix of float)
+0:124          'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:125      traceNV ( global void)
+0:125        'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:125        Constant:
+0:125          0 (const uint)
+0:125        Constant:
+0:125          1 (const uint)
+0:125        Constant:
+0:125          2 (const uint)
+0:125        Constant:
+0:125          3 (const uint)
+0:125        Constant:
+0:125          0 (const uint)
+0:125        Constant:
+0:125          0.500000
+0:125          0.500000
+0:125          0.500000
+0:125        Constant:
+0:125          0.500000
+0:125        Constant:
+0:125          1.000000
+0:125          1.000000
+0:125          1.000000
+0:125        Constant:
+0:125          0.750000
+0:125        Constant:
+0:125          1 (const int)
+0:129  Function Definition: basic_works( ( global void)
+0:129    Function Parameters: 
+0:131    Sequence
+0:131      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:132      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:133      subgroupBarrier ( global void)
+0:134      subgroupMemoryBarrier ( global void)
+0:135      subgroupMemoryBarrierBuffer ( global void)
+0:136      subgroupMemoryBarrierImage ( global void)
+0:137      subgroupElect ( global bool)
+0:141  Function Definition: ballot_works(vf4; ( global void)
+0:141    Function Parameters: 
+0:141      'f4' ( in 4-component vector of float)
+0:142    Sequence
+0:142      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:143      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:144      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:145      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:146      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:147      subgroupBroadcast ( global 4-component vector of float)
+0:147        'f4' ( in 4-component vector of float)
+0:147        Constant:
+0:147          0 (const uint)
+0:148      subgroupBroadcastFirst ( global 4-component vector of float)
+0:148        'f4' ( in 4-component vector of float)
+0:149      Sequence
+0:149        move second child to first child ( temp 4-component vector of uint)
+0:149          'ballot' ( temp 4-component vector of uint)
+0:149          subgroupBallot ( global 4-component vector of uint)
+0:149            Constant:
+0:149              false (const bool)
+0:150      subgroupInverseBallot ( global bool)
+0:150        Constant:
+0:150          1 (const uint)
+0:150          1 (const uint)
+0:150          1 (const uint)
+0:150          1 (const uint)
+0:151      subgroupBallotBitExtract ( global bool)
+0:151        'ballot' ( temp 4-component vector of uint)
+0:151        Constant:
+0:151          0 (const uint)
+0:152      subgroupBallotBitCount ( global uint)
+0:152        'ballot' ( temp 4-component vector of uint)
+0:153      subgroupBallotInclusiveBitCount ( global uint)
+0:153        'ballot' ( temp 4-component vector of uint)
+0:154      subgroupBallotExclusiveBitCount ( global uint)
+0:154        'ballot' ( temp 4-component vector of uint)
+0:155      subgroupBallotFindLSB ( global uint)
+0:155        'ballot' ( temp 4-component vector of uint)
+0:156      subgroupBallotFindMSB ( global uint)
+0:156        'ballot' ( temp 4-component vector of uint)
+0:160  Function Definition: vote_works(vf4; ( global void)
+0:160    Function Parameters: 
+0:160      'f4' ( in 4-component vector of float)
+0:162    Sequence
+0:162      subgroupAll ( global bool)
+0:162        Constant:
+0:162          true (const bool)
+0:163      subgroupAny ( global bool)
+0:163        Constant:
+0:163          false (const bool)
+0:164      subgroupAllEqual ( global bool)
+0:164        'f4' ( in 4-component vector of float)
+0:169  Function Definition: shuffle_works(vf4; ( global void)
+0:169    Function Parameters: 
+0:169      'f4' ( in 4-component vector of float)
+0:171    Sequence
+0:171      subgroupShuffle ( global 4-component vector of float)
+0:171        'f4' ( in 4-component vector of float)
+0:171        Constant:
+0:171          0 (const uint)
+0:172      subgroupShuffleXor ( global 4-component vector of float)
+0:172        'f4' ( in 4-component vector of float)
+0:172        Constant:
+0:172          1 (const uint)
+0:173      subgroupShuffleUp ( global 4-component vector of float)
+0:173        'f4' ( in 4-component vector of float)
+0:173        Constant:
+0:173          1 (const uint)
+0:174      subgroupShuffleDown ( global 4-component vector of float)
+0:174        'f4' ( in 4-component vector of float)
+0:174        Constant:
+0:174          1 (const uint)
+0:178  Function Definition: arith_works(vf4; ( global void)
+0:178    Function Parameters: 
+0:178      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:181      subgroupAdd ( global 4-component vector of float)
+0:181        'f4' ( in 4-component vector of float)
+0:182      subgroupMul ( global 4-component vector of float)
+0:182        'f4' ( in 4-component vector of float)
+0:183      subgroupMin ( global 4-component vector of float)
+0:183        'f4' ( in 4-component vector of float)
+0:184      subgroupMax ( global 4-component vector of float)
+0:184        'f4' ( in 4-component vector of float)
+0:185      subgroupAnd ( global 4-component vector of uint)
+0:185        'ballot' ( temp 4-component vector of uint)
+0:186      subgroupOr ( global 4-component vector of uint)
+0:186        'ballot' ( temp 4-component vector of uint)
+0:187      subgroupXor ( global 4-component vector of uint)
+0:187        'ballot' ( temp 4-component vector of uint)
+0:188      subgroupInclusiveAdd ( global 4-component vector of float)
+0:188        'f4' ( in 4-component vector of float)
+0:189      subgroupInclusiveMul ( global 4-component vector of float)
+0:189        'f4' ( in 4-component vector of float)
+0:190      subgroupInclusiveMin ( global 4-component vector of float)
+0:190        'f4' ( in 4-component vector of float)
+0:191      subgroupInclusiveMax ( global 4-component vector of float)
+0:191        'f4' ( in 4-component vector of float)
+0:192      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:192        'ballot' ( temp 4-component vector of uint)
+0:193      subgroupInclusiveOr ( global 4-component vector of uint)
+0:193        'ballot' ( temp 4-component vector of uint)
+0:194      subgroupInclusiveXor ( global 4-component vector of uint)
+0:194        'ballot' ( temp 4-component vector of uint)
+0:195      subgroupExclusiveAdd ( global 4-component vector of float)
+0:195        'f4' ( in 4-component vector of float)
+0:196      subgroupExclusiveMul ( global 4-component vector of float)
+0:196        'f4' ( in 4-component vector of float)
+0:197      subgroupExclusiveMin ( global 4-component vector of float)
+0:197        'f4' ( in 4-component vector of float)
+0:198      subgroupExclusiveMax ( global 4-component vector of float)
+0:198        'f4' ( in 4-component vector of float)
+0:199      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:199        'ballot' ( temp 4-component vector of uint)
+0:200      subgroupExclusiveOr ( global 4-component vector of uint)
+0:200        'ballot' ( temp 4-component vector of uint)
+0:201      subgroupExclusiveXor ( global 4-component vector of uint)
+0:201        'ballot' ( temp 4-component vector of uint)
+0:205  Function Definition: clustered_works(vf4; ( global void)
+0:205    Function Parameters: 
+0:205      'f4' ( in 4-component vector of float)
+0:207    Sequence
+0:207      Sequence
+0:207        move second child to first child ( temp 4-component vector of uint)
+0:207          'ballot' ( temp 4-component vector of uint)
+0:207          Constant:
+0:207            85 (const uint)
+0:207            0 (const uint)
+0:207            0 (const uint)
+0:207            0 (const uint)
+0:208      subgroupClusteredAdd ( global 4-component vector of float)
+0:208        'f4' ( in 4-component vector of float)
+0:208        Constant:
+0:208          2 (const uint)
+0:209      subgroupClusteredMul ( global 4-component vector of float)
+0:209        'f4' ( in 4-component vector of float)
+0:209        Constant:
+0:209          2 (const uint)
+0:210      subgroupClusteredMin ( global 4-component vector of float)
+0:210        'f4' ( in 4-component vector of float)
+0:210        Constant:
+0:210          2 (const uint)
+0:211      subgroupClusteredMax ( global 4-component vector of float)
+0:211        'f4' ( in 4-component vector of float)
+0:211        Constant:
+0:211          2 (const uint)
+0:212      subgroupClusteredAnd ( global 4-component vector of uint)
+0:212        'ballot' ( temp 4-component vector of uint)
+0:212        Constant:
+0:212          2 (const uint)
+0:213      subgroupClusteredOr ( global 4-component vector of uint)
+0:213        'ballot' ( temp 4-component vector of uint)
+0:213        Constant:
+0:213          2 (const uint)
+0:214      subgroupClusteredXor ( global 4-component vector of uint)
+0:214        'ballot' ( temp 4-component vector of uint)
+0:214        Constant:
+0:214          2 (const uint)
+0:218  Function Definition: quad_works(vf4; ( global void)
+0:218    Function Parameters: 
+0:218      'f4' ( in 4-component vector of float)
+0:220    Sequence
+0:220      subgroupQuadBroadcast ( global 4-component vector of float)
+0:220        'f4' ( in 4-component vector of float)
+0:220        Constant:
+0:220          0 (const uint)
+0:221      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:221        'f4' ( in 4-component vector of float)
+0:222      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:222        'f4' ( in 4-component vector of float)
+0:223      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:223        'f4' ( in 4-component vector of float)
+0:227  Function Definition: partitioned_works(vf4; ( global void)
+0:227    Function Parameters: 
+0:227      'f4' ( in 4-component vector of float)
+0:229    Sequence
+0:229      Sequence
+0:229        move second child to first child ( temp 4-component vector of uint)
+0:229          'parti' ( temp 4-component vector of uint)
+0:229          subgroupPartitionNV ( global 4-component vector of uint)
+0:229            'f4' ( in 4-component vector of float)
+0:230      Sequence
+0:230        move second child to first child ( temp 4-component vector of uint)
+0:230          'ballot' ( temp 4-component vector of uint)
+0:230          Constant:
+0:230            85 (const uint)
+0:230            0 (const uint)
+0:230            0 (const uint)
+0:230            0 (const uint)
+0:231      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:231        'f4' ( in 4-component vector of float)
+0:231        'parti' ( temp 4-component vector of uint)
+0:232      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:232        'f4' ( in 4-component vector of float)
+0:232        'parti' ( temp 4-component vector of uint)
+0:233      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:233        'f4' ( in 4-component vector of float)
+0:233        'parti' ( temp 4-component vector of uint)
+0:234      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:234        'f4' ( in 4-component vector of float)
+0:234        'parti' ( temp 4-component vector of uint)
+0:235      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:235        'ballot' ( temp 4-component vector of uint)
+0:235        'parti' ( temp 4-component vector of uint)
+0:236      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:236        'ballot' ( temp 4-component vector of uint)
+0:236        'parti' ( temp 4-component vector of uint)
+0:237      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:237        'ballot' ( temp 4-component vector of uint)
+0:237        'parti' ( temp 4-component vector of uint)
+0:238      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:238        'f4' ( in 4-component vector of float)
+0:238        'parti' ( temp 4-component vector of uint)
+0:239      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:239        'f4' ( in 4-component vector of float)
+0:239        'parti' ( temp 4-component vector of uint)
+0:240      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:240        'f4' ( in 4-component vector of float)
+0:240        'parti' ( temp 4-component vector of uint)
+0:241      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:241        'f4' ( in 4-component vector of float)
+0:241        'parti' ( temp 4-component vector of uint)
+0:242      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:242        'ballot' ( temp 4-component vector of uint)
+0:242        'parti' ( temp 4-component vector of uint)
+0:243      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:243        'ballot' ( temp 4-component vector of uint)
+0:243        'parti' ( temp 4-component vector of uint)
+0:244      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:244        'ballot' ( temp 4-component vector of uint)
+0:244        'parti' ( temp 4-component vector of uint)
+0:245      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:245        'f4' ( in 4-component vector of float)
+0:245        'parti' ( temp 4-component vector of uint)
+0:246      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:246        'f4' ( in 4-component vector of float)
+0:246        'parti' ( temp 4-component vector of uint)
+0:247      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:247        'f4' ( in 4-component vector of float)
+0:247        'parti' ( temp 4-component vector of uint)
+0:248      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:248        'f4' ( in 4-component vector of float)
+0:248        'parti' ( temp 4-component vector of uint)
+0:249      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:249        'ballot' ( temp 4-component vector of uint)
+0:249        'parti' ( temp 4-component vector of uint)
+0:250      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:250        'ballot' ( temp 4-component vector of uint)
+0:250        'parti' ( temp 4-component vector of uint)
+0:251      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:251        'ballot' ( temp 4-component vector of uint)
+0:251        'parti' ( temp 4-component vector of uint)
+0:255  Function Definition: sm_builtins_err( ( global void)
+0:255    Function Parameters: 
+0:257    Sequence
+0:257      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:258      'gl_SMCountNV' ( in uint SMCountNV)
+0:259      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:260      'gl_SMIDNV' ( in uint SMIDNV)
+0:267  Function Definition: sm_builtins( ( global void)
+0:267    Function Parameters: 
+0:269    Sequence
+0:269      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:270      'gl_SMCountNV' ( in uint SMCountNV)
+0:271      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:272      'gl_SMIDNV' ( in uint SMIDNV)
+0:?   Linker Objects
+0:?     'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:?     'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:?     'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
+
+Linked closest-hit stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:108  Function Definition: main( ( global void)
+0:108    Function Parameters: 
+0:110    Sequence
+0:110      Sequence
+0:110        move second child to first child ( temp 3-component vector of uint)
+0:110          'v0' ( temp 3-component vector of uint)
+0:110          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:111      Sequence
+0:111        move second child to first child ( temp 3-component vector of uint)
+0:111          'v1' ( temp 3-component vector of uint)
+0:111          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:112      Sequence
+0:112        move second child to first child ( temp int)
+0:112          'v2' ( temp int)
+0:112          'gl_PrimitiveID' ( in int PrimitiveID)
+0:113      Sequence
+0:113        move second child to first child ( temp int)
+0:113          'v3' ( temp int)
+0:113          'gl_InstanceID' ( in int InstanceId)
+0:114      Sequence
+0:114        move second child to first child ( temp int)
+0:114          'v4' ( temp int)
+0:114          'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:115      Sequence
+0:115        move second child to first child ( temp 3-component vector of float)
+0:115          'v5' ( temp 3-component vector of float)
+0:115          'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:116      Sequence
+0:116        move second child to first child ( temp 3-component vector of float)
+0:116          'v6' ( temp 3-component vector of float)
+0:116          'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:117      Sequence
+0:117        move second child to first child ( temp 3-component vector of float)
+0:117          'v7' ( temp 3-component vector of float)
+0:117          'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:118      Sequence
+0:118        move second child to first child ( temp 3-component vector of float)
+0:118          'v8' ( temp 3-component vector of float)
+0:118          'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:119      Sequence
+0:119        move second child to first child ( temp float)
+0:119          'v9' ( temp float)
+0:119          'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:120      Sequence
+0:120        move second child to first child ( temp float)
+0:120          'v10' ( temp float)
+0:120          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:121      Sequence
+0:121        move second child to first child ( temp float)
+0:121          'v11' ( temp float)
+0:121          'gl_HitTNV' ( in float HitTNV)
+0:122      Sequence
+0:122        move second child to first child ( temp uint)
+0:122          'v12' ( temp uint)
+0:122          'gl_HitKindNV' ( in uint HitKindNV)
+0:123      Sequence
+0:123        move second child to first child ( temp 4X3 matrix of float)
+0:123          'v13' ( temp 4X3 matrix of float)
+0:123          'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:124      Sequence
+0:124        move second child to first child ( temp 4X3 matrix of float)
+0:124          'v14' ( temp 4X3 matrix of float)
+0:124          'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:125      traceNV ( global void)
+0:125        'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:125        Constant:
+0:125          0 (const uint)
+0:125        Constant:
+0:125          1 (const uint)
+0:125        Constant:
+0:125          2 (const uint)
+0:125        Constant:
+0:125          3 (const uint)
+0:125        Constant:
+0:125          0 (const uint)
+0:125        Constant:
+0:125          0.500000
+0:125          0.500000
+0:125          0.500000
+0:125        Constant:
+0:125          0.500000
+0:125        Constant:
+0:125          1.000000
+0:125          1.000000
+0:125          1.000000
+0:125        Constant:
+0:125          0.750000
+0:125        Constant:
+0:125          1 (const int)
+0:?   Linker Objects
+0:?     'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:?     'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:?     'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
diff --git a/Test/baseResults/glsl.460.subgroup.rgen.out b/Test/baseResults/glsl.460.subgroup.rgen.out
new file mode 100644
index 0000000..dfe1e2b
--- /dev/null
+++ b/Test/baseResults/glsl.460.subgroup.rgen.out
@@ -0,0 +1,747 @@
+glsl.460.subgroup.rgen
+ERROR: 0:7: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_NumSubgroups' : undeclared identifier 
+ERROR: 0:15: 'gl_SubgroupID' : undeclared identifier 
+ERROR: 0:16: 'subgroupMemoryBarrierShared' : no matching overloaded function found 
+ERROR: 0:18: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:22: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:38: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:41: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:43: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:65: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:73: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:78: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:251: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:252: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:253: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:254: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:4  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:4    Function Parameters: 
+0:4      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:7      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:8      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:9      subgroupBarrier ( global void)
+0:10      subgroupMemoryBarrier ( global void)
+0:11      subgroupMemoryBarrierBuffer ( global void)
+0:12      subgroupMemoryBarrierImage ( global void)
+0:13      subgroupElect ( global bool)
+0:14      'gl_NumSubgroups' ( temp float)
+0:15      'gl_SubgroupID' ( temp float)
+0:16      Constant:
+0:16        0.000000
+0:18      subgroupAll ( global bool)
+0:18        Constant:
+0:18          true (const bool)
+0:19      subgroupAny ( global bool)
+0:19        Constant:
+0:19          false (const bool)
+0:20      subgroupAllEqual ( global bool)
+0:20        'f4' ( in 4-component vector of float)
+0:22      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:23      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:24      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:25      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:26      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:27      subgroupBroadcast ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:27        Constant:
+0:27          0 (const uint)
+0:28      subgroupBroadcastFirst ( global 4-component vector of float)
+0:28        'f4' ( in 4-component vector of float)
+0:29      Sequence
+0:29        move second child to first child ( temp 4-component vector of uint)
+0:29          'ballot' ( temp 4-component vector of uint)
+0:29          subgroupBallot ( global 4-component vector of uint)
+0:29            Constant:
+0:29              false (const bool)
+0:30      subgroupInverseBallot ( global bool)
+0:30        Constant:
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:31      subgroupBallotBitExtract ( global bool)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:31        Constant:
+0:31          0 (const uint)
+0:32      subgroupBallotBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotInclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotExclusiveBitCount ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindLSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:36      subgroupBallotFindMSB ( global uint)
+0:36        'ballot' ( temp 4-component vector of uint)
+0:38      subgroupShuffle ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          0 (const uint)
+0:39      subgroupShuffleXor ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleUp ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:41      subgroupShuffleDown ( global 4-component vector of float)
+0:41        'f4' ( in 4-component vector of float)
+0:41        Constant:
+0:41          1 (const uint)
+0:43      move second child to first child ( temp 4-component vector of float)
+0:43        'result' ( temp 4-component vector of float)
+0:43        subgroupAdd ( global 4-component vector of float)
+0:43          'f4' ( in 4-component vector of float)
+0:44      subgroupMul ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMin ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupMax ( global 4-component vector of float)
+0:46        'f4' ( in 4-component vector of float)
+0:47      subgroupAnd ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupOr ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupXor ( global 4-component vector of uint)
+0:49        'ballot' ( temp 4-component vector of uint)
+0:50      subgroupInclusiveAdd ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMul ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMin ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveMax ( global 4-component vector of float)
+0:53        'f4' ( in 4-component vector of float)
+0:54      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveOr ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupInclusiveXor ( global 4-component vector of uint)
+0:56        'ballot' ( temp 4-component vector of uint)
+0:57      subgroupExclusiveAdd ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMul ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMin ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveMax ( global 4-component vector of float)
+0:60        'f4' ( in 4-component vector of float)
+0:61      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveOr ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:63      subgroupExclusiveXor ( global 4-component vector of uint)
+0:63        'ballot' ( temp 4-component vector of uint)
+0:65      subgroupClusteredAdd ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMul ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMin ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredMax ( global 4-component vector of float)
+0:68        'f4' ( in 4-component vector of float)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredAnd ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredOr ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:71      subgroupClusteredXor ( global 4-component vector of uint)
+0:71        'ballot' ( temp 4-component vector of uint)
+0:71        Constant:
+0:71          2 (const uint)
+0:73      subgroupQuadBroadcast ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:73        Constant:
+0:73          0 (const uint)
+0:74      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:76      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:76        'f4' ( in 4-component vector of float)
+0:78      Sequence
+0:78        move second child to first child ( temp 4-component vector of uint)
+0:78          'parti' ( temp 4-component vector of uint)
+0:78          subgroupPartitionNV ( global 4-component vector of uint)
+0:78            'f4' ( in 4-component vector of float)
+0:79      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:79        'f4' ( in 4-component vector of float)
+0:79        'parti' ( temp 4-component vector of uint)
+0:80      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:82        'f4' ( in 4-component vector of float)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:83        'ballot' ( temp 4-component vector of uint)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:85        'ballot' ( temp 4-component vector of uint)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:86        'f4' ( in 4-component vector of float)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:89        'f4' ( in 4-component vector of float)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:90        'ballot' ( temp 4-component vector of uint)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:92        'ballot' ( temp 4-component vector of uint)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:93        'f4' ( in 4-component vector of float)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:96        'f4' ( in 4-component vector of float)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:97        'ballot' ( temp 4-component vector of uint)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:99      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:99        'ballot' ( temp 4-component vector of uint)
+0:99        'parti' ( temp 4-component vector of uint)
+0:101      Branch: Return with expression
+0:101        'result' ( temp 4-component vector of float)
+0:113  Function Definition: main( ( global void)
+0:113    Function Parameters: 
+0:115    Sequence
+0:115      Sequence
+0:115        move second child to first child ( temp uint)
+0:115          'lx' ( temp uint)
+0:115          direct index ( temp uint)
+0:115            'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:115            Constant:
+0:115              0 (const int)
+0:116      Sequence
+0:116        move second child to first child ( temp uint)
+0:116          'ly' ( temp uint)
+0:116          direct index ( temp uint)
+0:116            'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:116            Constant:
+0:116              1 (const int)
+0:117      Sequence
+0:117        move second child to first child ( temp uint)
+0:117          'sx' ( temp uint)
+0:117          direct index ( temp uint)
+0:117            'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:117            Constant:
+0:117              0 (const int)
+0:118      Sequence
+0:118        move second child to first child ( temp uint)
+0:118          'sy' ( temp uint)
+0:118          direct index ( temp uint)
+0:118            'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:118            Constant:
+0:118              1 (const int)
+0:119      traceNV ( global void)
+0:119        'accNV0' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:119        'lx' ( temp uint)
+0:119        'ly' ( temp uint)
+0:119        'sx' ( temp uint)
+0:119        'sy' ( temp uint)
+0:119        Constant:
+0:119          0 (const uint)
+0:119        origin: direct index for structure (layout( column_major std430 offset=16) buffer 3-component vector of float)
+0:119          'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+0:119          Constant:
+0:119            1 (const uint)
+0:119        Constant:
+0:119          0.500000
+0:119        dir: direct index for structure (layout( column_major std430 offset=0) buffer 3-component vector of float)
+0:119          'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+0:119          Constant:
+0:119            0 (const uint)
+0:119        Constant:
+0:119          0.750000
+0:119        Constant:
+0:119          1 (const int)
+0:123  Function Definition: basic_works( ( global void)
+0:123    Function Parameters: 
+0:125    Sequence
+0:125      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:126      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:127      subgroupBarrier ( global void)
+0:128      subgroupMemoryBarrier ( global void)
+0:129      subgroupMemoryBarrierBuffer ( global void)
+0:130      subgroupMemoryBarrierImage ( global void)
+0:131      subgroupElect ( global bool)
+0:135  Function Definition: ballot_works(vf4; ( global void)
+0:135    Function Parameters: 
+0:135      'f4' ( in 4-component vector of float)
+0:136    Sequence
+0:136      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:137      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:138      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:139      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:140      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:141      subgroupBroadcast ( global 4-component vector of float)
+0:141        'f4' ( in 4-component vector of float)
+0:141        Constant:
+0:141          0 (const uint)
+0:142      subgroupBroadcastFirst ( global 4-component vector of float)
+0:142        'f4' ( in 4-component vector of float)
+0:143      Sequence
+0:143        move second child to first child ( temp 4-component vector of uint)
+0:143          'ballot' ( temp 4-component vector of uint)
+0:143          subgroupBallot ( global 4-component vector of uint)
+0:143            Constant:
+0:143              false (const bool)
+0:144      subgroupInverseBallot ( global bool)
+0:144        Constant:
+0:144          1 (const uint)
+0:144          1 (const uint)
+0:144          1 (const uint)
+0:144          1 (const uint)
+0:145      subgroupBallotBitExtract ( global bool)
+0:145        'ballot' ( temp 4-component vector of uint)
+0:145        Constant:
+0:145          0 (const uint)
+0:146      subgroupBallotBitCount ( global uint)
+0:146        'ballot' ( temp 4-component vector of uint)
+0:147      subgroupBallotInclusiveBitCount ( global uint)
+0:147        'ballot' ( temp 4-component vector of uint)
+0:148      subgroupBallotExclusiveBitCount ( global uint)
+0:148        'ballot' ( temp 4-component vector of uint)
+0:149      subgroupBallotFindLSB ( global uint)
+0:149        'ballot' ( temp 4-component vector of uint)
+0:150      subgroupBallotFindMSB ( global uint)
+0:150        'ballot' ( temp 4-component vector of uint)
+0:154  Function Definition: vote_works(vf4; ( global void)
+0:154    Function Parameters: 
+0:154      'f4' ( in 4-component vector of float)
+0:156    Sequence
+0:156      subgroupAll ( global bool)
+0:156        Constant:
+0:156          true (const bool)
+0:157      subgroupAny ( global bool)
+0:157        Constant:
+0:157          false (const bool)
+0:158      subgroupAllEqual ( global bool)
+0:158        'f4' ( in 4-component vector of float)
+0:163  Function Definition: shuffle_works(vf4; ( global void)
+0:163    Function Parameters: 
+0:163      'f4' ( in 4-component vector of float)
+0:165    Sequence
+0:165      subgroupShuffle ( global 4-component vector of float)
+0:165        'f4' ( in 4-component vector of float)
+0:165        Constant:
+0:165          0 (const uint)
+0:166      subgroupShuffleXor ( global 4-component vector of float)
+0:166        'f4' ( in 4-component vector of float)
+0:166        Constant:
+0:166          1 (const uint)
+0:167      subgroupShuffleUp ( global 4-component vector of float)
+0:167        'f4' ( in 4-component vector of float)
+0:167        Constant:
+0:167          1 (const uint)
+0:168      subgroupShuffleDown ( global 4-component vector of float)
+0:168        'f4' ( in 4-component vector of float)
+0:168        Constant:
+0:168          1 (const uint)
+0:172  Function Definition: arith_works(vf4; ( global void)
+0:172    Function Parameters: 
+0:172      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:175      subgroupAdd ( global 4-component vector of float)
+0:175        'f4' ( in 4-component vector of float)
+0:176      subgroupMul ( global 4-component vector of float)
+0:176        'f4' ( in 4-component vector of float)
+0:177      subgroupMin ( global 4-component vector of float)
+0:177        'f4' ( in 4-component vector of float)
+0:178      subgroupMax ( global 4-component vector of float)
+0:178        'f4' ( in 4-component vector of float)
+0:179      subgroupAnd ( global 4-component vector of uint)
+0:179        'ballot' ( temp 4-component vector of uint)
+0:180      subgroupOr ( global 4-component vector of uint)
+0:180        'ballot' ( temp 4-component vector of uint)
+0:181      subgroupXor ( global 4-component vector of uint)
+0:181        'ballot' ( temp 4-component vector of uint)
+0:182      subgroupInclusiveAdd ( global 4-component vector of float)
+0:182        'f4' ( in 4-component vector of float)
+0:183      subgroupInclusiveMul ( global 4-component vector of float)
+0:183        'f4' ( in 4-component vector of float)
+0:184      subgroupInclusiveMin ( global 4-component vector of float)
+0:184        'f4' ( in 4-component vector of float)
+0:185      subgroupInclusiveMax ( global 4-component vector of float)
+0:185        'f4' ( in 4-component vector of float)
+0:186      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:186        'ballot' ( temp 4-component vector of uint)
+0:187      subgroupInclusiveOr ( global 4-component vector of uint)
+0:187        'ballot' ( temp 4-component vector of uint)
+0:188      subgroupInclusiveXor ( global 4-component vector of uint)
+0:188        'ballot' ( temp 4-component vector of uint)
+0:189      subgroupExclusiveAdd ( global 4-component vector of float)
+0:189        'f4' ( in 4-component vector of float)
+0:190      subgroupExclusiveMul ( global 4-component vector of float)
+0:190        'f4' ( in 4-component vector of float)
+0:191      subgroupExclusiveMin ( global 4-component vector of float)
+0:191        'f4' ( in 4-component vector of float)
+0:192      subgroupExclusiveMax ( global 4-component vector of float)
+0:192        'f4' ( in 4-component vector of float)
+0:193      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:193        'ballot' ( temp 4-component vector of uint)
+0:194      subgroupExclusiveOr ( global 4-component vector of uint)
+0:194        'ballot' ( temp 4-component vector of uint)
+0:195      subgroupExclusiveXor ( global 4-component vector of uint)
+0:195        'ballot' ( temp 4-component vector of uint)
+0:199  Function Definition: clustered_works(vf4; ( global void)
+0:199    Function Parameters: 
+0:199      'f4' ( in 4-component vector of float)
+0:201    Sequence
+0:201      Sequence
+0:201        move second child to first child ( temp 4-component vector of uint)
+0:201          'ballot' ( temp 4-component vector of uint)
+0:201          Constant:
+0:201            85 (const uint)
+0:201            0 (const uint)
+0:201            0 (const uint)
+0:201            0 (const uint)
+0:202      subgroupClusteredAdd ( global 4-component vector of float)
+0:202        'f4' ( in 4-component vector of float)
+0:202        Constant:
+0:202          2 (const uint)
+0:203      subgroupClusteredMul ( global 4-component vector of float)
+0:203        'f4' ( in 4-component vector of float)
+0:203        Constant:
+0:203          2 (const uint)
+0:204      subgroupClusteredMin ( global 4-component vector of float)
+0:204        'f4' ( in 4-component vector of float)
+0:204        Constant:
+0:204          2 (const uint)
+0:205      subgroupClusteredMax ( global 4-component vector of float)
+0:205        'f4' ( in 4-component vector of float)
+0:205        Constant:
+0:205          2 (const uint)
+0:206      subgroupClusteredAnd ( global 4-component vector of uint)
+0:206        'ballot' ( temp 4-component vector of uint)
+0:206        Constant:
+0:206          2 (const uint)
+0:207      subgroupClusteredOr ( global 4-component vector of uint)
+0:207        'ballot' ( temp 4-component vector of uint)
+0:207        Constant:
+0:207          2 (const uint)
+0:208      subgroupClusteredXor ( global 4-component vector of uint)
+0:208        'ballot' ( temp 4-component vector of uint)
+0:208        Constant:
+0:208          2 (const uint)
+0:212  Function Definition: quad_works(vf4; ( global void)
+0:212    Function Parameters: 
+0:212      'f4' ( in 4-component vector of float)
+0:214    Sequence
+0:214      subgroupQuadBroadcast ( global 4-component vector of float)
+0:214        'f4' ( in 4-component vector of float)
+0:214        Constant:
+0:214          0 (const uint)
+0:215      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:215        'f4' ( in 4-component vector of float)
+0:216      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:216        'f4' ( in 4-component vector of float)
+0:217      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:217        'f4' ( in 4-component vector of float)
+0:221  Function Definition: partitioned_works(vf4; ( global void)
+0:221    Function Parameters: 
+0:221      'f4' ( in 4-component vector of float)
+0:223    Sequence
+0:223      Sequence
+0:223        move second child to first child ( temp 4-component vector of uint)
+0:223          'parti' ( temp 4-component vector of uint)
+0:223          subgroupPartitionNV ( global 4-component vector of uint)
+0:223            'f4' ( in 4-component vector of float)
+0:224      Sequence
+0:224        move second child to first child ( temp 4-component vector of uint)
+0:224          'ballot' ( temp 4-component vector of uint)
+0:224          Constant:
+0:224            85 (const uint)
+0:224            0 (const uint)
+0:224            0 (const uint)
+0:224            0 (const uint)
+0:225      subgroupPartitionedAddNV ( 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      subgroupPartitionedMulNV ( 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:227      subgroupPartitionedMinNV ( 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      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:228        'f4' ( in 4-component vector of float)
+0:228        'parti' ( temp 4-component vector of uint)
+0:229      subgroupPartitionedAndNV ( 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      subgroupPartitionedOrNV ( 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:231      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:231        'ballot' ( temp 4-component vector of uint)
+0:231        'parti' ( temp 4-component vector of uint)
+0:232      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:232        'f4' ( in 4-component vector of float)
+0:232        'parti' ( temp 4-component vector of uint)
+0:233      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:233        'f4' ( in 4-component vector of float)
+0:233        'parti' ( temp 4-component vector of uint)
+0:234      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:234        'f4' ( in 4-component vector of float)
+0:234        'parti' ( temp 4-component vector of uint)
+0:235      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:235        'f4' ( in 4-component vector of float)
+0:235        'parti' ( temp 4-component vector of uint)
+0:236      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:236        'ballot' ( temp 4-component vector of uint)
+0:236        'parti' ( temp 4-component vector of uint)
+0:237      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:237        'ballot' ( temp 4-component vector of uint)
+0:237        'parti' ( temp 4-component vector of uint)
+0:238      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:238        'ballot' ( temp 4-component vector of uint)
+0:238        'parti' ( temp 4-component vector of uint)
+0:239      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:239        'f4' ( in 4-component vector of float)
+0:239        'parti' ( temp 4-component vector of uint)
+0:240      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:240        'f4' ( in 4-component vector of float)
+0:240        'parti' ( temp 4-component vector of uint)
+0:241      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:241        'f4' ( in 4-component vector of float)
+0:241        'parti' ( temp 4-component vector of uint)
+0:242      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:242        'f4' ( in 4-component vector of float)
+0:242        'parti' ( temp 4-component vector of uint)
+0:243      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:243        'ballot' ( temp 4-component vector of uint)
+0:243        'parti' ( temp 4-component vector of uint)
+0:244      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:244        'ballot' ( temp 4-component vector of uint)
+0:244        'parti' ( temp 4-component vector of uint)
+0:245      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:245        'ballot' ( temp 4-component vector of uint)
+0:245        'parti' ( temp 4-component vector of uint)
+0:249  Function Definition: sm_builtins_err( ( global void)
+0:249    Function Parameters: 
+0:251    Sequence
+0:251      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:252      'gl_SMCountNV' ( in uint SMCountNV)
+0:253      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:254      'gl_SMIDNV' ( in uint SMIDNV)
+0:261  Function Definition: sm_builtins( ( global void)
+0:261    Function Parameters: 
+0:263    Sequence
+0:263      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:264      'gl_SMCountNV' ( in uint SMCountNV)
+0:265      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:266      'gl_SMIDNV' ( in uint SMIDNV)
+0:?   Linker Objects
+0:?     'accNV0' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:?     'accNV1' (layout( set=0 binding=1) uniform accelerationStructureNV)
+0:?     'payload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:?     'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+
+
+Linked ray-generation stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:113  Function Definition: main( ( global void)
+0:113    Function Parameters: 
+0:115    Sequence
+0:115      Sequence
+0:115        move second child to first child ( temp uint)
+0:115          'lx' ( temp uint)
+0:115          direct index ( temp uint)
+0:115            'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:115            Constant:
+0:115              0 (const int)
+0:116      Sequence
+0:116        move second child to first child ( temp uint)
+0:116          'ly' ( temp uint)
+0:116          direct index ( temp uint)
+0:116            'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:116            Constant:
+0:116              1 (const int)
+0:117      Sequence
+0:117        move second child to first child ( temp uint)
+0:117          'sx' ( temp uint)
+0:117          direct index ( temp uint)
+0:117            'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:117            Constant:
+0:117              0 (const int)
+0:118      Sequence
+0:118        move second child to first child ( temp uint)
+0:118          'sy' ( temp uint)
+0:118          direct index ( temp uint)
+0:118            'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:118            Constant:
+0:118              1 (const int)
+0:119      traceNV ( global void)
+0:119        'accNV0' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:119        'lx' ( temp uint)
+0:119        'ly' ( temp uint)
+0:119        'sx' ( temp uint)
+0:119        'sy' ( temp uint)
+0:119        Constant:
+0:119          0 (const uint)
+0:119        origin: direct index for structure (layout( column_major std430 offset=16) buffer 3-component vector of float)
+0:119          'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+0:119          Constant:
+0:119            1 (const uint)
+0:119        Constant:
+0:119          0.500000
+0:119        dir: direct index for structure (layout( column_major std430 offset=0) buffer 3-component vector of float)
+0:119          'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+0:119          Constant:
+0:119            0 (const uint)
+0:119        Constant:
+0:119          0.750000
+0:119        Constant:
+0:119          1 (const int)
+0:?   Linker Objects
+0:?     'accNV0' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:?     'accNV1' (layout( set=0 binding=1) uniform accelerationStructureNV)
+0:?     'payload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:?     'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+
diff --git a/Test/baseResults/glsl.460.subgroup.rint.out b/Test/baseResults/glsl.460.subgroup.rint.out
new file mode 100644
index 0000000..9915ecf
--- /dev/null
+++ b/Test/baseResults/glsl.460.subgroup.rint.out
@@ -0,0 +1,769 @@
+glsl.460.subgroup.rint
+ERROR: 0:8: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:15: 'gl_NumSubgroups' : undeclared identifier 
+ERROR: 0:16: 'gl_SubgroupID' : undeclared identifier 
+ERROR: 0:17: 'subgroupMemoryBarrierShared' : no matching overloaded function found 
+ERROR: 0:19: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:23: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:39: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:41: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:44: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:66: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:74: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:79: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:100: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:257: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:258: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:259: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:260: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:5  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:5    Function Parameters: 
+0:5      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:8      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:9      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:10      subgroupBarrier ( global void)
+0:11      subgroupMemoryBarrier ( global void)
+0:12      subgroupMemoryBarrierBuffer ( global void)
+0:13      subgroupMemoryBarrierImage ( global void)
+0:14      subgroupElect ( global bool)
+0:15      'gl_NumSubgroups' ( temp float)
+0:16      'gl_SubgroupID' ( temp float)
+0:17      Constant:
+0:17        0.000000
+0:19      subgroupAll ( global bool)
+0:19        Constant:
+0:19          true (const bool)
+0:20      subgroupAny ( global bool)
+0:20        Constant:
+0:20          false (const bool)
+0:21      subgroupAllEqual ( global bool)
+0:21        'f4' ( in 4-component vector of float)
+0:23      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:24      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:25      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:26      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:27      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:28      subgroupBroadcast ( global 4-component vector of float)
+0:28        'f4' ( in 4-component vector of float)
+0:28        Constant:
+0:28          0 (const uint)
+0:29      subgroupBroadcastFirst ( global 4-component vector of float)
+0:29        'f4' ( in 4-component vector of float)
+0:30      Sequence
+0:30        move second child to first child ( temp 4-component vector of uint)
+0:30          'ballot' ( temp 4-component vector of uint)
+0:30          subgroupBallot ( global 4-component vector of uint)
+0:30            Constant:
+0:30              false (const bool)
+0:31      subgroupInverseBallot ( global bool)
+0:31        Constant:
+0:31          1 (const uint)
+0:31          1 (const uint)
+0:31          1 (const uint)
+0:31          1 (const uint)
+0:32      subgroupBallotBitExtract ( global bool)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:32        Constant:
+0:32          0 (const uint)
+0:33      subgroupBallotBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotInclusiveBitCount ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotExclusiveBitCount ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:36      subgroupBallotFindLSB ( global uint)
+0:36        'ballot' ( temp 4-component vector of uint)
+0:37      subgroupBallotFindMSB ( global uint)
+0:37        'ballot' ( temp 4-component vector of uint)
+0:39      subgroupShuffle ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          0 (const uint)
+0:40      subgroupShuffleXor ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:41      subgroupShuffleUp ( global 4-component vector of float)
+0:41        'f4' ( in 4-component vector of float)
+0:41        Constant:
+0:41          1 (const uint)
+0:42      subgroupShuffleDown ( global 4-component vector of float)
+0:42        'f4' ( in 4-component vector of float)
+0:42        Constant:
+0:42          1 (const uint)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        'result' ( temp 4-component vector of float)
+0:44        subgroupAdd ( global 4-component vector of float)
+0:44          'f4' ( in 4-component vector of float)
+0:45      subgroupMul ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupMin ( global 4-component vector of float)
+0:46        'f4' ( in 4-component vector of float)
+0:47      subgroupMax ( global 4-component vector of float)
+0:47        'f4' ( in 4-component vector of float)
+0:48      subgroupAnd ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupOr ( global 4-component vector of uint)
+0:49        'ballot' ( temp 4-component vector of uint)
+0:50      subgroupXor ( global 4-component vector of uint)
+0:50        'ballot' ( temp 4-component vector of uint)
+0:51      subgroupInclusiveAdd ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMul ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveMin ( global 4-component vector of float)
+0:53        'f4' ( in 4-component vector of float)
+0:54      subgroupInclusiveMax ( global 4-component vector of float)
+0:54        'f4' ( in 4-component vector of float)
+0:55      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupInclusiveOr ( global 4-component vector of uint)
+0:56        'ballot' ( temp 4-component vector of uint)
+0:57      subgroupInclusiveXor ( global 4-component vector of uint)
+0:57        'ballot' ( temp 4-component vector of uint)
+0:58      subgroupExclusiveAdd ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMul ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveMin ( global 4-component vector of float)
+0:60        'f4' ( in 4-component vector of float)
+0:61      subgroupExclusiveMax ( global 4-component vector of float)
+0:61        'f4' ( in 4-component vector of float)
+0:62      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:63      subgroupExclusiveOr ( global 4-component vector of uint)
+0:63        'ballot' ( temp 4-component vector of uint)
+0:64      subgroupExclusiveXor ( global 4-component vector of uint)
+0:64        'ballot' ( temp 4-component vector of uint)
+0:66      subgroupClusteredAdd ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMul ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredMin ( global 4-component vector of float)
+0:68        'f4' ( in 4-component vector of float)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredMax ( global 4-component vector of float)
+0:69        'f4' ( in 4-component vector of float)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredAnd ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:71      subgroupClusteredOr ( global 4-component vector of uint)
+0:71        'ballot' ( temp 4-component vector of uint)
+0:71        Constant:
+0:71          2 (const uint)
+0:72      subgroupClusteredXor ( global 4-component vector of uint)
+0:72        'ballot' ( temp 4-component vector of uint)
+0:72        Constant:
+0:72          2 (const uint)
+0:74      subgroupQuadBroadcast ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:74        Constant:
+0:74          0 (const uint)
+0:75      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:76      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:76        'f4' ( in 4-component vector of float)
+0:77      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:77        'f4' ( in 4-component vector of float)
+0:79      Sequence
+0:79        move second child to first child ( temp 4-component vector of uint)
+0:79          'parti' ( temp 4-component vector of uint)
+0:79          subgroupPartitionNV ( global 4-component vector of uint)
+0:79            'f4' ( in 4-component vector of float)
+0:80      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:82        'f4' ( in 4-component vector of float)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:83        'f4' ( in 4-component vector of float)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:85        'ballot' ( temp 4-component vector of uint)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:86        'ballot' ( temp 4-component vector of uint)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:89        'f4' ( in 4-component vector of float)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:90        'f4' ( in 4-component vector of float)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:92        'ballot' ( temp 4-component vector of uint)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:93        'ballot' ( temp 4-component vector of uint)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:96        'f4' ( in 4-component vector of float)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:97        'f4' ( in 4-component vector of float)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:99      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:99        'ballot' ( temp 4-component vector of uint)
+0:99        'parti' ( temp 4-component vector of uint)
+0:100      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:100        'ballot' ( temp 4-component vector of uint)
+0:100        'parti' ( temp 4-component vector of uint)
+0:102      Branch: Return with expression
+0:102        'result' ( temp 4-component vector of float)
+0:108  Function Definition: main( ( global void)
+0:108    Function Parameters: 
+0:110    Sequence
+0:110      Sequence
+0:110        move second child to first child ( temp 3-component vector of uint)
+0:110          'v0' ( temp 3-component vector of uint)
+0:110          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:111      Sequence
+0:111        move second child to first child ( temp 3-component vector of uint)
+0:111          'v1' ( temp 3-component vector of uint)
+0:111          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:112      Sequence
+0:112        move second child to first child ( temp int)
+0:112          'v2' ( temp int)
+0:112          'gl_PrimitiveID' ( in int PrimitiveID)
+0:113      Sequence
+0:113        move second child to first child ( temp int)
+0:113          'v3' ( temp int)
+0:113          'gl_InstanceID' ( in int InstanceId)
+0:114      Sequence
+0:114        move second child to first child ( temp int)
+0:114          'v4' ( temp int)
+0:114          'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:115      Sequence
+0:115        move second child to first child ( temp 3-component vector of float)
+0:115          'v5' ( temp 3-component vector of float)
+0:115          'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:116      Sequence
+0:116        move second child to first child ( temp 3-component vector of float)
+0:116          'v6' ( temp 3-component vector of float)
+0:116          'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:117      Sequence
+0:117        move second child to first child ( temp 3-component vector of float)
+0:117          'v7' ( temp 3-component vector of float)
+0:117          'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:118      Sequence
+0:118        move second child to first child ( temp 3-component vector of float)
+0:118          'v8' ( temp 3-component vector of float)
+0:118          'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:119      Sequence
+0:119        move second child to first child ( temp float)
+0:119          'v9' ( temp float)
+0:119          'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:120      Sequence
+0:120        move second child to first child ( temp float)
+0:120          'v10' ( temp float)
+0:120          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:121      Sequence
+0:121        move second child to first child ( temp 4X3 matrix of float)
+0:121          'v11' ( temp 4X3 matrix of float)
+0:121          'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:122      Sequence
+0:122        move second child to first child ( temp 4X3 matrix of float)
+0:122          'v12' ( temp 4X3 matrix of float)
+0:122          'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:123      move second child to first child ( temp 4-component vector of float)
+0:123        'iAttr' ( hitAttributeNV 4-component vector of float)
+0:123        Constant:
+0:123          0.500000
+0:123          0.500000
+0:123          0.000000
+0:123          1.000000
+0:124      reportIntersectionNV ( global bool)
+0:124        Constant:
+0:124          0.500000
+0:124        Constant:
+0:124          1 (const uint)
+0:129  Function Definition: basic_works( ( global void)
+0:129    Function Parameters: 
+0:131    Sequence
+0:131      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:132      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:133      subgroupBarrier ( global void)
+0:134      subgroupMemoryBarrier ( global void)
+0:135      subgroupMemoryBarrierBuffer ( global void)
+0:136      subgroupMemoryBarrierImage ( global void)
+0:137      subgroupElect ( global bool)
+0:141  Function Definition: ballot_works(vf4; ( global void)
+0:141    Function Parameters: 
+0:141      'f4' ( in 4-component vector of float)
+0:142    Sequence
+0:142      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:143      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:144      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:145      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:146      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:147      subgroupBroadcast ( global 4-component vector of float)
+0:147        'f4' ( in 4-component vector of float)
+0:147        Constant:
+0:147          0 (const uint)
+0:148      subgroupBroadcastFirst ( global 4-component vector of float)
+0:148        'f4' ( in 4-component vector of float)
+0:149      Sequence
+0:149        move second child to first child ( temp 4-component vector of uint)
+0:149          'ballot' ( temp 4-component vector of uint)
+0:149          subgroupBallot ( global 4-component vector of uint)
+0:149            Constant:
+0:149              false (const bool)
+0:150      subgroupInverseBallot ( global bool)
+0:150        Constant:
+0:150          1 (const uint)
+0:150          1 (const uint)
+0:150          1 (const uint)
+0:150          1 (const uint)
+0:151      subgroupBallotBitExtract ( global bool)
+0:151        'ballot' ( temp 4-component vector of uint)
+0:151        Constant:
+0:151          0 (const uint)
+0:152      subgroupBallotBitCount ( global uint)
+0:152        'ballot' ( temp 4-component vector of uint)
+0:153      subgroupBallotInclusiveBitCount ( global uint)
+0:153        'ballot' ( temp 4-component vector of uint)
+0:154      subgroupBallotExclusiveBitCount ( global uint)
+0:154        'ballot' ( temp 4-component vector of uint)
+0:155      subgroupBallotFindLSB ( global uint)
+0:155        'ballot' ( temp 4-component vector of uint)
+0:156      subgroupBallotFindMSB ( global uint)
+0:156        'ballot' ( temp 4-component vector of uint)
+0:160  Function Definition: vote_works(vf4; ( global void)
+0:160    Function Parameters: 
+0:160      'f4' ( in 4-component vector of float)
+0:162    Sequence
+0:162      subgroupAll ( global bool)
+0:162        Constant:
+0:162          true (const bool)
+0:163      subgroupAny ( global bool)
+0:163        Constant:
+0:163          false (const bool)
+0:164      subgroupAllEqual ( global bool)
+0:164        'f4' ( in 4-component vector of float)
+0:169  Function Definition: shuffle_works(vf4; ( global void)
+0:169    Function Parameters: 
+0:169      'f4' ( in 4-component vector of float)
+0:171    Sequence
+0:171      subgroupShuffle ( global 4-component vector of float)
+0:171        'f4' ( in 4-component vector of float)
+0:171        Constant:
+0:171          0 (const uint)
+0:172      subgroupShuffleXor ( global 4-component vector of float)
+0:172        'f4' ( in 4-component vector of float)
+0:172        Constant:
+0:172          1 (const uint)
+0:173      subgroupShuffleUp ( global 4-component vector of float)
+0:173        'f4' ( in 4-component vector of float)
+0:173        Constant:
+0:173          1 (const uint)
+0:174      subgroupShuffleDown ( global 4-component vector of float)
+0:174        'f4' ( in 4-component vector of float)
+0:174        Constant:
+0:174          1 (const uint)
+0:178  Function Definition: arith_works(vf4; ( global void)
+0:178    Function Parameters: 
+0:178      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:181      subgroupAdd ( global 4-component vector of float)
+0:181        'f4' ( in 4-component vector of float)
+0:182      subgroupMul ( global 4-component vector of float)
+0:182        'f4' ( in 4-component vector of float)
+0:183      subgroupMin ( global 4-component vector of float)
+0:183        'f4' ( in 4-component vector of float)
+0:184      subgroupMax ( global 4-component vector of float)
+0:184        'f4' ( in 4-component vector of float)
+0:185      subgroupAnd ( global 4-component vector of uint)
+0:185        'ballot' ( temp 4-component vector of uint)
+0:186      subgroupOr ( global 4-component vector of uint)
+0:186        'ballot' ( temp 4-component vector of uint)
+0:187      subgroupXor ( global 4-component vector of uint)
+0:187        'ballot' ( temp 4-component vector of uint)
+0:188      subgroupInclusiveAdd ( global 4-component vector of float)
+0:188        'f4' ( in 4-component vector of float)
+0:189      subgroupInclusiveMul ( global 4-component vector of float)
+0:189        'f4' ( in 4-component vector of float)
+0:190      subgroupInclusiveMin ( global 4-component vector of float)
+0:190        'f4' ( in 4-component vector of float)
+0:191      subgroupInclusiveMax ( global 4-component vector of float)
+0:191        'f4' ( in 4-component vector of float)
+0:192      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:192        'ballot' ( temp 4-component vector of uint)
+0:193      subgroupInclusiveOr ( global 4-component vector of uint)
+0:193        'ballot' ( temp 4-component vector of uint)
+0:194      subgroupInclusiveXor ( global 4-component vector of uint)
+0:194        'ballot' ( temp 4-component vector of uint)
+0:195      subgroupExclusiveAdd ( global 4-component vector of float)
+0:195        'f4' ( in 4-component vector of float)
+0:196      subgroupExclusiveMul ( global 4-component vector of float)
+0:196        'f4' ( in 4-component vector of float)
+0:197      subgroupExclusiveMin ( global 4-component vector of float)
+0:197        'f4' ( in 4-component vector of float)
+0:198      subgroupExclusiveMax ( global 4-component vector of float)
+0:198        'f4' ( in 4-component vector of float)
+0:199      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:199        'ballot' ( temp 4-component vector of uint)
+0:200      subgroupExclusiveOr ( global 4-component vector of uint)
+0:200        'ballot' ( temp 4-component vector of uint)
+0:201      subgroupExclusiveXor ( global 4-component vector of uint)
+0:201        'ballot' ( temp 4-component vector of uint)
+0:205  Function Definition: clustered_works(vf4; ( global void)
+0:205    Function Parameters: 
+0:205      'f4' ( in 4-component vector of float)
+0:207    Sequence
+0:207      Sequence
+0:207        move second child to first child ( temp 4-component vector of uint)
+0:207          'ballot' ( temp 4-component vector of uint)
+0:207          Constant:
+0:207            85 (const uint)
+0:207            0 (const uint)
+0:207            0 (const uint)
+0:207            0 (const uint)
+0:208      subgroupClusteredAdd ( global 4-component vector of float)
+0:208        'f4' ( in 4-component vector of float)
+0:208        Constant:
+0:208          2 (const uint)
+0:209      subgroupClusteredMul ( global 4-component vector of float)
+0:209        'f4' ( in 4-component vector of float)
+0:209        Constant:
+0:209          2 (const uint)
+0:210      subgroupClusteredMin ( global 4-component vector of float)
+0:210        'f4' ( in 4-component vector of float)
+0:210        Constant:
+0:210          2 (const uint)
+0:211      subgroupClusteredMax ( global 4-component vector of float)
+0:211        'f4' ( in 4-component vector of float)
+0:211        Constant:
+0:211          2 (const uint)
+0:212      subgroupClusteredAnd ( global 4-component vector of uint)
+0:212        'ballot' ( temp 4-component vector of uint)
+0:212        Constant:
+0:212          2 (const uint)
+0:213      subgroupClusteredOr ( global 4-component vector of uint)
+0:213        'ballot' ( temp 4-component vector of uint)
+0:213        Constant:
+0:213          2 (const uint)
+0:214      subgroupClusteredXor ( global 4-component vector of uint)
+0:214        'ballot' ( temp 4-component vector of uint)
+0:214        Constant:
+0:214          2 (const uint)
+0:218  Function Definition: quad_works(vf4; ( global void)
+0:218    Function Parameters: 
+0:218      'f4' ( in 4-component vector of float)
+0:220    Sequence
+0:220      subgroupQuadBroadcast ( global 4-component vector of float)
+0:220        'f4' ( in 4-component vector of float)
+0:220        Constant:
+0:220          0 (const uint)
+0:221      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:221        'f4' ( in 4-component vector of float)
+0:222      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:222        'f4' ( in 4-component vector of float)
+0:223      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:223        'f4' ( in 4-component vector of float)
+0:227  Function Definition: partitioned_works(vf4; ( global void)
+0:227    Function Parameters: 
+0:227      'f4' ( in 4-component vector of float)
+0:229    Sequence
+0:229      Sequence
+0:229        move second child to first child ( temp 4-component vector of uint)
+0:229          'parti' ( temp 4-component vector of uint)
+0:229          subgroupPartitionNV ( global 4-component vector of uint)
+0:229            'f4' ( in 4-component vector of float)
+0:230      Sequence
+0:230        move second child to first child ( temp 4-component vector of uint)
+0:230          'ballot' ( temp 4-component vector of uint)
+0:230          Constant:
+0:230            85 (const uint)
+0:230            0 (const uint)
+0:230            0 (const uint)
+0:230            0 (const uint)
+0:231      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:231        'f4' ( in 4-component vector of float)
+0:231        'parti' ( temp 4-component vector of uint)
+0:232      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:232        'f4' ( in 4-component vector of float)
+0:232        'parti' ( temp 4-component vector of uint)
+0:233      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:233        'f4' ( in 4-component vector of float)
+0:233        'parti' ( temp 4-component vector of uint)
+0:234      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:234        'f4' ( in 4-component vector of float)
+0:234        'parti' ( temp 4-component vector of uint)
+0:235      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:235        'ballot' ( temp 4-component vector of uint)
+0:235        'parti' ( temp 4-component vector of uint)
+0:236      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:236        'ballot' ( temp 4-component vector of uint)
+0:236        'parti' ( temp 4-component vector of uint)
+0:237      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:237        'ballot' ( temp 4-component vector of uint)
+0:237        'parti' ( temp 4-component vector of uint)
+0:238      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:238        'f4' ( in 4-component vector of float)
+0:238        'parti' ( temp 4-component vector of uint)
+0:239      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:239        'f4' ( in 4-component vector of float)
+0:239        'parti' ( temp 4-component vector of uint)
+0:240      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:240        'f4' ( in 4-component vector of float)
+0:240        'parti' ( temp 4-component vector of uint)
+0:241      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:241        'f4' ( in 4-component vector of float)
+0:241        'parti' ( temp 4-component vector of uint)
+0:242      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:242        'ballot' ( temp 4-component vector of uint)
+0:242        'parti' ( temp 4-component vector of uint)
+0:243      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:243        'ballot' ( temp 4-component vector of uint)
+0:243        'parti' ( temp 4-component vector of uint)
+0:244      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:244        'ballot' ( temp 4-component vector of uint)
+0:244        'parti' ( temp 4-component vector of uint)
+0:245      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:245        'f4' ( in 4-component vector of float)
+0:245        'parti' ( temp 4-component vector of uint)
+0:246      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:246        'f4' ( in 4-component vector of float)
+0:246        'parti' ( temp 4-component vector of uint)
+0:247      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:247        'f4' ( in 4-component vector of float)
+0:247        'parti' ( temp 4-component vector of uint)
+0:248      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:248        'f4' ( in 4-component vector of float)
+0:248        'parti' ( temp 4-component vector of uint)
+0:249      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:249        'ballot' ( temp 4-component vector of uint)
+0:249        'parti' ( temp 4-component vector of uint)
+0:250      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:250        'ballot' ( temp 4-component vector of uint)
+0:250        'parti' ( temp 4-component vector of uint)
+0:251      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:251        'ballot' ( temp 4-component vector of uint)
+0:251        'parti' ( temp 4-component vector of uint)
+0:255  Function Definition: sm_builtins_err( ( global void)
+0:255    Function Parameters: 
+0:257    Sequence
+0:257      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:258      'gl_SMCountNV' ( in uint SMCountNV)
+0:259      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:260      'gl_SMIDNV' ( in uint SMIDNV)
+0:267  Function Definition: sm_builtins( ( global void)
+0:267    Function Parameters: 
+0:269    Sequence
+0:269      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:270      'gl_SMCountNV' ( in uint SMCountNV)
+0:271      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:272      'gl_SMIDNV' ( in uint SMIDNV)
+0:?   Linker Objects
+0:?     'iAttr' ( hitAttributeNV 4-component vector of float)
+
+
+Linked intersection stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:108  Function Definition: main( ( global void)
+0:108    Function Parameters: 
+0:110    Sequence
+0:110      Sequence
+0:110        move second child to first child ( temp 3-component vector of uint)
+0:110          'v0' ( temp 3-component vector of uint)
+0:110          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:111      Sequence
+0:111        move second child to first child ( temp 3-component vector of uint)
+0:111          'v1' ( temp 3-component vector of uint)
+0:111          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:112      Sequence
+0:112        move second child to first child ( temp int)
+0:112          'v2' ( temp int)
+0:112          'gl_PrimitiveID' ( in int PrimitiveID)
+0:113      Sequence
+0:113        move second child to first child ( temp int)
+0:113          'v3' ( temp int)
+0:113          'gl_InstanceID' ( in int InstanceId)
+0:114      Sequence
+0:114        move second child to first child ( temp int)
+0:114          'v4' ( temp int)
+0:114          'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:115      Sequence
+0:115        move second child to first child ( temp 3-component vector of float)
+0:115          'v5' ( temp 3-component vector of float)
+0:115          'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:116      Sequence
+0:116        move second child to first child ( temp 3-component vector of float)
+0:116          'v6' ( temp 3-component vector of float)
+0:116          'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:117      Sequence
+0:117        move second child to first child ( temp 3-component vector of float)
+0:117          'v7' ( temp 3-component vector of float)
+0:117          'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:118      Sequence
+0:118        move second child to first child ( temp 3-component vector of float)
+0:118          'v8' ( temp 3-component vector of float)
+0:118          'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:119      Sequence
+0:119        move second child to first child ( temp float)
+0:119          'v9' ( temp float)
+0:119          'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:120      Sequence
+0:120        move second child to first child ( temp float)
+0:120          'v10' ( temp float)
+0:120          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:121      Sequence
+0:121        move second child to first child ( temp 4X3 matrix of float)
+0:121          'v11' ( temp 4X3 matrix of float)
+0:121          'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:122      Sequence
+0:122        move second child to first child ( temp 4X3 matrix of float)
+0:122          'v12' ( temp 4X3 matrix of float)
+0:122          'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:123      move second child to first child ( temp 4-component vector of float)
+0:123        'iAttr' ( hitAttributeNV 4-component vector of float)
+0:123        Constant:
+0:123          0.500000
+0:123          0.500000
+0:123          0.000000
+0:123          1.000000
+0:124      reportIntersectionNV ( global bool)
+0:124        Constant:
+0:124          0.500000
+0:124        Constant:
+0:124          1 (const uint)
+0:?   Linker Objects
+0:?     'iAttr' ( hitAttributeNV 4-component vector of float)
+
diff --git a/Test/baseResults/glsl.460.subgroup.rmiss.out b/Test/baseResults/glsl.460.subgroup.rmiss.out
new file mode 100644
index 0000000..ddf7d1b
--- /dev/null
+++ b/Test/baseResults/glsl.460.subgroup.rmiss.out
@@ -0,0 +1,761 @@
+glsl.460.subgroup.rmiss
+ERROR: 0:8: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:15: 'gl_NumSubgroups' : undeclared identifier 
+ERROR: 0:16: 'gl_SubgroupID' : undeclared identifier 
+ERROR: 0:17: 'subgroupMemoryBarrierShared' : no matching overloaded function found 
+ERROR: 0:19: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:23: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:39: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:41: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:44: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:66: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:74: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:79: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:100: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:251: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:252: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:253: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:254: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:5  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:5    Function Parameters: 
+0:5      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:8      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:9      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:10      subgroupBarrier ( global void)
+0:11      subgroupMemoryBarrier ( global void)
+0:12      subgroupMemoryBarrierBuffer ( global void)
+0:13      subgroupMemoryBarrierImage ( global void)
+0:14      subgroupElect ( global bool)
+0:15      'gl_NumSubgroups' ( temp float)
+0:16      'gl_SubgroupID' ( temp float)
+0:17      Constant:
+0:17        0.000000
+0:19      subgroupAll ( global bool)
+0:19        Constant:
+0:19          true (const bool)
+0:20      subgroupAny ( global bool)
+0:20        Constant:
+0:20          false (const bool)
+0:21      subgroupAllEqual ( global bool)
+0:21        'f4' ( in 4-component vector of float)
+0:23      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:24      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:25      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:26      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:27      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:28      subgroupBroadcast ( global 4-component vector of float)
+0:28        'f4' ( in 4-component vector of float)
+0:28        Constant:
+0:28          0 (const uint)
+0:29      subgroupBroadcastFirst ( global 4-component vector of float)
+0:29        'f4' ( in 4-component vector of float)
+0:30      Sequence
+0:30        move second child to first child ( temp 4-component vector of uint)
+0:30          'ballot' ( temp 4-component vector of uint)
+0:30          subgroupBallot ( global 4-component vector of uint)
+0:30            Constant:
+0:30              false (const bool)
+0:31      subgroupInverseBallot ( global bool)
+0:31        Constant:
+0:31          1 (const uint)
+0:31          1 (const uint)
+0:31          1 (const uint)
+0:31          1 (const uint)
+0:32      subgroupBallotBitExtract ( global bool)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:32        Constant:
+0:32          0 (const uint)
+0:33      subgroupBallotBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotInclusiveBitCount ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotExclusiveBitCount ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:36      subgroupBallotFindLSB ( global uint)
+0:36        'ballot' ( temp 4-component vector of uint)
+0:37      subgroupBallotFindMSB ( global uint)
+0:37        'ballot' ( temp 4-component vector of uint)
+0:39      subgroupShuffle ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          0 (const uint)
+0:40      subgroupShuffleXor ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:41      subgroupShuffleUp ( global 4-component vector of float)
+0:41        'f4' ( in 4-component vector of float)
+0:41        Constant:
+0:41          1 (const uint)
+0:42      subgroupShuffleDown ( global 4-component vector of float)
+0:42        'f4' ( in 4-component vector of float)
+0:42        Constant:
+0:42          1 (const uint)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        'result' ( temp 4-component vector of float)
+0:44        subgroupAdd ( global 4-component vector of float)
+0:44          'f4' ( in 4-component vector of float)
+0:45      subgroupMul ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupMin ( global 4-component vector of float)
+0:46        'f4' ( in 4-component vector of float)
+0:47      subgroupMax ( global 4-component vector of float)
+0:47        'f4' ( in 4-component vector of float)
+0:48      subgroupAnd ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupOr ( global 4-component vector of uint)
+0:49        'ballot' ( temp 4-component vector of uint)
+0:50      subgroupXor ( global 4-component vector of uint)
+0:50        'ballot' ( temp 4-component vector of uint)
+0:51      subgroupInclusiveAdd ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMul ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveMin ( global 4-component vector of float)
+0:53        'f4' ( in 4-component vector of float)
+0:54      subgroupInclusiveMax ( global 4-component vector of float)
+0:54        'f4' ( in 4-component vector of float)
+0:55      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupInclusiveOr ( global 4-component vector of uint)
+0:56        'ballot' ( temp 4-component vector of uint)
+0:57      subgroupInclusiveXor ( global 4-component vector of uint)
+0:57        'ballot' ( temp 4-component vector of uint)
+0:58      subgroupExclusiveAdd ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMul ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveMin ( global 4-component vector of float)
+0:60        'f4' ( in 4-component vector of float)
+0:61      subgroupExclusiveMax ( global 4-component vector of float)
+0:61        'f4' ( in 4-component vector of float)
+0:62      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:63      subgroupExclusiveOr ( global 4-component vector of uint)
+0:63        'ballot' ( temp 4-component vector of uint)
+0:64      subgroupExclusiveXor ( global 4-component vector of uint)
+0:64        'ballot' ( temp 4-component vector of uint)
+0:66      subgroupClusteredAdd ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMul ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredMin ( global 4-component vector of float)
+0:68        'f4' ( in 4-component vector of float)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredMax ( global 4-component vector of float)
+0:69        'f4' ( in 4-component vector of float)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredAnd ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:71      subgroupClusteredOr ( global 4-component vector of uint)
+0:71        'ballot' ( temp 4-component vector of uint)
+0:71        Constant:
+0:71          2 (const uint)
+0:72      subgroupClusteredXor ( global 4-component vector of uint)
+0:72        'ballot' ( temp 4-component vector of uint)
+0:72        Constant:
+0:72          2 (const uint)
+0:74      subgroupQuadBroadcast ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:74        Constant:
+0:74          0 (const uint)
+0:75      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:76      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:76        'f4' ( in 4-component vector of float)
+0:77      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:77        'f4' ( in 4-component vector of float)
+0:79      Sequence
+0:79        move second child to first child ( temp 4-component vector of uint)
+0:79          'parti' ( temp 4-component vector of uint)
+0:79          subgroupPartitionNV ( global 4-component vector of uint)
+0:79            'f4' ( in 4-component vector of float)
+0:80      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:82        'f4' ( in 4-component vector of float)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:83        'f4' ( in 4-component vector of float)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:85        'ballot' ( temp 4-component vector of uint)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:86        'ballot' ( temp 4-component vector of uint)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:89        'f4' ( in 4-component vector of float)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:90        'f4' ( in 4-component vector of float)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:92        'ballot' ( temp 4-component vector of uint)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:93        'ballot' ( temp 4-component vector of uint)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:96        'f4' ( in 4-component vector of float)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:97        'f4' ( in 4-component vector of float)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:99      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:99        'ballot' ( temp 4-component vector of uint)
+0:99        'parti' ( temp 4-component vector of uint)
+0:100      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:100        'ballot' ( temp 4-component vector of uint)
+0:100        'parti' ( temp 4-component vector of uint)
+0:102      Branch: Return with expression
+0:102        'result' ( temp 4-component vector of float)
+0:109  Function Definition: main( ( global void)
+0:109    Function Parameters: 
+0:111    Sequence
+0:111      Sequence
+0:111        move second child to first child ( temp 3-component vector of uint)
+0:111          'v0' ( temp 3-component vector of uint)
+0:111          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:112      Sequence
+0:112        move second child to first child ( temp 3-component vector of uint)
+0:112          'v1' ( temp 3-component vector of uint)
+0:112          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:113      Sequence
+0:113        move second child to first child ( temp 3-component vector of float)
+0:113          'v2' ( temp 3-component vector of float)
+0:113          'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:114      Sequence
+0:114        move second child to first child ( temp 3-component vector of float)
+0:114          'v3' ( temp 3-component vector of float)
+0:114          'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:115      Sequence
+0:115        move second child to first child ( temp 3-component vector of float)
+0:115          'v4' ( temp 3-component vector of float)
+0:115          'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:116      Sequence
+0:116        move second child to first child ( temp 3-component vector of float)
+0:116          'v5' ( temp 3-component vector of float)
+0:116          'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:117      Sequence
+0:117        move second child to first child ( temp float)
+0:117          'v6' ( temp float)
+0:117          'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:118      Sequence
+0:118        move second child to first child ( temp float)
+0:118          'v7' ( temp float)
+0:118          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:119      traceNV ( global void)
+0:119        'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:119        Constant:
+0:119          0 (const uint)
+0:119        Constant:
+0:119          1 (const uint)
+0:119        Constant:
+0:119          2 (const uint)
+0:119        Constant:
+0:119          3 (const uint)
+0:119        Constant:
+0:119          0 (const uint)
+0:119        Constant:
+0:119          0.500000
+0:119          0.500000
+0:119          0.500000
+0:119        Constant:
+0:119          0.500000
+0:119        Constant:
+0:119          1.000000
+0:119          1.000000
+0:119          1.000000
+0:119        Constant:
+0:119          0.750000
+0:119        Constant:
+0:119          1 (const int)
+0:123  Function Definition: basic_works( ( global void)
+0:123    Function Parameters: 
+0:125    Sequence
+0:125      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:126      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:127      subgroupBarrier ( global void)
+0:128      subgroupMemoryBarrier ( global void)
+0:129      subgroupMemoryBarrierBuffer ( global void)
+0:130      subgroupMemoryBarrierImage ( global void)
+0:131      subgroupElect ( global bool)
+0:135  Function Definition: ballot_works(vf4; ( global void)
+0:135    Function Parameters: 
+0:135      'f4' ( in 4-component vector of float)
+0:136    Sequence
+0:136      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:137      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:138      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:139      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:140      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:141      subgroupBroadcast ( global 4-component vector of float)
+0:141        'f4' ( in 4-component vector of float)
+0:141        Constant:
+0:141          0 (const uint)
+0:142      subgroupBroadcastFirst ( global 4-component vector of float)
+0:142        'f4' ( in 4-component vector of float)
+0:143      Sequence
+0:143        move second child to first child ( temp 4-component vector of uint)
+0:143          'ballot' ( temp 4-component vector of uint)
+0:143          subgroupBallot ( global 4-component vector of uint)
+0:143            Constant:
+0:143              false (const bool)
+0:144      subgroupInverseBallot ( global bool)
+0:144        Constant:
+0:144          1 (const uint)
+0:144          1 (const uint)
+0:144          1 (const uint)
+0:144          1 (const uint)
+0:145      subgroupBallotBitExtract ( global bool)
+0:145        'ballot' ( temp 4-component vector of uint)
+0:145        Constant:
+0:145          0 (const uint)
+0:146      subgroupBallotBitCount ( global uint)
+0:146        'ballot' ( temp 4-component vector of uint)
+0:147      subgroupBallotInclusiveBitCount ( global uint)
+0:147        'ballot' ( temp 4-component vector of uint)
+0:148      subgroupBallotExclusiveBitCount ( global uint)
+0:148        'ballot' ( temp 4-component vector of uint)
+0:149      subgroupBallotFindLSB ( global uint)
+0:149        'ballot' ( temp 4-component vector of uint)
+0:150      subgroupBallotFindMSB ( global uint)
+0:150        'ballot' ( temp 4-component vector of uint)
+0:154  Function Definition: vote_works(vf4; ( global void)
+0:154    Function Parameters: 
+0:154      'f4' ( in 4-component vector of float)
+0:156    Sequence
+0:156      subgroupAll ( global bool)
+0:156        Constant:
+0:156          true (const bool)
+0:157      subgroupAny ( global bool)
+0:157        Constant:
+0:157          false (const bool)
+0:158      subgroupAllEqual ( global bool)
+0:158        'f4' ( in 4-component vector of float)
+0:163  Function Definition: shuffle_works(vf4; ( global void)
+0:163    Function Parameters: 
+0:163      'f4' ( in 4-component vector of float)
+0:165    Sequence
+0:165      subgroupShuffle ( global 4-component vector of float)
+0:165        'f4' ( in 4-component vector of float)
+0:165        Constant:
+0:165          0 (const uint)
+0:166      subgroupShuffleXor ( global 4-component vector of float)
+0:166        'f4' ( in 4-component vector of float)
+0:166        Constant:
+0:166          1 (const uint)
+0:167      subgroupShuffleUp ( global 4-component vector of float)
+0:167        'f4' ( in 4-component vector of float)
+0:167        Constant:
+0:167          1 (const uint)
+0:168      subgroupShuffleDown ( global 4-component vector of float)
+0:168        'f4' ( in 4-component vector of float)
+0:168        Constant:
+0:168          1 (const uint)
+0:172  Function Definition: arith_works(vf4; ( global void)
+0:172    Function Parameters: 
+0:172      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:175      subgroupAdd ( global 4-component vector of float)
+0:175        'f4' ( in 4-component vector of float)
+0:176      subgroupMul ( global 4-component vector of float)
+0:176        'f4' ( in 4-component vector of float)
+0:177      subgroupMin ( global 4-component vector of float)
+0:177        'f4' ( in 4-component vector of float)
+0:178      subgroupMax ( global 4-component vector of float)
+0:178        'f4' ( in 4-component vector of float)
+0:179      subgroupAnd ( global 4-component vector of uint)
+0:179        'ballot' ( temp 4-component vector of uint)
+0:180      subgroupOr ( global 4-component vector of uint)
+0:180        'ballot' ( temp 4-component vector of uint)
+0:181      subgroupXor ( global 4-component vector of uint)
+0:181        'ballot' ( temp 4-component vector of uint)
+0:182      subgroupInclusiveAdd ( global 4-component vector of float)
+0:182        'f4' ( in 4-component vector of float)
+0:183      subgroupInclusiveMul ( global 4-component vector of float)
+0:183        'f4' ( in 4-component vector of float)
+0:184      subgroupInclusiveMin ( global 4-component vector of float)
+0:184        'f4' ( in 4-component vector of float)
+0:185      subgroupInclusiveMax ( global 4-component vector of float)
+0:185        'f4' ( in 4-component vector of float)
+0:186      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:186        'ballot' ( temp 4-component vector of uint)
+0:187      subgroupInclusiveOr ( global 4-component vector of uint)
+0:187        'ballot' ( temp 4-component vector of uint)
+0:188      subgroupInclusiveXor ( global 4-component vector of uint)
+0:188        'ballot' ( temp 4-component vector of uint)
+0:189      subgroupExclusiveAdd ( global 4-component vector of float)
+0:189        'f4' ( in 4-component vector of float)
+0:190      subgroupExclusiveMul ( global 4-component vector of float)
+0:190        'f4' ( in 4-component vector of float)
+0:191      subgroupExclusiveMin ( global 4-component vector of float)
+0:191        'f4' ( in 4-component vector of float)
+0:192      subgroupExclusiveMax ( global 4-component vector of float)
+0:192        'f4' ( in 4-component vector of float)
+0:193      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:193        'ballot' ( temp 4-component vector of uint)
+0:194      subgroupExclusiveOr ( global 4-component vector of uint)
+0:194        'ballot' ( temp 4-component vector of uint)
+0:195      subgroupExclusiveXor ( global 4-component vector of uint)
+0:195        'ballot' ( temp 4-component vector of uint)
+0:199  Function Definition: clustered_works(vf4; ( global void)
+0:199    Function Parameters: 
+0:199      'f4' ( in 4-component vector of float)
+0:201    Sequence
+0:201      Sequence
+0:201        move second child to first child ( temp 4-component vector of uint)
+0:201          'ballot' ( temp 4-component vector of uint)
+0:201          Constant:
+0:201            85 (const uint)
+0:201            0 (const uint)
+0:201            0 (const uint)
+0:201            0 (const uint)
+0:202      subgroupClusteredAdd ( global 4-component vector of float)
+0:202        'f4' ( in 4-component vector of float)
+0:202        Constant:
+0:202          2 (const uint)
+0:203      subgroupClusteredMul ( global 4-component vector of float)
+0:203        'f4' ( in 4-component vector of float)
+0:203        Constant:
+0:203          2 (const uint)
+0:204      subgroupClusteredMin ( global 4-component vector of float)
+0:204        'f4' ( in 4-component vector of float)
+0:204        Constant:
+0:204          2 (const uint)
+0:205      subgroupClusteredMax ( global 4-component vector of float)
+0:205        'f4' ( in 4-component vector of float)
+0:205        Constant:
+0:205          2 (const uint)
+0:206      subgroupClusteredAnd ( global 4-component vector of uint)
+0:206        'ballot' ( temp 4-component vector of uint)
+0:206        Constant:
+0:206          2 (const uint)
+0:207      subgroupClusteredOr ( global 4-component vector of uint)
+0:207        'ballot' ( temp 4-component vector of uint)
+0:207        Constant:
+0:207          2 (const uint)
+0:208      subgroupClusteredXor ( global 4-component vector of uint)
+0:208        'ballot' ( temp 4-component vector of uint)
+0:208        Constant:
+0:208          2 (const uint)
+0:212  Function Definition: quad_works(vf4; ( global void)
+0:212    Function Parameters: 
+0:212      'f4' ( in 4-component vector of float)
+0:214    Sequence
+0:214      subgroupQuadBroadcast ( global 4-component vector of float)
+0:214        'f4' ( in 4-component vector of float)
+0:214        Constant:
+0:214          0 (const uint)
+0:215      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:215        'f4' ( in 4-component vector of float)
+0:216      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:216        'f4' ( in 4-component vector of float)
+0:217      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:217        'f4' ( in 4-component vector of float)
+0:221  Function Definition: partitioned_works(vf4; ( global void)
+0:221    Function Parameters: 
+0:221      'f4' ( in 4-component vector of float)
+0:223    Sequence
+0:223      Sequence
+0:223        move second child to first child ( temp 4-component vector of uint)
+0:223          'parti' ( temp 4-component vector of uint)
+0:223          subgroupPartitionNV ( global 4-component vector of uint)
+0:223            'f4' ( in 4-component vector of float)
+0:224      Sequence
+0:224        move second child to first child ( temp 4-component vector of uint)
+0:224          'ballot' ( temp 4-component vector of uint)
+0:224          Constant:
+0:224            85 (const uint)
+0:224            0 (const uint)
+0:224            0 (const uint)
+0:224            0 (const uint)
+0:225      subgroupPartitionedAddNV ( 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      subgroupPartitionedMulNV ( 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:227      subgroupPartitionedMinNV ( 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      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:228        'f4' ( in 4-component vector of float)
+0:228        'parti' ( temp 4-component vector of uint)
+0:229      subgroupPartitionedAndNV ( 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      subgroupPartitionedOrNV ( 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:231      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:231        'ballot' ( temp 4-component vector of uint)
+0:231        'parti' ( temp 4-component vector of uint)
+0:232      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:232        'f4' ( in 4-component vector of float)
+0:232        'parti' ( temp 4-component vector of uint)
+0:233      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:233        'f4' ( in 4-component vector of float)
+0:233        'parti' ( temp 4-component vector of uint)
+0:234      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:234        'f4' ( in 4-component vector of float)
+0:234        'parti' ( temp 4-component vector of uint)
+0:235      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:235        'f4' ( in 4-component vector of float)
+0:235        'parti' ( temp 4-component vector of uint)
+0:236      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:236        'ballot' ( temp 4-component vector of uint)
+0:236        'parti' ( temp 4-component vector of uint)
+0:237      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:237        'ballot' ( temp 4-component vector of uint)
+0:237        'parti' ( temp 4-component vector of uint)
+0:238      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:238        'ballot' ( temp 4-component vector of uint)
+0:238        'parti' ( temp 4-component vector of uint)
+0:239      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:239        'f4' ( in 4-component vector of float)
+0:239        'parti' ( temp 4-component vector of uint)
+0:240      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:240        'f4' ( in 4-component vector of float)
+0:240        'parti' ( temp 4-component vector of uint)
+0:241      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:241        'f4' ( in 4-component vector of float)
+0:241        'parti' ( temp 4-component vector of uint)
+0:242      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:242        'f4' ( in 4-component vector of float)
+0:242        'parti' ( temp 4-component vector of uint)
+0:243      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:243        'ballot' ( temp 4-component vector of uint)
+0:243        'parti' ( temp 4-component vector of uint)
+0:244      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:244        'ballot' ( temp 4-component vector of uint)
+0:244        'parti' ( temp 4-component vector of uint)
+0:245      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:245        'ballot' ( temp 4-component vector of uint)
+0:245        'parti' ( temp 4-component vector of uint)
+0:249  Function Definition: sm_builtins_err( ( global void)
+0:249    Function Parameters: 
+0:251    Sequence
+0:251      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:252      'gl_SMCountNV' ( in uint SMCountNV)
+0:253      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:254      'gl_SMIDNV' ( in uint SMIDNV)
+0:261  Function Definition: sm_builtins( ( global void)
+0:261    Function Parameters: 
+0:263    Sequence
+0:263      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:264      'gl_SMCountNV' ( in uint SMCountNV)
+0:265      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:266      'gl_SMIDNV' ( in uint SMIDNV)
+0:?   Linker Objects
+0:?     'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:?     'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:?     'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
+
+Linked miss stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:109  Function Definition: main( ( global void)
+0:109    Function Parameters: 
+0:111    Sequence
+0:111      Sequence
+0:111        move second child to first child ( temp 3-component vector of uint)
+0:111          'v0' ( temp 3-component vector of uint)
+0:111          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:112      Sequence
+0:112        move second child to first child ( temp 3-component vector of uint)
+0:112          'v1' ( temp 3-component vector of uint)
+0:112          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:113      Sequence
+0:113        move second child to first child ( temp 3-component vector of float)
+0:113          'v2' ( temp 3-component vector of float)
+0:113          'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:114      Sequence
+0:114        move second child to first child ( temp 3-component vector of float)
+0:114          'v3' ( temp 3-component vector of float)
+0:114          'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:115      Sequence
+0:115        move second child to first child ( temp 3-component vector of float)
+0:115          'v4' ( temp 3-component vector of float)
+0:115          'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:116      Sequence
+0:116        move second child to first child ( temp 3-component vector of float)
+0:116          'v5' ( temp 3-component vector of float)
+0:116          'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:117      Sequence
+0:117        move second child to first child ( temp float)
+0:117          'v6' ( temp float)
+0:117          'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:118      Sequence
+0:118        move second child to first child ( temp float)
+0:118          'v7' ( temp float)
+0:118          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:119      traceNV ( global void)
+0:119        'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:119        Constant:
+0:119          0 (const uint)
+0:119        Constant:
+0:119          1 (const uint)
+0:119        Constant:
+0:119          2 (const uint)
+0:119        Constant:
+0:119          3 (const uint)
+0:119        Constant:
+0:119          0 (const uint)
+0:119        Constant:
+0:119          0.500000
+0:119          0.500000
+0:119          0.500000
+0:119        Constant:
+0:119          0.500000
+0:119        Constant:
+0:119          1.000000
+0:119          1.000000
+0:119          1.000000
+0:119        Constant:
+0:119          0.750000
+0:119        Constant:
+0:119          1 (const int)
+0:?   Linker Objects
+0:?     'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:?     'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:?     'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
diff --git a/Test/baseResults/glsl.460.subgroup.task.out b/Test/baseResults/glsl.460.subgroup.task.out
new file mode 100644
index 0000000..8d2a1d3
--- /dev/null
+++ b/Test/baseResults/glsl.460.subgroup.task.out
@@ -0,0 +1,923 @@
+glsl.460.subgroup.task
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_SubgroupID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:78: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+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:288: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:289: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:290: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:291: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 90 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_mesh_shader
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+local_size = (32, 1, 1)
+ERROR: node is still EOpNull!
+0:3  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3    Function Parameters: 
+0:3      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:6      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8      subgroupBarrier ( global void)
+0:9      subgroupMemoryBarrier ( global void)
+0:10      subgroupMemoryBarrierBuffer ( global void)
+0:11      subgroupMemoryBarrierImage ( global void)
+0:12      subgroupElect ( global bool)
+0:13      'gl_NumSubgroups' ( in uint NumSubgroups)
+0:14      'gl_SubgroupID' ( in uint SubgroupID)
+0:15      subgroupMemoryBarrierShared ( global void)
+0:17      subgroupAll ( global bool)
+0:17        Constant:
+0:17          true (const bool)
+0:18      subgroupAny ( global bool)
+0:18        Constant:
+0:18          false (const bool)
+0:19      subgroupAllEqual ( global bool)
+0:19        'f4' ( in 4-component vector of float)
+0:21      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26      subgroupBroadcast ( global 4-component vector of float)
+0:26        'f4' ( in 4-component vector of float)
+0:26        Constant:
+0:26          0 (const uint)
+0:27      subgroupBroadcastFirst ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of uint)
+0:28          'ballot' ( temp 4-component vector of uint)
+0:28          subgroupBallot ( global 4-component vector of uint)
+0:28            Constant:
+0:28              false (const bool)
+0:29      subgroupInverseBallot ( global bool)
+0:29        Constant:
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:30      subgroupBallotBitExtract ( global bool)
+0:30        'ballot' ( temp 4-component vector of uint)
+0:30        Constant:
+0:30          0 (const uint)
+0:31      subgroupBallotBitCount ( global uint)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:32      subgroupBallotInclusiveBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotExclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotFindLSB ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindMSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:37      subgroupShuffle ( global 4-component vector of float)
+0:37        'f4' ( in 4-component vector of float)
+0:37        Constant:
+0:37          0 (const uint)
+0:38      subgroupShuffleXor ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          1 (const uint)
+0:39      subgroupShuffleUp ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleDown ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        'result' ( temp 4-component vector of float)
+0:42        subgroupAdd ( global 4-component vector of float)
+0:42          'f4' ( in 4-component vector of float)
+0:43      subgroupMul ( global 4-component vector of float)
+0:43        'f4' ( in 4-component vector of float)
+0:44      subgroupMin ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMax ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupAnd ( global 4-component vector of uint)
+0:46        'ballot' ( temp 4-component vector of uint)
+0:47      subgroupOr ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupXor ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupInclusiveAdd ( global 4-component vector of float)
+0:49        'f4' ( in 4-component vector of float)
+0:50      subgroupInclusiveMul ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMin ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMax ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53        'ballot' ( temp 4-component vector of uint)
+0:54      subgroupInclusiveOr ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveXor ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupExclusiveAdd ( global 4-component vector of float)
+0:56        'f4' ( in 4-component vector of float)
+0:57      subgroupExclusiveMul ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMin ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMax ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60        'ballot' ( temp 4-component vector of uint)
+0:61      subgroupExclusiveOr ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveXor ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:64      subgroupClusteredAdd ( global 4-component vector of float)
+0:64        'f4' ( in 4-component vector of float)
+0:64        Constant:
+0:64          2 (const uint)
+0:65      subgroupClusteredMul ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMin ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMax ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredAnd ( global 4-component vector of uint)
+0:68        'ballot' ( temp 4-component vector of uint)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredOr ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredXor ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:72      subgroupQuadBroadcast ( global 4-component vector of float)
+0:72        'f4' ( in 4-component vector of float)
+0:72        Constant:
+0:72          0 (const uint)
+0:73      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:74      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:77      Sequence
+0:77        move second child to first child ( temp 4-component vector of uint)
+0:77          'parti' ( temp 4-component vector of uint)
+0:77          subgroupPartitionNV ( global 4-component vector of uint)
+0:77            'f4' ( in 4-component vector of float)
+0:78      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:78        'f4' ( in 4-component vector of float)
+0:78        'parti' ( temp 4-component vector of uint)
+0:79      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:79        'f4' ( in 4-component vector of float)
+0:79        'parti' ( temp 4-component vector of uint)
+0:80      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:82        'ballot' ( temp 4-component vector of uint)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:83        'ballot' ( temp 4-component vector of uint)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:85        'f4' ( in 4-component vector of float)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:86        'f4' ( in 4-component vector of float)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:89        'ballot' ( temp 4-component vector of uint)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:90        'ballot' ( temp 4-component vector of uint)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:92        'f4' ( in 4-component vector of float)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:93        'f4' ( in 4-component vector of float)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:96        'ballot' ( temp 4-component vector of uint)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:97        'ballot' ( temp 4-component vector of uint)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:100      Branch: Return with expression
+0:100        'result' ( temp 4-component vector of float)
+0:127  Function Definition: main( ( global void)
+0:127    Function Parameters: 
+0:129    Sequence
+0:129      Sequence
+0:129        move second child to first child ( temp uint)
+0:129          'iid' ( temp uint)
+0:129          direct index ( temp uint)
+0:129            'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:129            Constant:
+0:129              0 (const int)
+0:130      Sequence
+0:130        move second child to first child ( temp uint)
+0:130          'gid' ( temp uint)
+0:130          direct index ( temp uint)
+0:130            'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:130            Constant:
+0:130              0 (const int)
+0:131      Sequence
+0:131        move second child to first child ( temp uint)
+0:131          'viewID' ( temp uint)
+0:131          indirect index ( temp uint MeshViewIndicesNV)
+0:131            'gl_MeshViewIndicesNV' ( in 4-element array of uint MeshViewIndicesNV)
+0:131            mod ( temp uint)
+0:131              'gl_MeshViewCountNV' ( in uint MeshViewCountNV)
+0:131              Constant:
+0:131                4 (const uint)
+0:134      Sequence
+0:134        Sequence
+0:134          move second child to first child ( temp uint)
+0:134            'i' ( temp uint)
+0:134            Constant:
+0:134              0 (const uint)
+0:134        Loop with condition tested first
+0:134          Loop Condition
+0:134          Compare Less Than ( temp bool)
+0:134            'i' ( temp uint)
+0:134            Constant:
+0:134              10 (const uint)
+0:134          Loop Body
+0:135          Sequence
+0:135            move second child to first child ( temp 4-component vector of float)
+0:135              indirect index ( temp 4-component vector of float)
+0:135                'mem' ( shared 10-element array of 4-component vector of float)
+0:135                'i' ( temp uint)
+0:135              Construct vec4 ( temp 4-component vector of float)
+0:135                Convert uint to float ( temp float)
+0:135                  add ( temp uint)
+0:135                    'i' ( temp uint)
+0:135                    uni_value: direct index for structure (layout( column_major shared) uniform uint)
+0:135                      'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value})
+0:135                      Constant:
+0:135                        0 (const uint)
+0:134          Loop Terminal Expression
+0:134          Pre-Increment ( temp uint)
+0:134            'i' ( temp uint)
+0:137      imageStore ( global void)
+0:137        'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:137        Construct ivec2 ( temp 2-component vector of int)
+0:137          Convert uint to int ( temp int)
+0:137            'iid' ( temp uint)
+0:137        indirect index ( temp 4-component vector of float)
+0:137          'mem' ( shared 10-element array of 4-component vector of float)
+0:137          'gid' ( temp uint)
+0:138      imageStore ( global void)
+0:138        'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:138        Construct ivec2 ( temp 2-component vector of int)
+0:138          Convert uint to int ( temp int)
+0:138            'iid' ( temp uint)
+0:138        indirect index ( temp 4-component vector of float)
+0:138          'mem' ( shared 10-element array of 4-component vector of float)
+0:138          add ( temp uint)
+0:138            'gid' ( temp uint)
+0:138            Constant:
+0:138              1 (const uint)
+0:140      MemoryBarrierShared ( global void)
+0:140      Barrier ( global void)
+0:144      move second child to first child ( temp 2-component vector of float)
+0:144        dummy: direct index for structure (layout( std430 offset=0) taskNV out 2-component vector of float)
+0:144          'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:144          Constant:
+0:144            0 (const int)
+0:144        Constant:
+0:144          30.000000
+0:144          31.000000
+0:145      move second child to first child ( temp 2-component vector of float)
+0:145        direct index (layout( std430 offset=8) taskNV temp 2-component vector of float)
+0:145          submesh: direct index for structure (layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float)
+0:145            'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:145            Constant:
+0:145              1 (const int)
+0:145          Constant:
+0:145            0 (const int)
+0:145        Constant:
+0:145          32.000000
+0:145          33.000000
+0:146      move second child to first child ( temp 2-component vector of float)
+0:146        direct index (layout( std430 offset=8) taskNV temp 2-component vector of float)
+0:146          submesh: direct index for structure (layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float)
+0:146            'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:146            Constant:
+0:146              1 (const int)
+0:146          Constant:
+0:146            1 (const int)
+0:146        Constant:
+0:146          34.000000
+0:146          35.000000
+0:147      move second child to first child ( temp 2-component vector of float)
+0:147        direct index (layout( std430 offset=8) taskNV temp 2-component vector of float)
+0:147          submesh: direct index for structure (layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float)
+0:147            'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:147            Constant:
+0:147              1 (const int)
+0:147          Constant:
+0:147            2 (const int)
+0:147        indirect index (layout( std430 offset=8) taskNV temp 2-component vector of float)
+0:147          submesh: direct index for structure (layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float)
+0:147            'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:147            Constant:
+0:147              1 (const int)
+0:147          mod ( temp uint)
+0:147            'gid' ( temp uint)
+0:147            Constant:
+0:147              2 (const uint)
+0:148      move second child to first child ( temp uint)
+0:148        viewID: direct index for structure (layout( std430 offset=32) taskNV out uint)
+0:148          'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:148          Constant:
+0:148            2 (const int)
+0:148        'viewID' ( temp uint)
+0:150      MemoryBarrierShared ( global void)
+0:150      Barrier ( global void)
+0:153      move second child to first child ( temp uint)
+0:153        'gl_TaskCountNV' ( out uint TaskCountNV)
+0:153        Constant:
+0:153          3 (const uint)
+0:157  Function Definition: basic_works( ( global void)
+0:157    Function Parameters: 
+0:159    Sequence
+0:159      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:160      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:161      subgroupBarrier ( global void)
+0:162      subgroupMemoryBarrier ( global void)
+0:163      subgroupMemoryBarrierBuffer ( global void)
+0:164      subgroupMemoryBarrierImage ( global void)
+0:165      subgroupElect ( global bool)
+0:166      'gl_NumSubgroups' ( in uint NumSubgroups)
+0:167      'gl_SubgroupID' ( in uint SubgroupID)
+0:168      subgroupMemoryBarrierShared ( global void)
+0:172  Function Definition: ballot_works(vf4; ( global void)
+0:172    Function Parameters: 
+0:172      'f4' ( in 4-component vector of float)
+0:173    Sequence
+0:173      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:174      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:175      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:176      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:177      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:178      subgroupBroadcast ( global 4-component vector of float)
+0:178        'f4' ( in 4-component vector of float)
+0:178        Constant:
+0:178          0 (const uint)
+0:179      subgroupBroadcastFirst ( global 4-component vector of float)
+0:179        'f4' ( in 4-component vector of float)
+0:180      Sequence
+0:180        move second child to first child ( temp 4-component vector of uint)
+0:180          'ballot' ( temp 4-component vector of uint)
+0:180          subgroupBallot ( global 4-component vector of uint)
+0:180            Constant:
+0:180              false (const bool)
+0:181      subgroupInverseBallot ( global bool)
+0:181        Constant:
+0:181          1 (const uint)
+0:181          1 (const uint)
+0:181          1 (const uint)
+0:181          1 (const uint)
+0:182      subgroupBallotBitExtract ( global bool)
+0:182        'ballot' ( temp 4-component vector of uint)
+0:182        Constant:
+0:182          0 (const uint)
+0:183      subgroupBallotBitCount ( global uint)
+0:183        'ballot' ( temp 4-component vector of uint)
+0:184      subgroupBallotInclusiveBitCount ( global uint)
+0:184        'ballot' ( temp 4-component vector of uint)
+0:185      subgroupBallotExclusiveBitCount ( global uint)
+0:185        'ballot' ( temp 4-component vector of uint)
+0:186      subgroupBallotFindLSB ( global uint)
+0:186        'ballot' ( temp 4-component vector of uint)
+0:187      subgroupBallotFindMSB ( global uint)
+0:187        'ballot' ( temp 4-component vector of uint)
+0:191  Function Definition: vote_works(vf4; ( global void)
+0:191    Function Parameters: 
+0:191      'f4' ( in 4-component vector of float)
+0:193    Sequence
+0:193      subgroupAll ( global bool)
+0:193        Constant:
+0:193          true (const bool)
+0:194      subgroupAny ( global bool)
+0:194        Constant:
+0:194          false (const bool)
+0:195      subgroupAllEqual ( global bool)
+0:195        'f4' ( in 4-component vector of float)
+0:200  Function Definition: shuffle_works(vf4; ( global void)
+0:200    Function Parameters: 
+0:200      'f4' ( in 4-component vector of float)
+0:202    Sequence
+0:202      subgroupShuffle ( global 4-component vector of float)
+0:202        'f4' ( in 4-component vector of float)
+0:202        Constant:
+0:202          0 (const uint)
+0:203      subgroupShuffleXor ( global 4-component vector of float)
+0:203        'f4' ( in 4-component vector of float)
+0:203        Constant:
+0:203          1 (const uint)
+0:204      subgroupShuffleUp ( global 4-component vector of float)
+0:204        'f4' ( in 4-component vector of float)
+0:204        Constant:
+0:204          1 (const uint)
+0:205      subgroupShuffleDown ( global 4-component vector of float)
+0:205        'f4' ( in 4-component vector of float)
+0:205        Constant:
+0:205          1 (const uint)
+0:209  Function Definition: arith_works(vf4; ( global void)
+0:209    Function Parameters: 
+0:209      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:212      subgroupAdd ( global 4-component vector of float)
+0:212        'f4' ( in 4-component vector of float)
+0:213      subgroupMul ( global 4-component vector of float)
+0:213        'f4' ( in 4-component vector of float)
+0:214      subgroupMin ( global 4-component vector of float)
+0:214        'f4' ( in 4-component vector of float)
+0:215      subgroupMax ( global 4-component vector of float)
+0:215        'f4' ( in 4-component vector of float)
+0:216      subgroupAnd ( global 4-component vector of uint)
+0:216        'ballot' ( temp 4-component vector of uint)
+0:217      subgroupOr ( global 4-component vector of uint)
+0:217        'ballot' ( temp 4-component vector of uint)
+0:218      subgroupXor ( global 4-component vector of uint)
+0:218        'ballot' ( temp 4-component vector of uint)
+0:219      subgroupInclusiveAdd ( global 4-component vector of float)
+0:219        'f4' ( in 4-component vector of float)
+0:220      subgroupInclusiveMul ( global 4-component vector of float)
+0:220        'f4' ( in 4-component vector of float)
+0:221      subgroupInclusiveMin ( global 4-component vector of float)
+0:221        'f4' ( in 4-component vector of float)
+0:222      subgroupInclusiveMax ( global 4-component vector of float)
+0:222        'f4' ( in 4-component vector of float)
+0:223      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:223        'ballot' ( temp 4-component vector of uint)
+0:224      subgroupInclusiveOr ( global 4-component vector of uint)
+0:224        'ballot' ( temp 4-component vector of uint)
+0:225      subgroupInclusiveXor ( global 4-component vector of uint)
+0:225        'ballot' ( temp 4-component vector of uint)
+0:226      subgroupExclusiveAdd ( global 4-component vector of float)
+0:226        'f4' ( in 4-component vector of float)
+0:227      subgroupExclusiveMul ( global 4-component vector of float)
+0:227        'f4' ( in 4-component vector of float)
+0:228      subgroupExclusiveMin ( global 4-component vector of float)
+0:228        'f4' ( in 4-component vector of float)
+0:229      subgroupExclusiveMax ( global 4-component vector of float)
+0:229        'f4' ( in 4-component vector of float)
+0:230      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:230        'ballot' ( temp 4-component vector of uint)
+0:231      subgroupExclusiveOr ( global 4-component vector of uint)
+0:231        'ballot' ( temp 4-component vector of uint)
+0:232      subgroupExclusiveXor ( global 4-component vector of uint)
+0:232        'ballot' ( temp 4-component vector of uint)
+0:236  Function Definition: clustered_works(vf4; ( global void)
+0:236    Function Parameters: 
+0:236      'f4' ( in 4-component vector of float)
+0:238    Sequence
+0:238      Sequence
+0:238        move second child to first child ( temp 4-component vector of uint)
+0:238          'ballot' ( temp 4-component vector of uint)
+0:238          Constant:
+0:238            85 (const uint)
+0:238            0 (const uint)
+0:238            0 (const uint)
+0:238            0 (const uint)
+0:239      subgroupClusteredAdd ( global 4-component vector of float)
+0:239        'f4' ( in 4-component vector of float)
+0:239        Constant:
+0:239          2 (const uint)
+0:240      subgroupClusteredMul ( global 4-component vector of float)
+0:240        'f4' ( in 4-component vector of float)
+0:240        Constant:
+0:240          2 (const uint)
+0:241      subgroupClusteredMin ( global 4-component vector of float)
+0:241        'f4' ( in 4-component vector of float)
+0:241        Constant:
+0:241          2 (const uint)
+0:242      subgroupClusteredMax ( global 4-component vector of float)
+0:242        'f4' ( in 4-component vector of float)
+0:242        Constant:
+0:242          2 (const uint)
+0:243      subgroupClusteredAnd ( global 4-component vector of uint)
+0:243        'ballot' ( temp 4-component vector of uint)
+0:243        Constant:
+0:243          2 (const uint)
+0:244      subgroupClusteredOr ( global 4-component vector of uint)
+0:244        'ballot' ( temp 4-component vector of uint)
+0:244        Constant:
+0:244          2 (const uint)
+0:245      subgroupClusteredXor ( global 4-component vector of uint)
+0:245        'ballot' ( temp 4-component vector of uint)
+0:245        Constant:
+0:245          2 (const uint)
+0:249  Function Definition: quad_works(vf4; ( global void)
+0:249    Function Parameters: 
+0:249      'f4' ( in 4-component vector of float)
+0:251    Sequence
+0:251      subgroupQuadBroadcast ( global 4-component vector of float)
+0:251        'f4' ( in 4-component vector of float)
+0:251        Constant:
+0:251          0 (const uint)
+0:252      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:252        'f4' ( in 4-component vector of float)
+0:253      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:253        'f4' ( in 4-component vector of float)
+0:254      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:254        'f4' ( in 4-component vector of float)
+0:258  Function Definition: partitioned_works(vf4; ( global void)
+0:258    Function Parameters: 
+0:258      'f4' ( in 4-component vector of float)
+0:260    Sequence
+0:260      Sequence
+0:260        move second child to first child ( temp 4-component vector of uint)
+0:260          'parti' ( temp 4-component vector of uint)
+0:260          subgroupPartitionNV ( global 4-component vector of uint)
+0:260            'f4' ( in 4-component vector of float)
+0:261      Sequence
+0:261        move second child to first child ( temp 4-component vector of uint)
+0:261          'ballot' ( temp 4-component vector of uint)
+0:261          Constant:
+0:261            85 (const uint)
+0:261            0 (const uint)
+0:261            0 (const uint)
+0:261            0 (const uint)
+0:262      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:262        'f4' ( in 4-component vector of float)
+0:262        'parti' ( temp 4-component vector of uint)
+0:263      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:263        'f4' ( in 4-component vector of float)
+0:263        'parti' ( temp 4-component vector of uint)
+0:264      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:264        'f4' ( in 4-component vector of float)
+0:264        'parti' ( temp 4-component vector of uint)
+0:265      subgroupPartitionedMaxNV ( global 4-component vector of float)
+0:265        'f4' ( in 4-component vector of float)
+0:265        'parti' ( temp 4-component vector of uint)
+0:266      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:266        'ballot' ( temp 4-component vector of uint)
+0:266        'parti' ( temp 4-component vector of uint)
+0:267      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:267        'ballot' ( temp 4-component vector of uint)
+0:267        'parti' ( temp 4-component vector of uint)
+0:268      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:268        'ballot' ( temp 4-component vector of uint)
+0:268        'parti' ( temp 4-component vector of uint)
+0:269      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:269        'f4' ( in 4-component vector of float)
+0:269        'parti' ( temp 4-component vector of uint)
+0:270      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:270        'f4' ( in 4-component vector of float)
+0:270        'parti' ( temp 4-component vector of uint)
+0:271      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:271        'f4' ( in 4-component vector of float)
+0:271        'parti' ( temp 4-component vector of uint)
+0:272      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
+0:272        'f4' ( in 4-component vector of float)
+0:272        'parti' ( temp 4-component vector of uint)
+0:273      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:273        'ballot' ( temp 4-component vector of uint)
+0:273        'parti' ( temp 4-component vector of uint)
+0:274      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:274        'ballot' ( temp 4-component vector of uint)
+0:274        'parti' ( temp 4-component vector of uint)
+0:275      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:275        'ballot' ( temp 4-component vector of uint)
+0:275        'parti' ( temp 4-component vector of uint)
+0:276      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:276        'f4' ( in 4-component vector of float)
+0:276        'parti' ( temp 4-component vector of uint)
+0:277      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:277        'f4' ( in 4-component vector of float)
+0:277        'parti' ( temp 4-component vector of uint)
+0:278      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:278        'f4' ( in 4-component vector of float)
+0:278        'parti' ( temp 4-component vector of uint)
+0:279      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:279        'f4' ( in 4-component vector of float)
+0:279        'parti' ( temp 4-component vector of uint)
+0:280      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:280        'ballot' ( temp 4-component vector of uint)
+0:280        'parti' ( temp 4-component vector of uint)
+0:281      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:281        'ballot' ( temp 4-component vector of uint)
+0:281        'parti' ( temp 4-component vector of uint)
+0:282      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:282        'ballot' ( temp 4-component vector of uint)
+0:282        'parti' ( temp 4-component vector of uint)
+0:286  Function Definition: sm_builtins_err( ( global void)
+0:286    Function Parameters: 
+0:288    Sequence
+0:288      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:289      'gl_SMCountNV' ( in uint SMCountNV)
+0:290      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:291      'gl_SMIDNV' ( in uint SMIDNV)
+0:298  Function Definition: sm_builtins( ( global void)
+0:298    Function Parameters: 
+0:300    Sequence
+0:300      'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV)
+0:301      'gl_SMCountNV' ( in uint SMCountNV)
+0:302      'gl_WarpIDNV' ( in uint WarpIDNV)
+0:303      'gl_SMIDNV' ( in uint SMIDNV)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       32 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:?     'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value})
+0:?     'mem' ( shared 10-element array of 4-component vector of float)
+0:?     'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+
+
+Linked task stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_mesh_shader
+Requested GL_NV_shader_sm_builtins
+Requested GL_NV_shader_subgroup_partitioned
+local_size = (32, 1, 1)
+ERROR: node is still EOpNull!
+0:127  Function Definition: main( ( global void)
+0:127    Function Parameters: 
+0:129    Sequence
+0:129      Sequence
+0:129        move second child to first child ( temp uint)
+0:129          'iid' ( temp uint)
+0:129          direct index ( temp uint)
+0:129            'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:129            Constant:
+0:129              0 (const int)
+0:130      Sequence
+0:130        move second child to first child ( temp uint)
+0:130          'gid' ( temp uint)
+0:130          direct index ( temp uint)
+0:130            'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:130            Constant:
+0:130              0 (const int)
+0:131      Sequence
+0:131        move second child to first child ( temp uint)
+0:131          'viewID' ( temp uint)
+0:131          indirect index ( temp uint MeshViewIndicesNV)
+0:131            'gl_MeshViewIndicesNV' ( in 4-element array of uint MeshViewIndicesNV)
+0:131            mod ( temp uint)
+0:131              'gl_MeshViewCountNV' ( in uint MeshViewCountNV)
+0:131              Constant:
+0:131                4 (const uint)
+0:134      Sequence
+0:134        Sequence
+0:134          move second child to first child ( temp uint)
+0:134            'i' ( temp uint)
+0:134            Constant:
+0:134              0 (const uint)
+0:134        Loop with condition tested first
+0:134          Loop Condition
+0:134          Compare Less Than ( temp bool)
+0:134            'i' ( temp uint)
+0:134            Constant:
+0:134              10 (const uint)
+0:134          Loop Body
+0:135          Sequence
+0:135            move second child to first child ( temp 4-component vector of float)
+0:135              indirect index ( temp 4-component vector of float)
+0:135                'mem' ( shared 10-element array of 4-component vector of float)
+0:135                'i' ( temp uint)
+0:135              Construct vec4 ( temp 4-component vector of float)
+0:135                Convert uint to float ( temp float)
+0:135                  add ( temp uint)
+0:135                    'i' ( temp uint)
+0:135                    uni_value: direct index for structure (layout( column_major shared) uniform uint)
+0:135                      'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value})
+0:135                      Constant:
+0:135                        0 (const uint)
+0:134          Loop Terminal Expression
+0:134          Pre-Increment ( temp uint)
+0:134            'i' ( temp uint)
+0:137      imageStore ( global void)
+0:137        'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:137        Construct ivec2 ( temp 2-component vector of int)
+0:137          Convert uint to int ( temp int)
+0:137            'iid' ( temp uint)
+0:137        indirect index ( temp 4-component vector of float)
+0:137          'mem' ( shared 10-element array of 4-component vector of float)
+0:137          'gid' ( temp uint)
+0:138      imageStore ( global void)
+0:138        'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:138        Construct ivec2 ( temp 2-component vector of int)
+0:138          Convert uint to int ( temp int)
+0:138            'iid' ( temp uint)
+0:138        indirect index ( temp 4-component vector of float)
+0:138          'mem' ( shared 10-element array of 4-component vector of float)
+0:138          add ( temp uint)
+0:138            'gid' ( temp uint)
+0:138            Constant:
+0:138              1 (const uint)
+0:140      MemoryBarrierShared ( global void)
+0:140      Barrier ( global void)
+0:144      move second child to first child ( temp 2-component vector of float)
+0:144        dummy: direct index for structure (layout( std430 offset=0) taskNV out 2-component vector of float)
+0:144          'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:144          Constant:
+0:144            0 (const int)
+0:144        Constant:
+0:144          30.000000
+0:144          31.000000
+0:145      move second child to first child ( temp 2-component vector of float)
+0:145        direct index (layout( std430 offset=8) taskNV temp 2-component vector of float)
+0:145          submesh: direct index for structure (layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float)
+0:145            'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:145            Constant:
+0:145              1 (const int)
+0:145          Constant:
+0:145            0 (const int)
+0:145        Constant:
+0:145          32.000000
+0:145          33.000000
+0:146      move second child to first child ( temp 2-component vector of float)
+0:146        direct index (layout( std430 offset=8) taskNV temp 2-component vector of float)
+0:146          submesh: direct index for structure (layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float)
+0:146            'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:146            Constant:
+0:146              1 (const int)
+0:146          Constant:
+0:146            1 (const int)
+0:146        Constant:
+0:146          34.000000
+0:146          35.000000
+0:147      move second child to first child ( temp 2-component vector of float)
+0:147        direct index (layout( std430 offset=8) taskNV temp 2-component vector of float)
+0:147          submesh: direct index for structure (layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float)
+0:147            'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:147            Constant:
+0:147              1 (const int)
+0:147          Constant:
+0:147            2 (const int)
+0:147        indirect index (layout( std430 offset=8) taskNV temp 2-component vector of float)
+0:147          submesh: direct index for structure (layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float)
+0:147            'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:147            Constant:
+0:147              1 (const int)
+0:147          mod ( temp uint)
+0:147            'gid' ( temp uint)
+0:147            Constant:
+0:147              2 (const uint)
+0:148      move second child to first child ( temp uint)
+0:148        viewID: direct index for structure (layout( std430 offset=32) taskNV out uint)
+0:148          'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+0:148          Constant:
+0:148            2 (const int)
+0:148        'viewID' ( temp uint)
+0:150      MemoryBarrierShared ( global void)
+0:150      Barrier ( global void)
+0:153      move second child to first child ( temp uint)
+0:153        'gl_TaskCountNV' ( out uint TaskCountNV)
+0:153        Constant:
+0:153          3 (const uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       32 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:?     'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value})
+0:?     'mem' ( shared 10-element array of 4-component vector of float)
+0:?     'mytask' (layout( std430) taskNV out block{layout( std430 offset=0) taskNV out 2-component vector of float dummy, layout( std430 offset=8) taskNV out 3-element array of 2-component vector of float submesh, layout( std430 offset=32) taskNV out uint viewID})
+
diff --git a/Test/baseResults/glsl.entryPointRename.vert.bad.out b/Test/baseResults/glsl.entryPointRename.vert.bad.out
index c7ea97e..7b99bbe 100644
--- a/Test/baseResults/glsl.entryPointRename.vert.bad.out
+++ b/Test/baseResults/glsl.entryPointRename.vert.bad.out
@@ -2,7 +2,7 @@
 ERROR: Source entry point must be "main"
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/glsl.entryPointRename.vert.out b/Test/baseResults/glsl.entryPointRename.vert.out
index 3dbe13b..3044dee 100644
--- a/Test/baseResults/glsl.entryPointRename.vert.out
+++ b/Test/baseResults/glsl.entryPointRename.vert.out
@@ -1,6 +1,6 @@
 glsl.entryPointRename.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/glsl.es320.subgroup.frag.out b/Test/baseResults/glsl.es320.subgroup.frag.out
new file mode 100644
index 0000000..5e2ae73
--- /dev/null
+++ b/Test/baseResults/glsl.es320.subgroup.frag.out
@@ -0,0 +1,41 @@
+glsl.es320.subgroup.frag
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+0:? Sequence
+0:4  Function Definition: main( ( global void)
+0:4    Function Parameters: 
+0:6    Sequence
+0:6      move second child to first child ( temp mediump 4-component vector of uint)
+0:6        'data' (layout( location=0) out mediump 4-component vector of uint)
+0:6        Construct uvec4 ( temp mediump 4-component vector of uint)
+0:6          'gl_SubgroupSize' ( flat in mediump uint SubgroupSize)
+0:6          'gl_SubgroupInvocationID' ( flat in mediump uint SubgroupInvocationID)
+0:6          Constant:
+0:6            0 (const uint)
+0:6          Constant:
+0:6            0 (const uint)
+0:?   Linker Objects
+0:?     'data' (layout( location=0) out mediump 4-component vector of uint)
+
+
+Linked fragment stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+0:? Sequence
+0:4  Function Definition: main( ( global void)
+0:4    Function Parameters: 
+0:6    Sequence
+0:6      move second child to first child ( temp mediump 4-component vector of uint)
+0:6        'data' (layout( location=0) out mediump 4-component vector of uint)
+0:6        Construct uvec4 ( temp mediump 4-component vector of uint)
+0:6          'gl_SubgroupSize' ( flat in mediump uint SubgroupSize)
+0:6          'gl_SubgroupInvocationID' ( flat in mediump uint SubgroupInvocationID)
+0:6          Constant:
+0:6            0 (const uint)
+0:6          Constant:
+0:6            0 (const uint)
+0:?   Linker Objects
+0:?     'data' (layout( location=0) out mediump 4-component vector of uint)
+
diff --git a/Test/baseResults/glsl.es320.subgroup.geom.out b/Test/baseResults/glsl.es320.subgroup.geom.out
new file mode 100644
index 0000000..5d18d30
--- /dev/null
+++ b/Test/baseResults/glsl.es320.subgroup.geom.out
@@ -0,0 +1,59 @@
+glsl.es320.subgroup.geom
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+invocations = -1
+max_vertices = 1
+input primitive = points
+output primitive = points
+0:? Sequence
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      move second child to first child ( temp highp 4-component vector of uint)
+0:12        indirect index (layout( column_major std430 offset=0) temp highp 4-component vector of uint)
+0:12          result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint)
+0:12            'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:12            Constant:
+0:12              0 (const uint)
+0:12          'gl_PrimitiveIDIn' ( in highp int PrimitiveID)
+0:12        Construct uvec4 ( temp highp 4-component vector of uint)
+0:12          'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:12          'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:12          Constant:
+0:12            0 (const uint)
+0:12          Constant:
+0:12            0 (const uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+
+
+Linked geometry stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+invocations = 1
+max_vertices = 1
+input primitive = points
+output primitive = points
+0:? Sequence
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      move second child to first child ( temp highp 4-component vector of uint)
+0:12        indirect index (layout( column_major std430 offset=0) temp highp 4-component vector of uint)
+0:12          result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint)
+0:12            'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:12            Constant:
+0:12              0 (const uint)
+0:12          'gl_PrimitiveIDIn' ( in highp int PrimitiveID)
+0:12        Construct uvec4 ( temp highp 4-component vector of uint)
+0:12          'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:12          'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:12          Constant:
+0:12            0 (const uint)
+0:12          Constant:
+0:12            0 (const uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+
diff --git a/Test/baseResults/glsl.es320.subgroup.tesc.out b/Test/baseResults/glsl.es320.subgroup.tesc.out
new file mode 100644
index 0000000..9512bc5
--- /dev/null
+++ b/Test/baseResults/glsl.es320.subgroup.tesc.out
@@ -0,0 +1,53 @@
+glsl.es320.subgroup.tesc
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+vertices = 1
+0:? Sequence
+0:9  Function Definition: main( ( global void)
+0:9    Function Parameters: 
+0:11    Sequence
+0:11      move second child to first child ( temp highp 4-component vector of uint)
+0:11        indirect index (layout( column_major std430 offset=0) temp highp 4-component vector of uint)
+0:11          result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint)
+0:11            'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:11            Constant:
+0:11              0 (const uint)
+0:11          'gl_PrimitiveID' ( in highp int PrimitiveID)
+0:11        Construct uvec4 ( temp highp 4-component vector of uint)
+0:11          'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:11          'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:11          Constant:
+0:11            0 (const uint)
+0:11          Constant:
+0:11            0 (const uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+
+
+Linked tessellation control stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+vertices = 1
+0:? Sequence
+0:9  Function Definition: main( ( global void)
+0:9    Function Parameters: 
+0:11    Sequence
+0:11      move second child to first child ( temp highp 4-component vector of uint)
+0:11        indirect index (layout( column_major std430 offset=0) temp highp 4-component vector of uint)
+0:11          result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint)
+0:11            'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:11            Constant:
+0:11              0 (const uint)
+0:11          'gl_PrimitiveID' ( in highp int PrimitiveID)
+0:11        Construct uvec4 ( temp highp 4-component vector of uint)
+0:11          'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:11          'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:11          Constant:
+0:11            0 (const uint)
+0:11          Constant:
+0:11            0 (const uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+
diff --git a/Test/baseResults/glsl.es320.subgroup.tese.out b/Test/baseResults/glsl.es320.subgroup.tese.out
new file mode 100644
index 0000000..29f7b73
--- /dev/null
+++ b/Test/baseResults/glsl.es320.subgroup.tese.out
@@ -0,0 +1,57 @@
+glsl.es320.subgroup.tese
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+input primitive = isolines
+vertex spacing = none
+triangle order = none
+0:? Sequence
+0:9  Function Definition: main( ( global void)
+0:9    Function Parameters: 
+0:11    Sequence
+0:11      move second child to first child ( temp highp 4-component vector of uint)
+0:11        indirect index (layout( column_major std430 offset=0) temp highp 4-component vector of uint)
+0:11          result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint)
+0:11            'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:11            Constant:
+0:11              0 (const uint)
+0:11          'gl_PrimitiveID' ( in highp int PrimitiveID)
+0:11        Construct uvec4 ( temp highp 4-component vector of uint)
+0:11          'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:11          'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:11          Constant:
+0:11            0 (const uint)
+0:11          Constant:
+0:11            0 (const uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+
+
+Linked tessellation evaluation stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+input primitive = isolines
+vertex spacing = equal_spacing
+triangle order = ccw
+0:? Sequence
+0:9  Function Definition: main( ( global void)
+0:9    Function Parameters: 
+0:11    Sequence
+0:11      move second child to first child ( temp highp 4-component vector of uint)
+0:11        indirect index (layout( column_major std430 offset=0) temp highp 4-component vector of uint)
+0:11          result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint)
+0:11            'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:11            Constant:
+0:11              0 (const uint)
+0:11          'gl_PrimitiveID' ( in highp int PrimitiveID)
+0:11        Construct uvec4 ( temp highp 4-component vector of uint)
+0:11          'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:11          'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:11          Constant:
+0:11            0 (const uint)
+0:11          Constant:
+0:11            0 (const uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+
diff --git a/Test/baseResults/glsl.es320.subgroup.vert.out b/Test/baseResults/glsl.es320.subgroup.vert.out
new file mode 100644
index 0000000..bf1da49
--- /dev/null
+++ b/Test/baseResults/glsl.es320.subgroup.vert.out
@@ -0,0 +1,55 @@
+glsl.es320.subgroup.vert
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+0:? Sequence
+0:8  Function Definition: main( ( global void)
+0:8    Function Parameters: 
+0:10    Sequence
+0:10      move second child to first child ( temp highp 4-component vector of uint)
+0:10        indirect index (layout( column_major std430 offset=0) temp highp 4-component vector of uint)
+0:10          result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint)
+0:10            'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:10            Constant:
+0:10              0 (const uint)
+0:10          'gl_VertexID' ( gl_VertexId highp int VertexId)
+0:10        Construct uvec4 ( temp highp 4-component vector of uint)
+0:10          'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:10          'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:10          Constant:
+0:10            0 (const uint)
+0:10          Constant:
+0:10            0 (const uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:?     'gl_VertexID' ( gl_VertexId highp int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+0:? Sequence
+0:8  Function Definition: main( ( global void)
+0:8    Function Parameters: 
+0:10    Sequence
+0:10      move second child to first child ( temp highp 4-component vector of uint)
+0:10        indirect index (layout( column_major std430 offset=0) temp highp 4-component vector of uint)
+0:10          result: direct index for structure (layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint)
+0:10            'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:10            Constant:
+0:10              0 (const uint)
+0:10          'gl_VertexID' ( gl_VertexId highp int VertexId)
+0:10        Construct uvec4 ( temp highp 4-component vector of uint)
+0:10          'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:10          'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:10          Constant:
+0:10            0 (const uint)
+0:10          Constant:
+0:10            0 (const uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of highp 4-component vector of uint result})
+0:?     'gl_VertexID' ( gl_VertexId highp int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
+
diff --git a/Test/baseResults/glsl.es320.subgroupArithmetic.comp.out b/Test/baseResults/glsl.es320.subgroupArithmetic.comp.out
new file mode 100644
index 0000000..a129693
--- /dev/null
+++ b/Test/baseResults/glsl.es320.subgroupArithmetic.comp.out
@@ -0,0 +1,12797 @@
+glsl.es320.subgroupArithmetic.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 1, 1)
+0:? Sequence
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp highp uint)
+0:16          'invocation' ( temp highp uint)
+0:16          mod ( temp mediump uint)
+0:16            add ( temp mediump uint)
+0:16              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16            Constant:
+0:16              4 (const uint)
+0:18      move second child to first child ( temp highp float)
+0:18        direct index ( temp highp float)
+0:18          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          Constant:
+0:18            0 (const int)
+0:18        subgroupAdd ( global highp float)
+0:18          direct index ( temp highp float)
+0:18            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                Constant:
+0:18                  0 (const int)
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:19      move second child to first child ( temp highp 2-component vector of float)
+0:19        vector swizzle ( temp highp 2-component vector of float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Sequence
+0:19            Constant:
+0:19              0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19        subgroupAdd ( global highp 2-component vector of float)
+0:19          vector swizzle ( temp highp 2-component vector of float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                Constant:
+0:19                  1 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Sequence
+0:19              Constant:
+0:19                0 (const int)
+0:19              Constant:
+0:19                1 (const int)
+0:20      move second child to first child ( temp highp 3-component vector of float)
+0:20        vector swizzle ( temp highp 3-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              Constant:
+0:20                0 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20            Constant:
+0:20              2 (const int)
+0:20        subgroupAdd ( global highp 3-component vector of float)
+0:20          vector swizzle ( temp highp 3-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                Constant:
+0:20                  2 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20              Constant:
+0:20                2 (const int)
+0:21      move second child to first child ( temp highp 4-component vector of float)
+0:21        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            0 (const int)
+0:21        subgroupAdd ( global highp 4-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              Constant:
+0:21                3 (const int)
+0:21            Constant:
+0:21              0 (const int)
+0:23      move second child to first child ( temp highp int)
+0:23        direct index ( temp highp int)
+0:23          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              Constant:
+0:23                1 (const int)
+0:23            Constant:
+0:23              1 (const int)
+0:23          Constant:
+0:23            0 (const int)
+0:23        subgroupAdd ( global highp int)
+0:23          direct index ( temp highp int)
+0:23            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                1 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:24      move second child to first child ( temp highp 2-component vector of int)
+0:24        vector swizzle ( temp highp 2-component vector of int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              Constant:
+0:24                1 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Sequence
+0:24            Constant:
+0:24              0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24        subgroupAdd ( global highp 2-component vector of int)
+0:24          vector swizzle ( temp highp 2-component vector of int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                Constant:
+0:24                  1 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Sequence
+0:24              Constant:
+0:24                0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:25      move second child to first child ( temp highp 3-component vector of int)
+0:25        vector swizzle ( temp highp 3-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              Constant:
+0:25                1 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25        subgroupAdd ( global highp 3-component vector of int)
+0:25          vector swizzle ( temp highp 3-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                Constant:
+0:25                  2 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:26      move second child to first child ( temp highp 4-component vector of int)
+0:26        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            Constant:
+0:26              1 (const int)
+0:26          Constant:
+0:26            1 (const int)
+0:26        subgroupAdd ( global highp 4-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              Constant:
+0:26                3 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:28      move second child to first child ( temp highp uint)
+0:28        direct index ( temp highp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                2 (const int)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:28        subgroupAdd ( global highp uint)
+0:28          direct index ( temp highp uint)
+0:28            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                2 (const int)
+0:28            Constant:
+0:28              0 (const int)
+0:29      move second child to first child ( temp highp 2-component vector of uint)
+0:29        vector swizzle ( temp highp 2-component vector of uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              Constant:
+0:29                2 (const int)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Sequence
+0:29            Constant:
+0:29              0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29        subgroupAdd ( global highp 2-component vector of uint)
+0:29          vector swizzle ( temp highp 2-component vector of uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                Constant:
+0:29                  1 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Sequence
+0:29              Constant:
+0:29                0 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:30      move second child to first child ( temp highp 3-component vector of uint)
+0:30        vector swizzle ( temp highp 3-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              Constant:
+0:30                2 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30        subgroupAdd ( global highp 3-component vector of uint)
+0:30          vector swizzle ( temp highp 3-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                Constant:
+0:30                  2 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:31      move second child to first child ( temp highp 4-component vector of uint)
+0:31        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            Constant:
+0:31              2 (const int)
+0:31          Constant:
+0:31            2 (const int)
+0:31        subgroupAdd ( global highp 4-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              Constant:
+0:31                3 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:33      move second child to first child ( temp highp float)
+0:33        direct index ( temp highp float)
+0:33          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              Constant:
+0:33                3 (const int)
+0:33            Constant:
+0:33              0 (const int)
+0:33          Constant:
+0:33            0 (const int)
+0:33        subgroupMul ( global highp float)
+0:33          direct index ( temp highp float)
+0:33            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                0 (const int)
+0:33            Constant:
+0:33              0 (const int)
+0:34      move second child to first child ( temp highp 2-component vector of float)
+0:34        vector swizzle ( temp highp 2-component vector of float)
+0:34          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              Constant:
+0:34                3 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34        subgroupMul ( global highp 2-component vector of float)
+0:34          vector swizzle ( temp highp 2-component vector of float)
+0:34            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                Constant:
+0:34                  1 (const int)
+0:34              Constant:
+0:34                0 (const int)
+0:34            Sequence
+0:34              Constant:
+0:34                0 (const int)
+0:34              Constant:
+0:34                1 (const int)
+0:35      move second child to first child ( temp highp 3-component vector of float)
+0:35        vector swizzle ( temp highp 3-component vector of float)
+0:35          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              Constant:
+0:35                3 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35            Constant:
+0:35              2 (const int)
+0:35        subgroupMul ( global highp 3-component vector of float)
+0:35          vector swizzle ( temp highp 3-component vector of float)
+0:35            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                Constant:
+0:35                  2 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:35              Constant:
+0:35                2 (const int)
+0:36      move second child to first child ( temp highp 4-component vector of float)
+0:36        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            Constant:
+0:36              3 (const int)
+0:36          Constant:
+0:36            0 (const int)
+0:36        subgroupMul ( global highp 4-component vector of float)
+0:36          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36              Constant:
+0:36                3 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:38      move second child to first child ( temp highp int)
+0:38        direct index ( temp highp int)
+0:38          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              Constant:
+0:38                0 (const int)
+0:38            Constant:
+0:38              1 (const int)
+0:38          Constant:
+0:38            0 (const int)
+0:38        subgroupMul ( global highp int)
+0:38          direct index ( temp highp int)
+0:38            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                1 (const int)
+0:38            Constant:
+0:38              0 (const int)
+0:39      move second child to first child ( temp highp 2-component vector of int)
+0:39        vector swizzle ( temp highp 2-component vector of int)
+0:39          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39          Sequence
+0:39            Constant:
+0:39              0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39        subgroupMul ( global highp 2-component vector of int)
+0:39          vector swizzle ( temp highp 2-component vector of int)
+0:39            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                Constant:
+0:39                  1 (const int)
+0:39              Constant:
+0:39                1 (const int)
+0:39            Sequence
+0:39              Constant:
+0:39                0 (const int)
+0:39              Constant:
+0:39                1 (const int)
+0:40      move second child to first child ( temp highp 3-component vector of int)
+0:40        vector swizzle ( temp highp 3-component vector of int)
+0:40          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              Constant:
+0:40                0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40            Constant:
+0:40              2 (const int)
+0:40        subgroupMul ( global highp 3-component vector of int)
+0:40          vector swizzle ( temp highp 3-component vector of int)
+0:40            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                Constant:
+0:40                  2 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Sequence
+0:40              Constant:
+0:40                0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40              Constant:
+0:40                2 (const int)
+0:41      move second child to first child ( temp highp 4-component vector of int)
+0:41        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            Constant:
+0:41              0 (const int)
+0:41          Constant:
+0:41            1 (const int)
+0:41        subgroupMul ( global highp 4-component vector of int)
+0:41          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              Constant:
+0:41                3 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:43      move second child to first child ( temp highp uint)
+0:43        direct index ( temp highp uint)
+0:43          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              Constant:
+0:43                1 (const int)
+0:43            Constant:
+0:43              2 (const int)
+0:43          Constant:
+0:43            0 (const int)
+0:43        subgroupMul ( global highp uint)
+0:43          direct index ( temp highp uint)
+0:43            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                Constant:
+0:43                  0 (const int)
+0:43              Constant:
+0:43                2 (const int)
+0:43            Constant:
+0:43              0 (const int)
+0:44      move second child to first child ( temp highp 2-component vector of uint)
+0:44        vector swizzle ( temp highp 2-component vector of uint)
+0:44          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              Constant:
+0:44                1 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:44          Sequence
+0:44            Constant:
+0:44              0 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44        subgroupMul ( global highp 2-component vector of uint)
+0:44          vector swizzle ( temp highp 2-component vector of uint)
+0:44            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                Constant:
+0:44                  1 (const int)
+0:44              Constant:
+0:44                2 (const int)
+0:44            Sequence
+0:44              Constant:
+0:44                0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:45      move second child to first child ( temp highp 3-component vector of uint)
+0:45        vector swizzle ( temp highp 3-component vector of uint)
+0:45          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              Constant:
+0:45                1 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45        subgroupMul ( global highp 3-component vector of uint)
+0:45          vector swizzle ( temp highp 3-component vector of uint)
+0:45            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                Constant:
+0:45                  2 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:46      move second child to first child ( temp highp 4-component vector of uint)
+0:46        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            Constant:
+0:46              1 (const int)
+0:46          Constant:
+0:46            2 (const int)
+0:46        subgroupMul ( global highp 4-component vector of uint)
+0:46          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              Constant:
+0:46                3 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:48      move second child to first child ( temp highp float)
+0:48        direct index ( temp highp float)
+0:48          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:48            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              Constant:
+0:48                2 (const int)
+0:48            Constant:
+0:48              0 (const int)
+0:48          Constant:
+0:48            0 (const int)
+0:48        subgroupMin ( global highp float)
+0:48          direct index ( temp highp float)
+0:48            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:48              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                Constant:
+0:48                  0 (const int)
+0:48              Constant:
+0:48                0 (const int)
+0:48            Constant:
+0:48              0 (const int)
+0:49      move second child to first child ( temp highp 2-component vector of float)
+0:49        vector swizzle ( temp highp 2-component vector of float)
+0:49          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:49            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              Constant:
+0:49                2 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:49          Sequence
+0:49            Constant:
+0:49              0 (const int)
+0:49            Constant:
+0:49              1 (const int)
+0:49        subgroupMin ( global highp 2-component vector of float)
+0:49          vector swizzle ( temp highp 2-component vector of float)
+0:49            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                Constant:
+0:49                  1 (const int)
+0:49              Constant:
+0:49                0 (const int)
+0:49            Sequence
+0:49              Constant:
+0:49                0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:50      move second child to first child ( temp highp 3-component vector of float)
+0:50        vector swizzle ( temp highp 3-component vector of float)
+0:50          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:50            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              Constant:
+0:50                2 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50        subgroupMin ( global highp 3-component vector of float)
+0:50          vector swizzle ( temp highp 3-component vector of float)
+0:50            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                Constant:
+0:50                  2 (const int)
+0:50              Constant:
+0:50                0 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:51      move second child to first child ( temp highp 4-component vector of float)
+0:51        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:51          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            Constant:
+0:51              2 (const int)
+0:51          Constant:
+0:51            0 (const int)
+0:51        subgroupMin ( global highp 4-component vector of float)
+0:51          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:51            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              Constant:
+0:51                3 (const int)
+0:51            Constant:
+0:51              0 (const int)
+0:53      move second child to first child ( temp highp int)
+0:53        direct index ( temp highp int)
+0:53          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              Constant:
+0:53                3 (const int)
+0:53            Constant:
+0:53              1 (const int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        subgroupMin ( global highp int)
+0:53          direct index ( temp highp int)
+0:53            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                Constant:
+0:53                  0 (const int)
+0:53              Constant:
+0:53                1 (const int)
+0:53            Constant:
+0:53              0 (const int)
+0:54      move second child to first child ( temp highp 2-component vector of int)
+0:54        vector swizzle ( temp highp 2-component vector of int)
+0:54          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              Constant:
+0:54                3 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54          Sequence
+0:54            Constant:
+0:54              0 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54        subgroupMin ( global highp 2-component vector of int)
+0:54          vector swizzle ( temp highp 2-component vector of int)
+0:54            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                Constant:
+0:54                  1 (const int)
+0:54              Constant:
+0:54                1 (const int)
+0:54            Sequence
+0:54              Constant:
+0:54                0 (const int)
+0:54              Constant:
+0:54                1 (const int)
+0:55      move second child to first child ( temp highp 3-component vector of int)
+0:55        vector swizzle ( temp highp 3-component vector of int)
+0:55          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              Constant:
+0:55                3 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55            Constant:
+0:55              2 (const int)
+0:55        subgroupMin ( global highp 3-component vector of int)
+0:55          vector swizzle ( temp highp 3-component vector of int)
+0:55            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                Constant:
+0:55                  2 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55              Constant:
+0:55                2 (const int)
+0:56      move second child to first child ( temp highp 4-component vector of int)
+0:56        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            Constant:
+0:56              3 (const int)
+0:56          Constant:
+0:56            1 (const int)
+0:56        subgroupMin ( global highp 4-component vector of int)
+0:56          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56              Constant:
+0:56                3 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:58      move second child to first child ( temp highp uint)
+0:58        direct index ( temp highp uint)
+0:58          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:58            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              Constant:
+0:58                0 (const int)
+0:58            Constant:
+0:58              2 (const int)
+0:58          Constant:
+0:58            0 (const int)
+0:58        subgroupMin ( global highp uint)
+0:58          direct index ( temp highp uint)
+0:58            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:58              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                Constant:
+0:58                  0 (const int)
+0:58              Constant:
+0:58                2 (const int)
+0:58            Constant:
+0:58              0 (const int)
+0:59      move second child to first child ( temp highp 2-component vector of uint)
+0:59        vector swizzle ( temp highp 2-component vector of uint)
+0:59          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:59            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59              Constant:
+0:59                0 (const int)
+0:59            Constant:
+0:59              2 (const int)
+0:59          Sequence
+0:59            Constant:
+0:59              0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:59        subgroupMin ( global highp 2-component vector of uint)
+0:59          vector swizzle ( temp highp 2-component vector of uint)
+0:59            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59                Constant:
+0:59                  1 (const int)
+0:59              Constant:
+0:59                2 (const int)
+0:59            Sequence
+0:59              Constant:
+0:59                0 (const int)
+0:59              Constant:
+0:59                1 (const int)
+0:60      move second child to first child ( temp highp 3-component vector of uint)
+0:60        vector swizzle ( temp highp 3-component vector of uint)
+0:60          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:60            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              Constant:
+0:60                0 (const int)
+0:60            Constant:
+0:60              2 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60            Constant:
+0:60              2 (const int)
+0:60        subgroupMin ( global highp 3-component vector of uint)
+0:60          vector swizzle ( temp highp 3-component vector of uint)
+0:60            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                Constant:
+0:60                  2 (const int)
+0:60              Constant:
+0:60                2 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60              Constant:
+0:60                2 (const int)
+0:61      move second child to first child ( temp highp 4-component vector of uint)
+0:61        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:61          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61            Constant:
+0:61              0 (const int)
+0:61          Constant:
+0:61            2 (const int)
+0:61        subgroupMin ( global highp 4-component vector of uint)
+0:61          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:61            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61              Constant:
+0:61                3 (const int)
+0:61            Constant:
+0:61              2 (const int)
+0:63      move second child to first child ( temp highp float)
+0:63        direct index ( temp highp float)
+0:63          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:63            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63              Constant:
+0:63                1 (const int)
+0:63            Constant:
+0:63              0 (const int)
+0:63          Constant:
+0:63            0 (const int)
+0:63        subgroupMax ( global highp float)
+0:63          direct index ( temp highp float)
+0:63            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:63              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                Constant:
+0:63                  0 (const int)
+0:63              Constant:
+0:63                0 (const int)
+0:63            Constant:
+0:63              0 (const int)
+0:64      move second child to first child ( temp highp 2-component vector of float)
+0:64        vector swizzle ( temp highp 2-component vector of float)
+0:64          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:64            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64              Constant:
+0:64                1 (const int)
+0:64            Constant:
+0:64              0 (const int)
+0:64          Sequence
+0:64            Constant:
+0:64              0 (const int)
+0:64            Constant:
+0:64              1 (const int)
+0:64        subgroupMax ( global highp 2-component vector of float)
+0:64          vector swizzle ( temp highp 2-component vector of float)
+0:64            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:64              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64                Constant:
+0:64                  1 (const int)
+0:64              Constant:
+0:64                0 (const int)
+0:64            Sequence
+0:64              Constant:
+0:64                0 (const int)
+0:64              Constant:
+0:64                1 (const int)
+0:65      move second child to first child ( temp highp 3-component vector of float)
+0:65        vector swizzle ( temp highp 3-component vector of float)
+0:65          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:65            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65              Constant:
+0:65                1 (const int)
+0:65            Constant:
+0:65              0 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65            Constant:
+0:65              2 (const int)
+0:65        subgroupMax ( global highp 3-component vector of float)
+0:65          vector swizzle ( temp highp 3-component vector of float)
+0:65            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:65              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                Constant:
+0:65                  2 (const int)
+0:65              Constant:
+0:65                0 (const int)
+0:65            Sequence
+0:65              Constant:
+0:65                0 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:65              Constant:
+0:65                2 (const int)
+0:66      move second child to first child ( temp highp 4-component vector of float)
+0:66        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:66          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66            Constant:
+0:66              1 (const int)
+0:66          Constant:
+0:66            0 (const int)
+0:66        subgroupMax ( global highp 4-component vector of float)
+0:66          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:66            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66              Constant:
+0:66                3 (const int)
+0:66            Constant:
+0:66              0 (const int)
+0:68      move second child to first child ( temp highp int)
+0:68        direct index ( temp highp int)
+0:68          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:68            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68              Constant:
+0:68                2 (const int)
+0:68            Constant:
+0:68              1 (const int)
+0:68          Constant:
+0:68            0 (const int)
+0:68        subgroupMax ( global highp int)
+0:68          direct index ( temp highp int)
+0:68            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:68              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                Constant:
+0:68                  0 (const int)
+0:68              Constant:
+0:68                1 (const int)
+0:68            Constant:
+0:68              0 (const int)
+0:69      move second child to first child ( temp highp 2-component vector of int)
+0:69        vector swizzle ( temp highp 2-component vector of int)
+0:69          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:69            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69              Constant:
+0:69                2 (const int)
+0:69            Constant:
+0:69              1 (const int)
+0:69          Sequence
+0:69            Constant:
+0:69              0 (const int)
+0:69            Constant:
+0:69              1 (const int)
+0:69        subgroupMax ( global highp 2-component vector of int)
+0:69          vector swizzle ( temp highp 2-component vector of int)
+0:69            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:69              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69                Constant:
+0:69                  1 (const int)
+0:69              Constant:
+0:69                1 (const int)
+0:69            Sequence
+0:69              Constant:
+0:69                0 (const int)
+0:69              Constant:
+0:69                1 (const int)
+0:70      move second child to first child ( temp highp 3-component vector of int)
+0:70        vector swizzle ( temp highp 3-component vector of int)
+0:70          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70              Constant:
+0:70                2 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70          Sequence
+0:70            Constant:
+0:70              0 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70            Constant:
+0:70              2 (const int)
+0:70        subgroupMax ( global highp 3-component vector of int)
+0:70          vector swizzle ( temp highp 3-component vector of int)
+0:70            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                Constant:
+0:70                  2 (const int)
+0:70              Constant:
+0:70                1 (const int)
+0:70            Sequence
+0:70              Constant:
+0:70                0 (const int)
+0:70              Constant:
+0:70                1 (const int)
+0:70              Constant:
+0:70                2 (const int)
+0:71      move second child to first child ( temp highp 4-component vector of int)
+0:71        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71            Constant:
+0:71              2 (const int)
+0:71          Constant:
+0:71            1 (const int)
+0:71        subgroupMax ( global highp 4-component vector of int)
+0:71          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71              Constant:
+0:71                3 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:73      move second child to first child ( temp highp uint)
+0:73        direct index ( temp highp uint)
+0:73          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:73            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73              Constant:
+0:73                3 (const int)
+0:73            Constant:
+0:73              2 (const int)
+0:73          Constant:
+0:73            0 (const int)
+0:73        subgroupMax ( global highp uint)
+0:73          direct index ( temp highp uint)
+0:73            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:73              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                Constant:
+0:73                  0 (const int)
+0:73              Constant:
+0:73                2 (const int)
+0:73            Constant:
+0:73              0 (const int)
+0:74      move second child to first child ( temp highp 2-component vector of uint)
+0:74        vector swizzle ( temp highp 2-component vector of uint)
+0:74          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:74            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74              Constant:
+0:74                3 (const int)
+0:74            Constant:
+0:74              2 (const int)
+0:74          Sequence
+0:74            Constant:
+0:74              0 (const int)
+0:74            Constant:
+0:74              1 (const int)
+0:74        subgroupMax ( global highp 2-component vector of uint)
+0:74          vector swizzle ( temp highp 2-component vector of uint)
+0:74            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:74              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74                Constant:
+0:74                  1 (const int)
+0:74              Constant:
+0:74                2 (const int)
+0:74            Sequence
+0:74              Constant:
+0:74                0 (const int)
+0:74              Constant:
+0:74                1 (const int)
+0:75      move second child to first child ( temp highp 3-component vector of uint)
+0:75        vector swizzle ( temp highp 3-component vector of uint)
+0:75          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:75            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75              Constant:
+0:75                3 (const int)
+0:75            Constant:
+0:75              2 (const int)
+0:75          Sequence
+0:75            Constant:
+0:75              0 (const int)
+0:75            Constant:
+0:75              1 (const int)
+0:75            Constant:
+0:75              2 (const int)
+0:75        subgroupMax ( global highp 3-component vector of uint)
+0:75          vector swizzle ( temp highp 3-component vector of uint)
+0:75            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:75              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75                Constant:
+0:75                  2 (const int)
+0:75              Constant:
+0:75                2 (const int)
+0:75            Sequence
+0:75              Constant:
+0:75                0 (const int)
+0:75              Constant:
+0:75                1 (const int)
+0:75              Constant:
+0:75                2 (const int)
+0:76      move second child to first child ( temp highp 4-component vector of uint)
+0:76        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:76          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76            Constant:
+0:76              3 (const int)
+0:76          Constant:
+0:76            2 (const int)
+0:76        subgroupMax ( global highp 4-component vector of uint)
+0:76          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:76            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76              Constant:
+0:76                3 (const int)
+0:76            Constant:
+0:76              2 (const int)
+0:78      move second child to first child ( temp highp int)
+0:78        direct index ( temp highp int)
+0:78          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78              Constant:
+0:78                0 (const int)
+0:78            Constant:
+0:78              1 (const int)
+0:78          Constant:
+0:78            0 (const int)
+0:78        subgroupAnd ( global highp int)
+0:78          direct index ( temp highp int)
+0:78            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78                Constant:
+0:78                  0 (const int)
+0:78              Constant:
+0:78                1 (const int)
+0:78            Constant:
+0:78              0 (const int)
+0:79      move second child to first child ( temp highp 2-component vector of int)
+0:79        vector swizzle ( temp highp 2-component vector of int)
+0:79          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:79            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79              Constant:
+0:79                0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:79          Sequence
+0:79            Constant:
+0:79              0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:79        subgroupAnd ( global highp 2-component vector of int)
+0:79          vector swizzle ( temp highp 2-component vector of int)
+0:79            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:79              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79                Constant:
+0:79                  1 (const int)
+0:79              Constant:
+0:79                1 (const int)
+0:79            Sequence
+0:79              Constant:
+0:79                0 (const int)
+0:79              Constant:
+0:79                1 (const int)
+0:80      move second child to first child ( temp highp 3-component vector of int)
+0:80        vector swizzle ( temp highp 3-component vector of int)
+0:80          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:80            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80              Constant:
+0:80                0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80          Sequence
+0:80            Constant:
+0:80              0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80            Constant:
+0:80              2 (const int)
+0:80        subgroupAnd ( global highp 3-component vector of int)
+0:80          vector swizzle ( temp highp 3-component vector of int)
+0:80            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:80              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80                Constant:
+0:80                  2 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80            Sequence
+0:80              Constant:
+0:80                0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80              Constant:
+0:80                2 (const int)
+0:81      move second child to first child ( temp highp 4-component vector of int)
+0:81        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:81          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81            Constant:
+0:81              0 (const int)
+0:81          Constant:
+0:81            1 (const int)
+0:81        subgroupAnd ( global highp 4-component vector of int)
+0:81          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:81            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81              Constant:
+0:81                3 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:83      move second child to first child ( temp highp uint)
+0:83        direct index ( temp highp uint)
+0:83          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83              Constant:
+0:83                1 (const int)
+0:83            Constant:
+0:83              2 (const int)
+0:83          Constant:
+0:83            0 (const int)
+0:83        subgroupAnd ( global highp uint)
+0:83          direct index ( temp highp uint)
+0:83            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83                Constant:
+0:83                  0 (const int)
+0:83              Constant:
+0:83                2 (const int)
+0:83            Constant:
+0:83              0 (const int)
+0:84      move second child to first child ( temp highp 2-component vector of uint)
+0:84        vector swizzle ( temp highp 2-component vector of uint)
+0:84          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:84            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84              Constant:
+0:84                1 (const int)
+0:84            Constant:
+0:84              2 (const int)
+0:84          Sequence
+0:84            Constant:
+0:84              0 (const int)
+0:84            Constant:
+0:84              1 (const int)
+0:84        subgroupAnd ( global highp 2-component vector of uint)
+0:84          vector swizzle ( temp highp 2-component vector of uint)
+0:84            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:84              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84                Constant:
+0:84                  1 (const int)
+0:84              Constant:
+0:84                2 (const int)
+0:84            Sequence
+0:84              Constant:
+0:84                0 (const int)
+0:84              Constant:
+0:84                1 (const int)
+0:85      move second child to first child ( temp highp 3-component vector of uint)
+0:85        vector swizzle ( temp highp 3-component vector of uint)
+0:85          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:85            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85              Constant:
+0:85                1 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85          Sequence
+0:85            Constant:
+0:85              0 (const int)
+0:85            Constant:
+0:85              1 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85        subgroupAnd ( global highp 3-component vector of uint)
+0:85          vector swizzle ( temp highp 3-component vector of uint)
+0:85            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:85              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85                Constant:
+0:85                  2 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:85            Sequence
+0:85              Constant:
+0:85                0 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:86      move second child to first child ( temp highp 4-component vector of uint)
+0:86        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:86          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86            Constant:
+0:86              1 (const int)
+0:86          Constant:
+0:86            2 (const int)
+0:86        subgroupAnd ( global highp 4-component vector of uint)
+0:86          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:86            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86              Constant:
+0:86                3 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:88      move second child to first child ( temp highp int)
+0:88        direct index ( temp highp int)
+0:88          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:88            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88              Constant:
+0:88                2 (const int)
+0:88            Constant:
+0:88              1 (const int)
+0:88          Constant:
+0:88            0 (const int)
+0:88        Convert bool to int ( temp highp int)
+0:88          subgroupAnd ( global bool)
+0:88            Compare Less Than ( temp bool)
+0:88              direct index ( temp highp int)
+0:88                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:88                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88                    Constant:
+0:88                      0 (const int)
+0:88                  Constant:
+0:88                    1 (const int)
+0:88                Constant:
+0:88                  0 (const int)
+0:88              Constant:
+0:88                0 (const int)
+0:89      move second child to first child ( temp highp 2-component vector of int)
+0:89        vector swizzle ( temp highp 2-component vector of int)
+0:89          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:89            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89              Constant:
+0:89                2 (const int)
+0:89            Constant:
+0:89              1 (const int)
+0:89          Sequence
+0:89            Constant:
+0:89              0 (const int)
+0:89            Constant:
+0:89              1 (const int)
+0:89        Convert bool to int ( temp highp 2-component vector of int)
+0:89          subgroupAnd ( global 2-component vector of bool)
+0:89            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:89              vector swizzle ( temp highp 2-component vector of int)
+0:89                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:89                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89                    Constant:
+0:89                      1 (const int)
+0:89                  Constant:
+0:89                    1 (const int)
+0:89                Sequence
+0:89                  Constant:
+0:89                    0 (const int)
+0:89                  Constant:
+0:89                    1 (const int)
+0:89              Constant:
+0:89                0 (const int)
+0:89                0 (const int)
+0:90      move second child to first child ( temp highp 3-component vector of int)
+0:90        vector swizzle ( temp highp 3-component vector of int)
+0:90          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90              Constant:
+0:90                2 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90          Sequence
+0:90            Constant:
+0:90              0 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90            Constant:
+0:90              2 (const int)
+0:90        Convert bool to int ( temp highp 3-component vector of int)
+0:90          subgroupAnd ( global 3-component vector of bool)
+0:90            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:90              vector swizzle ( temp highp 3-component vector of int)
+0:90                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90                    Constant:
+0:90                      1 (const int)
+0:90                  Constant:
+0:90                    1 (const int)
+0:90                Sequence
+0:90                  Constant:
+0:90                    0 (const int)
+0:90                  Constant:
+0:90                    1 (const int)
+0:90                  Constant:
+0:90                    2 (const int)
+0:90              Constant:
+0:90                0 (const int)
+0:90                0 (const int)
+0:90                0 (const int)
+0:91      move second child to first child ( temp highp 4-component vector of int)
+0:91        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91            Constant:
+0:91              2 (const int)
+0:91          Constant:
+0:91            1 (const int)
+0:91        Convert bool to int ( temp highp 4-component vector of int)
+0:91          subgroupAnd ( global 4-component vector of bool)
+0:91            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:91              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91                  Constant:
+0:91                    1 (const int)
+0:91                Constant:
+0:91                  1 (const int)
+0:91              Constant:
+0:91                0 (const int)
+0:91                0 (const int)
+0:91                0 (const int)
+0:91                0 (const int)
+0:93      move second child to first child ( temp highp int)
+0:93        direct index ( temp highp int)
+0:93          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93              Constant:
+0:93                3 (const int)
+0:93            Constant:
+0:93              1 (const int)
+0:93          Constant:
+0:93            0 (const int)
+0:93        subgroupOr ( global highp int)
+0:93          direct index ( temp highp int)
+0:93            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93                Constant:
+0:93                  0 (const int)
+0:93              Constant:
+0:93                1 (const int)
+0:93            Constant:
+0:93              0 (const int)
+0:94      move second child to first child ( temp highp 2-component vector of int)
+0:94        vector swizzle ( temp highp 2-component vector of int)
+0:94          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94              Constant:
+0:94                3 (const int)
+0:94            Constant:
+0:94              1 (const int)
+0:94          Sequence
+0:94            Constant:
+0:94              0 (const int)
+0:94            Constant:
+0:94              1 (const int)
+0:94        subgroupOr ( global highp 2-component vector of int)
+0:94          vector swizzle ( temp highp 2-component vector of int)
+0:94            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94                Constant:
+0:94                  1 (const int)
+0:94              Constant:
+0:94                1 (const int)
+0:94            Sequence
+0:94              Constant:
+0:94                0 (const int)
+0:94              Constant:
+0:94                1 (const int)
+0:95      move second child to first child ( temp highp 3-component vector of int)
+0:95        vector swizzle ( temp highp 3-component vector of int)
+0:95          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95              Constant:
+0:95                3 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95          Sequence
+0:95            Constant:
+0:95              0 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95            Constant:
+0:95              2 (const int)
+0:95        subgroupOr ( global highp 3-component vector of int)
+0:95          vector swizzle ( temp highp 3-component vector of int)
+0:95            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95                Constant:
+0:95                  2 (const int)
+0:95              Constant:
+0:95                1 (const int)
+0:95            Sequence
+0:95              Constant:
+0:95                0 (const int)
+0:95              Constant:
+0:95                1 (const int)
+0:95              Constant:
+0:95                2 (const int)
+0:96      move second child to first child ( temp highp 4-component vector of int)
+0:96        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96            Constant:
+0:96              3 (const int)
+0:96          Constant:
+0:96            1 (const int)
+0:96        subgroupOr ( global highp 4-component vector of int)
+0:96          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96              Constant:
+0:96                3 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:98      move second child to first child ( temp highp uint)
+0:98        direct index ( temp highp uint)
+0:98          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98              Constant:
+0:98                0 (const int)
+0:98            Constant:
+0:98              2 (const int)
+0:98          Constant:
+0:98            0 (const int)
+0:98        subgroupOr ( global highp uint)
+0:98          direct index ( temp highp uint)
+0:98            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98                Constant:
+0:98                  0 (const int)
+0:98              Constant:
+0:98                2 (const int)
+0:98            Constant:
+0:98              0 (const int)
+0:99      move second child to first child ( temp highp 2-component vector of uint)
+0:99        vector swizzle ( temp highp 2-component vector of uint)
+0:99          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:99            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99              Constant:
+0:99                0 (const int)
+0:99            Constant:
+0:99              2 (const int)
+0:99          Sequence
+0:99            Constant:
+0:99              0 (const int)
+0:99            Constant:
+0:99              1 (const int)
+0:99        subgroupOr ( global highp 2-component vector of uint)
+0:99          vector swizzle ( temp highp 2-component vector of uint)
+0:99            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:99              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99                Constant:
+0:99                  1 (const int)
+0:99              Constant:
+0:99                2 (const int)
+0:99            Sequence
+0:99              Constant:
+0:99                0 (const int)
+0:99              Constant:
+0:99                1 (const int)
+0:100      move second child to first child ( temp highp 3-component vector of uint)
+0:100        vector swizzle ( temp highp 3-component vector of uint)
+0:100          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:100            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100              Constant:
+0:100                0 (const int)
+0:100            Constant:
+0:100              2 (const int)
+0:100          Sequence
+0:100            Constant:
+0:100              0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100            Constant:
+0:100              2 (const int)
+0:100        subgroupOr ( global highp 3-component vector of uint)
+0:100          vector swizzle ( temp highp 3-component vector of uint)
+0:100            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:100              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100                Constant:
+0:100                  2 (const int)
+0:100              Constant:
+0:100                2 (const int)
+0:100            Sequence
+0:100              Constant:
+0:100                0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100              Constant:
+0:100                2 (const int)
+0:101      move second child to first child ( temp highp 4-component vector of uint)
+0:101        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:101          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101            Constant:
+0:101              0 (const int)
+0:101          Constant:
+0:101            2 (const int)
+0:101        subgroupOr ( global highp 4-component vector of uint)
+0:101          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:101            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101              Constant:
+0:101                3 (const int)
+0:101            Constant:
+0:101              2 (const int)
+0:103      move second child to first child ( temp highp int)
+0:103        direct index ( temp highp int)
+0:103          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103              Constant:
+0:103                1 (const int)
+0:103            Constant:
+0:103              1 (const int)
+0:103          Constant:
+0:103            0 (const int)
+0:103        Convert bool to int ( temp highp int)
+0:103          subgroupOr ( global bool)
+0:103            Compare Less Than ( temp bool)
+0:103              direct index ( temp highp int)
+0:103                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103                    Constant:
+0:103                      0 (const int)
+0:103                  Constant:
+0:103                    1 (const int)
+0:103                Constant:
+0:103                  0 (const int)
+0:103              Constant:
+0:103                0 (const int)
+0:104      move second child to first child ( temp highp 2-component vector of int)
+0:104        vector swizzle ( temp highp 2-component vector of int)
+0:104          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:104            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104              Constant:
+0:104                1 (const int)
+0:104            Constant:
+0:104              1 (const int)
+0:104          Sequence
+0:104            Constant:
+0:104              0 (const int)
+0:104            Constant:
+0:104              1 (const int)
+0:104        Convert bool to int ( temp highp 2-component vector of int)
+0:104          subgroupOr ( global 2-component vector of bool)
+0:104            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:104              vector swizzle ( temp highp 2-component vector of int)
+0:104                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:104                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104                    Constant:
+0:104                      1 (const int)
+0:104                  Constant:
+0:104                    1 (const int)
+0:104                Sequence
+0:104                  Constant:
+0:104                    0 (const int)
+0:104                  Constant:
+0:104                    1 (const int)
+0:104              Constant:
+0:104                0 (const int)
+0:104                0 (const int)
+0:105      move second child to first child ( temp highp 3-component vector of int)
+0:105        vector swizzle ( temp highp 3-component vector of int)
+0:105          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:105            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105              Constant:
+0:105                1 (const int)
+0:105            Constant:
+0:105              1 (const int)
+0:105          Sequence
+0:105            Constant:
+0:105              0 (const int)
+0:105            Constant:
+0:105              1 (const int)
+0:105            Constant:
+0:105              2 (const int)
+0:105        Convert bool to int ( temp highp 3-component vector of int)
+0:105          subgroupOr ( global 3-component vector of bool)
+0:105            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:105              vector swizzle ( temp highp 3-component vector of int)
+0:105                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:105                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105                    Constant:
+0:105                      1 (const int)
+0:105                  Constant:
+0:105                    1 (const int)
+0:105                Sequence
+0:105                  Constant:
+0:105                    0 (const int)
+0:105                  Constant:
+0:105                    1 (const int)
+0:105                  Constant:
+0:105                    2 (const int)
+0:105              Constant:
+0:105                0 (const int)
+0:105                0 (const int)
+0:105                0 (const int)
+0:106      move second child to first child ( temp highp 4-component vector of int)
+0:106        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:106          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106            Constant:
+0:106              1 (const int)
+0:106          Constant:
+0:106            1 (const int)
+0:106        Convert bool to int ( temp highp 4-component vector of int)
+0:106          subgroupOr ( global 4-component vector of bool)
+0:106            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:106              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:106                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106                  Constant:
+0:106                    1 (const int)
+0:106                Constant:
+0:106                  1 (const int)
+0:106              Constant:
+0:106                0 (const int)
+0:106                0 (const int)
+0:106                0 (const int)
+0:106                0 (const int)
+0:108      move second child to first child ( temp highp int)
+0:108        direct index ( temp highp int)
+0:108          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:108            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108              Constant:
+0:108                2 (const int)
+0:108            Constant:
+0:108              1 (const int)
+0:108          Constant:
+0:108            0 (const int)
+0:108        subgroupXor ( global highp int)
+0:108          direct index ( temp highp int)
+0:108            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:108              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108                Constant:
+0:108                  0 (const int)
+0:108              Constant:
+0:108                1 (const int)
+0:108            Constant:
+0:108              0 (const int)
+0:109      move second child to first child ( temp highp 2-component vector of int)
+0:109        vector swizzle ( temp highp 2-component vector of int)
+0:109          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:109            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109              Constant:
+0:109                2 (const int)
+0:109            Constant:
+0:109              1 (const int)
+0:109          Sequence
+0:109            Constant:
+0:109              0 (const int)
+0:109            Constant:
+0:109              1 (const int)
+0:109        subgroupXor ( global highp 2-component vector of int)
+0:109          vector swizzle ( temp highp 2-component vector of int)
+0:109            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:109              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109                Constant:
+0:109                  1 (const int)
+0:109              Constant:
+0:109                1 (const int)
+0:109            Sequence
+0:109              Constant:
+0:109                0 (const int)
+0:109              Constant:
+0:109                1 (const int)
+0:110      move second child to first child ( temp highp 3-component vector of int)
+0:110        vector swizzle ( temp highp 3-component vector of int)
+0:110          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110              Constant:
+0:110                2 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110          Sequence
+0:110            Constant:
+0:110              0 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110            Constant:
+0:110              2 (const int)
+0:110        subgroupXor ( global highp 3-component vector of int)
+0:110          vector swizzle ( temp highp 3-component vector of int)
+0:110            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110                Constant:
+0:110                  2 (const int)
+0:110              Constant:
+0:110                1 (const int)
+0:110            Sequence
+0:110              Constant:
+0:110                0 (const int)
+0:110              Constant:
+0:110                1 (const int)
+0:110              Constant:
+0:110                2 (const int)
+0:111      move second child to first child ( temp highp 4-component vector of int)
+0:111        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111            Constant:
+0:111              2 (const int)
+0:111          Constant:
+0:111            1 (const int)
+0:111        subgroupXor ( global highp 4-component vector of int)
+0:111          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111              Constant:
+0:111                3 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:113      move second child to first child ( temp highp uint)
+0:113        direct index ( temp highp uint)
+0:113          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:113            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113              Constant:
+0:113                3 (const int)
+0:113            Constant:
+0:113              2 (const int)
+0:113          Constant:
+0:113            0 (const int)
+0:113        subgroupXor ( global highp uint)
+0:113          direct index ( temp highp uint)
+0:113            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:113              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113                Constant:
+0:113                  0 (const int)
+0:113              Constant:
+0:113                2 (const int)
+0:113            Constant:
+0:113              0 (const int)
+0:114      move second child to first child ( temp highp 2-component vector of uint)
+0:114        vector swizzle ( temp highp 2-component vector of uint)
+0:114          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:114            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114              Constant:
+0:114                3 (const int)
+0:114            Constant:
+0:114              2 (const int)
+0:114          Sequence
+0:114            Constant:
+0:114              0 (const int)
+0:114            Constant:
+0:114              1 (const int)
+0:114        subgroupXor ( global highp 2-component vector of uint)
+0:114          vector swizzle ( temp highp 2-component vector of uint)
+0:114            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:114              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114                Constant:
+0:114                  1 (const int)
+0:114              Constant:
+0:114                2 (const int)
+0:114            Sequence
+0:114              Constant:
+0:114                0 (const int)
+0:114              Constant:
+0:114                1 (const int)
+0:115      move second child to first child ( temp highp 3-component vector of uint)
+0:115        vector swizzle ( temp highp 3-component vector of uint)
+0:115          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:115            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115              Constant:
+0:115                3 (const int)
+0:115            Constant:
+0:115              2 (const int)
+0:115          Sequence
+0:115            Constant:
+0:115              0 (const int)
+0:115            Constant:
+0:115              1 (const int)
+0:115            Constant:
+0:115              2 (const int)
+0:115        subgroupXor ( global highp 3-component vector of uint)
+0:115          vector swizzle ( temp highp 3-component vector of uint)
+0:115            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:115              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115                Constant:
+0:115                  2 (const int)
+0:115              Constant:
+0:115                2 (const int)
+0:115            Sequence
+0:115              Constant:
+0:115                0 (const int)
+0:115              Constant:
+0:115                1 (const int)
+0:115              Constant:
+0:115                2 (const int)
+0:116      move second child to first child ( temp highp 4-component vector of uint)
+0:116        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:116          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116            Constant:
+0:116              3 (const int)
+0:116          Constant:
+0:116            2 (const int)
+0:116        subgroupXor ( global highp 4-component vector of uint)
+0:116          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:116            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116              Constant:
+0:116                3 (const int)
+0:116            Constant:
+0:116              2 (const int)
+0:118      move second child to first child ( temp highp int)
+0:118        direct index ( temp highp int)
+0:118          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118              Constant:
+0:118                0 (const int)
+0:118            Constant:
+0:118              1 (const int)
+0:118          Constant:
+0:118            0 (const int)
+0:118        Convert bool to int ( temp highp int)
+0:118          subgroupXor ( global bool)
+0:118            Compare Less Than ( temp bool)
+0:118              direct index ( temp highp int)
+0:118                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118                    Constant:
+0:118                      0 (const int)
+0:118                  Constant:
+0:118                    1 (const int)
+0:118                Constant:
+0:118                  0 (const int)
+0:118              Constant:
+0:118                0 (const int)
+0:119      move second child to first child ( temp highp 2-component vector of int)
+0:119        vector swizzle ( temp highp 2-component vector of int)
+0:119          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:119            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119              Constant:
+0:119                0 (const int)
+0:119            Constant:
+0:119              1 (const int)
+0:119          Sequence
+0:119            Constant:
+0:119              0 (const int)
+0:119            Constant:
+0:119              1 (const int)
+0:119        Convert bool to int ( temp highp 2-component vector of int)
+0:119          subgroupXor ( global 2-component vector of bool)
+0:119            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:119              vector swizzle ( temp highp 2-component vector of int)
+0:119                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:119                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119                    Constant:
+0:119                      1 (const int)
+0:119                  Constant:
+0:119                    1 (const int)
+0:119                Sequence
+0:119                  Constant:
+0:119                    0 (const int)
+0:119                  Constant:
+0:119                    1 (const int)
+0:119              Constant:
+0:119                0 (const int)
+0:119                0 (const int)
+0:120      move second child to first child ( temp highp 3-component vector of int)
+0:120        vector swizzle ( temp highp 3-component vector of int)
+0:120          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:120            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120              Constant:
+0:120                0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120          Sequence
+0:120            Constant:
+0:120              0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120            Constant:
+0:120              2 (const int)
+0:120        Convert bool to int ( temp highp 3-component vector of int)
+0:120          subgroupXor ( global 3-component vector of bool)
+0:120            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:120              vector swizzle ( temp highp 3-component vector of int)
+0:120                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:120                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120                    Constant:
+0:120                      1 (const int)
+0:120                  Constant:
+0:120                    1 (const int)
+0:120                Sequence
+0:120                  Constant:
+0:120                    0 (const int)
+0:120                  Constant:
+0:120                    1 (const int)
+0:120                  Constant:
+0:120                    2 (const int)
+0:120              Constant:
+0:120                0 (const int)
+0:120                0 (const int)
+0:120                0 (const int)
+0:121      move second child to first child ( temp highp 4-component vector of int)
+0:121        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:121          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121            Constant:
+0:121              0 (const int)
+0:121          Constant:
+0:121            1 (const int)
+0:121        Convert bool to int ( temp highp 4-component vector of int)
+0:121          subgroupXor ( global 4-component vector of bool)
+0:121            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:121              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:121                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121                  Constant:
+0:121                    1 (const int)
+0:121                Constant:
+0:121                  1 (const int)
+0:121              Constant:
+0:121                0 (const int)
+0:121                0 (const int)
+0:121                0 (const int)
+0:121                0 (const int)
+0:123      move second child to first child ( temp highp float)
+0:123        direct index ( temp highp float)
+0:123          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:123            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123              Constant:
+0:123                1 (const int)
+0:123            Constant:
+0:123              0 (const int)
+0:123          Constant:
+0:123            0 (const int)
+0:123        subgroupInclusiveAdd ( global highp float)
+0:123          direct index ( temp highp float)
+0:123            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:123              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123                Constant:
+0:123                  0 (const int)
+0:123              Constant:
+0:123                0 (const int)
+0:123            Constant:
+0:123              0 (const int)
+0:124      move second child to first child ( temp highp 2-component vector of float)
+0:124        vector swizzle ( temp highp 2-component vector of float)
+0:124          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:124            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:124              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:124              Constant:
+0:124                1 (const int)
+0:124            Constant:
+0:124              0 (const int)
+0:124          Sequence
+0:124            Constant:
+0:124              0 (const int)
+0:124            Constant:
+0:124              1 (const int)
+0:124        subgroupInclusiveAdd ( global highp 2-component vector of float)
+0:124          vector swizzle ( temp highp 2-component vector of float)
+0:124            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:124              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:124                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:124                Constant:
+0:124                  1 (const int)
+0:124              Constant:
+0:124                0 (const int)
+0:124            Sequence
+0:124              Constant:
+0:124                0 (const int)
+0:124              Constant:
+0:124                1 (const int)
+0:125      move second child to first child ( temp highp 3-component vector of float)
+0:125        vector swizzle ( temp highp 3-component vector of float)
+0:125          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:125            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125              Constant:
+0:125                1 (const int)
+0:125            Constant:
+0:125              0 (const int)
+0:125          Sequence
+0:125            Constant:
+0:125              0 (const int)
+0:125            Constant:
+0:125              1 (const int)
+0:125            Constant:
+0:125              2 (const int)
+0:125        subgroupInclusiveAdd ( global highp 3-component vector of float)
+0:125          vector swizzle ( temp highp 3-component vector of float)
+0:125            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:125              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125                Constant:
+0:125                  2 (const int)
+0:125              Constant:
+0:125                0 (const int)
+0:125            Sequence
+0:125              Constant:
+0:125                0 (const int)
+0:125              Constant:
+0:125                1 (const int)
+0:125              Constant:
+0:125                2 (const int)
+0:126      move second child to first child ( temp highp 4-component vector of float)
+0:126        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:126          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126            Constant:
+0:126              1 (const int)
+0:126          Constant:
+0:126            0 (const int)
+0:126        subgroupInclusiveAdd ( global highp 4-component vector of float)
+0:126          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:126            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126              Constant:
+0:126                3 (const int)
+0:126            Constant:
+0:126              0 (const int)
+0:128      move second child to first child ( temp highp int)
+0:128        direct index ( temp highp int)
+0:128          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:128            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128              Constant:
+0:128                2 (const int)
+0:128            Constant:
+0:128              1 (const int)
+0:128          Constant:
+0:128            0 (const int)
+0:128        subgroupInclusiveAdd ( global highp int)
+0:128          direct index ( temp highp int)
+0:128            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:128              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128                Constant:
+0:128                  0 (const int)
+0:128              Constant:
+0:128                1 (const int)
+0:128            Constant:
+0:128              0 (const int)
+0:129      move second child to first child ( temp highp 2-component vector of int)
+0:129        vector swizzle ( temp highp 2-component vector of int)
+0:129          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:129            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:129              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:129              Constant:
+0:129                2 (const int)
+0:129            Constant:
+0:129              1 (const int)
+0:129          Sequence
+0:129            Constant:
+0:129              0 (const int)
+0:129            Constant:
+0:129              1 (const int)
+0:129        subgroupInclusiveAdd ( global highp 2-component vector of int)
+0:129          vector swizzle ( temp highp 2-component vector of int)
+0:129            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:129              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:129                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:129                Constant:
+0:129                  1 (const int)
+0:129              Constant:
+0:129                1 (const int)
+0:129            Sequence
+0:129              Constant:
+0:129                0 (const int)
+0:129              Constant:
+0:129                1 (const int)
+0:130      move second child to first child ( temp highp 3-component vector of int)
+0:130        vector swizzle ( temp highp 3-component vector of int)
+0:130          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:130            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130              Constant:
+0:130                2 (const int)
+0:130            Constant:
+0:130              1 (const int)
+0:130          Sequence
+0:130            Constant:
+0:130              0 (const int)
+0:130            Constant:
+0:130              1 (const int)
+0:130            Constant:
+0:130              2 (const int)
+0:130        subgroupInclusiveAdd ( global highp 3-component vector of int)
+0:130          vector swizzle ( temp highp 3-component vector of int)
+0:130            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:130              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130                Constant:
+0:130                  2 (const int)
+0:130              Constant:
+0:130                1 (const int)
+0:130            Sequence
+0:130              Constant:
+0:130                0 (const int)
+0:130              Constant:
+0:130                1 (const int)
+0:130              Constant:
+0:130                2 (const int)
+0:131      move second child to first child ( temp highp 4-component vector of int)
+0:131        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:131          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131            Constant:
+0:131              2 (const int)
+0:131          Constant:
+0:131            1 (const int)
+0:131        subgroupInclusiveAdd ( global highp 4-component vector of int)
+0:131          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:131            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131              Constant:
+0:131                3 (const int)
+0:131            Constant:
+0:131              1 (const int)
+0:133      move second child to first child ( temp highp uint)
+0:133        direct index ( temp highp uint)
+0:133          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:133            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133              Constant:
+0:133                3 (const int)
+0:133            Constant:
+0:133              2 (const int)
+0:133          Constant:
+0:133            0 (const int)
+0:133        subgroupInclusiveAdd ( global highp uint)
+0:133          direct index ( temp highp uint)
+0:133            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:133              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133                Constant:
+0:133                  0 (const int)
+0:133              Constant:
+0:133                2 (const int)
+0:133            Constant:
+0:133              0 (const int)
+0:134      move second child to first child ( temp highp 2-component vector of uint)
+0:134        vector swizzle ( temp highp 2-component vector of uint)
+0:134          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:134            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:134              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:134              Constant:
+0:134                3 (const int)
+0:134            Constant:
+0:134              2 (const int)
+0:134          Sequence
+0:134            Constant:
+0:134              0 (const int)
+0:134            Constant:
+0:134              1 (const int)
+0:134        subgroupInclusiveAdd ( global highp 2-component vector of uint)
+0:134          vector swizzle ( temp highp 2-component vector of uint)
+0:134            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:134              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:134                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:134                Constant:
+0:134                  1 (const int)
+0:134              Constant:
+0:134                2 (const int)
+0:134            Sequence
+0:134              Constant:
+0:134                0 (const int)
+0:134              Constant:
+0:134                1 (const int)
+0:135      move second child to first child ( temp highp 3-component vector of uint)
+0:135        vector swizzle ( temp highp 3-component vector of uint)
+0:135          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:135            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135              Constant:
+0:135                3 (const int)
+0:135            Constant:
+0:135              2 (const int)
+0:135          Sequence
+0:135            Constant:
+0:135              0 (const int)
+0:135            Constant:
+0:135              1 (const int)
+0:135            Constant:
+0:135              2 (const int)
+0:135        subgroupInclusiveAdd ( global highp 3-component vector of uint)
+0:135          vector swizzle ( temp highp 3-component vector of uint)
+0:135            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:135              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135                Constant:
+0:135                  2 (const int)
+0:135              Constant:
+0:135                2 (const int)
+0:135            Sequence
+0:135              Constant:
+0:135                0 (const int)
+0:135              Constant:
+0:135                1 (const int)
+0:135              Constant:
+0:135                2 (const int)
+0:136      move second child to first child ( temp highp 4-component vector of uint)
+0:136        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:136          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136            Constant:
+0:136              3 (const int)
+0:136          Constant:
+0:136            2 (const int)
+0:136        subgroupInclusiveAdd ( global highp 4-component vector of uint)
+0:136          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:136            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136              Constant:
+0:136                3 (const int)
+0:136            Constant:
+0:136              2 (const int)
+0:138      move second child to first child ( temp highp float)
+0:138        direct index ( temp highp float)
+0:138          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:138            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138              Constant:
+0:138                0 (const int)
+0:138            Constant:
+0:138              0 (const int)
+0:138          Constant:
+0:138            0 (const int)
+0:138        subgroupInclusiveMul ( global highp float)
+0:138          direct index ( temp highp float)
+0:138            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:138              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138                Constant:
+0:138                  0 (const int)
+0:138              Constant:
+0:138                0 (const int)
+0:138            Constant:
+0:138              0 (const int)
+0:139      move second child to first child ( temp highp 2-component vector of float)
+0:139        vector swizzle ( temp highp 2-component vector of float)
+0:139          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:139            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:139              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:139              Constant:
+0:139                0 (const int)
+0:139            Constant:
+0:139              0 (const int)
+0:139          Sequence
+0:139            Constant:
+0:139              0 (const int)
+0:139            Constant:
+0:139              1 (const int)
+0:139        subgroupInclusiveMul ( global highp 2-component vector of float)
+0:139          vector swizzle ( temp highp 2-component vector of float)
+0:139            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:139              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:139                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:139                Constant:
+0:139                  1 (const int)
+0:139              Constant:
+0:139                0 (const int)
+0:139            Sequence
+0:139              Constant:
+0:139                0 (const int)
+0:139              Constant:
+0:139                1 (const int)
+0:140      move second child to first child ( temp highp 3-component vector of float)
+0:140        vector swizzle ( temp highp 3-component vector of float)
+0:140          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:140            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140              Constant:
+0:140                0 (const int)
+0:140            Constant:
+0:140              0 (const int)
+0:140          Sequence
+0:140            Constant:
+0:140              0 (const int)
+0:140            Constant:
+0:140              1 (const int)
+0:140            Constant:
+0:140              2 (const int)
+0:140        subgroupInclusiveMul ( global highp 3-component vector of float)
+0:140          vector swizzle ( temp highp 3-component vector of float)
+0:140            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:140              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140                Constant:
+0:140                  2 (const int)
+0:140              Constant:
+0:140                0 (const int)
+0:140            Sequence
+0:140              Constant:
+0:140                0 (const int)
+0:140              Constant:
+0:140                1 (const int)
+0:140              Constant:
+0:140                2 (const int)
+0:141      move second child to first child ( temp highp 4-component vector of float)
+0:141        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:141          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141            Constant:
+0:141              0 (const int)
+0:141          Constant:
+0:141            0 (const int)
+0:141        subgroupInclusiveMul ( global highp 4-component vector of float)
+0:141          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:141            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141              Constant:
+0:141                3 (const int)
+0:141            Constant:
+0:141              0 (const int)
+0:143      move second child to first child ( temp highp int)
+0:143        direct index ( temp highp int)
+0:143          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:143            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143              Constant:
+0:143                1 (const int)
+0:143            Constant:
+0:143              1 (const int)
+0:143          Constant:
+0:143            0 (const int)
+0:143        subgroupInclusiveMul ( global highp int)
+0:143          direct index ( temp highp int)
+0:143            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:143              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143                Constant:
+0:143                  0 (const int)
+0:143              Constant:
+0:143                1 (const int)
+0:143            Constant:
+0:143              0 (const int)
+0:144      move second child to first child ( temp highp 2-component vector of int)
+0:144        vector swizzle ( temp highp 2-component vector of int)
+0:144          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:144            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:144              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:144              Constant:
+0:144                1 (const int)
+0:144            Constant:
+0:144              1 (const int)
+0:144          Sequence
+0:144            Constant:
+0:144              0 (const int)
+0:144            Constant:
+0:144              1 (const int)
+0:144        subgroupInclusiveMul ( global highp 2-component vector of int)
+0:144          vector swizzle ( temp highp 2-component vector of int)
+0:144            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:144              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:144                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:144                Constant:
+0:144                  1 (const int)
+0:144              Constant:
+0:144                1 (const int)
+0:144            Sequence
+0:144              Constant:
+0:144                0 (const int)
+0:144              Constant:
+0:144                1 (const int)
+0:145      move second child to first child ( temp highp 3-component vector of int)
+0:145        vector swizzle ( temp highp 3-component vector of int)
+0:145          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:145            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145              Constant:
+0:145                1 (const int)
+0:145            Constant:
+0:145              1 (const int)
+0:145          Sequence
+0:145            Constant:
+0:145              0 (const int)
+0:145            Constant:
+0:145              1 (const int)
+0:145            Constant:
+0:145              2 (const int)
+0:145        subgroupInclusiveMul ( global highp 3-component vector of int)
+0:145          vector swizzle ( temp highp 3-component vector of int)
+0:145            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:145              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145                Constant:
+0:145                  2 (const int)
+0:145              Constant:
+0:145                1 (const int)
+0:145            Sequence
+0:145              Constant:
+0:145                0 (const int)
+0:145              Constant:
+0:145                1 (const int)
+0:145              Constant:
+0:145                2 (const int)
+0:146      move second child to first child ( temp highp 4-component vector of int)
+0:146        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:146          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146            Constant:
+0:146              1 (const int)
+0:146          Constant:
+0:146            1 (const int)
+0:146        subgroupInclusiveMul ( global highp 4-component vector of int)
+0:146          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:146            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146              Constant:
+0:146                3 (const int)
+0:146            Constant:
+0:146              1 (const int)
+0:148      move second child to first child ( temp highp uint)
+0:148        direct index ( temp highp uint)
+0:148          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:148            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148              Constant:
+0:148                2 (const int)
+0:148            Constant:
+0:148              2 (const int)
+0:148          Constant:
+0:148            0 (const int)
+0:148        subgroupInclusiveMul ( global highp uint)
+0:148          direct index ( temp highp uint)
+0:148            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:148              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148                Constant:
+0:148                  0 (const int)
+0:148              Constant:
+0:148                2 (const int)
+0:148            Constant:
+0:148              0 (const int)
+0:149      move second child to first child ( temp highp 2-component vector of uint)
+0:149        vector swizzle ( temp highp 2-component vector of uint)
+0:149          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:149            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:149              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:149              Constant:
+0:149                2 (const int)
+0:149            Constant:
+0:149              2 (const int)
+0:149          Sequence
+0:149            Constant:
+0:149              0 (const int)
+0:149            Constant:
+0:149              1 (const int)
+0:149        subgroupInclusiveMul ( global highp 2-component vector of uint)
+0:149          vector swizzle ( temp highp 2-component vector of uint)
+0:149            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:149              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:149                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:149                Constant:
+0:149                  1 (const int)
+0:149              Constant:
+0:149                2 (const int)
+0:149            Sequence
+0:149              Constant:
+0:149                0 (const int)
+0:149              Constant:
+0:149                1 (const int)
+0:150      move second child to first child ( temp highp 3-component vector of uint)
+0:150        vector swizzle ( temp highp 3-component vector of uint)
+0:150          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:150            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150              Constant:
+0:150                2 (const int)
+0:150            Constant:
+0:150              2 (const int)
+0:150          Sequence
+0:150            Constant:
+0:150              0 (const int)
+0:150            Constant:
+0:150              1 (const int)
+0:150            Constant:
+0:150              2 (const int)
+0:150        subgroupInclusiveMul ( global highp 3-component vector of uint)
+0:150          vector swizzle ( temp highp 3-component vector of uint)
+0:150            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:150              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150                Constant:
+0:150                  2 (const int)
+0:150              Constant:
+0:150                2 (const int)
+0:150            Sequence
+0:150              Constant:
+0:150                0 (const int)
+0:150              Constant:
+0:150                1 (const int)
+0:150              Constant:
+0:150                2 (const int)
+0:151      move second child to first child ( temp highp 4-component vector of uint)
+0:151        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:151          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151            Constant:
+0:151              2 (const int)
+0:151          Constant:
+0:151            2 (const int)
+0:151        subgroupInclusiveMul ( global highp 4-component vector of uint)
+0:151          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:151            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151              Constant:
+0:151                3 (const int)
+0:151            Constant:
+0:151              2 (const int)
+0:153      move second child to first child ( temp highp float)
+0:153        direct index ( temp highp float)
+0:153          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:153            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153              Constant:
+0:153                3 (const int)
+0:153            Constant:
+0:153              0 (const int)
+0:153          Constant:
+0:153            0 (const int)
+0:153        subgroupInclusiveMin ( global highp float)
+0:153          direct index ( temp highp float)
+0:153            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:153              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153                Constant:
+0:153                  0 (const int)
+0:153              Constant:
+0:153                0 (const int)
+0:153            Constant:
+0:153              0 (const int)
+0:154      move second child to first child ( temp highp 2-component vector of float)
+0:154        vector swizzle ( temp highp 2-component vector of float)
+0:154          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:154            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:154              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:154              Constant:
+0:154                3 (const int)
+0:154            Constant:
+0:154              0 (const int)
+0:154          Sequence
+0:154            Constant:
+0:154              0 (const int)
+0:154            Constant:
+0:154              1 (const int)
+0:154        subgroupInclusiveMin ( global highp 2-component vector of float)
+0:154          vector swizzle ( temp highp 2-component vector of float)
+0:154            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:154              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:154                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:154                Constant:
+0:154                  1 (const int)
+0:154              Constant:
+0:154                0 (const int)
+0:154            Sequence
+0:154              Constant:
+0:154                0 (const int)
+0:154              Constant:
+0:154                1 (const int)
+0:155      move second child to first child ( temp highp 3-component vector of float)
+0:155        vector swizzle ( temp highp 3-component vector of float)
+0:155          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:155            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155              Constant:
+0:155                3 (const int)
+0:155            Constant:
+0:155              0 (const int)
+0:155          Sequence
+0:155            Constant:
+0:155              0 (const int)
+0:155            Constant:
+0:155              1 (const int)
+0:155            Constant:
+0:155              2 (const int)
+0:155        subgroupInclusiveMin ( global highp 3-component vector of float)
+0:155          vector swizzle ( temp highp 3-component vector of float)
+0:155            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:155              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155                Constant:
+0:155                  2 (const int)
+0:155              Constant:
+0:155                0 (const int)
+0:155            Sequence
+0:155              Constant:
+0:155                0 (const int)
+0:155              Constant:
+0:155                1 (const int)
+0:155              Constant:
+0:155                2 (const int)
+0:156      move second child to first child ( temp highp 4-component vector of float)
+0:156        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:156          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156            Constant:
+0:156              3 (const int)
+0:156          Constant:
+0:156            0 (const int)
+0:156        subgroupInclusiveMin ( global highp 4-component vector of float)
+0:156          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:156            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156              Constant:
+0:156                3 (const int)
+0:156            Constant:
+0:156              0 (const int)
+0:158      move second child to first child ( temp highp int)
+0:158        direct index ( temp highp int)
+0:158          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:158            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158              Constant:
+0:158                0 (const int)
+0:158            Constant:
+0:158              1 (const int)
+0:158          Constant:
+0:158            0 (const int)
+0:158        subgroupInclusiveMin ( global highp int)
+0:158          direct index ( temp highp int)
+0:158            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:158              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158                Constant:
+0:158                  0 (const int)
+0:158              Constant:
+0:158                1 (const int)
+0:158            Constant:
+0:158              0 (const int)
+0:159      move second child to first child ( temp highp 2-component vector of int)
+0:159        vector swizzle ( temp highp 2-component vector of int)
+0:159          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:159            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:159              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:159              Constant:
+0:159                0 (const int)
+0:159            Constant:
+0:159              1 (const int)
+0:159          Sequence
+0:159            Constant:
+0:159              0 (const int)
+0:159            Constant:
+0:159              1 (const int)
+0:159        subgroupInclusiveMin ( global highp 2-component vector of int)
+0:159          vector swizzle ( temp highp 2-component vector of int)
+0:159            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:159              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:159                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:159                Constant:
+0:159                  1 (const int)
+0:159              Constant:
+0:159                1 (const int)
+0:159            Sequence
+0:159              Constant:
+0:159                0 (const int)
+0:159              Constant:
+0:159                1 (const int)
+0:160      move second child to first child ( temp highp 3-component vector of int)
+0:160        vector swizzle ( temp highp 3-component vector of int)
+0:160          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:160            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160              Constant:
+0:160                0 (const int)
+0:160            Constant:
+0:160              1 (const int)
+0:160          Sequence
+0:160            Constant:
+0:160              0 (const int)
+0:160            Constant:
+0:160              1 (const int)
+0:160            Constant:
+0:160              2 (const int)
+0:160        subgroupInclusiveMin ( global highp 3-component vector of int)
+0:160          vector swizzle ( temp highp 3-component vector of int)
+0:160            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:160              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160                Constant:
+0:160                  2 (const int)
+0:160              Constant:
+0:160                1 (const int)
+0:160            Sequence
+0:160              Constant:
+0:160                0 (const int)
+0:160              Constant:
+0:160                1 (const int)
+0:160              Constant:
+0:160                2 (const int)
+0:161      move second child to first child ( temp highp 4-component vector of int)
+0:161        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:161          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161            Constant:
+0:161              0 (const int)
+0:161          Constant:
+0:161            1 (const int)
+0:161        subgroupInclusiveMin ( global highp 4-component vector of int)
+0:161          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:161            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161              Constant:
+0:161                3 (const int)
+0:161            Constant:
+0:161              1 (const int)
+0:163      move second child to first child ( temp highp uint)
+0:163        direct index ( temp highp uint)
+0:163          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:163            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163              Constant:
+0:163                1 (const int)
+0:163            Constant:
+0:163              2 (const int)
+0:163          Constant:
+0:163            0 (const int)
+0:163        subgroupInclusiveMin ( global highp uint)
+0:163          direct index ( temp highp uint)
+0:163            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:163              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163                Constant:
+0:163                  0 (const int)
+0:163              Constant:
+0:163                2 (const int)
+0:163            Constant:
+0:163              0 (const int)
+0:164      move second child to first child ( temp highp 2-component vector of uint)
+0:164        vector swizzle ( temp highp 2-component vector of uint)
+0:164          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:164            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:164              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:164              Constant:
+0:164                1 (const int)
+0:164            Constant:
+0:164              2 (const int)
+0:164          Sequence
+0:164            Constant:
+0:164              0 (const int)
+0:164            Constant:
+0:164              1 (const int)
+0:164        subgroupInclusiveMin ( global highp 2-component vector of uint)
+0:164          vector swizzle ( temp highp 2-component vector of uint)
+0:164            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:164              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:164                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:164                Constant:
+0:164                  1 (const int)
+0:164              Constant:
+0:164                2 (const int)
+0:164            Sequence
+0:164              Constant:
+0:164                0 (const int)
+0:164              Constant:
+0:164                1 (const int)
+0:165      move second child to first child ( temp highp 3-component vector of uint)
+0:165        vector swizzle ( temp highp 3-component vector of uint)
+0:165          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:165            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165              Constant:
+0:165                1 (const int)
+0:165            Constant:
+0:165              2 (const int)
+0:165          Sequence
+0:165            Constant:
+0:165              0 (const int)
+0:165            Constant:
+0:165              1 (const int)
+0:165            Constant:
+0:165              2 (const int)
+0:165        subgroupInclusiveMin ( global highp 3-component vector of uint)
+0:165          vector swizzle ( temp highp 3-component vector of uint)
+0:165            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:165              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165                Constant:
+0:165                  2 (const int)
+0:165              Constant:
+0:165                2 (const int)
+0:165            Sequence
+0:165              Constant:
+0:165                0 (const int)
+0:165              Constant:
+0:165                1 (const int)
+0:165              Constant:
+0:165                2 (const int)
+0:166      move second child to first child ( temp highp 4-component vector of uint)
+0:166        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:166          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166            Constant:
+0:166              1 (const int)
+0:166          Constant:
+0:166            2 (const int)
+0:166        subgroupInclusiveMin ( global highp 4-component vector of uint)
+0:166          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:166            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166              Constant:
+0:166                3 (const int)
+0:166            Constant:
+0:166              2 (const int)
+0:168      move second child to first child ( temp highp float)
+0:168        direct index ( temp highp float)
+0:168          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:168            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168              Constant:
+0:168                2 (const int)
+0:168            Constant:
+0:168              0 (const int)
+0:168          Constant:
+0:168            0 (const int)
+0:168        subgroupInclusiveMax ( global highp float)
+0:168          direct index ( temp highp float)
+0:168            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:168              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168                Constant:
+0:168                  0 (const int)
+0:168              Constant:
+0:168                0 (const int)
+0:168            Constant:
+0:168              0 (const int)
+0:169      move second child to first child ( temp highp 2-component vector of float)
+0:169        vector swizzle ( temp highp 2-component vector of float)
+0:169          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:169            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:169              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:169              Constant:
+0:169                2 (const int)
+0:169            Constant:
+0:169              0 (const int)
+0:169          Sequence
+0:169            Constant:
+0:169              0 (const int)
+0:169            Constant:
+0:169              1 (const int)
+0:169        subgroupInclusiveMax ( global highp 2-component vector of float)
+0:169          vector swizzle ( temp highp 2-component vector of float)
+0:169            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:169              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:169                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:169                Constant:
+0:169                  1 (const int)
+0:169              Constant:
+0:169                0 (const int)
+0:169            Sequence
+0:169              Constant:
+0:169                0 (const int)
+0:169              Constant:
+0:169                1 (const int)
+0:170      move second child to first child ( temp highp 3-component vector of float)
+0:170        vector swizzle ( temp highp 3-component vector of float)
+0:170          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:170            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170              Constant:
+0:170                2 (const int)
+0:170            Constant:
+0:170              0 (const int)
+0:170          Sequence
+0:170            Constant:
+0:170              0 (const int)
+0:170            Constant:
+0:170              1 (const int)
+0:170            Constant:
+0:170              2 (const int)
+0:170        subgroupInclusiveMax ( global highp 3-component vector of float)
+0:170          vector swizzle ( temp highp 3-component vector of float)
+0:170            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:170              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170                Constant:
+0:170                  2 (const int)
+0:170              Constant:
+0:170                0 (const int)
+0:170            Sequence
+0:170              Constant:
+0:170                0 (const int)
+0:170              Constant:
+0:170                1 (const int)
+0:170              Constant:
+0:170                2 (const int)
+0:171      move second child to first child ( temp highp 4-component vector of float)
+0:171        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:171          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171            Constant:
+0:171              2 (const int)
+0:171          Constant:
+0:171            0 (const int)
+0:171        subgroupInclusiveMax ( global highp 4-component vector of float)
+0:171          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:171            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171              Constant:
+0:171                3 (const int)
+0:171            Constant:
+0:171              0 (const int)
+0:173      move second child to first child ( temp highp int)
+0:173        direct index ( temp highp int)
+0:173          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:173            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173              Constant:
+0:173                3 (const int)
+0:173            Constant:
+0:173              1 (const int)
+0:173          Constant:
+0:173            0 (const int)
+0:173        subgroupInclusiveMax ( global highp int)
+0:173          direct index ( temp highp int)
+0:173            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:173              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173                Constant:
+0:173                  0 (const int)
+0:173              Constant:
+0:173                1 (const int)
+0:173            Constant:
+0:173              0 (const int)
+0:174      move second child to first child ( temp highp 2-component vector of int)
+0:174        vector swizzle ( temp highp 2-component vector of int)
+0:174          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:174            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:174              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:174              Constant:
+0:174                3 (const int)
+0:174            Constant:
+0:174              1 (const int)
+0:174          Sequence
+0:174            Constant:
+0:174              0 (const int)
+0:174            Constant:
+0:174              1 (const int)
+0:174        subgroupInclusiveMax ( global highp 2-component vector of int)
+0:174          vector swizzle ( temp highp 2-component vector of int)
+0:174            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:174              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:174                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:174                Constant:
+0:174                  1 (const int)
+0:174              Constant:
+0:174                1 (const int)
+0:174            Sequence
+0:174              Constant:
+0:174                0 (const int)
+0:174              Constant:
+0:174                1 (const int)
+0:175      move second child to first child ( temp highp 3-component vector of int)
+0:175        vector swizzle ( temp highp 3-component vector of int)
+0:175          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:175            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175              Constant:
+0:175                3 (const int)
+0:175            Constant:
+0:175              1 (const int)
+0:175          Sequence
+0:175            Constant:
+0:175              0 (const int)
+0:175            Constant:
+0:175              1 (const int)
+0:175            Constant:
+0:175              2 (const int)
+0:175        subgroupInclusiveMax ( global highp 3-component vector of int)
+0:175          vector swizzle ( temp highp 3-component vector of int)
+0:175            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:175              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175                Constant:
+0:175                  2 (const int)
+0:175              Constant:
+0:175                1 (const int)
+0:175            Sequence
+0:175              Constant:
+0:175                0 (const int)
+0:175              Constant:
+0:175                1 (const int)
+0:175              Constant:
+0:175                2 (const int)
+0:176      move second child to first child ( temp highp 4-component vector of int)
+0:176        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:176          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176            Constant:
+0:176              3 (const int)
+0:176          Constant:
+0:176            1 (const int)
+0:176        subgroupInclusiveMax ( global highp 4-component vector of int)
+0:176          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:176            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176              Constant:
+0:176                3 (const int)
+0:176            Constant:
+0:176              1 (const int)
+0:178      move second child to first child ( temp highp uint)
+0:178        direct index ( temp highp uint)
+0:178          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:178            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178              Constant:
+0:178                0 (const int)
+0:178            Constant:
+0:178              2 (const int)
+0:178          Constant:
+0:178            0 (const int)
+0:178        subgroupInclusiveMax ( global highp uint)
+0:178          direct index ( temp highp uint)
+0:178            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:178              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178                Constant:
+0:178                  0 (const int)
+0:178              Constant:
+0:178                2 (const int)
+0:178            Constant:
+0:178              0 (const int)
+0:179      move second child to first child ( temp highp 2-component vector of uint)
+0:179        vector swizzle ( temp highp 2-component vector of uint)
+0:179          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:179            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:179              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:179              Constant:
+0:179                0 (const int)
+0:179            Constant:
+0:179              2 (const int)
+0:179          Sequence
+0:179            Constant:
+0:179              0 (const int)
+0:179            Constant:
+0:179              1 (const int)
+0:179        subgroupInclusiveMax ( global highp 2-component vector of uint)
+0:179          vector swizzle ( temp highp 2-component vector of uint)
+0:179            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:179              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:179                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:179                Constant:
+0:179                  1 (const int)
+0:179              Constant:
+0:179                2 (const int)
+0:179            Sequence
+0:179              Constant:
+0:179                0 (const int)
+0:179              Constant:
+0:179                1 (const int)
+0:180      move second child to first child ( temp highp 3-component vector of uint)
+0:180        vector swizzle ( temp highp 3-component vector of uint)
+0:180          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:180            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180              Constant:
+0:180                0 (const int)
+0:180            Constant:
+0:180              2 (const int)
+0:180          Sequence
+0:180            Constant:
+0:180              0 (const int)
+0:180            Constant:
+0:180              1 (const int)
+0:180            Constant:
+0:180              2 (const int)
+0:180        subgroupInclusiveMax ( global highp 3-component vector of uint)
+0:180          vector swizzle ( temp highp 3-component vector of uint)
+0:180            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:180              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180                Constant:
+0:180                  2 (const int)
+0:180              Constant:
+0:180                2 (const int)
+0:180            Sequence
+0:180              Constant:
+0:180                0 (const int)
+0:180              Constant:
+0:180                1 (const int)
+0:180              Constant:
+0:180                2 (const int)
+0:181      move second child to first child ( temp highp 4-component vector of uint)
+0:181        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:181          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181            Constant:
+0:181              0 (const int)
+0:181          Constant:
+0:181            2 (const int)
+0:181        subgroupInclusiveMax ( global highp 4-component vector of uint)
+0:181          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:181            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181              Constant:
+0:181                3 (const int)
+0:181            Constant:
+0:181              2 (const int)
+0:183      move second child to first child ( temp highp int)
+0:183        direct index ( temp highp int)
+0:183          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:183            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183              Constant:
+0:183                1 (const int)
+0:183            Constant:
+0:183              1 (const int)
+0:183          Constant:
+0:183            0 (const int)
+0:183        subgroupInclusiveAnd ( global highp int)
+0:183          direct index ( temp highp int)
+0:183            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:183              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183                Constant:
+0:183                  0 (const int)
+0:183              Constant:
+0:183                1 (const int)
+0:183            Constant:
+0:183              0 (const int)
+0:184      move second child to first child ( temp highp 2-component vector of int)
+0:184        vector swizzle ( temp highp 2-component vector of int)
+0:184          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:184            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:184              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:184              Constant:
+0:184                1 (const int)
+0:184            Constant:
+0:184              1 (const int)
+0:184          Sequence
+0:184            Constant:
+0:184              0 (const int)
+0:184            Constant:
+0:184              1 (const int)
+0:184        subgroupInclusiveAnd ( global highp 2-component vector of int)
+0:184          vector swizzle ( temp highp 2-component vector of int)
+0:184            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:184              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:184                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:184                Constant:
+0:184                  1 (const int)
+0:184              Constant:
+0:184                1 (const int)
+0:184            Sequence
+0:184              Constant:
+0:184                0 (const int)
+0:184              Constant:
+0:184                1 (const int)
+0:185      move second child to first child ( temp highp 3-component vector of int)
+0:185        vector swizzle ( temp highp 3-component vector of int)
+0:185          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:185            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185              Constant:
+0:185                1 (const int)
+0:185            Constant:
+0:185              1 (const int)
+0:185          Sequence
+0:185            Constant:
+0:185              0 (const int)
+0:185            Constant:
+0:185              1 (const int)
+0:185            Constant:
+0:185              2 (const int)
+0:185        subgroupInclusiveAnd ( global highp 3-component vector of int)
+0:185          vector swizzle ( temp highp 3-component vector of int)
+0:185            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:185              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185                Constant:
+0:185                  2 (const int)
+0:185              Constant:
+0:185                1 (const int)
+0:185            Sequence
+0:185              Constant:
+0:185                0 (const int)
+0:185              Constant:
+0:185                1 (const int)
+0:185              Constant:
+0:185                2 (const int)
+0:186      move second child to first child ( temp highp 4-component vector of int)
+0:186        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:186          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186            Constant:
+0:186              1 (const int)
+0:186          Constant:
+0:186            1 (const int)
+0:186        subgroupInclusiveAnd ( global highp 4-component vector of int)
+0:186          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:186            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186              Constant:
+0:186                3 (const int)
+0:186            Constant:
+0:186              1 (const int)
+0:188      move second child to first child ( temp highp uint)
+0:188        direct index ( temp highp uint)
+0:188          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:188            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188              Constant:
+0:188                2 (const int)
+0:188            Constant:
+0:188              2 (const int)
+0:188          Constant:
+0:188            0 (const int)
+0:188        subgroupInclusiveAnd ( global highp uint)
+0:188          direct index ( temp highp uint)
+0:188            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:188              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188                Constant:
+0:188                  0 (const int)
+0:188              Constant:
+0:188                2 (const int)
+0:188            Constant:
+0:188              0 (const int)
+0:189      move second child to first child ( temp highp 2-component vector of uint)
+0:189        vector swizzle ( temp highp 2-component vector of uint)
+0:189          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:189            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:189              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:189              Constant:
+0:189                2 (const int)
+0:189            Constant:
+0:189              2 (const int)
+0:189          Sequence
+0:189            Constant:
+0:189              0 (const int)
+0:189            Constant:
+0:189              1 (const int)
+0:189        subgroupInclusiveAnd ( global highp 2-component vector of uint)
+0:189          vector swizzle ( temp highp 2-component vector of uint)
+0:189            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:189              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:189                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:189                Constant:
+0:189                  1 (const int)
+0:189              Constant:
+0:189                2 (const int)
+0:189            Sequence
+0:189              Constant:
+0:189                0 (const int)
+0:189              Constant:
+0:189                1 (const int)
+0:190      move second child to first child ( temp highp 3-component vector of uint)
+0:190        vector swizzle ( temp highp 3-component vector of uint)
+0:190          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:190            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190              Constant:
+0:190                2 (const int)
+0:190            Constant:
+0:190              2 (const int)
+0:190          Sequence
+0:190            Constant:
+0:190              0 (const int)
+0:190            Constant:
+0:190              1 (const int)
+0:190            Constant:
+0:190              2 (const int)
+0:190        subgroupInclusiveAnd ( global highp 3-component vector of uint)
+0:190          vector swizzle ( temp highp 3-component vector of uint)
+0:190            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:190              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190                Constant:
+0:190                  2 (const int)
+0:190              Constant:
+0:190                2 (const int)
+0:190            Sequence
+0:190              Constant:
+0:190                0 (const int)
+0:190              Constant:
+0:190                1 (const int)
+0:190              Constant:
+0:190                2 (const int)
+0:191      move second child to first child ( temp highp 4-component vector of uint)
+0:191        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:191          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191            Constant:
+0:191              2 (const int)
+0:191          Constant:
+0:191            2 (const int)
+0:191        subgroupInclusiveAnd ( global highp 4-component vector of uint)
+0:191          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:191            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191              Constant:
+0:191                3 (const int)
+0:191            Constant:
+0:191              2 (const int)
+0:193      move second child to first child ( temp highp int)
+0:193        direct index ( temp highp int)
+0:193          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:193            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193              Constant:
+0:193                3 (const int)
+0:193            Constant:
+0:193              1 (const int)
+0:193          Constant:
+0:193            0 (const int)
+0:193        Convert bool to int ( temp highp int)
+0:193          subgroupInclusiveAnd ( global bool)
+0:193            Compare Less Than ( temp bool)
+0:193              direct index ( temp highp int)
+0:193                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:193                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193                    Constant:
+0:193                      0 (const int)
+0:193                  Constant:
+0:193                    1 (const int)
+0:193                Constant:
+0:193                  0 (const int)
+0:193              Constant:
+0:193                0 (const int)
+0:194      move second child to first child ( temp highp 2-component vector of int)
+0:194        vector swizzle ( temp highp 2-component vector of int)
+0:194          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:194            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:194              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:194              Constant:
+0:194                3 (const int)
+0:194            Constant:
+0:194              1 (const int)
+0:194          Sequence
+0:194            Constant:
+0:194              0 (const int)
+0:194            Constant:
+0:194              1 (const int)
+0:194        Convert bool to int ( temp highp 2-component vector of int)
+0:194          subgroupInclusiveAnd ( global 2-component vector of bool)
+0:194            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:194              vector swizzle ( temp highp 2-component vector of int)
+0:194                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:194                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:194                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:194                    Constant:
+0:194                      1 (const int)
+0:194                  Constant:
+0:194                    1 (const int)
+0:194                Sequence
+0:194                  Constant:
+0:194                    0 (const int)
+0:194                  Constant:
+0:194                    1 (const int)
+0:194              Constant:
+0:194                0 (const int)
+0:194                0 (const int)
+0:195      move second child to first child ( temp highp 3-component vector of int)
+0:195        vector swizzle ( temp highp 3-component vector of int)
+0:195          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:195            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195              Constant:
+0:195                3 (const int)
+0:195            Constant:
+0:195              1 (const int)
+0:195          Sequence
+0:195            Constant:
+0:195              0 (const int)
+0:195            Constant:
+0:195              1 (const int)
+0:195            Constant:
+0:195              2 (const int)
+0:195        Convert bool to int ( temp highp 3-component vector of int)
+0:195          subgroupInclusiveAnd ( global 3-component vector of bool)
+0:195            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:195              vector swizzle ( temp highp 3-component vector of int)
+0:195                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:195                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195                    Constant:
+0:195                      1 (const int)
+0:195                  Constant:
+0:195                    1 (const int)
+0:195                Sequence
+0:195                  Constant:
+0:195                    0 (const int)
+0:195                  Constant:
+0:195                    1 (const int)
+0:195                  Constant:
+0:195                    2 (const int)
+0:195              Constant:
+0:195                0 (const int)
+0:195                0 (const int)
+0:195                0 (const int)
+0:196      move second child to first child ( temp highp 4-component vector of int)
+0:196        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:196          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196            Constant:
+0:196              3 (const int)
+0:196          Constant:
+0:196            1 (const int)
+0:196        Convert bool to int ( temp highp 4-component vector of int)
+0:196          subgroupInclusiveAnd ( global 4-component vector of bool)
+0:196            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:196              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:196                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196                  Constant:
+0:196                    1 (const int)
+0:196                Constant:
+0:196                  1 (const int)
+0:196              Constant:
+0:196                0 (const int)
+0:196                0 (const int)
+0:196                0 (const int)
+0:196                0 (const int)
+0:198      move second child to first child ( temp highp int)
+0:198        direct index ( temp highp int)
+0:198          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:198            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198              Constant:
+0:198                0 (const int)
+0:198            Constant:
+0:198              1 (const int)
+0:198          Constant:
+0:198            0 (const int)
+0:198        subgroupInclusiveOr ( global highp int)
+0:198          direct index ( temp highp int)
+0:198            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:198              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198                Constant:
+0:198                  0 (const int)
+0:198              Constant:
+0:198                1 (const int)
+0:198            Constant:
+0:198              0 (const int)
+0:199      move second child to first child ( temp highp 2-component vector of int)
+0:199        vector swizzle ( temp highp 2-component vector of int)
+0:199          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:199            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:199              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:199              Constant:
+0:199                0 (const int)
+0:199            Constant:
+0:199              1 (const int)
+0:199          Sequence
+0:199            Constant:
+0:199              0 (const int)
+0:199            Constant:
+0:199              1 (const int)
+0:199        subgroupInclusiveOr ( global highp 2-component vector of int)
+0:199          vector swizzle ( temp highp 2-component vector of int)
+0:199            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:199              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:199                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:199                Constant:
+0:199                  1 (const int)
+0:199              Constant:
+0:199                1 (const int)
+0:199            Sequence
+0:199              Constant:
+0:199                0 (const int)
+0:199              Constant:
+0:199                1 (const int)
+0:200      move second child to first child ( temp highp 3-component vector of int)
+0:200        vector swizzle ( temp highp 3-component vector of int)
+0:200          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:200            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200              Constant:
+0:200                0 (const int)
+0:200            Constant:
+0:200              1 (const int)
+0:200          Sequence
+0:200            Constant:
+0:200              0 (const int)
+0:200            Constant:
+0:200              1 (const int)
+0:200            Constant:
+0:200              2 (const int)
+0:200        subgroupInclusiveOr ( global highp 3-component vector of int)
+0:200          vector swizzle ( temp highp 3-component vector of int)
+0:200            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:200              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200                Constant:
+0:200                  2 (const int)
+0:200              Constant:
+0:200                1 (const int)
+0:200            Sequence
+0:200              Constant:
+0:200                0 (const int)
+0:200              Constant:
+0:200                1 (const int)
+0:200              Constant:
+0:200                2 (const int)
+0:201      move second child to first child ( temp highp 4-component vector of int)
+0:201        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:201          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201            Constant:
+0:201              0 (const int)
+0:201          Constant:
+0:201            1 (const int)
+0:201        subgroupInclusiveOr ( global highp 4-component vector of int)
+0:201          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:201            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201              Constant:
+0:201                3 (const int)
+0:201            Constant:
+0:201              1 (const int)
+0:203      move second child to first child ( temp highp uint)
+0:203        direct index ( temp highp uint)
+0:203          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:203            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203              Constant:
+0:203                1 (const int)
+0:203            Constant:
+0:203              2 (const int)
+0:203          Constant:
+0:203            0 (const int)
+0:203        subgroupInclusiveOr ( global highp uint)
+0:203          direct index ( temp highp uint)
+0:203            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:203              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203                Constant:
+0:203                  0 (const int)
+0:203              Constant:
+0:203                2 (const int)
+0:203            Constant:
+0:203              0 (const int)
+0:204      move second child to first child ( temp highp 2-component vector of uint)
+0:204        vector swizzle ( temp highp 2-component vector of uint)
+0:204          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:204            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:204              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:204              Constant:
+0:204                1 (const int)
+0:204            Constant:
+0:204              2 (const int)
+0:204          Sequence
+0:204            Constant:
+0:204              0 (const int)
+0:204            Constant:
+0:204              1 (const int)
+0:204        subgroupInclusiveOr ( global highp 2-component vector of uint)
+0:204          vector swizzle ( temp highp 2-component vector of uint)
+0:204            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:204              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:204                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:204                Constant:
+0:204                  1 (const int)
+0:204              Constant:
+0:204                2 (const int)
+0:204            Sequence
+0:204              Constant:
+0:204                0 (const int)
+0:204              Constant:
+0:204                1 (const int)
+0:205      move second child to first child ( temp highp 3-component vector of uint)
+0:205        vector swizzle ( temp highp 3-component vector of uint)
+0:205          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:205            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205              Constant:
+0:205                1 (const int)
+0:205            Constant:
+0:205              2 (const int)
+0:205          Sequence
+0:205            Constant:
+0:205              0 (const int)
+0:205            Constant:
+0:205              1 (const int)
+0:205            Constant:
+0:205              2 (const int)
+0:205        subgroupInclusiveOr ( global highp 3-component vector of uint)
+0:205          vector swizzle ( temp highp 3-component vector of uint)
+0:205            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:205              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205                Constant:
+0:205                  2 (const int)
+0:205              Constant:
+0:205                2 (const int)
+0:205            Sequence
+0:205              Constant:
+0:205                0 (const int)
+0:205              Constant:
+0:205                1 (const int)
+0:205              Constant:
+0:205                2 (const int)
+0:206      move second child to first child ( temp highp 4-component vector of uint)
+0:206        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:206          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206            Constant:
+0:206              1 (const int)
+0:206          Constant:
+0:206            2 (const int)
+0:206        subgroupInclusiveOr ( global highp 4-component vector of uint)
+0:206          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:206            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206              Constant:
+0:206                3 (const int)
+0:206            Constant:
+0:206              2 (const int)
+0:208      move second child to first child ( temp highp int)
+0:208        direct index ( temp highp int)
+0:208          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:208            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208              Constant:
+0:208                2 (const int)
+0:208            Constant:
+0:208              1 (const int)
+0:208          Constant:
+0:208            0 (const int)
+0:208        Convert bool to int ( temp highp int)
+0:208          subgroupInclusiveOr ( global bool)
+0:208            Compare Less Than ( temp bool)
+0:208              direct index ( temp highp int)
+0:208                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:208                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208                    Constant:
+0:208                      0 (const int)
+0:208                  Constant:
+0:208                    1 (const int)
+0:208                Constant:
+0:208                  0 (const int)
+0:208              Constant:
+0:208                0 (const int)
+0:209      move second child to first child ( temp highp 2-component vector of int)
+0:209        vector swizzle ( temp highp 2-component vector of int)
+0:209          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:209            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:209              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:209              Constant:
+0:209                2 (const int)
+0:209            Constant:
+0:209              1 (const int)
+0:209          Sequence
+0:209            Constant:
+0:209              0 (const int)
+0:209            Constant:
+0:209              1 (const int)
+0:209        Convert bool to int ( temp highp 2-component vector of int)
+0:209          subgroupInclusiveOr ( global 2-component vector of bool)
+0:209            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:209              vector swizzle ( temp highp 2-component vector of int)
+0:209                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:209                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:209                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:209                    Constant:
+0:209                      1 (const int)
+0:209                  Constant:
+0:209                    1 (const int)
+0:209                Sequence
+0:209                  Constant:
+0:209                    0 (const int)
+0:209                  Constant:
+0:209                    1 (const int)
+0:209              Constant:
+0:209                0 (const int)
+0:209                0 (const int)
+0:210      move second child to first child ( temp highp 3-component vector of int)
+0:210        vector swizzle ( temp highp 3-component vector of int)
+0:210          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:210            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210              Constant:
+0:210                2 (const int)
+0:210            Constant:
+0:210              1 (const int)
+0:210          Sequence
+0:210            Constant:
+0:210              0 (const int)
+0:210            Constant:
+0:210              1 (const int)
+0:210            Constant:
+0:210              2 (const int)
+0:210        Convert bool to int ( temp highp 3-component vector of int)
+0:210          subgroupInclusiveOr ( global 3-component vector of bool)
+0:210            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:210              vector swizzle ( temp highp 3-component vector of int)
+0:210                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:210                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210                    Constant:
+0:210                      1 (const int)
+0:210                  Constant:
+0:210                    1 (const int)
+0:210                Sequence
+0:210                  Constant:
+0:210                    0 (const int)
+0:210                  Constant:
+0:210                    1 (const int)
+0:210                  Constant:
+0:210                    2 (const int)
+0:210              Constant:
+0:210                0 (const int)
+0:210                0 (const int)
+0:210                0 (const int)
+0:211      move second child to first child ( temp highp 4-component vector of int)
+0:211        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:211          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211            Constant:
+0:211              2 (const int)
+0:211          Constant:
+0:211            1 (const int)
+0:211        Convert bool to int ( temp highp 4-component vector of int)
+0:211          subgroupInclusiveOr ( global 4-component vector of bool)
+0:211            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:211              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:211                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211                  Constant:
+0:211                    1 (const int)
+0:211                Constant:
+0:211                  1 (const int)
+0:211              Constant:
+0:211                0 (const int)
+0:211                0 (const int)
+0:211                0 (const int)
+0:211                0 (const int)
+0:213      move second child to first child ( temp highp int)
+0:213        direct index ( temp highp int)
+0:213          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:213            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213              Constant:
+0:213                3 (const int)
+0:213            Constant:
+0:213              1 (const int)
+0:213          Constant:
+0:213            0 (const int)
+0:213        subgroupInclusiveXor ( global highp int)
+0:213          direct index ( temp highp int)
+0:213            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:213              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213                Constant:
+0:213                  0 (const int)
+0:213              Constant:
+0:213                1 (const int)
+0:213            Constant:
+0:213              0 (const int)
+0:214      move second child to first child ( temp highp 2-component vector of int)
+0:214        vector swizzle ( temp highp 2-component vector of int)
+0:214          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:214            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:214              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:214              Constant:
+0:214                3 (const int)
+0:214            Constant:
+0:214              1 (const int)
+0:214          Sequence
+0:214            Constant:
+0:214              0 (const int)
+0:214            Constant:
+0:214              1 (const int)
+0:214        subgroupInclusiveXor ( global highp 2-component vector of int)
+0:214          vector swizzle ( temp highp 2-component vector of int)
+0:214            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:214              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:214                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:214                Constant:
+0:214                  1 (const int)
+0:214              Constant:
+0:214                1 (const int)
+0:214            Sequence
+0:214              Constant:
+0:214                0 (const int)
+0:214              Constant:
+0:214                1 (const int)
+0:215      move second child to first child ( temp highp 3-component vector of int)
+0:215        vector swizzle ( temp highp 3-component vector of int)
+0:215          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:215            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215              Constant:
+0:215                3 (const int)
+0:215            Constant:
+0:215              1 (const int)
+0:215          Sequence
+0:215            Constant:
+0:215              0 (const int)
+0:215            Constant:
+0:215              1 (const int)
+0:215            Constant:
+0:215              2 (const int)
+0:215        subgroupInclusiveXor ( global highp 3-component vector of int)
+0:215          vector swizzle ( temp highp 3-component vector of int)
+0:215            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:215              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215                Constant:
+0:215                  2 (const int)
+0:215              Constant:
+0:215                1 (const int)
+0:215            Sequence
+0:215              Constant:
+0:215                0 (const int)
+0:215              Constant:
+0:215                1 (const int)
+0:215              Constant:
+0:215                2 (const int)
+0:216      move second child to first child ( temp highp 4-component vector of int)
+0:216        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:216          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216            Constant:
+0:216              3 (const int)
+0:216          Constant:
+0:216            1 (const int)
+0:216        subgroupInclusiveXor ( global highp 4-component vector of int)
+0:216          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:216            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216              Constant:
+0:216                3 (const int)
+0:216            Constant:
+0:216              1 (const int)
+0:218      move second child to first child ( temp highp uint)
+0:218        direct index ( temp highp uint)
+0:218          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:218            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218              Constant:
+0:218                0 (const int)
+0:218            Constant:
+0:218              2 (const int)
+0:218          Constant:
+0:218            0 (const int)
+0:218        subgroupInclusiveXor ( global highp uint)
+0:218          direct index ( temp highp uint)
+0:218            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:218              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218                Constant:
+0:218                  0 (const int)
+0:218              Constant:
+0:218                2 (const int)
+0:218            Constant:
+0:218              0 (const int)
+0:219      move second child to first child ( temp highp 2-component vector of uint)
+0:219        vector swizzle ( temp highp 2-component vector of uint)
+0:219          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:219            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:219              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:219              Constant:
+0:219                0 (const int)
+0:219            Constant:
+0:219              2 (const int)
+0:219          Sequence
+0:219            Constant:
+0:219              0 (const int)
+0:219            Constant:
+0:219              1 (const int)
+0:219        subgroupInclusiveXor ( global highp 2-component vector of uint)
+0:219          vector swizzle ( temp highp 2-component vector of uint)
+0:219            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:219              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:219                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:219                Constant:
+0:219                  1 (const int)
+0:219              Constant:
+0:219                2 (const int)
+0:219            Sequence
+0:219              Constant:
+0:219                0 (const int)
+0:219              Constant:
+0:219                1 (const int)
+0:220      move second child to first child ( temp highp 3-component vector of uint)
+0:220        vector swizzle ( temp highp 3-component vector of uint)
+0:220          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:220            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220              Constant:
+0:220                0 (const int)
+0:220            Constant:
+0:220              2 (const int)
+0:220          Sequence
+0:220            Constant:
+0:220              0 (const int)
+0:220            Constant:
+0:220              1 (const int)
+0:220            Constant:
+0:220              2 (const int)
+0:220        subgroupInclusiveXor ( global highp 3-component vector of uint)
+0:220          vector swizzle ( temp highp 3-component vector of uint)
+0:220            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:220              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220                Constant:
+0:220                  2 (const int)
+0:220              Constant:
+0:220                2 (const int)
+0:220            Sequence
+0:220              Constant:
+0:220                0 (const int)
+0:220              Constant:
+0:220                1 (const int)
+0:220              Constant:
+0:220                2 (const int)
+0:221      move second child to first child ( temp highp 4-component vector of uint)
+0:221        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:221          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221            Constant:
+0:221              0 (const int)
+0:221          Constant:
+0:221            2 (const int)
+0:221        subgroupInclusiveXor ( global highp 4-component vector of uint)
+0:221          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:221            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221              Constant:
+0:221                3 (const int)
+0:221            Constant:
+0:221              2 (const int)
+0:223      move second child to first child ( temp highp int)
+0:223        direct index ( temp highp int)
+0:223          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:223            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223              Constant:
+0:223                1 (const int)
+0:223            Constant:
+0:223              1 (const int)
+0:223          Constant:
+0:223            0 (const int)
+0:223        Convert bool to int ( temp highp int)
+0:223          subgroupInclusiveXor ( global bool)
+0:223            Compare Less Than ( temp bool)
+0:223              direct index ( temp highp int)
+0:223                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:223                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223                    Constant:
+0:223                      0 (const int)
+0:223                  Constant:
+0:223                    1 (const int)
+0:223                Constant:
+0:223                  0 (const int)
+0:223              Constant:
+0:223                0 (const int)
+0:224      move second child to first child ( temp highp 2-component vector of int)
+0:224        vector swizzle ( temp highp 2-component vector of int)
+0:224          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:224            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:224              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:224              Constant:
+0:224                1 (const int)
+0:224            Constant:
+0:224              1 (const int)
+0:224          Sequence
+0:224            Constant:
+0:224              0 (const int)
+0:224            Constant:
+0:224              1 (const int)
+0:224        Convert bool to int ( temp highp 2-component vector of int)
+0:224          subgroupInclusiveXor ( global 2-component vector of bool)
+0:224            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:224              vector swizzle ( temp highp 2-component vector of int)
+0:224                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:224                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:224                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:224                    Constant:
+0:224                      1 (const int)
+0:224                  Constant:
+0:224                    1 (const int)
+0:224                Sequence
+0:224                  Constant:
+0:224                    0 (const int)
+0:224                  Constant:
+0:224                    1 (const int)
+0:224              Constant:
+0:224                0 (const int)
+0:224                0 (const int)
+0:225      move second child to first child ( temp highp 3-component vector of int)
+0:225        vector swizzle ( temp highp 3-component vector of int)
+0:225          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:225            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225              Constant:
+0:225                1 (const int)
+0:225            Constant:
+0:225              1 (const int)
+0:225          Sequence
+0:225            Constant:
+0:225              0 (const int)
+0:225            Constant:
+0:225              1 (const int)
+0:225            Constant:
+0:225              2 (const int)
+0:225        Convert bool to int ( temp highp 3-component vector of int)
+0:225          subgroupInclusiveXor ( global 3-component vector of bool)
+0:225            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:225              vector swizzle ( temp highp 3-component vector of int)
+0:225                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:225                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225                    Constant:
+0:225                      1 (const int)
+0:225                  Constant:
+0:225                    1 (const int)
+0:225                Sequence
+0:225                  Constant:
+0:225                    0 (const int)
+0:225                  Constant:
+0:225                    1 (const int)
+0:225                  Constant:
+0:225                    2 (const int)
+0:225              Constant:
+0:225                0 (const int)
+0:225                0 (const int)
+0:225                0 (const int)
+0:226      move second child to first child ( temp highp 4-component vector of int)
+0:226        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:226          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226            Constant:
+0:226              1 (const int)
+0:226          Constant:
+0:226            1 (const int)
+0:226        Convert bool to int ( temp highp 4-component vector of int)
+0:226          subgroupInclusiveXor ( global 4-component vector of bool)
+0:226            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:226              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:226                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226                  Constant:
+0:226                    1 (const int)
+0:226                Constant:
+0:226                  1 (const int)
+0:226              Constant:
+0:226                0 (const int)
+0:226                0 (const int)
+0:226                0 (const int)
+0:226                0 (const int)
+0:228      move second child to first child ( temp highp float)
+0:228        direct index ( temp highp float)
+0:228          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:228            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228              Constant:
+0:228                2 (const int)
+0:228            Constant:
+0:228              0 (const int)
+0:228          Constant:
+0:228            0 (const int)
+0:228        subgroupExclusiveAdd ( global highp float)
+0:228          direct index ( temp highp float)
+0:228            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:228              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228                Constant:
+0:228                  0 (const int)
+0:228              Constant:
+0:228                0 (const int)
+0:228            Constant:
+0:228              0 (const int)
+0:229      move second child to first child ( temp highp 2-component vector of float)
+0:229        vector swizzle ( temp highp 2-component vector of float)
+0:229          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:229            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:229              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:229              Constant:
+0:229                2 (const int)
+0:229            Constant:
+0:229              0 (const int)
+0:229          Sequence
+0:229            Constant:
+0:229              0 (const int)
+0:229            Constant:
+0:229              1 (const int)
+0:229        subgroupExclusiveAdd ( global highp 2-component vector of float)
+0:229          vector swizzle ( temp highp 2-component vector of float)
+0:229            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:229              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:229                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:229                Constant:
+0:229                  1 (const int)
+0:229              Constant:
+0:229                0 (const int)
+0:229            Sequence
+0:229              Constant:
+0:229                0 (const int)
+0:229              Constant:
+0:229                1 (const int)
+0:230      move second child to first child ( temp highp 3-component vector of float)
+0:230        vector swizzle ( temp highp 3-component vector of float)
+0:230          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:230            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230              Constant:
+0:230                2 (const int)
+0:230            Constant:
+0:230              0 (const int)
+0:230          Sequence
+0:230            Constant:
+0:230              0 (const int)
+0:230            Constant:
+0:230              1 (const int)
+0:230            Constant:
+0:230              2 (const int)
+0:230        subgroupExclusiveAdd ( global highp 3-component vector of float)
+0:230          vector swizzle ( temp highp 3-component vector of float)
+0:230            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:230              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230                Constant:
+0:230                  2 (const int)
+0:230              Constant:
+0:230                0 (const int)
+0:230            Sequence
+0:230              Constant:
+0:230                0 (const int)
+0:230              Constant:
+0:230                1 (const int)
+0:230              Constant:
+0:230                2 (const int)
+0:231      move second child to first child ( temp highp 4-component vector of float)
+0:231        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:231          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231            Constant:
+0:231              2 (const int)
+0:231          Constant:
+0:231            0 (const int)
+0:231        subgroupExclusiveAdd ( global highp 4-component vector of float)
+0:231          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:231            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231              Constant:
+0:231                3 (const int)
+0:231            Constant:
+0:231              0 (const int)
+0:233      move second child to first child ( temp highp int)
+0:233        direct index ( temp highp int)
+0:233          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:233            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233              Constant:
+0:233                3 (const int)
+0:233            Constant:
+0:233              1 (const int)
+0:233          Constant:
+0:233            0 (const int)
+0:233        subgroupExclusiveAdd ( global highp int)
+0:233          direct index ( temp highp int)
+0:233            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:233              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233                Constant:
+0:233                  0 (const int)
+0:233              Constant:
+0:233                1 (const int)
+0:233            Constant:
+0:233              0 (const int)
+0:234      move second child to first child ( temp highp 2-component vector of int)
+0:234        vector swizzle ( temp highp 2-component vector of int)
+0:234          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:234            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:234              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:234              Constant:
+0:234                3 (const int)
+0:234            Constant:
+0:234              1 (const int)
+0:234          Sequence
+0:234            Constant:
+0:234              0 (const int)
+0:234            Constant:
+0:234              1 (const int)
+0:234        subgroupExclusiveAdd ( global highp 2-component vector of int)
+0:234          vector swizzle ( temp highp 2-component vector of int)
+0:234            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:234              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:234                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:234                Constant:
+0:234                  1 (const int)
+0:234              Constant:
+0:234                1 (const int)
+0:234            Sequence
+0:234              Constant:
+0:234                0 (const int)
+0:234              Constant:
+0:234                1 (const int)
+0:235      move second child to first child ( temp highp 3-component vector of int)
+0:235        vector swizzle ( temp highp 3-component vector of int)
+0:235          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:235            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235              Constant:
+0:235                3 (const int)
+0:235            Constant:
+0:235              1 (const int)
+0:235          Sequence
+0:235            Constant:
+0:235              0 (const int)
+0:235            Constant:
+0:235              1 (const int)
+0:235            Constant:
+0:235              2 (const int)
+0:235        subgroupExclusiveAdd ( global highp 3-component vector of int)
+0:235          vector swizzle ( temp highp 3-component vector of int)
+0:235            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:235              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235                Constant:
+0:235                  2 (const int)
+0:235              Constant:
+0:235                1 (const int)
+0:235            Sequence
+0:235              Constant:
+0:235                0 (const int)
+0:235              Constant:
+0:235                1 (const int)
+0:235              Constant:
+0:235                2 (const int)
+0:236      move second child to first child ( temp highp 4-component vector of int)
+0:236        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:236          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236            Constant:
+0:236              3 (const int)
+0:236          Constant:
+0:236            1 (const int)
+0:236        subgroupExclusiveAdd ( global highp 4-component vector of int)
+0:236          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:236            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236              Constant:
+0:236                3 (const int)
+0:236            Constant:
+0:236              1 (const int)
+0:238      move second child to first child ( temp highp uint)
+0:238        direct index ( temp highp uint)
+0:238          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:238            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238              Constant:
+0:238                0 (const int)
+0:238            Constant:
+0:238              2 (const int)
+0:238          Constant:
+0:238            0 (const int)
+0:238        subgroupExclusiveAdd ( global highp uint)
+0:238          direct index ( temp highp uint)
+0:238            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:238              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238                Constant:
+0:238                  0 (const int)
+0:238              Constant:
+0:238                2 (const int)
+0:238            Constant:
+0:238              0 (const int)
+0:239      move second child to first child ( temp highp 2-component vector of uint)
+0:239        vector swizzle ( temp highp 2-component vector of uint)
+0:239          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:239            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:239              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:239              Constant:
+0:239                0 (const int)
+0:239            Constant:
+0:239              2 (const int)
+0:239          Sequence
+0:239            Constant:
+0:239              0 (const int)
+0:239            Constant:
+0:239              1 (const int)
+0:239        subgroupExclusiveAdd ( global highp 2-component vector of uint)
+0:239          vector swizzle ( temp highp 2-component vector of uint)
+0:239            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:239              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:239                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:239                Constant:
+0:239                  1 (const int)
+0:239              Constant:
+0:239                2 (const int)
+0:239            Sequence
+0:239              Constant:
+0:239                0 (const int)
+0:239              Constant:
+0:239                1 (const int)
+0:240      move second child to first child ( temp highp 3-component vector of uint)
+0:240        vector swizzle ( temp highp 3-component vector of uint)
+0:240          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:240            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240              Constant:
+0:240                0 (const int)
+0:240            Constant:
+0:240              2 (const int)
+0:240          Sequence
+0:240            Constant:
+0:240              0 (const int)
+0:240            Constant:
+0:240              1 (const int)
+0:240            Constant:
+0:240              2 (const int)
+0:240        subgroupExclusiveAdd ( global highp 3-component vector of uint)
+0:240          vector swizzle ( temp highp 3-component vector of uint)
+0:240            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:240              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240                Constant:
+0:240                  2 (const int)
+0:240              Constant:
+0:240                2 (const int)
+0:240            Sequence
+0:240              Constant:
+0:240                0 (const int)
+0:240              Constant:
+0:240                1 (const int)
+0:240              Constant:
+0:240                2 (const int)
+0:241      move second child to first child ( temp highp 4-component vector of uint)
+0:241        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:241          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241            Constant:
+0:241              0 (const int)
+0:241          Constant:
+0:241            2 (const int)
+0:241        subgroupExclusiveAdd ( global highp 4-component vector of uint)
+0:241          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:241            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241              Constant:
+0:241                3 (const int)
+0:241            Constant:
+0:241              2 (const int)
+0:243      move second child to first child ( temp highp float)
+0:243        direct index ( temp highp float)
+0:243          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:243            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243              Constant:
+0:243                1 (const int)
+0:243            Constant:
+0:243              0 (const int)
+0:243          Constant:
+0:243            0 (const int)
+0:243        subgroupExclusiveMul ( global highp float)
+0:243          direct index ( temp highp float)
+0:243            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:243              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243                Constant:
+0:243                  0 (const int)
+0:243              Constant:
+0:243                0 (const int)
+0:243            Constant:
+0:243              0 (const int)
+0:244      move second child to first child ( temp highp 2-component vector of float)
+0:244        vector swizzle ( temp highp 2-component vector of float)
+0:244          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:244            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:244              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:244              Constant:
+0:244                1 (const int)
+0:244            Constant:
+0:244              0 (const int)
+0:244          Sequence
+0:244            Constant:
+0:244              0 (const int)
+0:244            Constant:
+0:244              1 (const int)
+0:244        subgroupExclusiveMul ( global highp 2-component vector of float)
+0:244          vector swizzle ( temp highp 2-component vector of float)
+0:244            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:244              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:244                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:244                Constant:
+0:244                  1 (const int)
+0:244              Constant:
+0:244                0 (const int)
+0:244            Sequence
+0:244              Constant:
+0:244                0 (const int)
+0:244              Constant:
+0:244                1 (const int)
+0:245      move second child to first child ( temp highp 3-component vector of float)
+0:245        vector swizzle ( temp highp 3-component vector of float)
+0:245          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:245            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245              Constant:
+0:245                1 (const int)
+0:245            Constant:
+0:245              0 (const int)
+0:245          Sequence
+0:245            Constant:
+0:245              0 (const int)
+0:245            Constant:
+0:245              1 (const int)
+0:245            Constant:
+0:245              2 (const int)
+0:245        subgroupExclusiveMul ( global highp 3-component vector of float)
+0:245          vector swizzle ( temp highp 3-component vector of float)
+0:245            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:245              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245                Constant:
+0:245                  2 (const int)
+0:245              Constant:
+0:245                0 (const int)
+0:245            Sequence
+0:245              Constant:
+0:245                0 (const int)
+0:245              Constant:
+0:245                1 (const int)
+0:245              Constant:
+0:245                2 (const int)
+0:246      move second child to first child ( temp highp 4-component vector of float)
+0:246        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:246          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246            Constant:
+0:246              1 (const int)
+0:246          Constant:
+0:246            0 (const int)
+0:246        subgroupExclusiveMul ( global highp 4-component vector of float)
+0:246          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:246            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246              Constant:
+0:246                3 (const int)
+0:246            Constant:
+0:246              0 (const int)
+0:248      move second child to first child ( temp highp int)
+0:248        direct index ( temp highp int)
+0:248          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:248            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248              Constant:
+0:248                2 (const int)
+0:248            Constant:
+0:248              1 (const int)
+0:248          Constant:
+0:248            0 (const int)
+0:248        subgroupExclusiveMul ( global highp int)
+0:248          direct index ( temp highp int)
+0:248            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:248              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248                Constant:
+0:248                  0 (const int)
+0:248              Constant:
+0:248                1 (const int)
+0:248            Constant:
+0:248              0 (const int)
+0:249      move second child to first child ( temp highp 2-component vector of int)
+0:249        vector swizzle ( temp highp 2-component vector of int)
+0:249          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:249            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:249              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:249              Constant:
+0:249                2 (const int)
+0:249            Constant:
+0:249              1 (const int)
+0:249          Sequence
+0:249            Constant:
+0:249              0 (const int)
+0:249            Constant:
+0:249              1 (const int)
+0:249        subgroupExclusiveMul ( global highp 2-component vector of int)
+0:249          vector swizzle ( temp highp 2-component vector of int)
+0:249            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:249              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:249                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:249                Constant:
+0:249                  1 (const int)
+0:249              Constant:
+0:249                1 (const int)
+0:249            Sequence
+0:249              Constant:
+0:249                0 (const int)
+0:249              Constant:
+0:249                1 (const int)
+0:250      move second child to first child ( temp highp 3-component vector of int)
+0:250        vector swizzle ( temp highp 3-component vector of int)
+0:250          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:250            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250              Constant:
+0:250                2 (const int)
+0:250            Constant:
+0:250              1 (const int)
+0:250          Sequence
+0:250            Constant:
+0:250              0 (const int)
+0:250            Constant:
+0:250              1 (const int)
+0:250            Constant:
+0:250              2 (const int)
+0:250        subgroupExclusiveMul ( global highp 3-component vector of int)
+0:250          vector swizzle ( temp highp 3-component vector of int)
+0:250            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:250              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250                Constant:
+0:250                  2 (const int)
+0:250              Constant:
+0:250                1 (const int)
+0:250            Sequence
+0:250              Constant:
+0:250                0 (const int)
+0:250              Constant:
+0:250                1 (const int)
+0:250              Constant:
+0:250                2 (const int)
+0:251      move second child to first child ( temp highp 4-component vector of int)
+0:251        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:251          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251            Constant:
+0:251              2 (const int)
+0:251          Constant:
+0:251            1 (const int)
+0:251        subgroupExclusiveMul ( global highp 4-component vector of int)
+0:251          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:251            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251              Constant:
+0:251                3 (const int)
+0:251            Constant:
+0:251              1 (const int)
+0:253      move second child to first child ( temp highp uint)
+0:253        direct index ( temp highp uint)
+0:253          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:253            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253              Constant:
+0:253                3 (const int)
+0:253            Constant:
+0:253              2 (const int)
+0:253          Constant:
+0:253            0 (const int)
+0:253        subgroupExclusiveMul ( global highp uint)
+0:253          direct index ( temp highp uint)
+0:253            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:253              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253                Constant:
+0:253                  0 (const int)
+0:253              Constant:
+0:253                2 (const int)
+0:253            Constant:
+0:253              0 (const int)
+0:254      move second child to first child ( temp highp 2-component vector of uint)
+0:254        vector swizzle ( temp highp 2-component vector of uint)
+0:254          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:254            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:254              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:254              Constant:
+0:254                3 (const int)
+0:254            Constant:
+0:254              2 (const int)
+0:254          Sequence
+0:254            Constant:
+0:254              0 (const int)
+0:254            Constant:
+0:254              1 (const int)
+0:254        subgroupExclusiveMul ( global highp 2-component vector of uint)
+0:254          vector swizzle ( temp highp 2-component vector of uint)
+0:254            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:254              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:254                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:254                Constant:
+0:254                  1 (const int)
+0:254              Constant:
+0:254                2 (const int)
+0:254            Sequence
+0:254              Constant:
+0:254                0 (const int)
+0:254              Constant:
+0:254                1 (const int)
+0:255      move second child to first child ( temp highp 3-component vector of uint)
+0:255        vector swizzle ( temp highp 3-component vector of uint)
+0:255          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:255            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255              Constant:
+0:255                3 (const int)
+0:255            Constant:
+0:255              2 (const int)
+0:255          Sequence
+0:255            Constant:
+0:255              0 (const int)
+0:255            Constant:
+0:255              1 (const int)
+0:255            Constant:
+0:255              2 (const int)
+0:255        subgroupExclusiveMul ( global highp 3-component vector of uint)
+0:255          vector swizzle ( temp highp 3-component vector of uint)
+0:255            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:255              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255                Constant:
+0:255                  2 (const int)
+0:255              Constant:
+0:255                2 (const int)
+0:255            Sequence
+0:255              Constant:
+0:255                0 (const int)
+0:255              Constant:
+0:255                1 (const int)
+0:255              Constant:
+0:255                2 (const int)
+0:256      move second child to first child ( temp highp 4-component vector of uint)
+0:256        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:256          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256            Constant:
+0:256              3 (const int)
+0:256          Constant:
+0:256            2 (const int)
+0:256        subgroupExclusiveMul ( global highp 4-component vector of uint)
+0:256          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:256            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256              Constant:
+0:256                3 (const int)
+0:256            Constant:
+0:256              2 (const int)
+0:258      move second child to first child ( temp highp float)
+0:258        direct index ( temp highp float)
+0:258          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:258            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258              Constant:
+0:258                0 (const int)
+0:258            Constant:
+0:258              0 (const int)
+0:258          Constant:
+0:258            0 (const int)
+0:258        subgroupExclusiveMin ( global highp float)
+0:258          direct index ( temp highp float)
+0:258            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:258              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258                Constant:
+0:258                  0 (const int)
+0:258              Constant:
+0:258                0 (const int)
+0:258            Constant:
+0:258              0 (const int)
+0:259      move second child to first child ( temp highp 2-component vector of float)
+0:259        vector swizzle ( temp highp 2-component vector of float)
+0:259          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:259            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:259              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:259              Constant:
+0:259                0 (const int)
+0:259            Constant:
+0:259              0 (const int)
+0:259          Sequence
+0:259            Constant:
+0:259              0 (const int)
+0:259            Constant:
+0:259              1 (const int)
+0:259        subgroupExclusiveMin ( global highp 2-component vector of float)
+0:259          vector swizzle ( temp highp 2-component vector of float)
+0:259            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:259              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:259                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:259                Constant:
+0:259                  1 (const int)
+0:259              Constant:
+0:259                0 (const int)
+0:259            Sequence
+0:259              Constant:
+0:259                0 (const int)
+0:259              Constant:
+0:259                1 (const int)
+0:260      move second child to first child ( temp highp 3-component vector of float)
+0:260        vector swizzle ( temp highp 3-component vector of float)
+0:260          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:260            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260              Constant:
+0:260                0 (const int)
+0:260            Constant:
+0:260              0 (const int)
+0:260          Sequence
+0:260            Constant:
+0:260              0 (const int)
+0:260            Constant:
+0:260              1 (const int)
+0:260            Constant:
+0:260              2 (const int)
+0:260        subgroupExclusiveMin ( global highp 3-component vector of float)
+0:260          vector swizzle ( temp highp 3-component vector of float)
+0:260            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:260              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260                Constant:
+0:260                  2 (const int)
+0:260              Constant:
+0:260                0 (const int)
+0:260            Sequence
+0:260              Constant:
+0:260                0 (const int)
+0:260              Constant:
+0:260                1 (const int)
+0:260              Constant:
+0:260                2 (const int)
+0:261      move second child to first child ( temp highp 4-component vector of float)
+0:261        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:261          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261            Constant:
+0:261              0 (const int)
+0:261          Constant:
+0:261            0 (const int)
+0:261        subgroupExclusiveMin ( global highp 4-component vector of float)
+0:261          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:261            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261              Constant:
+0:261                3 (const int)
+0:261            Constant:
+0:261              0 (const int)
+0:263      move second child to first child ( temp highp int)
+0:263        direct index ( temp highp int)
+0:263          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:263            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263              Constant:
+0:263                1 (const int)
+0:263            Constant:
+0:263              1 (const int)
+0:263          Constant:
+0:263            0 (const int)
+0:263        subgroupExclusiveMin ( global highp int)
+0:263          direct index ( temp highp int)
+0:263            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:263              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263                Constant:
+0:263                  0 (const int)
+0:263              Constant:
+0:263                1 (const int)
+0:263            Constant:
+0:263              0 (const int)
+0:264      move second child to first child ( temp highp 2-component vector of int)
+0:264        vector swizzle ( temp highp 2-component vector of int)
+0:264          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:264            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:264              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:264              Constant:
+0:264                1 (const int)
+0:264            Constant:
+0:264              1 (const int)
+0:264          Sequence
+0:264            Constant:
+0:264              0 (const int)
+0:264            Constant:
+0:264              1 (const int)
+0:264        subgroupExclusiveMin ( global highp 2-component vector of int)
+0:264          vector swizzle ( temp highp 2-component vector of int)
+0:264            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:264              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:264                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:264                Constant:
+0:264                  1 (const int)
+0:264              Constant:
+0:264                1 (const int)
+0:264            Sequence
+0:264              Constant:
+0:264                0 (const int)
+0:264              Constant:
+0:264                1 (const int)
+0:265      move second child to first child ( temp highp 3-component vector of int)
+0:265        vector swizzle ( temp highp 3-component vector of int)
+0:265          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:265            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265              Constant:
+0:265                1 (const int)
+0:265            Constant:
+0:265              1 (const int)
+0:265          Sequence
+0:265            Constant:
+0:265              0 (const int)
+0:265            Constant:
+0:265              1 (const int)
+0:265            Constant:
+0:265              2 (const int)
+0:265        subgroupExclusiveMin ( global highp 3-component vector of int)
+0:265          vector swizzle ( temp highp 3-component vector of int)
+0:265            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:265              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265                Constant:
+0:265                  2 (const int)
+0:265              Constant:
+0:265                1 (const int)
+0:265            Sequence
+0:265              Constant:
+0:265                0 (const int)
+0:265              Constant:
+0:265                1 (const int)
+0:265              Constant:
+0:265                2 (const int)
+0:266      move second child to first child ( temp highp 4-component vector of int)
+0:266        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:266          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266            Constant:
+0:266              1 (const int)
+0:266          Constant:
+0:266            1 (const int)
+0:266        subgroupExclusiveMin ( global highp 4-component vector of int)
+0:266          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:266            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266              Constant:
+0:266                3 (const int)
+0:266            Constant:
+0:266              1 (const int)
+0:268      move second child to first child ( temp highp uint)
+0:268        direct index ( temp highp uint)
+0:268          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:268            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268              Constant:
+0:268                2 (const int)
+0:268            Constant:
+0:268              2 (const int)
+0:268          Constant:
+0:268            0 (const int)
+0:268        subgroupExclusiveMin ( global highp uint)
+0:268          direct index ( temp highp uint)
+0:268            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:268              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268                Constant:
+0:268                  0 (const int)
+0:268              Constant:
+0:268                2 (const int)
+0:268            Constant:
+0:268              0 (const int)
+0:269      move second child to first child ( temp highp 2-component vector of uint)
+0:269        vector swizzle ( temp highp 2-component vector of uint)
+0:269          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:269            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:269              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:269              Constant:
+0:269                2 (const int)
+0:269            Constant:
+0:269              2 (const int)
+0:269          Sequence
+0:269            Constant:
+0:269              0 (const int)
+0:269            Constant:
+0:269              1 (const int)
+0:269        subgroupExclusiveMin ( global highp 2-component vector of uint)
+0:269          vector swizzle ( temp highp 2-component vector of uint)
+0:269            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:269              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:269                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:269                Constant:
+0:269                  1 (const int)
+0:269              Constant:
+0:269                2 (const int)
+0:269            Sequence
+0:269              Constant:
+0:269                0 (const int)
+0:269              Constant:
+0:269                1 (const int)
+0:270      move second child to first child ( temp highp 3-component vector of uint)
+0:270        vector swizzle ( temp highp 3-component vector of uint)
+0:270          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:270            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270              Constant:
+0:270                2 (const int)
+0:270            Constant:
+0:270              2 (const int)
+0:270          Sequence
+0:270            Constant:
+0:270              0 (const int)
+0:270            Constant:
+0:270              1 (const int)
+0:270            Constant:
+0:270              2 (const int)
+0:270        subgroupExclusiveMin ( global highp 3-component vector of uint)
+0:270          vector swizzle ( temp highp 3-component vector of uint)
+0:270            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:270              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270                Constant:
+0:270                  2 (const int)
+0:270              Constant:
+0:270                2 (const int)
+0:270            Sequence
+0:270              Constant:
+0:270                0 (const int)
+0:270              Constant:
+0:270                1 (const int)
+0:270              Constant:
+0:270                2 (const int)
+0:271      move second child to first child ( temp highp 4-component vector of uint)
+0:271        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:271          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271            Constant:
+0:271              2 (const int)
+0:271          Constant:
+0:271            2 (const int)
+0:271        subgroupExclusiveMin ( global highp 4-component vector of uint)
+0:271          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:271            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271              Constant:
+0:271                3 (const int)
+0:271            Constant:
+0:271              2 (const int)
+0:273      move second child to first child ( temp highp float)
+0:273        direct index ( temp highp float)
+0:273          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:273            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273              Constant:
+0:273                3 (const int)
+0:273            Constant:
+0:273              0 (const int)
+0:273          Constant:
+0:273            0 (const int)
+0:273        subgroupExclusiveMax ( global highp float)
+0:273          direct index ( temp highp float)
+0:273            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:273              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273                Constant:
+0:273                  0 (const int)
+0:273              Constant:
+0:273                0 (const int)
+0:273            Constant:
+0:273              0 (const int)
+0:274      move second child to first child ( temp highp 2-component vector of float)
+0:274        vector swizzle ( temp highp 2-component vector of float)
+0:274          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:274            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:274              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:274              Constant:
+0:274                3 (const int)
+0:274            Constant:
+0:274              0 (const int)
+0:274          Sequence
+0:274            Constant:
+0:274              0 (const int)
+0:274            Constant:
+0:274              1 (const int)
+0:274        subgroupExclusiveMax ( global highp 2-component vector of float)
+0:274          vector swizzle ( temp highp 2-component vector of float)
+0:274            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:274              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:274                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:274                Constant:
+0:274                  1 (const int)
+0:274              Constant:
+0:274                0 (const int)
+0:274            Sequence
+0:274              Constant:
+0:274                0 (const int)
+0:274              Constant:
+0:274                1 (const int)
+0:275      move second child to first child ( temp highp 3-component vector of float)
+0:275        vector swizzle ( temp highp 3-component vector of float)
+0:275          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:275            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275              Constant:
+0:275                3 (const int)
+0:275            Constant:
+0:275              0 (const int)
+0:275          Sequence
+0:275            Constant:
+0:275              0 (const int)
+0:275            Constant:
+0:275              1 (const int)
+0:275            Constant:
+0:275              2 (const int)
+0:275        subgroupExclusiveMax ( global highp 3-component vector of float)
+0:275          vector swizzle ( temp highp 3-component vector of float)
+0:275            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:275              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275                Constant:
+0:275                  2 (const int)
+0:275              Constant:
+0:275                0 (const int)
+0:275            Sequence
+0:275              Constant:
+0:275                0 (const int)
+0:275              Constant:
+0:275                1 (const int)
+0:275              Constant:
+0:275                2 (const int)
+0:276      move second child to first child ( temp highp 4-component vector of float)
+0:276        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:276          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276            Constant:
+0:276              3 (const int)
+0:276          Constant:
+0:276            0 (const int)
+0:276        subgroupExclusiveMax ( global highp 4-component vector of float)
+0:276          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:276            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276              Constant:
+0:276                3 (const int)
+0:276            Constant:
+0:276              0 (const int)
+0:278      move second child to first child ( temp highp int)
+0:278        direct index ( temp highp int)
+0:278          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:278            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278              Constant:
+0:278                0 (const int)
+0:278            Constant:
+0:278              1 (const int)
+0:278          Constant:
+0:278            0 (const int)
+0:278        subgroupExclusiveMax ( global highp int)
+0:278          direct index ( temp highp int)
+0:278            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:278              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278                Constant:
+0:278                  0 (const int)
+0:278              Constant:
+0:278                1 (const int)
+0:278            Constant:
+0:278              0 (const int)
+0:279      move second child to first child ( temp highp 2-component vector of int)
+0:279        vector swizzle ( temp highp 2-component vector of int)
+0:279          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:279            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:279              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:279              Constant:
+0:279                0 (const int)
+0:279            Constant:
+0:279              1 (const int)
+0:279          Sequence
+0:279            Constant:
+0:279              0 (const int)
+0:279            Constant:
+0:279              1 (const int)
+0:279        subgroupExclusiveMax ( global highp 2-component vector of int)
+0:279          vector swizzle ( temp highp 2-component vector of int)
+0:279            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:279              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:279                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:279                Constant:
+0:279                  1 (const int)
+0:279              Constant:
+0:279                1 (const int)
+0:279            Sequence
+0:279              Constant:
+0:279                0 (const int)
+0:279              Constant:
+0:279                1 (const int)
+0:280      move second child to first child ( temp highp 3-component vector of int)
+0:280        vector swizzle ( temp highp 3-component vector of int)
+0:280          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:280            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280              Constant:
+0:280                0 (const int)
+0:280            Constant:
+0:280              1 (const int)
+0:280          Sequence
+0:280            Constant:
+0:280              0 (const int)
+0:280            Constant:
+0:280              1 (const int)
+0:280            Constant:
+0:280              2 (const int)
+0:280        subgroupExclusiveMax ( global highp 3-component vector of int)
+0:280          vector swizzle ( temp highp 3-component vector of int)
+0:280            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:280              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280                Constant:
+0:280                  2 (const int)
+0:280              Constant:
+0:280                1 (const int)
+0:280            Sequence
+0:280              Constant:
+0:280                0 (const int)
+0:280              Constant:
+0:280                1 (const int)
+0:280              Constant:
+0:280                2 (const int)
+0:281      move second child to first child ( temp highp 4-component vector of int)
+0:281        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:281          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281            Constant:
+0:281              0 (const int)
+0:281          Constant:
+0:281            1 (const int)
+0:281        subgroupExclusiveMax ( global highp 4-component vector of int)
+0:281          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:281            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281              Constant:
+0:281                3 (const int)
+0:281            Constant:
+0:281              1 (const int)
+0:283      move second child to first child ( temp highp uint)
+0:283        direct index ( temp highp uint)
+0:283          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:283            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283              Constant:
+0:283                1 (const int)
+0:283            Constant:
+0:283              2 (const int)
+0:283          Constant:
+0:283            0 (const int)
+0:283        subgroupExclusiveMax ( global highp uint)
+0:283          direct index ( temp highp uint)
+0:283            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:283              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283                Constant:
+0:283                  0 (const int)
+0:283              Constant:
+0:283                2 (const int)
+0:283            Constant:
+0:283              0 (const int)
+0:284      move second child to first child ( temp highp 2-component vector of uint)
+0:284        vector swizzle ( temp highp 2-component vector of uint)
+0:284          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:284            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:284              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:284              Constant:
+0:284                1 (const int)
+0:284            Constant:
+0:284              2 (const int)
+0:284          Sequence
+0:284            Constant:
+0:284              0 (const int)
+0:284            Constant:
+0:284              1 (const int)
+0:284        subgroupExclusiveMax ( global highp 2-component vector of uint)
+0:284          vector swizzle ( temp highp 2-component vector of uint)
+0:284            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:284              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:284                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:284                Constant:
+0:284                  1 (const int)
+0:284              Constant:
+0:284                2 (const int)
+0:284            Sequence
+0:284              Constant:
+0:284                0 (const int)
+0:284              Constant:
+0:284                1 (const int)
+0:285      move second child to first child ( temp highp 3-component vector of uint)
+0:285        vector swizzle ( temp highp 3-component vector of uint)
+0:285          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:285            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285              Constant:
+0:285                1 (const int)
+0:285            Constant:
+0:285              2 (const int)
+0:285          Sequence
+0:285            Constant:
+0:285              0 (const int)
+0:285            Constant:
+0:285              1 (const int)
+0:285            Constant:
+0:285              2 (const int)
+0:285        subgroupExclusiveMax ( global highp 3-component vector of uint)
+0:285          vector swizzle ( temp highp 3-component vector of uint)
+0:285            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:285              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285                Constant:
+0:285                  2 (const int)
+0:285              Constant:
+0:285                2 (const int)
+0:285            Sequence
+0:285              Constant:
+0:285                0 (const int)
+0:285              Constant:
+0:285                1 (const int)
+0:285              Constant:
+0:285                2 (const int)
+0:286      move second child to first child ( temp highp 4-component vector of uint)
+0:286        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:286          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286            Constant:
+0:286              1 (const int)
+0:286          Constant:
+0:286            2 (const int)
+0:286        subgroupExclusiveMax ( global highp 4-component vector of uint)
+0:286          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:286            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286              Constant:
+0:286                3 (const int)
+0:286            Constant:
+0:286              2 (const int)
+0:288      move second child to first child ( temp highp int)
+0:288        direct index ( temp highp int)
+0:288          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:288            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288              Constant:
+0:288                2 (const int)
+0:288            Constant:
+0:288              1 (const int)
+0:288          Constant:
+0:288            0 (const int)
+0:288        subgroupExclusiveAnd ( global highp int)
+0:288          direct index ( temp highp int)
+0:288            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:288              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288                Constant:
+0:288                  0 (const int)
+0:288              Constant:
+0:288                1 (const int)
+0:288            Constant:
+0:288              0 (const int)
+0:289      move second child to first child ( temp highp 2-component vector of int)
+0:289        vector swizzle ( temp highp 2-component vector of int)
+0:289          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:289            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:289              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:289              Constant:
+0:289                2 (const int)
+0:289            Constant:
+0:289              1 (const int)
+0:289          Sequence
+0:289            Constant:
+0:289              0 (const int)
+0:289            Constant:
+0:289              1 (const int)
+0:289        subgroupExclusiveAnd ( global highp 2-component vector of int)
+0:289          vector swizzle ( temp highp 2-component vector of int)
+0:289            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:289              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:289                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:289                Constant:
+0:289                  1 (const int)
+0:289              Constant:
+0:289                1 (const int)
+0:289            Sequence
+0:289              Constant:
+0:289                0 (const int)
+0:289              Constant:
+0:289                1 (const int)
+0:290      move second child to first child ( temp highp 3-component vector of int)
+0:290        vector swizzle ( temp highp 3-component vector of int)
+0:290          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:290            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290              Constant:
+0:290                2 (const int)
+0:290            Constant:
+0:290              1 (const int)
+0:290          Sequence
+0:290            Constant:
+0:290              0 (const int)
+0:290            Constant:
+0:290              1 (const int)
+0:290            Constant:
+0:290              2 (const int)
+0:290        subgroupExclusiveAnd ( global highp 3-component vector of int)
+0:290          vector swizzle ( temp highp 3-component vector of int)
+0:290            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:290              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290                Constant:
+0:290                  2 (const int)
+0:290              Constant:
+0:290                1 (const int)
+0:290            Sequence
+0:290              Constant:
+0:290                0 (const int)
+0:290              Constant:
+0:290                1 (const int)
+0:290              Constant:
+0:290                2 (const int)
+0:291      move second child to first child ( temp highp 4-component vector of int)
+0:291        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:291          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291            Constant:
+0:291              2 (const int)
+0:291          Constant:
+0:291            1 (const int)
+0:291        subgroupExclusiveAnd ( global highp 4-component vector of int)
+0:291          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:291            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291              Constant:
+0:291                3 (const int)
+0:291            Constant:
+0:291              1 (const int)
+0:293      move second child to first child ( temp highp uint)
+0:293        direct index ( temp highp uint)
+0:293          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:293            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293              Constant:
+0:293                3 (const int)
+0:293            Constant:
+0:293              2 (const int)
+0:293          Constant:
+0:293            0 (const int)
+0:293        subgroupExclusiveAnd ( global highp uint)
+0:293          direct index ( temp highp uint)
+0:293            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:293              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293                Constant:
+0:293                  0 (const int)
+0:293              Constant:
+0:293                2 (const int)
+0:293            Constant:
+0:293              0 (const int)
+0:294      move second child to first child ( temp highp 2-component vector of uint)
+0:294        vector swizzle ( temp highp 2-component vector of uint)
+0:294          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:294            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:294              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:294              Constant:
+0:294                3 (const int)
+0:294            Constant:
+0:294              2 (const int)
+0:294          Sequence
+0:294            Constant:
+0:294              0 (const int)
+0:294            Constant:
+0:294              1 (const int)
+0:294        subgroupExclusiveAnd ( global highp 2-component vector of uint)
+0:294          vector swizzle ( temp highp 2-component vector of uint)
+0:294            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:294              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:294                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:294                Constant:
+0:294                  1 (const int)
+0:294              Constant:
+0:294                2 (const int)
+0:294            Sequence
+0:294              Constant:
+0:294                0 (const int)
+0:294              Constant:
+0:294                1 (const int)
+0:295      move second child to first child ( temp highp 3-component vector of uint)
+0:295        vector swizzle ( temp highp 3-component vector of uint)
+0:295          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:295            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295              Constant:
+0:295                3 (const int)
+0:295            Constant:
+0:295              2 (const int)
+0:295          Sequence
+0:295            Constant:
+0:295              0 (const int)
+0:295            Constant:
+0:295              1 (const int)
+0:295            Constant:
+0:295              2 (const int)
+0:295        subgroupExclusiveAnd ( global highp 3-component vector of uint)
+0:295          vector swizzle ( temp highp 3-component vector of uint)
+0:295            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:295              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295                Constant:
+0:295                  2 (const int)
+0:295              Constant:
+0:295                2 (const int)
+0:295            Sequence
+0:295              Constant:
+0:295                0 (const int)
+0:295              Constant:
+0:295                1 (const int)
+0:295              Constant:
+0:295                2 (const int)
+0:296      move second child to first child ( temp highp 4-component vector of uint)
+0:296        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:296          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296            Constant:
+0:296              3 (const int)
+0:296          Constant:
+0:296            2 (const int)
+0:296        subgroupExclusiveAnd ( global highp 4-component vector of uint)
+0:296          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:296            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296              Constant:
+0:296                3 (const int)
+0:296            Constant:
+0:296              2 (const int)
+0:298      move second child to first child ( temp highp int)
+0:298        direct index ( temp highp int)
+0:298          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:298            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298              Constant:
+0:298                0 (const int)
+0:298            Constant:
+0:298              1 (const int)
+0:298          Constant:
+0:298            0 (const int)
+0:298        Convert bool to int ( temp highp int)
+0:298          subgroupExclusiveAnd ( global bool)
+0:298            Compare Less Than ( temp bool)
+0:298              direct index ( temp highp int)
+0:298                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:298                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298                    Constant:
+0:298                      0 (const int)
+0:298                  Constant:
+0:298                    1 (const int)
+0:298                Constant:
+0:298                  0 (const int)
+0:298              Constant:
+0:298                0 (const int)
+0:299      move second child to first child ( temp highp 2-component vector of int)
+0:299        vector swizzle ( temp highp 2-component vector of int)
+0:299          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:299            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:299              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:299              Constant:
+0:299                0 (const int)
+0:299            Constant:
+0:299              1 (const int)
+0:299          Sequence
+0:299            Constant:
+0:299              0 (const int)
+0:299            Constant:
+0:299              1 (const int)
+0:299        Convert bool to int ( temp highp 2-component vector of int)
+0:299          subgroupExclusiveAnd ( global 2-component vector of bool)
+0:299            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:299              vector swizzle ( temp highp 2-component vector of int)
+0:299                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:299                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:299                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:299                    Constant:
+0:299                      1 (const int)
+0:299                  Constant:
+0:299                    1 (const int)
+0:299                Sequence
+0:299                  Constant:
+0:299                    0 (const int)
+0:299                  Constant:
+0:299                    1 (const int)
+0:299              Constant:
+0:299                0 (const int)
+0:299                0 (const int)
+0:300      move second child to first child ( temp highp 3-component vector of int)
+0:300        vector swizzle ( temp highp 3-component vector of int)
+0:300          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:300            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300              Constant:
+0:300                0 (const int)
+0:300            Constant:
+0:300              1 (const int)
+0:300          Sequence
+0:300            Constant:
+0:300              0 (const int)
+0:300            Constant:
+0:300              1 (const int)
+0:300            Constant:
+0:300              2 (const int)
+0:300        Convert bool to int ( temp highp 3-component vector of int)
+0:300          subgroupExclusiveAnd ( global 3-component vector of bool)
+0:300            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:300              vector swizzle ( temp highp 3-component vector of int)
+0:300                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:300                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300                    Constant:
+0:300                      1 (const int)
+0:300                  Constant:
+0:300                    1 (const int)
+0:300                Sequence
+0:300                  Constant:
+0:300                    0 (const int)
+0:300                  Constant:
+0:300                    1 (const int)
+0:300                  Constant:
+0:300                    2 (const int)
+0:300              Constant:
+0:300                0 (const int)
+0:300                0 (const int)
+0:300                0 (const int)
+0:301      move second child to first child ( temp highp 4-component vector of int)
+0:301        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:301          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301            Constant:
+0:301              0 (const int)
+0:301          Constant:
+0:301            1 (const int)
+0:301        Convert bool to int ( temp highp 4-component vector of int)
+0:301          subgroupExclusiveAnd ( global 4-component vector of bool)
+0:301            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:301              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:301                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301                  Constant:
+0:301                    1 (const int)
+0:301                Constant:
+0:301                  1 (const int)
+0:301              Constant:
+0:301                0 (const int)
+0:301                0 (const int)
+0:301                0 (const int)
+0:301                0 (const int)
+0:303      move second child to first child ( temp highp int)
+0:303        direct index ( temp highp int)
+0:303          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:303            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303              Constant:
+0:303                1 (const int)
+0:303            Constant:
+0:303              1 (const int)
+0:303          Constant:
+0:303            0 (const int)
+0:303        subgroupExclusiveOr ( global highp int)
+0:303          direct index ( temp highp int)
+0:303            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:303              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303                Constant:
+0:303                  0 (const int)
+0:303              Constant:
+0:303                1 (const int)
+0:303            Constant:
+0:303              0 (const int)
+0:304      move second child to first child ( temp highp 2-component vector of int)
+0:304        vector swizzle ( temp highp 2-component vector of int)
+0:304          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:304            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:304              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:304              Constant:
+0:304                1 (const int)
+0:304            Constant:
+0:304              1 (const int)
+0:304          Sequence
+0:304            Constant:
+0:304              0 (const int)
+0:304            Constant:
+0:304              1 (const int)
+0:304        subgroupExclusiveOr ( global highp 2-component vector of int)
+0:304          vector swizzle ( temp highp 2-component vector of int)
+0:304            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:304              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:304                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:304                Constant:
+0:304                  1 (const int)
+0:304              Constant:
+0:304                1 (const int)
+0:304            Sequence
+0:304              Constant:
+0:304                0 (const int)
+0:304              Constant:
+0:304                1 (const int)
+0:305      move second child to first child ( temp highp 3-component vector of int)
+0:305        vector swizzle ( temp highp 3-component vector of int)
+0:305          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:305            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305              Constant:
+0:305                1 (const int)
+0:305            Constant:
+0:305              1 (const int)
+0:305          Sequence
+0:305            Constant:
+0:305              0 (const int)
+0:305            Constant:
+0:305              1 (const int)
+0:305            Constant:
+0:305              2 (const int)
+0:305        subgroupExclusiveOr ( global highp 3-component vector of int)
+0:305          vector swizzle ( temp highp 3-component vector of int)
+0:305            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:305              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305                Constant:
+0:305                  2 (const int)
+0:305              Constant:
+0:305                1 (const int)
+0:305            Sequence
+0:305              Constant:
+0:305                0 (const int)
+0:305              Constant:
+0:305                1 (const int)
+0:305              Constant:
+0:305                2 (const int)
+0:306      move second child to first child ( temp highp 4-component vector of int)
+0:306        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:306          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306            Constant:
+0:306              1 (const int)
+0:306          Constant:
+0:306            1 (const int)
+0:306        subgroupExclusiveOr ( global highp 4-component vector of int)
+0:306          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:306            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306              Constant:
+0:306                3 (const int)
+0:306            Constant:
+0:306              1 (const int)
+0:308      move second child to first child ( temp highp uint)
+0:308        direct index ( temp highp uint)
+0:308          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:308            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308              Constant:
+0:308                2 (const int)
+0:308            Constant:
+0:308              2 (const int)
+0:308          Constant:
+0:308            0 (const int)
+0:308        subgroupExclusiveOr ( global highp uint)
+0:308          direct index ( temp highp uint)
+0:308            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:308              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308                Constant:
+0:308                  0 (const int)
+0:308              Constant:
+0:308                2 (const int)
+0:308            Constant:
+0:308              0 (const int)
+0:309      move second child to first child ( temp highp 2-component vector of uint)
+0:309        vector swizzle ( temp highp 2-component vector of uint)
+0:309          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:309            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:309              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:309              Constant:
+0:309                2 (const int)
+0:309            Constant:
+0:309              2 (const int)
+0:309          Sequence
+0:309            Constant:
+0:309              0 (const int)
+0:309            Constant:
+0:309              1 (const int)
+0:309        subgroupExclusiveOr ( global highp 2-component vector of uint)
+0:309          vector swizzle ( temp highp 2-component vector of uint)
+0:309            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:309              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:309                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:309                Constant:
+0:309                  1 (const int)
+0:309              Constant:
+0:309                2 (const int)
+0:309            Sequence
+0:309              Constant:
+0:309                0 (const int)
+0:309              Constant:
+0:309                1 (const int)
+0:310      move second child to first child ( temp highp 3-component vector of uint)
+0:310        vector swizzle ( temp highp 3-component vector of uint)
+0:310          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:310            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310              Constant:
+0:310                2 (const int)
+0:310            Constant:
+0:310              2 (const int)
+0:310          Sequence
+0:310            Constant:
+0:310              0 (const int)
+0:310            Constant:
+0:310              1 (const int)
+0:310            Constant:
+0:310              2 (const int)
+0:310        subgroupExclusiveOr ( global highp 3-component vector of uint)
+0:310          vector swizzle ( temp highp 3-component vector of uint)
+0:310            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:310              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310                Constant:
+0:310                  2 (const int)
+0:310              Constant:
+0:310                2 (const int)
+0:310            Sequence
+0:310              Constant:
+0:310                0 (const int)
+0:310              Constant:
+0:310                1 (const int)
+0:310              Constant:
+0:310                2 (const int)
+0:311      move second child to first child ( temp highp 4-component vector of uint)
+0:311        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:311          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311            Constant:
+0:311              2 (const int)
+0:311          Constant:
+0:311            2 (const int)
+0:311        subgroupExclusiveOr ( global highp 4-component vector of uint)
+0:311          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:311            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311              Constant:
+0:311                3 (const int)
+0:311            Constant:
+0:311              2 (const int)
+0:313      move second child to first child ( temp highp int)
+0:313        direct index ( temp highp int)
+0:313          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:313            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313              Constant:
+0:313                3 (const int)
+0:313            Constant:
+0:313              1 (const int)
+0:313          Constant:
+0:313            0 (const int)
+0:313        Convert bool to int ( temp highp int)
+0:313          subgroupExclusiveOr ( global bool)
+0:313            Compare Less Than ( temp bool)
+0:313              direct index ( temp highp int)
+0:313                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:313                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313                    Constant:
+0:313                      0 (const int)
+0:313                  Constant:
+0:313                    1 (const int)
+0:313                Constant:
+0:313                  0 (const int)
+0:313              Constant:
+0:313                0 (const int)
+0:314      move second child to first child ( temp highp 2-component vector of int)
+0:314        vector swizzle ( temp highp 2-component vector of int)
+0:314          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:314            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:314              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:314              Constant:
+0:314                3 (const int)
+0:314            Constant:
+0:314              1 (const int)
+0:314          Sequence
+0:314            Constant:
+0:314              0 (const int)
+0:314            Constant:
+0:314              1 (const int)
+0:314        Convert bool to int ( temp highp 2-component vector of int)
+0:314          subgroupExclusiveOr ( global 2-component vector of bool)
+0:314            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:314              vector swizzle ( temp highp 2-component vector of int)
+0:314                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:314                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:314                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:314                    Constant:
+0:314                      1 (const int)
+0:314                  Constant:
+0:314                    1 (const int)
+0:314                Sequence
+0:314                  Constant:
+0:314                    0 (const int)
+0:314                  Constant:
+0:314                    1 (const int)
+0:314              Constant:
+0:314                0 (const int)
+0:314                0 (const int)
+0:315      move second child to first child ( temp highp 3-component vector of int)
+0:315        vector swizzle ( temp highp 3-component vector of int)
+0:315          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:315            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315              Constant:
+0:315                3 (const int)
+0:315            Constant:
+0:315              1 (const int)
+0:315          Sequence
+0:315            Constant:
+0:315              0 (const int)
+0:315            Constant:
+0:315              1 (const int)
+0:315            Constant:
+0:315              2 (const int)
+0:315        Convert bool to int ( temp highp 3-component vector of int)
+0:315          subgroupExclusiveOr ( global 3-component vector of bool)
+0:315            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:315              vector swizzle ( temp highp 3-component vector of int)
+0:315                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:315                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315                    Constant:
+0:315                      1 (const int)
+0:315                  Constant:
+0:315                    1 (const int)
+0:315                Sequence
+0:315                  Constant:
+0:315                    0 (const int)
+0:315                  Constant:
+0:315                    1 (const int)
+0:315                  Constant:
+0:315                    2 (const int)
+0:315              Constant:
+0:315                0 (const int)
+0:315                0 (const int)
+0:315                0 (const int)
+0:316      move second child to first child ( temp highp 4-component vector of int)
+0:316        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:316          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316            Constant:
+0:316              3 (const int)
+0:316          Constant:
+0:316            1 (const int)
+0:316        Convert bool to int ( temp highp 4-component vector of int)
+0:316          subgroupExclusiveOr ( global 4-component vector of bool)
+0:316            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:316              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:316                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316                  Constant:
+0:316                    1 (const int)
+0:316                Constant:
+0:316                  1 (const int)
+0:316              Constant:
+0:316                0 (const int)
+0:316                0 (const int)
+0:316                0 (const int)
+0:316                0 (const int)
+0:318      move second child to first child ( temp highp int)
+0:318        direct index ( temp highp int)
+0:318          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:318            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318              Constant:
+0:318                0 (const int)
+0:318            Constant:
+0:318              1 (const int)
+0:318          Constant:
+0:318            0 (const int)
+0:318        subgroupExclusiveXor ( global highp int)
+0:318          direct index ( temp highp int)
+0:318            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:318              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318                Constant:
+0:318                  0 (const int)
+0:318              Constant:
+0:318                1 (const int)
+0:318            Constant:
+0:318              0 (const int)
+0:319      move second child to first child ( temp highp 2-component vector of int)
+0:319        vector swizzle ( temp highp 2-component vector of int)
+0:319          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:319            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:319              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:319              Constant:
+0:319                0 (const int)
+0:319            Constant:
+0:319              1 (const int)
+0:319          Sequence
+0:319            Constant:
+0:319              0 (const int)
+0:319            Constant:
+0:319              1 (const int)
+0:319        subgroupExclusiveXor ( global highp 2-component vector of int)
+0:319          vector swizzle ( temp highp 2-component vector of int)
+0:319            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:319              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:319                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:319                Constant:
+0:319                  1 (const int)
+0:319              Constant:
+0:319                1 (const int)
+0:319            Sequence
+0:319              Constant:
+0:319                0 (const int)
+0:319              Constant:
+0:319                1 (const int)
+0:320      move second child to first child ( temp highp 3-component vector of int)
+0:320        vector swizzle ( temp highp 3-component vector of int)
+0:320          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:320            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320              Constant:
+0:320                0 (const int)
+0:320            Constant:
+0:320              1 (const int)
+0:320          Sequence
+0:320            Constant:
+0:320              0 (const int)
+0:320            Constant:
+0:320              1 (const int)
+0:320            Constant:
+0:320              2 (const int)
+0:320        subgroupExclusiveXor ( global highp 3-component vector of int)
+0:320          vector swizzle ( temp highp 3-component vector of int)
+0:320            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:320              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320                Constant:
+0:320                  2 (const int)
+0:320              Constant:
+0:320                1 (const int)
+0:320            Sequence
+0:320              Constant:
+0:320                0 (const int)
+0:320              Constant:
+0:320                1 (const int)
+0:320              Constant:
+0:320                2 (const int)
+0:321      move second child to first child ( temp highp 4-component vector of int)
+0:321        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:321          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321            Constant:
+0:321              0 (const int)
+0:321          Constant:
+0:321            1 (const int)
+0:321        subgroupExclusiveXor ( global highp 4-component vector of int)
+0:321          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:321            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321              Constant:
+0:321                3 (const int)
+0:321            Constant:
+0:321              1 (const int)
+0:323      move second child to first child ( temp highp uint)
+0:323        direct index ( temp highp uint)
+0:323          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:323            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323              Constant:
+0:323                1 (const int)
+0:323            Constant:
+0:323              2 (const int)
+0:323          Constant:
+0:323            0 (const int)
+0:323        subgroupExclusiveXor ( global highp uint)
+0:323          direct index ( temp highp uint)
+0:323            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:323              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323                Constant:
+0:323                  0 (const int)
+0:323              Constant:
+0:323                2 (const int)
+0:323            Constant:
+0:323              0 (const int)
+0:324      move second child to first child ( temp highp 2-component vector of uint)
+0:324        vector swizzle ( temp highp 2-component vector of uint)
+0:324          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:324            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:324              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:324              Constant:
+0:324                1 (const int)
+0:324            Constant:
+0:324              2 (const int)
+0:324          Sequence
+0:324            Constant:
+0:324              0 (const int)
+0:324            Constant:
+0:324              1 (const int)
+0:324        subgroupExclusiveXor ( global highp 2-component vector of uint)
+0:324          vector swizzle ( temp highp 2-component vector of uint)
+0:324            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:324              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:324                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:324                Constant:
+0:324                  1 (const int)
+0:324              Constant:
+0:324                2 (const int)
+0:324            Sequence
+0:324              Constant:
+0:324                0 (const int)
+0:324              Constant:
+0:324                1 (const int)
+0:325      move second child to first child ( temp highp 3-component vector of uint)
+0:325        vector swizzle ( temp highp 3-component vector of uint)
+0:325          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:325            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325              Constant:
+0:325                1 (const int)
+0:325            Constant:
+0:325              2 (const int)
+0:325          Sequence
+0:325            Constant:
+0:325              0 (const int)
+0:325            Constant:
+0:325              1 (const int)
+0:325            Constant:
+0:325              2 (const int)
+0:325        subgroupExclusiveXor ( global highp 3-component vector of uint)
+0:325          vector swizzle ( temp highp 3-component vector of uint)
+0:325            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:325              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325                Constant:
+0:325                  2 (const int)
+0:325              Constant:
+0:325                2 (const int)
+0:325            Sequence
+0:325              Constant:
+0:325                0 (const int)
+0:325              Constant:
+0:325                1 (const int)
+0:325              Constant:
+0:325                2 (const int)
+0:326      move second child to first child ( temp highp 4-component vector of uint)
+0:326        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:326          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326            Constant:
+0:326              1 (const int)
+0:326          Constant:
+0:326            2 (const int)
+0:326        subgroupExclusiveXor ( global highp 4-component vector of uint)
+0:326          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:326            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326              Constant:
+0:326                3 (const int)
+0:326            Constant:
+0:326              2 (const int)
+0:328      move second child to first child ( temp highp int)
+0:328        direct index ( temp highp int)
+0:328          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:328            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328              Constant:
+0:328                2 (const int)
+0:328            Constant:
+0:328              1 (const int)
+0:328          Constant:
+0:328            0 (const int)
+0:328        Convert bool to int ( temp highp int)
+0:328          subgroupExclusiveXor ( global bool)
+0:328            Compare Less Than ( temp bool)
+0:328              direct index ( temp highp int)
+0:328                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:328                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328                    Constant:
+0:328                      0 (const int)
+0:328                  Constant:
+0:328                    1 (const int)
+0:328                Constant:
+0:328                  0 (const int)
+0:328              Constant:
+0:328                0 (const int)
+0:329      move second child to first child ( temp highp 2-component vector of int)
+0:329        vector swizzle ( temp highp 2-component vector of int)
+0:329          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:329            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:329              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:329              Constant:
+0:329                2 (const int)
+0:329            Constant:
+0:329              1 (const int)
+0:329          Sequence
+0:329            Constant:
+0:329              0 (const int)
+0:329            Constant:
+0:329              1 (const int)
+0:329        Convert bool to int ( temp highp 2-component vector of int)
+0:329          subgroupExclusiveXor ( global 2-component vector of bool)
+0:329            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:329              vector swizzle ( temp highp 2-component vector of int)
+0:329                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:329                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:329                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:329                    Constant:
+0:329                      1 (const int)
+0:329                  Constant:
+0:329                    1 (const int)
+0:329                Sequence
+0:329                  Constant:
+0:329                    0 (const int)
+0:329                  Constant:
+0:329                    1 (const int)
+0:329              Constant:
+0:329                0 (const int)
+0:329                0 (const int)
+0:330      move second child to first child ( temp highp 3-component vector of int)
+0:330        vector swizzle ( temp highp 3-component vector of int)
+0:330          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:330            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330              Constant:
+0:330                2 (const int)
+0:330            Constant:
+0:330              1 (const int)
+0:330          Sequence
+0:330            Constant:
+0:330              0 (const int)
+0:330            Constant:
+0:330              1 (const int)
+0:330            Constant:
+0:330              2 (const int)
+0:330        Convert bool to int ( temp highp 3-component vector of int)
+0:330          subgroupExclusiveXor ( global 3-component vector of bool)
+0:330            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:330              vector swizzle ( temp highp 3-component vector of int)
+0:330                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:330                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330                    Constant:
+0:330                      1 (const int)
+0:330                  Constant:
+0:330                    1 (const int)
+0:330                Sequence
+0:330                  Constant:
+0:330                    0 (const int)
+0:330                  Constant:
+0:330                    1 (const int)
+0:330                  Constant:
+0:330                    2 (const int)
+0:330              Constant:
+0:330                0 (const int)
+0:330                0 (const int)
+0:330                0 (const int)
+0:331      move second child to first child ( temp highp 4-component vector of int)
+0:331        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:331          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331            Constant:
+0:331              2 (const int)
+0:331          Constant:
+0:331            1 (const int)
+0:331        Convert bool to int ( temp highp 4-component vector of int)
+0:331          subgroupExclusiveXor ( global 4-component vector of bool)
+0:331            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:331              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:331                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331                  Constant:
+0:331                    1 (const int)
+0:331                Constant:
+0:331                  1 (const int)
+0:331              Constant:
+0:331                0 (const int)
+0:331                0 (const int)
+0:331                0 (const int)
+0:331                0 (const int)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 1, 1)
+0:? Sequence
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp highp uint)
+0:16          'invocation' ( temp highp uint)
+0:16          mod ( temp mediump uint)
+0:16            add ( temp mediump uint)
+0:16              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16            Constant:
+0:16              4 (const uint)
+0:18      move second child to first child ( temp highp float)
+0:18        direct index ( temp highp float)
+0:18          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          Constant:
+0:18            0 (const int)
+0:18        subgroupAdd ( global highp float)
+0:18          direct index ( temp highp float)
+0:18            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                Constant:
+0:18                  0 (const int)
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:19      move second child to first child ( temp highp 2-component vector of float)
+0:19        vector swizzle ( temp highp 2-component vector of float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Sequence
+0:19            Constant:
+0:19              0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19        subgroupAdd ( global highp 2-component vector of float)
+0:19          vector swizzle ( temp highp 2-component vector of float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                Constant:
+0:19                  1 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Sequence
+0:19              Constant:
+0:19                0 (const int)
+0:19              Constant:
+0:19                1 (const int)
+0:20      move second child to first child ( temp highp 3-component vector of float)
+0:20        vector swizzle ( temp highp 3-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              Constant:
+0:20                0 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20            Constant:
+0:20              2 (const int)
+0:20        subgroupAdd ( global highp 3-component vector of float)
+0:20          vector swizzle ( temp highp 3-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                Constant:
+0:20                  2 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20              Constant:
+0:20                2 (const int)
+0:21      move second child to first child ( temp highp 4-component vector of float)
+0:21        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            0 (const int)
+0:21        subgroupAdd ( global highp 4-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              Constant:
+0:21                3 (const int)
+0:21            Constant:
+0:21              0 (const int)
+0:23      move second child to first child ( temp highp int)
+0:23        direct index ( temp highp int)
+0:23          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              Constant:
+0:23                1 (const int)
+0:23            Constant:
+0:23              1 (const int)
+0:23          Constant:
+0:23            0 (const int)
+0:23        subgroupAdd ( global highp int)
+0:23          direct index ( temp highp int)
+0:23            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                1 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:24      move second child to first child ( temp highp 2-component vector of int)
+0:24        vector swizzle ( temp highp 2-component vector of int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              Constant:
+0:24                1 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Sequence
+0:24            Constant:
+0:24              0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24        subgroupAdd ( global highp 2-component vector of int)
+0:24          vector swizzle ( temp highp 2-component vector of int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                Constant:
+0:24                  1 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Sequence
+0:24              Constant:
+0:24                0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:25      move second child to first child ( temp highp 3-component vector of int)
+0:25        vector swizzle ( temp highp 3-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              Constant:
+0:25                1 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25        subgroupAdd ( global highp 3-component vector of int)
+0:25          vector swizzle ( temp highp 3-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                Constant:
+0:25                  2 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:26      move second child to first child ( temp highp 4-component vector of int)
+0:26        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            Constant:
+0:26              1 (const int)
+0:26          Constant:
+0:26            1 (const int)
+0:26        subgroupAdd ( global highp 4-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              Constant:
+0:26                3 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:28      move second child to first child ( temp highp uint)
+0:28        direct index ( temp highp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                2 (const int)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:28        subgroupAdd ( global highp uint)
+0:28          direct index ( temp highp uint)
+0:28            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                2 (const int)
+0:28            Constant:
+0:28              0 (const int)
+0:29      move second child to first child ( temp highp 2-component vector of uint)
+0:29        vector swizzle ( temp highp 2-component vector of uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              Constant:
+0:29                2 (const int)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Sequence
+0:29            Constant:
+0:29              0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29        subgroupAdd ( global highp 2-component vector of uint)
+0:29          vector swizzle ( temp highp 2-component vector of uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                Constant:
+0:29                  1 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Sequence
+0:29              Constant:
+0:29                0 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:30      move second child to first child ( temp highp 3-component vector of uint)
+0:30        vector swizzle ( temp highp 3-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              Constant:
+0:30                2 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30        subgroupAdd ( global highp 3-component vector of uint)
+0:30          vector swizzle ( temp highp 3-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                Constant:
+0:30                  2 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:31      move second child to first child ( temp highp 4-component vector of uint)
+0:31        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            Constant:
+0:31              2 (const int)
+0:31          Constant:
+0:31            2 (const int)
+0:31        subgroupAdd ( global highp 4-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              Constant:
+0:31                3 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:33      move second child to first child ( temp highp float)
+0:33        direct index ( temp highp float)
+0:33          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              Constant:
+0:33                3 (const int)
+0:33            Constant:
+0:33              0 (const int)
+0:33          Constant:
+0:33            0 (const int)
+0:33        subgroupMul ( global highp float)
+0:33          direct index ( temp highp float)
+0:33            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                0 (const int)
+0:33            Constant:
+0:33              0 (const int)
+0:34      move second child to first child ( temp highp 2-component vector of float)
+0:34        vector swizzle ( temp highp 2-component vector of float)
+0:34          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              Constant:
+0:34                3 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34        subgroupMul ( global highp 2-component vector of float)
+0:34          vector swizzle ( temp highp 2-component vector of float)
+0:34            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                Constant:
+0:34                  1 (const int)
+0:34              Constant:
+0:34                0 (const int)
+0:34            Sequence
+0:34              Constant:
+0:34                0 (const int)
+0:34              Constant:
+0:34                1 (const int)
+0:35      move second child to first child ( temp highp 3-component vector of float)
+0:35        vector swizzle ( temp highp 3-component vector of float)
+0:35          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              Constant:
+0:35                3 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35            Constant:
+0:35              2 (const int)
+0:35        subgroupMul ( global highp 3-component vector of float)
+0:35          vector swizzle ( temp highp 3-component vector of float)
+0:35            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                Constant:
+0:35                  2 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:35              Constant:
+0:35                2 (const int)
+0:36      move second child to first child ( temp highp 4-component vector of float)
+0:36        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            Constant:
+0:36              3 (const int)
+0:36          Constant:
+0:36            0 (const int)
+0:36        subgroupMul ( global highp 4-component vector of float)
+0:36          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36              Constant:
+0:36                3 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:38      move second child to first child ( temp highp int)
+0:38        direct index ( temp highp int)
+0:38          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              Constant:
+0:38                0 (const int)
+0:38            Constant:
+0:38              1 (const int)
+0:38          Constant:
+0:38            0 (const int)
+0:38        subgroupMul ( global highp int)
+0:38          direct index ( temp highp int)
+0:38            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                1 (const int)
+0:38            Constant:
+0:38              0 (const int)
+0:39      move second child to first child ( temp highp 2-component vector of int)
+0:39        vector swizzle ( temp highp 2-component vector of int)
+0:39          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39          Sequence
+0:39            Constant:
+0:39              0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39        subgroupMul ( global highp 2-component vector of int)
+0:39          vector swizzle ( temp highp 2-component vector of int)
+0:39            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                Constant:
+0:39                  1 (const int)
+0:39              Constant:
+0:39                1 (const int)
+0:39            Sequence
+0:39              Constant:
+0:39                0 (const int)
+0:39              Constant:
+0:39                1 (const int)
+0:40      move second child to first child ( temp highp 3-component vector of int)
+0:40        vector swizzle ( temp highp 3-component vector of int)
+0:40          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              Constant:
+0:40                0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40            Constant:
+0:40              2 (const int)
+0:40        subgroupMul ( global highp 3-component vector of int)
+0:40          vector swizzle ( temp highp 3-component vector of int)
+0:40            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                Constant:
+0:40                  2 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Sequence
+0:40              Constant:
+0:40                0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40              Constant:
+0:40                2 (const int)
+0:41      move second child to first child ( temp highp 4-component vector of int)
+0:41        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            Constant:
+0:41              0 (const int)
+0:41          Constant:
+0:41            1 (const int)
+0:41        subgroupMul ( global highp 4-component vector of int)
+0:41          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              Constant:
+0:41                3 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:43      move second child to first child ( temp highp uint)
+0:43        direct index ( temp highp uint)
+0:43          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              Constant:
+0:43                1 (const int)
+0:43            Constant:
+0:43              2 (const int)
+0:43          Constant:
+0:43            0 (const int)
+0:43        subgroupMul ( global highp uint)
+0:43          direct index ( temp highp uint)
+0:43            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                Constant:
+0:43                  0 (const int)
+0:43              Constant:
+0:43                2 (const int)
+0:43            Constant:
+0:43              0 (const int)
+0:44      move second child to first child ( temp highp 2-component vector of uint)
+0:44        vector swizzle ( temp highp 2-component vector of uint)
+0:44          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              Constant:
+0:44                1 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:44          Sequence
+0:44            Constant:
+0:44              0 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44        subgroupMul ( global highp 2-component vector of uint)
+0:44          vector swizzle ( temp highp 2-component vector of uint)
+0:44            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                Constant:
+0:44                  1 (const int)
+0:44              Constant:
+0:44                2 (const int)
+0:44            Sequence
+0:44              Constant:
+0:44                0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:45      move second child to first child ( temp highp 3-component vector of uint)
+0:45        vector swizzle ( temp highp 3-component vector of uint)
+0:45          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              Constant:
+0:45                1 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45        subgroupMul ( global highp 3-component vector of uint)
+0:45          vector swizzle ( temp highp 3-component vector of uint)
+0:45            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                Constant:
+0:45                  2 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:46      move second child to first child ( temp highp 4-component vector of uint)
+0:46        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            Constant:
+0:46              1 (const int)
+0:46          Constant:
+0:46            2 (const int)
+0:46        subgroupMul ( global highp 4-component vector of uint)
+0:46          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              Constant:
+0:46                3 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:48      move second child to first child ( temp highp float)
+0:48        direct index ( temp highp float)
+0:48          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:48            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              Constant:
+0:48                2 (const int)
+0:48            Constant:
+0:48              0 (const int)
+0:48          Constant:
+0:48            0 (const int)
+0:48        subgroupMin ( global highp float)
+0:48          direct index ( temp highp float)
+0:48            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:48              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                Constant:
+0:48                  0 (const int)
+0:48              Constant:
+0:48                0 (const int)
+0:48            Constant:
+0:48              0 (const int)
+0:49      move second child to first child ( temp highp 2-component vector of float)
+0:49        vector swizzle ( temp highp 2-component vector of float)
+0:49          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:49            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              Constant:
+0:49                2 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:49          Sequence
+0:49            Constant:
+0:49              0 (const int)
+0:49            Constant:
+0:49              1 (const int)
+0:49        subgroupMin ( global highp 2-component vector of float)
+0:49          vector swizzle ( temp highp 2-component vector of float)
+0:49            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                Constant:
+0:49                  1 (const int)
+0:49              Constant:
+0:49                0 (const int)
+0:49            Sequence
+0:49              Constant:
+0:49                0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:50      move second child to first child ( temp highp 3-component vector of float)
+0:50        vector swizzle ( temp highp 3-component vector of float)
+0:50          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:50            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              Constant:
+0:50                2 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50        subgroupMin ( global highp 3-component vector of float)
+0:50          vector swizzle ( temp highp 3-component vector of float)
+0:50            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                Constant:
+0:50                  2 (const int)
+0:50              Constant:
+0:50                0 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:51      move second child to first child ( temp highp 4-component vector of float)
+0:51        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:51          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            Constant:
+0:51              2 (const int)
+0:51          Constant:
+0:51            0 (const int)
+0:51        subgroupMin ( global highp 4-component vector of float)
+0:51          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:51            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              Constant:
+0:51                3 (const int)
+0:51            Constant:
+0:51              0 (const int)
+0:53      move second child to first child ( temp highp int)
+0:53        direct index ( temp highp int)
+0:53          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              Constant:
+0:53                3 (const int)
+0:53            Constant:
+0:53              1 (const int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        subgroupMin ( global highp int)
+0:53          direct index ( temp highp int)
+0:53            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                Constant:
+0:53                  0 (const int)
+0:53              Constant:
+0:53                1 (const int)
+0:53            Constant:
+0:53              0 (const int)
+0:54      move second child to first child ( temp highp 2-component vector of int)
+0:54        vector swizzle ( temp highp 2-component vector of int)
+0:54          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              Constant:
+0:54                3 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54          Sequence
+0:54            Constant:
+0:54              0 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54        subgroupMin ( global highp 2-component vector of int)
+0:54          vector swizzle ( temp highp 2-component vector of int)
+0:54            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                Constant:
+0:54                  1 (const int)
+0:54              Constant:
+0:54                1 (const int)
+0:54            Sequence
+0:54              Constant:
+0:54                0 (const int)
+0:54              Constant:
+0:54                1 (const int)
+0:55      move second child to first child ( temp highp 3-component vector of int)
+0:55        vector swizzle ( temp highp 3-component vector of int)
+0:55          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              Constant:
+0:55                3 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55            Constant:
+0:55              2 (const int)
+0:55        subgroupMin ( global highp 3-component vector of int)
+0:55          vector swizzle ( temp highp 3-component vector of int)
+0:55            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                Constant:
+0:55                  2 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55              Constant:
+0:55                2 (const int)
+0:56      move second child to first child ( temp highp 4-component vector of int)
+0:56        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            Constant:
+0:56              3 (const int)
+0:56          Constant:
+0:56            1 (const int)
+0:56        subgroupMin ( global highp 4-component vector of int)
+0:56          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56              Constant:
+0:56                3 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:58      move second child to first child ( temp highp uint)
+0:58        direct index ( temp highp uint)
+0:58          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:58            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              Constant:
+0:58                0 (const int)
+0:58            Constant:
+0:58              2 (const int)
+0:58          Constant:
+0:58            0 (const int)
+0:58        subgroupMin ( global highp uint)
+0:58          direct index ( temp highp uint)
+0:58            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:58              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                Constant:
+0:58                  0 (const int)
+0:58              Constant:
+0:58                2 (const int)
+0:58            Constant:
+0:58              0 (const int)
+0:59      move second child to first child ( temp highp 2-component vector of uint)
+0:59        vector swizzle ( temp highp 2-component vector of uint)
+0:59          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:59            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59              Constant:
+0:59                0 (const int)
+0:59            Constant:
+0:59              2 (const int)
+0:59          Sequence
+0:59            Constant:
+0:59              0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:59        subgroupMin ( global highp 2-component vector of uint)
+0:59          vector swizzle ( temp highp 2-component vector of uint)
+0:59            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59                Constant:
+0:59                  1 (const int)
+0:59              Constant:
+0:59                2 (const int)
+0:59            Sequence
+0:59              Constant:
+0:59                0 (const int)
+0:59              Constant:
+0:59                1 (const int)
+0:60      move second child to first child ( temp highp 3-component vector of uint)
+0:60        vector swizzle ( temp highp 3-component vector of uint)
+0:60          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:60            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              Constant:
+0:60                0 (const int)
+0:60            Constant:
+0:60              2 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60            Constant:
+0:60              2 (const int)
+0:60        subgroupMin ( global highp 3-component vector of uint)
+0:60          vector swizzle ( temp highp 3-component vector of uint)
+0:60            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                Constant:
+0:60                  2 (const int)
+0:60              Constant:
+0:60                2 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60              Constant:
+0:60                2 (const int)
+0:61      move second child to first child ( temp highp 4-component vector of uint)
+0:61        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:61          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61            Constant:
+0:61              0 (const int)
+0:61          Constant:
+0:61            2 (const int)
+0:61        subgroupMin ( global highp 4-component vector of uint)
+0:61          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:61            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61              Constant:
+0:61                3 (const int)
+0:61            Constant:
+0:61              2 (const int)
+0:63      move second child to first child ( temp highp float)
+0:63        direct index ( temp highp float)
+0:63          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:63            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63              Constant:
+0:63                1 (const int)
+0:63            Constant:
+0:63              0 (const int)
+0:63          Constant:
+0:63            0 (const int)
+0:63        subgroupMax ( global highp float)
+0:63          direct index ( temp highp float)
+0:63            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:63              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                Constant:
+0:63                  0 (const int)
+0:63              Constant:
+0:63                0 (const int)
+0:63            Constant:
+0:63              0 (const int)
+0:64      move second child to first child ( temp highp 2-component vector of float)
+0:64        vector swizzle ( temp highp 2-component vector of float)
+0:64          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:64            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64              Constant:
+0:64                1 (const int)
+0:64            Constant:
+0:64              0 (const int)
+0:64          Sequence
+0:64            Constant:
+0:64              0 (const int)
+0:64            Constant:
+0:64              1 (const int)
+0:64        subgroupMax ( global highp 2-component vector of float)
+0:64          vector swizzle ( temp highp 2-component vector of float)
+0:64            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:64              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64                Constant:
+0:64                  1 (const int)
+0:64              Constant:
+0:64                0 (const int)
+0:64            Sequence
+0:64              Constant:
+0:64                0 (const int)
+0:64              Constant:
+0:64                1 (const int)
+0:65      move second child to first child ( temp highp 3-component vector of float)
+0:65        vector swizzle ( temp highp 3-component vector of float)
+0:65          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:65            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65              Constant:
+0:65                1 (const int)
+0:65            Constant:
+0:65              0 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65            Constant:
+0:65              2 (const int)
+0:65        subgroupMax ( global highp 3-component vector of float)
+0:65          vector swizzle ( temp highp 3-component vector of float)
+0:65            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:65              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                Constant:
+0:65                  2 (const int)
+0:65              Constant:
+0:65                0 (const int)
+0:65            Sequence
+0:65              Constant:
+0:65                0 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:65              Constant:
+0:65                2 (const int)
+0:66      move second child to first child ( temp highp 4-component vector of float)
+0:66        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:66          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66            Constant:
+0:66              1 (const int)
+0:66          Constant:
+0:66            0 (const int)
+0:66        subgroupMax ( global highp 4-component vector of float)
+0:66          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:66            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66              Constant:
+0:66                3 (const int)
+0:66            Constant:
+0:66              0 (const int)
+0:68      move second child to first child ( temp highp int)
+0:68        direct index ( temp highp int)
+0:68          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:68            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68              Constant:
+0:68                2 (const int)
+0:68            Constant:
+0:68              1 (const int)
+0:68          Constant:
+0:68            0 (const int)
+0:68        subgroupMax ( global highp int)
+0:68          direct index ( temp highp int)
+0:68            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:68              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                Constant:
+0:68                  0 (const int)
+0:68              Constant:
+0:68                1 (const int)
+0:68            Constant:
+0:68              0 (const int)
+0:69      move second child to first child ( temp highp 2-component vector of int)
+0:69        vector swizzle ( temp highp 2-component vector of int)
+0:69          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:69            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69              Constant:
+0:69                2 (const int)
+0:69            Constant:
+0:69              1 (const int)
+0:69          Sequence
+0:69            Constant:
+0:69              0 (const int)
+0:69            Constant:
+0:69              1 (const int)
+0:69        subgroupMax ( global highp 2-component vector of int)
+0:69          vector swizzle ( temp highp 2-component vector of int)
+0:69            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:69              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69                Constant:
+0:69                  1 (const int)
+0:69              Constant:
+0:69                1 (const int)
+0:69            Sequence
+0:69              Constant:
+0:69                0 (const int)
+0:69              Constant:
+0:69                1 (const int)
+0:70      move second child to first child ( temp highp 3-component vector of int)
+0:70        vector swizzle ( temp highp 3-component vector of int)
+0:70          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70              Constant:
+0:70                2 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70          Sequence
+0:70            Constant:
+0:70              0 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70            Constant:
+0:70              2 (const int)
+0:70        subgroupMax ( global highp 3-component vector of int)
+0:70          vector swizzle ( temp highp 3-component vector of int)
+0:70            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                Constant:
+0:70                  2 (const int)
+0:70              Constant:
+0:70                1 (const int)
+0:70            Sequence
+0:70              Constant:
+0:70                0 (const int)
+0:70              Constant:
+0:70                1 (const int)
+0:70              Constant:
+0:70                2 (const int)
+0:71      move second child to first child ( temp highp 4-component vector of int)
+0:71        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71            Constant:
+0:71              2 (const int)
+0:71          Constant:
+0:71            1 (const int)
+0:71        subgroupMax ( global highp 4-component vector of int)
+0:71          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71              Constant:
+0:71                3 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:73      move second child to first child ( temp highp uint)
+0:73        direct index ( temp highp uint)
+0:73          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:73            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73              Constant:
+0:73                3 (const int)
+0:73            Constant:
+0:73              2 (const int)
+0:73          Constant:
+0:73            0 (const int)
+0:73        subgroupMax ( global highp uint)
+0:73          direct index ( temp highp uint)
+0:73            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:73              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                Constant:
+0:73                  0 (const int)
+0:73              Constant:
+0:73                2 (const int)
+0:73            Constant:
+0:73              0 (const int)
+0:74      move second child to first child ( temp highp 2-component vector of uint)
+0:74        vector swizzle ( temp highp 2-component vector of uint)
+0:74          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:74            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74              Constant:
+0:74                3 (const int)
+0:74            Constant:
+0:74              2 (const int)
+0:74          Sequence
+0:74            Constant:
+0:74              0 (const int)
+0:74            Constant:
+0:74              1 (const int)
+0:74        subgroupMax ( global highp 2-component vector of uint)
+0:74          vector swizzle ( temp highp 2-component vector of uint)
+0:74            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:74              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74                Constant:
+0:74                  1 (const int)
+0:74              Constant:
+0:74                2 (const int)
+0:74            Sequence
+0:74              Constant:
+0:74                0 (const int)
+0:74              Constant:
+0:74                1 (const int)
+0:75      move second child to first child ( temp highp 3-component vector of uint)
+0:75        vector swizzle ( temp highp 3-component vector of uint)
+0:75          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:75            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75              Constant:
+0:75                3 (const int)
+0:75            Constant:
+0:75              2 (const int)
+0:75          Sequence
+0:75            Constant:
+0:75              0 (const int)
+0:75            Constant:
+0:75              1 (const int)
+0:75            Constant:
+0:75              2 (const int)
+0:75        subgroupMax ( global highp 3-component vector of uint)
+0:75          vector swizzle ( temp highp 3-component vector of uint)
+0:75            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:75              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75                Constant:
+0:75                  2 (const int)
+0:75              Constant:
+0:75                2 (const int)
+0:75            Sequence
+0:75              Constant:
+0:75                0 (const int)
+0:75              Constant:
+0:75                1 (const int)
+0:75              Constant:
+0:75                2 (const int)
+0:76      move second child to first child ( temp highp 4-component vector of uint)
+0:76        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:76          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76            Constant:
+0:76              3 (const int)
+0:76          Constant:
+0:76            2 (const int)
+0:76        subgroupMax ( global highp 4-component vector of uint)
+0:76          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:76            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76              Constant:
+0:76                3 (const int)
+0:76            Constant:
+0:76              2 (const int)
+0:78      move second child to first child ( temp highp int)
+0:78        direct index ( temp highp int)
+0:78          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78              Constant:
+0:78                0 (const int)
+0:78            Constant:
+0:78              1 (const int)
+0:78          Constant:
+0:78            0 (const int)
+0:78        subgroupAnd ( global highp int)
+0:78          direct index ( temp highp int)
+0:78            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78                Constant:
+0:78                  0 (const int)
+0:78              Constant:
+0:78                1 (const int)
+0:78            Constant:
+0:78              0 (const int)
+0:79      move second child to first child ( temp highp 2-component vector of int)
+0:79        vector swizzle ( temp highp 2-component vector of int)
+0:79          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:79            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79              Constant:
+0:79                0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:79          Sequence
+0:79            Constant:
+0:79              0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:79        subgroupAnd ( global highp 2-component vector of int)
+0:79          vector swizzle ( temp highp 2-component vector of int)
+0:79            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:79              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79                Constant:
+0:79                  1 (const int)
+0:79              Constant:
+0:79                1 (const int)
+0:79            Sequence
+0:79              Constant:
+0:79                0 (const int)
+0:79              Constant:
+0:79                1 (const int)
+0:80      move second child to first child ( temp highp 3-component vector of int)
+0:80        vector swizzle ( temp highp 3-component vector of int)
+0:80          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:80            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80              Constant:
+0:80                0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80          Sequence
+0:80            Constant:
+0:80              0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80            Constant:
+0:80              2 (const int)
+0:80        subgroupAnd ( global highp 3-component vector of int)
+0:80          vector swizzle ( temp highp 3-component vector of int)
+0:80            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:80              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80                Constant:
+0:80                  2 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80            Sequence
+0:80              Constant:
+0:80                0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80              Constant:
+0:80                2 (const int)
+0:81      move second child to first child ( temp highp 4-component vector of int)
+0:81        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:81          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81            Constant:
+0:81              0 (const int)
+0:81          Constant:
+0:81            1 (const int)
+0:81        subgroupAnd ( global highp 4-component vector of int)
+0:81          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:81            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81              Constant:
+0:81                3 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:83      move second child to first child ( temp highp uint)
+0:83        direct index ( temp highp uint)
+0:83          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83              Constant:
+0:83                1 (const int)
+0:83            Constant:
+0:83              2 (const int)
+0:83          Constant:
+0:83            0 (const int)
+0:83        subgroupAnd ( global highp uint)
+0:83          direct index ( temp highp uint)
+0:83            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83                Constant:
+0:83                  0 (const int)
+0:83              Constant:
+0:83                2 (const int)
+0:83            Constant:
+0:83              0 (const int)
+0:84      move second child to first child ( temp highp 2-component vector of uint)
+0:84        vector swizzle ( temp highp 2-component vector of uint)
+0:84          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:84            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84              Constant:
+0:84                1 (const int)
+0:84            Constant:
+0:84              2 (const int)
+0:84          Sequence
+0:84            Constant:
+0:84              0 (const int)
+0:84            Constant:
+0:84              1 (const int)
+0:84        subgroupAnd ( global highp 2-component vector of uint)
+0:84          vector swizzle ( temp highp 2-component vector of uint)
+0:84            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:84              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84                Constant:
+0:84                  1 (const int)
+0:84              Constant:
+0:84                2 (const int)
+0:84            Sequence
+0:84              Constant:
+0:84                0 (const int)
+0:84              Constant:
+0:84                1 (const int)
+0:85      move second child to first child ( temp highp 3-component vector of uint)
+0:85        vector swizzle ( temp highp 3-component vector of uint)
+0:85          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:85            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85              Constant:
+0:85                1 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85          Sequence
+0:85            Constant:
+0:85              0 (const int)
+0:85            Constant:
+0:85              1 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85        subgroupAnd ( global highp 3-component vector of uint)
+0:85          vector swizzle ( temp highp 3-component vector of uint)
+0:85            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:85              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85                Constant:
+0:85                  2 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:85            Sequence
+0:85              Constant:
+0:85                0 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:86      move second child to first child ( temp highp 4-component vector of uint)
+0:86        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:86          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86            Constant:
+0:86              1 (const int)
+0:86          Constant:
+0:86            2 (const int)
+0:86        subgroupAnd ( global highp 4-component vector of uint)
+0:86          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:86            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86              Constant:
+0:86                3 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:88      move second child to first child ( temp highp int)
+0:88        direct index ( temp highp int)
+0:88          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:88            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88              Constant:
+0:88                2 (const int)
+0:88            Constant:
+0:88              1 (const int)
+0:88          Constant:
+0:88            0 (const int)
+0:88        Convert bool to int ( temp highp int)
+0:88          subgroupAnd ( global bool)
+0:88            Compare Less Than ( temp bool)
+0:88              direct index ( temp highp int)
+0:88                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:88                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88                    Constant:
+0:88                      0 (const int)
+0:88                  Constant:
+0:88                    1 (const int)
+0:88                Constant:
+0:88                  0 (const int)
+0:88              Constant:
+0:88                0 (const int)
+0:89      move second child to first child ( temp highp 2-component vector of int)
+0:89        vector swizzle ( temp highp 2-component vector of int)
+0:89          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:89            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89              Constant:
+0:89                2 (const int)
+0:89            Constant:
+0:89              1 (const int)
+0:89          Sequence
+0:89            Constant:
+0:89              0 (const int)
+0:89            Constant:
+0:89              1 (const int)
+0:89        Convert bool to int ( temp highp 2-component vector of int)
+0:89          subgroupAnd ( global 2-component vector of bool)
+0:89            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:89              vector swizzle ( temp highp 2-component vector of int)
+0:89                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:89                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89                    Constant:
+0:89                      1 (const int)
+0:89                  Constant:
+0:89                    1 (const int)
+0:89                Sequence
+0:89                  Constant:
+0:89                    0 (const int)
+0:89                  Constant:
+0:89                    1 (const int)
+0:89              Constant:
+0:89                0 (const int)
+0:89                0 (const int)
+0:90      move second child to first child ( temp highp 3-component vector of int)
+0:90        vector swizzle ( temp highp 3-component vector of int)
+0:90          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90              Constant:
+0:90                2 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90          Sequence
+0:90            Constant:
+0:90              0 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90            Constant:
+0:90              2 (const int)
+0:90        Convert bool to int ( temp highp 3-component vector of int)
+0:90          subgroupAnd ( global 3-component vector of bool)
+0:90            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:90              vector swizzle ( temp highp 3-component vector of int)
+0:90                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90                    Constant:
+0:90                      1 (const int)
+0:90                  Constant:
+0:90                    1 (const int)
+0:90                Sequence
+0:90                  Constant:
+0:90                    0 (const int)
+0:90                  Constant:
+0:90                    1 (const int)
+0:90                  Constant:
+0:90                    2 (const int)
+0:90              Constant:
+0:90                0 (const int)
+0:90                0 (const int)
+0:90                0 (const int)
+0:91      move second child to first child ( temp highp 4-component vector of int)
+0:91        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91            Constant:
+0:91              2 (const int)
+0:91          Constant:
+0:91            1 (const int)
+0:91        Convert bool to int ( temp highp 4-component vector of int)
+0:91          subgroupAnd ( global 4-component vector of bool)
+0:91            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:91              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91                  Constant:
+0:91                    1 (const int)
+0:91                Constant:
+0:91                  1 (const int)
+0:91              Constant:
+0:91                0 (const int)
+0:91                0 (const int)
+0:91                0 (const int)
+0:91                0 (const int)
+0:93      move second child to first child ( temp highp int)
+0:93        direct index ( temp highp int)
+0:93          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93              Constant:
+0:93                3 (const int)
+0:93            Constant:
+0:93              1 (const int)
+0:93          Constant:
+0:93            0 (const int)
+0:93        subgroupOr ( global highp int)
+0:93          direct index ( temp highp int)
+0:93            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93                Constant:
+0:93                  0 (const int)
+0:93              Constant:
+0:93                1 (const int)
+0:93            Constant:
+0:93              0 (const int)
+0:94      move second child to first child ( temp highp 2-component vector of int)
+0:94        vector swizzle ( temp highp 2-component vector of int)
+0:94          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94              Constant:
+0:94                3 (const int)
+0:94            Constant:
+0:94              1 (const int)
+0:94          Sequence
+0:94            Constant:
+0:94              0 (const int)
+0:94            Constant:
+0:94              1 (const int)
+0:94        subgroupOr ( global highp 2-component vector of int)
+0:94          vector swizzle ( temp highp 2-component vector of int)
+0:94            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94                Constant:
+0:94                  1 (const int)
+0:94              Constant:
+0:94                1 (const int)
+0:94            Sequence
+0:94              Constant:
+0:94                0 (const int)
+0:94              Constant:
+0:94                1 (const int)
+0:95      move second child to first child ( temp highp 3-component vector of int)
+0:95        vector swizzle ( temp highp 3-component vector of int)
+0:95          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95              Constant:
+0:95                3 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95          Sequence
+0:95            Constant:
+0:95              0 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95            Constant:
+0:95              2 (const int)
+0:95        subgroupOr ( global highp 3-component vector of int)
+0:95          vector swizzle ( temp highp 3-component vector of int)
+0:95            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95                Constant:
+0:95                  2 (const int)
+0:95              Constant:
+0:95                1 (const int)
+0:95            Sequence
+0:95              Constant:
+0:95                0 (const int)
+0:95              Constant:
+0:95                1 (const int)
+0:95              Constant:
+0:95                2 (const int)
+0:96      move second child to first child ( temp highp 4-component vector of int)
+0:96        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96            Constant:
+0:96              3 (const int)
+0:96          Constant:
+0:96            1 (const int)
+0:96        subgroupOr ( global highp 4-component vector of int)
+0:96          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96              Constant:
+0:96                3 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:98      move second child to first child ( temp highp uint)
+0:98        direct index ( temp highp uint)
+0:98          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98              Constant:
+0:98                0 (const int)
+0:98            Constant:
+0:98              2 (const int)
+0:98          Constant:
+0:98            0 (const int)
+0:98        subgroupOr ( global highp uint)
+0:98          direct index ( temp highp uint)
+0:98            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98                Constant:
+0:98                  0 (const int)
+0:98              Constant:
+0:98                2 (const int)
+0:98            Constant:
+0:98              0 (const int)
+0:99      move second child to first child ( temp highp 2-component vector of uint)
+0:99        vector swizzle ( temp highp 2-component vector of uint)
+0:99          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:99            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99              Constant:
+0:99                0 (const int)
+0:99            Constant:
+0:99              2 (const int)
+0:99          Sequence
+0:99            Constant:
+0:99              0 (const int)
+0:99            Constant:
+0:99              1 (const int)
+0:99        subgroupOr ( global highp 2-component vector of uint)
+0:99          vector swizzle ( temp highp 2-component vector of uint)
+0:99            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:99              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99                Constant:
+0:99                  1 (const int)
+0:99              Constant:
+0:99                2 (const int)
+0:99            Sequence
+0:99              Constant:
+0:99                0 (const int)
+0:99              Constant:
+0:99                1 (const int)
+0:100      move second child to first child ( temp highp 3-component vector of uint)
+0:100        vector swizzle ( temp highp 3-component vector of uint)
+0:100          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:100            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100              Constant:
+0:100                0 (const int)
+0:100            Constant:
+0:100              2 (const int)
+0:100          Sequence
+0:100            Constant:
+0:100              0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100            Constant:
+0:100              2 (const int)
+0:100        subgroupOr ( global highp 3-component vector of uint)
+0:100          vector swizzle ( temp highp 3-component vector of uint)
+0:100            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:100              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100                Constant:
+0:100                  2 (const int)
+0:100              Constant:
+0:100                2 (const int)
+0:100            Sequence
+0:100              Constant:
+0:100                0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100              Constant:
+0:100                2 (const int)
+0:101      move second child to first child ( temp highp 4-component vector of uint)
+0:101        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:101          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101            Constant:
+0:101              0 (const int)
+0:101          Constant:
+0:101            2 (const int)
+0:101        subgroupOr ( global highp 4-component vector of uint)
+0:101          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:101            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101              Constant:
+0:101                3 (const int)
+0:101            Constant:
+0:101              2 (const int)
+0:103      move second child to first child ( temp highp int)
+0:103        direct index ( temp highp int)
+0:103          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103              Constant:
+0:103                1 (const int)
+0:103            Constant:
+0:103              1 (const int)
+0:103          Constant:
+0:103            0 (const int)
+0:103        Convert bool to int ( temp highp int)
+0:103          subgroupOr ( global bool)
+0:103            Compare Less Than ( temp bool)
+0:103              direct index ( temp highp int)
+0:103                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103                    Constant:
+0:103                      0 (const int)
+0:103                  Constant:
+0:103                    1 (const int)
+0:103                Constant:
+0:103                  0 (const int)
+0:103              Constant:
+0:103                0 (const int)
+0:104      move second child to first child ( temp highp 2-component vector of int)
+0:104        vector swizzle ( temp highp 2-component vector of int)
+0:104          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:104            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104              Constant:
+0:104                1 (const int)
+0:104            Constant:
+0:104              1 (const int)
+0:104          Sequence
+0:104            Constant:
+0:104              0 (const int)
+0:104            Constant:
+0:104              1 (const int)
+0:104        Convert bool to int ( temp highp 2-component vector of int)
+0:104          subgroupOr ( global 2-component vector of bool)
+0:104            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:104              vector swizzle ( temp highp 2-component vector of int)
+0:104                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:104                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104                    Constant:
+0:104                      1 (const int)
+0:104                  Constant:
+0:104                    1 (const int)
+0:104                Sequence
+0:104                  Constant:
+0:104                    0 (const int)
+0:104                  Constant:
+0:104                    1 (const int)
+0:104              Constant:
+0:104                0 (const int)
+0:104                0 (const int)
+0:105      move second child to first child ( temp highp 3-component vector of int)
+0:105        vector swizzle ( temp highp 3-component vector of int)
+0:105          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:105            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105              Constant:
+0:105                1 (const int)
+0:105            Constant:
+0:105              1 (const int)
+0:105          Sequence
+0:105            Constant:
+0:105              0 (const int)
+0:105            Constant:
+0:105              1 (const int)
+0:105            Constant:
+0:105              2 (const int)
+0:105        Convert bool to int ( temp highp 3-component vector of int)
+0:105          subgroupOr ( global 3-component vector of bool)
+0:105            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:105              vector swizzle ( temp highp 3-component vector of int)
+0:105                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:105                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105                    Constant:
+0:105                      1 (const int)
+0:105                  Constant:
+0:105                    1 (const int)
+0:105                Sequence
+0:105                  Constant:
+0:105                    0 (const int)
+0:105                  Constant:
+0:105                    1 (const int)
+0:105                  Constant:
+0:105                    2 (const int)
+0:105              Constant:
+0:105                0 (const int)
+0:105                0 (const int)
+0:105                0 (const int)
+0:106      move second child to first child ( temp highp 4-component vector of int)
+0:106        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:106          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106            Constant:
+0:106              1 (const int)
+0:106          Constant:
+0:106            1 (const int)
+0:106        Convert bool to int ( temp highp 4-component vector of int)
+0:106          subgroupOr ( global 4-component vector of bool)
+0:106            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:106              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:106                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106                  Constant:
+0:106                    1 (const int)
+0:106                Constant:
+0:106                  1 (const int)
+0:106              Constant:
+0:106                0 (const int)
+0:106                0 (const int)
+0:106                0 (const int)
+0:106                0 (const int)
+0:108      move second child to first child ( temp highp int)
+0:108        direct index ( temp highp int)
+0:108          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:108            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108              Constant:
+0:108                2 (const int)
+0:108            Constant:
+0:108              1 (const int)
+0:108          Constant:
+0:108            0 (const int)
+0:108        subgroupXor ( global highp int)
+0:108          direct index ( temp highp int)
+0:108            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:108              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108                Constant:
+0:108                  0 (const int)
+0:108              Constant:
+0:108                1 (const int)
+0:108            Constant:
+0:108              0 (const int)
+0:109      move second child to first child ( temp highp 2-component vector of int)
+0:109        vector swizzle ( temp highp 2-component vector of int)
+0:109          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:109            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109              Constant:
+0:109                2 (const int)
+0:109            Constant:
+0:109              1 (const int)
+0:109          Sequence
+0:109            Constant:
+0:109              0 (const int)
+0:109            Constant:
+0:109              1 (const int)
+0:109        subgroupXor ( global highp 2-component vector of int)
+0:109          vector swizzle ( temp highp 2-component vector of int)
+0:109            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:109              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109                Constant:
+0:109                  1 (const int)
+0:109              Constant:
+0:109                1 (const int)
+0:109            Sequence
+0:109              Constant:
+0:109                0 (const int)
+0:109              Constant:
+0:109                1 (const int)
+0:110      move second child to first child ( temp highp 3-component vector of int)
+0:110        vector swizzle ( temp highp 3-component vector of int)
+0:110          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110              Constant:
+0:110                2 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110          Sequence
+0:110            Constant:
+0:110              0 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110            Constant:
+0:110              2 (const int)
+0:110        subgroupXor ( global highp 3-component vector of int)
+0:110          vector swizzle ( temp highp 3-component vector of int)
+0:110            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110                Constant:
+0:110                  2 (const int)
+0:110              Constant:
+0:110                1 (const int)
+0:110            Sequence
+0:110              Constant:
+0:110                0 (const int)
+0:110              Constant:
+0:110                1 (const int)
+0:110              Constant:
+0:110                2 (const int)
+0:111      move second child to first child ( temp highp 4-component vector of int)
+0:111        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111            Constant:
+0:111              2 (const int)
+0:111          Constant:
+0:111            1 (const int)
+0:111        subgroupXor ( global highp 4-component vector of int)
+0:111          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111              Constant:
+0:111                3 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:113      move second child to first child ( temp highp uint)
+0:113        direct index ( temp highp uint)
+0:113          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:113            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113              Constant:
+0:113                3 (const int)
+0:113            Constant:
+0:113              2 (const int)
+0:113          Constant:
+0:113            0 (const int)
+0:113        subgroupXor ( global highp uint)
+0:113          direct index ( temp highp uint)
+0:113            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:113              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113                Constant:
+0:113                  0 (const int)
+0:113              Constant:
+0:113                2 (const int)
+0:113            Constant:
+0:113              0 (const int)
+0:114      move second child to first child ( temp highp 2-component vector of uint)
+0:114        vector swizzle ( temp highp 2-component vector of uint)
+0:114          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:114            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114              Constant:
+0:114                3 (const int)
+0:114            Constant:
+0:114              2 (const int)
+0:114          Sequence
+0:114            Constant:
+0:114              0 (const int)
+0:114            Constant:
+0:114              1 (const int)
+0:114        subgroupXor ( global highp 2-component vector of uint)
+0:114          vector swizzle ( temp highp 2-component vector of uint)
+0:114            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:114              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114                Constant:
+0:114                  1 (const int)
+0:114              Constant:
+0:114                2 (const int)
+0:114            Sequence
+0:114              Constant:
+0:114                0 (const int)
+0:114              Constant:
+0:114                1 (const int)
+0:115      move second child to first child ( temp highp 3-component vector of uint)
+0:115        vector swizzle ( temp highp 3-component vector of uint)
+0:115          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:115            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115              Constant:
+0:115                3 (const int)
+0:115            Constant:
+0:115              2 (const int)
+0:115          Sequence
+0:115            Constant:
+0:115              0 (const int)
+0:115            Constant:
+0:115              1 (const int)
+0:115            Constant:
+0:115              2 (const int)
+0:115        subgroupXor ( global highp 3-component vector of uint)
+0:115          vector swizzle ( temp highp 3-component vector of uint)
+0:115            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:115              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115                Constant:
+0:115                  2 (const int)
+0:115              Constant:
+0:115                2 (const int)
+0:115            Sequence
+0:115              Constant:
+0:115                0 (const int)
+0:115              Constant:
+0:115                1 (const int)
+0:115              Constant:
+0:115                2 (const int)
+0:116      move second child to first child ( temp highp 4-component vector of uint)
+0:116        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:116          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116            Constant:
+0:116              3 (const int)
+0:116          Constant:
+0:116            2 (const int)
+0:116        subgroupXor ( global highp 4-component vector of uint)
+0:116          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:116            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116              Constant:
+0:116                3 (const int)
+0:116            Constant:
+0:116              2 (const int)
+0:118      move second child to first child ( temp highp int)
+0:118        direct index ( temp highp int)
+0:118          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118              Constant:
+0:118                0 (const int)
+0:118            Constant:
+0:118              1 (const int)
+0:118          Constant:
+0:118            0 (const int)
+0:118        Convert bool to int ( temp highp int)
+0:118          subgroupXor ( global bool)
+0:118            Compare Less Than ( temp bool)
+0:118              direct index ( temp highp int)
+0:118                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118                    Constant:
+0:118                      0 (const int)
+0:118                  Constant:
+0:118                    1 (const int)
+0:118                Constant:
+0:118                  0 (const int)
+0:118              Constant:
+0:118                0 (const int)
+0:119      move second child to first child ( temp highp 2-component vector of int)
+0:119        vector swizzle ( temp highp 2-component vector of int)
+0:119          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:119            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119              Constant:
+0:119                0 (const int)
+0:119            Constant:
+0:119              1 (const int)
+0:119          Sequence
+0:119            Constant:
+0:119              0 (const int)
+0:119            Constant:
+0:119              1 (const int)
+0:119        Convert bool to int ( temp highp 2-component vector of int)
+0:119          subgroupXor ( global 2-component vector of bool)
+0:119            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:119              vector swizzle ( temp highp 2-component vector of int)
+0:119                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:119                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119                    Constant:
+0:119                      1 (const int)
+0:119                  Constant:
+0:119                    1 (const int)
+0:119                Sequence
+0:119                  Constant:
+0:119                    0 (const int)
+0:119                  Constant:
+0:119                    1 (const int)
+0:119              Constant:
+0:119                0 (const int)
+0:119                0 (const int)
+0:120      move second child to first child ( temp highp 3-component vector of int)
+0:120        vector swizzle ( temp highp 3-component vector of int)
+0:120          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:120            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120              Constant:
+0:120                0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120          Sequence
+0:120            Constant:
+0:120              0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120            Constant:
+0:120              2 (const int)
+0:120        Convert bool to int ( temp highp 3-component vector of int)
+0:120          subgroupXor ( global 3-component vector of bool)
+0:120            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:120              vector swizzle ( temp highp 3-component vector of int)
+0:120                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:120                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120                    Constant:
+0:120                      1 (const int)
+0:120                  Constant:
+0:120                    1 (const int)
+0:120                Sequence
+0:120                  Constant:
+0:120                    0 (const int)
+0:120                  Constant:
+0:120                    1 (const int)
+0:120                  Constant:
+0:120                    2 (const int)
+0:120              Constant:
+0:120                0 (const int)
+0:120                0 (const int)
+0:120                0 (const int)
+0:121      move second child to first child ( temp highp 4-component vector of int)
+0:121        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:121          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121            Constant:
+0:121              0 (const int)
+0:121          Constant:
+0:121            1 (const int)
+0:121        Convert bool to int ( temp highp 4-component vector of int)
+0:121          subgroupXor ( global 4-component vector of bool)
+0:121            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:121              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:121                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121                  Constant:
+0:121                    1 (const int)
+0:121                Constant:
+0:121                  1 (const int)
+0:121              Constant:
+0:121                0 (const int)
+0:121                0 (const int)
+0:121                0 (const int)
+0:121                0 (const int)
+0:123      move second child to first child ( temp highp float)
+0:123        direct index ( temp highp float)
+0:123          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:123            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123              Constant:
+0:123                1 (const int)
+0:123            Constant:
+0:123              0 (const int)
+0:123          Constant:
+0:123            0 (const int)
+0:123        subgroupInclusiveAdd ( global highp float)
+0:123          direct index ( temp highp float)
+0:123            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:123              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123                Constant:
+0:123                  0 (const int)
+0:123              Constant:
+0:123                0 (const int)
+0:123            Constant:
+0:123              0 (const int)
+0:124      move second child to first child ( temp highp 2-component vector of float)
+0:124        vector swizzle ( temp highp 2-component vector of float)
+0:124          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:124            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:124              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:124              Constant:
+0:124                1 (const int)
+0:124            Constant:
+0:124              0 (const int)
+0:124          Sequence
+0:124            Constant:
+0:124              0 (const int)
+0:124            Constant:
+0:124              1 (const int)
+0:124        subgroupInclusiveAdd ( global highp 2-component vector of float)
+0:124          vector swizzle ( temp highp 2-component vector of float)
+0:124            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:124              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:124                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:124                Constant:
+0:124                  1 (const int)
+0:124              Constant:
+0:124                0 (const int)
+0:124            Sequence
+0:124              Constant:
+0:124                0 (const int)
+0:124              Constant:
+0:124                1 (const int)
+0:125      move second child to first child ( temp highp 3-component vector of float)
+0:125        vector swizzle ( temp highp 3-component vector of float)
+0:125          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:125            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125              Constant:
+0:125                1 (const int)
+0:125            Constant:
+0:125              0 (const int)
+0:125          Sequence
+0:125            Constant:
+0:125              0 (const int)
+0:125            Constant:
+0:125              1 (const int)
+0:125            Constant:
+0:125              2 (const int)
+0:125        subgroupInclusiveAdd ( global highp 3-component vector of float)
+0:125          vector swizzle ( temp highp 3-component vector of float)
+0:125            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:125              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125                Constant:
+0:125                  2 (const int)
+0:125              Constant:
+0:125                0 (const int)
+0:125            Sequence
+0:125              Constant:
+0:125                0 (const int)
+0:125              Constant:
+0:125                1 (const int)
+0:125              Constant:
+0:125                2 (const int)
+0:126      move second child to first child ( temp highp 4-component vector of float)
+0:126        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:126          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126            Constant:
+0:126              1 (const int)
+0:126          Constant:
+0:126            0 (const int)
+0:126        subgroupInclusiveAdd ( global highp 4-component vector of float)
+0:126          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:126            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126              Constant:
+0:126                3 (const int)
+0:126            Constant:
+0:126              0 (const int)
+0:128      move second child to first child ( temp highp int)
+0:128        direct index ( temp highp int)
+0:128          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:128            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128              Constant:
+0:128                2 (const int)
+0:128            Constant:
+0:128              1 (const int)
+0:128          Constant:
+0:128            0 (const int)
+0:128        subgroupInclusiveAdd ( global highp int)
+0:128          direct index ( temp highp int)
+0:128            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:128              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128                Constant:
+0:128                  0 (const int)
+0:128              Constant:
+0:128                1 (const int)
+0:128            Constant:
+0:128              0 (const int)
+0:129      move second child to first child ( temp highp 2-component vector of int)
+0:129        vector swizzle ( temp highp 2-component vector of int)
+0:129          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:129            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:129              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:129              Constant:
+0:129                2 (const int)
+0:129            Constant:
+0:129              1 (const int)
+0:129          Sequence
+0:129            Constant:
+0:129              0 (const int)
+0:129            Constant:
+0:129              1 (const int)
+0:129        subgroupInclusiveAdd ( global highp 2-component vector of int)
+0:129          vector swizzle ( temp highp 2-component vector of int)
+0:129            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:129              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:129                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:129                Constant:
+0:129                  1 (const int)
+0:129              Constant:
+0:129                1 (const int)
+0:129            Sequence
+0:129              Constant:
+0:129                0 (const int)
+0:129              Constant:
+0:129                1 (const int)
+0:130      move second child to first child ( temp highp 3-component vector of int)
+0:130        vector swizzle ( temp highp 3-component vector of int)
+0:130          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:130            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130              Constant:
+0:130                2 (const int)
+0:130            Constant:
+0:130              1 (const int)
+0:130          Sequence
+0:130            Constant:
+0:130              0 (const int)
+0:130            Constant:
+0:130              1 (const int)
+0:130            Constant:
+0:130              2 (const int)
+0:130        subgroupInclusiveAdd ( global highp 3-component vector of int)
+0:130          vector swizzle ( temp highp 3-component vector of int)
+0:130            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:130              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130                Constant:
+0:130                  2 (const int)
+0:130              Constant:
+0:130                1 (const int)
+0:130            Sequence
+0:130              Constant:
+0:130                0 (const int)
+0:130              Constant:
+0:130                1 (const int)
+0:130              Constant:
+0:130                2 (const int)
+0:131      move second child to first child ( temp highp 4-component vector of int)
+0:131        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:131          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131            Constant:
+0:131              2 (const int)
+0:131          Constant:
+0:131            1 (const int)
+0:131        subgroupInclusiveAdd ( global highp 4-component vector of int)
+0:131          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:131            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131              Constant:
+0:131                3 (const int)
+0:131            Constant:
+0:131              1 (const int)
+0:133      move second child to first child ( temp highp uint)
+0:133        direct index ( temp highp uint)
+0:133          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:133            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133              Constant:
+0:133                3 (const int)
+0:133            Constant:
+0:133              2 (const int)
+0:133          Constant:
+0:133            0 (const int)
+0:133        subgroupInclusiveAdd ( global highp uint)
+0:133          direct index ( temp highp uint)
+0:133            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:133              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133                Constant:
+0:133                  0 (const int)
+0:133              Constant:
+0:133                2 (const int)
+0:133            Constant:
+0:133              0 (const int)
+0:134      move second child to first child ( temp highp 2-component vector of uint)
+0:134        vector swizzle ( temp highp 2-component vector of uint)
+0:134          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:134            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:134              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:134              Constant:
+0:134                3 (const int)
+0:134            Constant:
+0:134              2 (const int)
+0:134          Sequence
+0:134            Constant:
+0:134              0 (const int)
+0:134            Constant:
+0:134              1 (const int)
+0:134        subgroupInclusiveAdd ( global highp 2-component vector of uint)
+0:134          vector swizzle ( temp highp 2-component vector of uint)
+0:134            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:134              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:134                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:134                Constant:
+0:134                  1 (const int)
+0:134              Constant:
+0:134                2 (const int)
+0:134            Sequence
+0:134              Constant:
+0:134                0 (const int)
+0:134              Constant:
+0:134                1 (const int)
+0:135      move second child to first child ( temp highp 3-component vector of uint)
+0:135        vector swizzle ( temp highp 3-component vector of uint)
+0:135          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:135            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135              Constant:
+0:135                3 (const int)
+0:135            Constant:
+0:135              2 (const int)
+0:135          Sequence
+0:135            Constant:
+0:135              0 (const int)
+0:135            Constant:
+0:135              1 (const int)
+0:135            Constant:
+0:135              2 (const int)
+0:135        subgroupInclusiveAdd ( global highp 3-component vector of uint)
+0:135          vector swizzle ( temp highp 3-component vector of uint)
+0:135            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:135              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135                Constant:
+0:135                  2 (const int)
+0:135              Constant:
+0:135                2 (const int)
+0:135            Sequence
+0:135              Constant:
+0:135                0 (const int)
+0:135              Constant:
+0:135                1 (const int)
+0:135              Constant:
+0:135                2 (const int)
+0:136      move second child to first child ( temp highp 4-component vector of uint)
+0:136        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:136          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136            Constant:
+0:136              3 (const int)
+0:136          Constant:
+0:136            2 (const int)
+0:136        subgroupInclusiveAdd ( global highp 4-component vector of uint)
+0:136          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:136            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136              Constant:
+0:136                3 (const int)
+0:136            Constant:
+0:136              2 (const int)
+0:138      move second child to first child ( temp highp float)
+0:138        direct index ( temp highp float)
+0:138          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:138            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138              Constant:
+0:138                0 (const int)
+0:138            Constant:
+0:138              0 (const int)
+0:138          Constant:
+0:138            0 (const int)
+0:138        subgroupInclusiveMul ( global highp float)
+0:138          direct index ( temp highp float)
+0:138            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:138              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138                Constant:
+0:138                  0 (const int)
+0:138              Constant:
+0:138                0 (const int)
+0:138            Constant:
+0:138              0 (const int)
+0:139      move second child to first child ( temp highp 2-component vector of float)
+0:139        vector swizzle ( temp highp 2-component vector of float)
+0:139          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:139            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:139              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:139              Constant:
+0:139                0 (const int)
+0:139            Constant:
+0:139              0 (const int)
+0:139          Sequence
+0:139            Constant:
+0:139              0 (const int)
+0:139            Constant:
+0:139              1 (const int)
+0:139        subgroupInclusiveMul ( global highp 2-component vector of float)
+0:139          vector swizzle ( temp highp 2-component vector of float)
+0:139            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:139              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:139                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:139                Constant:
+0:139                  1 (const int)
+0:139              Constant:
+0:139                0 (const int)
+0:139            Sequence
+0:139              Constant:
+0:139                0 (const int)
+0:139              Constant:
+0:139                1 (const int)
+0:140      move second child to first child ( temp highp 3-component vector of float)
+0:140        vector swizzle ( temp highp 3-component vector of float)
+0:140          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:140            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140              Constant:
+0:140                0 (const int)
+0:140            Constant:
+0:140              0 (const int)
+0:140          Sequence
+0:140            Constant:
+0:140              0 (const int)
+0:140            Constant:
+0:140              1 (const int)
+0:140            Constant:
+0:140              2 (const int)
+0:140        subgroupInclusiveMul ( global highp 3-component vector of float)
+0:140          vector swizzle ( temp highp 3-component vector of float)
+0:140            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:140              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140                Constant:
+0:140                  2 (const int)
+0:140              Constant:
+0:140                0 (const int)
+0:140            Sequence
+0:140              Constant:
+0:140                0 (const int)
+0:140              Constant:
+0:140                1 (const int)
+0:140              Constant:
+0:140                2 (const int)
+0:141      move second child to first child ( temp highp 4-component vector of float)
+0:141        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:141          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141            Constant:
+0:141              0 (const int)
+0:141          Constant:
+0:141            0 (const int)
+0:141        subgroupInclusiveMul ( global highp 4-component vector of float)
+0:141          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:141            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141              Constant:
+0:141                3 (const int)
+0:141            Constant:
+0:141              0 (const int)
+0:143      move second child to first child ( temp highp int)
+0:143        direct index ( temp highp int)
+0:143          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:143            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143              Constant:
+0:143                1 (const int)
+0:143            Constant:
+0:143              1 (const int)
+0:143          Constant:
+0:143            0 (const int)
+0:143        subgroupInclusiveMul ( global highp int)
+0:143          direct index ( temp highp int)
+0:143            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:143              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143                Constant:
+0:143                  0 (const int)
+0:143              Constant:
+0:143                1 (const int)
+0:143            Constant:
+0:143              0 (const int)
+0:144      move second child to first child ( temp highp 2-component vector of int)
+0:144        vector swizzle ( temp highp 2-component vector of int)
+0:144          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:144            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:144              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:144              Constant:
+0:144                1 (const int)
+0:144            Constant:
+0:144              1 (const int)
+0:144          Sequence
+0:144            Constant:
+0:144              0 (const int)
+0:144            Constant:
+0:144              1 (const int)
+0:144        subgroupInclusiveMul ( global highp 2-component vector of int)
+0:144          vector swizzle ( temp highp 2-component vector of int)
+0:144            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:144              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:144                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:144                Constant:
+0:144                  1 (const int)
+0:144              Constant:
+0:144                1 (const int)
+0:144            Sequence
+0:144              Constant:
+0:144                0 (const int)
+0:144              Constant:
+0:144                1 (const int)
+0:145      move second child to first child ( temp highp 3-component vector of int)
+0:145        vector swizzle ( temp highp 3-component vector of int)
+0:145          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:145            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145              Constant:
+0:145                1 (const int)
+0:145            Constant:
+0:145              1 (const int)
+0:145          Sequence
+0:145            Constant:
+0:145              0 (const int)
+0:145            Constant:
+0:145              1 (const int)
+0:145            Constant:
+0:145              2 (const int)
+0:145        subgroupInclusiveMul ( global highp 3-component vector of int)
+0:145          vector swizzle ( temp highp 3-component vector of int)
+0:145            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:145              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145                Constant:
+0:145                  2 (const int)
+0:145              Constant:
+0:145                1 (const int)
+0:145            Sequence
+0:145              Constant:
+0:145                0 (const int)
+0:145              Constant:
+0:145                1 (const int)
+0:145              Constant:
+0:145                2 (const int)
+0:146      move second child to first child ( temp highp 4-component vector of int)
+0:146        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:146          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146            Constant:
+0:146              1 (const int)
+0:146          Constant:
+0:146            1 (const int)
+0:146        subgroupInclusiveMul ( global highp 4-component vector of int)
+0:146          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:146            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146              Constant:
+0:146                3 (const int)
+0:146            Constant:
+0:146              1 (const int)
+0:148      move second child to first child ( temp highp uint)
+0:148        direct index ( temp highp uint)
+0:148          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:148            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148              Constant:
+0:148                2 (const int)
+0:148            Constant:
+0:148              2 (const int)
+0:148          Constant:
+0:148            0 (const int)
+0:148        subgroupInclusiveMul ( global highp uint)
+0:148          direct index ( temp highp uint)
+0:148            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:148              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148                Constant:
+0:148                  0 (const int)
+0:148              Constant:
+0:148                2 (const int)
+0:148            Constant:
+0:148              0 (const int)
+0:149      move second child to first child ( temp highp 2-component vector of uint)
+0:149        vector swizzle ( temp highp 2-component vector of uint)
+0:149          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:149            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:149              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:149              Constant:
+0:149                2 (const int)
+0:149            Constant:
+0:149              2 (const int)
+0:149          Sequence
+0:149            Constant:
+0:149              0 (const int)
+0:149            Constant:
+0:149              1 (const int)
+0:149        subgroupInclusiveMul ( global highp 2-component vector of uint)
+0:149          vector swizzle ( temp highp 2-component vector of uint)
+0:149            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:149              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:149                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:149                Constant:
+0:149                  1 (const int)
+0:149              Constant:
+0:149                2 (const int)
+0:149            Sequence
+0:149              Constant:
+0:149                0 (const int)
+0:149              Constant:
+0:149                1 (const int)
+0:150      move second child to first child ( temp highp 3-component vector of uint)
+0:150        vector swizzle ( temp highp 3-component vector of uint)
+0:150          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:150            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150              Constant:
+0:150                2 (const int)
+0:150            Constant:
+0:150              2 (const int)
+0:150          Sequence
+0:150            Constant:
+0:150              0 (const int)
+0:150            Constant:
+0:150              1 (const int)
+0:150            Constant:
+0:150              2 (const int)
+0:150        subgroupInclusiveMul ( global highp 3-component vector of uint)
+0:150          vector swizzle ( temp highp 3-component vector of uint)
+0:150            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:150              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150                Constant:
+0:150                  2 (const int)
+0:150              Constant:
+0:150                2 (const int)
+0:150            Sequence
+0:150              Constant:
+0:150                0 (const int)
+0:150              Constant:
+0:150                1 (const int)
+0:150              Constant:
+0:150                2 (const int)
+0:151      move second child to first child ( temp highp 4-component vector of uint)
+0:151        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:151          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151            Constant:
+0:151              2 (const int)
+0:151          Constant:
+0:151            2 (const int)
+0:151        subgroupInclusiveMul ( global highp 4-component vector of uint)
+0:151          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:151            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151              Constant:
+0:151                3 (const int)
+0:151            Constant:
+0:151              2 (const int)
+0:153      move second child to first child ( temp highp float)
+0:153        direct index ( temp highp float)
+0:153          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:153            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153              Constant:
+0:153                3 (const int)
+0:153            Constant:
+0:153              0 (const int)
+0:153          Constant:
+0:153            0 (const int)
+0:153        subgroupInclusiveMin ( global highp float)
+0:153          direct index ( temp highp float)
+0:153            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:153              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153                Constant:
+0:153                  0 (const int)
+0:153              Constant:
+0:153                0 (const int)
+0:153            Constant:
+0:153              0 (const int)
+0:154      move second child to first child ( temp highp 2-component vector of float)
+0:154        vector swizzle ( temp highp 2-component vector of float)
+0:154          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:154            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:154              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:154              Constant:
+0:154                3 (const int)
+0:154            Constant:
+0:154              0 (const int)
+0:154          Sequence
+0:154            Constant:
+0:154              0 (const int)
+0:154            Constant:
+0:154              1 (const int)
+0:154        subgroupInclusiveMin ( global highp 2-component vector of float)
+0:154          vector swizzle ( temp highp 2-component vector of float)
+0:154            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:154              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:154                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:154                Constant:
+0:154                  1 (const int)
+0:154              Constant:
+0:154                0 (const int)
+0:154            Sequence
+0:154              Constant:
+0:154                0 (const int)
+0:154              Constant:
+0:154                1 (const int)
+0:155      move second child to first child ( temp highp 3-component vector of float)
+0:155        vector swizzle ( temp highp 3-component vector of float)
+0:155          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:155            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155              Constant:
+0:155                3 (const int)
+0:155            Constant:
+0:155              0 (const int)
+0:155          Sequence
+0:155            Constant:
+0:155              0 (const int)
+0:155            Constant:
+0:155              1 (const int)
+0:155            Constant:
+0:155              2 (const int)
+0:155        subgroupInclusiveMin ( global highp 3-component vector of float)
+0:155          vector swizzle ( temp highp 3-component vector of float)
+0:155            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:155              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155                Constant:
+0:155                  2 (const int)
+0:155              Constant:
+0:155                0 (const int)
+0:155            Sequence
+0:155              Constant:
+0:155                0 (const int)
+0:155              Constant:
+0:155                1 (const int)
+0:155              Constant:
+0:155                2 (const int)
+0:156      move second child to first child ( temp highp 4-component vector of float)
+0:156        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:156          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156            Constant:
+0:156              3 (const int)
+0:156          Constant:
+0:156            0 (const int)
+0:156        subgroupInclusiveMin ( global highp 4-component vector of float)
+0:156          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:156            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156              Constant:
+0:156                3 (const int)
+0:156            Constant:
+0:156              0 (const int)
+0:158      move second child to first child ( temp highp int)
+0:158        direct index ( temp highp int)
+0:158          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:158            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158              Constant:
+0:158                0 (const int)
+0:158            Constant:
+0:158              1 (const int)
+0:158          Constant:
+0:158            0 (const int)
+0:158        subgroupInclusiveMin ( global highp int)
+0:158          direct index ( temp highp int)
+0:158            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:158              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158                Constant:
+0:158                  0 (const int)
+0:158              Constant:
+0:158                1 (const int)
+0:158            Constant:
+0:158              0 (const int)
+0:159      move second child to first child ( temp highp 2-component vector of int)
+0:159        vector swizzle ( temp highp 2-component vector of int)
+0:159          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:159            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:159              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:159              Constant:
+0:159                0 (const int)
+0:159            Constant:
+0:159              1 (const int)
+0:159          Sequence
+0:159            Constant:
+0:159              0 (const int)
+0:159            Constant:
+0:159              1 (const int)
+0:159        subgroupInclusiveMin ( global highp 2-component vector of int)
+0:159          vector swizzle ( temp highp 2-component vector of int)
+0:159            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:159              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:159                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:159                Constant:
+0:159                  1 (const int)
+0:159              Constant:
+0:159                1 (const int)
+0:159            Sequence
+0:159              Constant:
+0:159                0 (const int)
+0:159              Constant:
+0:159                1 (const int)
+0:160      move second child to first child ( temp highp 3-component vector of int)
+0:160        vector swizzle ( temp highp 3-component vector of int)
+0:160          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:160            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160              Constant:
+0:160                0 (const int)
+0:160            Constant:
+0:160              1 (const int)
+0:160          Sequence
+0:160            Constant:
+0:160              0 (const int)
+0:160            Constant:
+0:160              1 (const int)
+0:160            Constant:
+0:160              2 (const int)
+0:160        subgroupInclusiveMin ( global highp 3-component vector of int)
+0:160          vector swizzle ( temp highp 3-component vector of int)
+0:160            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:160              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160                Constant:
+0:160                  2 (const int)
+0:160              Constant:
+0:160                1 (const int)
+0:160            Sequence
+0:160              Constant:
+0:160                0 (const int)
+0:160              Constant:
+0:160                1 (const int)
+0:160              Constant:
+0:160                2 (const int)
+0:161      move second child to first child ( temp highp 4-component vector of int)
+0:161        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:161          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161            Constant:
+0:161              0 (const int)
+0:161          Constant:
+0:161            1 (const int)
+0:161        subgroupInclusiveMin ( global highp 4-component vector of int)
+0:161          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:161            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161              Constant:
+0:161                3 (const int)
+0:161            Constant:
+0:161              1 (const int)
+0:163      move second child to first child ( temp highp uint)
+0:163        direct index ( temp highp uint)
+0:163          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:163            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163              Constant:
+0:163                1 (const int)
+0:163            Constant:
+0:163              2 (const int)
+0:163          Constant:
+0:163            0 (const int)
+0:163        subgroupInclusiveMin ( global highp uint)
+0:163          direct index ( temp highp uint)
+0:163            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:163              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163                Constant:
+0:163                  0 (const int)
+0:163              Constant:
+0:163                2 (const int)
+0:163            Constant:
+0:163              0 (const int)
+0:164      move second child to first child ( temp highp 2-component vector of uint)
+0:164        vector swizzle ( temp highp 2-component vector of uint)
+0:164          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:164            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:164              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:164              Constant:
+0:164                1 (const int)
+0:164            Constant:
+0:164              2 (const int)
+0:164          Sequence
+0:164            Constant:
+0:164              0 (const int)
+0:164            Constant:
+0:164              1 (const int)
+0:164        subgroupInclusiveMin ( global highp 2-component vector of uint)
+0:164          vector swizzle ( temp highp 2-component vector of uint)
+0:164            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:164              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:164                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:164                Constant:
+0:164                  1 (const int)
+0:164              Constant:
+0:164                2 (const int)
+0:164            Sequence
+0:164              Constant:
+0:164                0 (const int)
+0:164              Constant:
+0:164                1 (const int)
+0:165      move second child to first child ( temp highp 3-component vector of uint)
+0:165        vector swizzle ( temp highp 3-component vector of uint)
+0:165          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:165            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165              Constant:
+0:165                1 (const int)
+0:165            Constant:
+0:165              2 (const int)
+0:165          Sequence
+0:165            Constant:
+0:165              0 (const int)
+0:165            Constant:
+0:165              1 (const int)
+0:165            Constant:
+0:165              2 (const int)
+0:165        subgroupInclusiveMin ( global highp 3-component vector of uint)
+0:165          vector swizzle ( temp highp 3-component vector of uint)
+0:165            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:165              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165                Constant:
+0:165                  2 (const int)
+0:165              Constant:
+0:165                2 (const int)
+0:165            Sequence
+0:165              Constant:
+0:165                0 (const int)
+0:165              Constant:
+0:165                1 (const int)
+0:165              Constant:
+0:165                2 (const int)
+0:166      move second child to first child ( temp highp 4-component vector of uint)
+0:166        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:166          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166            Constant:
+0:166              1 (const int)
+0:166          Constant:
+0:166            2 (const int)
+0:166        subgroupInclusiveMin ( global highp 4-component vector of uint)
+0:166          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:166            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166              Constant:
+0:166                3 (const int)
+0:166            Constant:
+0:166              2 (const int)
+0:168      move second child to first child ( temp highp float)
+0:168        direct index ( temp highp float)
+0:168          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:168            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168              Constant:
+0:168                2 (const int)
+0:168            Constant:
+0:168              0 (const int)
+0:168          Constant:
+0:168            0 (const int)
+0:168        subgroupInclusiveMax ( global highp float)
+0:168          direct index ( temp highp float)
+0:168            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:168              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168                Constant:
+0:168                  0 (const int)
+0:168              Constant:
+0:168                0 (const int)
+0:168            Constant:
+0:168              0 (const int)
+0:169      move second child to first child ( temp highp 2-component vector of float)
+0:169        vector swizzle ( temp highp 2-component vector of float)
+0:169          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:169            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:169              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:169              Constant:
+0:169                2 (const int)
+0:169            Constant:
+0:169              0 (const int)
+0:169          Sequence
+0:169            Constant:
+0:169              0 (const int)
+0:169            Constant:
+0:169              1 (const int)
+0:169        subgroupInclusiveMax ( global highp 2-component vector of float)
+0:169          vector swizzle ( temp highp 2-component vector of float)
+0:169            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:169              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:169                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:169                Constant:
+0:169                  1 (const int)
+0:169              Constant:
+0:169                0 (const int)
+0:169            Sequence
+0:169              Constant:
+0:169                0 (const int)
+0:169              Constant:
+0:169                1 (const int)
+0:170      move second child to first child ( temp highp 3-component vector of float)
+0:170        vector swizzle ( temp highp 3-component vector of float)
+0:170          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:170            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170              Constant:
+0:170                2 (const int)
+0:170            Constant:
+0:170              0 (const int)
+0:170          Sequence
+0:170            Constant:
+0:170              0 (const int)
+0:170            Constant:
+0:170              1 (const int)
+0:170            Constant:
+0:170              2 (const int)
+0:170        subgroupInclusiveMax ( global highp 3-component vector of float)
+0:170          vector swizzle ( temp highp 3-component vector of float)
+0:170            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:170              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170                Constant:
+0:170                  2 (const int)
+0:170              Constant:
+0:170                0 (const int)
+0:170            Sequence
+0:170              Constant:
+0:170                0 (const int)
+0:170              Constant:
+0:170                1 (const int)
+0:170              Constant:
+0:170                2 (const int)
+0:171      move second child to first child ( temp highp 4-component vector of float)
+0:171        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:171          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171            Constant:
+0:171              2 (const int)
+0:171          Constant:
+0:171            0 (const int)
+0:171        subgroupInclusiveMax ( global highp 4-component vector of float)
+0:171          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:171            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171              Constant:
+0:171                3 (const int)
+0:171            Constant:
+0:171              0 (const int)
+0:173      move second child to first child ( temp highp int)
+0:173        direct index ( temp highp int)
+0:173          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:173            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173              Constant:
+0:173                3 (const int)
+0:173            Constant:
+0:173              1 (const int)
+0:173          Constant:
+0:173            0 (const int)
+0:173        subgroupInclusiveMax ( global highp int)
+0:173          direct index ( temp highp int)
+0:173            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:173              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173                Constant:
+0:173                  0 (const int)
+0:173              Constant:
+0:173                1 (const int)
+0:173            Constant:
+0:173              0 (const int)
+0:174      move second child to first child ( temp highp 2-component vector of int)
+0:174        vector swizzle ( temp highp 2-component vector of int)
+0:174          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:174            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:174              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:174              Constant:
+0:174                3 (const int)
+0:174            Constant:
+0:174              1 (const int)
+0:174          Sequence
+0:174            Constant:
+0:174              0 (const int)
+0:174            Constant:
+0:174              1 (const int)
+0:174        subgroupInclusiveMax ( global highp 2-component vector of int)
+0:174          vector swizzle ( temp highp 2-component vector of int)
+0:174            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:174              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:174                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:174                Constant:
+0:174                  1 (const int)
+0:174              Constant:
+0:174                1 (const int)
+0:174            Sequence
+0:174              Constant:
+0:174                0 (const int)
+0:174              Constant:
+0:174                1 (const int)
+0:175      move second child to first child ( temp highp 3-component vector of int)
+0:175        vector swizzle ( temp highp 3-component vector of int)
+0:175          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:175            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175              Constant:
+0:175                3 (const int)
+0:175            Constant:
+0:175              1 (const int)
+0:175          Sequence
+0:175            Constant:
+0:175              0 (const int)
+0:175            Constant:
+0:175              1 (const int)
+0:175            Constant:
+0:175              2 (const int)
+0:175        subgroupInclusiveMax ( global highp 3-component vector of int)
+0:175          vector swizzle ( temp highp 3-component vector of int)
+0:175            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:175              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175                Constant:
+0:175                  2 (const int)
+0:175              Constant:
+0:175                1 (const int)
+0:175            Sequence
+0:175              Constant:
+0:175                0 (const int)
+0:175              Constant:
+0:175                1 (const int)
+0:175              Constant:
+0:175                2 (const int)
+0:176      move second child to first child ( temp highp 4-component vector of int)
+0:176        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:176          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176            Constant:
+0:176              3 (const int)
+0:176          Constant:
+0:176            1 (const int)
+0:176        subgroupInclusiveMax ( global highp 4-component vector of int)
+0:176          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:176            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176              Constant:
+0:176                3 (const int)
+0:176            Constant:
+0:176              1 (const int)
+0:178      move second child to first child ( temp highp uint)
+0:178        direct index ( temp highp uint)
+0:178          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:178            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178              Constant:
+0:178                0 (const int)
+0:178            Constant:
+0:178              2 (const int)
+0:178          Constant:
+0:178            0 (const int)
+0:178        subgroupInclusiveMax ( global highp uint)
+0:178          direct index ( temp highp uint)
+0:178            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:178              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178                Constant:
+0:178                  0 (const int)
+0:178              Constant:
+0:178                2 (const int)
+0:178            Constant:
+0:178              0 (const int)
+0:179      move second child to first child ( temp highp 2-component vector of uint)
+0:179        vector swizzle ( temp highp 2-component vector of uint)
+0:179          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:179            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:179              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:179              Constant:
+0:179                0 (const int)
+0:179            Constant:
+0:179              2 (const int)
+0:179          Sequence
+0:179            Constant:
+0:179              0 (const int)
+0:179            Constant:
+0:179              1 (const int)
+0:179        subgroupInclusiveMax ( global highp 2-component vector of uint)
+0:179          vector swizzle ( temp highp 2-component vector of uint)
+0:179            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:179              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:179                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:179                Constant:
+0:179                  1 (const int)
+0:179              Constant:
+0:179                2 (const int)
+0:179            Sequence
+0:179              Constant:
+0:179                0 (const int)
+0:179              Constant:
+0:179                1 (const int)
+0:180      move second child to first child ( temp highp 3-component vector of uint)
+0:180        vector swizzle ( temp highp 3-component vector of uint)
+0:180          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:180            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180              Constant:
+0:180                0 (const int)
+0:180            Constant:
+0:180              2 (const int)
+0:180          Sequence
+0:180            Constant:
+0:180              0 (const int)
+0:180            Constant:
+0:180              1 (const int)
+0:180            Constant:
+0:180              2 (const int)
+0:180        subgroupInclusiveMax ( global highp 3-component vector of uint)
+0:180          vector swizzle ( temp highp 3-component vector of uint)
+0:180            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:180              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180                Constant:
+0:180                  2 (const int)
+0:180              Constant:
+0:180                2 (const int)
+0:180            Sequence
+0:180              Constant:
+0:180                0 (const int)
+0:180              Constant:
+0:180                1 (const int)
+0:180              Constant:
+0:180                2 (const int)
+0:181      move second child to first child ( temp highp 4-component vector of uint)
+0:181        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:181          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181            Constant:
+0:181              0 (const int)
+0:181          Constant:
+0:181            2 (const int)
+0:181        subgroupInclusiveMax ( global highp 4-component vector of uint)
+0:181          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:181            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181              Constant:
+0:181                3 (const int)
+0:181            Constant:
+0:181              2 (const int)
+0:183      move second child to first child ( temp highp int)
+0:183        direct index ( temp highp int)
+0:183          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:183            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183              Constant:
+0:183                1 (const int)
+0:183            Constant:
+0:183              1 (const int)
+0:183          Constant:
+0:183            0 (const int)
+0:183        subgroupInclusiveAnd ( global highp int)
+0:183          direct index ( temp highp int)
+0:183            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:183              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183                Constant:
+0:183                  0 (const int)
+0:183              Constant:
+0:183                1 (const int)
+0:183            Constant:
+0:183              0 (const int)
+0:184      move second child to first child ( temp highp 2-component vector of int)
+0:184        vector swizzle ( temp highp 2-component vector of int)
+0:184          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:184            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:184              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:184              Constant:
+0:184                1 (const int)
+0:184            Constant:
+0:184              1 (const int)
+0:184          Sequence
+0:184            Constant:
+0:184              0 (const int)
+0:184            Constant:
+0:184              1 (const int)
+0:184        subgroupInclusiveAnd ( global highp 2-component vector of int)
+0:184          vector swizzle ( temp highp 2-component vector of int)
+0:184            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:184              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:184                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:184                Constant:
+0:184                  1 (const int)
+0:184              Constant:
+0:184                1 (const int)
+0:184            Sequence
+0:184              Constant:
+0:184                0 (const int)
+0:184              Constant:
+0:184                1 (const int)
+0:185      move second child to first child ( temp highp 3-component vector of int)
+0:185        vector swizzle ( temp highp 3-component vector of int)
+0:185          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:185            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185              Constant:
+0:185                1 (const int)
+0:185            Constant:
+0:185              1 (const int)
+0:185          Sequence
+0:185            Constant:
+0:185              0 (const int)
+0:185            Constant:
+0:185              1 (const int)
+0:185            Constant:
+0:185              2 (const int)
+0:185        subgroupInclusiveAnd ( global highp 3-component vector of int)
+0:185          vector swizzle ( temp highp 3-component vector of int)
+0:185            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:185              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185                Constant:
+0:185                  2 (const int)
+0:185              Constant:
+0:185                1 (const int)
+0:185            Sequence
+0:185              Constant:
+0:185                0 (const int)
+0:185              Constant:
+0:185                1 (const int)
+0:185              Constant:
+0:185                2 (const int)
+0:186      move second child to first child ( temp highp 4-component vector of int)
+0:186        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:186          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186            Constant:
+0:186              1 (const int)
+0:186          Constant:
+0:186            1 (const int)
+0:186        subgroupInclusiveAnd ( global highp 4-component vector of int)
+0:186          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:186            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186              Constant:
+0:186                3 (const int)
+0:186            Constant:
+0:186              1 (const int)
+0:188      move second child to first child ( temp highp uint)
+0:188        direct index ( temp highp uint)
+0:188          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:188            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188              Constant:
+0:188                2 (const int)
+0:188            Constant:
+0:188              2 (const int)
+0:188          Constant:
+0:188            0 (const int)
+0:188        subgroupInclusiveAnd ( global highp uint)
+0:188          direct index ( temp highp uint)
+0:188            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:188              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188                Constant:
+0:188                  0 (const int)
+0:188              Constant:
+0:188                2 (const int)
+0:188            Constant:
+0:188              0 (const int)
+0:189      move second child to first child ( temp highp 2-component vector of uint)
+0:189        vector swizzle ( temp highp 2-component vector of uint)
+0:189          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:189            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:189              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:189              Constant:
+0:189                2 (const int)
+0:189            Constant:
+0:189              2 (const int)
+0:189          Sequence
+0:189            Constant:
+0:189              0 (const int)
+0:189            Constant:
+0:189              1 (const int)
+0:189        subgroupInclusiveAnd ( global highp 2-component vector of uint)
+0:189          vector swizzle ( temp highp 2-component vector of uint)
+0:189            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:189              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:189                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:189                Constant:
+0:189                  1 (const int)
+0:189              Constant:
+0:189                2 (const int)
+0:189            Sequence
+0:189              Constant:
+0:189                0 (const int)
+0:189              Constant:
+0:189                1 (const int)
+0:190      move second child to first child ( temp highp 3-component vector of uint)
+0:190        vector swizzle ( temp highp 3-component vector of uint)
+0:190          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:190            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190              Constant:
+0:190                2 (const int)
+0:190            Constant:
+0:190              2 (const int)
+0:190          Sequence
+0:190            Constant:
+0:190              0 (const int)
+0:190            Constant:
+0:190              1 (const int)
+0:190            Constant:
+0:190              2 (const int)
+0:190        subgroupInclusiveAnd ( global highp 3-component vector of uint)
+0:190          vector swizzle ( temp highp 3-component vector of uint)
+0:190            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:190              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190                Constant:
+0:190                  2 (const int)
+0:190              Constant:
+0:190                2 (const int)
+0:190            Sequence
+0:190              Constant:
+0:190                0 (const int)
+0:190              Constant:
+0:190                1 (const int)
+0:190              Constant:
+0:190                2 (const int)
+0:191      move second child to first child ( temp highp 4-component vector of uint)
+0:191        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:191          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191            Constant:
+0:191              2 (const int)
+0:191          Constant:
+0:191            2 (const int)
+0:191        subgroupInclusiveAnd ( global highp 4-component vector of uint)
+0:191          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:191            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191              Constant:
+0:191                3 (const int)
+0:191            Constant:
+0:191              2 (const int)
+0:193      move second child to first child ( temp highp int)
+0:193        direct index ( temp highp int)
+0:193          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:193            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193              Constant:
+0:193                3 (const int)
+0:193            Constant:
+0:193              1 (const int)
+0:193          Constant:
+0:193            0 (const int)
+0:193        Convert bool to int ( temp highp int)
+0:193          subgroupInclusiveAnd ( global bool)
+0:193            Compare Less Than ( temp bool)
+0:193              direct index ( temp highp int)
+0:193                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:193                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193                    Constant:
+0:193                      0 (const int)
+0:193                  Constant:
+0:193                    1 (const int)
+0:193                Constant:
+0:193                  0 (const int)
+0:193              Constant:
+0:193                0 (const int)
+0:194      move second child to first child ( temp highp 2-component vector of int)
+0:194        vector swizzle ( temp highp 2-component vector of int)
+0:194          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:194            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:194              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:194              Constant:
+0:194                3 (const int)
+0:194            Constant:
+0:194              1 (const int)
+0:194          Sequence
+0:194            Constant:
+0:194              0 (const int)
+0:194            Constant:
+0:194              1 (const int)
+0:194        Convert bool to int ( temp highp 2-component vector of int)
+0:194          subgroupInclusiveAnd ( global 2-component vector of bool)
+0:194            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:194              vector swizzle ( temp highp 2-component vector of int)
+0:194                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:194                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:194                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:194                    Constant:
+0:194                      1 (const int)
+0:194                  Constant:
+0:194                    1 (const int)
+0:194                Sequence
+0:194                  Constant:
+0:194                    0 (const int)
+0:194                  Constant:
+0:194                    1 (const int)
+0:194              Constant:
+0:194                0 (const int)
+0:194                0 (const int)
+0:195      move second child to first child ( temp highp 3-component vector of int)
+0:195        vector swizzle ( temp highp 3-component vector of int)
+0:195          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:195            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195              Constant:
+0:195                3 (const int)
+0:195            Constant:
+0:195              1 (const int)
+0:195          Sequence
+0:195            Constant:
+0:195              0 (const int)
+0:195            Constant:
+0:195              1 (const int)
+0:195            Constant:
+0:195              2 (const int)
+0:195        Convert bool to int ( temp highp 3-component vector of int)
+0:195          subgroupInclusiveAnd ( global 3-component vector of bool)
+0:195            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:195              vector swizzle ( temp highp 3-component vector of int)
+0:195                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:195                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195                    Constant:
+0:195                      1 (const int)
+0:195                  Constant:
+0:195                    1 (const int)
+0:195                Sequence
+0:195                  Constant:
+0:195                    0 (const int)
+0:195                  Constant:
+0:195                    1 (const int)
+0:195                  Constant:
+0:195                    2 (const int)
+0:195              Constant:
+0:195                0 (const int)
+0:195                0 (const int)
+0:195                0 (const int)
+0:196      move second child to first child ( temp highp 4-component vector of int)
+0:196        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:196          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196            Constant:
+0:196              3 (const int)
+0:196          Constant:
+0:196            1 (const int)
+0:196        Convert bool to int ( temp highp 4-component vector of int)
+0:196          subgroupInclusiveAnd ( global 4-component vector of bool)
+0:196            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:196              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:196                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196                  Constant:
+0:196                    1 (const int)
+0:196                Constant:
+0:196                  1 (const int)
+0:196              Constant:
+0:196                0 (const int)
+0:196                0 (const int)
+0:196                0 (const int)
+0:196                0 (const int)
+0:198      move second child to first child ( temp highp int)
+0:198        direct index ( temp highp int)
+0:198          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:198            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198              Constant:
+0:198                0 (const int)
+0:198            Constant:
+0:198              1 (const int)
+0:198          Constant:
+0:198            0 (const int)
+0:198        subgroupInclusiveOr ( global highp int)
+0:198          direct index ( temp highp int)
+0:198            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:198              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198                Constant:
+0:198                  0 (const int)
+0:198              Constant:
+0:198                1 (const int)
+0:198            Constant:
+0:198              0 (const int)
+0:199      move second child to first child ( temp highp 2-component vector of int)
+0:199        vector swizzle ( temp highp 2-component vector of int)
+0:199          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:199            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:199              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:199              Constant:
+0:199                0 (const int)
+0:199            Constant:
+0:199              1 (const int)
+0:199          Sequence
+0:199            Constant:
+0:199              0 (const int)
+0:199            Constant:
+0:199              1 (const int)
+0:199        subgroupInclusiveOr ( global highp 2-component vector of int)
+0:199          vector swizzle ( temp highp 2-component vector of int)
+0:199            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:199              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:199                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:199                Constant:
+0:199                  1 (const int)
+0:199              Constant:
+0:199                1 (const int)
+0:199            Sequence
+0:199              Constant:
+0:199                0 (const int)
+0:199              Constant:
+0:199                1 (const int)
+0:200      move second child to first child ( temp highp 3-component vector of int)
+0:200        vector swizzle ( temp highp 3-component vector of int)
+0:200          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:200            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200              Constant:
+0:200                0 (const int)
+0:200            Constant:
+0:200              1 (const int)
+0:200          Sequence
+0:200            Constant:
+0:200              0 (const int)
+0:200            Constant:
+0:200              1 (const int)
+0:200            Constant:
+0:200              2 (const int)
+0:200        subgroupInclusiveOr ( global highp 3-component vector of int)
+0:200          vector swizzle ( temp highp 3-component vector of int)
+0:200            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:200              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200                Constant:
+0:200                  2 (const int)
+0:200              Constant:
+0:200                1 (const int)
+0:200            Sequence
+0:200              Constant:
+0:200                0 (const int)
+0:200              Constant:
+0:200                1 (const int)
+0:200              Constant:
+0:200                2 (const int)
+0:201      move second child to first child ( temp highp 4-component vector of int)
+0:201        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:201          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201            Constant:
+0:201              0 (const int)
+0:201          Constant:
+0:201            1 (const int)
+0:201        subgroupInclusiveOr ( global highp 4-component vector of int)
+0:201          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:201            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201              Constant:
+0:201                3 (const int)
+0:201            Constant:
+0:201              1 (const int)
+0:203      move second child to first child ( temp highp uint)
+0:203        direct index ( temp highp uint)
+0:203          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:203            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203              Constant:
+0:203                1 (const int)
+0:203            Constant:
+0:203              2 (const int)
+0:203          Constant:
+0:203            0 (const int)
+0:203        subgroupInclusiveOr ( global highp uint)
+0:203          direct index ( temp highp uint)
+0:203            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:203              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203                Constant:
+0:203                  0 (const int)
+0:203              Constant:
+0:203                2 (const int)
+0:203            Constant:
+0:203              0 (const int)
+0:204      move second child to first child ( temp highp 2-component vector of uint)
+0:204        vector swizzle ( temp highp 2-component vector of uint)
+0:204          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:204            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:204              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:204              Constant:
+0:204                1 (const int)
+0:204            Constant:
+0:204              2 (const int)
+0:204          Sequence
+0:204            Constant:
+0:204              0 (const int)
+0:204            Constant:
+0:204              1 (const int)
+0:204        subgroupInclusiveOr ( global highp 2-component vector of uint)
+0:204          vector swizzle ( temp highp 2-component vector of uint)
+0:204            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:204              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:204                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:204                Constant:
+0:204                  1 (const int)
+0:204              Constant:
+0:204                2 (const int)
+0:204            Sequence
+0:204              Constant:
+0:204                0 (const int)
+0:204              Constant:
+0:204                1 (const int)
+0:205      move second child to first child ( temp highp 3-component vector of uint)
+0:205        vector swizzle ( temp highp 3-component vector of uint)
+0:205          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:205            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205              Constant:
+0:205                1 (const int)
+0:205            Constant:
+0:205              2 (const int)
+0:205          Sequence
+0:205            Constant:
+0:205              0 (const int)
+0:205            Constant:
+0:205              1 (const int)
+0:205            Constant:
+0:205              2 (const int)
+0:205        subgroupInclusiveOr ( global highp 3-component vector of uint)
+0:205          vector swizzle ( temp highp 3-component vector of uint)
+0:205            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:205              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205                Constant:
+0:205                  2 (const int)
+0:205              Constant:
+0:205                2 (const int)
+0:205            Sequence
+0:205              Constant:
+0:205                0 (const int)
+0:205              Constant:
+0:205                1 (const int)
+0:205              Constant:
+0:205                2 (const int)
+0:206      move second child to first child ( temp highp 4-component vector of uint)
+0:206        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:206          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206            Constant:
+0:206              1 (const int)
+0:206          Constant:
+0:206            2 (const int)
+0:206        subgroupInclusiveOr ( global highp 4-component vector of uint)
+0:206          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:206            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206              Constant:
+0:206                3 (const int)
+0:206            Constant:
+0:206              2 (const int)
+0:208      move second child to first child ( temp highp int)
+0:208        direct index ( temp highp int)
+0:208          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:208            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208              Constant:
+0:208                2 (const int)
+0:208            Constant:
+0:208              1 (const int)
+0:208          Constant:
+0:208            0 (const int)
+0:208        Convert bool to int ( temp highp int)
+0:208          subgroupInclusiveOr ( global bool)
+0:208            Compare Less Than ( temp bool)
+0:208              direct index ( temp highp int)
+0:208                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:208                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208                    Constant:
+0:208                      0 (const int)
+0:208                  Constant:
+0:208                    1 (const int)
+0:208                Constant:
+0:208                  0 (const int)
+0:208              Constant:
+0:208                0 (const int)
+0:209      move second child to first child ( temp highp 2-component vector of int)
+0:209        vector swizzle ( temp highp 2-component vector of int)
+0:209          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:209            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:209              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:209              Constant:
+0:209                2 (const int)
+0:209            Constant:
+0:209              1 (const int)
+0:209          Sequence
+0:209            Constant:
+0:209              0 (const int)
+0:209            Constant:
+0:209              1 (const int)
+0:209        Convert bool to int ( temp highp 2-component vector of int)
+0:209          subgroupInclusiveOr ( global 2-component vector of bool)
+0:209            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:209              vector swizzle ( temp highp 2-component vector of int)
+0:209                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:209                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:209                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:209                    Constant:
+0:209                      1 (const int)
+0:209                  Constant:
+0:209                    1 (const int)
+0:209                Sequence
+0:209                  Constant:
+0:209                    0 (const int)
+0:209                  Constant:
+0:209                    1 (const int)
+0:209              Constant:
+0:209                0 (const int)
+0:209                0 (const int)
+0:210      move second child to first child ( temp highp 3-component vector of int)
+0:210        vector swizzle ( temp highp 3-component vector of int)
+0:210          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:210            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210              Constant:
+0:210                2 (const int)
+0:210            Constant:
+0:210              1 (const int)
+0:210          Sequence
+0:210            Constant:
+0:210              0 (const int)
+0:210            Constant:
+0:210              1 (const int)
+0:210            Constant:
+0:210              2 (const int)
+0:210        Convert bool to int ( temp highp 3-component vector of int)
+0:210          subgroupInclusiveOr ( global 3-component vector of bool)
+0:210            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:210              vector swizzle ( temp highp 3-component vector of int)
+0:210                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:210                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210                    Constant:
+0:210                      1 (const int)
+0:210                  Constant:
+0:210                    1 (const int)
+0:210                Sequence
+0:210                  Constant:
+0:210                    0 (const int)
+0:210                  Constant:
+0:210                    1 (const int)
+0:210                  Constant:
+0:210                    2 (const int)
+0:210              Constant:
+0:210                0 (const int)
+0:210                0 (const int)
+0:210                0 (const int)
+0:211      move second child to first child ( temp highp 4-component vector of int)
+0:211        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:211          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211            Constant:
+0:211              2 (const int)
+0:211          Constant:
+0:211            1 (const int)
+0:211        Convert bool to int ( temp highp 4-component vector of int)
+0:211          subgroupInclusiveOr ( global 4-component vector of bool)
+0:211            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:211              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:211                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211                  Constant:
+0:211                    1 (const int)
+0:211                Constant:
+0:211                  1 (const int)
+0:211              Constant:
+0:211                0 (const int)
+0:211                0 (const int)
+0:211                0 (const int)
+0:211                0 (const int)
+0:213      move second child to first child ( temp highp int)
+0:213        direct index ( temp highp int)
+0:213          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:213            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213              Constant:
+0:213                3 (const int)
+0:213            Constant:
+0:213              1 (const int)
+0:213          Constant:
+0:213            0 (const int)
+0:213        subgroupInclusiveXor ( global highp int)
+0:213          direct index ( temp highp int)
+0:213            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:213              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213                Constant:
+0:213                  0 (const int)
+0:213              Constant:
+0:213                1 (const int)
+0:213            Constant:
+0:213              0 (const int)
+0:214      move second child to first child ( temp highp 2-component vector of int)
+0:214        vector swizzle ( temp highp 2-component vector of int)
+0:214          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:214            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:214              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:214              Constant:
+0:214                3 (const int)
+0:214            Constant:
+0:214              1 (const int)
+0:214          Sequence
+0:214            Constant:
+0:214              0 (const int)
+0:214            Constant:
+0:214              1 (const int)
+0:214        subgroupInclusiveXor ( global highp 2-component vector of int)
+0:214          vector swizzle ( temp highp 2-component vector of int)
+0:214            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:214              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:214                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:214                Constant:
+0:214                  1 (const int)
+0:214              Constant:
+0:214                1 (const int)
+0:214            Sequence
+0:214              Constant:
+0:214                0 (const int)
+0:214              Constant:
+0:214                1 (const int)
+0:215      move second child to first child ( temp highp 3-component vector of int)
+0:215        vector swizzle ( temp highp 3-component vector of int)
+0:215          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:215            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215              Constant:
+0:215                3 (const int)
+0:215            Constant:
+0:215              1 (const int)
+0:215          Sequence
+0:215            Constant:
+0:215              0 (const int)
+0:215            Constant:
+0:215              1 (const int)
+0:215            Constant:
+0:215              2 (const int)
+0:215        subgroupInclusiveXor ( global highp 3-component vector of int)
+0:215          vector swizzle ( temp highp 3-component vector of int)
+0:215            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:215              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215                Constant:
+0:215                  2 (const int)
+0:215              Constant:
+0:215                1 (const int)
+0:215            Sequence
+0:215              Constant:
+0:215                0 (const int)
+0:215              Constant:
+0:215                1 (const int)
+0:215              Constant:
+0:215                2 (const int)
+0:216      move second child to first child ( temp highp 4-component vector of int)
+0:216        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:216          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216            Constant:
+0:216              3 (const int)
+0:216          Constant:
+0:216            1 (const int)
+0:216        subgroupInclusiveXor ( global highp 4-component vector of int)
+0:216          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:216            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216              Constant:
+0:216                3 (const int)
+0:216            Constant:
+0:216              1 (const int)
+0:218      move second child to first child ( temp highp uint)
+0:218        direct index ( temp highp uint)
+0:218          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:218            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218              Constant:
+0:218                0 (const int)
+0:218            Constant:
+0:218              2 (const int)
+0:218          Constant:
+0:218            0 (const int)
+0:218        subgroupInclusiveXor ( global highp uint)
+0:218          direct index ( temp highp uint)
+0:218            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:218              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218                Constant:
+0:218                  0 (const int)
+0:218              Constant:
+0:218                2 (const int)
+0:218            Constant:
+0:218              0 (const int)
+0:219      move second child to first child ( temp highp 2-component vector of uint)
+0:219        vector swizzle ( temp highp 2-component vector of uint)
+0:219          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:219            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:219              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:219              Constant:
+0:219                0 (const int)
+0:219            Constant:
+0:219              2 (const int)
+0:219          Sequence
+0:219            Constant:
+0:219              0 (const int)
+0:219            Constant:
+0:219              1 (const int)
+0:219        subgroupInclusiveXor ( global highp 2-component vector of uint)
+0:219          vector swizzle ( temp highp 2-component vector of uint)
+0:219            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:219              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:219                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:219                Constant:
+0:219                  1 (const int)
+0:219              Constant:
+0:219                2 (const int)
+0:219            Sequence
+0:219              Constant:
+0:219                0 (const int)
+0:219              Constant:
+0:219                1 (const int)
+0:220      move second child to first child ( temp highp 3-component vector of uint)
+0:220        vector swizzle ( temp highp 3-component vector of uint)
+0:220          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:220            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220              Constant:
+0:220                0 (const int)
+0:220            Constant:
+0:220              2 (const int)
+0:220          Sequence
+0:220            Constant:
+0:220              0 (const int)
+0:220            Constant:
+0:220              1 (const int)
+0:220            Constant:
+0:220              2 (const int)
+0:220        subgroupInclusiveXor ( global highp 3-component vector of uint)
+0:220          vector swizzle ( temp highp 3-component vector of uint)
+0:220            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:220              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220                Constant:
+0:220                  2 (const int)
+0:220              Constant:
+0:220                2 (const int)
+0:220            Sequence
+0:220              Constant:
+0:220                0 (const int)
+0:220              Constant:
+0:220                1 (const int)
+0:220              Constant:
+0:220                2 (const int)
+0:221      move second child to first child ( temp highp 4-component vector of uint)
+0:221        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:221          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221            Constant:
+0:221              0 (const int)
+0:221          Constant:
+0:221            2 (const int)
+0:221        subgroupInclusiveXor ( global highp 4-component vector of uint)
+0:221          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:221            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221              Constant:
+0:221                3 (const int)
+0:221            Constant:
+0:221              2 (const int)
+0:223      move second child to first child ( temp highp int)
+0:223        direct index ( temp highp int)
+0:223          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:223            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223              Constant:
+0:223                1 (const int)
+0:223            Constant:
+0:223              1 (const int)
+0:223          Constant:
+0:223            0 (const int)
+0:223        Convert bool to int ( temp highp int)
+0:223          subgroupInclusiveXor ( global bool)
+0:223            Compare Less Than ( temp bool)
+0:223              direct index ( temp highp int)
+0:223                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:223                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223                    Constant:
+0:223                      0 (const int)
+0:223                  Constant:
+0:223                    1 (const int)
+0:223                Constant:
+0:223                  0 (const int)
+0:223              Constant:
+0:223                0 (const int)
+0:224      move second child to first child ( temp highp 2-component vector of int)
+0:224        vector swizzle ( temp highp 2-component vector of int)
+0:224          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:224            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:224              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:224              Constant:
+0:224                1 (const int)
+0:224            Constant:
+0:224              1 (const int)
+0:224          Sequence
+0:224            Constant:
+0:224              0 (const int)
+0:224            Constant:
+0:224              1 (const int)
+0:224        Convert bool to int ( temp highp 2-component vector of int)
+0:224          subgroupInclusiveXor ( global 2-component vector of bool)
+0:224            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:224              vector swizzle ( temp highp 2-component vector of int)
+0:224                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:224                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:224                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:224                    Constant:
+0:224                      1 (const int)
+0:224                  Constant:
+0:224                    1 (const int)
+0:224                Sequence
+0:224                  Constant:
+0:224                    0 (const int)
+0:224                  Constant:
+0:224                    1 (const int)
+0:224              Constant:
+0:224                0 (const int)
+0:224                0 (const int)
+0:225      move second child to first child ( temp highp 3-component vector of int)
+0:225        vector swizzle ( temp highp 3-component vector of int)
+0:225          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:225            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225              Constant:
+0:225                1 (const int)
+0:225            Constant:
+0:225              1 (const int)
+0:225          Sequence
+0:225            Constant:
+0:225              0 (const int)
+0:225            Constant:
+0:225              1 (const int)
+0:225            Constant:
+0:225              2 (const int)
+0:225        Convert bool to int ( temp highp 3-component vector of int)
+0:225          subgroupInclusiveXor ( global 3-component vector of bool)
+0:225            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:225              vector swizzle ( temp highp 3-component vector of int)
+0:225                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:225                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225                    Constant:
+0:225                      1 (const int)
+0:225                  Constant:
+0:225                    1 (const int)
+0:225                Sequence
+0:225                  Constant:
+0:225                    0 (const int)
+0:225                  Constant:
+0:225                    1 (const int)
+0:225                  Constant:
+0:225                    2 (const int)
+0:225              Constant:
+0:225                0 (const int)
+0:225                0 (const int)
+0:225                0 (const int)
+0:226      move second child to first child ( temp highp 4-component vector of int)
+0:226        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:226          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226            Constant:
+0:226              1 (const int)
+0:226          Constant:
+0:226            1 (const int)
+0:226        Convert bool to int ( temp highp 4-component vector of int)
+0:226          subgroupInclusiveXor ( global 4-component vector of bool)
+0:226            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:226              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:226                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226                  Constant:
+0:226                    1 (const int)
+0:226                Constant:
+0:226                  1 (const int)
+0:226              Constant:
+0:226                0 (const int)
+0:226                0 (const int)
+0:226                0 (const int)
+0:226                0 (const int)
+0:228      move second child to first child ( temp highp float)
+0:228        direct index ( temp highp float)
+0:228          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:228            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228              Constant:
+0:228                2 (const int)
+0:228            Constant:
+0:228              0 (const int)
+0:228          Constant:
+0:228            0 (const int)
+0:228        subgroupExclusiveAdd ( global highp float)
+0:228          direct index ( temp highp float)
+0:228            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:228              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228                Constant:
+0:228                  0 (const int)
+0:228              Constant:
+0:228                0 (const int)
+0:228            Constant:
+0:228              0 (const int)
+0:229      move second child to first child ( temp highp 2-component vector of float)
+0:229        vector swizzle ( temp highp 2-component vector of float)
+0:229          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:229            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:229              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:229              Constant:
+0:229                2 (const int)
+0:229            Constant:
+0:229              0 (const int)
+0:229          Sequence
+0:229            Constant:
+0:229              0 (const int)
+0:229            Constant:
+0:229              1 (const int)
+0:229        subgroupExclusiveAdd ( global highp 2-component vector of float)
+0:229          vector swizzle ( temp highp 2-component vector of float)
+0:229            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:229              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:229                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:229                Constant:
+0:229                  1 (const int)
+0:229              Constant:
+0:229                0 (const int)
+0:229            Sequence
+0:229              Constant:
+0:229                0 (const int)
+0:229              Constant:
+0:229                1 (const int)
+0:230      move second child to first child ( temp highp 3-component vector of float)
+0:230        vector swizzle ( temp highp 3-component vector of float)
+0:230          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:230            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230              Constant:
+0:230                2 (const int)
+0:230            Constant:
+0:230              0 (const int)
+0:230          Sequence
+0:230            Constant:
+0:230              0 (const int)
+0:230            Constant:
+0:230              1 (const int)
+0:230            Constant:
+0:230              2 (const int)
+0:230        subgroupExclusiveAdd ( global highp 3-component vector of float)
+0:230          vector swizzle ( temp highp 3-component vector of float)
+0:230            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:230              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230                Constant:
+0:230                  2 (const int)
+0:230              Constant:
+0:230                0 (const int)
+0:230            Sequence
+0:230              Constant:
+0:230                0 (const int)
+0:230              Constant:
+0:230                1 (const int)
+0:230              Constant:
+0:230                2 (const int)
+0:231      move second child to first child ( temp highp 4-component vector of float)
+0:231        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:231          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231            Constant:
+0:231              2 (const int)
+0:231          Constant:
+0:231            0 (const int)
+0:231        subgroupExclusiveAdd ( global highp 4-component vector of float)
+0:231          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:231            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231              Constant:
+0:231                3 (const int)
+0:231            Constant:
+0:231              0 (const int)
+0:233      move second child to first child ( temp highp int)
+0:233        direct index ( temp highp int)
+0:233          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:233            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233              Constant:
+0:233                3 (const int)
+0:233            Constant:
+0:233              1 (const int)
+0:233          Constant:
+0:233            0 (const int)
+0:233        subgroupExclusiveAdd ( global highp int)
+0:233          direct index ( temp highp int)
+0:233            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:233              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233                Constant:
+0:233                  0 (const int)
+0:233              Constant:
+0:233                1 (const int)
+0:233            Constant:
+0:233              0 (const int)
+0:234      move second child to first child ( temp highp 2-component vector of int)
+0:234        vector swizzle ( temp highp 2-component vector of int)
+0:234          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:234            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:234              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:234              Constant:
+0:234                3 (const int)
+0:234            Constant:
+0:234              1 (const int)
+0:234          Sequence
+0:234            Constant:
+0:234              0 (const int)
+0:234            Constant:
+0:234              1 (const int)
+0:234        subgroupExclusiveAdd ( global highp 2-component vector of int)
+0:234          vector swizzle ( temp highp 2-component vector of int)
+0:234            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:234              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:234                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:234                Constant:
+0:234                  1 (const int)
+0:234              Constant:
+0:234                1 (const int)
+0:234            Sequence
+0:234              Constant:
+0:234                0 (const int)
+0:234              Constant:
+0:234                1 (const int)
+0:235      move second child to first child ( temp highp 3-component vector of int)
+0:235        vector swizzle ( temp highp 3-component vector of int)
+0:235          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:235            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235              Constant:
+0:235                3 (const int)
+0:235            Constant:
+0:235              1 (const int)
+0:235          Sequence
+0:235            Constant:
+0:235              0 (const int)
+0:235            Constant:
+0:235              1 (const int)
+0:235            Constant:
+0:235              2 (const int)
+0:235        subgroupExclusiveAdd ( global highp 3-component vector of int)
+0:235          vector swizzle ( temp highp 3-component vector of int)
+0:235            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:235              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235                Constant:
+0:235                  2 (const int)
+0:235              Constant:
+0:235                1 (const int)
+0:235            Sequence
+0:235              Constant:
+0:235                0 (const int)
+0:235              Constant:
+0:235                1 (const int)
+0:235              Constant:
+0:235                2 (const int)
+0:236      move second child to first child ( temp highp 4-component vector of int)
+0:236        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:236          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236            Constant:
+0:236              3 (const int)
+0:236          Constant:
+0:236            1 (const int)
+0:236        subgroupExclusiveAdd ( global highp 4-component vector of int)
+0:236          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:236            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236              Constant:
+0:236                3 (const int)
+0:236            Constant:
+0:236              1 (const int)
+0:238      move second child to first child ( temp highp uint)
+0:238        direct index ( temp highp uint)
+0:238          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:238            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238              Constant:
+0:238                0 (const int)
+0:238            Constant:
+0:238              2 (const int)
+0:238          Constant:
+0:238            0 (const int)
+0:238        subgroupExclusiveAdd ( global highp uint)
+0:238          direct index ( temp highp uint)
+0:238            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:238              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238                Constant:
+0:238                  0 (const int)
+0:238              Constant:
+0:238                2 (const int)
+0:238            Constant:
+0:238              0 (const int)
+0:239      move second child to first child ( temp highp 2-component vector of uint)
+0:239        vector swizzle ( temp highp 2-component vector of uint)
+0:239          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:239            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:239              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:239              Constant:
+0:239                0 (const int)
+0:239            Constant:
+0:239              2 (const int)
+0:239          Sequence
+0:239            Constant:
+0:239              0 (const int)
+0:239            Constant:
+0:239              1 (const int)
+0:239        subgroupExclusiveAdd ( global highp 2-component vector of uint)
+0:239          vector swizzle ( temp highp 2-component vector of uint)
+0:239            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:239              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:239                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:239                Constant:
+0:239                  1 (const int)
+0:239              Constant:
+0:239                2 (const int)
+0:239            Sequence
+0:239              Constant:
+0:239                0 (const int)
+0:239              Constant:
+0:239                1 (const int)
+0:240      move second child to first child ( temp highp 3-component vector of uint)
+0:240        vector swizzle ( temp highp 3-component vector of uint)
+0:240          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:240            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240              Constant:
+0:240                0 (const int)
+0:240            Constant:
+0:240              2 (const int)
+0:240          Sequence
+0:240            Constant:
+0:240              0 (const int)
+0:240            Constant:
+0:240              1 (const int)
+0:240            Constant:
+0:240              2 (const int)
+0:240        subgroupExclusiveAdd ( global highp 3-component vector of uint)
+0:240          vector swizzle ( temp highp 3-component vector of uint)
+0:240            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:240              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240                Constant:
+0:240                  2 (const int)
+0:240              Constant:
+0:240                2 (const int)
+0:240            Sequence
+0:240              Constant:
+0:240                0 (const int)
+0:240              Constant:
+0:240                1 (const int)
+0:240              Constant:
+0:240                2 (const int)
+0:241      move second child to first child ( temp highp 4-component vector of uint)
+0:241        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:241          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241            Constant:
+0:241              0 (const int)
+0:241          Constant:
+0:241            2 (const int)
+0:241        subgroupExclusiveAdd ( global highp 4-component vector of uint)
+0:241          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:241            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241              Constant:
+0:241                3 (const int)
+0:241            Constant:
+0:241              2 (const int)
+0:243      move second child to first child ( temp highp float)
+0:243        direct index ( temp highp float)
+0:243          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:243            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243              Constant:
+0:243                1 (const int)
+0:243            Constant:
+0:243              0 (const int)
+0:243          Constant:
+0:243            0 (const int)
+0:243        subgroupExclusiveMul ( global highp float)
+0:243          direct index ( temp highp float)
+0:243            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:243              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243                Constant:
+0:243                  0 (const int)
+0:243              Constant:
+0:243                0 (const int)
+0:243            Constant:
+0:243              0 (const int)
+0:244      move second child to first child ( temp highp 2-component vector of float)
+0:244        vector swizzle ( temp highp 2-component vector of float)
+0:244          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:244            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:244              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:244              Constant:
+0:244                1 (const int)
+0:244            Constant:
+0:244              0 (const int)
+0:244          Sequence
+0:244            Constant:
+0:244              0 (const int)
+0:244            Constant:
+0:244              1 (const int)
+0:244        subgroupExclusiveMul ( global highp 2-component vector of float)
+0:244          vector swizzle ( temp highp 2-component vector of float)
+0:244            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:244              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:244                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:244                Constant:
+0:244                  1 (const int)
+0:244              Constant:
+0:244                0 (const int)
+0:244            Sequence
+0:244              Constant:
+0:244                0 (const int)
+0:244              Constant:
+0:244                1 (const int)
+0:245      move second child to first child ( temp highp 3-component vector of float)
+0:245        vector swizzle ( temp highp 3-component vector of float)
+0:245          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:245            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245              Constant:
+0:245                1 (const int)
+0:245            Constant:
+0:245              0 (const int)
+0:245          Sequence
+0:245            Constant:
+0:245              0 (const int)
+0:245            Constant:
+0:245              1 (const int)
+0:245            Constant:
+0:245              2 (const int)
+0:245        subgroupExclusiveMul ( global highp 3-component vector of float)
+0:245          vector swizzle ( temp highp 3-component vector of float)
+0:245            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:245              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245                Constant:
+0:245                  2 (const int)
+0:245              Constant:
+0:245                0 (const int)
+0:245            Sequence
+0:245              Constant:
+0:245                0 (const int)
+0:245              Constant:
+0:245                1 (const int)
+0:245              Constant:
+0:245                2 (const int)
+0:246      move second child to first child ( temp highp 4-component vector of float)
+0:246        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:246          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246            Constant:
+0:246              1 (const int)
+0:246          Constant:
+0:246            0 (const int)
+0:246        subgroupExclusiveMul ( global highp 4-component vector of float)
+0:246          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:246            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246              Constant:
+0:246                3 (const int)
+0:246            Constant:
+0:246              0 (const int)
+0:248      move second child to first child ( temp highp int)
+0:248        direct index ( temp highp int)
+0:248          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:248            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248              Constant:
+0:248                2 (const int)
+0:248            Constant:
+0:248              1 (const int)
+0:248          Constant:
+0:248            0 (const int)
+0:248        subgroupExclusiveMul ( global highp int)
+0:248          direct index ( temp highp int)
+0:248            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:248              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248                Constant:
+0:248                  0 (const int)
+0:248              Constant:
+0:248                1 (const int)
+0:248            Constant:
+0:248              0 (const int)
+0:249      move second child to first child ( temp highp 2-component vector of int)
+0:249        vector swizzle ( temp highp 2-component vector of int)
+0:249          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:249            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:249              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:249              Constant:
+0:249                2 (const int)
+0:249            Constant:
+0:249              1 (const int)
+0:249          Sequence
+0:249            Constant:
+0:249              0 (const int)
+0:249            Constant:
+0:249              1 (const int)
+0:249        subgroupExclusiveMul ( global highp 2-component vector of int)
+0:249          vector swizzle ( temp highp 2-component vector of int)
+0:249            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:249              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:249                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:249                Constant:
+0:249                  1 (const int)
+0:249              Constant:
+0:249                1 (const int)
+0:249            Sequence
+0:249              Constant:
+0:249                0 (const int)
+0:249              Constant:
+0:249                1 (const int)
+0:250      move second child to first child ( temp highp 3-component vector of int)
+0:250        vector swizzle ( temp highp 3-component vector of int)
+0:250          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:250            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250              Constant:
+0:250                2 (const int)
+0:250            Constant:
+0:250              1 (const int)
+0:250          Sequence
+0:250            Constant:
+0:250              0 (const int)
+0:250            Constant:
+0:250              1 (const int)
+0:250            Constant:
+0:250              2 (const int)
+0:250        subgroupExclusiveMul ( global highp 3-component vector of int)
+0:250          vector swizzle ( temp highp 3-component vector of int)
+0:250            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:250              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250                Constant:
+0:250                  2 (const int)
+0:250              Constant:
+0:250                1 (const int)
+0:250            Sequence
+0:250              Constant:
+0:250                0 (const int)
+0:250              Constant:
+0:250                1 (const int)
+0:250              Constant:
+0:250                2 (const int)
+0:251      move second child to first child ( temp highp 4-component vector of int)
+0:251        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:251          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251            Constant:
+0:251              2 (const int)
+0:251          Constant:
+0:251            1 (const int)
+0:251        subgroupExclusiveMul ( global highp 4-component vector of int)
+0:251          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:251            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251              Constant:
+0:251                3 (const int)
+0:251            Constant:
+0:251              1 (const int)
+0:253      move second child to first child ( temp highp uint)
+0:253        direct index ( temp highp uint)
+0:253          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:253            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253              Constant:
+0:253                3 (const int)
+0:253            Constant:
+0:253              2 (const int)
+0:253          Constant:
+0:253            0 (const int)
+0:253        subgroupExclusiveMul ( global highp uint)
+0:253          direct index ( temp highp uint)
+0:253            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:253              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253                Constant:
+0:253                  0 (const int)
+0:253              Constant:
+0:253                2 (const int)
+0:253            Constant:
+0:253              0 (const int)
+0:254      move second child to first child ( temp highp 2-component vector of uint)
+0:254        vector swizzle ( temp highp 2-component vector of uint)
+0:254          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:254            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:254              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:254              Constant:
+0:254                3 (const int)
+0:254            Constant:
+0:254              2 (const int)
+0:254          Sequence
+0:254            Constant:
+0:254              0 (const int)
+0:254            Constant:
+0:254              1 (const int)
+0:254        subgroupExclusiveMul ( global highp 2-component vector of uint)
+0:254          vector swizzle ( temp highp 2-component vector of uint)
+0:254            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:254              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:254                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:254                Constant:
+0:254                  1 (const int)
+0:254              Constant:
+0:254                2 (const int)
+0:254            Sequence
+0:254              Constant:
+0:254                0 (const int)
+0:254              Constant:
+0:254                1 (const int)
+0:255      move second child to first child ( temp highp 3-component vector of uint)
+0:255        vector swizzle ( temp highp 3-component vector of uint)
+0:255          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:255            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255              Constant:
+0:255                3 (const int)
+0:255            Constant:
+0:255              2 (const int)
+0:255          Sequence
+0:255            Constant:
+0:255              0 (const int)
+0:255            Constant:
+0:255              1 (const int)
+0:255            Constant:
+0:255              2 (const int)
+0:255        subgroupExclusiveMul ( global highp 3-component vector of uint)
+0:255          vector swizzle ( temp highp 3-component vector of uint)
+0:255            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:255              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255                Constant:
+0:255                  2 (const int)
+0:255              Constant:
+0:255                2 (const int)
+0:255            Sequence
+0:255              Constant:
+0:255                0 (const int)
+0:255              Constant:
+0:255                1 (const int)
+0:255              Constant:
+0:255                2 (const int)
+0:256      move second child to first child ( temp highp 4-component vector of uint)
+0:256        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:256          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256            Constant:
+0:256              3 (const int)
+0:256          Constant:
+0:256            2 (const int)
+0:256        subgroupExclusiveMul ( global highp 4-component vector of uint)
+0:256          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:256            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256              Constant:
+0:256                3 (const int)
+0:256            Constant:
+0:256              2 (const int)
+0:258      move second child to first child ( temp highp float)
+0:258        direct index ( temp highp float)
+0:258          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:258            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258              Constant:
+0:258                0 (const int)
+0:258            Constant:
+0:258              0 (const int)
+0:258          Constant:
+0:258            0 (const int)
+0:258        subgroupExclusiveMin ( global highp float)
+0:258          direct index ( temp highp float)
+0:258            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:258              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258                Constant:
+0:258                  0 (const int)
+0:258              Constant:
+0:258                0 (const int)
+0:258            Constant:
+0:258              0 (const int)
+0:259      move second child to first child ( temp highp 2-component vector of float)
+0:259        vector swizzle ( temp highp 2-component vector of float)
+0:259          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:259            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:259              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:259              Constant:
+0:259                0 (const int)
+0:259            Constant:
+0:259              0 (const int)
+0:259          Sequence
+0:259            Constant:
+0:259              0 (const int)
+0:259            Constant:
+0:259              1 (const int)
+0:259        subgroupExclusiveMin ( global highp 2-component vector of float)
+0:259          vector swizzle ( temp highp 2-component vector of float)
+0:259            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:259              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:259                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:259                Constant:
+0:259                  1 (const int)
+0:259              Constant:
+0:259                0 (const int)
+0:259            Sequence
+0:259              Constant:
+0:259                0 (const int)
+0:259              Constant:
+0:259                1 (const int)
+0:260      move second child to first child ( temp highp 3-component vector of float)
+0:260        vector swizzle ( temp highp 3-component vector of float)
+0:260          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:260            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260              Constant:
+0:260                0 (const int)
+0:260            Constant:
+0:260              0 (const int)
+0:260          Sequence
+0:260            Constant:
+0:260              0 (const int)
+0:260            Constant:
+0:260              1 (const int)
+0:260            Constant:
+0:260              2 (const int)
+0:260        subgroupExclusiveMin ( global highp 3-component vector of float)
+0:260          vector swizzle ( temp highp 3-component vector of float)
+0:260            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:260              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260                Constant:
+0:260                  2 (const int)
+0:260              Constant:
+0:260                0 (const int)
+0:260            Sequence
+0:260              Constant:
+0:260                0 (const int)
+0:260              Constant:
+0:260                1 (const int)
+0:260              Constant:
+0:260                2 (const int)
+0:261      move second child to first child ( temp highp 4-component vector of float)
+0:261        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:261          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261            Constant:
+0:261              0 (const int)
+0:261          Constant:
+0:261            0 (const int)
+0:261        subgroupExclusiveMin ( global highp 4-component vector of float)
+0:261          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:261            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261              Constant:
+0:261                3 (const int)
+0:261            Constant:
+0:261              0 (const int)
+0:263      move second child to first child ( temp highp int)
+0:263        direct index ( temp highp int)
+0:263          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:263            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263              Constant:
+0:263                1 (const int)
+0:263            Constant:
+0:263              1 (const int)
+0:263          Constant:
+0:263            0 (const int)
+0:263        subgroupExclusiveMin ( global highp int)
+0:263          direct index ( temp highp int)
+0:263            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:263              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263                Constant:
+0:263                  0 (const int)
+0:263              Constant:
+0:263                1 (const int)
+0:263            Constant:
+0:263              0 (const int)
+0:264      move second child to first child ( temp highp 2-component vector of int)
+0:264        vector swizzle ( temp highp 2-component vector of int)
+0:264          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:264            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:264              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:264              Constant:
+0:264                1 (const int)
+0:264            Constant:
+0:264              1 (const int)
+0:264          Sequence
+0:264            Constant:
+0:264              0 (const int)
+0:264            Constant:
+0:264              1 (const int)
+0:264        subgroupExclusiveMin ( global highp 2-component vector of int)
+0:264          vector swizzle ( temp highp 2-component vector of int)
+0:264            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:264              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:264                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:264                Constant:
+0:264                  1 (const int)
+0:264              Constant:
+0:264                1 (const int)
+0:264            Sequence
+0:264              Constant:
+0:264                0 (const int)
+0:264              Constant:
+0:264                1 (const int)
+0:265      move second child to first child ( temp highp 3-component vector of int)
+0:265        vector swizzle ( temp highp 3-component vector of int)
+0:265          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:265            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265              Constant:
+0:265                1 (const int)
+0:265            Constant:
+0:265              1 (const int)
+0:265          Sequence
+0:265            Constant:
+0:265              0 (const int)
+0:265            Constant:
+0:265              1 (const int)
+0:265            Constant:
+0:265              2 (const int)
+0:265        subgroupExclusiveMin ( global highp 3-component vector of int)
+0:265          vector swizzle ( temp highp 3-component vector of int)
+0:265            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:265              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265                Constant:
+0:265                  2 (const int)
+0:265              Constant:
+0:265                1 (const int)
+0:265            Sequence
+0:265              Constant:
+0:265                0 (const int)
+0:265              Constant:
+0:265                1 (const int)
+0:265              Constant:
+0:265                2 (const int)
+0:266      move second child to first child ( temp highp 4-component vector of int)
+0:266        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:266          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266            Constant:
+0:266              1 (const int)
+0:266          Constant:
+0:266            1 (const int)
+0:266        subgroupExclusiveMin ( global highp 4-component vector of int)
+0:266          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:266            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266              Constant:
+0:266                3 (const int)
+0:266            Constant:
+0:266              1 (const int)
+0:268      move second child to first child ( temp highp uint)
+0:268        direct index ( temp highp uint)
+0:268          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:268            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268              Constant:
+0:268                2 (const int)
+0:268            Constant:
+0:268              2 (const int)
+0:268          Constant:
+0:268            0 (const int)
+0:268        subgroupExclusiveMin ( global highp uint)
+0:268          direct index ( temp highp uint)
+0:268            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:268              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268                Constant:
+0:268                  0 (const int)
+0:268              Constant:
+0:268                2 (const int)
+0:268            Constant:
+0:268              0 (const int)
+0:269      move second child to first child ( temp highp 2-component vector of uint)
+0:269        vector swizzle ( temp highp 2-component vector of uint)
+0:269          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:269            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:269              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:269              Constant:
+0:269                2 (const int)
+0:269            Constant:
+0:269              2 (const int)
+0:269          Sequence
+0:269            Constant:
+0:269              0 (const int)
+0:269            Constant:
+0:269              1 (const int)
+0:269        subgroupExclusiveMin ( global highp 2-component vector of uint)
+0:269          vector swizzle ( temp highp 2-component vector of uint)
+0:269            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:269              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:269                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:269                Constant:
+0:269                  1 (const int)
+0:269              Constant:
+0:269                2 (const int)
+0:269            Sequence
+0:269              Constant:
+0:269                0 (const int)
+0:269              Constant:
+0:269                1 (const int)
+0:270      move second child to first child ( temp highp 3-component vector of uint)
+0:270        vector swizzle ( temp highp 3-component vector of uint)
+0:270          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:270            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270              Constant:
+0:270                2 (const int)
+0:270            Constant:
+0:270              2 (const int)
+0:270          Sequence
+0:270            Constant:
+0:270              0 (const int)
+0:270            Constant:
+0:270              1 (const int)
+0:270            Constant:
+0:270              2 (const int)
+0:270        subgroupExclusiveMin ( global highp 3-component vector of uint)
+0:270          vector swizzle ( temp highp 3-component vector of uint)
+0:270            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:270              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270                Constant:
+0:270                  2 (const int)
+0:270              Constant:
+0:270                2 (const int)
+0:270            Sequence
+0:270              Constant:
+0:270                0 (const int)
+0:270              Constant:
+0:270                1 (const int)
+0:270              Constant:
+0:270                2 (const int)
+0:271      move second child to first child ( temp highp 4-component vector of uint)
+0:271        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:271          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271            Constant:
+0:271              2 (const int)
+0:271          Constant:
+0:271            2 (const int)
+0:271        subgroupExclusiveMin ( global highp 4-component vector of uint)
+0:271          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:271            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271              Constant:
+0:271                3 (const int)
+0:271            Constant:
+0:271              2 (const int)
+0:273      move second child to first child ( temp highp float)
+0:273        direct index ( temp highp float)
+0:273          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:273            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273              Constant:
+0:273                3 (const int)
+0:273            Constant:
+0:273              0 (const int)
+0:273          Constant:
+0:273            0 (const int)
+0:273        subgroupExclusiveMax ( global highp float)
+0:273          direct index ( temp highp float)
+0:273            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:273              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273                Constant:
+0:273                  0 (const int)
+0:273              Constant:
+0:273                0 (const int)
+0:273            Constant:
+0:273              0 (const int)
+0:274      move second child to first child ( temp highp 2-component vector of float)
+0:274        vector swizzle ( temp highp 2-component vector of float)
+0:274          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:274            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:274              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:274              Constant:
+0:274                3 (const int)
+0:274            Constant:
+0:274              0 (const int)
+0:274          Sequence
+0:274            Constant:
+0:274              0 (const int)
+0:274            Constant:
+0:274              1 (const int)
+0:274        subgroupExclusiveMax ( global highp 2-component vector of float)
+0:274          vector swizzle ( temp highp 2-component vector of float)
+0:274            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:274              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:274                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:274                Constant:
+0:274                  1 (const int)
+0:274              Constant:
+0:274                0 (const int)
+0:274            Sequence
+0:274              Constant:
+0:274                0 (const int)
+0:274              Constant:
+0:274                1 (const int)
+0:275      move second child to first child ( temp highp 3-component vector of float)
+0:275        vector swizzle ( temp highp 3-component vector of float)
+0:275          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:275            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275              Constant:
+0:275                3 (const int)
+0:275            Constant:
+0:275              0 (const int)
+0:275          Sequence
+0:275            Constant:
+0:275              0 (const int)
+0:275            Constant:
+0:275              1 (const int)
+0:275            Constant:
+0:275              2 (const int)
+0:275        subgroupExclusiveMax ( global highp 3-component vector of float)
+0:275          vector swizzle ( temp highp 3-component vector of float)
+0:275            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:275              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275                Constant:
+0:275                  2 (const int)
+0:275              Constant:
+0:275                0 (const int)
+0:275            Sequence
+0:275              Constant:
+0:275                0 (const int)
+0:275              Constant:
+0:275                1 (const int)
+0:275              Constant:
+0:275                2 (const int)
+0:276      move second child to first child ( temp highp 4-component vector of float)
+0:276        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:276          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276            Constant:
+0:276              3 (const int)
+0:276          Constant:
+0:276            0 (const int)
+0:276        subgroupExclusiveMax ( global highp 4-component vector of float)
+0:276          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:276            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276              Constant:
+0:276                3 (const int)
+0:276            Constant:
+0:276              0 (const int)
+0:278      move second child to first child ( temp highp int)
+0:278        direct index ( temp highp int)
+0:278          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:278            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278              Constant:
+0:278                0 (const int)
+0:278            Constant:
+0:278              1 (const int)
+0:278          Constant:
+0:278            0 (const int)
+0:278        subgroupExclusiveMax ( global highp int)
+0:278          direct index ( temp highp int)
+0:278            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:278              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278                Constant:
+0:278                  0 (const int)
+0:278              Constant:
+0:278                1 (const int)
+0:278            Constant:
+0:278              0 (const int)
+0:279      move second child to first child ( temp highp 2-component vector of int)
+0:279        vector swizzle ( temp highp 2-component vector of int)
+0:279          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:279            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:279              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:279              Constant:
+0:279                0 (const int)
+0:279            Constant:
+0:279              1 (const int)
+0:279          Sequence
+0:279            Constant:
+0:279              0 (const int)
+0:279            Constant:
+0:279              1 (const int)
+0:279        subgroupExclusiveMax ( global highp 2-component vector of int)
+0:279          vector swizzle ( temp highp 2-component vector of int)
+0:279            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:279              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:279                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:279                Constant:
+0:279                  1 (const int)
+0:279              Constant:
+0:279                1 (const int)
+0:279            Sequence
+0:279              Constant:
+0:279                0 (const int)
+0:279              Constant:
+0:279                1 (const int)
+0:280      move second child to first child ( temp highp 3-component vector of int)
+0:280        vector swizzle ( temp highp 3-component vector of int)
+0:280          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:280            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280              Constant:
+0:280                0 (const int)
+0:280            Constant:
+0:280              1 (const int)
+0:280          Sequence
+0:280            Constant:
+0:280              0 (const int)
+0:280            Constant:
+0:280              1 (const int)
+0:280            Constant:
+0:280              2 (const int)
+0:280        subgroupExclusiveMax ( global highp 3-component vector of int)
+0:280          vector swizzle ( temp highp 3-component vector of int)
+0:280            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:280              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280                Constant:
+0:280                  2 (const int)
+0:280              Constant:
+0:280                1 (const int)
+0:280            Sequence
+0:280              Constant:
+0:280                0 (const int)
+0:280              Constant:
+0:280                1 (const int)
+0:280              Constant:
+0:280                2 (const int)
+0:281      move second child to first child ( temp highp 4-component vector of int)
+0:281        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:281          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281            Constant:
+0:281              0 (const int)
+0:281          Constant:
+0:281            1 (const int)
+0:281        subgroupExclusiveMax ( global highp 4-component vector of int)
+0:281          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:281            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281              Constant:
+0:281                3 (const int)
+0:281            Constant:
+0:281              1 (const int)
+0:283      move second child to first child ( temp highp uint)
+0:283        direct index ( temp highp uint)
+0:283          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:283            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283              Constant:
+0:283                1 (const int)
+0:283            Constant:
+0:283              2 (const int)
+0:283          Constant:
+0:283            0 (const int)
+0:283        subgroupExclusiveMax ( global highp uint)
+0:283          direct index ( temp highp uint)
+0:283            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:283              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283                Constant:
+0:283                  0 (const int)
+0:283              Constant:
+0:283                2 (const int)
+0:283            Constant:
+0:283              0 (const int)
+0:284      move second child to first child ( temp highp 2-component vector of uint)
+0:284        vector swizzle ( temp highp 2-component vector of uint)
+0:284          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:284            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:284              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:284              Constant:
+0:284                1 (const int)
+0:284            Constant:
+0:284              2 (const int)
+0:284          Sequence
+0:284            Constant:
+0:284              0 (const int)
+0:284            Constant:
+0:284              1 (const int)
+0:284        subgroupExclusiveMax ( global highp 2-component vector of uint)
+0:284          vector swizzle ( temp highp 2-component vector of uint)
+0:284            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:284              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:284                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:284                Constant:
+0:284                  1 (const int)
+0:284              Constant:
+0:284                2 (const int)
+0:284            Sequence
+0:284              Constant:
+0:284                0 (const int)
+0:284              Constant:
+0:284                1 (const int)
+0:285      move second child to first child ( temp highp 3-component vector of uint)
+0:285        vector swizzle ( temp highp 3-component vector of uint)
+0:285          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:285            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285              Constant:
+0:285                1 (const int)
+0:285            Constant:
+0:285              2 (const int)
+0:285          Sequence
+0:285            Constant:
+0:285              0 (const int)
+0:285            Constant:
+0:285              1 (const int)
+0:285            Constant:
+0:285              2 (const int)
+0:285        subgroupExclusiveMax ( global highp 3-component vector of uint)
+0:285          vector swizzle ( temp highp 3-component vector of uint)
+0:285            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:285              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285                Constant:
+0:285                  2 (const int)
+0:285              Constant:
+0:285                2 (const int)
+0:285            Sequence
+0:285              Constant:
+0:285                0 (const int)
+0:285              Constant:
+0:285                1 (const int)
+0:285              Constant:
+0:285                2 (const int)
+0:286      move second child to first child ( temp highp 4-component vector of uint)
+0:286        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:286          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286            Constant:
+0:286              1 (const int)
+0:286          Constant:
+0:286            2 (const int)
+0:286        subgroupExclusiveMax ( global highp 4-component vector of uint)
+0:286          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:286            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286              Constant:
+0:286                3 (const int)
+0:286            Constant:
+0:286              2 (const int)
+0:288      move second child to first child ( temp highp int)
+0:288        direct index ( temp highp int)
+0:288          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:288            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288              Constant:
+0:288                2 (const int)
+0:288            Constant:
+0:288              1 (const int)
+0:288          Constant:
+0:288            0 (const int)
+0:288        subgroupExclusiveAnd ( global highp int)
+0:288          direct index ( temp highp int)
+0:288            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:288              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288                Constant:
+0:288                  0 (const int)
+0:288              Constant:
+0:288                1 (const int)
+0:288            Constant:
+0:288              0 (const int)
+0:289      move second child to first child ( temp highp 2-component vector of int)
+0:289        vector swizzle ( temp highp 2-component vector of int)
+0:289          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:289            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:289              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:289              Constant:
+0:289                2 (const int)
+0:289            Constant:
+0:289              1 (const int)
+0:289          Sequence
+0:289            Constant:
+0:289              0 (const int)
+0:289            Constant:
+0:289              1 (const int)
+0:289        subgroupExclusiveAnd ( global highp 2-component vector of int)
+0:289          vector swizzle ( temp highp 2-component vector of int)
+0:289            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:289              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:289                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:289                Constant:
+0:289                  1 (const int)
+0:289              Constant:
+0:289                1 (const int)
+0:289            Sequence
+0:289              Constant:
+0:289                0 (const int)
+0:289              Constant:
+0:289                1 (const int)
+0:290      move second child to first child ( temp highp 3-component vector of int)
+0:290        vector swizzle ( temp highp 3-component vector of int)
+0:290          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:290            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290              Constant:
+0:290                2 (const int)
+0:290            Constant:
+0:290              1 (const int)
+0:290          Sequence
+0:290            Constant:
+0:290              0 (const int)
+0:290            Constant:
+0:290              1 (const int)
+0:290            Constant:
+0:290              2 (const int)
+0:290        subgroupExclusiveAnd ( global highp 3-component vector of int)
+0:290          vector swizzle ( temp highp 3-component vector of int)
+0:290            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:290              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290                Constant:
+0:290                  2 (const int)
+0:290              Constant:
+0:290                1 (const int)
+0:290            Sequence
+0:290              Constant:
+0:290                0 (const int)
+0:290              Constant:
+0:290                1 (const int)
+0:290              Constant:
+0:290                2 (const int)
+0:291      move second child to first child ( temp highp 4-component vector of int)
+0:291        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:291          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291            Constant:
+0:291              2 (const int)
+0:291          Constant:
+0:291            1 (const int)
+0:291        subgroupExclusiveAnd ( global highp 4-component vector of int)
+0:291          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:291            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291              Constant:
+0:291                3 (const int)
+0:291            Constant:
+0:291              1 (const int)
+0:293      move second child to first child ( temp highp uint)
+0:293        direct index ( temp highp uint)
+0:293          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:293            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293              Constant:
+0:293                3 (const int)
+0:293            Constant:
+0:293              2 (const int)
+0:293          Constant:
+0:293            0 (const int)
+0:293        subgroupExclusiveAnd ( global highp uint)
+0:293          direct index ( temp highp uint)
+0:293            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:293              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293                Constant:
+0:293                  0 (const int)
+0:293              Constant:
+0:293                2 (const int)
+0:293            Constant:
+0:293              0 (const int)
+0:294      move second child to first child ( temp highp 2-component vector of uint)
+0:294        vector swizzle ( temp highp 2-component vector of uint)
+0:294          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:294            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:294              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:294              Constant:
+0:294                3 (const int)
+0:294            Constant:
+0:294              2 (const int)
+0:294          Sequence
+0:294            Constant:
+0:294              0 (const int)
+0:294            Constant:
+0:294              1 (const int)
+0:294        subgroupExclusiveAnd ( global highp 2-component vector of uint)
+0:294          vector swizzle ( temp highp 2-component vector of uint)
+0:294            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:294              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:294                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:294                Constant:
+0:294                  1 (const int)
+0:294              Constant:
+0:294                2 (const int)
+0:294            Sequence
+0:294              Constant:
+0:294                0 (const int)
+0:294              Constant:
+0:294                1 (const int)
+0:295      move second child to first child ( temp highp 3-component vector of uint)
+0:295        vector swizzle ( temp highp 3-component vector of uint)
+0:295          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:295            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295              Constant:
+0:295                3 (const int)
+0:295            Constant:
+0:295              2 (const int)
+0:295          Sequence
+0:295            Constant:
+0:295              0 (const int)
+0:295            Constant:
+0:295              1 (const int)
+0:295            Constant:
+0:295              2 (const int)
+0:295        subgroupExclusiveAnd ( global highp 3-component vector of uint)
+0:295          vector swizzle ( temp highp 3-component vector of uint)
+0:295            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:295              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295                Constant:
+0:295                  2 (const int)
+0:295              Constant:
+0:295                2 (const int)
+0:295            Sequence
+0:295              Constant:
+0:295                0 (const int)
+0:295              Constant:
+0:295                1 (const int)
+0:295              Constant:
+0:295                2 (const int)
+0:296      move second child to first child ( temp highp 4-component vector of uint)
+0:296        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:296          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296            Constant:
+0:296              3 (const int)
+0:296          Constant:
+0:296            2 (const int)
+0:296        subgroupExclusiveAnd ( global highp 4-component vector of uint)
+0:296          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:296            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296              Constant:
+0:296                3 (const int)
+0:296            Constant:
+0:296              2 (const int)
+0:298      move second child to first child ( temp highp int)
+0:298        direct index ( temp highp int)
+0:298          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:298            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298              Constant:
+0:298                0 (const int)
+0:298            Constant:
+0:298              1 (const int)
+0:298          Constant:
+0:298            0 (const int)
+0:298        Convert bool to int ( temp highp int)
+0:298          subgroupExclusiveAnd ( global bool)
+0:298            Compare Less Than ( temp bool)
+0:298              direct index ( temp highp int)
+0:298                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:298                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298                    Constant:
+0:298                      0 (const int)
+0:298                  Constant:
+0:298                    1 (const int)
+0:298                Constant:
+0:298                  0 (const int)
+0:298              Constant:
+0:298                0 (const int)
+0:299      move second child to first child ( temp highp 2-component vector of int)
+0:299        vector swizzle ( temp highp 2-component vector of int)
+0:299          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:299            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:299              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:299              Constant:
+0:299                0 (const int)
+0:299            Constant:
+0:299              1 (const int)
+0:299          Sequence
+0:299            Constant:
+0:299              0 (const int)
+0:299            Constant:
+0:299              1 (const int)
+0:299        Convert bool to int ( temp highp 2-component vector of int)
+0:299          subgroupExclusiveAnd ( global 2-component vector of bool)
+0:299            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:299              vector swizzle ( temp highp 2-component vector of int)
+0:299                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:299                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:299                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:299                    Constant:
+0:299                      1 (const int)
+0:299                  Constant:
+0:299                    1 (const int)
+0:299                Sequence
+0:299                  Constant:
+0:299                    0 (const int)
+0:299                  Constant:
+0:299                    1 (const int)
+0:299              Constant:
+0:299                0 (const int)
+0:299                0 (const int)
+0:300      move second child to first child ( temp highp 3-component vector of int)
+0:300        vector swizzle ( temp highp 3-component vector of int)
+0:300          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:300            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300              Constant:
+0:300                0 (const int)
+0:300            Constant:
+0:300              1 (const int)
+0:300          Sequence
+0:300            Constant:
+0:300              0 (const int)
+0:300            Constant:
+0:300              1 (const int)
+0:300            Constant:
+0:300              2 (const int)
+0:300        Convert bool to int ( temp highp 3-component vector of int)
+0:300          subgroupExclusiveAnd ( global 3-component vector of bool)
+0:300            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:300              vector swizzle ( temp highp 3-component vector of int)
+0:300                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:300                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300                    Constant:
+0:300                      1 (const int)
+0:300                  Constant:
+0:300                    1 (const int)
+0:300                Sequence
+0:300                  Constant:
+0:300                    0 (const int)
+0:300                  Constant:
+0:300                    1 (const int)
+0:300                  Constant:
+0:300                    2 (const int)
+0:300              Constant:
+0:300                0 (const int)
+0:300                0 (const int)
+0:300                0 (const int)
+0:301      move second child to first child ( temp highp 4-component vector of int)
+0:301        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:301          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301            Constant:
+0:301              0 (const int)
+0:301          Constant:
+0:301            1 (const int)
+0:301        Convert bool to int ( temp highp 4-component vector of int)
+0:301          subgroupExclusiveAnd ( global 4-component vector of bool)
+0:301            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:301              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:301                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301                  Constant:
+0:301                    1 (const int)
+0:301                Constant:
+0:301                  1 (const int)
+0:301              Constant:
+0:301                0 (const int)
+0:301                0 (const int)
+0:301                0 (const int)
+0:301                0 (const int)
+0:303      move second child to first child ( temp highp int)
+0:303        direct index ( temp highp int)
+0:303          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:303            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303              Constant:
+0:303                1 (const int)
+0:303            Constant:
+0:303              1 (const int)
+0:303          Constant:
+0:303            0 (const int)
+0:303        subgroupExclusiveOr ( global highp int)
+0:303          direct index ( temp highp int)
+0:303            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:303              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303                Constant:
+0:303                  0 (const int)
+0:303              Constant:
+0:303                1 (const int)
+0:303            Constant:
+0:303              0 (const int)
+0:304      move second child to first child ( temp highp 2-component vector of int)
+0:304        vector swizzle ( temp highp 2-component vector of int)
+0:304          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:304            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:304              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:304              Constant:
+0:304                1 (const int)
+0:304            Constant:
+0:304              1 (const int)
+0:304          Sequence
+0:304            Constant:
+0:304              0 (const int)
+0:304            Constant:
+0:304              1 (const int)
+0:304        subgroupExclusiveOr ( global highp 2-component vector of int)
+0:304          vector swizzle ( temp highp 2-component vector of int)
+0:304            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:304              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:304                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:304                Constant:
+0:304                  1 (const int)
+0:304              Constant:
+0:304                1 (const int)
+0:304            Sequence
+0:304              Constant:
+0:304                0 (const int)
+0:304              Constant:
+0:304                1 (const int)
+0:305      move second child to first child ( temp highp 3-component vector of int)
+0:305        vector swizzle ( temp highp 3-component vector of int)
+0:305          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:305            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305              Constant:
+0:305                1 (const int)
+0:305            Constant:
+0:305              1 (const int)
+0:305          Sequence
+0:305            Constant:
+0:305              0 (const int)
+0:305            Constant:
+0:305              1 (const int)
+0:305            Constant:
+0:305              2 (const int)
+0:305        subgroupExclusiveOr ( global highp 3-component vector of int)
+0:305          vector swizzle ( temp highp 3-component vector of int)
+0:305            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:305              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305                Constant:
+0:305                  2 (const int)
+0:305              Constant:
+0:305                1 (const int)
+0:305            Sequence
+0:305              Constant:
+0:305                0 (const int)
+0:305              Constant:
+0:305                1 (const int)
+0:305              Constant:
+0:305                2 (const int)
+0:306      move second child to first child ( temp highp 4-component vector of int)
+0:306        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:306          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306            Constant:
+0:306              1 (const int)
+0:306          Constant:
+0:306            1 (const int)
+0:306        subgroupExclusiveOr ( global highp 4-component vector of int)
+0:306          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:306            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306              Constant:
+0:306                3 (const int)
+0:306            Constant:
+0:306              1 (const int)
+0:308      move second child to first child ( temp highp uint)
+0:308        direct index ( temp highp uint)
+0:308          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:308            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308              Constant:
+0:308                2 (const int)
+0:308            Constant:
+0:308              2 (const int)
+0:308          Constant:
+0:308            0 (const int)
+0:308        subgroupExclusiveOr ( global highp uint)
+0:308          direct index ( temp highp uint)
+0:308            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:308              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308                Constant:
+0:308                  0 (const int)
+0:308              Constant:
+0:308                2 (const int)
+0:308            Constant:
+0:308              0 (const int)
+0:309      move second child to first child ( temp highp 2-component vector of uint)
+0:309        vector swizzle ( temp highp 2-component vector of uint)
+0:309          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:309            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:309              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:309              Constant:
+0:309                2 (const int)
+0:309            Constant:
+0:309              2 (const int)
+0:309          Sequence
+0:309            Constant:
+0:309              0 (const int)
+0:309            Constant:
+0:309              1 (const int)
+0:309        subgroupExclusiveOr ( global highp 2-component vector of uint)
+0:309          vector swizzle ( temp highp 2-component vector of uint)
+0:309            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:309              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:309                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:309                Constant:
+0:309                  1 (const int)
+0:309              Constant:
+0:309                2 (const int)
+0:309            Sequence
+0:309              Constant:
+0:309                0 (const int)
+0:309              Constant:
+0:309                1 (const int)
+0:310      move second child to first child ( temp highp 3-component vector of uint)
+0:310        vector swizzle ( temp highp 3-component vector of uint)
+0:310          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:310            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310              Constant:
+0:310                2 (const int)
+0:310            Constant:
+0:310              2 (const int)
+0:310          Sequence
+0:310            Constant:
+0:310              0 (const int)
+0:310            Constant:
+0:310              1 (const int)
+0:310            Constant:
+0:310              2 (const int)
+0:310        subgroupExclusiveOr ( global highp 3-component vector of uint)
+0:310          vector swizzle ( temp highp 3-component vector of uint)
+0:310            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:310              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310                Constant:
+0:310                  2 (const int)
+0:310              Constant:
+0:310                2 (const int)
+0:310            Sequence
+0:310              Constant:
+0:310                0 (const int)
+0:310              Constant:
+0:310                1 (const int)
+0:310              Constant:
+0:310                2 (const int)
+0:311      move second child to first child ( temp highp 4-component vector of uint)
+0:311        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:311          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311            Constant:
+0:311              2 (const int)
+0:311          Constant:
+0:311            2 (const int)
+0:311        subgroupExclusiveOr ( global highp 4-component vector of uint)
+0:311          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:311            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311              Constant:
+0:311                3 (const int)
+0:311            Constant:
+0:311              2 (const int)
+0:313      move second child to first child ( temp highp int)
+0:313        direct index ( temp highp int)
+0:313          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:313            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313              Constant:
+0:313                3 (const int)
+0:313            Constant:
+0:313              1 (const int)
+0:313          Constant:
+0:313            0 (const int)
+0:313        Convert bool to int ( temp highp int)
+0:313          subgroupExclusiveOr ( global bool)
+0:313            Compare Less Than ( temp bool)
+0:313              direct index ( temp highp int)
+0:313                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:313                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313                    Constant:
+0:313                      0 (const int)
+0:313                  Constant:
+0:313                    1 (const int)
+0:313                Constant:
+0:313                  0 (const int)
+0:313              Constant:
+0:313                0 (const int)
+0:314      move second child to first child ( temp highp 2-component vector of int)
+0:314        vector swizzle ( temp highp 2-component vector of int)
+0:314          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:314            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:314              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:314              Constant:
+0:314                3 (const int)
+0:314            Constant:
+0:314              1 (const int)
+0:314          Sequence
+0:314            Constant:
+0:314              0 (const int)
+0:314            Constant:
+0:314              1 (const int)
+0:314        Convert bool to int ( temp highp 2-component vector of int)
+0:314          subgroupExclusiveOr ( global 2-component vector of bool)
+0:314            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:314              vector swizzle ( temp highp 2-component vector of int)
+0:314                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:314                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:314                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:314                    Constant:
+0:314                      1 (const int)
+0:314                  Constant:
+0:314                    1 (const int)
+0:314                Sequence
+0:314                  Constant:
+0:314                    0 (const int)
+0:314                  Constant:
+0:314                    1 (const int)
+0:314              Constant:
+0:314                0 (const int)
+0:314                0 (const int)
+0:315      move second child to first child ( temp highp 3-component vector of int)
+0:315        vector swizzle ( temp highp 3-component vector of int)
+0:315          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:315            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315              Constant:
+0:315                3 (const int)
+0:315            Constant:
+0:315              1 (const int)
+0:315          Sequence
+0:315            Constant:
+0:315              0 (const int)
+0:315            Constant:
+0:315              1 (const int)
+0:315            Constant:
+0:315              2 (const int)
+0:315        Convert bool to int ( temp highp 3-component vector of int)
+0:315          subgroupExclusiveOr ( global 3-component vector of bool)
+0:315            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:315              vector swizzle ( temp highp 3-component vector of int)
+0:315                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:315                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315                    Constant:
+0:315                      1 (const int)
+0:315                  Constant:
+0:315                    1 (const int)
+0:315                Sequence
+0:315                  Constant:
+0:315                    0 (const int)
+0:315                  Constant:
+0:315                    1 (const int)
+0:315                  Constant:
+0:315                    2 (const int)
+0:315              Constant:
+0:315                0 (const int)
+0:315                0 (const int)
+0:315                0 (const int)
+0:316      move second child to first child ( temp highp 4-component vector of int)
+0:316        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:316          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316            Constant:
+0:316              3 (const int)
+0:316          Constant:
+0:316            1 (const int)
+0:316        Convert bool to int ( temp highp 4-component vector of int)
+0:316          subgroupExclusiveOr ( global 4-component vector of bool)
+0:316            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:316              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:316                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316                  Constant:
+0:316                    1 (const int)
+0:316                Constant:
+0:316                  1 (const int)
+0:316              Constant:
+0:316                0 (const int)
+0:316                0 (const int)
+0:316                0 (const int)
+0:316                0 (const int)
+0:318      move second child to first child ( temp highp int)
+0:318        direct index ( temp highp int)
+0:318          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:318            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318              Constant:
+0:318                0 (const int)
+0:318            Constant:
+0:318              1 (const int)
+0:318          Constant:
+0:318            0 (const int)
+0:318        subgroupExclusiveXor ( global highp int)
+0:318          direct index ( temp highp int)
+0:318            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:318              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318                Constant:
+0:318                  0 (const int)
+0:318              Constant:
+0:318                1 (const int)
+0:318            Constant:
+0:318              0 (const int)
+0:319      move second child to first child ( temp highp 2-component vector of int)
+0:319        vector swizzle ( temp highp 2-component vector of int)
+0:319          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:319            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:319              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:319              Constant:
+0:319                0 (const int)
+0:319            Constant:
+0:319              1 (const int)
+0:319          Sequence
+0:319            Constant:
+0:319              0 (const int)
+0:319            Constant:
+0:319              1 (const int)
+0:319        subgroupExclusiveXor ( global highp 2-component vector of int)
+0:319          vector swizzle ( temp highp 2-component vector of int)
+0:319            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:319              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:319                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:319                Constant:
+0:319                  1 (const int)
+0:319              Constant:
+0:319                1 (const int)
+0:319            Sequence
+0:319              Constant:
+0:319                0 (const int)
+0:319              Constant:
+0:319                1 (const int)
+0:320      move second child to first child ( temp highp 3-component vector of int)
+0:320        vector swizzle ( temp highp 3-component vector of int)
+0:320          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:320            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320              Constant:
+0:320                0 (const int)
+0:320            Constant:
+0:320              1 (const int)
+0:320          Sequence
+0:320            Constant:
+0:320              0 (const int)
+0:320            Constant:
+0:320              1 (const int)
+0:320            Constant:
+0:320              2 (const int)
+0:320        subgroupExclusiveXor ( global highp 3-component vector of int)
+0:320          vector swizzle ( temp highp 3-component vector of int)
+0:320            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:320              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320                Constant:
+0:320                  2 (const int)
+0:320              Constant:
+0:320                1 (const int)
+0:320            Sequence
+0:320              Constant:
+0:320                0 (const int)
+0:320              Constant:
+0:320                1 (const int)
+0:320              Constant:
+0:320                2 (const int)
+0:321      move second child to first child ( temp highp 4-component vector of int)
+0:321        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:321          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321            Constant:
+0:321              0 (const int)
+0:321          Constant:
+0:321            1 (const int)
+0:321        subgroupExclusiveXor ( global highp 4-component vector of int)
+0:321          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:321            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321              Constant:
+0:321                3 (const int)
+0:321            Constant:
+0:321              1 (const int)
+0:323      move second child to first child ( temp highp uint)
+0:323        direct index ( temp highp uint)
+0:323          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:323            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323              Constant:
+0:323                1 (const int)
+0:323            Constant:
+0:323              2 (const int)
+0:323          Constant:
+0:323            0 (const int)
+0:323        subgroupExclusiveXor ( global highp uint)
+0:323          direct index ( temp highp uint)
+0:323            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:323              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323                Constant:
+0:323                  0 (const int)
+0:323              Constant:
+0:323                2 (const int)
+0:323            Constant:
+0:323              0 (const int)
+0:324      move second child to first child ( temp highp 2-component vector of uint)
+0:324        vector swizzle ( temp highp 2-component vector of uint)
+0:324          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:324            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:324              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:324              Constant:
+0:324                1 (const int)
+0:324            Constant:
+0:324              2 (const int)
+0:324          Sequence
+0:324            Constant:
+0:324              0 (const int)
+0:324            Constant:
+0:324              1 (const int)
+0:324        subgroupExclusiveXor ( global highp 2-component vector of uint)
+0:324          vector swizzle ( temp highp 2-component vector of uint)
+0:324            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:324              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:324                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:324                Constant:
+0:324                  1 (const int)
+0:324              Constant:
+0:324                2 (const int)
+0:324            Sequence
+0:324              Constant:
+0:324                0 (const int)
+0:324              Constant:
+0:324                1 (const int)
+0:325      move second child to first child ( temp highp 3-component vector of uint)
+0:325        vector swizzle ( temp highp 3-component vector of uint)
+0:325          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:325            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325              Constant:
+0:325                1 (const int)
+0:325            Constant:
+0:325              2 (const int)
+0:325          Sequence
+0:325            Constant:
+0:325              0 (const int)
+0:325            Constant:
+0:325              1 (const int)
+0:325            Constant:
+0:325              2 (const int)
+0:325        subgroupExclusiveXor ( global highp 3-component vector of uint)
+0:325          vector swizzle ( temp highp 3-component vector of uint)
+0:325            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:325              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325                Constant:
+0:325                  2 (const int)
+0:325              Constant:
+0:325                2 (const int)
+0:325            Sequence
+0:325              Constant:
+0:325                0 (const int)
+0:325              Constant:
+0:325                1 (const int)
+0:325              Constant:
+0:325                2 (const int)
+0:326      move second child to first child ( temp highp 4-component vector of uint)
+0:326        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:326          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326            Constant:
+0:326              1 (const int)
+0:326          Constant:
+0:326            2 (const int)
+0:326        subgroupExclusiveXor ( global highp 4-component vector of uint)
+0:326          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:326            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326              Constant:
+0:326                3 (const int)
+0:326            Constant:
+0:326              2 (const int)
+0:328      move second child to first child ( temp highp int)
+0:328        direct index ( temp highp int)
+0:328          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:328            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328              Constant:
+0:328                2 (const int)
+0:328            Constant:
+0:328              1 (const int)
+0:328          Constant:
+0:328            0 (const int)
+0:328        Convert bool to int ( temp highp int)
+0:328          subgroupExclusiveXor ( global bool)
+0:328            Compare Less Than ( temp bool)
+0:328              direct index ( temp highp int)
+0:328                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:328                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328                    Constant:
+0:328                      0 (const int)
+0:328                  Constant:
+0:328                    1 (const int)
+0:328                Constant:
+0:328                  0 (const int)
+0:328              Constant:
+0:328                0 (const int)
+0:329      move second child to first child ( temp highp 2-component vector of int)
+0:329        vector swizzle ( temp highp 2-component vector of int)
+0:329          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:329            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:329              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:329              Constant:
+0:329                2 (const int)
+0:329            Constant:
+0:329              1 (const int)
+0:329          Sequence
+0:329            Constant:
+0:329              0 (const int)
+0:329            Constant:
+0:329              1 (const int)
+0:329        Convert bool to int ( temp highp 2-component vector of int)
+0:329          subgroupExclusiveXor ( global 2-component vector of bool)
+0:329            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:329              vector swizzle ( temp highp 2-component vector of int)
+0:329                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:329                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:329                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:329                    Constant:
+0:329                      1 (const int)
+0:329                  Constant:
+0:329                    1 (const int)
+0:329                Sequence
+0:329                  Constant:
+0:329                    0 (const int)
+0:329                  Constant:
+0:329                    1 (const int)
+0:329              Constant:
+0:329                0 (const int)
+0:329                0 (const int)
+0:330      move second child to first child ( temp highp 3-component vector of int)
+0:330        vector swizzle ( temp highp 3-component vector of int)
+0:330          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:330            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330              Constant:
+0:330                2 (const int)
+0:330            Constant:
+0:330              1 (const int)
+0:330          Sequence
+0:330            Constant:
+0:330              0 (const int)
+0:330            Constant:
+0:330              1 (const int)
+0:330            Constant:
+0:330              2 (const int)
+0:330        Convert bool to int ( temp highp 3-component vector of int)
+0:330          subgroupExclusiveXor ( global 3-component vector of bool)
+0:330            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:330              vector swizzle ( temp highp 3-component vector of int)
+0:330                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:330                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330                    Constant:
+0:330                      1 (const int)
+0:330                  Constant:
+0:330                    1 (const int)
+0:330                Sequence
+0:330                  Constant:
+0:330                    0 (const int)
+0:330                  Constant:
+0:330                    1 (const int)
+0:330                  Constant:
+0:330                    2 (const int)
+0:330              Constant:
+0:330                0 (const int)
+0:330                0 (const int)
+0:330                0 (const int)
+0:331      move second child to first child ( temp highp 4-component vector of int)
+0:331        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:331          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331            Constant:
+0:331              2 (const int)
+0:331          Constant:
+0:331            1 (const int)
+0:331        Convert bool to int ( temp highp 4-component vector of int)
+0:331          subgroupExclusiveXor ( global 4-component vector of bool)
+0:331            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:331              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:331                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331                  Constant:
+0:331                    1 (const int)
+0:331                Constant:
+0:331                  1 (const int)
+0:331              Constant:
+0:331                0 (const int)
+0:331                0 (const int)
+0:331                0 (const int)
+0:331                0 (const int)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
diff --git a/Test/baseResults/glsl.es320.subgroupBallot.comp.out b/Test/baseResults/glsl.es320.subgroupBallot.comp.out
new file mode 100644
index 0000000..d5a97c4
--- /dev/null
+++ b/Test/baseResults/glsl.es320.subgroupBallot.comp.out
@@ -0,0 +1,1981 @@
+glsl.es320.subgroupBallot.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+0:? Sequence
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp highp uint)
+0:16          'invocation' ( temp highp uint)
+0:16          mod ( temp mediump uint)
+0:16            add ( temp mediump uint)
+0:16              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16            Constant:
+0:16              4 (const uint)
+0:18      Sequence
+0:18        move second child to first child ( temp highp 4-component vector of uint)
+0:18          'relMask' ( temp highp 4-component vector of uint)
+0:21          add ( temp highp 4-component vector of uint)
+0:20            add ( temp highp 4-component vector of uint)
+0:19              add ( temp highp 4-component vector of uint)
+0:18                add ( temp highp 4-component vector of uint)
+0:18                  'gl_SubgroupEqMask' ( in highp 4-component vector of uint SubgroupEqMask)
+0:19                  'gl_SubgroupGeMask' ( in highp 4-component vector of uint SubgroupGeMask)
+0:20                'gl_SubgroupGtMask' ( in highp 4-component vector of uint SubgroupGtMask)
+0:21              'gl_SubgroupLeMask' ( in highp 4-component vector of uint SubgroupLeMask)
+0:22            'gl_SubgroupLtMask' ( in highp 4-component vector of uint SubgroupLtMask)
+0:24      Sequence
+0:24        move second child to first child ( temp highp 4-component vector of uint)
+0:24          'result' ( temp highp 4-component vector of uint)
+0:24          subgroupBallot ( global highp 4-component vector of uint)
+0:24            Constant:
+0:24              true (const bool)
+0:26      move second child to first child ( temp highp uint)
+0:26        direct index ( temp highp uint)
+0:26          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              Constant:
+0:26                0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Constant:
+0:26            0 (const int)
+0:26        subgroupBallotBitCount ( global highp uint)
+0:26          'result' ( temp highp 4-component vector of uint)
+0:27      move second child to first child ( temp highp uint)
+0:27        direct index ( temp highp uint)
+0:27          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:27            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27              Constant:
+0:27                0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Constant:
+0:27            1 (const int)
+0:27        Test condition and select ( temp highp uint)
+0:27          Condition
+0:27          subgroupBallotBitExtract ( global bool, operation at highp)
+0:27            'result' ( temp highp 4-component vector of uint)
+0:27            Constant:
+0:27              0 (const uint)
+0:27          true case
+0:27          Constant:
+0:27            1 (const uint)
+0:27          false case
+0:27          Constant:
+0:27            0 (const uint)
+0:28      move second child to first child ( temp highp uint)
+0:28        direct index ( temp highp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                0 (const int)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            2 (const int)
+0:28        add ( temp highp uint)
+0:28          subgroupBallotInclusiveBitCount ( global highp uint)
+0:28            'result' ( temp highp 4-component vector of uint)
+0:28          subgroupBallotExclusiveBitCount ( global highp uint)
+0:28            'result' ( temp highp 4-component vector of uint)
+0:29      move second child to first child ( temp highp uint)
+0:29        direct index ( temp highp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              Constant:
+0:29                0 (const int)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        add ( temp highp uint)
+0:29          subgroupBallotFindLSB ( global highp uint)
+0:29            'result' ( temp highp 4-component vector of uint)
+0:29          subgroupBallotFindMSB ( global highp uint)
+0:29            'result' ( temp highp 4-component vector of uint)
+0:31      Test condition and select ( temp void)
+0:31        Condition
+0:31        logical-and ( temp bool)
+0:31          Compare Equal ( temp bool)
+0:31            'relMask' ( temp highp 4-component vector of uint)
+0:31            'result' ( temp highp 4-component vector of uint)
+0:31          subgroupInverseBallot ( global bool, operation at highp)
+0:31            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31                Constant:
+0:31                  0 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31        true case
+0:33        Sequence
+0:33          move second child to first child ( temp highp float)
+0:33            direct index ( temp highp float)
+0:33              f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                  Constant:
+0:33                    1 (const int)
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                0 (const int)
+0:33            subgroupBroadcast ( global highp float)
+0:33              direct index ( temp highp float)
+0:33                f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                    Constant:
+0:33                      0 (const int)
+0:33                  Constant:
+0:33                    0 (const int)
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                3 (const uint)
+0:34          move second child to first child ( temp highp 2-component vector of float)
+0:34            vector swizzle ( temp highp 2-component vector of float)
+0:34              f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                  Constant:
+0:34                    1 (const int)
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Sequence
+0:34                Constant:
+0:34                  0 (const int)
+0:34                Constant:
+0:34                  1 (const int)
+0:34            subgroupBroadcast ( global highp 2-component vector of float)
+0:34              vector swizzle ( temp highp 2-component vector of float)
+0:34                f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                    Constant:
+0:34                      1 (const int)
+0:34                  Constant:
+0:34                    0 (const int)
+0:34                Sequence
+0:34                  Constant:
+0:34                    0 (const int)
+0:34                  Constant:
+0:34                    1 (const int)
+0:34              Constant:
+0:34                3 (const uint)
+0:35          move second child to first child ( temp highp 3-component vector of float)
+0:35            vector swizzle ( temp highp 3-component vector of float)
+0:35              f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                  Constant:
+0:35                    1 (const int)
+0:35                Constant:
+0:35                  0 (const int)
+0:35              Sequence
+0:35                Constant:
+0:35                  0 (const int)
+0:35                Constant:
+0:35                  1 (const int)
+0:35                Constant:
+0:35                  2 (const int)
+0:35            subgroupBroadcast ( global highp 3-component vector of float)
+0:35              vector swizzle ( temp highp 3-component vector of float)
+0:35                f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                    Constant:
+0:35                      2 (const int)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35                Sequence
+0:35                  Constant:
+0:35                    0 (const int)
+0:35                  Constant:
+0:35                    1 (const int)
+0:35                  Constant:
+0:35                    2 (const int)
+0:35              Constant:
+0:35                3 (const uint)
+0:36          move second child to first child ( temp highp 4-component vector of float)
+0:36            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                Constant:
+0:36                  1 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            subgroupBroadcast ( global highp 4-component vector of float)
+0:36              f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  Constant:
+0:36                    3 (const int)
+0:36                Constant:
+0:36                  0 (const int)
+0:36              Constant:
+0:36                3 (const uint)
+0:38          move second child to first child ( temp highp int)
+0:38            direct index ( temp highp int)
+0:38              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                  Constant:
+0:38                    2 (const int)
+0:38                Constant:
+0:38                  1 (const int)
+0:38              Constant:
+0:38                0 (const int)
+0:38            subgroupBroadcast ( global highp int)
+0:38              direct index ( temp highp int)
+0:38                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                    Constant:
+0:38                      0 (const int)
+0:38                  Constant:
+0:38                    1 (const int)
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                2 (const uint)
+0:39          move second child to first child ( temp highp 2-component vector of int)
+0:39            vector swizzle ( temp highp 2-component vector of int)
+0:39              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                  Constant:
+0:39                    2 (const int)
+0:39                Constant:
+0:39                  1 (const int)
+0:39              Sequence
+0:39                Constant:
+0:39                  0 (const int)
+0:39                Constant:
+0:39                  1 (const int)
+0:39            subgroupBroadcast ( global highp 2-component vector of int)
+0:39              vector swizzle ( temp highp 2-component vector of int)
+0:39                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                    Constant:
+0:39                      1 (const int)
+0:39                  Constant:
+0:39                    1 (const int)
+0:39                Sequence
+0:39                  Constant:
+0:39                    0 (const int)
+0:39                  Constant:
+0:39                    1 (const int)
+0:39              Constant:
+0:39                2 (const uint)
+0:40          move second child to first child ( temp highp 3-component vector of int)
+0:40            vector swizzle ( temp highp 3-component vector of int)
+0:40              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                  Constant:
+0:40                    2 (const int)
+0:40                Constant:
+0:40                  1 (const int)
+0:40              Sequence
+0:40                Constant:
+0:40                  0 (const int)
+0:40                Constant:
+0:40                  1 (const int)
+0:40                Constant:
+0:40                  2 (const int)
+0:40            subgroupBroadcast ( global highp 3-component vector of int)
+0:40              vector swizzle ( temp highp 3-component vector of int)
+0:40                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                    Constant:
+0:40                      2 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                Sequence
+0:40                  Constant:
+0:40                    0 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                  Constant:
+0:40                    2 (const int)
+0:40              Constant:
+0:40                2 (const uint)
+0:41          move second child to first child ( temp highp 4-component vector of int)
+0:41            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41                Constant:
+0:41                  2 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            subgroupBroadcast ( global highp 4-component vector of int)
+0:41              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41                  Constant:
+0:41                    3 (const int)
+0:41                Constant:
+0:41                  1 (const int)
+0:41              Constant:
+0:41                2 (const uint)
+0:43          move second child to first child ( temp highp uint)
+0:43            direct index ( temp highp uint)
+0:43              u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                  Constant:
+0:43                    3 (const int)
+0:43                Constant:
+0:43                  2 (const int)
+0:43              Constant:
+0:43                0 (const int)
+0:43            subgroupBroadcast ( global highp uint)
+0:43              direct index ( temp highp uint)
+0:43                u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                    Constant:
+0:43                      0 (const int)
+0:43                  Constant:
+0:43                    2 (const int)
+0:43                Constant:
+0:43                  0 (const int)
+0:43              Constant:
+0:43                1 (const uint)
+0:44          move second child to first child ( temp highp 2-component vector of uint)
+0:44            vector swizzle ( temp highp 2-component vector of uint)
+0:44              u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                  Constant:
+0:44                    3 (const int)
+0:44                Constant:
+0:44                  2 (const int)
+0:44              Sequence
+0:44                Constant:
+0:44                  0 (const int)
+0:44                Constant:
+0:44                  1 (const int)
+0:44            subgroupBroadcast ( global highp 2-component vector of uint)
+0:44              vector swizzle ( temp highp 2-component vector of uint)
+0:44                u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                    Constant:
+0:44                      1 (const int)
+0:44                  Constant:
+0:44                    2 (const int)
+0:44                Sequence
+0:44                  Constant:
+0:44                    0 (const int)
+0:44                  Constant:
+0:44                    1 (const int)
+0:44              Constant:
+0:44                1 (const uint)
+0:45          move second child to first child ( temp highp 3-component vector of uint)
+0:45            vector swizzle ( temp highp 3-component vector of uint)
+0:45              u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                  Constant:
+0:45                    3 (const int)
+0:45                Constant:
+0:45                  2 (const int)
+0:45              Sequence
+0:45                Constant:
+0:45                  0 (const int)
+0:45                Constant:
+0:45                  1 (const int)
+0:45                Constant:
+0:45                  2 (const int)
+0:45            subgroupBroadcast ( global highp 3-component vector of uint)
+0:45              vector swizzle ( temp highp 3-component vector of uint)
+0:45                u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                    Constant:
+0:45                      2 (const int)
+0:45                  Constant:
+0:45                    2 (const int)
+0:45                Sequence
+0:45                  Constant:
+0:45                    0 (const int)
+0:45                  Constant:
+0:45                    1 (const int)
+0:45                  Constant:
+0:45                    2 (const int)
+0:45              Constant:
+0:45                1 (const uint)
+0:46          move second child to first child ( temp highp 4-component vector of uint)
+0:46            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46                Constant:
+0:46                  3 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            subgroupBroadcast ( global highp 4-component vector of uint)
+0:46              u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46                  Constant:
+0:46                    3 (const int)
+0:46                Constant:
+0:46                  2 (const int)
+0:46              Constant:
+0:46                1 (const uint)
+0:48          move second child to first child ( temp highp int)
+0:48            direct index ( temp highp int)
+0:48              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                  Constant:
+0:48                    0 (const int)
+0:48                Constant:
+0:48                  1 (const int)
+0:48              Constant:
+0:48                0 (const int)
+0:48            Convert bool to int ( temp highp int)
+0:48              subgroupBroadcast ( global bool)
+0:48                Compare Less Than ( temp bool)
+0:48                  direct index ( temp highp int)
+0:48                    i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                        Constant:
+0:48                          0 (const int)
+0:48                      Constant:
+0:48                        1 (const int)
+0:48                    Constant:
+0:48                      0 (const int)
+0:48                  Constant:
+0:48                    0 (const int)
+0:48                Constant:
+0:48                  1 (const uint)
+0:49          move second child to first child ( temp highp 2-component vector of int)
+0:49            vector swizzle ( temp highp 2-component vector of int)
+0:49              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:49                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                  Constant:
+0:49                    0 (const int)
+0:49                Constant:
+0:49                  1 (const int)
+0:49              Sequence
+0:49                Constant:
+0:49                  0 (const int)
+0:49                Constant:
+0:49                  1 (const int)
+0:49            Convert bool to int ( temp highp 2-component vector of int)
+0:49              subgroupBroadcast ( global 2-component vector of bool)
+0:49                Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:49                  vector swizzle ( temp highp 2-component vector of int)
+0:49                    i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:49                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                        Constant:
+0:49                          1 (const int)
+0:49                      Constant:
+0:49                        1 (const int)
+0:49                    Sequence
+0:49                      Constant:
+0:49                        0 (const int)
+0:49                      Constant:
+0:49                        1 (const int)
+0:49                  Constant:
+0:49                    0 (const int)
+0:49                    0 (const int)
+0:49                Constant:
+0:49                  1 (const uint)
+0:50          move second child to first child ( temp highp 3-component vector of int)
+0:50            vector swizzle ( temp highp 3-component vector of int)
+0:50              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:50                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                  Constant:
+0:50                    0 (const int)
+0:50                Constant:
+0:50                  1 (const int)
+0:50              Sequence
+0:50                Constant:
+0:50                  0 (const int)
+0:50                Constant:
+0:50                  1 (const int)
+0:50                Constant:
+0:50                  2 (const int)
+0:50            Convert bool to int ( temp highp 3-component vector of int)
+0:50              subgroupBroadcast ( global 3-component vector of bool)
+0:50                Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:50                  vector swizzle ( temp highp 3-component vector of int)
+0:50                    i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:50                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                        Constant:
+0:50                          1 (const int)
+0:50                      Constant:
+0:50                        1 (const int)
+0:50                    Sequence
+0:50                      Constant:
+0:50                        0 (const int)
+0:50                      Constant:
+0:50                        1 (const int)
+0:50                      Constant:
+0:50                        2 (const int)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50                    0 (const int)
+0:50                    0 (const int)
+0:50                Constant:
+0:50                  1 (const uint)
+0:51          move second child to first child ( temp highp 4-component vector of int)
+0:51            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51                Constant:
+0:51                  0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51            Convert bool to int ( temp highp 4-component vector of int)
+0:51              subgroupBroadcast ( global 4-component vector of bool)
+0:51                Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:51                  i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:51                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51                      Constant:
+0:51                        1 (const int)
+0:51                    Constant:
+0:51                      1 (const int)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51                    0 (const int)
+0:51                    0 (const int)
+0:51                    0 (const int)
+0:51                Constant:
+0:51                  1 (const uint)
+0:31        false case
+0:55        Sequence
+0:55          move second child to first child ( temp highp float)
+0:55            direct index ( temp highp float)
+0:55              f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:55                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                  Constant:
+0:55                    1 (const int)
+0:55                Constant:
+0:55                  0 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55            subgroupBroadcastFirst ( global highp float)
+0:55              direct index ( temp highp float)
+0:55                f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:55                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                    Constant:
+0:55                      0 (const int)
+0:55                  Constant:
+0:55                    0 (const int)
+0:55                Constant:
+0:55                  0 (const int)
+0:56          move second child to first child ( temp highp 2-component vector of float)
+0:56            vector swizzle ( temp highp 2-component vector of float)
+0:56              f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:56                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                  Constant:
+0:56                    1 (const int)
+0:56                Constant:
+0:56                  0 (const int)
+0:56              Sequence
+0:56                Constant:
+0:56                  0 (const int)
+0:56                Constant:
+0:56                  1 (const int)
+0:56            subgroupBroadcastFirst ( global highp 2-component vector of float)
+0:56              vector swizzle ( temp highp 2-component vector of float)
+0:56                f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:56                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                    Constant:
+0:56                      1 (const int)
+0:56                  Constant:
+0:56                    0 (const int)
+0:56                Sequence
+0:56                  Constant:
+0:56                    0 (const int)
+0:56                  Constant:
+0:56                    1 (const int)
+0:57          move second child to first child ( temp highp 3-component vector of float)
+0:57            vector swizzle ( temp highp 3-component vector of float)
+0:57              f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:57                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57                  Constant:
+0:57                    1 (const int)
+0:57                Constant:
+0:57                  0 (const int)
+0:57              Sequence
+0:57                Constant:
+0:57                  0 (const int)
+0:57                Constant:
+0:57                  1 (const int)
+0:57                Constant:
+0:57                  2 (const int)
+0:57            subgroupBroadcastFirst ( global highp 3-component vector of float)
+0:57              vector swizzle ( temp highp 3-component vector of float)
+0:57                f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:57                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57                    Constant:
+0:57                      2 (const int)
+0:57                  Constant:
+0:57                    0 (const int)
+0:57                Sequence
+0:57                  Constant:
+0:57                    0 (const int)
+0:57                  Constant:
+0:57                    1 (const int)
+0:57                  Constant:
+0:57                    2 (const int)
+0:58          move second child to first child ( temp highp 4-component vector of float)
+0:58            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                Constant:
+0:58                  1 (const int)
+0:58              Constant:
+0:58                0 (const int)
+0:58            subgroupBroadcastFirst ( global highp 4-component vector of float)
+0:58              f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                  Constant:
+0:58                    3 (const int)
+0:58                Constant:
+0:58                  0 (const int)
+0:60          move second child to first child ( temp highp int)
+0:60            direct index ( temp highp int)
+0:60              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                  Constant:
+0:60                    2 (const int)
+0:60                Constant:
+0:60                  1 (const int)
+0:60              Constant:
+0:60                0 (const int)
+0:60            subgroupBroadcastFirst ( global highp int)
+0:60              direct index ( temp highp int)
+0:60                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                    Constant:
+0:60                      0 (const int)
+0:60                  Constant:
+0:60                    1 (const int)
+0:60                Constant:
+0:60                  0 (const int)
+0:61          move second child to first child ( temp highp 2-component vector of int)
+0:61            vector swizzle ( temp highp 2-component vector of int)
+0:61              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61                  Constant:
+0:61                    2 (const int)
+0:61                Constant:
+0:61                  1 (const int)
+0:61              Sequence
+0:61                Constant:
+0:61                  0 (const int)
+0:61                Constant:
+0:61                  1 (const int)
+0:61            subgroupBroadcastFirst ( global highp 2-component vector of int)
+0:61              vector swizzle ( temp highp 2-component vector of int)
+0:61                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61                    Constant:
+0:61                      1 (const int)
+0:61                  Constant:
+0:61                    1 (const int)
+0:61                Sequence
+0:61                  Constant:
+0:61                    0 (const int)
+0:61                  Constant:
+0:61                    1 (const int)
+0:62          move second child to first child ( temp highp 3-component vector of int)
+0:62            vector swizzle ( temp highp 3-component vector of int)
+0:62              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:62                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62                  Constant:
+0:62                    2 (const int)
+0:62                Constant:
+0:62                  1 (const int)
+0:62              Sequence
+0:62                Constant:
+0:62                  0 (const int)
+0:62                Constant:
+0:62                  1 (const int)
+0:62                Constant:
+0:62                  2 (const int)
+0:62            subgroupBroadcastFirst ( global highp 3-component vector of int)
+0:62              vector swizzle ( temp highp 3-component vector of int)
+0:62                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:62                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62                    Constant:
+0:62                      2 (const int)
+0:62                  Constant:
+0:62                    1 (const int)
+0:62                Sequence
+0:62                  Constant:
+0:62                    0 (const int)
+0:62                  Constant:
+0:62                    1 (const int)
+0:62                  Constant:
+0:62                    2 (const int)
+0:63          move second child to first child ( temp highp 4-component vector of int)
+0:63            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                Constant:
+0:63                  2 (const int)
+0:63              Constant:
+0:63                1 (const int)
+0:63            subgroupBroadcastFirst ( global highp 4-component vector of int)
+0:63              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                  Constant:
+0:63                    3 (const int)
+0:63                Constant:
+0:63                  1 (const int)
+0:65          move second child to first child ( temp highp uint)
+0:65            direct index ( temp highp uint)
+0:65              u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:65                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                  Constant:
+0:65                    3 (const int)
+0:65                Constant:
+0:65                  2 (const int)
+0:65              Constant:
+0:65                0 (const int)
+0:65            subgroupBroadcastFirst ( global highp uint)
+0:65              direct index ( temp highp uint)
+0:65                u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:65                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                    Constant:
+0:65                      0 (const int)
+0:65                  Constant:
+0:65                    2 (const int)
+0:65                Constant:
+0:65                  0 (const int)
+0:66          move second child to first child ( temp highp 2-component vector of uint)
+0:66            vector swizzle ( temp highp 2-component vector of uint)
+0:66              u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:66                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66                  Constant:
+0:66                    3 (const int)
+0:66                Constant:
+0:66                  2 (const int)
+0:66              Sequence
+0:66                Constant:
+0:66                  0 (const int)
+0:66                Constant:
+0:66                  1 (const int)
+0:66            subgroupBroadcastFirst ( global highp 2-component vector of uint)
+0:66              vector swizzle ( temp highp 2-component vector of uint)
+0:66                u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:66                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66                    Constant:
+0:66                      1 (const int)
+0:66                  Constant:
+0:66                    2 (const int)
+0:66                Sequence
+0:66                  Constant:
+0:66                    0 (const int)
+0:66                  Constant:
+0:66                    1 (const int)
+0:67          move second child to first child ( temp highp 3-component vector of uint)
+0:67            vector swizzle ( temp highp 3-component vector of uint)
+0:67              u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:67                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67                  Constant:
+0:67                    3 (const int)
+0:67                Constant:
+0:67                  2 (const int)
+0:67              Sequence
+0:67                Constant:
+0:67                  0 (const int)
+0:67                Constant:
+0:67                  1 (const int)
+0:67                Constant:
+0:67                  2 (const int)
+0:67            subgroupBroadcastFirst ( global highp 3-component vector of uint)
+0:67              vector swizzle ( temp highp 3-component vector of uint)
+0:67                u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:67                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67                    Constant:
+0:67                      2 (const int)
+0:67                  Constant:
+0:67                    2 (const int)
+0:67                Sequence
+0:67                  Constant:
+0:67                    0 (const int)
+0:67                  Constant:
+0:67                    1 (const int)
+0:67                  Constant:
+0:67                    2 (const int)
+0:68          move second child to first child ( temp highp 4-component vector of uint)
+0:68            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                Constant:
+0:68                  3 (const int)
+0:68              Constant:
+0:68                2 (const int)
+0:68            subgroupBroadcastFirst ( global highp 4-component vector of uint)
+0:68              u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                  Constant:
+0:68                    3 (const int)
+0:68                Constant:
+0:68                  2 (const int)
+0:70          move second child to first child ( temp highp int)
+0:70            direct index ( temp highp int)
+0:70              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                  Constant:
+0:70                    0 (const int)
+0:70                Constant:
+0:70                  1 (const int)
+0:70              Constant:
+0:70                0 (const int)
+0:70            Convert bool to int ( temp highp int)
+0:70              subgroupBroadcastFirst ( global bool)
+0:70                Compare Less Than ( temp bool)
+0:70                  direct index ( temp highp int)
+0:70                    i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                        Constant:
+0:70                          0 (const int)
+0:70                      Constant:
+0:70                        1 (const int)
+0:70                    Constant:
+0:70                      0 (const int)
+0:70                  Constant:
+0:70                    0 (const int)
+0:71          move second child to first child ( temp highp 2-component vector of int)
+0:71            vector swizzle ( temp highp 2-component vector of int)
+0:71              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71                  Constant:
+0:71                    0 (const int)
+0:71                Constant:
+0:71                  1 (const int)
+0:71              Sequence
+0:71                Constant:
+0:71                  0 (const int)
+0:71                Constant:
+0:71                  1 (const int)
+0:71            Convert bool to int ( temp highp 2-component vector of int)
+0:71              subgroupBroadcastFirst ( global 2-component vector of bool)
+0:71                Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:71                  vector swizzle ( temp highp 2-component vector of int)
+0:71                    i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71                        Constant:
+0:71                          1 (const int)
+0:71                      Constant:
+0:71                        1 (const int)
+0:71                    Sequence
+0:71                      Constant:
+0:71                        0 (const int)
+0:71                      Constant:
+0:71                        1 (const int)
+0:71                  Constant:
+0:71                    0 (const int)
+0:71                    0 (const int)
+0:72          move second child to first child ( temp highp 3-component vector of int)
+0:72            vector swizzle ( temp highp 3-component vector of int)
+0:72              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:72                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72                  Constant:
+0:72                    0 (const int)
+0:72                Constant:
+0:72                  1 (const int)
+0:72              Sequence
+0:72                Constant:
+0:72                  0 (const int)
+0:72                Constant:
+0:72                  1 (const int)
+0:72                Constant:
+0:72                  2 (const int)
+0:72            Convert bool to int ( temp highp 3-component vector of int)
+0:72              subgroupBroadcastFirst ( global 3-component vector of bool)
+0:72                Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:72                  vector swizzle ( temp highp 3-component vector of int)
+0:72                    i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:72                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72                        Constant:
+0:72                          1 (const int)
+0:72                      Constant:
+0:72                        1 (const int)
+0:72                    Sequence
+0:72                      Constant:
+0:72                        0 (const int)
+0:72                      Constant:
+0:72                        1 (const int)
+0:72                      Constant:
+0:72                        2 (const int)
+0:72                  Constant:
+0:72                    0 (const int)
+0:72                    0 (const int)
+0:72                    0 (const int)
+0:73          move second child to first child ( temp highp 4-component vector of int)
+0:73            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:73              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                Constant:
+0:73                  0 (const int)
+0:73              Constant:
+0:73                1 (const int)
+0:73            Convert bool to int ( temp highp 4-component vector of int)
+0:73              subgroupBroadcastFirst ( global 4-component vector of bool)
+0:73                Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:73                  i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:73                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                      Constant:
+0:73                        1 (const int)
+0:73                    Constant:
+0:73                      1 (const int)
+0:73                  Constant:
+0:73                    0 (const int)
+0:73                    0 (const int)
+0:73                    0 (const int)
+0:73                    0 (const int)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+0:? Sequence
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp highp uint)
+0:16          'invocation' ( temp highp uint)
+0:16          mod ( temp mediump uint)
+0:16            add ( temp mediump uint)
+0:16              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16            Constant:
+0:16              4 (const uint)
+0:18      Sequence
+0:18        move second child to first child ( temp highp 4-component vector of uint)
+0:18          'relMask' ( temp highp 4-component vector of uint)
+0:21          add ( temp highp 4-component vector of uint)
+0:20            add ( temp highp 4-component vector of uint)
+0:19              add ( temp highp 4-component vector of uint)
+0:18                add ( temp highp 4-component vector of uint)
+0:18                  'gl_SubgroupEqMask' ( in highp 4-component vector of uint SubgroupEqMask)
+0:19                  'gl_SubgroupGeMask' ( in highp 4-component vector of uint SubgroupGeMask)
+0:20                'gl_SubgroupGtMask' ( in highp 4-component vector of uint SubgroupGtMask)
+0:21              'gl_SubgroupLeMask' ( in highp 4-component vector of uint SubgroupLeMask)
+0:22            'gl_SubgroupLtMask' ( in highp 4-component vector of uint SubgroupLtMask)
+0:24      Sequence
+0:24        move second child to first child ( temp highp 4-component vector of uint)
+0:24          'result' ( temp highp 4-component vector of uint)
+0:24          subgroupBallot ( global highp 4-component vector of uint)
+0:24            Constant:
+0:24              true (const bool)
+0:26      move second child to first child ( temp highp uint)
+0:26        direct index ( temp highp uint)
+0:26          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              Constant:
+0:26                0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Constant:
+0:26            0 (const int)
+0:26        subgroupBallotBitCount ( global highp uint)
+0:26          'result' ( temp highp 4-component vector of uint)
+0:27      move second child to first child ( temp highp uint)
+0:27        direct index ( temp highp uint)
+0:27          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:27            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27              Constant:
+0:27                0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Constant:
+0:27            1 (const int)
+0:27        Test condition and select ( temp highp uint)
+0:27          Condition
+0:27          subgroupBallotBitExtract ( global bool, operation at highp)
+0:27            'result' ( temp highp 4-component vector of uint)
+0:27            Constant:
+0:27              0 (const uint)
+0:27          true case
+0:27          Constant:
+0:27            1 (const uint)
+0:27          false case
+0:27          Constant:
+0:27            0 (const uint)
+0:28      move second child to first child ( temp highp uint)
+0:28        direct index ( temp highp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                0 (const int)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            2 (const int)
+0:28        add ( temp highp uint)
+0:28          subgroupBallotInclusiveBitCount ( global highp uint)
+0:28            'result' ( temp highp 4-component vector of uint)
+0:28          subgroupBallotExclusiveBitCount ( global highp uint)
+0:28            'result' ( temp highp 4-component vector of uint)
+0:29      move second child to first child ( temp highp uint)
+0:29        direct index ( temp highp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              Constant:
+0:29                0 (const int)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        add ( temp highp uint)
+0:29          subgroupBallotFindLSB ( global highp uint)
+0:29            'result' ( temp highp 4-component vector of uint)
+0:29          subgroupBallotFindMSB ( global highp uint)
+0:29            'result' ( temp highp 4-component vector of uint)
+0:31      Test condition and select ( temp void)
+0:31        Condition
+0:31        logical-and ( temp bool)
+0:31          Compare Equal ( temp bool)
+0:31            'relMask' ( temp highp 4-component vector of uint)
+0:31            'result' ( temp highp 4-component vector of uint)
+0:31          subgroupInverseBallot ( global bool, operation at highp)
+0:31            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31                Constant:
+0:31                  0 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31        true case
+0:33        Sequence
+0:33          move second child to first child ( temp highp float)
+0:33            direct index ( temp highp float)
+0:33              f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                  Constant:
+0:33                    1 (const int)
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                0 (const int)
+0:33            subgroupBroadcast ( global highp float)
+0:33              direct index ( temp highp float)
+0:33                f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                    Constant:
+0:33                      0 (const int)
+0:33                  Constant:
+0:33                    0 (const int)
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                3 (const uint)
+0:34          move second child to first child ( temp highp 2-component vector of float)
+0:34            vector swizzle ( temp highp 2-component vector of float)
+0:34              f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                  Constant:
+0:34                    1 (const int)
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Sequence
+0:34                Constant:
+0:34                  0 (const int)
+0:34                Constant:
+0:34                  1 (const int)
+0:34            subgroupBroadcast ( global highp 2-component vector of float)
+0:34              vector swizzle ( temp highp 2-component vector of float)
+0:34                f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                    Constant:
+0:34                      1 (const int)
+0:34                  Constant:
+0:34                    0 (const int)
+0:34                Sequence
+0:34                  Constant:
+0:34                    0 (const int)
+0:34                  Constant:
+0:34                    1 (const int)
+0:34              Constant:
+0:34                3 (const uint)
+0:35          move second child to first child ( temp highp 3-component vector of float)
+0:35            vector swizzle ( temp highp 3-component vector of float)
+0:35              f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                  Constant:
+0:35                    1 (const int)
+0:35                Constant:
+0:35                  0 (const int)
+0:35              Sequence
+0:35                Constant:
+0:35                  0 (const int)
+0:35                Constant:
+0:35                  1 (const int)
+0:35                Constant:
+0:35                  2 (const int)
+0:35            subgroupBroadcast ( global highp 3-component vector of float)
+0:35              vector swizzle ( temp highp 3-component vector of float)
+0:35                f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                    Constant:
+0:35                      2 (const int)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35                Sequence
+0:35                  Constant:
+0:35                    0 (const int)
+0:35                  Constant:
+0:35                    1 (const int)
+0:35                  Constant:
+0:35                    2 (const int)
+0:35              Constant:
+0:35                3 (const uint)
+0:36          move second child to first child ( temp highp 4-component vector of float)
+0:36            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                Constant:
+0:36                  1 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            subgroupBroadcast ( global highp 4-component vector of float)
+0:36              f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  Constant:
+0:36                    3 (const int)
+0:36                Constant:
+0:36                  0 (const int)
+0:36              Constant:
+0:36                3 (const uint)
+0:38          move second child to first child ( temp highp int)
+0:38            direct index ( temp highp int)
+0:38              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                  Constant:
+0:38                    2 (const int)
+0:38                Constant:
+0:38                  1 (const int)
+0:38              Constant:
+0:38                0 (const int)
+0:38            subgroupBroadcast ( global highp int)
+0:38              direct index ( temp highp int)
+0:38                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                    Constant:
+0:38                      0 (const int)
+0:38                  Constant:
+0:38                    1 (const int)
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                2 (const uint)
+0:39          move second child to first child ( temp highp 2-component vector of int)
+0:39            vector swizzle ( temp highp 2-component vector of int)
+0:39              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                  Constant:
+0:39                    2 (const int)
+0:39                Constant:
+0:39                  1 (const int)
+0:39              Sequence
+0:39                Constant:
+0:39                  0 (const int)
+0:39                Constant:
+0:39                  1 (const int)
+0:39            subgroupBroadcast ( global highp 2-component vector of int)
+0:39              vector swizzle ( temp highp 2-component vector of int)
+0:39                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                    Constant:
+0:39                      1 (const int)
+0:39                  Constant:
+0:39                    1 (const int)
+0:39                Sequence
+0:39                  Constant:
+0:39                    0 (const int)
+0:39                  Constant:
+0:39                    1 (const int)
+0:39              Constant:
+0:39                2 (const uint)
+0:40          move second child to first child ( temp highp 3-component vector of int)
+0:40            vector swizzle ( temp highp 3-component vector of int)
+0:40              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                  Constant:
+0:40                    2 (const int)
+0:40                Constant:
+0:40                  1 (const int)
+0:40              Sequence
+0:40                Constant:
+0:40                  0 (const int)
+0:40                Constant:
+0:40                  1 (const int)
+0:40                Constant:
+0:40                  2 (const int)
+0:40            subgroupBroadcast ( global highp 3-component vector of int)
+0:40              vector swizzle ( temp highp 3-component vector of int)
+0:40                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                    Constant:
+0:40                      2 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                Sequence
+0:40                  Constant:
+0:40                    0 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                  Constant:
+0:40                    2 (const int)
+0:40              Constant:
+0:40                2 (const uint)
+0:41          move second child to first child ( temp highp 4-component vector of int)
+0:41            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41                Constant:
+0:41                  2 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            subgroupBroadcast ( global highp 4-component vector of int)
+0:41              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41                  Constant:
+0:41                    3 (const int)
+0:41                Constant:
+0:41                  1 (const int)
+0:41              Constant:
+0:41                2 (const uint)
+0:43          move second child to first child ( temp highp uint)
+0:43            direct index ( temp highp uint)
+0:43              u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                  Constant:
+0:43                    3 (const int)
+0:43                Constant:
+0:43                  2 (const int)
+0:43              Constant:
+0:43                0 (const int)
+0:43            subgroupBroadcast ( global highp uint)
+0:43              direct index ( temp highp uint)
+0:43                u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                    Constant:
+0:43                      0 (const int)
+0:43                  Constant:
+0:43                    2 (const int)
+0:43                Constant:
+0:43                  0 (const int)
+0:43              Constant:
+0:43                1 (const uint)
+0:44          move second child to first child ( temp highp 2-component vector of uint)
+0:44            vector swizzle ( temp highp 2-component vector of uint)
+0:44              u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                  Constant:
+0:44                    3 (const int)
+0:44                Constant:
+0:44                  2 (const int)
+0:44              Sequence
+0:44                Constant:
+0:44                  0 (const int)
+0:44                Constant:
+0:44                  1 (const int)
+0:44            subgroupBroadcast ( global highp 2-component vector of uint)
+0:44              vector swizzle ( temp highp 2-component vector of uint)
+0:44                u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                    Constant:
+0:44                      1 (const int)
+0:44                  Constant:
+0:44                    2 (const int)
+0:44                Sequence
+0:44                  Constant:
+0:44                    0 (const int)
+0:44                  Constant:
+0:44                    1 (const int)
+0:44              Constant:
+0:44                1 (const uint)
+0:45          move second child to first child ( temp highp 3-component vector of uint)
+0:45            vector swizzle ( temp highp 3-component vector of uint)
+0:45              u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                  Constant:
+0:45                    3 (const int)
+0:45                Constant:
+0:45                  2 (const int)
+0:45              Sequence
+0:45                Constant:
+0:45                  0 (const int)
+0:45                Constant:
+0:45                  1 (const int)
+0:45                Constant:
+0:45                  2 (const int)
+0:45            subgroupBroadcast ( global highp 3-component vector of uint)
+0:45              vector swizzle ( temp highp 3-component vector of uint)
+0:45                u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                    Constant:
+0:45                      2 (const int)
+0:45                  Constant:
+0:45                    2 (const int)
+0:45                Sequence
+0:45                  Constant:
+0:45                    0 (const int)
+0:45                  Constant:
+0:45                    1 (const int)
+0:45                  Constant:
+0:45                    2 (const int)
+0:45              Constant:
+0:45                1 (const uint)
+0:46          move second child to first child ( temp highp 4-component vector of uint)
+0:46            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46                Constant:
+0:46                  3 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            subgroupBroadcast ( global highp 4-component vector of uint)
+0:46              u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46                  Constant:
+0:46                    3 (const int)
+0:46                Constant:
+0:46                  2 (const int)
+0:46              Constant:
+0:46                1 (const uint)
+0:48          move second child to first child ( temp highp int)
+0:48            direct index ( temp highp int)
+0:48              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                  Constant:
+0:48                    0 (const int)
+0:48                Constant:
+0:48                  1 (const int)
+0:48              Constant:
+0:48                0 (const int)
+0:48            Convert bool to int ( temp highp int)
+0:48              subgroupBroadcast ( global bool)
+0:48                Compare Less Than ( temp bool)
+0:48                  direct index ( temp highp int)
+0:48                    i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                        Constant:
+0:48                          0 (const int)
+0:48                      Constant:
+0:48                        1 (const int)
+0:48                    Constant:
+0:48                      0 (const int)
+0:48                  Constant:
+0:48                    0 (const int)
+0:48                Constant:
+0:48                  1 (const uint)
+0:49          move second child to first child ( temp highp 2-component vector of int)
+0:49            vector swizzle ( temp highp 2-component vector of int)
+0:49              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:49                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                  Constant:
+0:49                    0 (const int)
+0:49                Constant:
+0:49                  1 (const int)
+0:49              Sequence
+0:49                Constant:
+0:49                  0 (const int)
+0:49                Constant:
+0:49                  1 (const int)
+0:49            Convert bool to int ( temp highp 2-component vector of int)
+0:49              subgroupBroadcast ( global 2-component vector of bool)
+0:49                Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:49                  vector swizzle ( temp highp 2-component vector of int)
+0:49                    i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:49                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                        Constant:
+0:49                          1 (const int)
+0:49                      Constant:
+0:49                        1 (const int)
+0:49                    Sequence
+0:49                      Constant:
+0:49                        0 (const int)
+0:49                      Constant:
+0:49                        1 (const int)
+0:49                  Constant:
+0:49                    0 (const int)
+0:49                    0 (const int)
+0:49                Constant:
+0:49                  1 (const uint)
+0:50          move second child to first child ( temp highp 3-component vector of int)
+0:50            vector swizzle ( temp highp 3-component vector of int)
+0:50              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:50                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                  Constant:
+0:50                    0 (const int)
+0:50                Constant:
+0:50                  1 (const int)
+0:50              Sequence
+0:50                Constant:
+0:50                  0 (const int)
+0:50                Constant:
+0:50                  1 (const int)
+0:50                Constant:
+0:50                  2 (const int)
+0:50            Convert bool to int ( temp highp 3-component vector of int)
+0:50              subgroupBroadcast ( global 3-component vector of bool)
+0:50                Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:50                  vector swizzle ( temp highp 3-component vector of int)
+0:50                    i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:50                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                        Constant:
+0:50                          1 (const int)
+0:50                      Constant:
+0:50                        1 (const int)
+0:50                    Sequence
+0:50                      Constant:
+0:50                        0 (const int)
+0:50                      Constant:
+0:50                        1 (const int)
+0:50                      Constant:
+0:50                        2 (const int)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50                    0 (const int)
+0:50                    0 (const int)
+0:50                Constant:
+0:50                  1 (const uint)
+0:51          move second child to first child ( temp highp 4-component vector of int)
+0:51            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51                Constant:
+0:51                  0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51            Convert bool to int ( temp highp 4-component vector of int)
+0:51              subgroupBroadcast ( global 4-component vector of bool)
+0:51                Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:51                  i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:51                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51                      Constant:
+0:51                        1 (const int)
+0:51                    Constant:
+0:51                      1 (const int)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51                    0 (const int)
+0:51                    0 (const int)
+0:51                    0 (const int)
+0:51                Constant:
+0:51                  1 (const uint)
+0:31        false case
+0:55        Sequence
+0:55          move second child to first child ( temp highp float)
+0:55            direct index ( temp highp float)
+0:55              f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:55                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                  Constant:
+0:55                    1 (const int)
+0:55                Constant:
+0:55                  0 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55            subgroupBroadcastFirst ( global highp float)
+0:55              direct index ( temp highp float)
+0:55                f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:55                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                    Constant:
+0:55                      0 (const int)
+0:55                  Constant:
+0:55                    0 (const int)
+0:55                Constant:
+0:55                  0 (const int)
+0:56          move second child to first child ( temp highp 2-component vector of float)
+0:56            vector swizzle ( temp highp 2-component vector of float)
+0:56              f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:56                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                  Constant:
+0:56                    1 (const int)
+0:56                Constant:
+0:56                  0 (const int)
+0:56              Sequence
+0:56                Constant:
+0:56                  0 (const int)
+0:56                Constant:
+0:56                  1 (const int)
+0:56            subgroupBroadcastFirst ( global highp 2-component vector of float)
+0:56              vector swizzle ( temp highp 2-component vector of float)
+0:56                f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:56                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                    Constant:
+0:56                      1 (const int)
+0:56                  Constant:
+0:56                    0 (const int)
+0:56                Sequence
+0:56                  Constant:
+0:56                    0 (const int)
+0:56                  Constant:
+0:56                    1 (const int)
+0:57          move second child to first child ( temp highp 3-component vector of float)
+0:57            vector swizzle ( temp highp 3-component vector of float)
+0:57              f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:57                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57                  Constant:
+0:57                    1 (const int)
+0:57                Constant:
+0:57                  0 (const int)
+0:57              Sequence
+0:57                Constant:
+0:57                  0 (const int)
+0:57                Constant:
+0:57                  1 (const int)
+0:57                Constant:
+0:57                  2 (const int)
+0:57            subgroupBroadcastFirst ( global highp 3-component vector of float)
+0:57              vector swizzle ( temp highp 3-component vector of float)
+0:57                f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:57                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57                    Constant:
+0:57                      2 (const int)
+0:57                  Constant:
+0:57                    0 (const int)
+0:57                Sequence
+0:57                  Constant:
+0:57                    0 (const int)
+0:57                  Constant:
+0:57                    1 (const int)
+0:57                  Constant:
+0:57                    2 (const int)
+0:58          move second child to first child ( temp highp 4-component vector of float)
+0:58            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                Constant:
+0:58                  1 (const int)
+0:58              Constant:
+0:58                0 (const int)
+0:58            subgroupBroadcastFirst ( global highp 4-component vector of float)
+0:58              f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                  Constant:
+0:58                    3 (const int)
+0:58                Constant:
+0:58                  0 (const int)
+0:60          move second child to first child ( temp highp int)
+0:60            direct index ( temp highp int)
+0:60              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                  Constant:
+0:60                    2 (const int)
+0:60                Constant:
+0:60                  1 (const int)
+0:60              Constant:
+0:60                0 (const int)
+0:60            subgroupBroadcastFirst ( global highp int)
+0:60              direct index ( temp highp int)
+0:60                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                    Constant:
+0:60                      0 (const int)
+0:60                  Constant:
+0:60                    1 (const int)
+0:60                Constant:
+0:60                  0 (const int)
+0:61          move second child to first child ( temp highp 2-component vector of int)
+0:61            vector swizzle ( temp highp 2-component vector of int)
+0:61              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61                  Constant:
+0:61                    2 (const int)
+0:61                Constant:
+0:61                  1 (const int)
+0:61              Sequence
+0:61                Constant:
+0:61                  0 (const int)
+0:61                Constant:
+0:61                  1 (const int)
+0:61            subgroupBroadcastFirst ( global highp 2-component vector of int)
+0:61              vector swizzle ( temp highp 2-component vector of int)
+0:61                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61                    Constant:
+0:61                      1 (const int)
+0:61                  Constant:
+0:61                    1 (const int)
+0:61                Sequence
+0:61                  Constant:
+0:61                    0 (const int)
+0:61                  Constant:
+0:61                    1 (const int)
+0:62          move second child to first child ( temp highp 3-component vector of int)
+0:62            vector swizzle ( temp highp 3-component vector of int)
+0:62              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:62                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62                  Constant:
+0:62                    2 (const int)
+0:62                Constant:
+0:62                  1 (const int)
+0:62              Sequence
+0:62                Constant:
+0:62                  0 (const int)
+0:62                Constant:
+0:62                  1 (const int)
+0:62                Constant:
+0:62                  2 (const int)
+0:62            subgroupBroadcastFirst ( global highp 3-component vector of int)
+0:62              vector swizzle ( temp highp 3-component vector of int)
+0:62                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:62                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62                    Constant:
+0:62                      2 (const int)
+0:62                  Constant:
+0:62                    1 (const int)
+0:62                Sequence
+0:62                  Constant:
+0:62                    0 (const int)
+0:62                  Constant:
+0:62                    1 (const int)
+0:62                  Constant:
+0:62                    2 (const int)
+0:63          move second child to first child ( temp highp 4-component vector of int)
+0:63            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                Constant:
+0:63                  2 (const int)
+0:63              Constant:
+0:63                1 (const int)
+0:63            subgroupBroadcastFirst ( global highp 4-component vector of int)
+0:63              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                  Constant:
+0:63                    3 (const int)
+0:63                Constant:
+0:63                  1 (const int)
+0:65          move second child to first child ( temp highp uint)
+0:65            direct index ( temp highp uint)
+0:65              u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:65                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                  Constant:
+0:65                    3 (const int)
+0:65                Constant:
+0:65                  2 (const int)
+0:65              Constant:
+0:65                0 (const int)
+0:65            subgroupBroadcastFirst ( global highp uint)
+0:65              direct index ( temp highp uint)
+0:65                u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:65                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                    Constant:
+0:65                      0 (const int)
+0:65                  Constant:
+0:65                    2 (const int)
+0:65                Constant:
+0:65                  0 (const int)
+0:66          move second child to first child ( temp highp 2-component vector of uint)
+0:66            vector swizzle ( temp highp 2-component vector of uint)
+0:66              u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:66                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66                  Constant:
+0:66                    3 (const int)
+0:66                Constant:
+0:66                  2 (const int)
+0:66              Sequence
+0:66                Constant:
+0:66                  0 (const int)
+0:66                Constant:
+0:66                  1 (const int)
+0:66            subgroupBroadcastFirst ( global highp 2-component vector of uint)
+0:66              vector swizzle ( temp highp 2-component vector of uint)
+0:66                u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:66                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66                    Constant:
+0:66                      1 (const int)
+0:66                  Constant:
+0:66                    2 (const int)
+0:66                Sequence
+0:66                  Constant:
+0:66                    0 (const int)
+0:66                  Constant:
+0:66                    1 (const int)
+0:67          move second child to first child ( temp highp 3-component vector of uint)
+0:67            vector swizzle ( temp highp 3-component vector of uint)
+0:67              u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:67                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67                  Constant:
+0:67                    3 (const int)
+0:67                Constant:
+0:67                  2 (const int)
+0:67              Sequence
+0:67                Constant:
+0:67                  0 (const int)
+0:67                Constant:
+0:67                  1 (const int)
+0:67                Constant:
+0:67                  2 (const int)
+0:67            subgroupBroadcastFirst ( global highp 3-component vector of uint)
+0:67              vector swizzle ( temp highp 3-component vector of uint)
+0:67                u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:67                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67                    Constant:
+0:67                      2 (const int)
+0:67                  Constant:
+0:67                    2 (const int)
+0:67                Sequence
+0:67                  Constant:
+0:67                    0 (const int)
+0:67                  Constant:
+0:67                    1 (const int)
+0:67                  Constant:
+0:67                    2 (const int)
+0:68          move second child to first child ( temp highp 4-component vector of uint)
+0:68            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                Constant:
+0:68                  3 (const int)
+0:68              Constant:
+0:68                2 (const int)
+0:68            subgroupBroadcastFirst ( global highp 4-component vector of uint)
+0:68              u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                  Constant:
+0:68                    3 (const int)
+0:68                Constant:
+0:68                  2 (const int)
+0:70          move second child to first child ( temp highp int)
+0:70            direct index ( temp highp int)
+0:70              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                  Constant:
+0:70                    0 (const int)
+0:70                Constant:
+0:70                  1 (const int)
+0:70              Constant:
+0:70                0 (const int)
+0:70            Convert bool to int ( temp highp int)
+0:70              subgroupBroadcastFirst ( global bool)
+0:70                Compare Less Than ( temp bool)
+0:70                  direct index ( temp highp int)
+0:70                    i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                        Constant:
+0:70                          0 (const int)
+0:70                      Constant:
+0:70                        1 (const int)
+0:70                    Constant:
+0:70                      0 (const int)
+0:70                  Constant:
+0:70                    0 (const int)
+0:71          move second child to first child ( temp highp 2-component vector of int)
+0:71            vector swizzle ( temp highp 2-component vector of int)
+0:71              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71                  Constant:
+0:71                    0 (const int)
+0:71                Constant:
+0:71                  1 (const int)
+0:71              Sequence
+0:71                Constant:
+0:71                  0 (const int)
+0:71                Constant:
+0:71                  1 (const int)
+0:71            Convert bool to int ( temp highp 2-component vector of int)
+0:71              subgroupBroadcastFirst ( global 2-component vector of bool)
+0:71                Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:71                  vector swizzle ( temp highp 2-component vector of int)
+0:71                    i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71                        Constant:
+0:71                          1 (const int)
+0:71                      Constant:
+0:71                        1 (const int)
+0:71                    Sequence
+0:71                      Constant:
+0:71                        0 (const int)
+0:71                      Constant:
+0:71                        1 (const int)
+0:71                  Constant:
+0:71                    0 (const int)
+0:71                    0 (const int)
+0:72          move second child to first child ( temp highp 3-component vector of int)
+0:72            vector swizzle ( temp highp 3-component vector of int)
+0:72              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:72                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72                  Constant:
+0:72                    0 (const int)
+0:72                Constant:
+0:72                  1 (const int)
+0:72              Sequence
+0:72                Constant:
+0:72                  0 (const int)
+0:72                Constant:
+0:72                  1 (const int)
+0:72                Constant:
+0:72                  2 (const int)
+0:72            Convert bool to int ( temp highp 3-component vector of int)
+0:72              subgroupBroadcastFirst ( global 3-component vector of bool)
+0:72                Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:72                  vector swizzle ( temp highp 3-component vector of int)
+0:72                    i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:72                      direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72                        'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72                        Constant:
+0:72                          1 (const int)
+0:72                      Constant:
+0:72                        1 (const int)
+0:72                    Sequence
+0:72                      Constant:
+0:72                        0 (const int)
+0:72                      Constant:
+0:72                        1 (const int)
+0:72                      Constant:
+0:72                        2 (const int)
+0:72                  Constant:
+0:72                    0 (const int)
+0:72                    0 (const int)
+0:72                    0 (const int)
+0:73          move second child to first child ( temp highp 4-component vector of int)
+0:73            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:73              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                Constant:
+0:73                  0 (const int)
+0:73              Constant:
+0:73                1 (const int)
+0:73            Convert bool to int ( temp highp 4-component vector of int)
+0:73              subgroupBroadcastFirst ( global 4-component vector of bool)
+0:73                Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:73                  i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:73                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                      Constant:
+0:73                        1 (const int)
+0:73                    Constant:
+0:73                      1 (const int)
+0:73                  Constant:
+0:73                    0 (const int)
+0:73                    0 (const int)
+0:73                    0 (const int)
+0:73                    0 (const int)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
diff --git a/Test/baseResults/glsl.es320.subgroupBallotNeg.comp.out b/Test/baseResults/glsl.es320.subgroupBallotNeg.comp.out
new file mode 100644
index 0000000..37bbfab
--- /dev/null
+++ b/Test/baseResults/glsl.es320.subgroupBallotNeg.comp.out
@@ -0,0 +1,275 @@
+glsl.es320.subgroupBallotNeg.comp
+ERROR: 0:31: 'id' : argument must be compile-time constant 
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+ERROR: node is still EOpNull!
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp uint)
+0:16          'invocation' ( temp uint)
+0:16          mod ( temp uint)
+0:16            add ( temp uint)
+0:16              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:16              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:16            Constant:
+0:16              4 (const uint)
+0:18      Sequence
+0:18        move second child to first child ( temp 4-component vector of uint)
+0:18          'relMask' ( temp 4-component vector of uint)
+0:21          add ( temp 4-component vector of uint)
+0:20            add ( temp 4-component vector of uint)
+0:19              add ( temp 4-component vector of uint)
+0:18                add ( temp 4-component vector of uint)
+0:18                  'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:19                  'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:20                'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:21              'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:22            'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:24      Sequence
+0:24        move second child to first child ( temp 4-component vector of uint)
+0:24          'result' ( temp 4-component vector of uint)
+0:24          subgroupBallot ( global 4-component vector of uint)
+0:24            Constant:
+0:24              true (const bool)
+0:26      move second child to first child ( temp uint)
+0:26        direct index ( temp uint)
+0:26          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:26              Constant:
+0:26                0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Constant:
+0:26            0 (const int)
+0:26        subgroupBallotBitCount ( global uint)
+0:26          'result' ( temp 4-component vector of uint)
+0:27      move second child to first child ( temp uint)
+0:27        direct index ( temp uint)
+0:27          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:27            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:27              Constant:
+0:27                0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Constant:
+0:27            1 (const int)
+0:27        Test condition and select ( temp uint)
+0:27          Condition
+0:27          subgroupBallotBitExtract ( global bool)
+0:27            'result' ( temp 4-component vector of uint)
+0:27            Constant:
+0:27              0 (const uint)
+0:27          true case
+0:27          Constant:
+0:27            1 (const uint)
+0:27          false case
+0:27          Constant:
+0:27            0 (const uint)
+0:28      move second child to first child ( temp uint)
+0:28        direct index ( temp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:28              Constant:
+0:28                0 (const int)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            2 (const int)
+0:28        add ( temp uint)
+0:28          subgroupBallotInclusiveBitCount ( global uint)
+0:28            'result' ( temp 4-component vector of uint)
+0:28          subgroupBallotExclusiveBitCount ( global uint)
+0:28            'result' ( temp 4-component vector of uint)
+0:29      move second child to first child ( temp uint)
+0:29        direct index ( temp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:29              Constant:
+0:29                0 (const int)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        add ( temp uint)
+0:29          subgroupBallotFindLSB ( global uint)
+0:29            'result' ( temp 4-component vector of uint)
+0:29          subgroupBallotFindMSB ( global uint)
+0:29            'result' ( temp 4-component vector of uint)
+0:31      move second child to first child ( temp float)
+0:31        direct index ( temp float)
+0:31          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:31              Constant:
+0:31                1 (const int)
+0:31            Constant:
+0:31              0 (const int)
+0:31          Constant:
+0:31            0 (const int)
+0:31        subgroupBroadcast ( global float)
+0:31          direct index ( temp float)
+0:31            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:31                Constant:
+0:31                  0 (const int)
+0:31              Constant:
+0:31                0 (const int)
+0:31            Constant:
+0:31              0 (const int)
+0:31          'invocation' ( temp uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+ERROR: node is still EOpNull!
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp uint)
+0:16          'invocation' ( temp uint)
+0:16          mod ( temp uint)
+0:16            add ( temp uint)
+0:16              'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:16              'gl_SubgroupSize' ( in uint SubgroupSize)
+0:16            Constant:
+0:16              4 (const uint)
+0:18      Sequence
+0:18        move second child to first child ( temp 4-component vector of uint)
+0:18          'relMask' ( temp 4-component vector of uint)
+0:21          add ( temp 4-component vector of uint)
+0:20            add ( temp 4-component vector of uint)
+0:19              add ( temp 4-component vector of uint)
+0:18                add ( temp 4-component vector of uint)
+0:18                  'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:19                  'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:20                'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:21              'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:22            'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:24      Sequence
+0:24        move second child to first child ( temp 4-component vector of uint)
+0:24          'result' ( temp 4-component vector of uint)
+0:24          subgroupBallot ( global 4-component vector of uint)
+0:24            Constant:
+0:24              true (const bool)
+0:26      move second child to first child ( temp uint)
+0:26        direct index ( temp uint)
+0:26          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:26              Constant:
+0:26                0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Constant:
+0:26            0 (const int)
+0:26        subgroupBallotBitCount ( global uint)
+0:26          'result' ( temp 4-component vector of uint)
+0:27      move second child to first child ( temp uint)
+0:27        direct index ( temp uint)
+0:27          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:27            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:27              Constant:
+0:27                0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Constant:
+0:27            1 (const int)
+0:27        Test condition and select ( temp uint)
+0:27          Condition
+0:27          subgroupBallotBitExtract ( global bool)
+0:27            'result' ( temp 4-component vector of uint)
+0:27            Constant:
+0:27              0 (const uint)
+0:27          true case
+0:27          Constant:
+0:27            1 (const uint)
+0:27          false case
+0:27          Constant:
+0:27            0 (const uint)
+0:28      move second child to first child ( temp uint)
+0:28        direct index ( temp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:28              Constant:
+0:28                0 (const int)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            2 (const int)
+0:28        add ( temp uint)
+0:28          subgroupBallotInclusiveBitCount ( global uint)
+0:28            'result' ( temp 4-component vector of uint)
+0:28          subgroupBallotExclusiveBitCount ( global uint)
+0:28            'result' ( temp 4-component vector of uint)
+0:29      move second child to first child ( temp uint)
+0:29        direct index ( temp uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:29              Constant:
+0:29                0 (const int)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        add ( temp uint)
+0:29          subgroupBallotFindLSB ( global uint)
+0:29            'result' ( temp 4-component vector of uint)
+0:29          subgroupBallotFindMSB ( global uint)
+0:29            'result' ( temp 4-component vector of uint)
+0:31      move second child to first child ( temp float)
+0:31        direct index ( temp float)
+0:31          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:31              Constant:
+0:31                1 (const int)
+0:31            Constant:
+0:31              0 (const int)
+0:31          Constant:
+0:31            0 (const int)
+0:31        subgroupBroadcast ( global float)
+0:31          direct index ( temp float)
+0:31            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+0:31                Constant:
+0:31                  0 (const int)
+0:31              Constant:
+0:31                0 (const int)
+0:31            Constant:
+0:31              0 (const int)
+0:31          'invocation' ( temp uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4})
+
diff --git a/Test/baseResults/glsl.es320.subgroupBasic.comp.out b/Test/baseResults/glsl.es320.subgroupBasic.comp.out
new file mode 100644
index 0000000..9a75bad
--- /dev/null
+++ b/Test/baseResults/glsl.es320.subgroupBasic.comp.out
@@ -0,0 +1,129 @@
+glsl.es320.subgroupBasic.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+0:? Sequence
+0:12  Function Definition: main( ( global void)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      move second child to first child ( temp highp int)
+0:14        indirect index (layout( column_major shared) temp highp int)
+0:14          a: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp int)
+0:14            'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+0:14            Constant:
+0:14              0 (const int)
+0:14          'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:14        Constant:
+0:14          1 (const int)
+0:15      move second child to first child ( temp highp int)
+0:15        indirect index (layout( column_major shared) temp highp int)
+0:15          a: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp int)
+0:15            'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+0:15            Constant:
+0:15              0 (const int)
+0:15          'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:15        Constant:
+0:15          1 (const int)
+0:16      move second child to first child ( temp highp int)
+0:16        indirect index (layout( column_major shared) temp highp int)
+0:16          a: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp int)
+0:16            'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+0:16            Constant:
+0:16              0 (const int)
+0:16          'gl_NumSubgroups' ( in highp uint NumSubgroups)
+0:16        Constant:
+0:16          1 (const int)
+0:17      move second child to first child ( temp highp int)
+0:17        indirect index (layout( column_major shared) temp highp int)
+0:17          a: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp int)
+0:17            'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+0:17            Constant:
+0:17              0 (const int)
+0:17          'gl_SubgroupID' ( in highp uint SubgroupID)
+0:17        Test condition and select ( temp highp int)
+0:17          Condition
+0:17          subgroupElect ( global bool)
+0:17          true case
+0:17          Constant:
+0:17            1 (const int)
+0:17          false case
+0:17          Constant:
+0:17            0 (const int)
+0:18      subgroupBarrier ( global void)
+0:19      subgroupMemoryBarrier ( global void)
+0:20      subgroupMemoryBarrierBuffer ( global void)
+0:21      subgroupMemoryBarrierShared ( global void)
+0:22      subgroupMemoryBarrierImage ( global void)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+local_size = (8, 8, 1)
+0:? Sequence
+0:12  Function Definition: main( ( global void)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      move second child to first child ( temp highp int)
+0:14        indirect index (layout( column_major shared) temp highp int)
+0:14          a: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp int)
+0:14            'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+0:14            Constant:
+0:14              0 (const int)
+0:14          'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:14        Constant:
+0:14          1 (const int)
+0:15      move second child to first child ( temp highp int)
+0:15        indirect index (layout( column_major shared) temp highp int)
+0:15          a: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp int)
+0:15            'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+0:15            Constant:
+0:15              0 (const int)
+0:15          'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:15        Constant:
+0:15          1 (const int)
+0:16      move second child to first child ( temp highp int)
+0:16        indirect index (layout( column_major shared) temp highp int)
+0:16          a: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp int)
+0:16            'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+0:16            Constant:
+0:16              0 (const int)
+0:16          'gl_NumSubgroups' ( in highp uint NumSubgroups)
+0:16        Constant:
+0:16          1 (const int)
+0:17      move second child to first child ( temp highp int)
+0:17        indirect index (layout( column_major shared) temp highp int)
+0:17          a: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp int)
+0:17            'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+0:17            Constant:
+0:17              0 (const int)
+0:17          'gl_SubgroupID' ( in highp uint SubgroupID)
+0:17        Test condition and select ( temp highp int)
+0:17          Condition
+0:17          subgroupElect ( global bool)
+0:17          true case
+0:17          Constant:
+0:17            1 (const int)
+0:17          false case
+0:17          Constant:
+0:17            0 (const int)
+0:18      subgroupBarrier ( global void)
+0:19      subgroupMemoryBarrier ( global void)
+0:20      subgroupMemoryBarrierBuffer ( global void)
+0:21      subgroupMemoryBarrierShared ( global void)
+0:22      subgroupMemoryBarrierImage ( global void)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of highp int a})
+
diff --git a/Test/baseResults/glsl.es320.subgroupClustered.comp.out b/Test/baseResults/glsl.es320.subgroupClustered.comp.out
new file mode 100644
index 0000000..27251d4
--- /dev/null
+++ b/Test/baseResults/glsl.es320.subgroupClustered.comp.out
@@ -0,0 +1,4637 @@
+glsl.es320.subgroupClustered.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+local_size = (8, 1, 1)
+0:? Sequence
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp highp uint)
+0:16          'invocation' ( temp highp uint)
+0:16          mod ( temp mediump uint)
+0:16            add ( temp mediump uint)
+0:16              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16            Constant:
+0:16              4 (const uint)
+0:18      move second child to first child ( temp highp float)
+0:18        direct index ( temp highp float)
+0:18          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          Constant:
+0:18            0 (const int)
+0:18        subgroupClusteredAdd ( global highp float)
+0:18          direct index ( temp highp float)
+0:18            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                Constant:
+0:18                  0 (const int)
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          Constant:
+0:18            1 (const uint)
+0:19      move second child to first child ( temp highp 2-component vector of float)
+0:19        vector swizzle ( temp highp 2-component vector of float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Sequence
+0:19            Constant:
+0:19              0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19        subgroupClusteredAdd ( global highp 2-component vector of float)
+0:19          vector swizzle ( temp highp 2-component vector of float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                Constant:
+0:19                  1 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Sequence
+0:19              Constant:
+0:19                0 (const int)
+0:19              Constant:
+0:19                1 (const int)
+0:19          Constant:
+0:19            1 (const uint)
+0:20      move second child to first child ( temp highp 3-component vector of float)
+0:20        vector swizzle ( temp highp 3-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              Constant:
+0:20                0 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20            Constant:
+0:20              2 (const int)
+0:20        subgroupClusteredAdd ( global highp 3-component vector of float)
+0:20          vector swizzle ( temp highp 3-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                Constant:
+0:20                  2 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20              Constant:
+0:20                2 (const int)
+0:20          Constant:
+0:20            1 (const uint)
+0:21      move second child to first child ( temp highp 4-component vector of float)
+0:21        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            0 (const int)
+0:21        subgroupClusteredAdd ( global highp 4-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              Constant:
+0:21                3 (const int)
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            1 (const uint)
+0:23      move second child to first child ( temp highp int)
+0:23        direct index ( temp highp int)
+0:23          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              Constant:
+0:23                1 (const int)
+0:23            Constant:
+0:23              1 (const int)
+0:23          Constant:
+0:23            0 (const int)
+0:23        subgroupClusteredAdd ( global highp int)
+0:23          direct index ( temp highp int)
+0:23            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                1 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:23          Constant:
+0:23            1 (const uint)
+0:24      move second child to first child ( temp highp 2-component vector of int)
+0:24        vector swizzle ( temp highp 2-component vector of int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              Constant:
+0:24                1 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Sequence
+0:24            Constant:
+0:24              0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24        subgroupClusteredAdd ( global highp 2-component vector of int)
+0:24          vector swizzle ( temp highp 2-component vector of int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                Constant:
+0:24                  1 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Sequence
+0:24              Constant:
+0:24                0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24          Constant:
+0:24            1 (const uint)
+0:25      move second child to first child ( temp highp 3-component vector of int)
+0:25        vector swizzle ( temp highp 3-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              Constant:
+0:25                1 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25        subgroupClusteredAdd ( global highp 3-component vector of int)
+0:25          vector swizzle ( temp highp 3-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                Constant:
+0:25                  2 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25          Constant:
+0:25            1 (const uint)
+0:26      move second child to first child ( temp highp 4-component vector of int)
+0:26        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            Constant:
+0:26              1 (const int)
+0:26          Constant:
+0:26            1 (const int)
+0:26        subgroupClusteredAdd ( global highp 4-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              Constant:
+0:26                3 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Constant:
+0:26            1 (const uint)
+0:28      move second child to first child ( temp highp uint)
+0:28        direct index ( temp highp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                2 (const int)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:28        subgroupClusteredAdd ( global highp uint)
+0:28          direct index ( temp highp uint)
+0:28            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                2 (const int)
+0:28            Constant:
+0:28              0 (const int)
+0:28          Constant:
+0:28            1 (const uint)
+0:29      move second child to first child ( temp highp 2-component vector of uint)
+0:29        vector swizzle ( temp highp 2-component vector of uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              Constant:
+0:29                2 (const int)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Sequence
+0:29            Constant:
+0:29              0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29        subgroupClusteredAdd ( global highp 2-component vector of uint)
+0:29          vector swizzle ( temp highp 2-component vector of uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                Constant:
+0:29                  1 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Sequence
+0:29              Constant:
+0:29                0 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29          Constant:
+0:29            1 (const uint)
+0:30      move second child to first child ( temp highp 3-component vector of uint)
+0:30        vector swizzle ( temp highp 3-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              Constant:
+0:30                2 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30        subgroupClusteredAdd ( global highp 3-component vector of uint)
+0:30          vector swizzle ( temp highp 3-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                Constant:
+0:30                  2 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30          Constant:
+0:30            1 (const uint)
+0:31      move second child to first child ( temp highp 4-component vector of uint)
+0:31        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            Constant:
+0:31              2 (const int)
+0:31          Constant:
+0:31            2 (const int)
+0:31        subgroupClusteredAdd ( global highp 4-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              Constant:
+0:31                3 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31          Constant:
+0:31            1 (const uint)
+0:33      move second child to first child ( temp highp float)
+0:33        direct index ( temp highp float)
+0:33          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              Constant:
+0:33                3 (const int)
+0:33            Constant:
+0:33              0 (const int)
+0:33          Constant:
+0:33            0 (const int)
+0:33        subgroupClusteredMul ( global highp float)
+0:33          direct index ( temp highp float)
+0:33            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                0 (const int)
+0:33            Constant:
+0:33              0 (const int)
+0:33          Constant:
+0:33            1 (const uint)
+0:34      move second child to first child ( temp highp 2-component vector of float)
+0:34        vector swizzle ( temp highp 2-component vector of float)
+0:34          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              Constant:
+0:34                3 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34        subgroupClusteredMul ( global highp 2-component vector of float)
+0:34          vector swizzle ( temp highp 2-component vector of float)
+0:34            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                Constant:
+0:34                  1 (const int)
+0:34              Constant:
+0:34                0 (const int)
+0:34            Sequence
+0:34              Constant:
+0:34                0 (const int)
+0:34              Constant:
+0:34                1 (const int)
+0:34          Constant:
+0:34            1 (const uint)
+0:35      move second child to first child ( temp highp 3-component vector of float)
+0:35        vector swizzle ( temp highp 3-component vector of float)
+0:35          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              Constant:
+0:35                3 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35            Constant:
+0:35              2 (const int)
+0:35        subgroupClusteredMul ( global highp 3-component vector of float)
+0:35          vector swizzle ( temp highp 3-component vector of float)
+0:35            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                Constant:
+0:35                  2 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:35              Constant:
+0:35                2 (const int)
+0:35          Constant:
+0:35            1 (const uint)
+0:36      move second child to first child ( temp highp 4-component vector of float)
+0:36        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            Constant:
+0:36              3 (const int)
+0:36          Constant:
+0:36            0 (const int)
+0:36        subgroupClusteredMul ( global highp 4-component vector of float)
+0:36          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36              Constant:
+0:36                3 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Constant:
+0:36            1 (const uint)
+0:38      move second child to first child ( temp highp int)
+0:38        direct index ( temp highp int)
+0:38          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              Constant:
+0:38                0 (const int)
+0:38            Constant:
+0:38              1 (const int)
+0:38          Constant:
+0:38            0 (const int)
+0:38        subgroupClusteredMul ( global highp int)
+0:38          direct index ( temp highp int)
+0:38            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                1 (const int)
+0:38            Constant:
+0:38              0 (const int)
+0:38          Constant:
+0:38            1 (const uint)
+0:39      move second child to first child ( temp highp 2-component vector of int)
+0:39        vector swizzle ( temp highp 2-component vector of int)
+0:39          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39          Sequence
+0:39            Constant:
+0:39              0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39        subgroupClusteredMul ( global highp 2-component vector of int)
+0:39          vector swizzle ( temp highp 2-component vector of int)
+0:39            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                Constant:
+0:39                  1 (const int)
+0:39              Constant:
+0:39                1 (const int)
+0:39            Sequence
+0:39              Constant:
+0:39                0 (const int)
+0:39              Constant:
+0:39                1 (const int)
+0:39          Constant:
+0:39            1 (const uint)
+0:40      move second child to first child ( temp highp 3-component vector of int)
+0:40        vector swizzle ( temp highp 3-component vector of int)
+0:40          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              Constant:
+0:40                0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40            Constant:
+0:40              2 (const int)
+0:40        subgroupClusteredMul ( global highp 3-component vector of int)
+0:40          vector swizzle ( temp highp 3-component vector of int)
+0:40            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                Constant:
+0:40                  2 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Sequence
+0:40              Constant:
+0:40                0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40              Constant:
+0:40                2 (const int)
+0:40          Constant:
+0:40            1 (const uint)
+0:41      move second child to first child ( temp highp 4-component vector of int)
+0:41        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            Constant:
+0:41              0 (const int)
+0:41          Constant:
+0:41            1 (const int)
+0:41        subgroupClusteredMul ( global highp 4-component vector of int)
+0:41          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              Constant:
+0:41                3 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Constant:
+0:41            1 (const uint)
+0:43      move second child to first child ( temp highp uint)
+0:43        direct index ( temp highp uint)
+0:43          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              Constant:
+0:43                1 (const int)
+0:43            Constant:
+0:43              2 (const int)
+0:43          Constant:
+0:43            0 (const int)
+0:43        subgroupClusteredMul ( global highp uint)
+0:43          direct index ( temp highp uint)
+0:43            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                Constant:
+0:43                  0 (const int)
+0:43              Constant:
+0:43                2 (const int)
+0:43            Constant:
+0:43              0 (const int)
+0:43          Constant:
+0:43            1 (const uint)
+0:44      move second child to first child ( temp highp 2-component vector of uint)
+0:44        vector swizzle ( temp highp 2-component vector of uint)
+0:44          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              Constant:
+0:44                1 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:44          Sequence
+0:44            Constant:
+0:44              0 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44        subgroupClusteredMul ( global highp 2-component vector of uint)
+0:44          vector swizzle ( temp highp 2-component vector of uint)
+0:44            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                Constant:
+0:44                  1 (const int)
+0:44              Constant:
+0:44                2 (const int)
+0:44            Sequence
+0:44              Constant:
+0:44                0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44          Constant:
+0:44            1 (const uint)
+0:45      move second child to first child ( temp highp 3-component vector of uint)
+0:45        vector swizzle ( temp highp 3-component vector of uint)
+0:45          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              Constant:
+0:45                1 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45        subgroupClusteredMul ( global highp 3-component vector of uint)
+0:45          vector swizzle ( temp highp 3-component vector of uint)
+0:45            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                Constant:
+0:45                  2 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45          Constant:
+0:45            1 (const uint)
+0:46      move second child to first child ( temp highp 4-component vector of uint)
+0:46        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            Constant:
+0:46              1 (const int)
+0:46          Constant:
+0:46            2 (const int)
+0:46        subgroupClusteredMul ( global highp 4-component vector of uint)
+0:46          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              Constant:
+0:46                3 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Constant:
+0:46            1 (const uint)
+0:48      move second child to first child ( temp highp float)
+0:48        direct index ( temp highp float)
+0:48          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:48            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              Constant:
+0:48                2 (const int)
+0:48            Constant:
+0:48              0 (const int)
+0:48          Constant:
+0:48            0 (const int)
+0:48        subgroupClusteredMin ( global highp float)
+0:48          direct index ( temp highp float)
+0:48            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:48              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                Constant:
+0:48                  0 (const int)
+0:48              Constant:
+0:48                0 (const int)
+0:48            Constant:
+0:48              0 (const int)
+0:48          Constant:
+0:48            1 (const uint)
+0:49      move second child to first child ( temp highp 2-component vector of float)
+0:49        vector swizzle ( temp highp 2-component vector of float)
+0:49          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:49            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              Constant:
+0:49                2 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:49          Sequence
+0:49            Constant:
+0:49              0 (const int)
+0:49            Constant:
+0:49              1 (const int)
+0:49        subgroupClusteredMin ( global highp 2-component vector of float)
+0:49          vector swizzle ( temp highp 2-component vector of float)
+0:49            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                Constant:
+0:49                  1 (const int)
+0:49              Constant:
+0:49                0 (const int)
+0:49            Sequence
+0:49              Constant:
+0:49                0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:49          Constant:
+0:49            1 (const uint)
+0:50      move second child to first child ( temp highp 3-component vector of float)
+0:50        vector swizzle ( temp highp 3-component vector of float)
+0:50          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:50            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              Constant:
+0:50                2 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50        subgroupClusteredMin ( global highp 3-component vector of float)
+0:50          vector swizzle ( temp highp 3-component vector of float)
+0:50            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                Constant:
+0:50                  2 (const int)
+0:50              Constant:
+0:50                0 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50          Constant:
+0:50            1 (const uint)
+0:51      move second child to first child ( temp highp 4-component vector of float)
+0:51        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:51          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            Constant:
+0:51              2 (const int)
+0:51          Constant:
+0:51            0 (const int)
+0:51        subgroupClusteredMin ( global highp 4-component vector of float)
+0:51          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:51            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              Constant:
+0:51                3 (const int)
+0:51            Constant:
+0:51              0 (const int)
+0:51          Constant:
+0:51            1 (const uint)
+0:53      move second child to first child ( temp highp int)
+0:53        direct index ( temp highp int)
+0:53          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              Constant:
+0:53                3 (const int)
+0:53            Constant:
+0:53              1 (const int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        subgroupClusteredMin ( global highp int)
+0:53          direct index ( temp highp int)
+0:53            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                Constant:
+0:53                  0 (const int)
+0:53              Constant:
+0:53                1 (const int)
+0:53            Constant:
+0:53              0 (const int)
+0:53          Constant:
+0:53            1 (const uint)
+0:54      move second child to first child ( temp highp 2-component vector of int)
+0:54        vector swizzle ( temp highp 2-component vector of int)
+0:54          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              Constant:
+0:54                3 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54          Sequence
+0:54            Constant:
+0:54              0 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54        subgroupClusteredMin ( global highp 2-component vector of int)
+0:54          vector swizzle ( temp highp 2-component vector of int)
+0:54            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                Constant:
+0:54                  1 (const int)
+0:54              Constant:
+0:54                1 (const int)
+0:54            Sequence
+0:54              Constant:
+0:54                0 (const int)
+0:54              Constant:
+0:54                1 (const int)
+0:54          Constant:
+0:54            1 (const uint)
+0:55      move second child to first child ( temp highp 3-component vector of int)
+0:55        vector swizzle ( temp highp 3-component vector of int)
+0:55          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              Constant:
+0:55                3 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55            Constant:
+0:55              2 (const int)
+0:55        subgroupClusteredMin ( global highp 3-component vector of int)
+0:55          vector swizzle ( temp highp 3-component vector of int)
+0:55            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                Constant:
+0:55                  2 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55              Constant:
+0:55                2 (const int)
+0:55          Constant:
+0:55            1 (const uint)
+0:56      move second child to first child ( temp highp 4-component vector of int)
+0:56        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            Constant:
+0:56              3 (const int)
+0:56          Constant:
+0:56            1 (const int)
+0:56        subgroupClusteredMin ( global highp 4-component vector of int)
+0:56          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56              Constant:
+0:56                3 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56          Constant:
+0:56            1 (const uint)
+0:58      move second child to first child ( temp highp uint)
+0:58        direct index ( temp highp uint)
+0:58          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:58            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              Constant:
+0:58                0 (const int)
+0:58            Constant:
+0:58              2 (const int)
+0:58          Constant:
+0:58            0 (const int)
+0:58        subgroupClusteredMin ( global highp uint)
+0:58          direct index ( temp highp uint)
+0:58            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:58              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                Constant:
+0:58                  0 (const int)
+0:58              Constant:
+0:58                2 (const int)
+0:58            Constant:
+0:58              0 (const int)
+0:58          Constant:
+0:58            1 (const uint)
+0:59      move second child to first child ( temp highp 2-component vector of uint)
+0:59        vector swizzle ( temp highp 2-component vector of uint)
+0:59          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:59            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59              Constant:
+0:59                0 (const int)
+0:59            Constant:
+0:59              2 (const int)
+0:59          Sequence
+0:59            Constant:
+0:59              0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:59        subgroupClusteredMin ( global highp 2-component vector of uint)
+0:59          vector swizzle ( temp highp 2-component vector of uint)
+0:59            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59                Constant:
+0:59                  1 (const int)
+0:59              Constant:
+0:59                2 (const int)
+0:59            Sequence
+0:59              Constant:
+0:59                0 (const int)
+0:59              Constant:
+0:59                1 (const int)
+0:59          Constant:
+0:59            1 (const uint)
+0:60      move second child to first child ( temp highp 3-component vector of uint)
+0:60        vector swizzle ( temp highp 3-component vector of uint)
+0:60          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:60            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              Constant:
+0:60                0 (const int)
+0:60            Constant:
+0:60              2 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60            Constant:
+0:60              2 (const int)
+0:60        subgroupClusteredMin ( global highp 3-component vector of uint)
+0:60          vector swizzle ( temp highp 3-component vector of uint)
+0:60            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                Constant:
+0:60                  2 (const int)
+0:60              Constant:
+0:60                2 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60              Constant:
+0:60                2 (const int)
+0:60          Constant:
+0:60            1 (const uint)
+0:61      move second child to first child ( temp highp 4-component vector of uint)
+0:61        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:61          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61            Constant:
+0:61              0 (const int)
+0:61          Constant:
+0:61            2 (const int)
+0:61        subgroupClusteredMin ( global highp 4-component vector of uint)
+0:61          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:61            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61              Constant:
+0:61                3 (const int)
+0:61            Constant:
+0:61              2 (const int)
+0:61          Constant:
+0:61            1 (const uint)
+0:63      move second child to first child ( temp highp float)
+0:63        direct index ( temp highp float)
+0:63          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:63            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63              Constant:
+0:63                1 (const int)
+0:63            Constant:
+0:63              0 (const int)
+0:63          Constant:
+0:63            0 (const int)
+0:63        subgroupClusteredMax ( global highp float)
+0:63          direct index ( temp highp float)
+0:63            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:63              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                Constant:
+0:63                  0 (const int)
+0:63              Constant:
+0:63                0 (const int)
+0:63            Constant:
+0:63              0 (const int)
+0:63          Constant:
+0:63            1 (const uint)
+0:64      move second child to first child ( temp highp 2-component vector of float)
+0:64        vector swizzle ( temp highp 2-component vector of float)
+0:64          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:64            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64              Constant:
+0:64                1 (const int)
+0:64            Constant:
+0:64              0 (const int)
+0:64          Sequence
+0:64            Constant:
+0:64              0 (const int)
+0:64            Constant:
+0:64              1 (const int)
+0:64        subgroupClusteredMax ( global highp 2-component vector of float)
+0:64          vector swizzle ( temp highp 2-component vector of float)
+0:64            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:64              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64                Constant:
+0:64                  1 (const int)
+0:64              Constant:
+0:64                0 (const int)
+0:64            Sequence
+0:64              Constant:
+0:64                0 (const int)
+0:64              Constant:
+0:64                1 (const int)
+0:64          Constant:
+0:64            1 (const uint)
+0:65      move second child to first child ( temp highp 3-component vector of float)
+0:65        vector swizzle ( temp highp 3-component vector of float)
+0:65          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:65            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65              Constant:
+0:65                1 (const int)
+0:65            Constant:
+0:65              0 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65            Constant:
+0:65              2 (const int)
+0:65        subgroupClusteredMax ( global highp 3-component vector of float)
+0:65          vector swizzle ( temp highp 3-component vector of float)
+0:65            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:65              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                Constant:
+0:65                  2 (const int)
+0:65              Constant:
+0:65                0 (const int)
+0:65            Sequence
+0:65              Constant:
+0:65                0 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:65              Constant:
+0:65                2 (const int)
+0:65          Constant:
+0:65            1 (const uint)
+0:66      move second child to first child ( temp highp 4-component vector of float)
+0:66        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:66          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66            Constant:
+0:66              1 (const int)
+0:66          Constant:
+0:66            0 (const int)
+0:66        subgroupClusteredMax ( global highp 4-component vector of float)
+0:66          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:66            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66              Constant:
+0:66                3 (const int)
+0:66            Constant:
+0:66              0 (const int)
+0:66          Constant:
+0:66            1 (const uint)
+0:68      move second child to first child ( temp highp int)
+0:68        direct index ( temp highp int)
+0:68          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:68            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68              Constant:
+0:68                2 (const int)
+0:68            Constant:
+0:68              1 (const int)
+0:68          Constant:
+0:68            0 (const int)
+0:68        subgroupClusteredMax ( global highp int)
+0:68          direct index ( temp highp int)
+0:68            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:68              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                Constant:
+0:68                  0 (const int)
+0:68              Constant:
+0:68                1 (const int)
+0:68            Constant:
+0:68              0 (const int)
+0:68          Constant:
+0:68            1 (const uint)
+0:69      move second child to first child ( temp highp 2-component vector of int)
+0:69        vector swizzle ( temp highp 2-component vector of int)
+0:69          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:69            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69              Constant:
+0:69                2 (const int)
+0:69            Constant:
+0:69              1 (const int)
+0:69          Sequence
+0:69            Constant:
+0:69              0 (const int)
+0:69            Constant:
+0:69              1 (const int)
+0:69        subgroupClusteredMax ( global highp 2-component vector of int)
+0:69          vector swizzle ( temp highp 2-component vector of int)
+0:69            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:69              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69                Constant:
+0:69                  1 (const int)
+0:69              Constant:
+0:69                1 (const int)
+0:69            Sequence
+0:69              Constant:
+0:69                0 (const int)
+0:69              Constant:
+0:69                1 (const int)
+0:69          Constant:
+0:69            1 (const uint)
+0:70      move second child to first child ( temp highp 3-component vector of int)
+0:70        vector swizzle ( temp highp 3-component vector of int)
+0:70          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70              Constant:
+0:70                2 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70          Sequence
+0:70            Constant:
+0:70              0 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70            Constant:
+0:70              2 (const int)
+0:70        subgroupClusteredMax ( global highp 3-component vector of int)
+0:70          vector swizzle ( temp highp 3-component vector of int)
+0:70            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                Constant:
+0:70                  2 (const int)
+0:70              Constant:
+0:70                1 (const int)
+0:70            Sequence
+0:70              Constant:
+0:70                0 (const int)
+0:70              Constant:
+0:70                1 (const int)
+0:70              Constant:
+0:70                2 (const int)
+0:70          Constant:
+0:70            1 (const uint)
+0:71      move second child to first child ( temp highp 4-component vector of int)
+0:71        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71            Constant:
+0:71              2 (const int)
+0:71          Constant:
+0:71            1 (const int)
+0:71        subgroupClusteredMax ( global highp 4-component vector of int)
+0:71          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71              Constant:
+0:71                3 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71          Constant:
+0:71            1 (const uint)
+0:73      move second child to first child ( temp highp uint)
+0:73        direct index ( temp highp uint)
+0:73          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:73            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73              Constant:
+0:73                3 (const int)
+0:73            Constant:
+0:73              2 (const int)
+0:73          Constant:
+0:73            0 (const int)
+0:73        subgroupClusteredMax ( global highp uint)
+0:73          direct index ( temp highp uint)
+0:73            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:73              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                Constant:
+0:73                  0 (const int)
+0:73              Constant:
+0:73                2 (const int)
+0:73            Constant:
+0:73              0 (const int)
+0:73          Constant:
+0:73            1 (const uint)
+0:74      move second child to first child ( temp highp 2-component vector of uint)
+0:74        vector swizzle ( temp highp 2-component vector of uint)
+0:74          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:74            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74              Constant:
+0:74                3 (const int)
+0:74            Constant:
+0:74              2 (const int)
+0:74          Sequence
+0:74            Constant:
+0:74              0 (const int)
+0:74            Constant:
+0:74              1 (const int)
+0:74        subgroupClusteredMax ( global highp 2-component vector of uint)
+0:74          vector swizzle ( temp highp 2-component vector of uint)
+0:74            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:74              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74                Constant:
+0:74                  1 (const int)
+0:74              Constant:
+0:74                2 (const int)
+0:74            Sequence
+0:74              Constant:
+0:74                0 (const int)
+0:74              Constant:
+0:74                1 (const int)
+0:74          Constant:
+0:74            1 (const uint)
+0:75      move second child to first child ( temp highp 3-component vector of uint)
+0:75        vector swizzle ( temp highp 3-component vector of uint)
+0:75          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:75            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75              Constant:
+0:75                3 (const int)
+0:75            Constant:
+0:75              2 (const int)
+0:75          Sequence
+0:75            Constant:
+0:75              0 (const int)
+0:75            Constant:
+0:75              1 (const int)
+0:75            Constant:
+0:75              2 (const int)
+0:75        subgroupClusteredMax ( global highp 3-component vector of uint)
+0:75          vector swizzle ( temp highp 3-component vector of uint)
+0:75            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:75              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75                Constant:
+0:75                  2 (const int)
+0:75              Constant:
+0:75                2 (const int)
+0:75            Sequence
+0:75              Constant:
+0:75                0 (const int)
+0:75              Constant:
+0:75                1 (const int)
+0:75              Constant:
+0:75                2 (const int)
+0:75          Constant:
+0:75            1 (const uint)
+0:76      move second child to first child ( temp highp 4-component vector of uint)
+0:76        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:76          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76            Constant:
+0:76              3 (const int)
+0:76          Constant:
+0:76            2 (const int)
+0:76        subgroupClusteredMax ( global highp 4-component vector of uint)
+0:76          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:76            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76              Constant:
+0:76                3 (const int)
+0:76            Constant:
+0:76              2 (const int)
+0:76          Constant:
+0:76            1 (const uint)
+0:78      move second child to first child ( temp highp int)
+0:78        direct index ( temp highp int)
+0:78          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78              Constant:
+0:78                0 (const int)
+0:78            Constant:
+0:78              1 (const int)
+0:78          Constant:
+0:78            0 (const int)
+0:78        subgroupClusteredAnd ( global highp int)
+0:78          direct index ( temp highp int)
+0:78            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78                Constant:
+0:78                  0 (const int)
+0:78              Constant:
+0:78                1 (const int)
+0:78            Constant:
+0:78              0 (const int)
+0:78          Constant:
+0:78            1 (const uint)
+0:79      move second child to first child ( temp highp 2-component vector of int)
+0:79        vector swizzle ( temp highp 2-component vector of int)
+0:79          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:79            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79              Constant:
+0:79                0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:79          Sequence
+0:79            Constant:
+0:79              0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:79        subgroupClusteredAnd ( global highp 2-component vector of int)
+0:79          vector swizzle ( temp highp 2-component vector of int)
+0:79            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:79              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79                Constant:
+0:79                  1 (const int)
+0:79              Constant:
+0:79                1 (const int)
+0:79            Sequence
+0:79              Constant:
+0:79                0 (const int)
+0:79              Constant:
+0:79                1 (const int)
+0:79          Constant:
+0:79            1 (const uint)
+0:80      move second child to first child ( temp highp 3-component vector of int)
+0:80        vector swizzle ( temp highp 3-component vector of int)
+0:80          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:80            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80              Constant:
+0:80                0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80          Sequence
+0:80            Constant:
+0:80              0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80            Constant:
+0:80              2 (const int)
+0:80        subgroupClusteredAnd ( global highp 3-component vector of int)
+0:80          vector swizzle ( temp highp 3-component vector of int)
+0:80            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:80              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80                Constant:
+0:80                  2 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80            Sequence
+0:80              Constant:
+0:80                0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80              Constant:
+0:80                2 (const int)
+0:80          Constant:
+0:80            1 (const uint)
+0:81      move second child to first child ( temp highp 4-component vector of int)
+0:81        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:81          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81            Constant:
+0:81              0 (const int)
+0:81          Constant:
+0:81            1 (const int)
+0:81        subgroupClusteredAnd ( global highp 4-component vector of int)
+0:81          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:81            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81              Constant:
+0:81                3 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81          Constant:
+0:81            1 (const uint)
+0:83      move second child to first child ( temp highp uint)
+0:83        direct index ( temp highp uint)
+0:83          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83              Constant:
+0:83                1 (const int)
+0:83            Constant:
+0:83              2 (const int)
+0:83          Constant:
+0:83            0 (const int)
+0:83        subgroupClusteredAnd ( global highp uint)
+0:83          direct index ( temp highp uint)
+0:83            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83                Constant:
+0:83                  0 (const int)
+0:83              Constant:
+0:83                2 (const int)
+0:83            Constant:
+0:83              0 (const int)
+0:83          Constant:
+0:83            1 (const uint)
+0:84      move second child to first child ( temp highp 2-component vector of uint)
+0:84        vector swizzle ( temp highp 2-component vector of uint)
+0:84          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:84            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84              Constant:
+0:84                1 (const int)
+0:84            Constant:
+0:84              2 (const int)
+0:84          Sequence
+0:84            Constant:
+0:84              0 (const int)
+0:84            Constant:
+0:84              1 (const int)
+0:84        subgroupClusteredAnd ( global highp 2-component vector of uint)
+0:84          vector swizzle ( temp highp 2-component vector of uint)
+0:84            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:84              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84                Constant:
+0:84                  1 (const int)
+0:84              Constant:
+0:84                2 (const int)
+0:84            Sequence
+0:84              Constant:
+0:84                0 (const int)
+0:84              Constant:
+0:84                1 (const int)
+0:84          Constant:
+0:84            1 (const uint)
+0:85      move second child to first child ( temp highp 3-component vector of uint)
+0:85        vector swizzle ( temp highp 3-component vector of uint)
+0:85          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:85            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85              Constant:
+0:85                1 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85          Sequence
+0:85            Constant:
+0:85              0 (const int)
+0:85            Constant:
+0:85              1 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85        subgroupClusteredAnd ( global highp 3-component vector of uint)
+0:85          vector swizzle ( temp highp 3-component vector of uint)
+0:85            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:85              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85                Constant:
+0:85                  2 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:85            Sequence
+0:85              Constant:
+0:85                0 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:85          Constant:
+0:85            1 (const uint)
+0:86      move second child to first child ( temp highp 4-component vector of uint)
+0:86        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:86          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86            Constant:
+0:86              1 (const int)
+0:86          Constant:
+0:86            2 (const int)
+0:86        subgroupClusteredAnd ( global highp 4-component vector of uint)
+0:86          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:86            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86              Constant:
+0:86                3 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:86          Constant:
+0:86            1 (const uint)
+0:88      move second child to first child ( temp highp int)
+0:88        direct index ( temp highp int)
+0:88          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:88            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88              Constant:
+0:88                2 (const int)
+0:88            Constant:
+0:88              1 (const int)
+0:88          Constant:
+0:88            0 (const int)
+0:88        Convert bool to int ( temp highp int)
+0:88          subgroupClusteredAnd ( global bool)
+0:88            Compare Less Than ( temp bool)
+0:88              direct index ( temp highp int)
+0:88                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:88                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88                    Constant:
+0:88                      0 (const int)
+0:88                  Constant:
+0:88                    1 (const int)
+0:88                Constant:
+0:88                  0 (const int)
+0:88              Constant:
+0:88                0 (const int)
+0:88            Constant:
+0:88              1 (const uint)
+0:89      move second child to first child ( temp highp 2-component vector of int)
+0:89        vector swizzle ( temp highp 2-component vector of int)
+0:89          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:89            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89              Constant:
+0:89                2 (const int)
+0:89            Constant:
+0:89              1 (const int)
+0:89          Sequence
+0:89            Constant:
+0:89              0 (const int)
+0:89            Constant:
+0:89              1 (const int)
+0:89        Convert bool to int ( temp highp 2-component vector of int)
+0:89          subgroupClusteredAnd ( global 2-component vector of bool)
+0:89            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:89              vector swizzle ( temp highp 2-component vector of int)
+0:89                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:89                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89                    Constant:
+0:89                      1 (const int)
+0:89                  Constant:
+0:89                    1 (const int)
+0:89                Sequence
+0:89                  Constant:
+0:89                    0 (const int)
+0:89                  Constant:
+0:89                    1 (const int)
+0:89              Constant:
+0:89                0 (const int)
+0:89                0 (const int)
+0:89            Constant:
+0:89              1 (const uint)
+0:90      move second child to first child ( temp highp 3-component vector of int)
+0:90        vector swizzle ( temp highp 3-component vector of int)
+0:90          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90              Constant:
+0:90                2 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90          Sequence
+0:90            Constant:
+0:90              0 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90            Constant:
+0:90              2 (const int)
+0:90        Convert bool to int ( temp highp 3-component vector of int)
+0:90          subgroupClusteredAnd ( global 3-component vector of bool)
+0:90            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:90              vector swizzle ( temp highp 3-component vector of int)
+0:90                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90                    Constant:
+0:90                      1 (const int)
+0:90                  Constant:
+0:90                    1 (const int)
+0:90                Sequence
+0:90                  Constant:
+0:90                    0 (const int)
+0:90                  Constant:
+0:90                    1 (const int)
+0:90                  Constant:
+0:90                    2 (const int)
+0:90              Constant:
+0:90                0 (const int)
+0:90                0 (const int)
+0:90                0 (const int)
+0:90            Constant:
+0:90              1 (const uint)
+0:91      move second child to first child ( temp highp 4-component vector of int)
+0:91        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91            Constant:
+0:91              2 (const int)
+0:91          Constant:
+0:91            1 (const int)
+0:91        Convert bool to int ( temp highp 4-component vector of int)
+0:91          subgroupClusteredAnd ( global 4-component vector of bool)
+0:91            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:91              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91                  Constant:
+0:91                    1 (const int)
+0:91                Constant:
+0:91                  1 (const int)
+0:91              Constant:
+0:91                0 (const int)
+0:91                0 (const int)
+0:91                0 (const int)
+0:91                0 (const int)
+0:91            Constant:
+0:91              1 (const uint)
+0:93      move second child to first child ( temp highp int)
+0:93        direct index ( temp highp int)
+0:93          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93              Constant:
+0:93                3 (const int)
+0:93            Constant:
+0:93              1 (const int)
+0:93          Constant:
+0:93            0 (const int)
+0:93        subgroupClusteredOr ( global highp int)
+0:93          direct index ( temp highp int)
+0:93            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93                Constant:
+0:93                  0 (const int)
+0:93              Constant:
+0:93                1 (const int)
+0:93            Constant:
+0:93              0 (const int)
+0:93          Constant:
+0:93            1 (const uint)
+0:94      move second child to first child ( temp highp 2-component vector of int)
+0:94        vector swizzle ( temp highp 2-component vector of int)
+0:94          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94              Constant:
+0:94                3 (const int)
+0:94            Constant:
+0:94              1 (const int)
+0:94          Sequence
+0:94            Constant:
+0:94              0 (const int)
+0:94            Constant:
+0:94              1 (const int)
+0:94        subgroupClusteredOr ( global highp 2-component vector of int)
+0:94          vector swizzle ( temp highp 2-component vector of int)
+0:94            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94                Constant:
+0:94                  1 (const int)
+0:94              Constant:
+0:94                1 (const int)
+0:94            Sequence
+0:94              Constant:
+0:94                0 (const int)
+0:94              Constant:
+0:94                1 (const int)
+0:94          Constant:
+0:94            1 (const uint)
+0:95      move second child to first child ( temp highp 3-component vector of int)
+0:95        vector swizzle ( temp highp 3-component vector of int)
+0:95          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95              Constant:
+0:95                3 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95          Sequence
+0:95            Constant:
+0:95              0 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95            Constant:
+0:95              2 (const int)
+0:95        subgroupClusteredOr ( global highp 3-component vector of int)
+0:95          vector swizzle ( temp highp 3-component vector of int)
+0:95            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95                Constant:
+0:95                  2 (const int)
+0:95              Constant:
+0:95                1 (const int)
+0:95            Sequence
+0:95              Constant:
+0:95                0 (const int)
+0:95              Constant:
+0:95                1 (const int)
+0:95              Constant:
+0:95                2 (const int)
+0:95          Constant:
+0:95            1 (const uint)
+0:96      move second child to first child ( temp highp 4-component vector of int)
+0:96        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96            Constant:
+0:96              3 (const int)
+0:96          Constant:
+0:96            1 (const int)
+0:96        subgroupClusteredOr ( global highp 4-component vector of int)
+0:96          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96              Constant:
+0:96                3 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96          Constant:
+0:96            1 (const uint)
+0:98      move second child to first child ( temp highp uint)
+0:98        direct index ( temp highp uint)
+0:98          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98              Constant:
+0:98                0 (const int)
+0:98            Constant:
+0:98              2 (const int)
+0:98          Constant:
+0:98            0 (const int)
+0:98        subgroupClusteredOr ( global highp uint)
+0:98          direct index ( temp highp uint)
+0:98            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98                Constant:
+0:98                  0 (const int)
+0:98              Constant:
+0:98                2 (const int)
+0:98            Constant:
+0:98              0 (const int)
+0:98          Constant:
+0:98            1 (const uint)
+0:99      move second child to first child ( temp highp 2-component vector of uint)
+0:99        vector swizzle ( temp highp 2-component vector of uint)
+0:99          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:99            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99              Constant:
+0:99                0 (const int)
+0:99            Constant:
+0:99              2 (const int)
+0:99          Sequence
+0:99            Constant:
+0:99              0 (const int)
+0:99            Constant:
+0:99              1 (const int)
+0:99        subgroupClusteredOr ( global highp 2-component vector of uint)
+0:99          vector swizzle ( temp highp 2-component vector of uint)
+0:99            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:99              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99                Constant:
+0:99                  1 (const int)
+0:99              Constant:
+0:99                2 (const int)
+0:99            Sequence
+0:99              Constant:
+0:99                0 (const int)
+0:99              Constant:
+0:99                1 (const int)
+0:99          Constant:
+0:99            1 (const uint)
+0:100      move second child to first child ( temp highp 3-component vector of uint)
+0:100        vector swizzle ( temp highp 3-component vector of uint)
+0:100          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:100            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100              Constant:
+0:100                0 (const int)
+0:100            Constant:
+0:100              2 (const int)
+0:100          Sequence
+0:100            Constant:
+0:100              0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100            Constant:
+0:100              2 (const int)
+0:100        subgroupClusteredOr ( global highp 3-component vector of uint)
+0:100          vector swizzle ( temp highp 3-component vector of uint)
+0:100            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:100              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100                Constant:
+0:100                  2 (const int)
+0:100              Constant:
+0:100                2 (const int)
+0:100            Sequence
+0:100              Constant:
+0:100                0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100              Constant:
+0:100                2 (const int)
+0:100          Constant:
+0:100            1 (const uint)
+0:101      move second child to first child ( temp highp 4-component vector of uint)
+0:101        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:101          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101            Constant:
+0:101              0 (const int)
+0:101          Constant:
+0:101            2 (const int)
+0:101        subgroupClusteredOr ( global highp 4-component vector of uint)
+0:101          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:101            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101              Constant:
+0:101                3 (const int)
+0:101            Constant:
+0:101              2 (const int)
+0:101          Constant:
+0:101            1 (const uint)
+0:103      move second child to first child ( temp highp int)
+0:103        direct index ( temp highp int)
+0:103          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103              Constant:
+0:103                1 (const int)
+0:103            Constant:
+0:103              1 (const int)
+0:103          Constant:
+0:103            0 (const int)
+0:103        Convert bool to int ( temp highp int)
+0:103          subgroupClusteredOr ( global bool)
+0:103            Compare Less Than ( temp bool)
+0:103              direct index ( temp highp int)
+0:103                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103                    Constant:
+0:103                      0 (const int)
+0:103                  Constant:
+0:103                    1 (const int)
+0:103                Constant:
+0:103                  0 (const int)
+0:103              Constant:
+0:103                0 (const int)
+0:103            Constant:
+0:103              1 (const uint)
+0:104      move second child to first child ( temp highp 2-component vector of int)
+0:104        vector swizzle ( temp highp 2-component vector of int)
+0:104          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:104            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104              Constant:
+0:104                1 (const int)
+0:104            Constant:
+0:104              1 (const int)
+0:104          Sequence
+0:104            Constant:
+0:104              0 (const int)
+0:104            Constant:
+0:104              1 (const int)
+0:104        Convert bool to int ( temp highp 2-component vector of int)
+0:104          subgroupClusteredOr ( global 2-component vector of bool)
+0:104            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:104              vector swizzle ( temp highp 2-component vector of int)
+0:104                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:104                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104                    Constant:
+0:104                      1 (const int)
+0:104                  Constant:
+0:104                    1 (const int)
+0:104                Sequence
+0:104                  Constant:
+0:104                    0 (const int)
+0:104                  Constant:
+0:104                    1 (const int)
+0:104              Constant:
+0:104                0 (const int)
+0:104                0 (const int)
+0:104            Constant:
+0:104              1 (const uint)
+0:105      move second child to first child ( temp highp 3-component vector of int)
+0:105        vector swizzle ( temp highp 3-component vector of int)
+0:105          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:105            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105              Constant:
+0:105                1 (const int)
+0:105            Constant:
+0:105              1 (const int)
+0:105          Sequence
+0:105            Constant:
+0:105              0 (const int)
+0:105            Constant:
+0:105              1 (const int)
+0:105            Constant:
+0:105              2 (const int)
+0:105        Convert bool to int ( temp highp 3-component vector of int)
+0:105          subgroupClusteredOr ( global 3-component vector of bool)
+0:105            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:105              vector swizzle ( temp highp 3-component vector of int)
+0:105                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:105                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105                    Constant:
+0:105                      1 (const int)
+0:105                  Constant:
+0:105                    1 (const int)
+0:105                Sequence
+0:105                  Constant:
+0:105                    0 (const int)
+0:105                  Constant:
+0:105                    1 (const int)
+0:105                  Constant:
+0:105                    2 (const int)
+0:105              Constant:
+0:105                0 (const int)
+0:105                0 (const int)
+0:105                0 (const int)
+0:105            Constant:
+0:105              1 (const uint)
+0:106      move second child to first child ( temp highp 4-component vector of int)
+0:106        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:106          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106            Constant:
+0:106              1 (const int)
+0:106          Constant:
+0:106            1 (const int)
+0:106        Convert bool to int ( temp highp 4-component vector of int)
+0:106          subgroupClusteredOr ( global 4-component vector of bool)
+0:106            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:106              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:106                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106                  Constant:
+0:106                    1 (const int)
+0:106                Constant:
+0:106                  1 (const int)
+0:106              Constant:
+0:106                0 (const int)
+0:106                0 (const int)
+0:106                0 (const int)
+0:106                0 (const int)
+0:106            Constant:
+0:106              1 (const uint)
+0:108      move second child to first child ( temp highp int)
+0:108        direct index ( temp highp int)
+0:108          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:108            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108              Constant:
+0:108                2 (const int)
+0:108            Constant:
+0:108              1 (const int)
+0:108          Constant:
+0:108            0 (const int)
+0:108        subgroupClusteredXor ( global highp int)
+0:108          direct index ( temp highp int)
+0:108            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:108              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108                Constant:
+0:108                  0 (const int)
+0:108              Constant:
+0:108                1 (const int)
+0:108            Constant:
+0:108              0 (const int)
+0:108          Constant:
+0:108            1 (const uint)
+0:109      move second child to first child ( temp highp 2-component vector of int)
+0:109        vector swizzle ( temp highp 2-component vector of int)
+0:109          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:109            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109              Constant:
+0:109                2 (const int)
+0:109            Constant:
+0:109              1 (const int)
+0:109          Sequence
+0:109            Constant:
+0:109              0 (const int)
+0:109            Constant:
+0:109              1 (const int)
+0:109        subgroupClusteredXor ( global highp 2-component vector of int)
+0:109          vector swizzle ( temp highp 2-component vector of int)
+0:109            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:109              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109                Constant:
+0:109                  1 (const int)
+0:109              Constant:
+0:109                1 (const int)
+0:109            Sequence
+0:109              Constant:
+0:109                0 (const int)
+0:109              Constant:
+0:109                1 (const int)
+0:109          Constant:
+0:109            1 (const uint)
+0:110      move second child to first child ( temp highp 3-component vector of int)
+0:110        vector swizzle ( temp highp 3-component vector of int)
+0:110          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110              Constant:
+0:110                2 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110          Sequence
+0:110            Constant:
+0:110              0 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110            Constant:
+0:110              2 (const int)
+0:110        subgroupClusteredXor ( global highp 3-component vector of int)
+0:110          vector swizzle ( temp highp 3-component vector of int)
+0:110            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110                Constant:
+0:110                  2 (const int)
+0:110              Constant:
+0:110                1 (const int)
+0:110            Sequence
+0:110              Constant:
+0:110                0 (const int)
+0:110              Constant:
+0:110                1 (const int)
+0:110              Constant:
+0:110                2 (const int)
+0:110          Constant:
+0:110            1 (const uint)
+0:111      move second child to first child ( temp highp 4-component vector of int)
+0:111        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111            Constant:
+0:111              2 (const int)
+0:111          Constant:
+0:111            1 (const int)
+0:111        subgroupClusteredXor ( global highp 4-component vector of int)
+0:111          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111              Constant:
+0:111                3 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111          Constant:
+0:111            1 (const uint)
+0:113      move second child to first child ( temp highp uint)
+0:113        direct index ( temp highp uint)
+0:113          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:113            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113              Constant:
+0:113                3 (const int)
+0:113            Constant:
+0:113              2 (const int)
+0:113          Constant:
+0:113            0 (const int)
+0:113        subgroupClusteredXor ( global highp uint)
+0:113          direct index ( temp highp uint)
+0:113            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:113              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113                Constant:
+0:113                  0 (const int)
+0:113              Constant:
+0:113                2 (const int)
+0:113            Constant:
+0:113              0 (const int)
+0:113          Constant:
+0:113            1 (const uint)
+0:114      move second child to first child ( temp highp 2-component vector of uint)
+0:114        vector swizzle ( temp highp 2-component vector of uint)
+0:114          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:114            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114              Constant:
+0:114                3 (const int)
+0:114            Constant:
+0:114              2 (const int)
+0:114          Sequence
+0:114            Constant:
+0:114              0 (const int)
+0:114            Constant:
+0:114              1 (const int)
+0:114        subgroupClusteredXor ( global highp 2-component vector of uint)
+0:114          vector swizzle ( temp highp 2-component vector of uint)
+0:114            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:114              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114                Constant:
+0:114                  1 (const int)
+0:114              Constant:
+0:114                2 (const int)
+0:114            Sequence
+0:114              Constant:
+0:114                0 (const int)
+0:114              Constant:
+0:114                1 (const int)
+0:114          Constant:
+0:114            1 (const uint)
+0:115      move second child to first child ( temp highp 3-component vector of uint)
+0:115        vector swizzle ( temp highp 3-component vector of uint)
+0:115          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:115            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115              Constant:
+0:115                3 (const int)
+0:115            Constant:
+0:115              2 (const int)
+0:115          Sequence
+0:115            Constant:
+0:115              0 (const int)
+0:115            Constant:
+0:115              1 (const int)
+0:115            Constant:
+0:115              2 (const int)
+0:115        subgroupClusteredXor ( global highp 3-component vector of uint)
+0:115          vector swizzle ( temp highp 3-component vector of uint)
+0:115            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:115              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115                Constant:
+0:115                  2 (const int)
+0:115              Constant:
+0:115                2 (const int)
+0:115            Sequence
+0:115              Constant:
+0:115                0 (const int)
+0:115              Constant:
+0:115                1 (const int)
+0:115              Constant:
+0:115                2 (const int)
+0:115          Constant:
+0:115            1 (const uint)
+0:116      move second child to first child ( temp highp 4-component vector of uint)
+0:116        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:116          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116            Constant:
+0:116              3 (const int)
+0:116          Constant:
+0:116            2 (const int)
+0:116        subgroupClusteredXor ( global highp 4-component vector of uint)
+0:116          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:116            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116              Constant:
+0:116                3 (const int)
+0:116            Constant:
+0:116              2 (const int)
+0:116          Constant:
+0:116            1 (const uint)
+0:118      move second child to first child ( temp highp int)
+0:118        direct index ( temp highp int)
+0:118          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118              Constant:
+0:118                0 (const int)
+0:118            Constant:
+0:118              1 (const int)
+0:118          Constant:
+0:118            0 (const int)
+0:118        Convert bool to int ( temp highp int)
+0:118          subgroupClusteredXor ( global bool)
+0:118            Compare Less Than ( temp bool)
+0:118              direct index ( temp highp int)
+0:118                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118                    Constant:
+0:118                      0 (const int)
+0:118                  Constant:
+0:118                    1 (const int)
+0:118                Constant:
+0:118                  0 (const int)
+0:118              Constant:
+0:118                0 (const int)
+0:118            Constant:
+0:118              1 (const uint)
+0:119      move second child to first child ( temp highp 2-component vector of int)
+0:119        vector swizzle ( temp highp 2-component vector of int)
+0:119          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:119            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119              Constant:
+0:119                0 (const int)
+0:119            Constant:
+0:119              1 (const int)
+0:119          Sequence
+0:119            Constant:
+0:119              0 (const int)
+0:119            Constant:
+0:119              1 (const int)
+0:119        Convert bool to int ( temp highp 2-component vector of int)
+0:119          subgroupClusteredXor ( global 2-component vector of bool)
+0:119            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:119              vector swizzle ( temp highp 2-component vector of int)
+0:119                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:119                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119                    Constant:
+0:119                      1 (const int)
+0:119                  Constant:
+0:119                    1 (const int)
+0:119                Sequence
+0:119                  Constant:
+0:119                    0 (const int)
+0:119                  Constant:
+0:119                    1 (const int)
+0:119              Constant:
+0:119                0 (const int)
+0:119                0 (const int)
+0:119            Constant:
+0:119              1 (const uint)
+0:120      move second child to first child ( temp highp 3-component vector of int)
+0:120        vector swizzle ( temp highp 3-component vector of int)
+0:120          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:120            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120              Constant:
+0:120                0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120          Sequence
+0:120            Constant:
+0:120              0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120            Constant:
+0:120              2 (const int)
+0:120        Convert bool to int ( temp highp 3-component vector of int)
+0:120          subgroupClusteredXor ( global 3-component vector of bool)
+0:120            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:120              vector swizzle ( temp highp 3-component vector of int)
+0:120                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:120                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120                    Constant:
+0:120                      1 (const int)
+0:120                  Constant:
+0:120                    1 (const int)
+0:120                Sequence
+0:120                  Constant:
+0:120                    0 (const int)
+0:120                  Constant:
+0:120                    1 (const int)
+0:120                  Constant:
+0:120                    2 (const int)
+0:120              Constant:
+0:120                0 (const int)
+0:120                0 (const int)
+0:120                0 (const int)
+0:120            Constant:
+0:120              1 (const uint)
+0:121      move second child to first child ( temp highp 4-component vector of int)
+0:121        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:121          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121            Constant:
+0:121              0 (const int)
+0:121          Constant:
+0:121            1 (const int)
+0:121        Convert bool to int ( temp highp 4-component vector of int)
+0:121          subgroupClusteredXor ( global 4-component vector of bool)
+0:121            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:121              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:121                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121                  Constant:
+0:121                    1 (const int)
+0:121                Constant:
+0:121                  1 (const int)
+0:121              Constant:
+0:121                0 (const int)
+0:121                0 (const int)
+0:121                0 (const int)
+0:121                0 (const int)
+0:121            Constant:
+0:121              1 (const uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+local_size = (8, 1, 1)
+0:? Sequence
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp highp uint)
+0:16          'invocation' ( temp highp uint)
+0:16          mod ( temp mediump uint)
+0:16            add ( temp mediump uint)
+0:16              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16            Constant:
+0:16              4 (const uint)
+0:18      move second child to first child ( temp highp float)
+0:18        direct index ( temp highp float)
+0:18          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          Constant:
+0:18            0 (const int)
+0:18        subgroupClusteredAdd ( global highp float)
+0:18          direct index ( temp highp float)
+0:18            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                Constant:
+0:18                  0 (const int)
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          Constant:
+0:18            1 (const uint)
+0:19      move second child to first child ( temp highp 2-component vector of float)
+0:19        vector swizzle ( temp highp 2-component vector of float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Sequence
+0:19            Constant:
+0:19              0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19        subgroupClusteredAdd ( global highp 2-component vector of float)
+0:19          vector swizzle ( temp highp 2-component vector of float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                Constant:
+0:19                  1 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Sequence
+0:19              Constant:
+0:19                0 (const int)
+0:19              Constant:
+0:19                1 (const int)
+0:19          Constant:
+0:19            1 (const uint)
+0:20      move second child to first child ( temp highp 3-component vector of float)
+0:20        vector swizzle ( temp highp 3-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              Constant:
+0:20                0 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20            Constant:
+0:20              2 (const int)
+0:20        subgroupClusteredAdd ( global highp 3-component vector of float)
+0:20          vector swizzle ( temp highp 3-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                Constant:
+0:20                  2 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20              Constant:
+0:20                2 (const int)
+0:20          Constant:
+0:20            1 (const uint)
+0:21      move second child to first child ( temp highp 4-component vector of float)
+0:21        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            0 (const int)
+0:21        subgroupClusteredAdd ( global highp 4-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              Constant:
+0:21                3 (const int)
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            1 (const uint)
+0:23      move second child to first child ( temp highp int)
+0:23        direct index ( temp highp int)
+0:23          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              Constant:
+0:23                1 (const int)
+0:23            Constant:
+0:23              1 (const int)
+0:23          Constant:
+0:23            0 (const int)
+0:23        subgroupClusteredAdd ( global highp int)
+0:23          direct index ( temp highp int)
+0:23            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                1 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:23          Constant:
+0:23            1 (const uint)
+0:24      move second child to first child ( temp highp 2-component vector of int)
+0:24        vector swizzle ( temp highp 2-component vector of int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              Constant:
+0:24                1 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Sequence
+0:24            Constant:
+0:24              0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24        subgroupClusteredAdd ( global highp 2-component vector of int)
+0:24          vector swizzle ( temp highp 2-component vector of int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                Constant:
+0:24                  1 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Sequence
+0:24              Constant:
+0:24                0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24          Constant:
+0:24            1 (const uint)
+0:25      move second child to first child ( temp highp 3-component vector of int)
+0:25        vector swizzle ( temp highp 3-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              Constant:
+0:25                1 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25        subgroupClusteredAdd ( global highp 3-component vector of int)
+0:25          vector swizzle ( temp highp 3-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                Constant:
+0:25                  2 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25          Constant:
+0:25            1 (const uint)
+0:26      move second child to first child ( temp highp 4-component vector of int)
+0:26        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            Constant:
+0:26              1 (const int)
+0:26          Constant:
+0:26            1 (const int)
+0:26        subgroupClusteredAdd ( global highp 4-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              Constant:
+0:26                3 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Constant:
+0:26            1 (const uint)
+0:28      move second child to first child ( temp highp uint)
+0:28        direct index ( temp highp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                2 (const int)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:28        subgroupClusteredAdd ( global highp uint)
+0:28          direct index ( temp highp uint)
+0:28            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                2 (const int)
+0:28            Constant:
+0:28              0 (const int)
+0:28          Constant:
+0:28            1 (const uint)
+0:29      move second child to first child ( temp highp 2-component vector of uint)
+0:29        vector swizzle ( temp highp 2-component vector of uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              Constant:
+0:29                2 (const int)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Sequence
+0:29            Constant:
+0:29              0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29        subgroupClusteredAdd ( global highp 2-component vector of uint)
+0:29          vector swizzle ( temp highp 2-component vector of uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                Constant:
+0:29                  1 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Sequence
+0:29              Constant:
+0:29                0 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29          Constant:
+0:29            1 (const uint)
+0:30      move second child to first child ( temp highp 3-component vector of uint)
+0:30        vector swizzle ( temp highp 3-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              Constant:
+0:30                2 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30        subgroupClusteredAdd ( global highp 3-component vector of uint)
+0:30          vector swizzle ( temp highp 3-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                Constant:
+0:30                  2 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30          Constant:
+0:30            1 (const uint)
+0:31      move second child to first child ( temp highp 4-component vector of uint)
+0:31        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            Constant:
+0:31              2 (const int)
+0:31          Constant:
+0:31            2 (const int)
+0:31        subgroupClusteredAdd ( global highp 4-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              Constant:
+0:31                3 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31          Constant:
+0:31            1 (const uint)
+0:33      move second child to first child ( temp highp float)
+0:33        direct index ( temp highp float)
+0:33          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              Constant:
+0:33                3 (const int)
+0:33            Constant:
+0:33              0 (const int)
+0:33          Constant:
+0:33            0 (const int)
+0:33        subgroupClusteredMul ( global highp float)
+0:33          direct index ( temp highp float)
+0:33            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:33              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                0 (const int)
+0:33            Constant:
+0:33              0 (const int)
+0:33          Constant:
+0:33            1 (const uint)
+0:34      move second child to first child ( temp highp 2-component vector of float)
+0:34        vector swizzle ( temp highp 2-component vector of float)
+0:34          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              Constant:
+0:34                3 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34        subgroupClusteredMul ( global highp 2-component vector of float)
+0:34          vector swizzle ( temp highp 2-component vector of float)
+0:34            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                Constant:
+0:34                  1 (const int)
+0:34              Constant:
+0:34                0 (const int)
+0:34            Sequence
+0:34              Constant:
+0:34                0 (const int)
+0:34              Constant:
+0:34                1 (const int)
+0:34          Constant:
+0:34            1 (const uint)
+0:35      move second child to first child ( temp highp 3-component vector of float)
+0:35        vector swizzle ( temp highp 3-component vector of float)
+0:35          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              Constant:
+0:35                3 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35            Constant:
+0:35              2 (const int)
+0:35        subgroupClusteredMul ( global highp 3-component vector of float)
+0:35          vector swizzle ( temp highp 3-component vector of float)
+0:35            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                Constant:
+0:35                  2 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:35              Constant:
+0:35                2 (const int)
+0:35          Constant:
+0:35            1 (const uint)
+0:36      move second child to first child ( temp highp 4-component vector of float)
+0:36        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            Constant:
+0:36              3 (const int)
+0:36          Constant:
+0:36            0 (const int)
+0:36        subgroupClusteredMul ( global highp 4-component vector of float)
+0:36          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:36            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36              Constant:
+0:36                3 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Constant:
+0:36            1 (const uint)
+0:38      move second child to first child ( temp highp int)
+0:38        direct index ( temp highp int)
+0:38          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              Constant:
+0:38                0 (const int)
+0:38            Constant:
+0:38              1 (const int)
+0:38          Constant:
+0:38            0 (const int)
+0:38        subgroupClusteredMul ( global highp int)
+0:38          direct index ( temp highp int)
+0:38            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                1 (const int)
+0:38            Constant:
+0:38              0 (const int)
+0:38          Constant:
+0:38            1 (const uint)
+0:39      move second child to first child ( temp highp 2-component vector of int)
+0:39        vector swizzle ( temp highp 2-component vector of int)
+0:39          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39          Sequence
+0:39            Constant:
+0:39              0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39        subgroupClusteredMul ( global highp 2-component vector of int)
+0:39          vector swizzle ( temp highp 2-component vector of int)
+0:39            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                Constant:
+0:39                  1 (const int)
+0:39              Constant:
+0:39                1 (const int)
+0:39            Sequence
+0:39              Constant:
+0:39                0 (const int)
+0:39              Constant:
+0:39                1 (const int)
+0:39          Constant:
+0:39            1 (const uint)
+0:40      move second child to first child ( temp highp 3-component vector of int)
+0:40        vector swizzle ( temp highp 3-component vector of int)
+0:40          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              Constant:
+0:40                0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40            Constant:
+0:40              2 (const int)
+0:40        subgroupClusteredMul ( global highp 3-component vector of int)
+0:40          vector swizzle ( temp highp 3-component vector of int)
+0:40            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                Constant:
+0:40                  2 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Sequence
+0:40              Constant:
+0:40                0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40              Constant:
+0:40                2 (const int)
+0:40          Constant:
+0:40            1 (const uint)
+0:41      move second child to first child ( temp highp 4-component vector of int)
+0:41        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            Constant:
+0:41              0 (const int)
+0:41          Constant:
+0:41            1 (const int)
+0:41        subgroupClusteredMul ( global highp 4-component vector of int)
+0:41          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              Constant:
+0:41                3 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Constant:
+0:41            1 (const uint)
+0:43      move second child to first child ( temp highp uint)
+0:43        direct index ( temp highp uint)
+0:43          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              Constant:
+0:43                1 (const int)
+0:43            Constant:
+0:43              2 (const int)
+0:43          Constant:
+0:43            0 (const int)
+0:43        subgroupClusteredMul ( global highp uint)
+0:43          direct index ( temp highp uint)
+0:43            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:43              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                Constant:
+0:43                  0 (const int)
+0:43              Constant:
+0:43                2 (const int)
+0:43            Constant:
+0:43              0 (const int)
+0:43          Constant:
+0:43            1 (const uint)
+0:44      move second child to first child ( temp highp 2-component vector of uint)
+0:44        vector swizzle ( temp highp 2-component vector of uint)
+0:44          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              Constant:
+0:44                1 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:44          Sequence
+0:44            Constant:
+0:44              0 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44        subgroupClusteredMul ( global highp 2-component vector of uint)
+0:44          vector swizzle ( temp highp 2-component vector of uint)
+0:44            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                Constant:
+0:44                  1 (const int)
+0:44              Constant:
+0:44                2 (const int)
+0:44            Sequence
+0:44              Constant:
+0:44                0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44          Constant:
+0:44            1 (const uint)
+0:45      move second child to first child ( temp highp 3-component vector of uint)
+0:45        vector swizzle ( temp highp 3-component vector of uint)
+0:45          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              Constant:
+0:45                1 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45        subgroupClusteredMul ( global highp 3-component vector of uint)
+0:45          vector swizzle ( temp highp 3-component vector of uint)
+0:45            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                Constant:
+0:45                  2 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45          Constant:
+0:45            1 (const uint)
+0:46      move second child to first child ( temp highp 4-component vector of uint)
+0:46        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            Constant:
+0:46              1 (const int)
+0:46          Constant:
+0:46            2 (const int)
+0:46        subgroupClusteredMul ( global highp 4-component vector of uint)
+0:46          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:46            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              Constant:
+0:46                3 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Constant:
+0:46            1 (const uint)
+0:48      move second child to first child ( temp highp float)
+0:48        direct index ( temp highp float)
+0:48          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:48            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              Constant:
+0:48                2 (const int)
+0:48            Constant:
+0:48              0 (const int)
+0:48          Constant:
+0:48            0 (const int)
+0:48        subgroupClusteredMin ( global highp float)
+0:48          direct index ( temp highp float)
+0:48            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:48              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                Constant:
+0:48                  0 (const int)
+0:48              Constant:
+0:48                0 (const int)
+0:48            Constant:
+0:48              0 (const int)
+0:48          Constant:
+0:48            1 (const uint)
+0:49      move second child to first child ( temp highp 2-component vector of float)
+0:49        vector swizzle ( temp highp 2-component vector of float)
+0:49          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:49            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              Constant:
+0:49                2 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:49          Sequence
+0:49            Constant:
+0:49              0 (const int)
+0:49            Constant:
+0:49              1 (const int)
+0:49        subgroupClusteredMin ( global highp 2-component vector of float)
+0:49          vector swizzle ( temp highp 2-component vector of float)
+0:49            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                Constant:
+0:49                  1 (const int)
+0:49              Constant:
+0:49                0 (const int)
+0:49            Sequence
+0:49              Constant:
+0:49                0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:49          Constant:
+0:49            1 (const uint)
+0:50      move second child to first child ( temp highp 3-component vector of float)
+0:50        vector swizzle ( temp highp 3-component vector of float)
+0:50          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:50            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              Constant:
+0:50                2 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50        subgroupClusteredMin ( global highp 3-component vector of float)
+0:50          vector swizzle ( temp highp 3-component vector of float)
+0:50            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                Constant:
+0:50                  2 (const int)
+0:50              Constant:
+0:50                0 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50          Constant:
+0:50            1 (const uint)
+0:51      move second child to first child ( temp highp 4-component vector of float)
+0:51        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:51          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            Constant:
+0:51              2 (const int)
+0:51          Constant:
+0:51            0 (const int)
+0:51        subgroupClusteredMin ( global highp 4-component vector of float)
+0:51          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:51            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              Constant:
+0:51                3 (const int)
+0:51            Constant:
+0:51              0 (const int)
+0:51          Constant:
+0:51            1 (const uint)
+0:53      move second child to first child ( temp highp int)
+0:53        direct index ( temp highp int)
+0:53          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              Constant:
+0:53                3 (const int)
+0:53            Constant:
+0:53              1 (const int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        subgroupClusteredMin ( global highp int)
+0:53          direct index ( temp highp int)
+0:53            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                Constant:
+0:53                  0 (const int)
+0:53              Constant:
+0:53                1 (const int)
+0:53            Constant:
+0:53              0 (const int)
+0:53          Constant:
+0:53            1 (const uint)
+0:54      move second child to first child ( temp highp 2-component vector of int)
+0:54        vector swizzle ( temp highp 2-component vector of int)
+0:54          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              Constant:
+0:54                3 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54          Sequence
+0:54            Constant:
+0:54              0 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54        subgroupClusteredMin ( global highp 2-component vector of int)
+0:54          vector swizzle ( temp highp 2-component vector of int)
+0:54            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                Constant:
+0:54                  1 (const int)
+0:54              Constant:
+0:54                1 (const int)
+0:54            Sequence
+0:54              Constant:
+0:54                0 (const int)
+0:54              Constant:
+0:54                1 (const int)
+0:54          Constant:
+0:54            1 (const uint)
+0:55      move second child to first child ( temp highp 3-component vector of int)
+0:55        vector swizzle ( temp highp 3-component vector of int)
+0:55          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              Constant:
+0:55                3 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55            Constant:
+0:55              2 (const int)
+0:55        subgroupClusteredMin ( global highp 3-component vector of int)
+0:55          vector swizzle ( temp highp 3-component vector of int)
+0:55            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                Constant:
+0:55                  2 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55              Constant:
+0:55                2 (const int)
+0:55          Constant:
+0:55            1 (const uint)
+0:56      move second child to first child ( temp highp 4-component vector of int)
+0:56        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            Constant:
+0:56              3 (const int)
+0:56          Constant:
+0:56            1 (const int)
+0:56        subgroupClusteredMin ( global highp 4-component vector of int)
+0:56          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56              Constant:
+0:56                3 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56          Constant:
+0:56            1 (const uint)
+0:58      move second child to first child ( temp highp uint)
+0:58        direct index ( temp highp uint)
+0:58          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:58            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              Constant:
+0:58                0 (const int)
+0:58            Constant:
+0:58              2 (const int)
+0:58          Constant:
+0:58            0 (const int)
+0:58        subgroupClusteredMin ( global highp uint)
+0:58          direct index ( temp highp uint)
+0:58            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:58              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                Constant:
+0:58                  0 (const int)
+0:58              Constant:
+0:58                2 (const int)
+0:58            Constant:
+0:58              0 (const int)
+0:58          Constant:
+0:58            1 (const uint)
+0:59      move second child to first child ( temp highp 2-component vector of uint)
+0:59        vector swizzle ( temp highp 2-component vector of uint)
+0:59          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:59            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59              Constant:
+0:59                0 (const int)
+0:59            Constant:
+0:59              2 (const int)
+0:59          Sequence
+0:59            Constant:
+0:59              0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:59        subgroupClusteredMin ( global highp 2-component vector of uint)
+0:59          vector swizzle ( temp highp 2-component vector of uint)
+0:59            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59                Constant:
+0:59                  1 (const int)
+0:59              Constant:
+0:59                2 (const int)
+0:59            Sequence
+0:59              Constant:
+0:59                0 (const int)
+0:59              Constant:
+0:59                1 (const int)
+0:59          Constant:
+0:59            1 (const uint)
+0:60      move second child to first child ( temp highp 3-component vector of uint)
+0:60        vector swizzle ( temp highp 3-component vector of uint)
+0:60          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:60            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              Constant:
+0:60                0 (const int)
+0:60            Constant:
+0:60              2 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60            Constant:
+0:60              2 (const int)
+0:60        subgroupClusteredMin ( global highp 3-component vector of uint)
+0:60          vector swizzle ( temp highp 3-component vector of uint)
+0:60            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                Constant:
+0:60                  2 (const int)
+0:60              Constant:
+0:60                2 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60              Constant:
+0:60                2 (const int)
+0:60          Constant:
+0:60            1 (const uint)
+0:61      move second child to first child ( temp highp 4-component vector of uint)
+0:61        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:61          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61            Constant:
+0:61              0 (const int)
+0:61          Constant:
+0:61            2 (const int)
+0:61        subgroupClusteredMin ( global highp 4-component vector of uint)
+0:61          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:61            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61              Constant:
+0:61                3 (const int)
+0:61            Constant:
+0:61              2 (const int)
+0:61          Constant:
+0:61            1 (const uint)
+0:63      move second child to first child ( temp highp float)
+0:63        direct index ( temp highp float)
+0:63          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:63            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63              Constant:
+0:63                1 (const int)
+0:63            Constant:
+0:63              0 (const int)
+0:63          Constant:
+0:63            0 (const int)
+0:63        subgroupClusteredMax ( global highp float)
+0:63          direct index ( temp highp float)
+0:63            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:63              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                Constant:
+0:63                  0 (const int)
+0:63              Constant:
+0:63                0 (const int)
+0:63            Constant:
+0:63              0 (const int)
+0:63          Constant:
+0:63            1 (const uint)
+0:64      move second child to first child ( temp highp 2-component vector of float)
+0:64        vector swizzle ( temp highp 2-component vector of float)
+0:64          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:64            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64              Constant:
+0:64                1 (const int)
+0:64            Constant:
+0:64              0 (const int)
+0:64          Sequence
+0:64            Constant:
+0:64              0 (const int)
+0:64            Constant:
+0:64              1 (const int)
+0:64        subgroupClusteredMax ( global highp 2-component vector of float)
+0:64          vector swizzle ( temp highp 2-component vector of float)
+0:64            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:64              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64                Constant:
+0:64                  1 (const int)
+0:64              Constant:
+0:64                0 (const int)
+0:64            Sequence
+0:64              Constant:
+0:64                0 (const int)
+0:64              Constant:
+0:64                1 (const int)
+0:64          Constant:
+0:64            1 (const uint)
+0:65      move second child to first child ( temp highp 3-component vector of float)
+0:65        vector swizzle ( temp highp 3-component vector of float)
+0:65          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:65            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65              Constant:
+0:65                1 (const int)
+0:65            Constant:
+0:65              0 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65            Constant:
+0:65              2 (const int)
+0:65        subgroupClusteredMax ( global highp 3-component vector of float)
+0:65          vector swizzle ( temp highp 3-component vector of float)
+0:65            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:65              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                Constant:
+0:65                  2 (const int)
+0:65              Constant:
+0:65                0 (const int)
+0:65            Sequence
+0:65              Constant:
+0:65                0 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:65              Constant:
+0:65                2 (const int)
+0:65          Constant:
+0:65            1 (const uint)
+0:66      move second child to first child ( temp highp 4-component vector of float)
+0:66        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:66          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66            Constant:
+0:66              1 (const int)
+0:66          Constant:
+0:66            0 (const int)
+0:66        subgroupClusteredMax ( global highp 4-component vector of float)
+0:66          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:66            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66              Constant:
+0:66                3 (const int)
+0:66            Constant:
+0:66              0 (const int)
+0:66          Constant:
+0:66            1 (const uint)
+0:68      move second child to first child ( temp highp int)
+0:68        direct index ( temp highp int)
+0:68          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:68            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68              Constant:
+0:68                2 (const int)
+0:68            Constant:
+0:68              1 (const int)
+0:68          Constant:
+0:68            0 (const int)
+0:68        subgroupClusteredMax ( global highp int)
+0:68          direct index ( temp highp int)
+0:68            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:68              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                Constant:
+0:68                  0 (const int)
+0:68              Constant:
+0:68                1 (const int)
+0:68            Constant:
+0:68              0 (const int)
+0:68          Constant:
+0:68            1 (const uint)
+0:69      move second child to first child ( temp highp 2-component vector of int)
+0:69        vector swizzle ( temp highp 2-component vector of int)
+0:69          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:69            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69              Constant:
+0:69                2 (const int)
+0:69            Constant:
+0:69              1 (const int)
+0:69          Sequence
+0:69            Constant:
+0:69              0 (const int)
+0:69            Constant:
+0:69              1 (const int)
+0:69        subgroupClusteredMax ( global highp 2-component vector of int)
+0:69          vector swizzle ( temp highp 2-component vector of int)
+0:69            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:69              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69                Constant:
+0:69                  1 (const int)
+0:69              Constant:
+0:69                1 (const int)
+0:69            Sequence
+0:69              Constant:
+0:69                0 (const int)
+0:69              Constant:
+0:69                1 (const int)
+0:69          Constant:
+0:69            1 (const uint)
+0:70      move second child to first child ( temp highp 3-component vector of int)
+0:70        vector swizzle ( temp highp 3-component vector of int)
+0:70          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70              Constant:
+0:70                2 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70          Sequence
+0:70            Constant:
+0:70              0 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70            Constant:
+0:70              2 (const int)
+0:70        subgroupClusteredMax ( global highp 3-component vector of int)
+0:70          vector swizzle ( temp highp 3-component vector of int)
+0:70            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:70              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                Constant:
+0:70                  2 (const int)
+0:70              Constant:
+0:70                1 (const int)
+0:70            Sequence
+0:70              Constant:
+0:70                0 (const int)
+0:70              Constant:
+0:70                1 (const int)
+0:70              Constant:
+0:70                2 (const int)
+0:70          Constant:
+0:70            1 (const uint)
+0:71      move second child to first child ( temp highp 4-component vector of int)
+0:71        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71            Constant:
+0:71              2 (const int)
+0:71          Constant:
+0:71            1 (const int)
+0:71        subgroupClusteredMax ( global highp 4-component vector of int)
+0:71          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:71            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71              Constant:
+0:71                3 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71          Constant:
+0:71            1 (const uint)
+0:73      move second child to first child ( temp highp uint)
+0:73        direct index ( temp highp uint)
+0:73          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:73            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73              Constant:
+0:73                3 (const int)
+0:73            Constant:
+0:73              2 (const int)
+0:73          Constant:
+0:73            0 (const int)
+0:73        subgroupClusteredMax ( global highp uint)
+0:73          direct index ( temp highp uint)
+0:73            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:73              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                Constant:
+0:73                  0 (const int)
+0:73              Constant:
+0:73                2 (const int)
+0:73            Constant:
+0:73              0 (const int)
+0:73          Constant:
+0:73            1 (const uint)
+0:74      move second child to first child ( temp highp 2-component vector of uint)
+0:74        vector swizzle ( temp highp 2-component vector of uint)
+0:74          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:74            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74              Constant:
+0:74                3 (const int)
+0:74            Constant:
+0:74              2 (const int)
+0:74          Sequence
+0:74            Constant:
+0:74              0 (const int)
+0:74            Constant:
+0:74              1 (const int)
+0:74        subgroupClusteredMax ( global highp 2-component vector of uint)
+0:74          vector swizzle ( temp highp 2-component vector of uint)
+0:74            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:74              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74                Constant:
+0:74                  1 (const int)
+0:74              Constant:
+0:74                2 (const int)
+0:74            Sequence
+0:74              Constant:
+0:74                0 (const int)
+0:74              Constant:
+0:74                1 (const int)
+0:74          Constant:
+0:74            1 (const uint)
+0:75      move second child to first child ( temp highp 3-component vector of uint)
+0:75        vector swizzle ( temp highp 3-component vector of uint)
+0:75          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:75            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75              Constant:
+0:75                3 (const int)
+0:75            Constant:
+0:75              2 (const int)
+0:75          Sequence
+0:75            Constant:
+0:75              0 (const int)
+0:75            Constant:
+0:75              1 (const int)
+0:75            Constant:
+0:75              2 (const int)
+0:75        subgroupClusteredMax ( global highp 3-component vector of uint)
+0:75          vector swizzle ( temp highp 3-component vector of uint)
+0:75            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:75              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75                Constant:
+0:75                  2 (const int)
+0:75              Constant:
+0:75                2 (const int)
+0:75            Sequence
+0:75              Constant:
+0:75                0 (const int)
+0:75              Constant:
+0:75                1 (const int)
+0:75              Constant:
+0:75                2 (const int)
+0:75          Constant:
+0:75            1 (const uint)
+0:76      move second child to first child ( temp highp 4-component vector of uint)
+0:76        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:76          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76            Constant:
+0:76              3 (const int)
+0:76          Constant:
+0:76            2 (const int)
+0:76        subgroupClusteredMax ( global highp 4-component vector of uint)
+0:76          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:76            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76              Constant:
+0:76                3 (const int)
+0:76            Constant:
+0:76              2 (const int)
+0:76          Constant:
+0:76            1 (const uint)
+0:78      move second child to first child ( temp highp int)
+0:78        direct index ( temp highp int)
+0:78          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78              Constant:
+0:78                0 (const int)
+0:78            Constant:
+0:78              1 (const int)
+0:78          Constant:
+0:78            0 (const int)
+0:78        subgroupClusteredAnd ( global highp int)
+0:78          direct index ( temp highp int)
+0:78            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78                Constant:
+0:78                  0 (const int)
+0:78              Constant:
+0:78                1 (const int)
+0:78            Constant:
+0:78              0 (const int)
+0:78          Constant:
+0:78            1 (const uint)
+0:79      move second child to first child ( temp highp 2-component vector of int)
+0:79        vector swizzle ( temp highp 2-component vector of int)
+0:79          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:79            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79              Constant:
+0:79                0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:79          Sequence
+0:79            Constant:
+0:79              0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:79        subgroupClusteredAnd ( global highp 2-component vector of int)
+0:79          vector swizzle ( temp highp 2-component vector of int)
+0:79            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:79              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79                Constant:
+0:79                  1 (const int)
+0:79              Constant:
+0:79                1 (const int)
+0:79            Sequence
+0:79              Constant:
+0:79                0 (const int)
+0:79              Constant:
+0:79                1 (const int)
+0:79          Constant:
+0:79            1 (const uint)
+0:80      move second child to first child ( temp highp 3-component vector of int)
+0:80        vector swizzle ( temp highp 3-component vector of int)
+0:80          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:80            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80              Constant:
+0:80                0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80          Sequence
+0:80            Constant:
+0:80              0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80            Constant:
+0:80              2 (const int)
+0:80        subgroupClusteredAnd ( global highp 3-component vector of int)
+0:80          vector swizzle ( temp highp 3-component vector of int)
+0:80            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:80              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80                Constant:
+0:80                  2 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80            Sequence
+0:80              Constant:
+0:80                0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80              Constant:
+0:80                2 (const int)
+0:80          Constant:
+0:80            1 (const uint)
+0:81      move second child to first child ( temp highp 4-component vector of int)
+0:81        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:81          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81            Constant:
+0:81              0 (const int)
+0:81          Constant:
+0:81            1 (const int)
+0:81        subgroupClusteredAnd ( global highp 4-component vector of int)
+0:81          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:81            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81              Constant:
+0:81                3 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81          Constant:
+0:81            1 (const uint)
+0:83      move second child to first child ( temp highp uint)
+0:83        direct index ( temp highp uint)
+0:83          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83              Constant:
+0:83                1 (const int)
+0:83            Constant:
+0:83              2 (const int)
+0:83          Constant:
+0:83            0 (const int)
+0:83        subgroupClusteredAnd ( global highp uint)
+0:83          direct index ( temp highp uint)
+0:83            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83                Constant:
+0:83                  0 (const int)
+0:83              Constant:
+0:83                2 (const int)
+0:83            Constant:
+0:83              0 (const int)
+0:83          Constant:
+0:83            1 (const uint)
+0:84      move second child to first child ( temp highp 2-component vector of uint)
+0:84        vector swizzle ( temp highp 2-component vector of uint)
+0:84          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:84            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84              Constant:
+0:84                1 (const int)
+0:84            Constant:
+0:84              2 (const int)
+0:84          Sequence
+0:84            Constant:
+0:84              0 (const int)
+0:84            Constant:
+0:84              1 (const int)
+0:84        subgroupClusteredAnd ( global highp 2-component vector of uint)
+0:84          vector swizzle ( temp highp 2-component vector of uint)
+0:84            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:84              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84                Constant:
+0:84                  1 (const int)
+0:84              Constant:
+0:84                2 (const int)
+0:84            Sequence
+0:84              Constant:
+0:84                0 (const int)
+0:84              Constant:
+0:84                1 (const int)
+0:84          Constant:
+0:84            1 (const uint)
+0:85      move second child to first child ( temp highp 3-component vector of uint)
+0:85        vector swizzle ( temp highp 3-component vector of uint)
+0:85          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:85            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85              Constant:
+0:85                1 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85          Sequence
+0:85            Constant:
+0:85              0 (const int)
+0:85            Constant:
+0:85              1 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85        subgroupClusteredAnd ( global highp 3-component vector of uint)
+0:85          vector swizzle ( temp highp 3-component vector of uint)
+0:85            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:85              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85                Constant:
+0:85                  2 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:85            Sequence
+0:85              Constant:
+0:85                0 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:85          Constant:
+0:85            1 (const uint)
+0:86      move second child to first child ( temp highp 4-component vector of uint)
+0:86        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:86          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86            Constant:
+0:86              1 (const int)
+0:86          Constant:
+0:86            2 (const int)
+0:86        subgroupClusteredAnd ( global highp 4-component vector of uint)
+0:86          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:86            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86              Constant:
+0:86                3 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:86          Constant:
+0:86            1 (const uint)
+0:88      move second child to first child ( temp highp int)
+0:88        direct index ( temp highp int)
+0:88          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:88            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88              Constant:
+0:88                2 (const int)
+0:88            Constant:
+0:88              1 (const int)
+0:88          Constant:
+0:88            0 (const int)
+0:88        Convert bool to int ( temp highp int)
+0:88          subgroupClusteredAnd ( global bool)
+0:88            Compare Less Than ( temp bool)
+0:88              direct index ( temp highp int)
+0:88                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:88                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88                    Constant:
+0:88                      0 (const int)
+0:88                  Constant:
+0:88                    1 (const int)
+0:88                Constant:
+0:88                  0 (const int)
+0:88              Constant:
+0:88                0 (const int)
+0:88            Constant:
+0:88              1 (const uint)
+0:89      move second child to first child ( temp highp 2-component vector of int)
+0:89        vector swizzle ( temp highp 2-component vector of int)
+0:89          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:89            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89              Constant:
+0:89                2 (const int)
+0:89            Constant:
+0:89              1 (const int)
+0:89          Sequence
+0:89            Constant:
+0:89              0 (const int)
+0:89            Constant:
+0:89              1 (const int)
+0:89        Convert bool to int ( temp highp 2-component vector of int)
+0:89          subgroupClusteredAnd ( global 2-component vector of bool)
+0:89            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:89              vector swizzle ( temp highp 2-component vector of int)
+0:89                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:89                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89                    Constant:
+0:89                      1 (const int)
+0:89                  Constant:
+0:89                    1 (const int)
+0:89                Sequence
+0:89                  Constant:
+0:89                    0 (const int)
+0:89                  Constant:
+0:89                    1 (const int)
+0:89              Constant:
+0:89                0 (const int)
+0:89                0 (const int)
+0:89            Constant:
+0:89              1 (const uint)
+0:90      move second child to first child ( temp highp 3-component vector of int)
+0:90        vector swizzle ( temp highp 3-component vector of int)
+0:90          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90              Constant:
+0:90                2 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90          Sequence
+0:90            Constant:
+0:90              0 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90            Constant:
+0:90              2 (const int)
+0:90        Convert bool to int ( temp highp 3-component vector of int)
+0:90          subgroupClusteredAnd ( global 3-component vector of bool)
+0:90            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:90              vector swizzle ( temp highp 3-component vector of int)
+0:90                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90                    Constant:
+0:90                      1 (const int)
+0:90                  Constant:
+0:90                    1 (const int)
+0:90                Sequence
+0:90                  Constant:
+0:90                    0 (const int)
+0:90                  Constant:
+0:90                    1 (const int)
+0:90                  Constant:
+0:90                    2 (const int)
+0:90              Constant:
+0:90                0 (const int)
+0:90                0 (const int)
+0:90                0 (const int)
+0:90            Constant:
+0:90              1 (const uint)
+0:91      move second child to first child ( temp highp 4-component vector of int)
+0:91        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91            Constant:
+0:91              2 (const int)
+0:91          Constant:
+0:91            1 (const int)
+0:91        Convert bool to int ( temp highp 4-component vector of int)
+0:91          subgroupClusteredAnd ( global 4-component vector of bool)
+0:91            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:91              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91                  Constant:
+0:91                    1 (const int)
+0:91                Constant:
+0:91                  1 (const int)
+0:91              Constant:
+0:91                0 (const int)
+0:91                0 (const int)
+0:91                0 (const int)
+0:91                0 (const int)
+0:91            Constant:
+0:91              1 (const uint)
+0:93      move second child to first child ( temp highp int)
+0:93        direct index ( temp highp int)
+0:93          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93              Constant:
+0:93                3 (const int)
+0:93            Constant:
+0:93              1 (const int)
+0:93          Constant:
+0:93            0 (const int)
+0:93        subgroupClusteredOr ( global highp int)
+0:93          direct index ( temp highp int)
+0:93            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93                Constant:
+0:93                  0 (const int)
+0:93              Constant:
+0:93                1 (const int)
+0:93            Constant:
+0:93              0 (const int)
+0:93          Constant:
+0:93            1 (const uint)
+0:94      move second child to first child ( temp highp 2-component vector of int)
+0:94        vector swizzle ( temp highp 2-component vector of int)
+0:94          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94              Constant:
+0:94                3 (const int)
+0:94            Constant:
+0:94              1 (const int)
+0:94          Sequence
+0:94            Constant:
+0:94              0 (const int)
+0:94            Constant:
+0:94              1 (const int)
+0:94        subgroupClusteredOr ( global highp 2-component vector of int)
+0:94          vector swizzle ( temp highp 2-component vector of int)
+0:94            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94                Constant:
+0:94                  1 (const int)
+0:94              Constant:
+0:94                1 (const int)
+0:94            Sequence
+0:94              Constant:
+0:94                0 (const int)
+0:94              Constant:
+0:94                1 (const int)
+0:94          Constant:
+0:94            1 (const uint)
+0:95      move second child to first child ( temp highp 3-component vector of int)
+0:95        vector swizzle ( temp highp 3-component vector of int)
+0:95          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95              Constant:
+0:95                3 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95          Sequence
+0:95            Constant:
+0:95              0 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95            Constant:
+0:95              2 (const int)
+0:95        subgroupClusteredOr ( global highp 3-component vector of int)
+0:95          vector swizzle ( temp highp 3-component vector of int)
+0:95            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95                Constant:
+0:95                  2 (const int)
+0:95              Constant:
+0:95                1 (const int)
+0:95            Sequence
+0:95              Constant:
+0:95                0 (const int)
+0:95              Constant:
+0:95                1 (const int)
+0:95              Constant:
+0:95                2 (const int)
+0:95          Constant:
+0:95            1 (const uint)
+0:96      move second child to first child ( temp highp 4-component vector of int)
+0:96        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96            Constant:
+0:96              3 (const int)
+0:96          Constant:
+0:96            1 (const int)
+0:96        subgroupClusteredOr ( global highp 4-component vector of int)
+0:96          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96              Constant:
+0:96                3 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96          Constant:
+0:96            1 (const uint)
+0:98      move second child to first child ( temp highp uint)
+0:98        direct index ( temp highp uint)
+0:98          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98              Constant:
+0:98                0 (const int)
+0:98            Constant:
+0:98              2 (const int)
+0:98          Constant:
+0:98            0 (const int)
+0:98        subgroupClusteredOr ( global highp uint)
+0:98          direct index ( temp highp uint)
+0:98            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98                Constant:
+0:98                  0 (const int)
+0:98              Constant:
+0:98                2 (const int)
+0:98            Constant:
+0:98              0 (const int)
+0:98          Constant:
+0:98            1 (const uint)
+0:99      move second child to first child ( temp highp 2-component vector of uint)
+0:99        vector swizzle ( temp highp 2-component vector of uint)
+0:99          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:99            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99              Constant:
+0:99                0 (const int)
+0:99            Constant:
+0:99              2 (const int)
+0:99          Sequence
+0:99            Constant:
+0:99              0 (const int)
+0:99            Constant:
+0:99              1 (const int)
+0:99        subgroupClusteredOr ( global highp 2-component vector of uint)
+0:99          vector swizzle ( temp highp 2-component vector of uint)
+0:99            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:99              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:99                Constant:
+0:99                  1 (const int)
+0:99              Constant:
+0:99                2 (const int)
+0:99            Sequence
+0:99              Constant:
+0:99                0 (const int)
+0:99              Constant:
+0:99                1 (const int)
+0:99          Constant:
+0:99            1 (const uint)
+0:100      move second child to first child ( temp highp 3-component vector of uint)
+0:100        vector swizzle ( temp highp 3-component vector of uint)
+0:100          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:100            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100              Constant:
+0:100                0 (const int)
+0:100            Constant:
+0:100              2 (const int)
+0:100          Sequence
+0:100            Constant:
+0:100              0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100            Constant:
+0:100              2 (const int)
+0:100        subgroupClusteredOr ( global highp 3-component vector of uint)
+0:100          vector swizzle ( temp highp 3-component vector of uint)
+0:100            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:100              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100                Constant:
+0:100                  2 (const int)
+0:100              Constant:
+0:100                2 (const int)
+0:100            Sequence
+0:100              Constant:
+0:100                0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100              Constant:
+0:100                2 (const int)
+0:100          Constant:
+0:100            1 (const uint)
+0:101      move second child to first child ( temp highp 4-component vector of uint)
+0:101        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:101          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101            Constant:
+0:101              0 (const int)
+0:101          Constant:
+0:101            2 (const int)
+0:101        subgroupClusteredOr ( global highp 4-component vector of uint)
+0:101          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:101            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101              Constant:
+0:101                3 (const int)
+0:101            Constant:
+0:101              2 (const int)
+0:101          Constant:
+0:101            1 (const uint)
+0:103      move second child to first child ( temp highp int)
+0:103        direct index ( temp highp int)
+0:103          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103              Constant:
+0:103                1 (const int)
+0:103            Constant:
+0:103              1 (const int)
+0:103          Constant:
+0:103            0 (const int)
+0:103        Convert bool to int ( temp highp int)
+0:103          subgroupClusteredOr ( global bool)
+0:103            Compare Less Than ( temp bool)
+0:103              direct index ( temp highp int)
+0:103                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103                    Constant:
+0:103                      0 (const int)
+0:103                  Constant:
+0:103                    1 (const int)
+0:103                Constant:
+0:103                  0 (const int)
+0:103              Constant:
+0:103                0 (const int)
+0:103            Constant:
+0:103              1 (const uint)
+0:104      move second child to first child ( temp highp 2-component vector of int)
+0:104        vector swizzle ( temp highp 2-component vector of int)
+0:104          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:104            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104              Constant:
+0:104                1 (const int)
+0:104            Constant:
+0:104              1 (const int)
+0:104          Sequence
+0:104            Constant:
+0:104              0 (const int)
+0:104            Constant:
+0:104              1 (const int)
+0:104        Convert bool to int ( temp highp 2-component vector of int)
+0:104          subgroupClusteredOr ( global 2-component vector of bool)
+0:104            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:104              vector swizzle ( temp highp 2-component vector of int)
+0:104                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:104                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:104                    Constant:
+0:104                      1 (const int)
+0:104                  Constant:
+0:104                    1 (const int)
+0:104                Sequence
+0:104                  Constant:
+0:104                    0 (const int)
+0:104                  Constant:
+0:104                    1 (const int)
+0:104              Constant:
+0:104                0 (const int)
+0:104                0 (const int)
+0:104            Constant:
+0:104              1 (const uint)
+0:105      move second child to first child ( temp highp 3-component vector of int)
+0:105        vector swizzle ( temp highp 3-component vector of int)
+0:105          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:105            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105              Constant:
+0:105                1 (const int)
+0:105            Constant:
+0:105              1 (const int)
+0:105          Sequence
+0:105            Constant:
+0:105              0 (const int)
+0:105            Constant:
+0:105              1 (const int)
+0:105            Constant:
+0:105              2 (const int)
+0:105        Convert bool to int ( temp highp 3-component vector of int)
+0:105          subgroupClusteredOr ( global 3-component vector of bool)
+0:105            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:105              vector swizzle ( temp highp 3-component vector of int)
+0:105                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:105                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105                    Constant:
+0:105                      1 (const int)
+0:105                  Constant:
+0:105                    1 (const int)
+0:105                Sequence
+0:105                  Constant:
+0:105                    0 (const int)
+0:105                  Constant:
+0:105                    1 (const int)
+0:105                  Constant:
+0:105                    2 (const int)
+0:105              Constant:
+0:105                0 (const int)
+0:105                0 (const int)
+0:105                0 (const int)
+0:105            Constant:
+0:105              1 (const uint)
+0:106      move second child to first child ( temp highp 4-component vector of int)
+0:106        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:106          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106            Constant:
+0:106              1 (const int)
+0:106          Constant:
+0:106            1 (const int)
+0:106        Convert bool to int ( temp highp 4-component vector of int)
+0:106          subgroupClusteredOr ( global 4-component vector of bool)
+0:106            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:106              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:106                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106                  Constant:
+0:106                    1 (const int)
+0:106                Constant:
+0:106                  1 (const int)
+0:106              Constant:
+0:106                0 (const int)
+0:106                0 (const int)
+0:106                0 (const int)
+0:106                0 (const int)
+0:106            Constant:
+0:106              1 (const uint)
+0:108      move second child to first child ( temp highp int)
+0:108        direct index ( temp highp int)
+0:108          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:108            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108              Constant:
+0:108                2 (const int)
+0:108            Constant:
+0:108              1 (const int)
+0:108          Constant:
+0:108            0 (const int)
+0:108        subgroupClusteredXor ( global highp int)
+0:108          direct index ( temp highp int)
+0:108            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:108              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108                Constant:
+0:108                  0 (const int)
+0:108              Constant:
+0:108                1 (const int)
+0:108            Constant:
+0:108              0 (const int)
+0:108          Constant:
+0:108            1 (const uint)
+0:109      move second child to first child ( temp highp 2-component vector of int)
+0:109        vector swizzle ( temp highp 2-component vector of int)
+0:109          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:109            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109              Constant:
+0:109                2 (const int)
+0:109            Constant:
+0:109              1 (const int)
+0:109          Sequence
+0:109            Constant:
+0:109              0 (const int)
+0:109            Constant:
+0:109              1 (const int)
+0:109        subgroupClusteredXor ( global highp 2-component vector of int)
+0:109          vector swizzle ( temp highp 2-component vector of int)
+0:109            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:109              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:109                Constant:
+0:109                  1 (const int)
+0:109              Constant:
+0:109                1 (const int)
+0:109            Sequence
+0:109              Constant:
+0:109                0 (const int)
+0:109              Constant:
+0:109                1 (const int)
+0:109          Constant:
+0:109            1 (const uint)
+0:110      move second child to first child ( temp highp 3-component vector of int)
+0:110        vector swizzle ( temp highp 3-component vector of int)
+0:110          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110              Constant:
+0:110                2 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110          Sequence
+0:110            Constant:
+0:110              0 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110            Constant:
+0:110              2 (const int)
+0:110        subgroupClusteredXor ( global highp 3-component vector of int)
+0:110          vector swizzle ( temp highp 3-component vector of int)
+0:110            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110                Constant:
+0:110                  2 (const int)
+0:110              Constant:
+0:110                1 (const int)
+0:110            Sequence
+0:110              Constant:
+0:110                0 (const int)
+0:110              Constant:
+0:110                1 (const int)
+0:110              Constant:
+0:110                2 (const int)
+0:110          Constant:
+0:110            1 (const uint)
+0:111      move second child to first child ( temp highp 4-component vector of int)
+0:111        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111            Constant:
+0:111              2 (const int)
+0:111          Constant:
+0:111            1 (const int)
+0:111        subgroupClusteredXor ( global highp 4-component vector of int)
+0:111          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111              Constant:
+0:111                3 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111          Constant:
+0:111            1 (const uint)
+0:113      move second child to first child ( temp highp uint)
+0:113        direct index ( temp highp uint)
+0:113          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:113            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113              Constant:
+0:113                3 (const int)
+0:113            Constant:
+0:113              2 (const int)
+0:113          Constant:
+0:113            0 (const int)
+0:113        subgroupClusteredXor ( global highp uint)
+0:113          direct index ( temp highp uint)
+0:113            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:113              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113                Constant:
+0:113                  0 (const int)
+0:113              Constant:
+0:113                2 (const int)
+0:113            Constant:
+0:113              0 (const int)
+0:113          Constant:
+0:113            1 (const uint)
+0:114      move second child to first child ( temp highp 2-component vector of uint)
+0:114        vector swizzle ( temp highp 2-component vector of uint)
+0:114          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:114            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114              Constant:
+0:114                3 (const int)
+0:114            Constant:
+0:114              2 (const int)
+0:114          Sequence
+0:114            Constant:
+0:114              0 (const int)
+0:114            Constant:
+0:114              1 (const int)
+0:114        subgroupClusteredXor ( global highp 2-component vector of uint)
+0:114          vector swizzle ( temp highp 2-component vector of uint)
+0:114            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:114              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:114                Constant:
+0:114                  1 (const int)
+0:114              Constant:
+0:114                2 (const int)
+0:114            Sequence
+0:114              Constant:
+0:114                0 (const int)
+0:114              Constant:
+0:114                1 (const int)
+0:114          Constant:
+0:114            1 (const uint)
+0:115      move second child to first child ( temp highp 3-component vector of uint)
+0:115        vector swizzle ( temp highp 3-component vector of uint)
+0:115          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:115            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115              Constant:
+0:115                3 (const int)
+0:115            Constant:
+0:115              2 (const int)
+0:115          Sequence
+0:115            Constant:
+0:115              0 (const int)
+0:115            Constant:
+0:115              1 (const int)
+0:115            Constant:
+0:115              2 (const int)
+0:115        subgroupClusteredXor ( global highp 3-component vector of uint)
+0:115          vector swizzle ( temp highp 3-component vector of uint)
+0:115            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:115              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115                Constant:
+0:115                  2 (const int)
+0:115              Constant:
+0:115                2 (const int)
+0:115            Sequence
+0:115              Constant:
+0:115                0 (const int)
+0:115              Constant:
+0:115                1 (const int)
+0:115              Constant:
+0:115                2 (const int)
+0:115          Constant:
+0:115            1 (const uint)
+0:116      move second child to first child ( temp highp 4-component vector of uint)
+0:116        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:116          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116            Constant:
+0:116              3 (const int)
+0:116          Constant:
+0:116            2 (const int)
+0:116        subgroupClusteredXor ( global highp 4-component vector of uint)
+0:116          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:116            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116              Constant:
+0:116                3 (const int)
+0:116            Constant:
+0:116              2 (const int)
+0:116          Constant:
+0:116            1 (const uint)
+0:118      move second child to first child ( temp highp int)
+0:118        direct index ( temp highp int)
+0:118          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118              Constant:
+0:118                0 (const int)
+0:118            Constant:
+0:118              1 (const int)
+0:118          Constant:
+0:118            0 (const int)
+0:118        Convert bool to int ( temp highp int)
+0:118          subgroupClusteredXor ( global bool)
+0:118            Compare Less Than ( temp bool)
+0:118              direct index ( temp highp int)
+0:118                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118                    Constant:
+0:118                      0 (const int)
+0:118                  Constant:
+0:118                    1 (const int)
+0:118                Constant:
+0:118                  0 (const int)
+0:118              Constant:
+0:118                0 (const int)
+0:118            Constant:
+0:118              1 (const uint)
+0:119      move second child to first child ( temp highp 2-component vector of int)
+0:119        vector swizzle ( temp highp 2-component vector of int)
+0:119          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:119            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119              Constant:
+0:119                0 (const int)
+0:119            Constant:
+0:119              1 (const int)
+0:119          Sequence
+0:119            Constant:
+0:119              0 (const int)
+0:119            Constant:
+0:119              1 (const int)
+0:119        Convert bool to int ( temp highp 2-component vector of int)
+0:119          subgroupClusteredXor ( global 2-component vector of bool)
+0:119            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:119              vector swizzle ( temp highp 2-component vector of int)
+0:119                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:119                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:119                    Constant:
+0:119                      1 (const int)
+0:119                  Constant:
+0:119                    1 (const int)
+0:119                Sequence
+0:119                  Constant:
+0:119                    0 (const int)
+0:119                  Constant:
+0:119                    1 (const int)
+0:119              Constant:
+0:119                0 (const int)
+0:119                0 (const int)
+0:119            Constant:
+0:119              1 (const uint)
+0:120      move second child to first child ( temp highp 3-component vector of int)
+0:120        vector swizzle ( temp highp 3-component vector of int)
+0:120          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:120            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120              Constant:
+0:120                0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120          Sequence
+0:120            Constant:
+0:120              0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120            Constant:
+0:120              2 (const int)
+0:120        Convert bool to int ( temp highp 3-component vector of int)
+0:120          subgroupClusteredXor ( global 3-component vector of bool)
+0:120            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:120              vector swizzle ( temp highp 3-component vector of int)
+0:120                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:120                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120                    Constant:
+0:120                      1 (const int)
+0:120                  Constant:
+0:120                    1 (const int)
+0:120                Sequence
+0:120                  Constant:
+0:120                    0 (const int)
+0:120                  Constant:
+0:120                    1 (const int)
+0:120                  Constant:
+0:120                    2 (const int)
+0:120              Constant:
+0:120                0 (const int)
+0:120                0 (const int)
+0:120                0 (const int)
+0:120            Constant:
+0:120              1 (const uint)
+0:121      move second child to first child ( temp highp 4-component vector of int)
+0:121        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:121          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121            Constant:
+0:121              0 (const int)
+0:121          Constant:
+0:121            1 (const int)
+0:121        Convert bool to int ( temp highp 4-component vector of int)
+0:121          subgroupClusteredXor ( global 4-component vector of bool)
+0:121            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:121              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:121                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121                  Constant:
+0:121                    1 (const int)
+0:121                Constant:
+0:121                  1 (const int)
+0:121              Constant:
+0:121                0 (const int)
+0:121                0 (const int)
+0:121                0 (const int)
+0:121                0 (const int)
+0:121            Constant:
+0:121              1 (const uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
diff --git a/Test/baseResults/glsl.es320.subgroupClusteredNeg.comp.out b/Test/baseResults/glsl.es320.subgroupClusteredNeg.comp.out
new file mode 100644
index 0000000..675e507
--- /dev/null
+++ b/Test/baseResults/glsl.es320.subgroupClusteredNeg.comp.out
@@ -0,0 +1,604 @@
+glsl.es320.subgroupClusteredNeg.comp
+ERROR: 0:21: 'cluster size' : argument must be at least 1 
+ERROR: 0:23: 'cluster size' : argument must be a power of 2 
+ERROR: 0:26: 'cluster size' : argument must be a power of 2 
+ERROR: 0:28: 'cluster size' : argument must be compile-time constant 
+ERROR: 0:31: 'cluster size' : argument must be compile-time constant 
+ERROR: 0:32: 'cluster size' : argument must be compile-time constant 
+ERROR: 6 compilation errors.  No code generated.
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+local_size = (8, 1, 1)
+ERROR: node is still EOpNull!
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp highp int)
+0:16          'a' ( temp highp int)
+0:16          Constant:
+0:16            1 (const int)
+0:19      Sequence
+0:19        move second child to first child ( temp highp uint)
+0:19          'invocation' ( temp highp uint)
+0:19          mod ( temp mediump uint)
+0:19            add ( temp mediump uint)
+0:19              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:19              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:19            Constant:
+0:19              4 (const uint)
+0:21      move second child to first child ( temp highp 2-component vector of float)
+0:21        vector swizzle ( temp highp 2-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              Constant:
+0:21                0 (const int)
+0:21            Constant:
+0:21              0 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupClusteredAdd ( global highp 2-component vector of float)
+0:21          vector swizzle ( temp highp 2-component vector of float)
+0:21            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21                Constant:
+0:21                  1 (const int)
+0:21              Constant:
+0:21                0 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21          Constant:
+0:21            0 (const uint)
+0:23      move second child to first child ( temp highp float)
+0:23        direct index ( temp highp float)
+0:23          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              Constant:
+0:23                0 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:23          Constant:
+0:23            0 (const int)
+0:23        subgroupClusteredMul ( global highp float)
+0:23          direct index ( temp highp float)
+0:23            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                0 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:23          Constant:
+0:23            3 (const uint)
+0:25      move second child to first child ( temp highp 2-component vector of int)
+0:25        vector swizzle ( temp highp 2-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              Constant:
+0:25                1 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25        subgroupClusteredMin ( global highp 2-component vector of int)
+0:25          vector swizzle ( temp highp 2-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                Constant:
+0:25                  1 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25          Constant:
+0:25            8 (const uint)
+0:26      move second child to first child ( temp highp 3-component vector of int)
+0:26        vector swizzle ( temp highp 3-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              Constant:
+0:26                1 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26        subgroupClusteredMin ( global highp 3-component vector of int)
+0:26          vector swizzle ( temp highp 3-component vector of int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26                Constant:
+0:26                  2 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26          Constant:
+0:26            6 (const uint)
+0:28      move second child to first child ( temp highp int)
+0:28        direct index ( temp highp int)
+0:28          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                3 (const int)
+0:28            Constant:
+0:28              1 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:28        subgroupClusteredOr ( global highp int)
+0:28          direct index ( temp highp int)
+0:28            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                1 (const int)
+0:28            Constant:
+0:28              0 (const int)
+0:28          Convert int to uint ( temp highp uint)
+0:28            'a' ( temp highp int)
+0:29      move second child to first child ( temp highp 2-component vector of int)
+0:29        vector swizzle ( temp highp 2-component vector of int)
+0:29          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              Constant:
+0:29                3 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29          Sequence
+0:29            Constant:
+0:29              0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29        subgroupClusteredOr ( global highp 2-component vector of int)
+0:29          vector swizzle ( temp highp 2-component vector of int)
+0:29            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                Constant:
+0:29                  1 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29            Sequence
+0:29              Constant:
+0:29                0 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29          Constant:
+0:29            1 (const uint)
+0:31      move second child to first child ( temp highp int)
+0:31        direct index ( temp highp int)
+0:31          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              Constant:
+0:31                0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31          Constant:
+0:31            0 (const int)
+0:31        subgroupClusteredXor ( global highp int)
+0:31          direct index ( temp highp int)
+0:31            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31                Constant:
+0:31                  0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:31            Constant:
+0:31              0 (const int)
+0:31          Convert int to uint ( temp highp uint)
+0:31            add ( temp highp int)
+0:31              Constant:
+0:31                1 (const int)
+0:31              'a' ( temp highp int)
+0:32      move second child to first child ( temp highp 2-component vector of int)
+0:32        vector swizzle ( temp highp 2-component vector of int)
+0:32          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:32            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32              Constant:
+0:32                0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32        subgroupClusteredXor ( global highp 2-component vector of int)
+0:32          vector swizzle ( temp highp 2-component vector of int)
+0:32            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:32              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32                Constant:
+0:32                  1 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32          Convert int to uint ( temp highp uint)
+0:32            add ( temp highp int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              'a' ( temp highp int)
+0:33      move second child to first child ( temp highp 3-component vector of int)
+0:33        vector swizzle ( temp highp 3-component vector of int)
+0:33          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              Constant:
+0:33                0 (const int)
+0:33            Constant:
+0:33              1 (const int)
+0:33          Sequence
+0:33            Constant:
+0:33              0 (const int)
+0:33            Constant:
+0:33              1 (const int)
+0:33            Constant:
+0:33              2 (const int)
+0:33        subgroupClusteredXor ( global highp 3-component vector of int)
+0:33          vector swizzle ( temp highp 3-component vector of int)
+0:33            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                Constant:
+0:33                  2 (const int)
+0:33              Constant:
+0:33                1 (const int)
+0:33            Sequence
+0:33              Constant:
+0:33                0 (const int)
+0:33              Constant:
+0:33                1 (const int)
+0:33              Constant:
+0:33                2 (const int)
+0:33          Constant:
+0:33            2 (const uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+local_size = (8, 1, 1)
+ERROR: node is still EOpNull!
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp highp int)
+0:16          'a' ( temp highp int)
+0:16          Constant:
+0:16            1 (const int)
+0:19      Sequence
+0:19        move second child to first child ( temp highp uint)
+0:19          'invocation' ( temp highp uint)
+0:19          mod ( temp mediump uint)
+0:19            add ( temp mediump uint)
+0:19              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:19              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:19            Constant:
+0:19              4 (const uint)
+0:21      move second child to first child ( temp highp 2-component vector of float)
+0:21        vector swizzle ( temp highp 2-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              Constant:
+0:21                0 (const int)
+0:21            Constant:
+0:21              0 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupClusteredAdd ( global highp 2-component vector of float)
+0:21          vector swizzle ( temp highp 2-component vector of float)
+0:21            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21                Constant:
+0:21                  1 (const int)
+0:21              Constant:
+0:21                0 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21          Constant:
+0:21            0 (const uint)
+0:23      move second child to first child ( temp highp float)
+0:23        direct index ( temp highp float)
+0:23          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              Constant:
+0:23                0 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:23          Constant:
+0:23            0 (const int)
+0:23        subgroupClusteredMul ( global highp float)
+0:23          direct index ( temp highp float)
+0:23            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                0 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:23          Constant:
+0:23            3 (const uint)
+0:25      move second child to first child ( temp highp 2-component vector of int)
+0:25        vector swizzle ( temp highp 2-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              Constant:
+0:25                1 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25        subgroupClusteredMin ( global highp 2-component vector of int)
+0:25          vector swizzle ( temp highp 2-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                Constant:
+0:25                  1 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25          Constant:
+0:25            8 (const uint)
+0:26      move second child to first child ( temp highp 3-component vector of int)
+0:26        vector swizzle ( temp highp 3-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              Constant:
+0:26                1 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26        subgroupClusteredMin ( global highp 3-component vector of int)
+0:26          vector swizzle ( temp highp 3-component vector of int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26                Constant:
+0:26                  2 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26          Constant:
+0:26            6 (const uint)
+0:28      move second child to first child ( temp highp int)
+0:28        direct index ( temp highp int)
+0:28          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                3 (const int)
+0:28            Constant:
+0:28              1 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:28        subgroupClusteredOr ( global highp int)
+0:28          direct index ( temp highp int)
+0:28            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                1 (const int)
+0:28            Constant:
+0:28              0 (const int)
+0:28          Convert int to uint ( temp highp uint)
+0:28            'a' ( temp highp int)
+0:29      move second child to first child ( temp highp 2-component vector of int)
+0:29        vector swizzle ( temp highp 2-component vector of int)
+0:29          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              Constant:
+0:29                3 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29          Sequence
+0:29            Constant:
+0:29              0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29        subgroupClusteredOr ( global highp 2-component vector of int)
+0:29          vector swizzle ( temp highp 2-component vector of int)
+0:29            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                Constant:
+0:29                  1 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29            Sequence
+0:29              Constant:
+0:29                0 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29          Constant:
+0:29            1 (const uint)
+0:31      move second child to first child ( temp highp int)
+0:31        direct index ( temp highp int)
+0:31          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              Constant:
+0:31                0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31          Constant:
+0:31            0 (const int)
+0:31        subgroupClusteredXor ( global highp int)
+0:31          direct index ( temp highp int)
+0:31            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31                Constant:
+0:31                  0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:31            Constant:
+0:31              0 (const int)
+0:31          Convert int to uint ( temp highp uint)
+0:31            add ( temp highp int)
+0:31              Constant:
+0:31                1 (const int)
+0:31              'a' ( temp highp int)
+0:32      move second child to first child ( temp highp 2-component vector of int)
+0:32        vector swizzle ( temp highp 2-component vector of int)
+0:32          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:32            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32              Constant:
+0:32                0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32        subgroupClusteredXor ( global highp 2-component vector of int)
+0:32          vector swizzle ( temp highp 2-component vector of int)
+0:32            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:32              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32                Constant:
+0:32                  1 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32          Convert int to uint ( temp highp uint)
+0:32            add ( temp highp int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              'a' ( temp highp int)
+0:33      move second child to first child ( temp highp 3-component vector of int)
+0:33        vector swizzle ( temp highp 3-component vector of int)
+0:33          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              Constant:
+0:33                0 (const int)
+0:33            Constant:
+0:33              1 (const int)
+0:33          Sequence
+0:33            Constant:
+0:33              0 (const int)
+0:33            Constant:
+0:33              1 (const int)
+0:33            Constant:
+0:33              2 (const int)
+0:33        subgroupClusteredXor ( global highp 3-component vector of int)
+0:33          vector swizzle ( temp highp 3-component vector of int)
+0:33            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                Constant:
+0:33                  2 (const int)
+0:33              Constant:
+0:33                1 (const int)
+0:33            Sequence
+0:33              Constant:
+0:33                0 (const int)
+0:33              Constant:
+0:33                1 (const int)
+0:33              Constant:
+0:33                2 (const int)
+0:33          Constant:
+0:33            2 (const uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
diff --git a/Test/baseResults/glsl.es320.subgroupPartitioned.comp.out b/Test/baseResults/glsl.es320.subgroupPartitioned.comp.out
new file mode 100644
index 0000000..4f6cfe4
--- /dev/null
+++ b/Test/baseResults/glsl.es320.subgroupPartitioned.comp.out
@@ -0,0 +1,13967 @@
+glsl.es320.subgroupPartitioned.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_NV_shader_subgroup_partitioned
+local_size = (8, 1, 1)
+0:? Sequence
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp highp uint)
+0:16          'invocation' ( temp highp uint)
+0:16          mod ( temp mediump uint)
+0:16            add ( temp mediump uint)
+0:16              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16            Constant:
+0:16              4 (const uint)
+0:18      Sequence
+0:18        move second child to first child ( temp highp 4-component vector of uint)
+0:18          'ballot' ( temp highp 4-component vector of uint)
+0:18          subgroupPartitionNV ( global highp 4-component vector of uint)
+0:18            'invocation' ( temp highp uint)
+0:20      move second child to first child ( temp highp 4-component vector of uint)
+0:20        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:20          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20            Constant:
+0:20              0 (const int)
+0:20          Constant:
+0:20            2 (const int)
+0:20        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:20          direct index ( temp highp float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                Constant:
+0:20                  0 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:21      move second child to first child ( temp highp 4-component vector of uint)
+0:21        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:21          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            2 (const int)
+0:21        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:21          vector swizzle ( temp highp 2-component vector of float)
+0:21            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21                Constant:
+0:21                  0 (const int)
+0:21              Constant:
+0:21                0 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:22      move second child to first child ( temp highp 4-component vector of uint)
+0:22        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:22          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:22            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:22            Constant:
+0:22              0 (const int)
+0:22          Constant:
+0:22            2 (const int)
+0:22        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:22          vector swizzle ( temp highp 3-component vector of float)
+0:22            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:22              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:22                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:22                Constant:
+0:22                  0 (const int)
+0:22              Constant:
+0:22                0 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:23      move second child to first child ( temp highp 4-component vector of uint)
+0:23        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:23          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23            Constant:
+0:23              0 (const int)
+0:23          Constant:
+0:23            2 (const int)
+0:23        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:23          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              Constant:
+0:23                0 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:25      move second child to first child ( temp highp 4-component vector of uint)
+0:25        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:25          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25            Constant:
+0:25              0 (const int)
+0:25          Constant:
+0:25            2 (const int)
+0:25        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:25          direct index ( temp highp int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                Constant:
+0:25                  0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:26      move second child to first child ( temp highp 4-component vector of uint)
+0:26        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:26          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            Constant:
+0:26              0 (const int)
+0:26          Constant:
+0:26            2 (const int)
+0:26        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:26          vector swizzle ( temp highp 2-component vector of int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26                Constant:
+0:26                  0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:27      move second child to first child ( temp highp 4-component vector of uint)
+0:27        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:27          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27            Constant:
+0:27              0 (const int)
+0:27          Constant:
+0:27            2 (const int)
+0:27        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:27          vector swizzle ( temp highp 3-component vector of int)
+0:27            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:27              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27                Constant:
+0:27                  0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:28      move second child to first child ( temp highp 4-component vector of uint)
+0:28        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28            Constant:
+0:28              0 (const int)
+0:28          Constant:
+0:28            2 (const int)
+0:28        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:28          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                0 (const int)
+0:28            Constant:
+0:28              1 (const int)
+0:30      move second child to first child ( temp highp 4-component vector of uint)
+0:30        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30            Constant:
+0:30              0 (const int)
+0:30          Constant:
+0:30            2 (const int)
+0:30        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:30          direct index ( temp highp uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                Constant:
+0:30                  0 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:31      move second child to first child ( temp highp 4-component vector of uint)
+0:31        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            Constant:
+0:31              0 (const int)
+0:31          Constant:
+0:31            2 (const int)
+0:31        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:31          vector swizzle ( temp highp 2-component vector of uint)
+0:31            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31                Constant:
+0:31                  0 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:32      move second child to first child ( temp highp 4-component vector of uint)
+0:32        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:32          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32            Constant:
+0:32              0 (const int)
+0:32          Constant:
+0:32            2 (const int)
+0:32        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:32          vector swizzle ( temp highp 3-component vector of uint)
+0:32            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:32              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32                Constant:
+0:32                  0 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:33      move second child to first child ( temp highp 4-component vector of uint)
+0:33        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:33          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33            Constant:
+0:33              0 (const int)
+0:33          Constant:
+0:33            2 (const int)
+0:33        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:33          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:33            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              Constant:
+0:33                0 (const int)
+0:33            Constant:
+0:33              2 (const int)
+0:35      move second child to first child ( temp highp 4-component vector of uint)
+0:35        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:35          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35            Constant:
+0:35              1 (const int)
+0:35          Constant:
+0:35            2 (const int)
+0:35        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:35          Convert int to bool ( temp bool)
+0:35            direct index ( temp highp int)
+0:35              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                  Constant:
+0:35                    0 (const int)
+0:35                Constant:
+0:35                  1 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:36      move second child to first child ( temp highp 4-component vector of uint)
+0:36        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:36          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            Constant:
+0:36              1 (const int)
+0:36          Constant:
+0:36            2 (const int)
+0:36        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:36          Convert int to bool ( temp 2-component vector of bool)
+0:36            vector swizzle ( temp highp 2-component vector of int)
+0:36              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  Constant:
+0:36                    0 (const int)
+0:36                Constant:
+0:36                  1 (const int)
+0:36              Sequence
+0:36                Constant:
+0:36                  0 (const int)
+0:36                Constant:
+0:36                  1 (const int)
+0:37      move second child to first child ( temp highp 4-component vector of uint)
+0:37        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:37          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:37            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:37            Constant:
+0:37              1 (const int)
+0:37          Constant:
+0:37            2 (const int)
+0:37        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:37          Convert int to bool ( temp 3-component vector of bool)
+0:37            vector swizzle ( temp highp 3-component vector of int)
+0:37              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:37                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:37                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:37                  Constant:
+0:37                    0 (const int)
+0:37                Constant:
+0:37                  1 (const int)
+0:37              Sequence
+0:37                Constant:
+0:37                  0 (const int)
+0:37                Constant:
+0:37                  1 (const int)
+0:37                Constant:
+0:37                  2 (const int)
+0:38      move second child to first child ( temp highp 4-component vector of uint)
+0:38        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:38          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38            Constant:
+0:38              1 (const int)
+0:38          Constant:
+0:38            2 (const int)
+0:38        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:38          Convert int to bool ( temp 4-component vector of bool)
+0:38            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                1 (const int)
+0:40      move second child to first child ( temp highp float)
+0:40        direct index ( temp highp float)
+0:40          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupPartitionedAddNV ( global highp float)
+0:40          direct index ( temp highp float)
+0:40            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                Constant:
+0:40                  0 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:40          'ballot' ( temp highp 4-component vector of uint)
+0:41      move second child to first child ( temp highp 2-component vector of float)
+0:41        vector swizzle ( temp highp 2-component vector of float)
+0:41          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              Constant:
+0:41                1 (const int)
+0:41            Constant:
+0:41              0 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupPartitionedAddNV ( global highp 2-component vector of float)
+0:41          vector swizzle ( temp highp 2-component vector of float)
+0:41            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41                Constant:
+0:41                  1 (const int)
+0:41              Constant:
+0:41                0 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41          'ballot' ( temp highp 4-component vector of uint)
+0:42      move second child to first child ( temp highp 3-component vector of float)
+0:42        vector swizzle ( temp highp 3-component vector of float)
+0:42          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:42            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:42              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:42              Constant:
+0:42                1 (const int)
+0:42            Constant:
+0:42              0 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupPartitionedAddNV ( global highp 3-component vector of float)
+0:42          vector swizzle ( temp highp 3-component vector of float)
+0:42            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:42              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:42                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:42                Constant:
+0:42                  2 (const int)
+0:42              Constant:
+0:42                0 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:42          'ballot' ( temp highp 4-component vector of uint)
+0:43      move second child to first child ( temp highp 4-component vector of float)
+0:43        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:43          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43            Constant:
+0:43              1 (const int)
+0:43          Constant:
+0:43            0 (const int)
+0:43        subgroupPartitionedAddNV ( global highp 4-component vector of float)
+0:43          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:43            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              Constant:
+0:43                3 (const int)
+0:43            Constant:
+0:43              0 (const int)
+0:43          'ballot' ( temp highp 4-component vector of uint)
+0:45      move second child to first child ( temp highp int)
+0:45        direct index ( temp highp int)
+0:45          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              Constant:
+0:45                1 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupPartitionedAddNV ( global highp int)
+0:45          direct index ( temp highp int)
+0:45            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                Constant:
+0:45                  0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:45          'ballot' ( temp highp 4-component vector of uint)
+0:46      move second child to first child ( temp highp 2-component vector of int)
+0:46        vector swizzle ( temp highp 2-component vector of int)
+0:46          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              Constant:
+0:46                1 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupPartitionedAddNV ( global highp 2-component vector of int)
+0:46          vector swizzle ( temp highp 2-component vector of int)
+0:46            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46                Constant:
+0:46                  1 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46          'ballot' ( temp highp 4-component vector of uint)
+0:47      move second child to first child ( temp highp 3-component vector of int)
+0:47        vector swizzle ( temp highp 3-component vector of int)
+0:47          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:47            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:47              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:47              Constant:
+0:47                1 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupPartitionedAddNV ( global highp 3-component vector of int)
+0:47          vector swizzle ( temp highp 3-component vector of int)
+0:47            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:47              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:47                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:47                Constant:
+0:47                  2 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47          'ballot' ( temp highp 4-component vector of uint)
+0:48      move second child to first child ( temp highp 4-component vector of int)
+0:48        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48            Constant:
+0:48              1 (const int)
+0:48          Constant:
+0:48            1 (const int)
+0:48        subgroupPartitionedAddNV ( global highp 4-component vector of int)
+0:48          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              Constant:
+0:48                3 (const int)
+0:48            Constant:
+0:48              1 (const int)
+0:48          'ballot' ( temp highp 4-component vector of uint)
+0:50      move second child to first child ( temp highp uint)
+0:50        direct index ( temp highp uint)
+0:50          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              Constant:
+0:50                1 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupPartitionedAddNV ( global highp uint)
+0:50          direct index ( temp highp uint)
+0:50            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                Constant:
+0:50                  0 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:50          'ballot' ( temp highp 4-component vector of uint)
+0:51      move second child to first child ( temp highp 2-component vector of uint)
+0:51        vector swizzle ( temp highp 2-component vector of uint)
+0:51          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              Constant:
+0:51                1 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupPartitionedAddNV ( global highp 2-component vector of uint)
+0:51          vector swizzle ( temp highp 2-component vector of uint)
+0:51            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51                Constant:
+0:51                  1 (const int)
+0:51              Constant:
+0:51                2 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51          'ballot' ( temp highp 4-component vector of uint)
+0:52      move second child to first child ( temp highp 3-component vector of uint)
+0:52        vector swizzle ( temp highp 3-component vector of uint)
+0:52          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:52            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:52              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:52              Constant:
+0:52                1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupPartitionedAddNV ( global highp 3-component vector of uint)
+0:52          vector swizzle ( temp highp 3-component vector of uint)
+0:52            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:52              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:52                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:52                Constant:
+0:52                  2 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:52          'ballot' ( temp highp 4-component vector of uint)
+0:53      move second child to first child ( temp highp 4-component vector of uint)
+0:53        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:53          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53            Constant:
+0:53              1 (const int)
+0:53          Constant:
+0:53            2 (const int)
+0:53        subgroupPartitionedAddNV ( global highp 4-component vector of uint)
+0:53          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:53            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              Constant:
+0:53                3 (const int)
+0:53            Constant:
+0:53              2 (const int)
+0:53          'ballot' ( temp highp 4-component vector of uint)
+0:55      move second child to first child ( temp highp float)
+0:55        direct index ( temp highp float)
+0:55          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:55            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              Constant:
+0:55                2 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:55          Constant:
+0:55            0 (const int)
+0:55        subgroupPartitionedMulNV ( global highp float)
+0:55          direct index ( temp highp float)
+0:55            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                Constant:
+0:55                  0 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:55          'ballot' ( temp highp 4-component vector of uint)
+0:56      move second child to first child ( temp highp 2-component vector of float)
+0:56        vector swizzle ( temp highp 2-component vector of float)
+0:56          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:56            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56              Constant:
+0:56                2 (const int)
+0:56            Constant:
+0:56              0 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56        subgroupPartitionedMulNV ( global highp 2-component vector of float)
+0:56          vector swizzle ( temp highp 2-component vector of float)
+0:56            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:56              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                Constant:
+0:56                  1 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:56          'ballot' ( temp highp 4-component vector of uint)
+0:57      move second child to first child ( temp highp 3-component vector of float)
+0:57        vector swizzle ( temp highp 3-component vector of float)
+0:57          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:57            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57              Constant:
+0:57                2 (const int)
+0:57            Constant:
+0:57              0 (const int)
+0:57          Sequence
+0:57            Constant:
+0:57              0 (const int)
+0:57            Constant:
+0:57              1 (const int)
+0:57            Constant:
+0:57              2 (const int)
+0:57        subgroupPartitionedMulNV ( global highp 3-component vector of float)
+0:57          vector swizzle ( temp highp 3-component vector of float)
+0:57            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:57              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57                Constant:
+0:57                  2 (const int)
+0:57              Constant:
+0:57                0 (const int)
+0:57            Sequence
+0:57              Constant:
+0:57                0 (const int)
+0:57              Constant:
+0:57                1 (const int)
+0:57              Constant:
+0:57                2 (const int)
+0:57          'ballot' ( temp highp 4-component vector of uint)
+0:58      move second child to first child ( temp highp 4-component vector of float)
+0:58        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58            Constant:
+0:58              2 (const int)
+0:58          Constant:
+0:58            0 (const int)
+0:58        subgroupPartitionedMulNV ( global highp 4-component vector of float)
+0:58          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              Constant:
+0:58                3 (const int)
+0:58            Constant:
+0:58              0 (const int)
+0:58          'ballot' ( temp highp 4-component vector of uint)
+0:60      move second child to first child ( temp highp int)
+0:60        direct index ( temp highp int)
+0:60          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              Constant:
+0:60                2 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60          Constant:
+0:60            0 (const int)
+0:60        subgroupPartitionedMulNV ( global highp int)
+0:60          direct index ( temp highp int)
+0:60            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                Constant:
+0:60                  0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60            Constant:
+0:60              0 (const int)
+0:60          'ballot' ( temp highp 4-component vector of uint)
+0:61      move second child to first child ( temp highp 2-component vector of int)
+0:61        vector swizzle ( temp highp 2-component vector of int)
+0:61          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61              Constant:
+0:61                2 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61        subgroupPartitionedMulNV ( global highp 2-component vector of int)
+0:61          vector swizzle ( temp highp 2-component vector of int)
+0:61            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61                Constant:
+0:61                  1 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61          'ballot' ( temp highp 4-component vector of uint)
+0:62      move second child to first child ( temp highp 3-component vector of int)
+0:62        vector swizzle ( temp highp 3-component vector of int)
+0:62          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:62            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62              Constant:
+0:62                2 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62            Constant:
+0:62              2 (const int)
+0:62        subgroupPartitionedMulNV ( global highp 3-component vector of int)
+0:62          vector swizzle ( temp highp 3-component vector of int)
+0:62            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:62              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62                Constant:
+0:62                  2 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62            Sequence
+0:62              Constant:
+0:62                0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62              Constant:
+0:62                2 (const int)
+0:62          'ballot' ( temp highp 4-component vector of uint)
+0:63      move second child to first child ( temp highp 4-component vector of int)
+0:63        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63            Constant:
+0:63              2 (const int)
+0:63          Constant:
+0:63            1 (const int)
+0:63        subgroupPartitionedMulNV ( global highp 4-component vector of int)
+0:63          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63              Constant:
+0:63                3 (const int)
+0:63            Constant:
+0:63              1 (const int)
+0:63          'ballot' ( temp highp 4-component vector of uint)
+0:65      move second child to first child ( temp highp uint)
+0:65        direct index ( temp highp uint)
+0:65          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:65            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65              Constant:
+0:65                2 (const int)
+0:65            Constant:
+0:65              2 (const int)
+0:65          Constant:
+0:65            0 (const int)
+0:65        subgroupPartitionedMulNV ( global highp uint)
+0:65          direct index ( temp highp uint)
+0:65            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:65              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                Constant:
+0:65                  0 (const int)
+0:65              Constant:
+0:65                2 (const int)
+0:65            Constant:
+0:65              0 (const int)
+0:65          'ballot' ( temp highp 4-component vector of uint)
+0:66      move second child to first child ( temp highp 2-component vector of uint)
+0:66        vector swizzle ( temp highp 2-component vector of uint)
+0:66          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:66            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66              Constant:
+0:66                2 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66        subgroupPartitionedMulNV ( global highp 2-component vector of uint)
+0:66          vector swizzle ( temp highp 2-component vector of uint)
+0:66            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:66              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66                Constant:
+0:66                  1 (const int)
+0:66              Constant:
+0:66                2 (const int)
+0:66            Sequence
+0:66              Constant:
+0:66                0 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:66          'ballot' ( temp highp 4-component vector of uint)
+0:67      move second child to first child ( temp highp 3-component vector of uint)
+0:67        vector swizzle ( temp highp 3-component vector of uint)
+0:67          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:67            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67              Constant:
+0:67                2 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67          Sequence
+0:67            Constant:
+0:67              0 (const int)
+0:67            Constant:
+0:67              1 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67        subgroupPartitionedMulNV ( global highp 3-component vector of uint)
+0:67          vector swizzle ( temp highp 3-component vector of uint)
+0:67            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:67              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67                Constant:
+0:67                  2 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:67            Sequence
+0:67              Constant:
+0:67                0 (const int)
+0:67              Constant:
+0:67                1 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:67          'ballot' ( temp highp 4-component vector of uint)
+0:68      move second child to first child ( temp highp 4-component vector of uint)
+0:68        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68            Constant:
+0:68              2 (const int)
+0:68          Constant:
+0:68            2 (const int)
+0:68        subgroupPartitionedMulNV ( global highp 4-component vector of uint)
+0:68          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68              Constant:
+0:68                3 (const int)
+0:68            Constant:
+0:68              2 (const int)
+0:68          'ballot' ( temp highp 4-component vector of uint)
+0:70      move second child to first child ( temp highp float)
+0:70        direct index ( temp highp float)
+0:70          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:70            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70              Constant:
+0:70                2 (const int)
+0:70            Constant:
+0:70              0 (const int)
+0:70          Constant:
+0:70            0 (const int)
+0:70        subgroupPartitionedMinNV ( global highp float)
+0:70          direct index ( temp highp float)
+0:70            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:70              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                Constant:
+0:70                  0 (const int)
+0:70              Constant:
+0:70                0 (const int)
+0:70            Constant:
+0:70              0 (const int)
+0:70          'ballot' ( temp highp 4-component vector of uint)
+0:71      move second child to first child ( temp highp 2-component vector of float)
+0:71        vector swizzle ( temp highp 2-component vector of float)
+0:71          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:71            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71              Constant:
+0:71                2 (const int)
+0:71            Constant:
+0:71              0 (const int)
+0:71          Sequence
+0:71            Constant:
+0:71              0 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71        subgroupPartitionedMinNV ( global highp 2-component vector of float)
+0:71          vector swizzle ( temp highp 2-component vector of float)
+0:71            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:71              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71                Constant:
+0:71                  1 (const int)
+0:71              Constant:
+0:71                0 (const int)
+0:71            Sequence
+0:71              Constant:
+0:71                0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:71          'ballot' ( temp highp 4-component vector of uint)
+0:72      move second child to first child ( temp highp 3-component vector of float)
+0:72        vector swizzle ( temp highp 3-component vector of float)
+0:72          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:72            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72              Constant:
+0:72                2 (const int)
+0:72            Constant:
+0:72              0 (const int)
+0:72          Sequence
+0:72            Constant:
+0:72              0 (const int)
+0:72            Constant:
+0:72              1 (const int)
+0:72            Constant:
+0:72              2 (const int)
+0:72        subgroupPartitionedMinNV ( global highp 3-component vector of float)
+0:72          vector swizzle ( temp highp 3-component vector of float)
+0:72            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:72              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72                Constant:
+0:72                  2 (const int)
+0:72              Constant:
+0:72                0 (const int)
+0:72            Sequence
+0:72              Constant:
+0:72                0 (const int)
+0:72              Constant:
+0:72                1 (const int)
+0:72              Constant:
+0:72                2 (const int)
+0:72          'ballot' ( temp highp 4-component vector of uint)
+0:73      move second child to first child ( temp highp 4-component vector of float)
+0:73        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:73          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73            Constant:
+0:73              2 (const int)
+0:73          Constant:
+0:73            0 (const int)
+0:73        subgroupPartitionedMinNV ( global highp 4-component vector of float)
+0:73          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:73            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73              Constant:
+0:73                3 (const int)
+0:73            Constant:
+0:73              0 (const int)
+0:73          'ballot' ( temp highp 4-component vector of uint)
+0:75      move second child to first child ( temp highp int)
+0:75        direct index ( temp highp int)
+0:75          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:75            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75              Constant:
+0:75                3 (const int)
+0:75            Constant:
+0:75              1 (const int)
+0:75          Constant:
+0:75            0 (const int)
+0:75        subgroupPartitionedMinNV ( global highp int)
+0:75          direct index ( temp highp int)
+0:75            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:75              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75                Constant:
+0:75                  0 (const int)
+0:75              Constant:
+0:75                1 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:75          'ballot' ( temp highp 4-component vector of uint)
+0:76      move second child to first child ( temp highp 2-component vector of int)
+0:76        vector swizzle ( temp highp 2-component vector of int)
+0:76          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:76            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76              Constant:
+0:76                3 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76          Sequence
+0:76            Constant:
+0:76              0 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76        subgroupPartitionedMinNV ( global highp 2-component vector of int)
+0:76          vector swizzle ( temp highp 2-component vector of int)
+0:76            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:76              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76                Constant:
+0:76                  1 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:76            Sequence
+0:76              Constant:
+0:76                0 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:76          'ballot' ( temp highp 4-component vector of uint)
+0:77      move second child to first child ( temp highp 3-component vector of int)
+0:77        vector swizzle ( temp highp 3-component vector of int)
+0:77          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:77            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:77              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:77              Constant:
+0:77                3 (const int)
+0:77            Constant:
+0:77              1 (const int)
+0:77          Sequence
+0:77            Constant:
+0:77              0 (const int)
+0:77            Constant:
+0:77              1 (const int)
+0:77            Constant:
+0:77              2 (const int)
+0:77        subgroupPartitionedMinNV ( global highp 3-component vector of int)
+0:77          vector swizzle ( temp highp 3-component vector of int)
+0:77            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:77              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:77                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:77                Constant:
+0:77                  2 (const int)
+0:77              Constant:
+0:77                1 (const int)
+0:77            Sequence
+0:77              Constant:
+0:77                0 (const int)
+0:77              Constant:
+0:77                1 (const int)
+0:77              Constant:
+0:77                2 (const int)
+0:77          'ballot' ( temp highp 4-component vector of uint)
+0:78      move second child to first child ( temp highp 4-component vector of int)
+0:78        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78            Constant:
+0:78              3 (const int)
+0:78          Constant:
+0:78            1 (const int)
+0:78        subgroupPartitionedMinNV ( global highp 4-component vector of int)
+0:78          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78              Constant:
+0:78                3 (const int)
+0:78            Constant:
+0:78              1 (const int)
+0:78          'ballot' ( temp highp 4-component vector of uint)
+0:80      move second child to first child ( temp highp uint)
+0:80        direct index ( temp highp uint)
+0:80          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:80            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80              Constant:
+0:80                3 (const int)
+0:80            Constant:
+0:80              2 (const int)
+0:80          Constant:
+0:80            0 (const int)
+0:80        subgroupPartitionedMinNV ( global highp uint)
+0:80          direct index ( temp highp uint)
+0:80            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:80              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80                Constant:
+0:80                  0 (const int)
+0:80              Constant:
+0:80                2 (const int)
+0:80            Constant:
+0:80              0 (const int)
+0:80          'ballot' ( temp highp 4-component vector of uint)
+0:81      move second child to first child ( temp highp 2-component vector of uint)
+0:81        vector swizzle ( temp highp 2-component vector of uint)
+0:81          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:81            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81              Constant:
+0:81                3 (const int)
+0:81            Constant:
+0:81              2 (const int)
+0:81          Sequence
+0:81            Constant:
+0:81              0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81        subgroupPartitionedMinNV ( global highp 2-component vector of uint)
+0:81          vector swizzle ( temp highp 2-component vector of uint)
+0:81            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:81              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81                Constant:
+0:81                  1 (const int)
+0:81              Constant:
+0:81                2 (const int)
+0:81            Sequence
+0:81              Constant:
+0:81                0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81          'ballot' ( temp highp 4-component vector of uint)
+0:82      move second child to first child ( temp highp 3-component vector of uint)
+0:82        vector swizzle ( temp highp 3-component vector of uint)
+0:82          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:82            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:82              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:82              Constant:
+0:82                3 (const int)
+0:82            Constant:
+0:82              2 (const int)
+0:82          Sequence
+0:82            Constant:
+0:82              0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82            Constant:
+0:82              2 (const int)
+0:82        subgroupPartitionedMinNV ( global highp 3-component vector of uint)
+0:82          vector swizzle ( temp highp 3-component vector of uint)
+0:82            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:82              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:82                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:82                Constant:
+0:82                  2 (const int)
+0:82              Constant:
+0:82                2 (const int)
+0:82            Sequence
+0:82              Constant:
+0:82                0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82              Constant:
+0:82                2 (const int)
+0:82          'ballot' ( temp highp 4-component vector of uint)
+0:83      move second child to first child ( temp highp 4-component vector of uint)
+0:83        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83            Constant:
+0:83              3 (const int)
+0:83          Constant:
+0:83            2 (const int)
+0:83        subgroupPartitionedMinNV ( global highp 4-component vector of uint)
+0:83          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83              Constant:
+0:83                3 (const int)
+0:83            Constant:
+0:83              2 (const int)
+0:83          'ballot' ( temp highp 4-component vector of uint)
+0:85      move second child to first child ( temp highp float)
+0:85        direct index ( temp highp float)
+0:85          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:85            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85              Constant:
+0:85                3 (const int)
+0:85            Constant:
+0:85              0 (const int)
+0:85          Constant:
+0:85            0 (const int)
+0:85        subgroupPartitionedMaxNV ( global highp float)
+0:85          direct index ( temp highp float)
+0:85            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:85              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85                Constant:
+0:85                  0 (const int)
+0:85              Constant:
+0:85                0 (const int)
+0:85            Constant:
+0:85              0 (const int)
+0:85          'ballot' ( temp highp 4-component vector of uint)
+0:86      move second child to first child ( temp highp 2-component vector of float)
+0:86        vector swizzle ( temp highp 2-component vector of float)
+0:86          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:86            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86              Constant:
+0:86                3 (const int)
+0:86            Constant:
+0:86              0 (const int)
+0:86          Sequence
+0:86            Constant:
+0:86              0 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:86        subgroupPartitionedMaxNV ( global highp 2-component vector of float)
+0:86          vector swizzle ( temp highp 2-component vector of float)
+0:86            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:86              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86                Constant:
+0:86                  1 (const int)
+0:86              Constant:
+0:86                0 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86          'ballot' ( temp highp 4-component vector of uint)
+0:87      move second child to first child ( temp highp 3-component vector of float)
+0:87        vector swizzle ( temp highp 3-component vector of float)
+0:87          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:87            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:87              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:87              Constant:
+0:87                3 (const int)
+0:87            Constant:
+0:87              0 (const int)
+0:87          Sequence
+0:87            Constant:
+0:87              0 (const int)
+0:87            Constant:
+0:87              1 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87        subgroupPartitionedMaxNV ( global highp 3-component vector of float)
+0:87          vector swizzle ( temp highp 3-component vector of float)
+0:87            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:87              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:87                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:87                Constant:
+0:87                  2 (const int)
+0:87              Constant:
+0:87                0 (const int)
+0:87            Sequence
+0:87              Constant:
+0:87                0 (const int)
+0:87              Constant:
+0:87                1 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:87          'ballot' ( temp highp 4-component vector of uint)
+0:88      move second child to first child ( temp highp 4-component vector of float)
+0:88        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:88          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88            Constant:
+0:88              3 (const int)
+0:88          Constant:
+0:88            0 (const int)
+0:88        subgroupPartitionedMaxNV ( global highp 4-component vector of float)
+0:88          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:88            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88              Constant:
+0:88                3 (const int)
+0:88            Constant:
+0:88              0 (const int)
+0:88          'ballot' ( temp highp 4-component vector of uint)
+0:90      move second child to first child ( temp highp int)
+0:90        direct index ( temp highp int)
+0:90          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90              Constant:
+0:90                0 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90          Constant:
+0:90            0 (const int)
+0:90        subgroupPartitionedMaxNV ( global highp int)
+0:90          direct index ( temp highp int)
+0:90            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90                Constant:
+0:90                  0 (const int)
+0:90              Constant:
+0:90                1 (const int)
+0:90            Constant:
+0:90              0 (const int)
+0:90          'ballot' ( temp highp 4-component vector of uint)
+0:91      move second child to first child ( temp highp 2-component vector of int)
+0:91        vector swizzle ( temp highp 2-component vector of int)
+0:91          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91              Constant:
+0:91                0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91          Sequence
+0:91            Constant:
+0:91              0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91        subgroupPartitionedMaxNV ( global highp 2-component vector of int)
+0:91          vector swizzle ( temp highp 2-component vector of int)
+0:91            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91                Constant:
+0:91                  1 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:91            Sequence
+0:91              Constant:
+0:91                0 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:91          'ballot' ( temp highp 4-component vector of uint)
+0:92      move second child to first child ( temp highp 3-component vector of int)
+0:92        vector swizzle ( temp highp 3-component vector of int)
+0:92          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:92            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:92              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:92              Constant:
+0:92                0 (const int)
+0:92            Constant:
+0:92              1 (const int)
+0:92          Sequence
+0:92            Constant:
+0:92              0 (const int)
+0:92            Constant:
+0:92              1 (const int)
+0:92            Constant:
+0:92              2 (const int)
+0:92        subgroupPartitionedMaxNV ( global highp 3-component vector of int)
+0:92          vector swizzle ( temp highp 3-component vector of int)
+0:92            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:92              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:92                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:92                Constant:
+0:92                  2 (const int)
+0:92              Constant:
+0:92                1 (const int)
+0:92            Sequence
+0:92              Constant:
+0:92                0 (const int)
+0:92              Constant:
+0:92                1 (const int)
+0:92              Constant:
+0:92                2 (const int)
+0:92          'ballot' ( temp highp 4-component vector of uint)
+0:93      move second child to first child ( temp highp 4-component vector of int)
+0:93        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93            Constant:
+0:93              0 (const int)
+0:93          Constant:
+0:93            1 (const int)
+0:93        subgroupPartitionedMaxNV ( global highp 4-component vector of int)
+0:93          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93              Constant:
+0:93                3 (const int)
+0:93            Constant:
+0:93              1 (const int)
+0:93          'ballot' ( temp highp 4-component vector of uint)
+0:95      move second child to first child ( temp highp uint)
+0:95        direct index ( temp highp uint)
+0:95          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:95            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95              Constant:
+0:95                0 (const int)
+0:95            Constant:
+0:95              2 (const int)
+0:95          Constant:
+0:95            0 (const int)
+0:95        subgroupPartitionedMaxNV ( global highp uint)
+0:95          direct index ( temp highp uint)
+0:95            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:95              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95                Constant:
+0:95                  0 (const int)
+0:95              Constant:
+0:95                2 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:95          'ballot' ( temp highp 4-component vector of uint)
+0:96      move second child to first child ( temp highp 2-component vector of uint)
+0:96        vector swizzle ( temp highp 2-component vector of uint)
+0:96          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:96            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96              Constant:
+0:96                0 (const int)
+0:96            Constant:
+0:96              2 (const int)
+0:96          Sequence
+0:96            Constant:
+0:96              0 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96        subgroupPartitionedMaxNV ( global highp 2-component vector of uint)
+0:96          vector swizzle ( temp highp 2-component vector of uint)
+0:96            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:96              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96                Constant:
+0:96                  1 (const int)
+0:96              Constant:
+0:96                2 (const int)
+0:96            Sequence
+0:96              Constant:
+0:96                0 (const int)
+0:96              Constant:
+0:96                1 (const int)
+0:96          'ballot' ( temp highp 4-component vector of uint)
+0:97      move second child to first child ( temp highp 3-component vector of uint)
+0:97        vector swizzle ( temp highp 3-component vector of uint)
+0:97          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:97            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:97              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:97              Constant:
+0:97                0 (const int)
+0:97            Constant:
+0:97              2 (const int)
+0:97          Sequence
+0:97            Constant:
+0:97              0 (const int)
+0:97            Constant:
+0:97              1 (const int)
+0:97            Constant:
+0:97              2 (const int)
+0:97        subgroupPartitionedMaxNV ( global highp 3-component vector of uint)
+0:97          vector swizzle ( temp highp 3-component vector of uint)
+0:97            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:97              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:97                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:97                Constant:
+0:97                  2 (const int)
+0:97              Constant:
+0:97                2 (const int)
+0:97            Sequence
+0:97              Constant:
+0:97                0 (const int)
+0:97              Constant:
+0:97                1 (const int)
+0:97              Constant:
+0:97                2 (const int)
+0:97          'ballot' ( temp highp 4-component vector of uint)
+0:98      move second child to first child ( temp highp 4-component vector of uint)
+0:98        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98            Constant:
+0:98              0 (const int)
+0:98          Constant:
+0:98            2 (const int)
+0:98        subgroupPartitionedMaxNV ( global highp 4-component vector of uint)
+0:98          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98              Constant:
+0:98                3 (const int)
+0:98            Constant:
+0:98              2 (const int)
+0:98          'ballot' ( temp highp 4-component vector of uint)
+0:100      move second child to first child ( temp highp int)
+0:100        direct index ( temp highp int)
+0:100          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:100            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100              Constant:
+0:100                0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100          Constant:
+0:100            0 (const int)
+0:100        subgroupPartitionedAndNV ( global highp int)
+0:100          direct index ( temp highp int)
+0:100            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:100              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100                Constant:
+0:100                  0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100            Constant:
+0:100              0 (const int)
+0:100          'ballot' ( temp highp 4-component vector of uint)
+0:101      move second child to first child ( temp highp 2-component vector of int)
+0:101        vector swizzle ( temp highp 2-component vector of int)
+0:101          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:101            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101              Constant:
+0:101                0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101          Sequence
+0:101            Constant:
+0:101              0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101        subgroupPartitionedAndNV ( global highp 2-component vector of int)
+0:101          vector swizzle ( temp highp 2-component vector of int)
+0:101            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:101              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101                Constant:
+0:101                  1 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101            Sequence
+0:101              Constant:
+0:101                0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101          'ballot' ( temp highp 4-component vector of uint)
+0:102      move second child to first child ( temp highp 3-component vector of int)
+0:102        vector swizzle ( temp highp 3-component vector of int)
+0:102          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:102            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:102              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:102              Constant:
+0:102                0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102          Sequence
+0:102            Constant:
+0:102              0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102            Constant:
+0:102              2 (const int)
+0:102        subgroupPartitionedAndNV ( global highp 3-component vector of int)
+0:102          vector swizzle ( temp highp 3-component vector of int)
+0:102            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:102              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:102                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:102                Constant:
+0:102                  2 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102            Sequence
+0:102              Constant:
+0:102                0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102              Constant:
+0:102                2 (const int)
+0:102          'ballot' ( temp highp 4-component vector of uint)
+0:103      move second child to first child ( temp highp 4-component vector of int)
+0:103        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103            Constant:
+0:103              0 (const int)
+0:103          Constant:
+0:103            1 (const int)
+0:103        subgroupPartitionedAndNV ( global highp 4-component vector of int)
+0:103          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103              Constant:
+0:103                3 (const int)
+0:103            Constant:
+0:103              1 (const int)
+0:103          'ballot' ( temp highp 4-component vector of uint)
+0:105      move second child to first child ( temp highp uint)
+0:105        direct index ( temp highp uint)
+0:105          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:105            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105              Constant:
+0:105                1 (const int)
+0:105            Constant:
+0:105              2 (const int)
+0:105          Constant:
+0:105            0 (const int)
+0:105        subgroupPartitionedAndNV ( global highp uint)
+0:105          direct index ( temp highp uint)
+0:105            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:105              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105                Constant:
+0:105                  0 (const int)
+0:105              Constant:
+0:105                2 (const int)
+0:105            Constant:
+0:105              0 (const int)
+0:105          'ballot' ( temp highp 4-component vector of uint)
+0:106      move second child to first child ( temp highp 2-component vector of uint)
+0:106        vector swizzle ( temp highp 2-component vector of uint)
+0:106          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:106            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106              Constant:
+0:106                1 (const int)
+0:106            Constant:
+0:106              2 (const int)
+0:106          Sequence
+0:106            Constant:
+0:106              0 (const int)
+0:106            Constant:
+0:106              1 (const int)
+0:106        subgroupPartitionedAndNV ( global highp 2-component vector of uint)
+0:106          vector swizzle ( temp highp 2-component vector of uint)
+0:106            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:106              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106                Constant:
+0:106                  1 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:106            Sequence
+0:106              Constant:
+0:106                0 (const int)
+0:106              Constant:
+0:106                1 (const int)
+0:106          'ballot' ( temp highp 4-component vector of uint)
+0:107      move second child to first child ( temp highp 3-component vector of uint)
+0:107        vector swizzle ( temp highp 3-component vector of uint)
+0:107          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:107            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:107              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:107              Constant:
+0:107                1 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107          Sequence
+0:107            Constant:
+0:107              0 (const int)
+0:107            Constant:
+0:107              1 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107        subgroupPartitionedAndNV ( global highp 3-component vector of uint)
+0:107          vector swizzle ( temp highp 3-component vector of uint)
+0:107            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:107              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:107                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:107                Constant:
+0:107                  2 (const int)
+0:107              Constant:
+0:107                2 (const int)
+0:107            Sequence
+0:107              Constant:
+0:107                0 (const int)
+0:107              Constant:
+0:107                1 (const int)
+0:107              Constant:
+0:107                2 (const int)
+0:107          'ballot' ( temp highp 4-component vector of uint)
+0:108      move second child to first child ( temp highp 4-component vector of uint)
+0:108        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:108          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108            Constant:
+0:108              1 (const int)
+0:108          Constant:
+0:108            2 (const int)
+0:108        subgroupPartitionedAndNV ( global highp 4-component vector of uint)
+0:108          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:108            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108              Constant:
+0:108                3 (const int)
+0:108            Constant:
+0:108              2 (const int)
+0:108          'ballot' ( temp highp 4-component vector of uint)
+0:110      move second child to first child ( temp highp int)
+0:110        direct index ( temp highp int)
+0:110          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110              Constant:
+0:110                1 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110          Constant:
+0:110            0 (const int)
+0:110        Convert bool to int ( temp highp int)
+0:110          subgroupPartitionedAndNV ( global bool, operation at highp)
+0:110            Compare Less Than ( temp bool)
+0:110              direct index ( temp highp int)
+0:110                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110                    Constant:
+0:110                      0 (const int)
+0:110                  Constant:
+0:110                    1 (const int)
+0:110                Constant:
+0:110                  0 (const int)
+0:110              Constant:
+0:110                0 (const int)
+0:110            'ballot' ( temp highp 4-component vector of uint)
+0:111      move second child to first child ( temp highp 2-component vector of int)
+0:111        vector swizzle ( temp highp 2-component vector of int)
+0:111          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111              Constant:
+0:111                1 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111          Sequence
+0:111            Constant:
+0:111              0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111        Convert bool to int ( temp highp 2-component vector of int)
+0:111          subgroupPartitionedAndNV ( global 2-component vector of bool, operation at highp)
+0:111            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:111              vector swizzle ( temp highp 2-component vector of int)
+0:111                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111                    Constant:
+0:111                      1 (const int)
+0:111                  Constant:
+0:111                    1 (const int)
+0:111                Sequence
+0:111                  Constant:
+0:111                    0 (const int)
+0:111                  Constant:
+0:111                    1 (const int)
+0:111              Constant:
+0:111                0 (const int)
+0:111                0 (const int)
+0:111            'ballot' ( temp highp 4-component vector of uint)
+0:112      move second child to first child ( temp highp 3-component vector of int)
+0:112        vector swizzle ( temp highp 3-component vector of int)
+0:112          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:112            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:112              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:112              Constant:
+0:112                1 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112          Sequence
+0:112            Constant:
+0:112              0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112            Constant:
+0:112              2 (const int)
+0:112        Convert bool to int ( temp highp 3-component vector of int)
+0:112          subgroupPartitionedAndNV ( global 3-component vector of bool, operation at highp)
+0:112            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:112              vector swizzle ( temp highp 3-component vector of int)
+0:112                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:112                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:112                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:112                    Constant:
+0:112                      1 (const int)
+0:112                  Constant:
+0:112                    1 (const int)
+0:112                Sequence
+0:112                  Constant:
+0:112                    0 (const int)
+0:112                  Constant:
+0:112                    1 (const int)
+0:112                  Constant:
+0:112                    2 (const int)
+0:112              Constant:
+0:112                0 (const int)
+0:112                0 (const int)
+0:112                0 (const int)
+0:112            'ballot' ( temp highp 4-component vector of uint)
+0:113      move second child to first child ( temp highp 4-component vector of int)
+0:113        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:113          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113            Constant:
+0:113              1 (const int)
+0:113          Constant:
+0:113            1 (const int)
+0:113        Convert bool to int ( temp highp 4-component vector of int)
+0:113          subgroupPartitionedAndNV ( global 4-component vector of bool, operation at highp)
+0:113            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:113              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:113                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113                  Constant:
+0:113                    1 (const int)
+0:113                Constant:
+0:113                  1 (const int)
+0:113              Constant:
+0:113                0 (const int)
+0:113                0 (const int)
+0:113                0 (const int)
+0:113                0 (const int)
+0:113            'ballot' ( temp highp 4-component vector of uint)
+0:115      move second child to first child ( temp highp int)
+0:115        direct index ( temp highp int)
+0:115          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:115            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115              Constant:
+0:115                1 (const int)
+0:115            Constant:
+0:115              1 (const int)
+0:115          Constant:
+0:115            0 (const int)
+0:115        subgroupPartitionedOrNV ( global highp int)
+0:115          direct index ( temp highp int)
+0:115            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:115              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115                Constant:
+0:115                  0 (const int)
+0:115              Constant:
+0:115                1 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:115          'ballot' ( temp highp 4-component vector of uint)
+0:116      move second child to first child ( temp highp 2-component vector of int)
+0:116        vector swizzle ( temp highp 2-component vector of int)
+0:116          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:116            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116              Constant:
+0:116                1 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116          Sequence
+0:116            Constant:
+0:116              0 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116        subgroupPartitionedOrNV ( global highp 2-component vector of int)
+0:116          vector swizzle ( temp highp 2-component vector of int)
+0:116            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:116              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116                Constant:
+0:116                  1 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:116            Sequence
+0:116              Constant:
+0:116                0 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:116          'ballot' ( temp highp 4-component vector of uint)
+0:117      move second child to first child ( temp highp 3-component vector of int)
+0:117        vector swizzle ( temp highp 3-component vector of int)
+0:117          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:117            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:117              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:117              Constant:
+0:117                1 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:117          Sequence
+0:117            Constant:
+0:117              0 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:117            Constant:
+0:117              2 (const int)
+0:117        subgroupPartitionedOrNV ( global highp 3-component vector of int)
+0:117          vector swizzle ( temp highp 3-component vector of int)
+0:117            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:117              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:117                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:117                Constant:
+0:117                  2 (const int)
+0:117              Constant:
+0:117                1 (const int)
+0:117            Sequence
+0:117              Constant:
+0:117                0 (const int)
+0:117              Constant:
+0:117                1 (const int)
+0:117              Constant:
+0:117                2 (const int)
+0:117          'ballot' ( temp highp 4-component vector of uint)
+0:118      move second child to first child ( temp highp 4-component vector of int)
+0:118        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118            Constant:
+0:118              1 (const int)
+0:118          Constant:
+0:118            1 (const int)
+0:118        subgroupPartitionedOrNV ( global highp 4-component vector of int)
+0:118          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118              Constant:
+0:118                3 (const int)
+0:118            Constant:
+0:118              1 (const int)
+0:118          'ballot' ( temp highp 4-component vector of uint)
+0:120      move second child to first child ( temp highp uint)
+0:120        direct index ( temp highp uint)
+0:120          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:120            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120              Constant:
+0:120                2 (const int)
+0:120            Constant:
+0:120              2 (const int)
+0:120          Constant:
+0:120            0 (const int)
+0:120        subgroupPartitionedOrNV ( global highp uint)
+0:120          direct index ( temp highp uint)
+0:120            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:120              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120                Constant:
+0:120                  0 (const int)
+0:120              Constant:
+0:120                2 (const int)
+0:120            Constant:
+0:120              0 (const int)
+0:120          'ballot' ( temp highp 4-component vector of uint)
+0:121      move second child to first child ( temp highp 2-component vector of uint)
+0:121        vector swizzle ( temp highp 2-component vector of uint)
+0:121          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:121            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121              Constant:
+0:121                2 (const int)
+0:121            Constant:
+0:121              2 (const int)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121        subgroupPartitionedOrNV ( global highp 2-component vector of uint)
+0:121          vector swizzle ( temp highp 2-component vector of uint)
+0:121            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:121              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121                Constant:
+0:121                  1 (const int)
+0:121              Constant:
+0:121                2 (const int)
+0:121            Sequence
+0:121              Constant:
+0:121                0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:121          'ballot' ( temp highp 4-component vector of uint)
+0:122      move second child to first child ( temp highp 3-component vector of uint)
+0:122        vector swizzle ( temp highp 3-component vector of uint)
+0:122          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:122            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:122              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:122              Constant:
+0:122                2 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:122          Sequence
+0:122            Constant:
+0:122              0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:122        subgroupPartitionedOrNV ( global highp 3-component vector of uint)
+0:122          vector swizzle ( temp highp 3-component vector of uint)
+0:122            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:122              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:122                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:122                Constant:
+0:122                  2 (const int)
+0:122              Constant:
+0:122                2 (const int)
+0:122            Sequence
+0:122              Constant:
+0:122                0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122              Constant:
+0:122                2 (const int)
+0:122          'ballot' ( temp highp 4-component vector of uint)
+0:123      move second child to first child ( temp highp 4-component vector of uint)
+0:123        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:123          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123            Constant:
+0:123              2 (const int)
+0:123          Constant:
+0:123            2 (const int)
+0:123        subgroupPartitionedOrNV ( global highp 4-component vector of uint)
+0:123          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:123            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123              Constant:
+0:123                3 (const int)
+0:123            Constant:
+0:123              2 (const int)
+0:123          'ballot' ( temp highp 4-component vector of uint)
+0:125      move second child to first child ( temp highp int)
+0:125        direct index ( temp highp int)
+0:125          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:125            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125              Constant:
+0:125                2 (const int)
+0:125            Constant:
+0:125              1 (const int)
+0:125          Constant:
+0:125            0 (const int)
+0:125        Convert bool to int ( temp highp int)
+0:125          subgroupPartitionedOrNV ( global bool, operation at highp)
+0:125            Compare Less Than ( temp bool)
+0:125              direct index ( temp highp int)
+0:125                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:125                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125                    Constant:
+0:125                      0 (const int)
+0:125                  Constant:
+0:125                    1 (const int)
+0:125                Constant:
+0:125                  0 (const int)
+0:125              Constant:
+0:125                0 (const int)
+0:125            'ballot' ( temp highp 4-component vector of uint)
+0:126      move second child to first child ( temp highp 2-component vector of int)
+0:126        vector swizzle ( temp highp 2-component vector of int)
+0:126          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:126            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126              Constant:
+0:126                2 (const int)
+0:126            Constant:
+0:126              1 (const int)
+0:126          Sequence
+0:126            Constant:
+0:126              0 (const int)
+0:126            Constant:
+0:126              1 (const int)
+0:126        Convert bool to int ( temp highp 2-component vector of int)
+0:126          subgroupPartitionedOrNV ( global 2-component vector of bool, operation at highp)
+0:126            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:126              vector swizzle ( temp highp 2-component vector of int)
+0:126                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:126                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126                    Constant:
+0:126                      1 (const int)
+0:126                  Constant:
+0:126                    1 (const int)
+0:126                Sequence
+0:126                  Constant:
+0:126                    0 (const int)
+0:126                  Constant:
+0:126                    1 (const int)
+0:126              Constant:
+0:126                0 (const int)
+0:126                0 (const int)
+0:126            'ballot' ( temp highp 4-component vector of uint)
+0:127      move second child to first child ( temp highp 3-component vector of int)
+0:127        vector swizzle ( temp highp 3-component vector of int)
+0:127          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:127            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:127              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:127              Constant:
+0:127                2 (const int)
+0:127            Constant:
+0:127              1 (const int)
+0:127          Sequence
+0:127            Constant:
+0:127              0 (const int)
+0:127            Constant:
+0:127              1 (const int)
+0:127            Constant:
+0:127              2 (const int)
+0:127        Convert bool to int ( temp highp 3-component vector of int)
+0:127          subgroupPartitionedOrNV ( global 3-component vector of bool, operation at highp)
+0:127            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:127              vector swizzle ( temp highp 3-component vector of int)
+0:127                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:127                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:127                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:127                    Constant:
+0:127                      1 (const int)
+0:127                  Constant:
+0:127                    1 (const int)
+0:127                Sequence
+0:127                  Constant:
+0:127                    0 (const int)
+0:127                  Constant:
+0:127                    1 (const int)
+0:127                  Constant:
+0:127                    2 (const int)
+0:127              Constant:
+0:127                0 (const int)
+0:127                0 (const int)
+0:127                0 (const int)
+0:127            'ballot' ( temp highp 4-component vector of uint)
+0:128      move second child to first child ( temp highp 4-component vector of int)
+0:128        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:128          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128            Constant:
+0:128              2 (const int)
+0:128          Constant:
+0:128            1 (const int)
+0:128        Convert bool to int ( temp highp 4-component vector of int)
+0:128          subgroupPartitionedOrNV ( global 4-component vector of bool, operation at highp)
+0:128            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:128              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:128                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128                  Constant:
+0:128                    1 (const int)
+0:128                Constant:
+0:128                  1 (const int)
+0:128              Constant:
+0:128                0 (const int)
+0:128                0 (const int)
+0:128                0 (const int)
+0:128                0 (const int)
+0:128            'ballot' ( temp highp 4-component vector of uint)
+0:130      move second child to first child ( temp highp int)
+0:130        direct index ( temp highp int)
+0:130          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:130            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130              Constant:
+0:130                2 (const int)
+0:130            Constant:
+0:130              1 (const int)
+0:130          Constant:
+0:130            0 (const int)
+0:130        subgroupPartitionedXorNV ( global highp int)
+0:130          direct index ( temp highp int)
+0:130            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:130              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130                Constant:
+0:130                  0 (const int)
+0:130              Constant:
+0:130                1 (const int)
+0:130            Constant:
+0:130              0 (const int)
+0:130          'ballot' ( temp highp 4-component vector of uint)
+0:131      move second child to first child ( temp highp 2-component vector of int)
+0:131        vector swizzle ( temp highp 2-component vector of int)
+0:131          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:131            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131              Constant:
+0:131                2 (const int)
+0:131            Constant:
+0:131              1 (const int)
+0:131          Sequence
+0:131            Constant:
+0:131              0 (const int)
+0:131            Constant:
+0:131              1 (const int)
+0:131        subgroupPartitionedXorNV ( global highp 2-component vector of int)
+0:131          vector swizzle ( temp highp 2-component vector of int)
+0:131            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:131              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131                Constant:
+0:131                  1 (const int)
+0:131              Constant:
+0:131                1 (const int)
+0:131            Sequence
+0:131              Constant:
+0:131                0 (const int)
+0:131              Constant:
+0:131                1 (const int)
+0:131          'ballot' ( temp highp 4-component vector of uint)
+0:132      move second child to first child ( temp highp 3-component vector of int)
+0:132        vector swizzle ( temp highp 3-component vector of int)
+0:132          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:132            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:132              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:132              Constant:
+0:132                2 (const int)
+0:132            Constant:
+0:132              1 (const int)
+0:132          Sequence
+0:132            Constant:
+0:132              0 (const int)
+0:132            Constant:
+0:132              1 (const int)
+0:132            Constant:
+0:132              2 (const int)
+0:132        subgroupPartitionedXorNV ( global highp 3-component vector of int)
+0:132          vector swizzle ( temp highp 3-component vector of int)
+0:132            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:132              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:132                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:132                Constant:
+0:132                  2 (const int)
+0:132              Constant:
+0:132                1 (const int)
+0:132            Sequence
+0:132              Constant:
+0:132                0 (const int)
+0:132              Constant:
+0:132                1 (const int)
+0:132              Constant:
+0:132                2 (const int)
+0:132          'ballot' ( temp highp 4-component vector of uint)
+0:133      move second child to first child ( temp highp 4-component vector of int)
+0:133        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:133          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133            Constant:
+0:133              2 (const int)
+0:133          Constant:
+0:133            1 (const int)
+0:133        subgroupPartitionedXorNV ( global highp 4-component vector of int)
+0:133          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:133            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133              Constant:
+0:133                3 (const int)
+0:133            Constant:
+0:133              1 (const int)
+0:133          'ballot' ( temp highp 4-component vector of uint)
+0:135      move second child to first child ( temp highp uint)
+0:135        direct index ( temp highp uint)
+0:135          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:135            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135              Constant:
+0:135                2 (const int)
+0:135            Constant:
+0:135              2 (const int)
+0:135          Constant:
+0:135            0 (const int)
+0:135        subgroupPartitionedXorNV ( global highp uint)
+0:135          direct index ( temp highp uint)
+0:135            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:135              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135                Constant:
+0:135                  0 (const int)
+0:135              Constant:
+0:135                2 (const int)
+0:135            Constant:
+0:135              0 (const int)
+0:135          'ballot' ( temp highp 4-component vector of uint)
+0:136      move second child to first child ( temp highp 2-component vector of uint)
+0:136        vector swizzle ( temp highp 2-component vector of uint)
+0:136          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:136            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136              Constant:
+0:136                2 (const int)
+0:136            Constant:
+0:136              2 (const int)
+0:136          Sequence
+0:136            Constant:
+0:136              0 (const int)
+0:136            Constant:
+0:136              1 (const int)
+0:136        subgroupPartitionedXorNV ( global highp 2-component vector of uint)
+0:136          vector swizzle ( temp highp 2-component vector of uint)
+0:136            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:136              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136                Constant:
+0:136                  1 (const int)
+0:136              Constant:
+0:136                2 (const int)
+0:136            Sequence
+0:136              Constant:
+0:136                0 (const int)
+0:136              Constant:
+0:136                1 (const int)
+0:136          'ballot' ( temp highp 4-component vector of uint)
+0:137      move second child to first child ( temp highp 3-component vector of uint)
+0:137        vector swizzle ( temp highp 3-component vector of uint)
+0:137          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:137            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:137              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:137              Constant:
+0:137                2 (const int)
+0:137            Constant:
+0:137              2 (const int)
+0:137          Sequence
+0:137            Constant:
+0:137              0 (const int)
+0:137            Constant:
+0:137              1 (const int)
+0:137            Constant:
+0:137              2 (const int)
+0:137        subgroupPartitionedXorNV ( global highp 3-component vector of uint)
+0:137          vector swizzle ( temp highp 3-component vector of uint)
+0:137            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:137              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:137                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:137                Constant:
+0:137                  2 (const int)
+0:137              Constant:
+0:137                2 (const int)
+0:137            Sequence
+0:137              Constant:
+0:137                0 (const int)
+0:137              Constant:
+0:137                1 (const int)
+0:137              Constant:
+0:137                2 (const int)
+0:137          'ballot' ( temp highp 4-component vector of uint)
+0:138      move second child to first child ( temp highp 4-component vector of uint)
+0:138        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:138          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138            Constant:
+0:138              2 (const int)
+0:138          Constant:
+0:138            2 (const int)
+0:138        subgroupPartitionedXorNV ( global highp 4-component vector of uint)
+0:138          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:138            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138              Constant:
+0:138                3 (const int)
+0:138            Constant:
+0:138              2 (const int)
+0:138          'ballot' ( temp highp 4-component vector of uint)
+0:140      move second child to first child ( temp highp int)
+0:140        direct index ( temp highp int)
+0:140          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:140            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140              Constant:
+0:140                3 (const int)
+0:140            Constant:
+0:140              1 (const int)
+0:140          Constant:
+0:140            0 (const int)
+0:140        Convert bool to int ( temp highp int)
+0:140          subgroupPartitionedXorNV ( global bool, operation at highp)
+0:140            Compare Less Than ( temp bool)
+0:140              direct index ( temp highp int)
+0:140                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:140                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140                    Constant:
+0:140                      0 (const int)
+0:140                  Constant:
+0:140                    1 (const int)
+0:140                Constant:
+0:140                  0 (const int)
+0:140              Constant:
+0:140                0 (const int)
+0:140            'ballot' ( temp highp 4-component vector of uint)
+0:141      move second child to first child ( temp highp 2-component vector of int)
+0:141        vector swizzle ( temp highp 2-component vector of int)
+0:141          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:141            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141              Constant:
+0:141                3 (const int)
+0:141            Constant:
+0:141              1 (const int)
+0:141          Sequence
+0:141            Constant:
+0:141              0 (const int)
+0:141            Constant:
+0:141              1 (const int)
+0:141        Convert bool to int ( temp highp 2-component vector of int)
+0:141          subgroupPartitionedXorNV ( global 2-component vector of bool, operation at highp)
+0:141            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:141              vector swizzle ( temp highp 2-component vector of int)
+0:141                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:141                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141                    Constant:
+0:141                      1 (const int)
+0:141                  Constant:
+0:141                    1 (const int)
+0:141                Sequence
+0:141                  Constant:
+0:141                    0 (const int)
+0:141                  Constant:
+0:141                    1 (const int)
+0:141              Constant:
+0:141                0 (const int)
+0:141                0 (const int)
+0:141            'ballot' ( temp highp 4-component vector of uint)
+0:142      move second child to first child ( temp highp 3-component vector of int)
+0:142        vector swizzle ( temp highp 3-component vector of int)
+0:142          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:142            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:142              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:142              Constant:
+0:142                3 (const int)
+0:142            Constant:
+0:142              1 (const int)
+0:142          Sequence
+0:142            Constant:
+0:142              0 (const int)
+0:142            Constant:
+0:142              1 (const int)
+0:142            Constant:
+0:142              2 (const int)
+0:142        Convert bool to int ( temp highp 3-component vector of int)
+0:142          subgroupPartitionedXorNV ( global 3-component vector of bool, operation at highp)
+0:142            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:142              vector swizzle ( temp highp 3-component vector of int)
+0:142                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:142                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:142                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:142                    Constant:
+0:142                      1 (const int)
+0:142                  Constant:
+0:142                    1 (const int)
+0:142                Sequence
+0:142                  Constant:
+0:142                    0 (const int)
+0:142                  Constant:
+0:142                    1 (const int)
+0:142                  Constant:
+0:142                    2 (const int)
+0:142              Constant:
+0:142                0 (const int)
+0:142                0 (const int)
+0:142                0 (const int)
+0:142            'ballot' ( temp highp 4-component vector of uint)
+0:143      move second child to first child ( temp highp 4-component vector of int)
+0:143        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:143          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143            Constant:
+0:143              3 (const int)
+0:143          Constant:
+0:143            1 (const int)
+0:143        Convert bool to int ( temp highp 4-component vector of int)
+0:143          subgroupPartitionedXorNV ( global 4-component vector of bool, operation at highp)
+0:143            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:143              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:143                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143                  Constant:
+0:143                    1 (const int)
+0:143                Constant:
+0:143                  1 (const int)
+0:143              Constant:
+0:143                0 (const int)
+0:143                0 (const int)
+0:143                0 (const int)
+0:143                0 (const int)
+0:143            'ballot' ( temp highp 4-component vector of uint)
+0:145      move second child to first child ( temp highp float)
+0:145        direct index ( temp highp float)
+0:145          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:145            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145              Constant:
+0:145                3 (const int)
+0:145            Constant:
+0:145              0 (const int)
+0:145          Constant:
+0:145            0 (const int)
+0:145        subgroupPartitionedInclusiveAddNV ( global highp float)
+0:145          direct index ( temp highp float)
+0:145            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:145              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145                Constant:
+0:145                  0 (const int)
+0:145              Constant:
+0:145                0 (const int)
+0:145            Constant:
+0:145              0 (const int)
+0:145          'ballot' ( temp highp 4-component vector of uint)
+0:146      move second child to first child ( temp highp 2-component vector of float)
+0:146        vector swizzle ( temp highp 2-component vector of float)
+0:146          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:146            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146              Constant:
+0:146                3 (const int)
+0:146            Constant:
+0:146              0 (const int)
+0:146          Sequence
+0:146            Constant:
+0:146              0 (const int)
+0:146            Constant:
+0:146              1 (const int)
+0:146        subgroupPartitionedInclusiveAddNV ( global highp 2-component vector of float)
+0:146          vector swizzle ( temp highp 2-component vector of float)
+0:146            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:146              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146                Constant:
+0:146                  1 (const int)
+0:146              Constant:
+0:146                0 (const int)
+0:146            Sequence
+0:146              Constant:
+0:146                0 (const int)
+0:146              Constant:
+0:146                1 (const int)
+0:146          'ballot' ( temp highp 4-component vector of uint)
+0:147      move second child to first child ( temp highp 3-component vector of float)
+0:147        vector swizzle ( temp highp 3-component vector of float)
+0:147          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:147            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:147              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:147              Constant:
+0:147                3 (const int)
+0:147            Constant:
+0:147              0 (const int)
+0:147          Sequence
+0:147            Constant:
+0:147              0 (const int)
+0:147            Constant:
+0:147              1 (const int)
+0:147            Constant:
+0:147              2 (const int)
+0:147        subgroupPartitionedInclusiveAddNV ( global highp 3-component vector of float)
+0:147          vector swizzle ( temp highp 3-component vector of float)
+0:147            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:147              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:147                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:147                Constant:
+0:147                  2 (const int)
+0:147              Constant:
+0:147                0 (const int)
+0:147            Sequence
+0:147              Constant:
+0:147                0 (const int)
+0:147              Constant:
+0:147                1 (const int)
+0:147              Constant:
+0:147                2 (const int)
+0:147          'ballot' ( temp highp 4-component vector of uint)
+0:148      move second child to first child ( temp highp 4-component vector of float)
+0:148        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:148          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148            Constant:
+0:148              3 (const int)
+0:148          Constant:
+0:148            0 (const int)
+0:148        subgroupPartitionedInclusiveAddNV ( global highp 4-component vector of float)
+0:148          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:148            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148              Constant:
+0:148                3 (const int)
+0:148            Constant:
+0:148              0 (const int)
+0:148          'ballot' ( temp highp 4-component vector of uint)
+0:150      move second child to first child ( temp highp int)
+0:150        direct index ( temp highp int)
+0:150          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:150            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150              Constant:
+0:150                3 (const int)
+0:150            Constant:
+0:150              1 (const int)
+0:150          Constant:
+0:150            0 (const int)
+0:150        subgroupPartitionedInclusiveAddNV ( global highp int)
+0:150          direct index ( temp highp int)
+0:150            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:150              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150                Constant:
+0:150                  0 (const int)
+0:150              Constant:
+0:150                1 (const int)
+0:150            Constant:
+0:150              0 (const int)
+0:150          'ballot' ( temp highp 4-component vector of uint)
+0:151      move second child to first child ( temp highp 2-component vector of int)
+0:151        vector swizzle ( temp highp 2-component vector of int)
+0:151          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:151            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151              Constant:
+0:151                3 (const int)
+0:151            Constant:
+0:151              1 (const int)
+0:151          Sequence
+0:151            Constant:
+0:151              0 (const int)
+0:151            Constant:
+0:151              1 (const int)
+0:151        subgroupPartitionedInclusiveAddNV ( global highp 2-component vector of int)
+0:151          vector swizzle ( temp highp 2-component vector of int)
+0:151            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:151              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151                Constant:
+0:151                  1 (const int)
+0:151              Constant:
+0:151                1 (const int)
+0:151            Sequence
+0:151              Constant:
+0:151                0 (const int)
+0:151              Constant:
+0:151                1 (const int)
+0:151          'ballot' ( temp highp 4-component vector of uint)
+0:152      move second child to first child ( temp highp 3-component vector of int)
+0:152        vector swizzle ( temp highp 3-component vector of int)
+0:152          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:152            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:152              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:152              Constant:
+0:152                3 (const int)
+0:152            Constant:
+0:152              1 (const int)
+0:152          Sequence
+0:152            Constant:
+0:152              0 (const int)
+0:152            Constant:
+0:152              1 (const int)
+0:152            Constant:
+0:152              2 (const int)
+0:152        subgroupPartitionedInclusiveAddNV ( global highp 3-component vector of int)
+0:152          vector swizzle ( temp highp 3-component vector of int)
+0:152            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:152              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:152                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:152                Constant:
+0:152                  2 (const int)
+0:152              Constant:
+0:152                1 (const int)
+0:152            Sequence
+0:152              Constant:
+0:152                0 (const int)
+0:152              Constant:
+0:152                1 (const int)
+0:152              Constant:
+0:152                2 (const int)
+0:152          'ballot' ( temp highp 4-component vector of uint)
+0:153      move second child to first child ( temp highp 4-component vector of int)
+0:153        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:153          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153            Constant:
+0:153              3 (const int)
+0:153          Constant:
+0:153            1 (const int)
+0:153        subgroupPartitionedInclusiveAddNV ( global highp 4-component vector of int)
+0:153          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:153            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153              Constant:
+0:153                3 (const int)
+0:153            Constant:
+0:153              1 (const int)
+0:153          'ballot' ( temp highp 4-component vector of uint)
+0:155      move second child to first child ( temp highp uint)
+0:155        direct index ( temp highp uint)
+0:155          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:155            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155              Constant:
+0:155                3 (const int)
+0:155            Constant:
+0:155              2 (const int)
+0:155          Constant:
+0:155            0 (const int)
+0:155        subgroupPartitionedInclusiveAddNV ( global highp uint)
+0:155          direct index ( temp highp uint)
+0:155            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:155              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155                Constant:
+0:155                  0 (const int)
+0:155              Constant:
+0:155                2 (const int)
+0:155            Constant:
+0:155              0 (const int)
+0:155          'ballot' ( temp highp 4-component vector of uint)
+0:156      move second child to first child ( temp highp 2-component vector of uint)
+0:156        vector swizzle ( temp highp 2-component vector of uint)
+0:156          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:156            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156              Constant:
+0:156                3 (const int)
+0:156            Constant:
+0:156              2 (const int)
+0:156          Sequence
+0:156            Constant:
+0:156              0 (const int)
+0:156            Constant:
+0:156              1 (const int)
+0:156        subgroupPartitionedInclusiveAddNV ( global highp 2-component vector of uint)
+0:156          vector swizzle ( temp highp 2-component vector of uint)
+0:156            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:156              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156                Constant:
+0:156                  1 (const int)
+0:156              Constant:
+0:156                2 (const int)
+0:156            Sequence
+0:156              Constant:
+0:156                0 (const int)
+0:156              Constant:
+0:156                1 (const int)
+0:156          'ballot' ( temp highp 4-component vector of uint)
+0:157      move second child to first child ( temp highp 3-component vector of uint)
+0:157        vector swizzle ( temp highp 3-component vector of uint)
+0:157          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:157            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:157              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:157              Constant:
+0:157                3 (const int)
+0:157            Constant:
+0:157              2 (const int)
+0:157          Sequence
+0:157            Constant:
+0:157              0 (const int)
+0:157            Constant:
+0:157              1 (const int)
+0:157            Constant:
+0:157              2 (const int)
+0:157        subgroupPartitionedInclusiveAddNV ( global highp 3-component vector of uint)
+0:157          vector swizzle ( temp highp 3-component vector of uint)
+0:157            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:157              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:157                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:157                Constant:
+0:157                  2 (const int)
+0:157              Constant:
+0:157                2 (const int)
+0:157            Sequence
+0:157              Constant:
+0:157                0 (const int)
+0:157              Constant:
+0:157                1 (const int)
+0:157              Constant:
+0:157                2 (const int)
+0:157          'ballot' ( temp highp 4-component vector of uint)
+0:158      move second child to first child ( temp highp 4-component vector of uint)
+0:158        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:158          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158            Constant:
+0:158              3 (const int)
+0:158          Constant:
+0:158            2 (const int)
+0:158        subgroupPartitionedInclusiveAddNV ( global highp 4-component vector of uint)
+0:158          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:158            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158              Constant:
+0:158                3 (const int)
+0:158            Constant:
+0:158              2 (const int)
+0:158          'ballot' ( temp highp 4-component vector of uint)
+0:160      move second child to first child ( temp highp float)
+0:160        direct index ( temp highp float)
+0:160          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:160            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160              Constant:
+0:160                3 (const int)
+0:160            Constant:
+0:160              0 (const int)
+0:160          Constant:
+0:160            0 (const int)
+0:160        subgroupPartitionedInclusiveMulNV ( global highp float)
+0:160          direct index ( temp highp float)
+0:160            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:160              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160                Constant:
+0:160                  0 (const int)
+0:160              Constant:
+0:160                0 (const int)
+0:160            Constant:
+0:160              0 (const int)
+0:160          'ballot' ( temp highp 4-component vector of uint)
+0:161      move second child to first child ( temp highp 2-component vector of float)
+0:161        vector swizzle ( temp highp 2-component vector of float)
+0:161          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:161            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161              Constant:
+0:161                3 (const int)
+0:161            Constant:
+0:161              0 (const int)
+0:161          Sequence
+0:161            Constant:
+0:161              0 (const int)
+0:161            Constant:
+0:161              1 (const int)
+0:161        subgroupPartitionedInclusiveMulNV ( global highp 2-component vector of float)
+0:161          vector swizzle ( temp highp 2-component vector of float)
+0:161            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:161              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161                Constant:
+0:161                  1 (const int)
+0:161              Constant:
+0:161                0 (const int)
+0:161            Sequence
+0:161              Constant:
+0:161                0 (const int)
+0:161              Constant:
+0:161                1 (const int)
+0:161          'ballot' ( temp highp 4-component vector of uint)
+0:162      move second child to first child ( temp highp 3-component vector of float)
+0:162        vector swizzle ( temp highp 3-component vector of float)
+0:162          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:162            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:162              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:162              Constant:
+0:162                3 (const int)
+0:162            Constant:
+0:162              0 (const int)
+0:162          Sequence
+0:162            Constant:
+0:162              0 (const int)
+0:162            Constant:
+0:162              1 (const int)
+0:162            Constant:
+0:162              2 (const int)
+0:162        subgroupPartitionedInclusiveMulNV ( global highp 3-component vector of float)
+0:162          vector swizzle ( temp highp 3-component vector of float)
+0:162            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:162              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:162                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:162                Constant:
+0:162                  2 (const int)
+0:162              Constant:
+0:162                0 (const int)
+0:162            Sequence
+0:162              Constant:
+0:162                0 (const int)
+0:162              Constant:
+0:162                1 (const int)
+0:162              Constant:
+0:162                2 (const int)
+0:162          'ballot' ( temp highp 4-component vector of uint)
+0:163      move second child to first child ( temp highp 4-component vector of float)
+0:163        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:163          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163            Constant:
+0:163              3 (const int)
+0:163          Constant:
+0:163            0 (const int)
+0:163        subgroupPartitionedInclusiveMulNV ( global highp 4-component vector of float)
+0:163          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:163            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163              Constant:
+0:163                3 (const int)
+0:163            Constant:
+0:163              0 (const int)
+0:163          'ballot' ( temp highp 4-component vector of uint)
+0:165      move second child to first child ( temp highp int)
+0:165        direct index ( temp highp int)
+0:165          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:165            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165              Constant:
+0:165                3 (const int)
+0:165            Constant:
+0:165              1 (const int)
+0:165          Constant:
+0:165            0 (const int)
+0:165        subgroupPartitionedInclusiveMulNV ( global highp int)
+0:165          direct index ( temp highp int)
+0:165            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:165              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165                Constant:
+0:165                  0 (const int)
+0:165              Constant:
+0:165                1 (const int)
+0:165            Constant:
+0:165              0 (const int)
+0:165          'ballot' ( temp highp 4-component vector of uint)
+0:166      move second child to first child ( temp highp 2-component vector of int)
+0:166        vector swizzle ( temp highp 2-component vector of int)
+0:166          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:166            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166              Constant:
+0:166                3 (const int)
+0:166            Constant:
+0:166              1 (const int)
+0:166          Sequence
+0:166            Constant:
+0:166              0 (const int)
+0:166            Constant:
+0:166              1 (const int)
+0:166        subgroupPartitionedInclusiveMulNV ( global highp 2-component vector of int)
+0:166          vector swizzle ( temp highp 2-component vector of int)
+0:166            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:166              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166                Constant:
+0:166                  1 (const int)
+0:166              Constant:
+0:166                1 (const int)
+0:166            Sequence
+0:166              Constant:
+0:166                0 (const int)
+0:166              Constant:
+0:166                1 (const int)
+0:166          'ballot' ( temp highp 4-component vector of uint)
+0:167      move second child to first child ( temp highp 3-component vector of int)
+0:167        vector swizzle ( temp highp 3-component vector of int)
+0:167          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:167            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:167              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:167              Constant:
+0:167                3 (const int)
+0:167            Constant:
+0:167              1 (const int)
+0:167          Sequence
+0:167            Constant:
+0:167              0 (const int)
+0:167            Constant:
+0:167              1 (const int)
+0:167            Constant:
+0:167              2 (const int)
+0:167        subgroupPartitionedInclusiveMulNV ( global highp 3-component vector of int)
+0:167          vector swizzle ( temp highp 3-component vector of int)
+0:167            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:167              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:167                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:167                Constant:
+0:167                  2 (const int)
+0:167              Constant:
+0:167                1 (const int)
+0:167            Sequence
+0:167              Constant:
+0:167                0 (const int)
+0:167              Constant:
+0:167                1 (const int)
+0:167              Constant:
+0:167                2 (const int)
+0:167          'ballot' ( temp highp 4-component vector of uint)
+0:168      move second child to first child ( temp highp 4-component vector of int)
+0:168        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:168          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168            Constant:
+0:168              3 (const int)
+0:168          Constant:
+0:168            1 (const int)
+0:168        subgroupPartitionedInclusiveMulNV ( global highp 4-component vector of int)
+0:168          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:168            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168              Constant:
+0:168                3 (const int)
+0:168            Constant:
+0:168              1 (const int)
+0:168          'ballot' ( temp highp 4-component vector of uint)
+0:170      move second child to first child ( temp highp uint)
+0:170        direct index ( temp highp uint)
+0:170          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:170            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170              Constant:
+0:170                0 (const int)
+0:170            Constant:
+0:170              2 (const int)
+0:170          Constant:
+0:170            0 (const int)
+0:170        subgroupPartitionedInclusiveMulNV ( global highp uint)
+0:170          direct index ( temp highp uint)
+0:170            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:170              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170                Constant:
+0:170                  0 (const int)
+0:170              Constant:
+0:170                2 (const int)
+0:170            Constant:
+0:170              0 (const int)
+0:170          'ballot' ( temp highp 4-component vector of uint)
+0:171      move second child to first child ( temp highp 2-component vector of uint)
+0:171        vector swizzle ( temp highp 2-component vector of uint)
+0:171          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:171            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171              Constant:
+0:171                0 (const int)
+0:171            Constant:
+0:171              2 (const int)
+0:171          Sequence
+0:171            Constant:
+0:171              0 (const int)
+0:171            Constant:
+0:171              1 (const int)
+0:171        subgroupPartitionedInclusiveMulNV ( global highp 2-component vector of uint)
+0:171          vector swizzle ( temp highp 2-component vector of uint)
+0:171            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:171              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171                Constant:
+0:171                  1 (const int)
+0:171              Constant:
+0:171                2 (const int)
+0:171            Sequence
+0:171              Constant:
+0:171                0 (const int)
+0:171              Constant:
+0:171                1 (const int)
+0:171          'ballot' ( temp highp 4-component vector of uint)
+0:172      move second child to first child ( temp highp 3-component vector of uint)
+0:172        vector swizzle ( temp highp 3-component vector of uint)
+0:172          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:172            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:172              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:172              Constant:
+0:172                0 (const int)
+0:172            Constant:
+0:172              2 (const int)
+0:172          Sequence
+0:172            Constant:
+0:172              0 (const int)
+0:172            Constant:
+0:172              1 (const int)
+0:172            Constant:
+0:172              2 (const int)
+0:172        subgroupPartitionedInclusiveMulNV ( global highp 3-component vector of uint)
+0:172          vector swizzle ( temp highp 3-component vector of uint)
+0:172            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:172              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:172                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:172                Constant:
+0:172                  2 (const int)
+0:172              Constant:
+0:172                2 (const int)
+0:172            Sequence
+0:172              Constant:
+0:172                0 (const int)
+0:172              Constant:
+0:172                1 (const int)
+0:172              Constant:
+0:172                2 (const int)
+0:172          'ballot' ( temp highp 4-component vector of uint)
+0:173      move second child to first child ( temp highp 4-component vector of uint)
+0:173        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:173          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173            Constant:
+0:173              0 (const int)
+0:173          Constant:
+0:173            2 (const int)
+0:173        subgroupPartitionedInclusiveMulNV ( global highp 4-component vector of uint)
+0:173          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:173            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173              Constant:
+0:173                3 (const int)
+0:173            Constant:
+0:173              2 (const int)
+0:173          'ballot' ( temp highp 4-component vector of uint)
+0:175      move second child to first child ( temp highp float)
+0:175        direct index ( temp highp float)
+0:175          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:175            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175              Constant:
+0:175                0 (const int)
+0:175            Constant:
+0:175              0 (const int)
+0:175          Constant:
+0:175            0 (const int)
+0:175        subgroupPartitionedInclusiveMinNV ( global highp float)
+0:175          direct index ( temp highp float)
+0:175            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:175              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175                Constant:
+0:175                  0 (const int)
+0:175              Constant:
+0:175                0 (const int)
+0:175            Constant:
+0:175              0 (const int)
+0:175          'ballot' ( temp highp 4-component vector of uint)
+0:176      move second child to first child ( temp highp 2-component vector of float)
+0:176        vector swizzle ( temp highp 2-component vector of float)
+0:176          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:176            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176              Constant:
+0:176                0 (const int)
+0:176            Constant:
+0:176              0 (const int)
+0:176          Sequence
+0:176            Constant:
+0:176              0 (const int)
+0:176            Constant:
+0:176              1 (const int)
+0:176        subgroupPartitionedInclusiveMinNV ( global highp 2-component vector of float)
+0:176          vector swizzle ( temp highp 2-component vector of float)
+0:176            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:176              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176                Constant:
+0:176                  1 (const int)
+0:176              Constant:
+0:176                0 (const int)
+0:176            Sequence
+0:176              Constant:
+0:176                0 (const int)
+0:176              Constant:
+0:176                1 (const int)
+0:176          'ballot' ( temp highp 4-component vector of uint)
+0:177      move second child to first child ( temp highp 3-component vector of float)
+0:177        vector swizzle ( temp highp 3-component vector of float)
+0:177          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:177            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:177              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:177              Constant:
+0:177                0 (const int)
+0:177            Constant:
+0:177              0 (const int)
+0:177          Sequence
+0:177            Constant:
+0:177              0 (const int)
+0:177            Constant:
+0:177              1 (const int)
+0:177            Constant:
+0:177              2 (const int)
+0:177        subgroupPartitionedInclusiveMinNV ( global highp 3-component vector of float)
+0:177          vector swizzle ( temp highp 3-component vector of float)
+0:177            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:177              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:177                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:177                Constant:
+0:177                  2 (const int)
+0:177              Constant:
+0:177                0 (const int)
+0:177            Sequence
+0:177              Constant:
+0:177                0 (const int)
+0:177              Constant:
+0:177                1 (const int)
+0:177              Constant:
+0:177                2 (const int)
+0:177          'ballot' ( temp highp 4-component vector of uint)
+0:178      move second child to first child ( temp highp 4-component vector of float)
+0:178        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:178          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178            Constant:
+0:178              0 (const int)
+0:178          Constant:
+0:178            0 (const int)
+0:178        subgroupPartitionedInclusiveMinNV ( global highp 4-component vector of float)
+0:178          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:178            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178              Constant:
+0:178                3 (const int)
+0:178            Constant:
+0:178              0 (const int)
+0:178          'ballot' ( temp highp 4-component vector of uint)
+0:180      move second child to first child ( temp highp int)
+0:180        direct index ( temp highp int)
+0:180          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:180            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180              Constant:
+0:180                0 (const int)
+0:180            Constant:
+0:180              1 (const int)
+0:180          Constant:
+0:180            0 (const int)
+0:180        subgroupPartitionedInclusiveMinNV ( global highp int)
+0:180          direct index ( temp highp int)
+0:180            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:180              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180                Constant:
+0:180                  0 (const int)
+0:180              Constant:
+0:180                1 (const int)
+0:180            Constant:
+0:180              0 (const int)
+0:180          'ballot' ( temp highp 4-component vector of uint)
+0:181      move second child to first child ( temp highp 2-component vector of int)
+0:181        vector swizzle ( temp highp 2-component vector of int)
+0:181          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:181            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181              Constant:
+0:181                0 (const int)
+0:181            Constant:
+0:181              1 (const int)
+0:181          Sequence
+0:181            Constant:
+0:181              0 (const int)
+0:181            Constant:
+0:181              1 (const int)
+0:181        subgroupPartitionedInclusiveMinNV ( global highp 2-component vector of int)
+0:181          vector swizzle ( temp highp 2-component vector of int)
+0:181            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:181              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181                Constant:
+0:181                  1 (const int)
+0:181              Constant:
+0:181                1 (const int)
+0:181            Sequence
+0:181              Constant:
+0:181                0 (const int)
+0:181              Constant:
+0:181                1 (const int)
+0:181          'ballot' ( temp highp 4-component vector of uint)
+0:182      move second child to first child ( temp highp 3-component vector of int)
+0:182        vector swizzle ( temp highp 3-component vector of int)
+0:182          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:182            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:182              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:182              Constant:
+0:182                0 (const int)
+0:182            Constant:
+0:182              1 (const int)
+0:182          Sequence
+0:182            Constant:
+0:182              0 (const int)
+0:182            Constant:
+0:182              1 (const int)
+0:182            Constant:
+0:182              2 (const int)
+0:182        subgroupPartitionedInclusiveMinNV ( global highp 3-component vector of int)
+0:182          vector swizzle ( temp highp 3-component vector of int)
+0:182            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:182              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:182                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:182                Constant:
+0:182                  2 (const int)
+0:182              Constant:
+0:182                1 (const int)
+0:182            Sequence
+0:182              Constant:
+0:182                0 (const int)
+0:182              Constant:
+0:182                1 (const int)
+0:182              Constant:
+0:182                2 (const int)
+0:182          'ballot' ( temp highp 4-component vector of uint)
+0:183      move second child to first child ( temp highp 4-component vector of int)
+0:183        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:183          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183            Constant:
+0:183              0 (const int)
+0:183          Constant:
+0:183            1 (const int)
+0:183        subgroupPartitionedInclusiveMinNV ( global highp 4-component vector of int)
+0:183          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:183            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183              Constant:
+0:183                3 (const int)
+0:183            Constant:
+0:183              1 (const int)
+0:183          'ballot' ( temp highp 4-component vector of uint)
+0:185      move second child to first child ( temp highp uint)
+0:185        direct index ( temp highp uint)
+0:185          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:185            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185              Constant:
+0:185                0 (const int)
+0:185            Constant:
+0:185              2 (const int)
+0:185          Constant:
+0:185            0 (const int)
+0:185        subgroupPartitionedInclusiveMinNV ( global highp uint)
+0:185          direct index ( temp highp uint)
+0:185            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:185              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185                Constant:
+0:185                  0 (const int)
+0:185              Constant:
+0:185                2 (const int)
+0:185            Constant:
+0:185              0 (const int)
+0:185          'ballot' ( temp highp 4-component vector of uint)
+0:186      move second child to first child ( temp highp 2-component vector of uint)
+0:186        vector swizzle ( temp highp 2-component vector of uint)
+0:186          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:186            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186              Constant:
+0:186                0 (const int)
+0:186            Constant:
+0:186              2 (const int)
+0:186          Sequence
+0:186            Constant:
+0:186              0 (const int)
+0:186            Constant:
+0:186              1 (const int)
+0:186        subgroupPartitionedInclusiveMinNV ( global highp 2-component vector of uint)
+0:186          vector swizzle ( temp highp 2-component vector of uint)
+0:186            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:186              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186                Constant:
+0:186                  1 (const int)
+0:186              Constant:
+0:186                2 (const int)
+0:186            Sequence
+0:186              Constant:
+0:186                0 (const int)
+0:186              Constant:
+0:186                1 (const int)
+0:186          'ballot' ( temp highp 4-component vector of uint)
+0:187      move second child to first child ( temp highp 3-component vector of uint)
+0:187        vector swizzle ( temp highp 3-component vector of uint)
+0:187          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:187            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:187              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:187              Constant:
+0:187                0 (const int)
+0:187            Constant:
+0:187              2 (const int)
+0:187          Sequence
+0:187            Constant:
+0:187              0 (const int)
+0:187            Constant:
+0:187              1 (const int)
+0:187            Constant:
+0:187              2 (const int)
+0:187        subgroupPartitionedInclusiveMinNV ( global highp 3-component vector of uint)
+0:187          vector swizzle ( temp highp 3-component vector of uint)
+0:187            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:187              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:187                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:187                Constant:
+0:187                  2 (const int)
+0:187              Constant:
+0:187                2 (const int)
+0:187            Sequence
+0:187              Constant:
+0:187                0 (const int)
+0:187              Constant:
+0:187                1 (const int)
+0:187              Constant:
+0:187                2 (const int)
+0:187          'ballot' ( temp highp 4-component vector of uint)
+0:188      move second child to first child ( temp highp 4-component vector of uint)
+0:188        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:188          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188            Constant:
+0:188              0 (const int)
+0:188          Constant:
+0:188            2 (const int)
+0:188        subgroupPartitionedInclusiveMinNV ( global highp 4-component vector of uint)
+0:188          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:188            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188              Constant:
+0:188                3 (const int)
+0:188            Constant:
+0:188              2 (const int)
+0:188          'ballot' ( temp highp 4-component vector of uint)
+0:190      move second child to first child ( temp highp float)
+0:190        direct index ( temp highp float)
+0:190          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:190            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190              Constant:
+0:190                1 (const int)
+0:190            Constant:
+0:190              0 (const int)
+0:190          Constant:
+0:190            0 (const int)
+0:190        subgroupPartitionedInclusiveMaxNV ( global highp float)
+0:190          direct index ( temp highp float)
+0:190            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:190              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190                Constant:
+0:190                  0 (const int)
+0:190              Constant:
+0:190                0 (const int)
+0:190            Constant:
+0:190              0 (const int)
+0:190          'ballot' ( temp highp 4-component vector of uint)
+0:191      move second child to first child ( temp highp 2-component vector of float)
+0:191        vector swizzle ( temp highp 2-component vector of float)
+0:191          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:191            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191              Constant:
+0:191                1 (const int)
+0:191            Constant:
+0:191              0 (const int)
+0:191          Sequence
+0:191            Constant:
+0:191              0 (const int)
+0:191            Constant:
+0:191              1 (const int)
+0:191        subgroupPartitionedInclusiveMaxNV ( global highp 2-component vector of float)
+0:191          vector swizzle ( temp highp 2-component vector of float)
+0:191            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:191              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191                Constant:
+0:191                  1 (const int)
+0:191              Constant:
+0:191                0 (const int)
+0:191            Sequence
+0:191              Constant:
+0:191                0 (const int)
+0:191              Constant:
+0:191                1 (const int)
+0:191          'ballot' ( temp highp 4-component vector of uint)
+0:192      move second child to first child ( temp highp 3-component vector of float)
+0:192        vector swizzle ( temp highp 3-component vector of float)
+0:192          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:192            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:192              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:192              Constant:
+0:192                1 (const int)
+0:192            Constant:
+0:192              0 (const int)
+0:192          Sequence
+0:192            Constant:
+0:192              0 (const int)
+0:192            Constant:
+0:192              1 (const int)
+0:192            Constant:
+0:192              2 (const int)
+0:192        subgroupPartitionedInclusiveMaxNV ( global highp 3-component vector of float)
+0:192          vector swizzle ( temp highp 3-component vector of float)
+0:192            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:192              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:192                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:192                Constant:
+0:192                  2 (const int)
+0:192              Constant:
+0:192                0 (const int)
+0:192            Sequence
+0:192              Constant:
+0:192                0 (const int)
+0:192              Constant:
+0:192                1 (const int)
+0:192              Constant:
+0:192                2 (const int)
+0:192          'ballot' ( temp highp 4-component vector of uint)
+0:193      move second child to first child ( temp highp 4-component vector of float)
+0:193        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:193          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193            Constant:
+0:193              1 (const int)
+0:193          Constant:
+0:193            0 (const int)
+0:193        subgroupPartitionedInclusiveMaxNV ( global highp 4-component vector of float)
+0:193          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:193            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193              Constant:
+0:193                3 (const int)
+0:193            Constant:
+0:193              0 (const int)
+0:193          'ballot' ( temp highp 4-component vector of uint)
+0:195      move second child to first child ( temp highp int)
+0:195        direct index ( temp highp int)
+0:195          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:195            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195              Constant:
+0:195                1 (const int)
+0:195            Constant:
+0:195              1 (const int)
+0:195          Constant:
+0:195            0 (const int)
+0:195        subgroupPartitionedInclusiveMaxNV ( global highp int)
+0:195          direct index ( temp highp int)
+0:195            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:195              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195                Constant:
+0:195                  0 (const int)
+0:195              Constant:
+0:195                1 (const int)
+0:195            Constant:
+0:195              0 (const int)
+0:195          'ballot' ( temp highp 4-component vector of uint)
+0:196      move second child to first child ( temp highp 2-component vector of int)
+0:196        vector swizzle ( temp highp 2-component vector of int)
+0:196          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:196            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196              Constant:
+0:196                1 (const int)
+0:196            Constant:
+0:196              1 (const int)
+0:196          Sequence
+0:196            Constant:
+0:196              0 (const int)
+0:196            Constant:
+0:196              1 (const int)
+0:196        subgroupPartitionedInclusiveMaxNV ( global highp 2-component vector of int)
+0:196          vector swizzle ( temp highp 2-component vector of int)
+0:196            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:196              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196                Constant:
+0:196                  1 (const int)
+0:196              Constant:
+0:196                1 (const int)
+0:196            Sequence
+0:196              Constant:
+0:196                0 (const int)
+0:196              Constant:
+0:196                1 (const int)
+0:196          'ballot' ( temp highp 4-component vector of uint)
+0:197      move second child to first child ( temp highp 3-component vector of int)
+0:197        vector swizzle ( temp highp 3-component vector of int)
+0:197          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:197            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:197              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:197              Constant:
+0:197                1 (const int)
+0:197            Constant:
+0:197              1 (const int)
+0:197          Sequence
+0:197            Constant:
+0:197              0 (const int)
+0:197            Constant:
+0:197              1 (const int)
+0:197            Constant:
+0:197              2 (const int)
+0:197        subgroupPartitionedInclusiveMaxNV ( global highp 3-component vector of int)
+0:197          vector swizzle ( temp highp 3-component vector of int)
+0:197            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:197              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:197                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:197                Constant:
+0:197                  2 (const int)
+0:197              Constant:
+0:197                1 (const int)
+0:197            Sequence
+0:197              Constant:
+0:197                0 (const int)
+0:197              Constant:
+0:197                1 (const int)
+0:197              Constant:
+0:197                2 (const int)
+0:197          'ballot' ( temp highp 4-component vector of uint)
+0:198      move second child to first child ( temp highp 4-component vector of int)
+0:198        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:198          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198            Constant:
+0:198              1 (const int)
+0:198          Constant:
+0:198            1 (const int)
+0:198        subgroupPartitionedInclusiveMaxNV ( global highp 4-component vector of int)
+0:198          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:198            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198              Constant:
+0:198                3 (const int)
+0:198            Constant:
+0:198              1 (const int)
+0:198          'ballot' ( temp highp 4-component vector of uint)
+0:200      move second child to first child ( temp highp uint)
+0:200        direct index ( temp highp uint)
+0:200          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:200            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200              Constant:
+0:200                1 (const int)
+0:200            Constant:
+0:200              2 (const int)
+0:200          Constant:
+0:200            0 (const int)
+0:200        subgroupPartitionedInclusiveMaxNV ( global highp uint)
+0:200          direct index ( temp highp uint)
+0:200            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:200              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200                Constant:
+0:200                  0 (const int)
+0:200              Constant:
+0:200                2 (const int)
+0:200            Constant:
+0:200              0 (const int)
+0:200          'ballot' ( temp highp 4-component vector of uint)
+0:201      move second child to first child ( temp highp 2-component vector of uint)
+0:201        vector swizzle ( temp highp 2-component vector of uint)
+0:201          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:201            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201              Constant:
+0:201                1 (const int)
+0:201            Constant:
+0:201              2 (const int)
+0:201          Sequence
+0:201            Constant:
+0:201              0 (const int)
+0:201            Constant:
+0:201              1 (const int)
+0:201        subgroupPartitionedInclusiveMaxNV ( global highp 2-component vector of uint)
+0:201          vector swizzle ( temp highp 2-component vector of uint)
+0:201            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:201              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201                Constant:
+0:201                  1 (const int)
+0:201              Constant:
+0:201                2 (const int)
+0:201            Sequence
+0:201              Constant:
+0:201                0 (const int)
+0:201              Constant:
+0:201                1 (const int)
+0:201          'ballot' ( temp highp 4-component vector of uint)
+0:202      move second child to first child ( temp highp 3-component vector of uint)
+0:202        vector swizzle ( temp highp 3-component vector of uint)
+0:202          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:202            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:202              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:202              Constant:
+0:202                1 (const int)
+0:202            Constant:
+0:202              2 (const int)
+0:202          Sequence
+0:202            Constant:
+0:202              0 (const int)
+0:202            Constant:
+0:202              1 (const int)
+0:202            Constant:
+0:202              2 (const int)
+0:202        subgroupPartitionedInclusiveMaxNV ( global highp 3-component vector of uint)
+0:202          vector swizzle ( temp highp 3-component vector of uint)
+0:202            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:202              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:202                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:202                Constant:
+0:202                  2 (const int)
+0:202              Constant:
+0:202                2 (const int)
+0:202            Sequence
+0:202              Constant:
+0:202                0 (const int)
+0:202              Constant:
+0:202                1 (const int)
+0:202              Constant:
+0:202                2 (const int)
+0:202          'ballot' ( temp highp 4-component vector of uint)
+0:203      move second child to first child ( temp highp 4-component vector of uint)
+0:203        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:203          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203            Constant:
+0:203              1 (const int)
+0:203          Constant:
+0:203            2 (const int)
+0:203        subgroupPartitionedInclusiveMaxNV ( global highp 4-component vector of uint)
+0:203          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:203            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203              Constant:
+0:203                3 (const int)
+0:203            Constant:
+0:203              2 (const int)
+0:203          'ballot' ( temp highp 4-component vector of uint)
+0:205      move second child to first child ( temp highp int)
+0:205        direct index ( temp highp int)
+0:205          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:205            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205              Constant:
+0:205                1 (const int)
+0:205            Constant:
+0:205              1 (const int)
+0:205          Constant:
+0:205            0 (const int)
+0:205        subgroupPartitionedInclusiveAndNV ( global highp int)
+0:205          direct index ( temp highp int)
+0:205            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:205              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205                Constant:
+0:205                  0 (const int)
+0:205              Constant:
+0:205                1 (const int)
+0:205            Constant:
+0:205              0 (const int)
+0:205          'ballot' ( temp highp 4-component vector of uint)
+0:206      move second child to first child ( temp highp 2-component vector of int)
+0:206        vector swizzle ( temp highp 2-component vector of int)
+0:206          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:206            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206              Constant:
+0:206                1 (const int)
+0:206            Constant:
+0:206              1 (const int)
+0:206          Sequence
+0:206            Constant:
+0:206              0 (const int)
+0:206            Constant:
+0:206              1 (const int)
+0:206        subgroupPartitionedInclusiveAndNV ( global highp 2-component vector of int)
+0:206          vector swizzle ( temp highp 2-component vector of int)
+0:206            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:206              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206                Constant:
+0:206                  1 (const int)
+0:206              Constant:
+0:206                1 (const int)
+0:206            Sequence
+0:206              Constant:
+0:206                0 (const int)
+0:206              Constant:
+0:206                1 (const int)
+0:206          'ballot' ( temp highp 4-component vector of uint)
+0:207      move second child to first child ( temp highp 3-component vector of int)
+0:207        vector swizzle ( temp highp 3-component vector of int)
+0:207          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:207            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:207              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:207              Constant:
+0:207                1 (const int)
+0:207            Constant:
+0:207              1 (const int)
+0:207          Sequence
+0:207            Constant:
+0:207              0 (const int)
+0:207            Constant:
+0:207              1 (const int)
+0:207            Constant:
+0:207              2 (const int)
+0:207        subgroupPartitionedInclusiveAndNV ( global highp 3-component vector of int)
+0:207          vector swizzle ( temp highp 3-component vector of int)
+0:207            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:207              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:207                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:207                Constant:
+0:207                  2 (const int)
+0:207              Constant:
+0:207                1 (const int)
+0:207            Sequence
+0:207              Constant:
+0:207                0 (const int)
+0:207              Constant:
+0:207                1 (const int)
+0:207              Constant:
+0:207                2 (const int)
+0:207          'ballot' ( temp highp 4-component vector of uint)
+0:208      move second child to first child ( temp highp 4-component vector of int)
+0:208        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:208          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208            Constant:
+0:208              1 (const int)
+0:208          Constant:
+0:208            1 (const int)
+0:208        subgroupPartitionedInclusiveAndNV ( global highp 4-component vector of int)
+0:208          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:208            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208              Constant:
+0:208                3 (const int)
+0:208            Constant:
+0:208              1 (const int)
+0:208          'ballot' ( temp highp 4-component vector of uint)
+0:210      move second child to first child ( temp highp uint)
+0:210        direct index ( temp highp uint)
+0:210          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:210            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210              Constant:
+0:210                2 (const int)
+0:210            Constant:
+0:210              2 (const int)
+0:210          Constant:
+0:210            0 (const int)
+0:210        subgroupPartitionedInclusiveAndNV ( global highp uint)
+0:210          direct index ( temp highp uint)
+0:210            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:210              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210                Constant:
+0:210                  0 (const int)
+0:210              Constant:
+0:210                2 (const int)
+0:210            Constant:
+0:210              0 (const int)
+0:210          'ballot' ( temp highp 4-component vector of uint)
+0:211      move second child to first child ( temp highp 2-component vector of uint)
+0:211        vector swizzle ( temp highp 2-component vector of uint)
+0:211          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:211            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211              Constant:
+0:211                2 (const int)
+0:211            Constant:
+0:211              2 (const int)
+0:211          Sequence
+0:211            Constant:
+0:211              0 (const int)
+0:211            Constant:
+0:211              1 (const int)
+0:211        subgroupPartitionedInclusiveAndNV ( global highp 2-component vector of uint)
+0:211          vector swizzle ( temp highp 2-component vector of uint)
+0:211            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:211              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211                Constant:
+0:211                  1 (const int)
+0:211              Constant:
+0:211                2 (const int)
+0:211            Sequence
+0:211              Constant:
+0:211                0 (const int)
+0:211              Constant:
+0:211                1 (const int)
+0:211          'ballot' ( temp highp 4-component vector of uint)
+0:212      move second child to first child ( temp highp 3-component vector of uint)
+0:212        vector swizzle ( temp highp 3-component vector of uint)
+0:212          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:212            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:212              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:212              Constant:
+0:212                2 (const int)
+0:212            Constant:
+0:212              2 (const int)
+0:212          Sequence
+0:212            Constant:
+0:212              0 (const int)
+0:212            Constant:
+0:212              1 (const int)
+0:212            Constant:
+0:212              2 (const int)
+0:212        subgroupPartitionedInclusiveAndNV ( global highp 3-component vector of uint)
+0:212          vector swizzle ( temp highp 3-component vector of uint)
+0:212            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:212              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:212                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:212                Constant:
+0:212                  2 (const int)
+0:212              Constant:
+0:212                2 (const int)
+0:212            Sequence
+0:212              Constant:
+0:212                0 (const int)
+0:212              Constant:
+0:212                1 (const int)
+0:212              Constant:
+0:212                2 (const int)
+0:212          'ballot' ( temp highp 4-component vector of uint)
+0:213      move second child to first child ( temp highp 4-component vector of uint)
+0:213        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:213          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213            Constant:
+0:213              2 (const int)
+0:213          Constant:
+0:213            2 (const int)
+0:213        subgroupPartitionedInclusiveAndNV ( global highp 4-component vector of uint)
+0:213          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:213            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213              Constant:
+0:213                3 (const int)
+0:213            Constant:
+0:213              2 (const int)
+0:213          'ballot' ( temp highp 4-component vector of uint)
+0:215      move second child to first child ( temp highp int)
+0:215        direct index ( temp highp int)
+0:215          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:215            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215              Constant:
+0:215                2 (const int)
+0:215            Constant:
+0:215              1 (const int)
+0:215          Constant:
+0:215            0 (const int)
+0:215        Convert bool to int ( temp highp int)
+0:215          subgroupPartitionedInclusiveAndNV ( global bool, operation at highp)
+0:215            Compare Less Than ( temp bool)
+0:215              direct index ( temp highp int)
+0:215                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:215                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215                    Constant:
+0:215                      0 (const int)
+0:215                  Constant:
+0:215                    1 (const int)
+0:215                Constant:
+0:215                  0 (const int)
+0:215              Constant:
+0:215                0 (const int)
+0:215            'ballot' ( temp highp 4-component vector of uint)
+0:216      move second child to first child ( temp highp 2-component vector of int)
+0:216        vector swizzle ( temp highp 2-component vector of int)
+0:216          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:216            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216              Constant:
+0:216                2 (const int)
+0:216            Constant:
+0:216              1 (const int)
+0:216          Sequence
+0:216            Constant:
+0:216              0 (const int)
+0:216            Constant:
+0:216              1 (const int)
+0:216        Convert bool to int ( temp highp 2-component vector of int)
+0:216          subgroupPartitionedInclusiveAndNV ( global 2-component vector of bool, operation at highp)
+0:216            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:216              vector swizzle ( temp highp 2-component vector of int)
+0:216                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:216                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216                    Constant:
+0:216                      1 (const int)
+0:216                  Constant:
+0:216                    1 (const int)
+0:216                Sequence
+0:216                  Constant:
+0:216                    0 (const int)
+0:216                  Constant:
+0:216                    1 (const int)
+0:216              Constant:
+0:216                0 (const int)
+0:216                0 (const int)
+0:216            'ballot' ( temp highp 4-component vector of uint)
+0:217      move second child to first child ( temp highp 3-component vector of int)
+0:217        vector swizzle ( temp highp 3-component vector of int)
+0:217          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:217            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:217              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:217              Constant:
+0:217                2 (const int)
+0:217            Constant:
+0:217              1 (const int)
+0:217          Sequence
+0:217            Constant:
+0:217              0 (const int)
+0:217            Constant:
+0:217              1 (const int)
+0:217            Constant:
+0:217              2 (const int)
+0:217        Convert bool to int ( temp highp 3-component vector of int)
+0:217          subgroupPartitionedInclusiveAndNV ( global 3-component vector of bool, operation at highp)
+0:217            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:217              vector swizzle ( temp highp 3-component vector of int)
+0:217                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:217                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:217                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:217                    Constant:
+0:217                      1 (const int)
+0:217                  Constant:
+0:217                    1 (const int)
+0:217                Sequence
+0:217                  Constant:
+0:217                    0 (const int)
+0:217                  Constant:
+0:217                    1 (const int)
+0:217                  Constant:
+0:217                    2 (const int)
+0:217              Constant:
+0:217                0 (const int)
+0:217                0 (const int)
+0:217                0 (const int)
+0:217            'ballot' ( temp highp 4-component vector of uint)
+0:218      move second child to first child ( temp highp 4-component vector of int)
+0:218        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:218          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218            Constant:
+0:218              2 (const int)
+0:218          Constant:
+0:218            1 (const int)
+0:218        Convert bool to int ( temp highp 4-component vector of int)
+0:218          subgroupPartitionedInclusiveAndNV ( global 4-component vector of bool, operation at highp)
+0:218            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:218              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:218                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218                  Constant:
+0:218                    1 (const int)
+0:218                Constant:
+0:218                  1 (const int)
+0:218              Constant:
+0:218                0 (const int)
+0:218                0 (const int)
+0:218                0 (const int)
+0:218                0 (const int)
+0:218            'ballot' ( temp highp 4-component vector of uint)
+0:220      move second child to first child ( temp highp int)
+0:220        direct index ( temp highp int)
+0:220          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:220            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220              Constant:
+0:220                2 (const int)
+0:220            Constant:
+0:220              1 (const int)
+0:220          Constant:
+0:220            0 (const int)
+0:220        subgroupPartitionedInclusiveOrNV ( global highp int)
+0:220          direct index ( temp highp int)
+0:220            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:220              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220                Constant:
+0:220                  0 (const int)
+0:220              Constant:
+0:220                1 (const int)
+0:220            Constant:
+0:220              0 (const int)
+0:220          'ballot' ( temp highp 4-component vector of uint)
+0:221      move second child to first child ( temp highp 2-component vector of int)
+0:221        vector swizzle ( temp highp 2-component vector of int)
+0:221          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:221            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221              Constant:
+0:221                2 (const int)
+0:221            Constant:
+0:221              1 (const int)
+0:221          Sequence
+0:221            Constant:
+0:221              0 (const int)
+0:221            Constant:
+0:221              1 (const int)
+0:221        subgroupPartitionedInclusiveOrNV ( global highp 2-component vector of int)
+0:221          vector swizzle ( temp highp 2-component vector of int)
+0:221            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:221              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221                Constant:
+0:221                  1 (const int)
+0:221              Constant:
+0:221                1 (const int)
+0:221            Sequence
+0:221              Constant:
+0:221                0 (const int)
+0:221              Constant:
+0:221                1 (const int)
+0:221          'ballot' ( temp highp 4-component vector of uint)
+0:222      move second child to first child ( temp highp 3-component vector of int)
+0:222        vector swizzle ( temp highp 3-component vector of int)
+0:222          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:222            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:222              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:222              Constant:
+0:222                2 (const int)
+0:222            Constant:
+0:222              1 (const int)
+0:222          Sequence
+0:222            Constant:
+0:222              0 (const int)
+0:222            Constant:
+0:222              1 (const int)
+0:222            Constant:
+0:222              2 (const int)
+0:222        subgroupPartitionedInclusiveOrNV ( global highp 3-component vector of int)
+0:222          vector swizzle ( temp highp 3-component vector of int)
+0:222            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:222              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:222                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:222                Constant:
+0:222                  2 (const int)
+0:222              Constant:
+0:222                1 (const int)
+0:222            Sequence
+0:222              Constant:
+0:222                0 (const int)
+0:222              Constant:
+0:222                1 (const int)
+0:222              Constant:
+0:222                2 (const int)
+0:222          'ballot' ( temp highp 4-component vector of uint)
+0:223      move second child to first child ( temp highp 4-component vector of int)
+0:223        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:223          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223            Constant:
+0:223              2 (const int)
+0:223          Constant:
+0:223            1 (const int)
+0:223        subgroupPartitionedInclusiveOrNV ( global highp 4-component vector of int)
+0:223          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:223            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223              Constant:
+0:223                3 (const int)
+0:223            Constant:
+0:223              1 (const int)
+0:223          'ballot' ( temp highp 4-component vector of uint)
+0:225      move second child to first child ( temp highp uint)
+0:225        direct index ( temp highp uint)
+0:225          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:225            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225              Constant:
+0:225                2 (const int)
+0:225            Constant:
+0:225              2 (const int)
+0:225          Constant:
+0:225            0 (const int)
+0:225        subgroupPartitionedInclusiveOrNV ( global highp uint)
+0:225          direct index ( temp highp uint)
+0:225            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:225              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225                Constant:
+0:225                  0 (const int)
+0:225              Constant:
+0:225                2 (const int)
+0:225            Constant:
+0:225              0 (const int)
+0:225          'ballot' ( temp highp 4-component vector of uint)
+0:226      move second child to first child ( temp highp 2-component vector of uint)
+0:226        vector swizzle ( temp highp 2-component vector of uint)
+0:226          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:226            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226              Constant:
+0:226                2 (const int)
+0:226            Constant:
+0:226              2 (const int)
+0:226          Sequence
+0:226            Constant:
+0:226              0 (const int)
+0:226            Constant:
+0:226              1 (const int)
+0:226        subgroupPartitionedInclusiveOrNV ( global highp 2-component vector of uint)
+0:226          vector swizzle ( temp highp 2-component vector of uint)
+0:226            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:226              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226                Constant:
+0:226                  1 (const int)
+0:226              Constant:
+0:226                2 (const int)
+0:226            Sequence
+0:226              Constant:
+0:226                0 (const int)
+0:226              Constant:
+0:226                1 (const int)
+0:226          'ballot' ( temp highp 4-component vector of uint)
+0:227      move second child to first child ( temp highp 3-component vector of uint)
+0:227        vector swizzle ( temp highp 3-component vector of uint)
+0:227          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:227            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:227              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:227              Constant:
+0:227                2 (const int)
+0:227            Constant:
+0:227              2 (const int)
+0:227          Sequence
+0:227            Constant:
+0:227              0 (const int)
+0:227            Constant:
+0:227              1 (const int)
+0:227            Constant:
+0:227              2 (const int)
+0:227        subgroupPartitionedInclusiveOrNV ( global highp 3-component vector of uint)
+0:227          vector swizzle ( temp highp 3-component vector of uint)
+0:227            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:227              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:227                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:227                Constant:
+0:227                  2 (const int)
+0:227              Constant:
+0:227                2 (const int)
+0:227            Sequence
+0:227              Constant:
+0:227                0 (const int)
+0:227              Constant:
+0:227                1 (const int)
+0:227              Constant:
+0:227                2 (const int)
+0:227          'ballot' ( temp highp 4-component vector of uint)
+0:228      move second child to first child ( temp highp 4-component vector of uint)
+0:228        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:228          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228            Constant:
+0:228              2 (const int)
+0:228          Constant:
+0:228            2 (const int)
+0:228        subgroupPartitionedInclusiveOrNV ( global highp 4-component vector of uint)
+0:228          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:228            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228              Constant:
+0:228                3 (const int)
+0:228            Constant:
+0:228              2 (const int)
+0:228          'ballot' ( temp highp 4-component vector of uint)
+0:230      move second child to first child ( temp highp int)
+0:230        direct index ( temp highp int)
+0:230          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:230            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230              Constant:
+0:230                3 (const int)
+0:230            Constant:
+0:230              1 (const int)
+0:230          Constant:
+0:230            0 (const int)
+0:230        Convert bool to int ( temp highp int)
+0:230          subgroupPartitionedInclusiveOrNV ( global bool, operation at highp)
+0:230            Compare Less Than ( temp bool)
+0:230              direct index ( temp highp int)
+0:230                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:230                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230                    Constant:
+0:230                      0 (const int)
+0:230                  Constant:
+0:230                    1 (const int)
+0:230                Constant:
+0:230                  0 (const int)
+0:230              Constant:
+0:230                0 (const int)
+0:230            'ballot' ( temp highp 4-component vector of uint)
+0:231      move second child to first child ( temp highp 2-component vector of int)
+0:231        vector swizzle ( temp highp 2-component vector of int)
+0:231          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:231            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231              Constant:
+0:231                3 (const int)
+0:231            Constant:
+0:231              1 (const int)
+0:231          Sequence
+0:231            Constant:
+0:231              0 (const int)
+0:231            Constant:
+0:231              1 (const int)
+0:231        Convert bool to int ( temp highp 2-component vector of int)
+0:231          subgroupPartitionedInclusiveOrNV ( global 2-component vector of bool, operation at highp)
+0:231            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:231              vector swizzle ( temp highp 2-component vector of int)
+0:231                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:231                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231                    Constant:
+0:231                      1 (const int)
+0:231                  Constant:
+0:231                    1 (const int)
+0:231                Sequence
+0:231                  Constant:
+0:231                    0 (const int)
+0:231                  Constant:
+0:231                    1 (const int)
+0:231              Constant:
+0:231                0 (const int)
+0:231                0 (const int)
+0:231            'ballot' ( temp highp 4-component vector of uint)
+0:232      move second child to first child ( temp highp 3-component vector of int)
+0:232        vector swizzle ( temp highp 3-component vector of int)
+0:232          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:232            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:232              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:232              Constant:
+0:232                3 (const int)
+0:232            Constant:
+0:232              1 (const int)
+0:232          Sequence
+0:232            Constant:
+0:232              0 (const int)
+0:232            Constant:
+0:232              1 (const int)
+0:232            Constant:
+0:232              2 (const int)
+0:232        Convert bool to int ( temp highp 3-component vector of int)
+0:232          subgroupPartitionedInclusiveOrNV ( global 3-component vector of bool, operation at highp)
+0:232            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:232              vector swizzle ( temp highp 3-component vector of int)
+0:232                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:232                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:232                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:232                    Constant:
+0:232                      1 (const int)
+0:232                  Constant:
+0:232                    1 (const int)
+0:232                Sequence
+0:232                  Constant:
+0:232                    0 (const int)
+0:232                  Constant:
+0:232                    1 (const int)
+0:232                  Constant:
+0:232                    2 (const int)
+0:232              Constant:
+0:232                0 (const int)
+0:232                0 (const int)
+0:232                0 (const int)
+0:232            'ballot' ( temp highp 4-component vector of uint)
+0:233      move second child to first child ( temp highp 4-component vector of int)
+0:233        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:233          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233            Constant:
+0:233              3 (const int)
+0:233          Constant:
+0:233            1 (const int)
+0:233        Convert bool to int ( temp highp 4-component vector of int)
+0:233          subgroupPartitionedInclusiveOrNV ( global 4-component vector of bool, operation at highp)
+0:233            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:233              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:233                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233                  Constant:
+0:233                    1 (const int)
+0:233                Constant:
+0:233                  1 (const int)
+0:233              Constant:
+0:233                0 (const int)
+0:233                0 (const int)
+0:233                0 (const int)
+0:233                0 (const int)
+0:233            'ballot' ( temp highp 4-component vector of uint)
+0:235      move second child to first child ( temp highp int)
+0:235        direct index ( temp highp int)
+0:235          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:235            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235              Constant:
+0:235                3 (const int)
+0:235            Constant:
+0:235              1 (const int)
+0:235          Constant:
+0:235            0 (const int)
+0:235        subgroupPartitionedInclusiveXorNV ( global highp int)
+0:235          direct index ( temp highp int)
+0:235            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:235              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235                Constant:
+0:235                  0 (const int)
+0:235              Constant:
+0:235                1 (const int)
+0:235            Constant:
+0:235              0 (const int)
+0:235          'ballot' ( temp highp 4-component vector of uint)
+0:236      move second child to first child ( temp highp 2-component vector of int)
+0:236        vector swizzle ( temp highp 2-component vector of int)
+0:236          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:236            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236              Constant:
+0:236                3 (const int)
+0:236            Constant:
+0:236              1 (const int)
+0:236          Sequence
+0:236            Constant:
+0:236              0 (const int)
+0:236            Constant:
+0:236              1 (const int)
+0:236        subgroupPartitionedInclusiveXorNV ( global highp 2-component vector of int)
+0:236          vector swizzle ( temp highp 2-component vector of int)
+0:236            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:236              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236                Constant:
+0:236                  1 (const int)
+0:236              Constant:
+0:236                1 (const int)
+0:236            Sequence
+0:236              Constant:
+0:236                0 (const int)
+0:236              Constant:
+0:236                1 (const int)
+0:236          'ballot' ( temp highp 4-component vector of uint)
+0:237      move second child to first child ( temp highp 3-component vector of int)
+0:237        vector swizzle ( temp highp 3-component vector of int)
+0:237          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:237            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:237              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:237              Constant:
+0:237                3 (const int)
+0:237            Constant:
+0:237              1 (const int)
+0:237          Sequence
+0:237            Constant:
+0:237              0 (const int)
+0:237            Constant:
+0:237              1 (const int)
+0:237            Constant:
+0:237              2 (const int)
+0:237        subgroupPartitionedInclusiveXorNV ( global highp 3-component vector of int)
+0:237          vector swizzle ( temp highp 3-component vector of int)
+0:237            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:237              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:237                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:237                Constant:
+0:237                  2 (const int)
+0:237              Constant:
+0:237                1 (const int)
+0:237            Sequence
+0:237              Constant:
+0:237                0 (const int)
+0:237              Constant:
+0:237                1 (const int)
+0:237              Constant:
+0:237                2 (const int)
+0:237          'ballot' ( temp highp 4-component vector of uint)
+0:238      move second child to first child ( temp highp 4-component vector of int)
+0:238        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:238          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238            Constant:
+0:238              3 (const int)
+0:238          Constant:
+0:238            1 (const int)
+0:238        subgroupPartitionedInclusiveXorNV ( global highp 4-component vector of int)
+0:238          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:238            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238              Constant:
+0:238                3 (const int)
+0:238            Constant:
+0:238              1 (const int)
+0:238          'ballot' ( temp highp 4-component vector of uint)
+0:240      move second child to first child ( temp highp uint)
+0:240        direct index ( temp highp uint)
+0:240          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:240            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240              Constant:
+0:240                3 (const int)
+0:240            Constant:
+0:240              2 (const int)
+0:240          Constant:
+0:240            0 (const int)
+0:240        subgroupPartitionedInclusiveXorNV ( global highp uint)
+0:240          direct index ( temp highp uint)
+0:240            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:240              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240                Constant:
+0:240                  0 (const int)
+0:240              Constant:
+0:240                2 (const int)
+0:240            Constant:
+0:240              0 (const int)
+0:240          'ballot' ( temp highp 4-component vector of uint)
+0:241      move second child to first child ( temp highp 2-component vector of uint)
+0:241        vector swizzle ( temp highp 2-component vector of uint)
+0:241          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:241            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241              Constant:
+0:241                3 (const int)
+0:241            Constant:
+0:241              2 (const int)
+0:241          Sequence
+0:241            Constant:
+0:241              0 (const int)
+0:241            Constant:
+0:241              1 (const int)
+0:241        subgroupPartitionedInclusiveXorNV ( global highp 2-component vector of uint)
+0:241          vector swizzle ( temp highp 2-component vector of uint)
+0:241            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:241              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241                Constant:
+0:241                  1 (const int)
+0:241              Constant:
+0:241                2 (const int)
+0:241            Sequence
+0:241              Constant:
+0:241                0 (const int)
+0:241              Constant:
+0:241                1 (const int)
+0:241          'ballot' ( temp highp 4-component vector of uint)
+0:242      move second child to first child ( temp highp 3-component vector of uint)
+0:242        vector swizzle ( temp highp 3-component vector of uint)
+0:242          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:242            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:242              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:242              Constant:
+0:242                3 (const int)
+0:242            Constant:
+0:242              2 (const int)
+0:242          Sequence
+0:242            Constant:
+0:242              0 (const int)
+0:242            Constant:
+0:242              1 (const int)
+0:242            Constant:
+0:242              2 (const int)
+0:242        subgroupPartitionedInclusiveXorNV ( global highp 3-component vector of uint)
+0:242          vector swizzle ( temp highp 3-component vector of uint)
+0:242            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:242              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:242                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:242                Constant:
+0:242                  2 (const int)
+0:242              Constant:
+0:242                2 (const int)
+0:242            Sequence
+0:242              Constant:
+0:242                0 (const int)
+0:242              Constant:
+0:242                1 (const int)
+0:242              Constant:
+0:242                2 (const int)
+0:242          'ballot' ( temp highp 4-component vector of uint)
+0:243      move second child to first child ( temp highp 4-component vector of uint)
+0:243        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:243          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243            Constant:
+0:243              3 (const int)
+0:243          Constant:
+0:243            2 (const int)
+0:243        subgroupPartitionedInclusiveXorNV ( global highp 4-component vector of uint)
+0:243          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:243            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243              Constant:
+0:243                3 (const int)
+0:243            Constant:
+0:243              2 (const int)
+0:243          'ballot' ( temp highp 4-component vector of uint)
+0:245      move second child to first child ( temp highp int)
+0:245        direct index ( temp highp int)
+0:245          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:245            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245              Constant:
+0:245                3 (const int)
+0:245            Constant:
+0:245              1 (const int)
+0:245          Constant:
+0:245            0 (const int)
+0:245        Convert bool to int ( temp highp int)
+0:245          subgroupPartitionedInclusiveXorNV ( global bool, operation at highp)
+0:245            Compare Less Than ( temp bool)
+0:245              direct index ( temp highp int)
+0:245                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:245                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245                    Constant:
+0:245                      0 (const int)
+0:245                  Constant:
+0:245                    1 (const int)
+0:245                Constant:
+0:245                  0 (const int)
+0:245              Constant:
+0:245                0 (const int)
+0:245            'ballot' ( temp highp 4-component vector of uint)
+0:246      move second child to first child ( temp highp 2-component vector of int)
+0:246        vector swizzle ( temp highp 2-component vector of int)
+0:246          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:246            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246              Constant:
+0:246                3 (const int)
+0:246            Constant:
+0:246              1 (const int)
+0:246          Sequence
+0:246            Constant:
+0:246              0 (const int)
+0:246            Constant:
+0:246              1 (const int)
+0:246        Convert bool to int ( temp highp 2-component vector of int)
+0:246          subgroupPartitionedInclusiveXorNV ( global 2-component vector of bool, operation at highp)
+0:246            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:246              vector swizzle ( temp highp 2-component vector of int)
+0:246                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:246                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246                    Constant:
+0:246                      1 (const int)
+0:246                  Constant:
+0:246                    1 (const int)
+0:246                Sequence
+0:246                  Constant:
+0:246                    0 (const int)
+0:246                  Constant:
+0:246                    1 (const int)
+0:246              Constant:
+0:246                0 (const int)
+0:246                0 (const int)
+0:246            'ballot' ( temp highp 4-component vector of uint)
+0:247      move second child to first child ( temp highp 3-component vector of int)
+0:247        vector swizzle ( temp highp 3-component vector of int)
+0:247          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:247            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:247              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:247              Constant:
+0:247                3 (const int)
+0:247            Constant:
+0:247              1 (const int)
+0:247          Sequence
+0:247            Constant:
+0:247              0 (const int)
+0:247            Constant:
+0:247              1 (const int)
+0:247            Constant:
+0:247              2 (const int)
+0:247        Convert bool to int ( temp highp 3-component vector of int)
+0:247          subgroupPartitionedInclusiveXorNV ( global 3-component vector of bool, operation at highp)
+0:247            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:247              vector swizzle ( temp highp 3-component vector of int)
+0:247                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:247                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:247                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:247                    Constant:
+0:247                      1 (const int)
+0:247                  Constant:
+0:247                    1 (const int)
+0:247                Sequence
+0:247                  Constant:
+0:247                    0 (const int)
+0:247                  Constant:
+0:247                    1 (const int)
+0:247                  Constant:
+0:247                    2 (const int)
+0:247              Constant:
+0:247                0 (const int)
+0:247                0 (const int)
+0:247                0 (const int)
+0:247            'ballot' ( temp highp 4-component vector of uint)
+0:248      move second child to first child ( temp highp 4-component vector of int)
+0:248        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:248          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248            Constant:
+0:248              3 (const int)
+0:248          Constant:
+0:248            1 (const int)
+0:248        Convert bool to int ( temp highp 4-component vector of int)
+0:248          subgroupPartitionedInclusiveXorNV ( global 4-component vector of bool, operation at highp)
+0:248            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:248              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:248                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248                  Constant:
+0:248                    1 (const int)
+0:248                Constant:
+0:248                  1 (const int)
+0:248              Constant:
+0:248                0 (const int)
+0:248                0 (const int)
+0:248                0 (const int)
+0:248                0 (const int)
+0:248            'ballot' ( temp highp 4-component vector of uint)
+0:250      move second child to first child ( temp highp float)
+0:250        direct index ( temp highp float)
+0:250          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:250            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250              Constant:
+0:250                0 (const int)
+0:250            Constant:
+0:250              0 (const int)
+0:250          Constant:
+0:250            0 (const int)
+0:250        subgroupPartitionedExclusiveAddNV ( global highp float)
+0:250          direct index ( temp highp float)
+0:250            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:250              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250                Constant:
+0:250                  0 (const int)
+0:250              Constant:
+0:250                0 (const int)
+0:250            Constant:
+0:250              0 (const int)
+0:250          'ballot' ( temp highp 4-component vector of uint)
+0:251      move second child to first child ( temp highp 2-component vector of float)
+0:251        vector swizzle ( temp highp 2-component vector of float)
+0:251          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:251            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251              Constant:
+0:251                0 (const int)
+0:251            Constant:
+0:251              0 (const int)
+0:251          Sequence
+0:251            Constant:
+0:251              0 (const int)
+0:251            Constant:
+0:251              1 (const int)
+0:251        subgroupPartitionedExclusiveAddNV ( global highp 2-component vector of float)
+0:251          vector swizzle ( temp highp 2-component vector of float)
+0:251            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:251              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251                Constant:
+0:251                  1 (const int)
+0:251              Constant:
+0:251                0 (const int)
+0:251            Sequence
+0:251              Constant:
+0:251                0 (const int)
+0:251              Constant:
+0:251                1 (const int)
+0:251          'ballot' ( temp highp 4-component vector of uint)
+0:252      move second child to first child ( temp highp 3-component vector of float)
+0:252        vector swizzle ( temp highp 3-component vector of float)
+0:252          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:252            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:252              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:252              Constant:
+0:252                0 (const int)
+0:252            Constant:
+0:252              0 (const int)
+0:252          Sequence
+0:252            Constant:
+0:252              0 (const int)
+0:252            Constant:
+0:252              1 (const int)
+0:252            Constant:
+0:252              2 (const int)
+0:252        subgroupPartitionedExclusiveAddNV ( global highp 3-component vector of float)
+0:252          vector swizzle ( temp highp 3-component vector of float)
+0:252            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:252              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:252                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:252                Constant:
+0:252                  2 (const int)
+0:252              Constant:
+0:252                0 (const int)
+0:252            Sequence
+0:252              Constant:
+0:252                0 (const int)
+0:252              Constant:
+0:252                1 (const int)
+0:252              Constant:
+0:252                2 (const int)
+0:252          'ballot' ( temp highp 4-component vector of uint)
+0:253      move second child to first child ( temp highp 4-component vector of float)
+0:253        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:253          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253            Constant:
+0:253              0 (const int)
+0:253          Constant:
+0:253            0 (const int)
+0:253        subgroupPartitionedExclusiveAddNV ( global highp 4-component vector of float)
+0:253          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:253            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253              Constant:
+0:253                3 (const int)
+0:253            Constant:
+0:253              0 (const int)
+0:253          'ballot' ( temp highp 4-component vector of uint)
+0:255      move second child to first child ( temp highp int)
+0:255        direct index ( temp highp int)
+0:255          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:255            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255              Constant:
+0:255                0 (const int)
+0:255            Constant:
+0:255              1 (const int)
+0:255          Constant:
+0:255            0 (const int)
+0:255        subgroupPartitionedExclusiveAddNV ( global highp int)
+0:255          direct index ( temp highp int)
+0:255            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:255              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255                Constant:
+0:255                  0 (const int)
+0:255              Constant:
+0:255                1 (const int)
+0:255            Constant:
+0:255              0 (const int)
+0:255          'ballot' ( temp highp 4-component vector of uint)
+0:256      move second child to first child ( temp highp 2-component vector of int)
+0:256        vector swizzle ( temp highp 2-component vector of int)
+0:256          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:256            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256              Constant:
+0:256                0 (const int)
+0:256            Constant:
+0:256              1 (const int)
+0:256          Sequence
+0:256            Constant:
+0:256              0 (const int)
+0:256            Constant:
+0:256              1 (const int)
+0:256        subgroupPartitionedExclusiveAddNV ( global highp 2-component vector of int)
+0:256          vector swizzle ( temp highp 2-component vector of int)
+0:256            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:256              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256                Constant:
+0:256                  1 (const int)
+0:256              Constant:
+0:256                1 (const int)
+0:256            Sequence
+0:256              Constant:
+0:256                0 (const int)
+0:256              Constant:
+0:256                1 (const int)
+0:256          'ballot' ( temp highp 4-component vector of uint)
+0:257      move second child to first child ( temp highp 3-component vector of int)
+0:257        vector swizzle ( temp highp 3-component vector of int)
+0:257          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:257            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:257              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:257              Constant:
+0:257                0 (const int)
+0:257            Constant:
+0:257              1 (const int)
+0:257          Sequence
+0:257            Constant:
+0:257              0 (const int)
+0:257            Constant:
+0:257              1 (const int)
+0:257            Constant:
+0:257              2 (const int)
+0:257        subgroupPartitionedExclusiveAddNV ( global highp 3-component vector of int)
+0:257          vector swizzle ( temp highp 3-component vector of int)
+0:257            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:257              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:257                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:257                Constant:
+0:257                  2 (const int)
+0:257              Constant:
+0:257                1 (const int)
+0:257            Sequence
+0:257              Constant:
+0:257                0 (const int)
+0:257              Constant:
+0:257                1 (const int)
+0:257              Constant:
+0:257                2 (const int)
+0:257          'ballot' ( temp highp 4-component vector of uint)
+0:258      move second child to first child ( temp highp 4-component vector of int)
+0:258        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:258          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258            Constant:
+0:258              0 (const int)
+0:258          Constant:
+0:258            1 (const int)
+0:258        subgroupPartitionedExclusiveAddNV ( global highp 4-component vector of int)
+0:258          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:258            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258              Constant:
+0:258                3 (const int)
+0:258            Constant:
+0:258              1 (const int)
+0:258          'ballot' ( temp highp 4-component vector of uint)
+0:260      move second child to first child ( temp highp uint)
+0:260        direct index ( temp highp uint)
+0:260          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:260            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260              Constant:
+0:260                0 (const int)
+0:260            Constant:
+0:260              2 (const int)
+0:260          Constant:
+0:260            0 (const int)
+0:260        subgroupPartitionedExclusiveAddNV ( global highp uint)
+0:260          direct index ( temp highp uint)
+0:260            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:260              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260                Constant:
+0:260                  0 (const int)
+0:260              Constant:
+0:260                2 (const int)
+0:260            Constant:
+0:260              0 (const int)
+0:260          'ballot' ( temp highp 4-component vector of uint)
+0:261      move second child to first child ( temp highp 2-component vector of uint)
+0:261        vector swizzle ( temp highp 2-component vector of uint)
+0:261          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:261            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261              Constant:
+0:261                0 (const int)
+0:261            Constant:
+0:261              2 (const int)
+0:261          Sequence
+0:261            Constant:
+0:261              0 (const int)
+0:261            Constant:
+0:261              1 (const int)
+0:261        subgroupPartitionedExclusiveAddNV ( global highp 2-component vector of uint)
+0:261          vector swizzle ( temp highp 2-component vector of uint)
+0:261            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:261              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261                Constant:
+0:261                  1 (const int)
+0:261              Constant:
+0:261                2 (const int)
+0:261            Sequence
+0:261              Constant:
+0:261                0 (const int)
+0:261              Constant:
+0:261                1 (const int)
+0:261          'ballot' ( temp highp 4-component vector of uint)
+0:262      move second child to first child ( temp highp 3-component vector of uint)
+0:262        vector swizzle ( temp highp 3-component vector of uint)
+0:262          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:262            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:262              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:262              Constant:
+0:262                0 (const int)
+0:262            Constant:
+0:262              2 (const int)
+0:262          Sequence
+0:262            Constant:
+0:262              0 (const int)
+0:262            Constant:
+0:262              1 (const int)
+0:262            Constant:
+0:262              2 (const int)
+0:262        subgroupPartitionedExclusiveAddNV ( global highp 3-component vector of uint)
+0:262          vector swizzle ( temp highp 3-component vector of uint)
+0:262            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:262              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:262                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:262                Constant:
+0:262                  2 (const int)
+0:262              Constant:
+0:262                2 (const int)
+0:262            Sequence
+0:262              Constant:
+0:262                0 (const int)
+0:262              Constant:
+0:262                1 (const int)
+0:262              Constant:
+0:262                2 (const int)
+0:262          'ballot' ( temp highp 4-component vector of uint)
+0:263      move second child to first child ( temp highp 4-component vector of uint)
+0:263        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:263          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263            Constant:
+0:263              0 (const int)
+0:263          Constant:
+0:263            2 (const int)
+0:263        subgroupPartitionedExclusiveAddNV ( global highp 4-component vector of uint)
+0:263          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:263            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263              Constant:
+0:263                3 (const int)
+0:263            Constant:
+0:263              2 (const int)
+0:263          'ballot' ( temp highp 4-component vector of uint)
+0:265      move second child to first child ( temp highp float)
+0:265        direct index ( temp highp float)
+0:265          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:265            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265              Constant:
+0:265                0 (const int)
+0:265            Constant:
+0:265              0 (const int)
+0:265          Constant:
+0:265            0 (const int)
+0:265        subgroupPartitionedExclusiveMulNV ( global highp float)
+0:265          direct index ( temp highp float)
+0:265            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:265              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265                Constant:
+0:265                  0 (const int)
+0:265              Constant:
+0:265                0 (const int)
+0:265            Constant:
+0:265              0 (const int)
+0:265          'ballot' ( temp highp 4-component vector of uint)
+0:266      move second child to first child ( temp highp 2-component vector of float)
+0:266        vector swizzle ( temp highp 2-component vector of float)
+0:266          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:266            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266              Constant:
+0:266                0 (const int)
+0:266            Constant:
+0:266              0 (const int)
+0:266          Sequence
+0:266            Constant:
+0:266              0 (const int)
+0:266            Constant:
+0:266              1 (const int)
+0:266        subgroupPartitionedExclusiveMulNV ( global highp 2-component vector of float)
+0:266          vector swizzle ( temp highp 2-component vector of float)
+0:266            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:266              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266                Constant:
+0:266                  1 (const int)
+0:266              Constant:
+0:266                0 (const int)
+0:266            Sequence
+0:266              Constant:
+0:266                0 (const int)
+0:266              Constant:
+0:266                1 (const int)
+0:266          'ballot' ( temp highp 4-component vector of uint)
+0:267      move second child to first child ( temp highp 3-component vector of float)
+0:267        vector swizzle ( temp highp 3-component vector of float)
+0:267          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:267            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:267              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:267              Constant:
+0:267                0 (const int)
+0:267            Constant:
+0:267              0 (const int)
+0:267          Sequence
+0:267            Constant:
+0:267              0 (const int)
+0:267            Constant:
+0:267              1 (const int)
+0:267            Constant:
+0:267              2 (const int)
+0:267        subgroupPartitionedExclusiveMulNV ( global highp 3-component vector of float)
+0:267          vector swizzle ( temp highp 3-component vector of float)
+0:267            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:267              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:267                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:267                Constant:
+0:267                  2 (const int)
+0:267              Constant:
+0:267                0 (const int)
+0:267            Sequence
+0:267              Constant:
+0:267                0 (const int)
+0:267              Constant:
+0:267                1 (const int)
+0:267              Constant:
+0:267                2 (const int)
+0:267          'ballot' ( temp highp 4-component vector of uint)
+0:268      move second child to first child ( temp highp 4-component vector of float)
+0:268        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:268          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268            Constant:
+0:268              0 (const int)
+0:268          Constant:
+0:268            0 (const int)
+0:268        subgroupPartitionedExclusiveMulNV ( global highp 4-component vector of float)
+0:268          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:268            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268              Constant:
+0:268                3 (const int)
+0:268            Constant:
+0:268              0 (const int)
+0:268          'ballot' ( temp highp 4-component vector of uint)
+0:270      move second child to first child ( temp highp int)
+0:270        direct index ( temp highp int)
+0:270          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:270            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270              Constant:
+0:270                1 (const int)
+0:270            Constant:
+0:270              1 (const int)
+0:270          Constant:
+0:270            0 (const int)
+0:270        subgroupPartitionedExclusiveMulNV ( global highp int)
+0:270          direct index ( temp highp int)
+0:270            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:270              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270                Constant:
+0:270                  0 (const int)
+0:270              Constant:
+0:270                1 (const int)
+0:270            Constant:
+0:270              0 (const int)
+0:270          'ballot' ( temp highp 4-component vector of uint)
+0:271      move second child to first child ( temp highp 2-component vector of int)
+0:271        vector swizzle ( temp highp 2-component vector of int)
+0:271          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:271            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271              Constant:
+0:271                1 (const int)
+0:271            Constant:
+0:271              1 (const int)
+0:271          Sequence
+0:271            Constant:
+0:271              0 (const int)
+0:271            Constant:
+0:271              1 (const int)
+0:271        subgroupPartitionedExclusiveMulNV ( global highp 2-component vector of int)
+0:271          vector swizzle ( temp highp 2-component vector of int)
+0:271            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:271              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271                Constant:
+0:271                  1 (const int)
+0:271              Constant:
+0:271                1 (const int)
+0:271            Sequence
+0:271              Constant:
+0:271                0 (const int)
+0:271              Constant:
+0:271                1 (const int)
+0:271          'ballot' ( temp highp 4-component vector of uint)
+0:272      move second child to first child ( temp highp 3-component vector of int)
+0:272        vector swizzle ( temp highp 3-component vector of int)
+0:272          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:272            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:272              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:272              Constant:
+0:272                1 (const int)
+0:272            Constant:
+0:272              1 (const int)
+0:272          Sequence
+0:272            Constant:
+0:272              0 (const int)
+0:272            Constant:
+0:272              1 (const int)
+0:272            Constant:
+0:272              2 (const int)
+0:272        subgroupPartitionedExclusiveMulNV ( global highp 3-component vector of int)
+0:272          vector swizzle ( temp highp 3-component vector of int)
+0:272            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:272              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:272                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:272                Constant:
+0:272                  2 (const int)
+0:272              Constant:
+0:272                1 (const int)
+0:272            Sequence
+0:272              Constant:
+0:272                0 (const int)
+0:272              Constant:
+0:272                1 (const int)
+0:272              Constant:
+0:272                2 (const int)
+0:272          'ballot' ( temp highp 4-component vector of uint)
+0:273      move second child to first child ( temp highp 4-component vector of int)
+0:273        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:273          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273            Constant:
+0:273              1 (const int)
+0:273          Constant:
+0:273            1 (const int)
+0:273        subgroupPartitionedExclusiveMulNV ( global highp 4-component vector of int)
+0:273          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:273            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273              Constant:
+0:273                3 (const int)
+0:273            Constant:
+0:273              1 (const int)
+0:273          'ballot' ( temp highp 4-component vector of uint)
+0:275      move second child to first child ( temp highp uint)
+0:275        direct index ( temp highp uint)
+0:275          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:275            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275              Constant:
+0:275                1 (const int)
+0:275            Constant:
+0:275              2 (const int)
+0:275          Constant:
+0:275            0 (const int)
+0:275        subgroupPartitionedExclusiveMulNV ( global highp uint)
+0:275          direct index ( temp highp uint)
+0:275            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:275              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275                Constant:
+0:275                  0 (const int)
+0:275              Constant:
+0:275                2 (const int)
+0:275            Constant:
+0:275              0 (const int)
+0:275          'ballot' ( temp highp 4-component vector of uint)
+0:276      move second child to first child ( temp highp 2-component vector of uint)
+0:276        vector swizzle ( temp highp 2-component vector of uint)
+0:276          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:276            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276              Constant:
+0:276                1 (const int)
+0:276            Constant:
+0:276              2 (const int)
+0:276          Sequence
+0:276            Constant:
+0:276              0 (const int)
+0:276            Constant:
+0:276              1 (const int)
+0:276        subgroupPartitionedExclusiveMulNV ( global highp 2-component vector of uint)
+0:276          vector swizzle ( temp highp 2-component vector of uint)
+0:276            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:276              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276                Constant:
+0:276                  1 (const int)
+0:276              Constant:
+0:276                2 (const int)
+0:276            Sequence
+0:276              Constant:
+0:276                0 (const int)
+0:276              Constant:
+0:276                1 (const int)
+0:276          'ballot' ( temp highp 4-component vector of uint)
+0:277      move second child to first child ( temp highp 3-component vector of uint)
+0:277        vector swizzle ( temp highp 3-component vector of uint)
+0:277          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:277            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:277              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:277              Constant:
+0:277                1 (const int)
+0:277            Constant:
+0:277              2 (const int)
+0:277          Sequence
+0:277            Constant:
+0:277              0 (const int)
+0:277            Constant:
+0:277              1 (const int)
+0:277            Constant:
+0:277              2 (const int)
+0:277        subgroupPartitionedExclusiveMulNV ( global highp 3-component vector of uint)
+0:277          vector swizzle ( temp highp 3-component vector of uint)
+0:277            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:277              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:277                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:277                Constant:
+0:277                  2 (const int)
+0:277              Constant:
+0:277                2 (const int)
+0:277            Sequence
+0:277              Constant:
+0:277                0 (const int)
+0:277              Constant:
+0:277                1 (const int)
+0:277              Constant:
+0:277                2 (const int)
+0:277          'ballot' ( temp highp 4-component vector of uint)
+0:278      move second child to first child ( temp highp 4-component vector of uint)
+0:278        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:278          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278            Constant:
+0:278              1 (const int)
+0:278          Constant:
+0:278            2 (const int)
+0:278        subgroupPartitionedExclusiveMulNV ( global highp 4-component vector of uint)
+0:278          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:278            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278              Constant:
+0:278                3 (const int)
+0:278            Constant:
+0:278              2 (const int)
+0:278          'ballot' ( temp highp 4-component vector of uint)
+0:280      move second child to first child ( temp highp float)
+0:280        direct index ( temp highp float)
+0:280          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:280            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280              Constant:
+0:280                1 (const int)
+0:280            Constant:
+0:280              0 (const int)
+0:280          Constant:
+0:280            0 (const int)
+0:280        subgroupPartitionedExclusiveMinNV ( global highp float)
+0:280          direct index ( temp highp float)
+0:280            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:280              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280                Constant:
+0:280                  0 (const int)
+0:280              Constant:
+0:280                0 (const int)
+0:280            Constant:
+0:280              0 (const int)
+0:280          'ballot' ( temp highp 4-component vector of uint)
+0:281      move second child to first child ( temp highp 2-component vector of float)
+0:281        vector swizzle ( temp highp 2-component vector of float)
+0:281          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:281            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281              Constant:
+0:281                1 (const int)
+0:281            Constant:
+0:281              0 (const int)
+0:281          Sequence
+0:281            Constant:
+0:281              0 (const int)
+0:281            Constant:
+0:281              1 (const int)
+0:281        subgroupPartitionedExclusiveMinNV ( global highp 2-component vector of float)
+0:281          vector swizzle ( temp highp 2-component vector of float)
+0:281            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:281              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281                Constant:
+0:281                  1 (const int)
+0:281              Constant:
+0:281                0 (const int)
+0:281            Sequence
+0:281              Constant:
+0:281                0 (const int)
+0:281              Constant:
+0:281                1 (const int)
+0:281          'ballot' ( temp highp 4-component vector of uint)
+0:282      move second child to first child ( temp highp 3-component vector of float)
+0:282        vector swizzle ( temp highp 3-component vector of float)
+0:282          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:282            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:282              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:282              Constant:
+0:282                1 (const int)
+0:282            Constant:
+0:282              0 (const int)
+0:282          Sequence
+0:282            Constant:
+0:282              0 (const int)
+0:282            Constant:
+0:282              1 (const int)
+0:282            Constant:
+0:282              2 (const int)
+0:282        subgroupPartitionedExclusiveMinNV ( global highp 3-component vector of float)
+0:282          vector swizzle ( temp highp 3-component vector of float)
+0:282            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:282              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:282                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:282                Constant:
+0:282                  2 (const int)
+0:282              Constant:
+0:282                0 (const int)
+0:282            Sequence
+0:282              Constant:
+0:282                0 (const int)
+0:282              Constant:
+0:282                1 (const int)
+0:282              Constant:
+0:282                2 (const int)
+0:282          'ballot' ( temp highp 4-component vector of uint)
+0:283      move second child to first child ( temp highp 4-component vector of float)
+0:283        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:283          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283            Constant:
+0:283              1 (const int)
+0:283          Constant:
+0:283            0 (const int)
+0:283        subgroupPartitionedExclusiveMinNV ( global highp 4-component vector of float)
+0:283          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:283            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283              Constant:
+0:283                3 (const int)
+0:283            Constant:
+0:283              0 (const int)
+0:283          'ballot' ( temp highp 4-component vector of uint)
+0:285      move second child to first child ( temp highp int)
+0:285        direct index ( temp highp int)
+0:285          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:285            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285              Constant:
+0:285                1 (const int)
+0:285            Constant:
+0:285              1 (const int)
+0:285          Constant:
+0:285            0 (const int)
+0:285        subgroupPartitionedExclusiveMinNV ( global highp int)
+0:285          direct index ( temp highp int)
+0:285            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:285              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285                Constant:
+0:285                  0 (const int)
+0:285              Constant:
+0:285                1 (const int)
+0:285            Constant:
+0:285              0 (const int)
+0:285          'ballot' ( temp highp 4-component vector of uint)
+0:286      move second child to first child ( temp highp 2-component vector of int)
+0:286        vector swizzle ( temp highp 2-component vector of int)
+0:286          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:286            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286              Constant:
+0:286                1 (const int)
+0:286            Constant:
+0:286              1 (const int)
+0:286          Sequence
+0:286            Constant:
+0:286              0 (const int)
+0:286            Constant:
+0:286              1 (const int)
+0:286        subgroupPartitionedExclusiveMinNV ( global highp 2-component vector of int)
+0:286          vector swizzle ( temp highp 2-component vector of int)
+0:286            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:286              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286                Constant:
+0:286                  1 (const int)
+0:286              Constant:
+0:286                1 (const int)
+0:286            Sequence
+0:286              Constant:
+0:286                0 (const int)
+0:286              Constant:
+0:286                1 (const int)
+0:286          'ballot' ( temp highp 4-component vector of uint)
+0:287      move second child to first child ( temp highp 3-component vector of int)
+0:287        vector swizzle ( temp highp 3-component vector of int)
+0:287          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:287            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:287              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:287              Constant:
+0:287                1 (const int)
+0:287            Constant:
+0:287              1 (const int)
+0:287          Sequence
+0:287            Constant:
+0:287              0 (const int)
+0:287            Constant:
+0:287              1 (const int)
+0:287            Constant:
+0:287              2 (const int)
+0:287        subgroupPartitionedExclusiveMinNV ( global highp 3-component vector of int)
+0:287          vector swizzle ( temp highp 3-component vector of int)
+0:287            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:287              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:287                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:287                Constant:
+0:287                  2 (const int)
+0:287              Constant:
+0:287                1 (const int)
+0:287            Sequence
+0:287              Constant:
+0:287                0 (const int)
+0:287              Constant:
+0:287                1 (const int)
+0:287              Constant:
+0:287                2 (const int)
+0:287          'ballot' ( temp highp 4-component vector of uint)
+0:288      move second child to first child ( temp highp 4-component vector of int)
+0:288        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:288          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288            Constant:
+0:288              1 (const int)
+0:288          Constant:
+0:288            1 (const int)
+0:288        subgroupPartitionedExclusiveMinNV ( global highp 4-component vector of int)
+0:288          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:288            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288              Constant:
+0:288                3 (const int)
+0:288            Constant:
+0:288              1 (const int)
+0:288          'ballot' ( temp highp 4-component vector of uint)
+0:290      move second child to first child ( temp highp uint)
+0:290        direct index ( temp highp uint)
+0:290          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:290            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290              Constant:
+0:290                2 (const int)
+0:290            Constant:
+0:290              2 (const int)
+0:290          Constant:
+0:290            0 (const int)
+0:290        subgroupPartitionedExclusiveMinNV ( global highp uint)
+0:290          direct index ( temp highp uint)
+0:290            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:290              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290                Constant:
+0:290                  0 (const int)
+0:290              Constant:
+0:290                2 (const int)
+0:290            Constant:
+0:290              0 (const int)
+0:290          'ballot' ( temp highp 4-component vector of uint)
+0:291      move second child to first child ( temp highp 2-component vector of uint)
+0:291        vector swizzle ( temp highp 2-component vector of uint)
+0:291          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:291            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291              Constant:
+0:291                2 (const int)
+0:291            Constant:
+0:291              2 (const int)
+0:291          Sequence
+0:291            Constant:
+0:291              0 (const int)
+0:291            Constant:
+0:291              1 (const int)
+0:291        subgroupPartitionedExclusiveMinNV ( global highp 2-component vector of uint)
+0:291          vector swizzle ( temp highp 2-component vector of uint)
+0:291            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:291              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291                Constant:
+0:291                  1 (const int)
+0:291              Constant:
+0:291                2 (const int)
+0:291            Sequence
+0:291              Constant:
+0:291                0 (const int)
+0:291              Constant:
+0:291                1 (const int)
+0:291          'ballot' ( temp highp 4-component vector of uint)
+0:292      move second child to first child ( temp highp 3-component vector of uint)
+0:292        vector swizzle ( temp highp 3-component vector of uint)
+0:292          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:292            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:292              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:292              Constant:
+0:292                2 (const int)
+0:292            Constant:
+0:292              2 (const int)
+0:292          Sequence
+0:292            Constant:
+0:292              0 (const int)
+0:292            Constant:
+0:292              1 (const int)
+0:292            Constant:
+0:292              2 (const int)
+0:292        subgroupPartitionedExclusiveMinNV ( global highp 3-component vector of uint)
+0:292          vector swizzle ( temp highp 3-component vector of uint)
+0:292            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:292              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:292                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:292                Constant:
+0:292                  2 (const int)
+0:292              Constant:
+0:292                2 (const int)
+0:292            Sequence
+0:292              Constant:
+0:292                0 (const int)
+0:292              Constant:
+0:292                1 (const int)
+0:292              Constant:
+0:292                2 (const int)
+0:292          'ballot' ( temp highp 4-component vector of uint)
+0:293      move second child to first child ( temp highp 4-component vector of uint)
+0:293        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:293          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293            Constant:
+0:293              2 (const int)
+0:293          Constant:
+0:293            2 (const int)
+0:293        subgroupPartitionedExclusiveMinNV ( global highp 4-component vector of uint)
+0:293          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:293            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293              Constant:
+0:293                3 (const int)
+0:293            Constant:
+0:293              2 (const int)
+0:293          'ballot' ( temp highp 4-component vector of uint)
+0:295      move second child to first child ( temp highp float)
+0:295        direct index ( temp highp float)
+0:295          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:295            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295              Constant:
+0:295                2 (const int)
+0:295            Constant:
+0:295              0 (const int)
+0:295          Constant:
+0:295            0 (const int)
+0:295        subgroupPartitionedExclusiveMaxNV ( global highp float)
+0:295          direct index ( temp highp float)
+0:295            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:295              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295                Constant:
+0:295                  0 (const int)
+0:295              Constant:
+0:295                0 (const int)
+0:295            Constant:
+0:295              0 (const int)
+0:295          'ballot' ( temp highp 4-component vector of uint)
+0:296      move second child to first child ( temp highp 2-component vector of float)
+0:296        vector swizzle ( temp highp 2-component vector of float)
+0:296          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:296            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296              Constant:
+0:296                2 (const int)
+0:296            Constant:
+0:296              0 (const int)
+0:296          Sequence
+0:296            Constant:
+0:296              0 (const int)
+0:296            Constant:
+0:296              1 (const int)
+0:296        subgroupPartitionedExclusiveMaxNV ( global highp 2-component vector of float)
+0:296          vector swizzle ( temp highp 2-component vector of float)
+0:296            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:296              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296                Constant:
+0:296                  1 (const int)
+0:296              Constant:
+0:296                0 (const int)
+0:296            Sequence
+0:296              Constant:
+0:296                0 (const int)
+0:296              Constant:
+0:296                1 (const int)
+0:296          'ballot' ( temp highp 4-component vector of uint)
+0:297      move second child to first child ( temp highp 3-component vector of float)
+0:297        vector swizzle ( temp highp 3-component vector of float)
+0:297          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:297            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:297              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:297              Constant:
+0:297                2 (const int)
+0:297            Constant:
+0:297              0 (const int)
+0:297          Sequence
+0:297            Constant:
+0:297              0 (const int)
+0:297            Constant:
+0:297              1 (const int)
+0:297            Constant:
+0:297              2 (const int)
+0:297        subgroupPartitionedExclusiveMaxNV ( global highp 3-component vector of float)
+0:297          vector swizzle ( temp highp 3-component vector of float)
+0:297            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:297              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:297                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:297                Constant:
+0:297                  2 (const int)
+0:297              Constant:
+0:297                0 (const int)
+0:297            Sequence
+0:297              Constant:
+0:297                0 (const int)
+0:297              Constant:
+0:297                1 (const int)
+0:297              Constant:
+0:297                2 (const int)
+0:297          'ballot' ( temp highp 4-component vector of uint)
+0:298      move second child to first child ( temp highp 4-component vector of float)
+0:298        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:298          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298            Constant:
+0:298              2 (const int)
+0:298          Constant:
+0:298            0 (const int)
+0:298        subgroupPartitionedExclusiveMaxNV ( global highp 4-component vector of float)
+0:298          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:298            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298              Constant:
+0:298                3 (const int)
+0:298            Constant:
+0:298              0 (const int)
+0:298          'ballot' ( temp highp 4-component vector of uint)
+0:300      move second child to first child ( temp highp int)
+0:300        direct index ( temp highp int)
+0:300          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:300            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300              Constant:
+0:300                2 (const int)
+0:300            Constant:
+0:300              1 (const int)
+0:300          Constant:
+0:300            0 (const int)
+0:300        subgroupPartitionedExclusiveMaxNV ( global highp int)
+0:300          direct index ( temp highp int)
+0:300            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:300              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300                Constant:
+0:300                  0 (const int)
+0:300              Constant:
+0:300                1 (const int)
+0:300            Constant:
+0:300              0 (const int)
+0:300          'ballot' ( temp highp 4-component vector of uint)
+0:301      move second child to first child ( temp highp 2-component vector of int)
+0:301        vector swizzle ( temp highp 2-component vector of int)
+0:301          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:301            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301              Constant:
+0:301                2 (const int)
+0:301            Constant:
+0:301              1 (const int)
+0:301          Sequence
+0:301            Constant:
+0:301              0 (const int)
+0:301            Constant:
+0:301              1 (const int)
+0:301        subgroupPartitionedExclusiveMaxNV ( global highp 2-component vector of int)
+0:301          vector swizzle ( temp highp 2-component vector of int)
+0:301            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:301              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301                Constant:
+0:301                  1 (const int)
+0:301              Constant:
+0:301                1 (const int)
+0:301            Sequence
+0:301              Constant:
+0:301                0 (const int)
+0:301              Constant:
+0:301                1 (const int)
+0:301          'ballot' ( temp highp 4-component vector of uint)
+0:302      move second child to first child ( temp highp 3-component vector of int)
+0:302        vector swizzle ( temp highp 3-component vector of int)
+0:302          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:302            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:302              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:302              Constant:
+0:302                2 (const int)
+0:302            Constant:
+0:302              1 (const int)
+0:302          Sequence
+0:302            Constant:
+0:302              0 (const int)
+0:302            Constant:
+0:302              1 (const int)
+0:302            Constant:
+0:302              2 (const int)
+0:302        subgroupPartitionedExclusiveMaxNV ( global highp 3-component vector of int)
+0:302          vector swizzle ( temp highp 3-component vector of int)
+0:302            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:302              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:302                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:302                Constant:
+0:302                  2 (const int)
+0:302              Constant:
+0:302                1 (const int)
+0:302            Sequence
+0:302              Constant:
+0:302                0 (const int)
+0:302              Constant:
+0:302                1 (const int)
+0:302              Constant:
+0:302                2 (const int)
+0:302          'ballot' ( temp highp 4-component vector of uint)
+0:303      move second child to first child ( temp highp 4-component vector of int)
+0:303        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:303          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303            Constant:
+0:303              2 (const int)
+0:303          Constant:
+0:303            1 (const int)
+0:303        subgroupPartitionedExclusiveMaxNV ( global highp 4-component vector of int)
+0:303          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:303            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303              Constant:
+0:303                3 (const int)
+0:303            Constant:
+0:303              1 (const int)
+0:303          'ballot' ( temp highp 4-component vector of uint)
+0:305      move second child to first child ( temp highp uint)
+0:305        direct index ( temp highp uint)
+0:305          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:305            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305              Constant:
+0:305                2 (const int)
+0:305            Constant:
+0:305              2 (const int)
+0:305          Constant:
+0:305            0 (const int)
+0:305        subgroupPartitionedExclusiveMaxNV ( global highp uint)
+0:305          direct index ( temp highp uint)
+0:305            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:305              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305                Constant:
+0:305                  0 (const int)
+0:305              Constant:
+0:305                2 (const int)
+0:305            Constant:
+0:305              0 (const int)
+0:305          'ballot' ( temp highp 4-component vector of uint)
+0:306      move second child to first child ( temp highp 2-component vector of uint)
+0:306        vector swizzle ( temp highp 2-component vector of uint)
+0:306          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:306            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306              Constant:
+0:306                2 (const int)
+0:306            Constant:
+0:306              2 (const int)
+0:306          Sequence
+0:306            Constant:
+0:306              0 (const int)
+0:306            Constant:
+0:306              1 (const int)
+0:306        subgroupPartitionedExclusiveMaxNV ( global highp 2-component vector of uint)
+0:306          vector swizzle ( temp highp 2-component vector of uint)
+0:306            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:306              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306                Constant:
+0:306                  1 (const int)
+0:306              Constant:
+0:306                2 (const int)
+0:306            Sequence
+0:306              Constant:
+0:306                0 (const int)
+0:306              Constant:
+0:306                1 (const int)
+0:306          'ballot' ( temp highp 4-component vector of uint)
+0:307      move second child to first child ( temp highp 3-component vector of uint)
+0:307        vector swizzle ( temp highp 3-component vector of uint)
+0:307          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:307            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:307              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:307              Constant:
+0:307                2 (const int)
+0:307            Constant:
+0:307              2 (const int)
+0:307          Sequence
+0:307            Constant:
+0:307              0 (const int)
+0:307            Constant:
+0:307              1 (const int)
+0:307            Constant:
+0:307              2 (const int)
+0:307        subgroupPartitionedExclusiveMaxNV ( global highp 3-component vector of uint)
+0:307          vector swizzle ( temp highp 3-component vector of uint)
+0:307            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:307              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:307                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:307                Constant:
+0:307                  2 (const int)
+0:307              Constant:
+0:307                2 (const int)
+0:307            Sequence
+0:307              Constant:
+0:307                0 (const int)
+0:307              Constant:
+0:307                1 (const int)
+0:307              Constant:
+0:307                2 (const int)
+0:307          'ballot' ( temp highp 4-component vector of uint)
+0:308      move second child to first child ( temp highp 4-component vector of uint)
+0:308        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:308          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308            Constant:
+0:308              2 (const int)
+0:308          Constant:
+0:308            2 (const int)
+0:308        subgroupPartitionedExclusiveMaxNV ( global highp 4-component vector of uint)
+0:308          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:308            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308              Constant:
+0:308                3 (const int)
+0:308            Constant:
+0:308              2 (const int)
+0:308          'ballot' ( temp highp 4-component vector of uint)
+0:310      move second child to first child ( temp highp int)
+0:310        direct index ( temp highp int)
+0:310          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:310            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310              Constant:
+0:310                2 (const int)
+0:310            Constant:
+0:310              1 (const int)
+0:310          Constant:
+0:310            0 (const int)
+0:310        subgroupPartitionedExclusiveAndNV ( global highp int)
+0:310          direct index ( temp highp int)
+0:310            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:310              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310                Constant:
+0:310                  0 (const int)
+0:310              Constant:
+0:310                1 (const int)
+0:310            Constant:
+0:310              0 (const int)
+0:310          'ballot' ( temp highp 4-component vector of uint)
+0:311      move second child to first child ( temp highp 2-component vector of int)
+0:311        vector swizzle ( temp highp 2-component vector of int)
+0:311          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:311            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311              Constant:
+0:311                2 (const int)
+0:311            Constant:
+0:311              1 (const int)
+0:311          Sequence
+0:311            Constant:
+0:311              0 (const int)
+0:311            Constant:
+0:311              1 (const int)
+0:311        subgroupPartitionedExclusiveAndNV ( global highp 2-component vector of int)
+0:311          vector swizzle ( temp highp 2-component vector of int)
+0:311            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:311              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311                Constant:
+0:311                  1 (const int)
+0:311              Constant:
+0:311                1 (const int)
+0:311            Sequence
+0:311              Constant:
+0:311                0 (const int)
+0:311              Constant:
+0:311                1 (const int)
+0:311          'ballot' ( temp highp 4-component vector of uint)
+0:312      move second child to first child ( temp highp 3-component vector of int)
+0:312        vector swizzle ( temp highp 3-component vector of int)
+0:312          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:312            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:312              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:312              Constant:
+0:312                2 (const int)
+0:312            Constant:
+0:312              1 (const int)
+0:312          Sequence
+0:312            Constant:
+0:312              0 (const int)
+0:312            Constant:
+0:312              1 (const int)
+0:312            Constant:
+0:312              2 (const int)
+0:312        subgroupPartitionedExclusiveAndNV ( global highp 3-component vector of int)
+0:312          vector swizzle ( temp highp 3-component vector of int)
+0:312            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:312              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:312                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:312                Constant:
+0:312                  2 (const int)
+0:312              Constant:
+0:312                1 (const int)
+0:312            Sequence
+0:312              Constant:
+0:312                0 (const int)
+0:312              Constant:
+0:312                1 (const int)
+0:312              Constant:
+0:312                2 (const int)
+0:312          'ballot' ( temp highp 4-component vector of uint)
+0:313      move second child to first child ( temp highp 4-component vector of int)
+0:313        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:313          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313            Constant:
+0:313              2 (const int)
+0:313          Constant:
+0:313            1 (const int)
+0:313        subgroupPartitionedExclusiveAndNV ( global highp 4-component vector of int)
+0:313          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:313            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313              Constant:
+0:313                3 (const int)
+0:313            Constant:
+0:313              1 (const int)
+0:313          'ballot' ( temp highp 4-component vector of uint)
+0:315      move second child to first child ( temp highp uint)
+0:315        direct index ( temp highp uint)
+0:315          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:315            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315              Constant:
+0:315                2 (const int)
+0:315            Constant:
+0:315              2 (const int)
+0:315          Constant:
+0:315            0 (const int)
+0:315        subgroupPartitionedExclusiveAndNV ( global highp uint)
+0:315          direct index ( temp highp uint)
+0:315            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:315              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315                Constant:
+0:315                  0 (const int)
+0:315              Constant:
+0:315                2 (const int)
+0:315            Constant:
+0:315              0 (const int)
+0:315          'ballot' ( temp highp 4-component vector of uint)
+0:316      move second child to first child ( temp highp 2-component vector of uint)
+0:316        vector swizzle ( temp highp 2-component vector of uint)
+0:316          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:316            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316              Constant:
+0:316                2 (const int)
+0:316            Constant:
+0:316              2 (const int)
+0:316          Sequence
+0:316            Constant:
+0:316              0 (const int)
+0:316            Constant:
+0:316              1 (const int)
+0:316        subgroupPartitionedExclusiveAndNV ( global highp 2-component vector of uint)
+0:316          vector swizzle ( temp highp 2-component vector of uint)
+0:316            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:316              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316                Constant:
+0:316                  1 (const int)
+0:316              Constant:
+0:316                2 (const int)
+0:316            Sequence
+0:316              Constant:
+0:316                0 (const int)
+0:316              Constant:
+0:316                1 (const int)
+0:316          'ballot' ( temp highp 4-component vector of uint)
+0:317      move second child to first child ( temp highp 3-component vector of uint)
+0:317        vector swizzle ( temp highp 3-component vector of uint)
+0:317          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:317            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:317              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:317              Constant:
+0:317                2 (const int)
+0:317            Constant:
+0:317              2 (const int)
+0:317          Sequence
+0:317            Constant:
+0:317              0 (const int)
+0:317            Constant:
+0:317              1 (const int)
+0:317            Constant:
+0:317              2 (const int)
+0:317        subgroupPartitionedExclusiveAndNV ( global highp 3-component vector of uint)
+0:317          vector swizzle ( temp highp 3-component vector of uint)
+0:317            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:317              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:317                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:317                Constant:
+0:317                  2 (const int)
+0:317              Constant:
+0:317                2 (const int)
+0:317            Sequence
+0:317              Constant:
+0:317                0 (const int)
+0:317              Constant:
+0:317                1 (const int)
+0:317              Constant:
+0:317                2 (const int)
+0:317          'ballot' ( temp highp 4-component vector of uint)
+0:318      move second child to first child ( temp highp 4-component vector of uint)
+0:318        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:318          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318            Constant:
+0:318              2 (const int)
+0:318          Constant:
+0:318            2 (const int)
+0:318        subgroupPartitionedExclusiveAndNV ( global highp 4-component vector of uint)
+0:318          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:318            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318              Constant:
+0:318                3 (const int)
+0:318            Constant:
+0:318              2 (const int)
+0:318          'ballot' ( temp highp 4-component vector of uint)
+0:320      move second child to first child ( temp highp int)
+0:320        direct index ( temp highp int)
+0:320          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:320            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320              Constant:
+0:320                3 (const int)
+0:320            Constant:
+0:320              1 (const int)
+0:320          Constant:
+0:320            0 (const int)
+0:320        Convert bool to int ( temp highp int)
+0:320          subgroupPartitionedExclusiveAndNV ( global bool, operation at highp)
+0:320            Compare Less Than ( temp bool)
+0:320              direct index ( temp highp int)
+0:320                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:320                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320                    Constant:
+0:320                      0 (const int)
+0:320                  Constant:
+0:320                    1 (const int)
+0:320                Constant:
+0:320                  0 (const int)
+0:320              Constant:
+0:320                0 (const int)
+0:320            'ballot' ( temp highp 4-component vector of uint)
+0:321      move second child to first child ( temp highp 2-component vector of int)
+0:321        vector swizzle ( temp highp 2-component vector of int)
+0:321          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:321            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321              Constant:
+0:321                3 (const int)
+0:321            Constant:
+0:321              1 (const int)
+0:321          Sequence
+0:321            Constant:
+0:321              0 (const int)
+0:321            Constant:
+0:321              1 (const int)
+0:321        Convert bool to int ( temp highp 2-component vector of int)
+0:321          subgroupPartitionedExclusiveAndNV ( global 2-component vector of bool, operation at highp)
+0:321            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:321              vector swizzle ( temp highp 2-component vector of int)
+0:321                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:321                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321                    Constant:
+0:321                      1 (const int)
+0:321                  Constant:
+0:321                    1 (const int)
+0:321                Sequence
+0:321                  Constant:
+0:321                    0 (const int)
+0:321                  Constant:
+0:321                    1 (const int)
+0:321              Constant:
+0:321                0 (const int)
+0:321                0 (const int)
+0:321            'ballot' ( temp highp 4-component vector of uint)
+0:322      move second child to first child ( temp highp 3-component vector of int)
+0:322        vector swizzle ( temp highp 3-component vector of int)
+0:322          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:322            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:322              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:322              Constant:
+0:322                3 (const int)
+0:322            Constant:
+0:322              1 (const int)
+0:322          Sequence
+0:322            Constant:
+0:322              0 (const int)
+0:322            Constant:
+0:322              1 (const int)
+0:322            Constant:
+0:322              2 (const int)
+0:322        Convert bool to int ( temp highp 3-component vector of int)
+0:322          subgroupPartitionedExclusiveAndNV ( global 3-component vector of bool, operation at highp)
+0:322            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:322              vector swizzle ( temp highp 3-component vector of int)
+0:322                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:322                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:322                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:322                    Constant:
+0:322                      1 (const int)
+0:322                  Constant:
+0:322                    1 (const int)
+0:322                Sequence
+0:322                  Constant:
+0:322                    0 (const int)
+0:322                  Constant:
+0:322                    1 (const int)
+0:322                  Constant:
+0:322                    2 (const int)
+0:322              Constant:
+0:322                0 (const int)
+0:322                0 (const int)
+0:322                0 (const int)
+0:322            'ballot' ( temp highp 4-component vector of uint)
+0:323      move second child to first child ( temp highp 4-component vector of int)
+0:323        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:323          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323            Constant:
+0:323              3 (const int)
+0:323          Constant:
+0:323            1 (const int)
+0:323        Convert bool to int ( temp highp 4-component vector of int)
+0:323          subgroupPartitionedExclusiveAndNV ( global 4-component vector of bool, operation at highp)
+0:323            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:323              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:323                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323                  Constant:
+0:323                    1 (const int)
+0:323                Constant:
+0:323                  1 (const int)
+0:323              Constant:
+0:323                0 (const int)
+0:323                0 (const int)
+0:323                0 (const int)
+0:323                0 (const int)
+0:323            'ballot' ( temp highp 4-component vector of uint)
+0:325      move second child to first child ( temp highp int)
+0:325        direct index ( temp highp int)
+0:325          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:325            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325              Constant:
+0:325                3 (const int)
+0:325            Constant:
+0:325              1 (const int)
+0:325          Constant:
+0:325            0 (const int)
+0:325        subgroupPartitionedExclusiveOrNV ( global highp int)
+0:325          direct index ( temp highp int)
+0:325            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:325              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325                Constant:
+0:325                  0 (const int)
+0:325              Constant:
+0:325                1 (const int)
+0:325            Constant:
+0:325              0 (const int)
+0:325          'ballot' ( temp highp 4-component vector of uint)
+0:326      move second child to first child ( temp highp 2-component vector of int)
+0:326        vector swizzle ( temp highp 2-component vector of int)
+0:326          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:326            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326              Constant:
+0:326                3 (const int)
+0:326            Constant:
+0:326              1 (const int)
+0:326          Sequence
+0:326            Constant:
+0:326              0 (const int)
+0:326            Constant:
+0:326              1 (const int)
+0:326        subgroupPartitionedExclusiveOrNV ( global highp 2-component vector of int)
+0:326          vector swizzle ( temp highp 2-component vector of int)
+0:326            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:326              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326                Constant:
+0:326                  1 (const int)
+0:326              Constant:
+0:326                1 (const int)
+0:326            Sequence
+0:326              Constant:
+0:326                0 (const int)
+0:326              Constant:
+0:326                1 (const int)
+0:326          'ballot' ( temp highp 4-component vector of uint)
+0:327      move second child to first child ( temp highp 3-component vector of int)
+0:327        vector swizzle ( temp highp 3-component vector of int)
+0:327          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:327            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:327              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:327              Constant:
+0:327                3 (const int)
+0:327            Constant:
+0:327              1 (const int)
+0:327          Sequence
+0:327            Constant:
+0:327              0 (const int)
+0:327            Constant:
+0:327              1 (const int)
+0:327            Constant:
+0:327              2 (const int)
+0:327        subgroupPartitionedExclusiveOrNV ( global highp 3-component vector of int)
+0:327          vector swizzle ( temp highp 3-component vector of int)
+0:327            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:327              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:327                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:327                Constant:
+0:327                  2 (const int)
+0:327              Constant:
+0:327                1 (const int)
+0:327            Sequence
+0:327              Constant:
+0:327                0 (const int)
+0:327              Constant:
+0:327                1 (const int)
+0:327              Constant:
+0:327                2 (const int)
+0:327          'ballot' ( temp highp 4-component vector of uint)
+0:328      move second child to first child ( temp highp 4-component vector of int)
+0:328        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:328          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328            Constant:
+0:328              3 (const int)
+0:328          Constant:
+0:328            1 (const int)
+0:328        subgroupPartitionedExclusiveOrNV ( global highp 4-component vector of int)
+0:328          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:328            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328              Constant:
+0:328                3 (const int)
+0:328            Constant:
+0:328              1 (const int)
+0:328          'ballot' ( temp highp 4-component vector of uint)
+0:330      move second child to first child ( temp highp uint)
+0:330        direct index ( temp highp uint)
+0:330          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:330            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330              Constant:
+0:330                3 (const int)
+0:330            Constant:
+0:330              2 (const int)
+0:330          Constant:
+0:330            0 (const int)
+0:330        subgroupPartitionedExclusiveOrNV ( global highp uint)
+0:330          direct index ( temp highp uint)
+0:330            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:330              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330                Constant:
+0:330                  0 (const int)
+0:330              Constant:
+0:330                2 (const int)
+0:330            Constant:
+0:330              0 (const int)
+0:330          'ballot' ( temp highp 4-component vector of uint)
+0:331      move second child to first child ( temp highp 2-component vector of uint)
+0:331        vector swizzle ( temp highp 2-component vector of uint)
+0:331          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:331            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331              Constant:
+0:331                3 (const int)
+0:331            Constant:
+0:331              2 (const int)
+0:331          Sequence
+0:331            Constant:
+0:331              0 (const int)
+0:331            Constant:
+0:331              1 (const int)
+0:331        subgroupPartitionedExclusiveOrNV ( global highp 2-component vector of uint)
+0:331          vector swizzle ( temp highp 2-component vector of uint)
+0:331            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:331              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331                Constant:
+0:331                  1 (const int)
+0:331              Constant:
+0:331                2 (const int)
+0:331            Sequence
+0:331              Constant:
+0:331                0 (const int)
+0:331              Constant:
+0:331                1 (const int)
+0:331          'ballot' ( temp highp 4-component vector of uint)
+0:332      move second child to first child ( temp highp 3-component vector of uint)
+0:332        vector swizzle ( temp highp 3-component vector of uint)
+0:332          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:332            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:332              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:332              Constant:
+0:332                3 (const int)
+0:332            Constant:
+0:332              2 (const int)
+0:332          Sequence
+0:332            Constant:
+0:332              0 (const int)
+0:332            Constant:
+0:332              1 (const int)
+0:332            Constant:
+0:332              2 (const int)
+0:332        subgroupPartitionedExclusiveOrNV ( global highp 3-component vector of uint)
+0:332          vector swizzle ( temp highp 3-component vector of uint)
+0:332            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:332              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:332                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:332                Constant:
+0:332                  2 (const int)
+0:332              Constant:
+0:332                2 (const int)
+0:332            Sequence
+0:332              Constant:
+0:332                0 (const int)
+0:332              Constant:
+0:332                1 (const int)
+0:332              Constant:
+0:332                2 (const int)
+0:332          'ballot' ( temp highp 4-component vector of uint)
+0:333      move second child to first child ( temp highp 4-component vector of uint)
+0:333        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:333          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:333            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:333            Constant:
+0:333              3 (const int)
+0:333          Constant:
+0:333            2 (const int)
+0:333        subgroupPartitionedExclusiveOrNV ( global highp 4-component vector of uint)
+0:333          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:333            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:333              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:333              Constant:
+0:333                3 (const int)
+0:333            Constant:
+0:333              2 (const int)
+0:333          'ballot' ( temp highp 4-component vector of uint)
+0:335      move second child to first child ( temp highp int)
+0:335        direct index ( temp highp int)
+0:335          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:335            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:335              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:335              Constant:
+0:335                3 (const int)
+0:335            Constant:
+0:335              1 (const int)
+0:335          Constant:
+0:335            0 (const int)
+0:335        Convert bool to int ( temp highp int)
+0:335          subgroupPartitionedExclusiveOrNV ( global bool, operation at highp)
+0:335            Compare Less Than ( temp bool)
+0:335              direct index ( temp highp int)
+0:335                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:335                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:335                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:335                    Constant:
+0:335                      0 (const int)
+0:335                  Constant:
+0:335                    1 (const int)
+0:335                Constant:
+0:335                  0 (const int)
+0:335              Constant:
+0:335                0 (const int)
+0:335            'ballot' ( temp highp 4-component vector of uint)
+0:336      move second child to first child ( temp highp 2-component vector of int)
+0:336        vector swizzle ( temp highp 2-component vector of int)
+0:336          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:336            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:336              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:336              Constant:
+0:336                3 (const int)
+0:336            Constant:
+0:336              1 (const int)
+0:336          Sequence
+0:336            Constant:
+0:336              0 (const int)
+0:336            Constant:
+0:336              1 (const int)
+0:336        Convert bool to int ( temp highp 2-component vector of int)
+0:336          subgroupPartitionedExclusiveOrNV ( global 2-component vector of bool, operation at highp)
+0:336            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:336              vector swizzle ( temp highp 2-component vector of int)
+0:336                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:336                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:336                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:336                    Constant:
+0:336                      1 (const int)
+0:336                  Constant:
+0:336                    1 (const int)
+0:336                Sequence
+0:336                  Constant:
+0:336                    0 (const int)
+0:336                  Constant:
+0:336                    1 (const int)
+0:336              Constant:
+0:336                0 (const int)
+0:336                0 (const int)
+0:336            'ballot' ( temp highp 4-component vector of uint)
+0:337      move second child to first child ( temp highp 3-component vector of int)
+0:337        vector swizzle ( temp highp 3-component vector of int)
+0:337          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:337            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:337              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:337              Constant:
+0:337                3 (const int)
+0:337            Constant:
+0:337              1 (const int)
+0:337          Sequence
+0:337            Constant:
+0:337              0 (const int)
+0:337            Constant:
+0:337              1 (const int)
+0:337            Constant:
+0:337              2 (const int)
+0:337        Convert bool to int ( temp highp 3-component vector of int)
+0:337          subgroupPartitionedExclusiveOrNV ( global 3-component vector of bool, operation at highp)
+0:337            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:337              vector swizzle ( temp highp 3-component vector of int)
+0:337                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:337                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:337                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:337                    Constant:
+0:337                      1 (const int)
+0:337                  Constant:
+0:337                    1 (const int)
+0:337                Sequence
+0:337                  Constant:
+0:337                    0 (const int)
+0:337                  Constant:
+0:337                    1 (const int)
+0:337                  Constant:
+0:337                    2 (const int)
+0:337              Constant:
+0:337                0 (const int)
+0:337                0 (const int)
+0:337                0 (const int)
+0:337            'ballot' ( temp highp 4-component vector of uint)
+0:338      move second child to first child ( temp highp 4-component vector of int)
+0:338        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:338          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:338            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:338            Constant:
+0:338              3 (const int)
+0:338          Constant:
+0:338            1 (const int)
+0:338        Convert bool to int ( temp highp 4-component vector of int)
+0:338          subgroupPartitionedExclusiveOrNV ( global 4-component vector of bool, operation at highp)
+0:338            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:338              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:338                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:338                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:338                  Constant:
+0:338                    1 (const int)
+0:338                Constant:
+0:338                  1 (const int)
+0:338              Constant:
+0:338                0 (const int)
+0:338                0 (const int)
+0:338                0 (const int)
+0:338                0 (const int)
+0:338            'ballot' ( temp highp 4-component vector of uint)
+0:340      move second child to first child ( temp highp int)
+0:340        direct index ( temp highp int)
+0:340          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:340            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:340              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:340              Constant:
+0:340                3 (const int)
+0:340            Constant:
+0:340              1 (const int)
+0:340          Constant:
+0:340            0 (const int)
+0:340        subgroupPartitionedExclusiveXorNV ( global highp int)
+0:340          direct index ( temp highp int)
+0:340            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:340              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:340                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:340                Constant:
+0:340                  0 (const int)
+0:340              Constant:
+0:340                1 (const int)
+0:340            Constant:
+0:340              0 (const int)
+0:340          'ballot' ( temp highp 4-component vector of uint)
+0:341      move second child to first child ( temp highp 2-component vector of int)
+0:341        vector swizzle ( temp highp 2-component vector of int)
+0:341          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:341            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:341              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:341              Constant:
+0:341                3 (const int)
+0:341            Constant:
+0:341              1 (const int)
+0:341          Sequence
+0:341            Constant:
+0:341              0 (const int)
+0:341            Constant:
+0:341              1 (const int)
+0:341        subgroupPartitionedExclusiveXorNV ( global highp 2-component vector of int)
+0:341          vector swizzle ( temp highp 2-component vector of int)
+0:341            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:341              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:341                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:341                Constant:
+0:341                  1 (const int)
+0:341              Constant:
+0:341                1 (const int)
+0:341            Sequence
+0:341              Constant:
+0:341                0 (const int)
+0:341              Constant:
+0:341                1 (const int)
+0:341          'ballot' ( temp highp 4-component vector of uint)
+0:342      move second child to first child ( temp highp 3-component vector of int)
+0:342        vector swizzle ( temp highp 3-component vector of int)
+0:342          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:342            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:342              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:342              Constant:
+0:342                3 (const int)
+0:342            Constant:
+0:342              1 (const int)
+0:342          Sequence
+0:342            Constant:
+0:342              0 (const int)
+0:342            Constant:
+0:342              1 (const int)
+0:342            Constant:
+0:342              2 (const int)
+0:342        subgroupPartitionedExclusiveXorNV ( global highp 3-component vector of int)
+0:342          vector swizzle ( temp highp 3-component vector of int)
+0:342            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:342              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:342                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:342                Constant:
+0:342                  2 (const int)
+0:342              Constant:
+0:342                1 (const int)
+0:342            Sequence
+0:342              Constant:
+0:342                0 (const int)
+0:342              Constant:
+0:342                1 (const int)
+0:342              Constant:
+0:342                2 (const int)
+0:342          'ballot' ( temp highp 4-component vector of uint)
+0:343      move second child to first child ( temp highp 4-component vector of int)
+0:343        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:343          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:343            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:343            Constant:
+0:343              3 (const int)
+0:343          Constant:
+0:343            1 (const int)
+0:343        subgroupPartitionedExclusiveXorNV ( global highp 4-component vector of int)
+0:343          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:343            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:343              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:343              Constant:
+0:343                3 (const int)
+0:343            Constant:
+0:343              1 (const int)
+0:343          'ballot' ( temp highp 4-component vector of uint)
+0:345      move second child to first child ( temp highp uint)
+0:345        direct index ( temp highp uint)
+0:345          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:345            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:345              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:345              Constant:
+0:345                0 (const int)
+0:345            Constant:
+0:345              2 (const int)
+0:345          Constant:
+0:345            0 (const int)
+0:345        subgroupPartitionedExclusiveXorNV ( global highp uint)
+0:345          direct index ( temp highp uint)
+0:345            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:345              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:345                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:345                Constant:
+0:345                  0 (const int)
+0:345              Constant:
+0:345                2 (const int)
+0:345            Constant:
+0:345              0 (const int)
+0:345          'ballot' ( temp highp 4-component vector of uint)
+0:346      move second child to first child ( temp highp 2-component vector of uint)
+0:346        vector swizzle ( temp highp 2-component vector of uint)
+0:346          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:346            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:346              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:346              Constant:
+0:346                0 (const int)
+0:346            Constant:
+0:346              2 (const int)
+0:346          Sequence
+0:346            Constant:
+0:346              0 (const int)
+0:346            Constant:
+0:346              1 (const int)
+0:346        subgroupPartitionedExclusiveXorNV ( global highp 2-component vector of uint)
+0:346          vector swizzle ( temp highp 2-component vector of uint)
+0:346            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:346              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:346                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:346                Constant:
+0:346                  1 (const int)
+0:346              Constant:
+0:346                2 (const int)
+0:346            Sequence
+0:346              Constant:
+0:346                0 (const int)
+0:346              Constant:
+0:346                1 (const int)
+0:346          'ballot' ( temp highp 4-component vector of uint)
+0:347      move second child to first child ( temp highp 3-component vector of uint)
+0:347        vector swizzle ( temp highp 3-component vector of uint)
+0:347          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:347            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:347              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:347              Constant:
+0:347                0 (const int)
+0:347            Constant:
+0:347              2 (const int)
+0:347          Sequence
+0:347            Constant:
+0:347              0 (const int)
+0:347            Constant:
+0:347              1 (const int)
+0:347            Constant:
+0:347              2 (const int)
+0:347        subgroupPartitionedExclusiveXorNV ( global highp 3-component vector of uint)
+0:347          vector swizzle ( temp highp 3-component vector of uint)
+0:347            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:347              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:347                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:347                Constant:
+0:347                  2 (const int)
+0:347              Constant:
+0:347                2 (const int)
+0:347            Sequence
+0:347              Constant:
+0:347                0 (const int)
+0:347              Constant:
+0:347                1 (const int)
+0:347              Constant:
+0:347                2 (const int)
+0:347          'ballot' ( temp highp 4-component vector of uint)
+0:348      move second child to first child ( temp highp 4-component vector of uint)
+0:348        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:348          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:348            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:348            Constant:
+0:348              0 (const int)
+0:348          Constant:
+0:348            2 (const int)
+0:348        subgroupPartitionedExclusiveXorNV ( global highp 4-component vector of uint)
+0:348          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:348            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:348              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:348              Constant:
+0:348                3 (const int)
+0:348            Constant:
+0:348              2 (const int)
+0:348          'ballot' ( temp highp 4-component vector of uint)
+0:350      move second child to first child ( temp highp int)
+0:350        direct index ( temp highp int)
+0:350          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:350            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:350              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:350              Constant:
+0:350                0 (const int)
+0:350            Constant:
+0:350              1 (const int)
+0:350          Constant:
+0:350            0 (const int)
+0:350        Convert bool to int ( temp highp int)
+0:350          subgroupPartitionedExclusiveXorNV ( global bool, operation at highp)
+0:350            Compare Less Than ( temp bool)
+0:350              direct index ( temp highp int)
+0:350                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:350                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:350                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:350                    Constant:
+0:350                      0 (const int)
+0:350                  Constant:
+0:350                    1 (const int)
+0:350                Constant:
+0:350                  0 (const int)
+0:350              Constant:
+0:350                0 (const int)
+0:350            'ballot' ( temp highp 4-component vector of uint)
+0:351      move second child to first child ( temp highp 2-component vector of int)
+0:351        vector swizzle ( temp highp 2-component vector of int)
+0:351          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:351            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:351              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:351              Constant:
+0:351                0 (const int)
+0:351            Constant:
+0:351              1 (const int)
+0:351          Sequence
+0:351            Constant:
+0:351              0 (const int)
+0:351            Constant:
+0:351              1 (const int)
+0:351        Convert bool to int ( temp highp 2-component vector of int)
+0:351          subgroupPartitionedExclusiveXorNV ( global 2-component vector of bool, operation at highp)
+0:351            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:351              vector swizzle ( temp highp 2-component vector of int)
+0:351                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:351                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:351                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:351                    Constant:
+0:351                      1 (const int)
+0:351                  Constant:
+0:351                    1 (const int)
+0:351                Sequence
+0:351                  Constant:
+0:351                    0 (const int)
+0:351                  Constant:
+0:351                    1 (const int)
+0:351              Constant:
+0:351                0 (const int)
+0:351                0 (const int)
+0:351            'ballot' ( temp highp 4-component vector of uint)
+0:352      move second child to first child ( temp highp 3-component vector of int)
+0:352        vector swizzle ( temp highp 3-component vector of int)
+0:352          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:352            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:352              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:352              Constant:
+0:352                0 (const int)
+0:352            Constant:
+0:352              1 (const int)
+0:352          Sequence
+0:352            Constant:
+0:352              0 (const int)
+0:352            Constant:
+0:352              1 (const int)
+0:352            Constant:
+0:352              2 (const int)
+0:352        Convert bool to int ( temp highp 3-component vector of int)
+0:352          subgroupPartitionedExclusiveXorNV ( global 3-component vector of bool, operation at highp)
+0:352            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:352              vector swizzle ( temp highp 3-component vector of int)
+0:352                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:352                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:352                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:352                    Constant:
+0:352                      1 (const int)
+0:352                  Constant:
+0:352                    1 (const int)
+0:352                Sequence
+0:352                  Constant:
+0:352                    0 (const int)
+0:352                  Constant:
+0:352                    1 (const int)
+0:352                  Constant:
+0:352                    2 (const int)
+0:352              Constant:
+0:352                0 (const int)
+0:352                0 (const int)
+0:352                0 (const int)
+0:352            'ballot' ( temp highp 4-component vector of uint)
+0:353      move second child to first child ( temp highp 4-component vector of int)
+0:353        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:353          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:353            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:353            Constant:
+0:353              0 (const int)
+0:353          Constant:
+0:353            1 (const int)
+0:353        Convert bool to int ( temp highp 4-component vector of int)
+0:353          subgroupPartitionedExclusiveXorNV ( global 4-component vector of bool, operation at highp)
+0:353            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:353              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:353                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:353                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:353                  Constant:
+0:353                    1 (const int)
+0:353                Constant:
+0:353                  1 (const int)
+0:353              Constant:
+0:353                0 (const int)
+0:353                0 (const int)
+0:353                0 (const int)
+0:353                0 (const int)
+0:353            'ballot' ( temp highp 4-component vector of uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_NV_shader_subgroup_partitioned
+local_size = (8, 1, 1)
+0:? Sequence
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp highp uint)
+0:16          'invocation' ( temp highp uint)
+0:16          mod ( temp mediump uint)
+0:16            add ( temp mediump uint)
+0:16              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16            Constant:
+0:16              4 (const uint)
+0:18      Sequence
+0:18        move second child to first child ( temp highp 4-component vector of uint)
+0:18          'ballot' ( temp highp 4-component vector of uint)
+0:18          subgroupPartitionNV ( global highp 4-component vector of uint)
+0:18            'invocation' ( temp highp uint)
+0:20      move second child to first child ( temp highp 4-component vector of uint)
+0:20        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:20          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20            Constant:
+0:20              0 (const int)
+0:20          Constant:
+0:20            2 (const int)
+0:20        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:20          direct index ( temp highp float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                Constant:
+0:20                  0 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:21      move second child to first child ( temp highp 4-component vector of uint)
+0:21        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:21          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            2 (const int)
+0:21        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:21          vector swizzle ( temp highp 2-component vector of float)
+0:21            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21                Constant:
+0:21                  0 (const int)
+0:21              Constant:
+0:21                0 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:22      move second child to first child ( temp highp 4-component vector of uint)
+0:22        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:22          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:22            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:22            Constant:
+0:22              0 (const int)
+0:22          Constant:
+0:22            2 (const int)
+0:22        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:22          vector swizzle ( temp highp 3-component vector of float)
+0:22            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:22              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:22                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:22                Constant:
+0:22                  0 (const int)
+0:22              Constant:
+0:22                0 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:23      move second child to first child ( temp highp 4-component vector of uint)
+0:23        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:23          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23            Constant:
+0:23              0 (const int)
+0:23          Constant:
+0:23            2 (const int)
+0:23        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:23          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              Constant:
+0:23                0 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:25      move second child to first child ( temp highp 4-component vector of uint)
+0:25        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:25          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25            Constant:
+0:25              0 (const int)
+0:25          Constant:
+0:25            2 (const int)
+0:25        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:25          direct index ( temp highp int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                Constant:
+0:25                  0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:26      move second child to first child ( temp highp 4-component vector of uint)
+0:26        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:26          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            Constant:
+0:26              0 (const int)
+0:26          Constant:
+0:26            2 (const int)
+0:26        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:26          vector swizzle ( temp highp 2-component vector of int)
+0:26            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26                Constant:
+0:26                  0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:27      move second child to first child ( temp highp 4-component vector of uint)
+0:27        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:27          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27            Constant:
+0:27              0 (const int)
+0:27          Constant:
+0:27            2 (const int)
+0:27        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:27          vector swizzle ( temp highp 3-component vector of int)
+0:27            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:27              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:27                Constant:
+0:27                  0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:28      move second child to first child ( temp highp 4-component vector of uint)
+0:28        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28            Constant:
+0:28              0 (const int)
+0:28          Constant:
+0:28            2 (const int)
+0:28        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:28          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                0 (const int)
+0:28            Constant:
+0:28              1 (const int)
+0:30      move second child to first child ( temp highp 4-component vector of uint)
+0:30        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30            Constant:
+0:30              0 (const int)
+0:30          Constant:
+0:30            2 (const int)
+0:30        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:30          direct index ( temp highp uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                Constant:
+0:30                  0 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:31      move second child to first child ( temp highp 4-component vector of uint)
+0:31        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            Constant:
+0:31              0 (const int)
+0:31          Constant:
+0:31            2 (const int)
+0:31        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:31          vector swizzle ( temp highp 2-component vector of uint)
+0:31            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31                Constant:
+0:31                  0 (const int)
+0:31              Constant:
+0:31                2 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:32      move second child to first child ( temp highp 4-component vector of uint)
+0:32        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:32          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32            Constant:
+0:32              0 (const int)
+0:32          Constant:
+0:32            2 (const int)
+0:32        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:32          vector swizzle ( temp highp 3-component vector of uint)
+0:32            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:32              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:32                Constant:
+0:32                  0 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:33      move second child to first child ( temp highp 4-component vector of uint)
+0:33        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:33          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33            Constant:
+0:33              0 (const int)
+0:33          Constant:
+0:33            2 (const int)
+0:33        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:33          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:33            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              Constant:
+0:33                0 (const int)
+0:33            Constant:
+0:33              2 (const int)
+0:35      move second child to first child ( temp highp 4-component vector of uint)
+0:35        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:35          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35            Constant:
+0:35              1 (const int)
+0:35          Constant:
+0:35            2 (const int)
+0:35        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:35          Convert int to bool ( temp bool)
+0:35            direct index ( temp highp int)
+0:35              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                  Constant:
+0:35                    0 (const int)
+0:35                Constant:
+0:35                  1 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:36      move second child to first child ( temp highp 4-component vector of uint)
+0:36        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:36          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            Constant:
+0:36              1 (const int)
+0:36          Constant:
+0:36            2 (const int)
+0:36        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:36          Convert int to bool ( temp 2-component vector of bool)
+0:36            vector swizzle ( temp highp 2-component vector of int)
+0:36              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  Constant:
+0:36                    0 (const int)
+0:36                Constant:
+0:36                  1 (const int)
+0:36              Sequence
+0:36                Constant:
+0:36                  0 (const int)
+0:36                Constant:
+0:36                  1 (const int)
+0:37      move second child to first child ( temp highp 4-component vector of uint)
+0:37        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:37          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:37            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:37            Constant:
+0:37              1 (const int)
+0:37          Constant:
+0:37            2 (const int)
+0:37        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:37          Convert int to bool ( temp 3-component vector of bool)
+0:37            vector swizzle ( temp highp 3-component vector of int)
+0:37              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:37                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:37                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:37                  Constant:
+0:37                    0 (const int)
+0:37                Constant:
+0:37                  1 (const int)
+0:37              Sequence
+0:37                Constant:
+0:37                  0 (const int)
+0:37                Constant:
+0:37                  1 (const int)
+0:37                Constant:
+0:37                  2 (const int)
+0:38      move second child to first child ( temp highp 4-component vector of uint)
+0:38        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:38          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38            Constant:
+0:38              1 (const int)
+0:38          Constant:
+0:38            2 (const int)
+0:38        subgroupPartitionNV ( global highp 4-component vector of uint)
+0:38          Convert int to bool ( temp 4-component vector of bool)
+0:38            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                1 (const int)
+0:40      move second child to first child ( temp highp float)
+0:40        direct index ( temp highp float)
+0:40          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupPartitionedAddNV ( global highp float)
+0:40          direct index ( temp highp float)
+0:40            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                Constant:
+0:40                  0 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:40          'ballot' ( temp highp 4-component vector of uint)
+0:41      move second child to first child ( temp highp 2-component vector of float)
+0:41        vector swizzle ( temp highp 2-component vector of float)
+0:41          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              Constant:
+0:41                1 (const int)
+0:41            Constant:
+0:41              0 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupPartitionedAddNV ( global highp 2-component vector of float)
+0:41          vector swizzle ( temp highp 2-component vector of float)
+0:41            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41                Constant:
+0:41                  1 (const int)
+0:41              Constant:
+0:41                0 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41          'ballot' ( temp highp 4-component vector of uint)
+0:42      move second child to first child ( temp highp 3-component vector of float)
+0:42        vector swizzle ( temp highp 3-component vector of float)
+0:42          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:42            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:42              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:42              Constant:
+0:42                1 (const int)
+0:42            Constant:
+0:42              0 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupPartitionedAddNV ( global highp 3-component vector of float)
+0:42          vector swizzle ( temp highp 3-component vector of float)
+0:42            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:42              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:42                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:42                Constant:
+0:42                  2 (const int)
+0:42              Constant:
+0:42                0 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:42          'ballot' ( temp highp 4-component vector of uint)
+0:43      move second child to first child ( temp highp 4-component vector of float)
+0:43        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:43          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43            Constant:
+0:43              1 (const int)
+0:43          Constant:
+0:43            0 (const int)
+0:43        subgroupPartitionedAddNV ( global highp 4-component vector of float)
+0:43          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:43            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              Constant:
+0:43                3 (const int)
+0:43            Constant:
+0:43              0 (const int)
+0:43          'ballot' ( temp highp 4-component vector of uint)
+0:45      move second child to first child ( temp highp int)
+0:45        direct index ( temp highp int)
+0:45          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              Constant:
+0:45                1 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupPartitionedAddNV ( global highp int)
+0:45          direct index ( temp highp int)
+0:45            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                Constant:
+0:45                  0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:45          'ballot' ( temp highp 4-component vector of uint)
+0:46      move second child to first child ( temp highp 2-component vector of int)
+0:46        vector swizzle ( temp highp 2-component vector of int)
+0:46          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              Constant:
+0:46                1 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupPartitionedAddNV ( global highp 2-component vector of int)
+0:46          vector swizzle ( temp highp 2-component vector of int)
+0:46            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46                Constant:
+0:46                  1 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46          'ballot' ( temp highp 4-component vector of uint)
+0:47      move second child to first child ( temp highp 3-component vector of int)
+0:47        vector swizzle ( temp highp 3-component vector of int)
+0:47          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:47            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:47              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:47              Constant:
+0:47                1 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupPartitionedAddNV ( global highp 3-component vector of int)
+0:47          vector swizzle ( temp highp 3-component vector of int)
+0:47            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:47              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:47                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:47                Constant:
+0:47                  2 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47          'ballot' ( temp highp 4-component vector of uint)
+0:48      move second child to first child ( temp highp 4-component vector of int)
+0:48        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48            Constant:
+0:48              1 (const int)
+0:48          Constant:
+0:48            1 (const int)
+0:48        subgroupPartitionedAddNV ( global highp 4-component vector of int)
+0:48          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              Constant:
+0:48                3 (const int)
+0:48            Constant:
+0:48              1 (const int)
+0:48          'ballot' ( temp highp 4-component vector of uint)
+0:50      move second child to first child ( temp highp uint)
+0:50        direct index ( temp highp uint)
+0:50          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              Constant:
+0:50                1 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupPartitionedAddNV ( global highp uint)
+0:50          direct index ( temp highp uint)
+0:50            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                Constant:
+0:50                  0 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:50          'ballot' ( temp highp 4-component vector of uint)
+0:51      move second child to first child ( temp highp 2-component vector of uint)
+0:51        vector swizzle ( temp highp 2-component vector of uint)
+0:51          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              Constant:
+0:51                1 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupPartitionedAddNV ( global highp 2-component vector of uint)
+0:51          vector swizzle ( temp highp 2-component vector of uint)
+0:51            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51                Constant:
+0:51                  1 (const int)
+0:51              Constant:
+0:51                2 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51          'ballot' ( temp highp 4-component vector of uint)
+0:52      move second child to first child ( temp highp 3-component vector of uint)
+0:52        vector swizzle ( temp highp 3-component vector of uint)
+0:52          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:52            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:52              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:52              Constant:
+0:52                1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupPartitionedAddNV ( global highp 3-component vector of uint)
+0:52          vector swizzle ( temp highp 3-component vector of uint)
+0:52            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:52              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:52                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:52                Constant:
+0:52                  2 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:52          'ballot' ( temp highp 4-component vector of uint)
+0:53      move second child to first child ( temp highp 4-component vector of uint)
+0:53        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:53          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53            Constant:
+0:53              1 (const int)
+0:53          Constant:
+0:53            2 (const int)
+0:53        subgroupPartitionedAddNV ( global highp 4-component vector of uint)
+0:53          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:53            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              Constant:
+0:53                3 (const int)
+0:53            Constant:
+0:53              2 (const int)
+0:53          'ballot' ( temp highp 4-component vector of uint)
+0:55      move second child to first child ( temp highp float)
+0:55        direct index ( temp highp float)
+0:55          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:55            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              Constant:
+0:55                2 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:55          Constant:
+0:55            0 (const int)
+0:55        subgroupPartitionedMulNV ( global highp float)
+0:55          direct index ( temp highp float)
+0:55            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                Constant:
+0:55                  0 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:55          'ballot' ( temp highp 4-component vector of uint)
+0:56      move second child to first child ( temp highp 2-component vector of float)
+0:56        vector swizzle ( temp highp 2-component vector of float)
+0:56          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:56            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56              Constant:
+0:56                2 (const int)
+0:56            Constant:
+0:56              0 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56        subgroupPartitionedMulNV ( global highp 2-component vector of float)
+0:56          vector swizzle ( temp highp 2-component vector of float)
+0:56            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:56              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                Constant:
+0:56                  1 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:56          'ballot' ( temp highp 4-component vector of uint)
+0:57      move second child to first child ( temp highp 3-component vector of float)
+0:57        vector swizzle ( temp highp 3-component vector of float)
+0:57          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:57            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57              Constant:
+0:57                2 (const int)
+0:57            Constant:
+0:57              0 (const int)
+0:57          Sequence
+0:57            Constant:
+0:57              0 (const int)
+0:57            Constant:
+0:57              1 (const int)
+0:57            Constant:
+0:57              2 (const int)
+0:57        subgroupPartitionedMulNV ( global highp 3-component vector of float)
+0:57          vector swizzle ( temp highp 3-component vector of float)
+0:57            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:57              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:57                Constant:
+0:57                  2 (const int)
+0:57              Constant:
+0:57                0 (const int)
+0:57            Sequence
+0:57              Constant:
+0:57                0 (const int)
+0:57              Constant:
+0:57                1 (const int)
+0:57              Constant:
+0:57                2 (const int)
+0:57          'ballot' ( temp highp 4-component vector of uint)
+0:58      move second child to first child ( temp highp 4-component vector of float)
+0:58        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58            Constant:
+0:58              2 (const int)
+0:58          Constant:
+0:58            0 (const int)
+0:58        subgroupPartitionedMulNV ( global highp 4-component vector of float)
+0:58          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              Constant:
+0:58                3 (const int)
+0:58            Constant:
+0:58              0 (const int)
+0:58          'ballot' ( temp highp 4-component vector of uint)
+0:60      move second child to first child ( temp highp int)
+0:60        direct index ( temp highp int)
+0:60          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              Constant:
+0:60                2 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60          Constant:
+0:60            0 (const int)
+0:60        subgroupPartitionedMulNV ( global highp int)
+0:60          direct index ( temp highp int)
+0:60            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                Constant:
+0:60                  0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60            Constant:
+0:60              0 (const int)
+0:60          'ballot' ( temp highp 4-component vector of uint)
+0:61      move second child to first child ( temp highp 2-component vector of int)
+0:61        vector swizzle ( temp highp 2-component vector of int)
+0:61          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61              Constant:
+0:61                2 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61        subgroupPartitionedMulNV ( global highp 2-component vector of int)
+0:61          vector swizzle ( temp highp 2-component vector of int)
+0:61            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61                Constant:
+0:61                  1 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61          'ballot' ( temp highp 4-component vector of uint)
+0:62      move second child to first child ( temp highp 3-component vector of int)
+0:62        vector swizzle ( temp highp 3-component vector of int)
+0:62          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:62            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62              Constant:
+0:62                2 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62            Constant:
+0:62              2 (const int)
+0:62        subgroupPartitionedMulNV ( global highp 3-component vector of int)
+0:62          vector swizzle ( temp highp 3-component vector of int)
+0:62            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:62              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:62                Constant:
+0:62                  2 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62            Sequence
+0:62              Constant:
+0:62                0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62              Constant:
+0:62                2 (const int)
+0:62          'ballot' ( temp highp 4-component vector of uint)
+0:63      move second child to first child ( temp highp 4-component vector of int)
+0:63        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63            Constant:
+0:63              2 (const int)
+0:63          Constant:
+0:63            1 (const int)
+0:63        subgroupPartitionedMulNV ( global highp 4-component vector of int)
+0:63          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63              Constant:
+0:63                3 (const int)
+0:63            Constant:
+0:63              1 (const int)
+0:63          'ballot' ( temp highp 4-component vector of uint)
+0:65      move second child to first child ( temp highp uint)
+0:65        direct index ( temp highp uint)
+0:65          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:65            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65              Constant:
+0:65                2 (const int)
+0:65            Constant:
+0:65              2 (const int)
+0:65          Constant:
+0:65            0 (const int)
+0:65        subgroupPartitionedMulNV ( global highp uint)
+0:65          direct index ( temp highp uint)
+0:65            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:65              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                Constant:
+0:65                  0 (const int)
+0:65              Constant:
+0:65                2 (const int)
+0:65            Constant:
+0:65              0 (const int)
+0:65          'ballot' ( temp highp 4-component vector of uint)
+0:66      move second child to first child ( temp highp 2-component vector of uint)
+0:66        vector swizzle ( temp highp 2-component vector of uint)
+0:66          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:66            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66              Constant:
+0:66                2 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66        subgroupPartitionedMulNV ( global highp 2-component vector of uint)
+0:66          vector swizzle ( temp highp 2-component vector of uint)
+0:66            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:66              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66                Constant:
+0:66                  1 (const int)
+0:66              Constant:
+0:66                2 (const int)
+0:66            Sequence
+0:66              Constant:
+0:66                0 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:66          'ballot' ( temp highp 4-component vector of uint)
+0:67      move second child to first child ( temp highp 3-component vector of uint)
+0:67        vector swizzle ( temp highp 3-component vector of uint)
+0:67          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:67            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67              Constant:
+0:67                2 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67          Sequence
+0:67            Constant:
+0:67              0 (const int)
+0:67            Constant:
+0:67              1 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67        subgroupPartitionedMulNV ( global highp 3-component vector of uint)
+0:67          vector swizzle ( temp highp 3-component vector of uint)
+0:67            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:67              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:67                Constant:
+0:67                  2 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:67            Sequence
+0:67              Constant:
+0:67                0 (const int)
+0:67              Constant:
+0:67                1 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:67          'ballot' ( temp highp 4-component vector of uint)
+0:68      move second child to first child ( temp highp 4-component vector of uint)
+0:68        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68            Constant:
+0:68              2 (const int)
+0:68          Constant:
+0:68            2 (const int)
+0:68        subgroupPartitionedMulNV ( global highp 4-component vector of uint)
+0:68          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68              Constant:
+0:68                3 (const int)
+0:68            Constant:
+0:68              2 (const int)
+0:68          'ballot' ( temp highp 4-component vector of uint)
+0:70      move second child to first child ( temp highp float)
+0:70        direct index ( temp highp float)
+0:70          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:70            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70              Constant:
+0:70                2 (const int)
+0:70            Constant:
+0:70              0 (const int)
+0:70          Constant:
+0:70            0 (const int)
+0:70        subgroupPartitionedMinNV ( global highp float)
+0:70          direct index ( temp highp float)
+0:70            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:70              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                Constant:
+0:70                  0 (const int)
+0:70              Constant:
+0:70                0 (const int)
+0:70            Constant:
+0:70              0 (const int)
+0:70          'ballot' ( temp highp 4-component vector of uint)
+0:71      move second child to first child ( temp highp 2-component vector of float)
+0:71        vector swizzle ( temp highp 2-component vector of float)
+0:71          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:71            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71              Constant:
+0:71                2 (const int)
+0:71            Constant:
+0:71              0 (const int)
+0:71          Sequence
+0:71            Constant:
+0:71              0 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71        subgroupPartitionedMinNV ( global highp 2-component vector of float)
+0:71          vector swizzle ( temp highp 2-component vector of float)
+0:71            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:71              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71                Constant:
+0:71                  1 (const int)
+0:71              Constant:
+0:71                0 (const int)
+0:71            Sequence
+0:71              Constant:
+0:71                0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:71          'ballot' ( temp highp 4-component vector of uint)
+0:72      move second child to first child ( temp highp 3-component vector of float)
+0:72        vector swizzle ( temp highp 3-component vector of float)
+0:72          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:72            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72              Constant:
+0:72                2 (const int)
+0:72            Constant:
+0:72              0 (const int)
+0:72          Sequence
+0:72            Constant:
+0:72              0 (const int)
+0:72            Constant:
+0:72              1 (const int)
+0:72            Constant:
+0:72              2 (const int)
+0:72        subgroupPartitionedMinNV ( global highp 3-component vector of float)
+0:72          vector swizzle ( temp highp 3-component vector of float)
+0:72            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:72              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:72                Constant:
+0:72                  2 (const int)
+0:72              Constant:
+0:72                0 (const int)
+0:72            Sequence
+0:72              Constant:
+0:72                0 (const int)
+0:72              Constant:
+0:72                1 (const int)
+0:72              Constant:
+0:72                2 (const int)
+0:72          'ballot' ( temp highp 4-component vector of uint)
+0:73      move second child to first child ( temp highp 4-component vector of float)
+0:73        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:73          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73            Constant:
+0:73              2 (const int)
+0:73          Constant:
+0:73            0 (const int)
+0:73        subgroupPartitionedMinNV ( global highp 4-component vector of float)
+0:73          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:73            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73              Constant:
+0:73                3 (const int)
+0:73            Constant:
+0:73              0 (const int)
+0:73          'ballot' ( temp highp 4-component vector of uint)
+0:75      move second child to first child ( temp highp int)
+0:75        direct index ( temp highp int)
+0:75          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:75            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75              Constant:
+0:75                3 (const int)
+0:75            Constant:
+0:75              1 (const int)
+0:75          Constant:
+0:75            0 (const int)
+0:75        subgroupPartitionedMinNV ( global highp int)
+0:75          direct index ( temp highp int)
+0:75            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:75              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75                Constant:
+0:75                  0 (const int)
+0:75              Constant:
+0:75                1 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:75          'ballot' ( temp highp 4-component vector of uint)
+0:76      move second child to first child ( temp highp 2-component vector of int)
+0:76        vector swizzle ( temp highp 2-component vector of int)
+0:76          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:76            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76              Constant:
+0:76                3 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76          Sequence
+0:76            Constant:
+0:76              0 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76        subgroupPartitionedMinNV ( global highp 2-component vector of int)
+0:76          vector swizzle ( temp highp 2-component vector of int)
+0:76            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:76              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76                Constant:
+0:76                  1 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:76            Sequence
+0:76              Constant:
+0:76                0 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:76          'ballot' ( temp highp 4-component vector of uint)
+0:77      move second child to first child ( temp highp 3-component vector of int)
+0:77        vector swizzle ( temp highp 3-component vector of int)
+0:77          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:77            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:77              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:77              Constant:
+0:77                3 (const int)
+0:77            Constant:
+0:77              1 (const int)
+0:77          Sequence
+0:77            Constant:
+0:77              0 (const int)
+0:77            Constant:
+0:77              1 (const int)
+0:77            Constant:
+0:77              2 (const int)
+0:77        subgroupPartitionedMinNV ( global highp 3-component vector of int)
+0:77          vector swizzle ( temp highp 3-component vector of int)
+0:77            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:77              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:77                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:77                Constant:
+0:77                  2 (const int)
+0:77              Constant:
+0:77                1 (const int)
+0:77            Sequence
+0:77              Constant:
+0:77                0 (const int)
+0:77              Constant:
+0:77                1 (const int)
+0:77              Constant:
+0:77                2 (const int)
+0:77          'ballot' ( temp highp 4-component vector of uint)
+0:78      move second child to first child ( temp highp 4-component vector of int)
+0:78        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78            Constant:
+0:78              3 (const int)
+0:78          Constant:
+0:78            1 (const int)
+0:78        subgroupPartitionedMinNV ( global highp 4-component vector of int)
+0:78          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:78            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78              Constant:
+0:78                3 (const int)
+0:78            Constant:
+0:78              1 (const int)
+0:78          'ballot' ( temp highp 4-component vector of uint)
+0:80      move second child to first child ( temp highp uint)
+0:80        direct index ( temp highp uint)
+0:80          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:80            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80              Constant:
+0:80                3 (const int)
+0:80            Constant:
+0:80              2 (const int)
+0:80          Constant:
+0:80            0 (const int)
+0:80        subgroupPartitionedMinNV ( global highp uint)
+0:80          direct index ( temp highp uint)
+0:80            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:80              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80                Constant:
+0:80                  0 (const int)
+0:80              Constant:
+0:80                2 (const int)
+0:80            Constant:
+0:80              0 (const int)
+0:80          'ballot' ( temp highp 4-component vector of uint)
+0:81      move second child to first child ( temp highp 2-component vector of uint)
+0:81        vector swizzle ( temp highp 2-component vector of uint)
+0:81          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:81            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81              Constant:
+0:81                3 (const int)
+0:81            Constant:
+0:81              2 (const int)
+0:81          Sequence
+0:81            Constant:
+0:81              0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81        subgroupPartitionedMinNV ( global highp 2-component vector of uint)
+0:81          vector swizzle ( temp highp 2-component vector of uint)
+0:81            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:81              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81                Constant:
+0:81                  1 (const int)
+0:81              Constant:
+0:81                2 (const int)
+0:81            Sequence
+0:81              Constant:
+0:81                0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81          'ballot' ( temp highp 4-component vector of uint)
+0:82      move second child to first child ( temp highp 3-component vector of uint)
+0:82        vector swizzle ( temp highp 3-component vector of uint)
+0:82          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:82            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:82              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:82              Constant:
+0:82                3 (const int)
+0:82            Constant:
+0:82              2 (const int)
+0:82          Sequence
+0:82            Constant:
+0:82              0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82            Constant:
+0:82              2 (const int)
+0:82        subgroupPartitionedMinNV ( global highp 3-component vector of uint)
+0:82          vector swizzle ( temp highp 3-component vector of uint)
+0:82            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:82              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:82                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:82                Constant:
+0:82                  2 (const int)
+0:82              Constant:
+0:82                2 (const int)
+0:82            Sequence
+0:82              Constant:
+0:82                0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82              Constant:
+0:82                2 (const int)
+0:82          'ballot' ( temp highp 4-component vector of uint)
+0:83      move second child to first child ( temp highp 4-component vector of uint)
+0:83        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83            Constant:
+0:83              3 (const int)
+0:83          Constant:
+0:83            2 (const int)
+0:83        subgroupPartitionedMinNV ( global highp 4-component vector of uint)
+0:83          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:83            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83              Constant:
+0:83                3 (const int)
+0:83            Constant:
+0:83              2 (const int)
+0:83          'ballot' ( temp highp 4-component vector of uint)
+0:85      move second child to first child ( temp highp float)
+0:85        direct index ( temp highp float)
+0:85          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:85            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85              Constant:
+0:85                3 (const int)
+0:85            Constant:
+0:85              0 (const int)
+0:85          Constant:
+0:85            0 (const int)
+0:85        subgroupPartitionedMaxNV ( global highp float)
+0:85          direct index ( temp highp float)
+0:85            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:85              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85                Constant:
+0:85                  0 (const int)
+0:85              Constant:
+0:85                0 (const int)
+0:85            Constant:
+0:85              0 (const int)
+0:85          'ballot' ( temp highp 4-component vector of uint)
+0:86      move second child to first child ( temp highp 2-component vector of float)
+0:86        vector swizzle ( temp highp 2-component vector of float)
+0:86          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:86            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86              Constant:
+0:86                3 (const int)
+0:86            Constant:
+0:86              0 (const int)
+0:86          Sequence
+0:86            Constant:
+0:86              0 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:86        subgroupPartitionedMaxNV ( global highp 2-component vector of float)
+0:86          vector swizzle ( temp highp 2-component vector of float)
+0:86            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:86              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86                Constant:
+0:86                  1 (const int)
+0:86              Constant:
+0:86                0 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86          'ballot' ( temp highp 4-component vector of uint)
+0:87      move second child to first child ( temp highp 3-component vector of float)
+0:87        vector swizzle ( temp highp 3-component vector of float)
+0:87          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:87            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:87              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:87              Constant:
+0:87                3 (const int)
+0:87            Constant:
+0:87              0 (const int)
+0:87          Sequence
+0:87            Constant:
+0:87              0 (const int)
+0:87            Constant:
+0:87              1 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87        subgroupPartitionedMaxNV ( global highp 3-component vector of float)
+0:87          vector swizzle ( temp highp 3-component vector of float)
+0:87            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:87              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:87                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:87                Constant:
+0:87                  2 (const int)
+0:87              Constant:
+0:87                0 (const int)
+0:87            Sequence
+0:87              Constant:
+0:87                0 (const int)
+0:87              Constant:
+0:87                1 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:87          'ballot' ( temp highp 4-component vector of uint)
+0:88      move second child to first child ( temp highp 4-component vector of float)
+0:88        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:88          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88            Constant:
+0:88              3 (const int)
+0:88          Constant:
+0:88            0 (const int)
+0:88        subgroupPartitionedMaxNV ( global highp 4-component vector of float)
+0:88          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:88            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88              Constant:
+0:88                3 (const int)
+0:88            Constant:
+0:88              0 (const int)
+0:88          'ballot' ( temp highp 4-component vector of uint)
+0:90      move second child to first child ( temp highp int)
+0:90        direct index ( temp highp int)
+0:90          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90              Constant:
+0:90                0 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90          Constant:
+0:90            0 (const int)
+0:90        subgroupPartitionedMaxNV ( global highp int)
+0:90          direct index ( temp highp int)
+0:90            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:90              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90                Constant:
+0:90                  0 (const int)
+0:90              Constant:
+0:90                1 (const int)
+0:90            Constant:
+0:90              0 (const int)
+0:90          'ballot' ( temp highp 4-component vector of uint)
+0:91      move second child to first child ( temp highp 2-component vector of int)
+0:91        vector swizzle ( temp highp 2-component vector of int)
+0:91          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91              Constant:
+0:91                0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91          Sequence
+0:91            Constant:
+0:91              0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91        subgroupPartitionedMaxNV ( global highp 2-component vector of int)
+0:91          vector swizzle ( temp highp 2-component vector of int)
+0:91            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:91              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91                Constant:
+0:91                  1 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:91            Sequence
+0:91              Constant:
+0:91                0 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:91          'ballot' ( temp highp 4-component vector of uint)
+0:92      move second child to first child ( temp highp 3-component vector of int)
+0:92        vector swizzle ( temp highp 3-component vector of int)
+0:92          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:92            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:92              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:92              Constant:
+0:92                0 (const int)
+0:92            Constant:
+0:92              1 (const int)
+0:92          Sequence
+0:92            Constant:
+0:92              0 (const int)
+0:92            Constant:
+0:92              1 (const int)
+0:92            Constant:
+0:92              2 (const int)
+0:92        subgroupPartitionedMaxNV ( global highp 3-component vector of int)
+0:92          vector swizzle ( temp highp 3-component vector of int)
+0:92            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:92              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:92                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:92                Constant:
+0:92                  2 (const int)
+0:92              Constant:
+0:92                1 (const int)
+0:92            Sequence
+0:92              Constant:
+0:92                0 (const int)
+0:92              Constant:
+0:92                1 (const int)
+0:92              Constant:
+0:92                2 (const int)
+0:92          'ballot' ( temp highp 4-component vector of uint)
+0:93      move second child to first child ( temp highp 4-component vector of int)
+0:93        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93            Constant:
+0:93              0 (const int)
+0:93          Constant:
+0:93            1 (const int)
+0:93        subgroupPartitionedMaxNV ( global highp 4-component vector of int)
+0:93          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93              Constant:
+0:93                3 (const int)
+0:93            Constant:
+0:93              1 (const int)
+0:93          'ballot' ( temp highp 4-component vector of uint)
+0:95      move second child to first child ( temp highp uint)
+0:95        direct index ( temp highp uint)
+0:95          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:95            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95              Constant:
+0:95                0 (const int)
+0:95            Constant:
+0:95              2 (const int)
+0:95          Constant:
+0:95            0 (const int)
+0:95        subgroupPartitionedMaxNV ( global highp uint)
+0:95          direct index ( temp highp uint)
+0:95            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:95              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95                Constant:
+0:95                  0 (const int)
+0:95              Constant:
+0:95                2 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:95          'ballot' ( temp highp 4-component vector of uint)
+0:96      move second child to first child ( temp highp 2-component vector of uint)
+0:96        vector swizzle ( temp highp 2-component vector of uint)
+0:96          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:96            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96              Constant:
+0:96                0 (const int)
+0:96            Constant:
+0:96              2 (const int)
+0:96          Sequence
+0:96            Constant:
+0:96              0 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96        subgroupPartitionedMaxNV ( global highp 2-component vector of uint)
+0:96          vector swizzle ( temp highp 2-component vector of uint)
+0:96            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:96              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96                Constant:
+0:96                  1 (const int)
+0:96              Constant:
+0:96                2 (const int)
+0:96            Sequence
+0:96              Constant:
+0:96                0 (const int)
+0:96              Constant:
+0:96                1 (const int)
+0:96          'ballot' ( temp highp 4-component vector of uint)
+0:97      move second child to first child ( temp highp 3-component vector of uint)
+0:97        vector swizzle ( temp highp 3-component vector of uint)
+0:97          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:97            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:97              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:97              Constant:
+0:97                0 (const int)
+0:97            Constant:
+0:97              2 (const int)
+0:97          Sequence
+0:97            Constant:
+0:97              0 (const int)
+0:97            Constant:
+0:97              1 (const int)
+0:97            Constant:
+0:97              2 (const int)
+0:97        subgroupPartitionedMaxNV ( global highp 3-component vector of uint)
+0:97          vector swizzle ( temp highp 3-component vector of uint)
+0:97            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:97              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:97                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:97                Constant:
+0:97                  2 (const int)
+0:97              Constant:
+0:97                2 (const int)
+0:97            Sequence
+0:97              Constant:
+0:97                0 (const int)
+0:97              Constant:
+0:97                1 (const int)
+0:97              Constant:
+0:97                2 (const int)
+0:97          'ballot' ( temp highp 4-component vector of uint)
+0:98      move second child to first child ( temp highp 4-component vector of uint)
+0:98        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98            Constant:
+0:98              0 (const int)
+0:98          Constant:
+0:98            2 (const int)
+0:98        subgroupPartitionedMaxNV ( global highp 4-component vector of uint)
+0:98          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:98            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:98              Constant:
+0:98                3 (const int)
+0:98            Constant:
+0:98              2 (const int)
+0:98          'ballot' ( temp highp 4-component vector of uint)
+0:100      move second child to first child ( temp highp int)
+0:100        direct index ( temp highp int)
+0:100          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:100            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100              Constant:
+0:100                0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100          Constant:
+0:100            0 (const int)
+0:100        subgroupPartitionedAndNV ( global highp int)
+0:100          direct index ( temp highp int)
+0:100            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:100              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:100                Constant:
+0:100                  0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100            Constant:
+0:100              0 (const int)
+0:100          'ballot' ( temp highp 4-component vector of uint)
+0:101      move second child to first child ( temp highp 2-component vector of int)
+0:101        vector swizzle ( temp highp 2-component vector of int)
+0:101          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:101            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101              Constant:
+0:101                0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101          Sequence
+0:101            Constant:
+0:101              0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101        subgroupPartitionedAndNV ( global highp 2-component vector of int)
+0:101          vector swizzle ( temp highp 2-component vector of int)
+0:101            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:101              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:101                Constant:
+0:101                  1 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101            Sequence
+0:101              Constant:
+0:101                0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101          'ballot' ( temp highp 4-component vector of uint)
+0:102      move second child to first child ( temp highp 3-component vector of int)
+0:102        vector swizzle ( temp highp 3-component vector of int)
+0:102          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:102            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:102              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:102              Constant:
+0:102                0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102          Sequence
+0:102            Constant:
+0:102              0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102            Constant:
+0:102              2 (const int)
+0:102        subgroupPartitionedAndNV ( global highp 3-component vector of int)
+0:102          vector swizzle ( temp highp 3-component vector of int)
+0:102            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:102              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:102                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:102                Constant:
+0:102                  2 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102            Sequence
+0:102              Constant:
+0:102                0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102              Constant:
+0:102                2 (const int)
+0:102          'ballot' ( temp highp 4-component vector of uint)
+0:103      move second child to first child ( temp highp 4-component vector of int)
+0:103        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103            Constant:
+0:103              0 (const int)
+0:103          Constant:
+0:103            1 (const int)
+0:103        subgroupPartitionedAndNV ( global highp 4-component vector of int)
+0:103          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:103            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:103              Constant:
+0:103                3 (const int)
+0:103            Constant:
+0:103              1 (const int)
+0:103          'ballot' ( temp highp 4-component vector of uint)
+0:105      move second child to first child ( temp highp uint)
+0:105        direct index ( temp highp uint)
+0:105          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:105            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105              Constant:
+0:105                1 (const int)
+0:105            Constant:
+0:105              2 (const int)
+0:105          Constant:
+0:105            0 (const int)
+0:105        subgroupPartitionedAndNV ( global highp uint)
+0:105          direct index ( temp highp uint)
+0:105            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:105              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:105                Constant:
+0:105                  0 (const int)
+0:105              Constant:
+0:105                2 (const int)
+0:105            Constant:
+0:105              0 (const int)
+0:105          'ballot' ( temp highp 4-component vector of uint)
+0:106      move second child to first child ( temp highp 2-component vector of uint)
+0:106        vector swizzle ( temp highp 2-component vector of uint)
+0:106          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:106            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106              Constant:
+0:106                1 (const int)
+0:106            Constant:
+0:106              2 (const int)
+0:106          Sequence
+0:106            Constant:
+0:106              0 (const int)
+0:106            Constant:
+0:106              1 (const int)
+0:106        subgroupPartitionedAndNV ( global highp 2-component vector of uint)
+0:106          vector swizzle ( temp highp 2-component vector of uint)
+0:106            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:106              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:106                Constant:
+0:106                  1 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:106            Sequence
+0:106              Constant:
+0:106                0 (const int)
+0:106              Constant:
+0:106                1 (const int)
+0:106          'ballot' ( temp highp 4-component vector of uint)
+0:107      move second child to first child ( temp highp 3-component vector of uint)
+0:107        vector swizzle ( temp highp 3-component vector of uint)
+0:107          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:107            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:107              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:107              Constant:
+0:107                1 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107          Sequence
+0:107            Constant:
+0:107              0 (const int)
+0:107            Constant:
+0:107              1 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107        subgroupPartitionedAndNV ( global highp 3-component vector of uint)
+0:107          vector swizzle ( temp highp 3-component vector of uint)
+0:107            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:107              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:107                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:107                Constant:
+0:107                  2 (const int)
+0:107              Constant:
+0:107                2 (const int)
+0:107            Sequence
+0:107              Constant:
+0:107                0 (const int)
+0:107              Constant:
+0:107                1 (const int)
+0:107              Constant:
+0:107                2 (const int)
+0:107          'ballot' ( temp highp 4-component vector of uint)
+0:108      move second child to first child ( temp highp 4-component vector of uint)
+0:108        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:108          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108            Constant:
+0:108              1 (const int)
+0:108          Constant:
+0:108            2 (const int)
+0:108        subgroupPartitionedAndNV ( global highp 4-component vector of uint)
+0:108          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:108            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:108              Constant:
+0:108                3 (const int)
+0:108            Constant:
+0:108              2 (const int)
+0:108          'ballot' ( temp highp 4-component vector of uint)
+0:110      move second child to first child ( temp highp int)
+0:110        direct index ( temp highp int)
+0:110          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110              Constant:
+0:110                1 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110          Constant:
+0:110            0 (const int)
+0:110        Convert bool to int ( temp highp int)
+0:110          subgroupPartitionedAndNV ( global bool, operation at highp)
+0:110            Compare Less Than ( temp bool)
+0:110              direct index ( temp highp int)
+0:110                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:110                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:110                    Constant:
+0:110                      0 (const int)
+0:110                  Constant:
+0:110                    1 (const int)
+0:110                Constant:
+0:110                  0 (const int)
+0:110              Constant:
+0:110                0 (const int)
+0:110            'ballot' ( temp highp 4-component vector of uint)
+0:111      move second child to first child ( temp highp 2-component vector of int)
+0:111        vector swizzle ( temp highp 2-component vector of int)
+0:111          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111              Constant:
+0:111                1 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111          Sequence
+0:111            Constant:
+0:111              0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111        Convert bool to int ( temp highp 2-component vector of int)
+0:111          subgroupPartitionedAndNV ( global 2-component vector of bool, operation at highp)
+0:111            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:111              vector swizzle ( temp highp 2-component vector of int)
+0:111                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:111                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:111                    Constant:
+0:111                      1 (const int)
+0:111                  Constant:
+0:111                    1 (const int)
+0:111                Sequence
+0:111                  Constant:
+0:111                    0 (const int)
+0:111                  Constant:
+0:111                    1 (const int)
+0:111              Constant:
+0:111                0 (const int)
+0:111                0 (const int)
+0:111            'ballot' ( temp highp 4-component vector of uint)
+0:112      move second child to first child ( temp highp 3-component vector of int)
+0:112        vector swizzle ( temp highp 3-component vector of int)
+0:112          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:112            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:112              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:112              Constant:
+0:112                1 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112          Sequence
+0:112            Constant:
+0:112              0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112            Constant:
+0:112              2 (const int)
+0:112        Convert bool to int ( temp highp 3-component vector of int)
+0:112          subgroupPartitionedAndNV ( global 3-component vector of bool, operation at highp)
+0:112            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:112              vector swizzle ( temp highp 3-component vector of int)
+0:112                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:112                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:112                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:112                    Constant:
+0:112                      1 (const int)
+0:112                  Constant:
+0:112                    1 (const int)
+0:112                Sequence
+0:112                  Constant:
+0:112                    0 (const int)
+0:112                  Constant:
+0:112                    1 (const int)
+0:112                  Constant:
+0:112                    2 (const int)
+0:112              Constant:
+0:112                0 (const int)
+0:112                0 (const int)
+0:112                0 (const int)
+0:112            'ballot' ( temp highp 4-component vector of uint)
+0:113      move second child to first child ( temp highp 4-component vector of int)
+0:113        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:113          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113            Constant:
+0:113              1 (const int)
+0:113          Constant:
+0:113            1 (const int)
+0:113        Convert bool to int ( temp highp 4-component vector of int)
+0:113          subgroupPartitionedAndNV ( global 4-component vector of bool, operation at highp)
+0:113            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:113              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:113                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:113                  Constant:
+0:113                    1 (const int)
+0:113                Constant:
+0:113                  1 (const int)
+0:113              Constant:
+0:113                0 (const int)
+0:113                0 (const int)
+0:113                0 (const int)
+0:113                0 (const int)
+0:113            'ballot' ( temp highp 4-component vector of uint)
+0:115      move second child to first child ( temp highp int)
+0:115        direct index ( temp highp int)
+0:115          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:115            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115              Constant:
+0:115                1 (const int)
+0:115            Constant:
+0:115              1 (const int)
+0:115          Constant:
+0:115            0 (const int)
+0:115        subgroupPartitionedOrNV ( global highp int)
+0:115          direct index ( temp highp int)
+0:115            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:115              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:115                Constant:
+0:115                  0 (const int)
+0:115              Constant:
+0:115                1 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:115          'ballot' ( temp highp 4-component vector of uint)
+0:116      move second child to first child ( temp highp 2-component vector of int)
+0:116        vector swizzle ( temp highp 2-component vector of int)
+0:116          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:116            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116              Constant:
+0:116                1 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116          Sequence
+0:116            Constant:
+0:116              0 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116        subgroupPartitionedOrNV ( global highp 2-component vector of int)
+0:116          vector swizzle ( temp highp 2-component vector of int)
+0:116            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:116              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:116                Constant:
+0:116                  1 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:116            Sequence
+0:116              Constant:
+0:116                0 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:116          'ballot' ( temp highp 4-component vector of uint)
+0:117      move second child to first child ( temp highp 3-component vector of int)
+0:117        vector swizzle ( temp highp 3-component vector of int)
+0:117          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:117            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:117              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:117              Constant:
+0:117                1 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:117          Sequence
+0:117            Constant:
+0:117              0 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:117            Constant:
+0:117              2 (const int)
+0:117        subgroupPartitionedOrNV ( global highp 3-component vector of int)
+0:117          vector swizzle ( temp highp 3-component vector of int)
+0:117            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:117              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:117                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:117                Constant:
+0:117                  2 (const int)
+0:117              Constant:
+0:117                1 (const int)
+0:117            Sequence
+0:117              Constant:
+0:117                0 (const int)
+0:117              Constant:
+0:117                1 (const int)
+0:117              Constant:
+0:117                2 (const int)
+0:117          'ballot' ( temp highp 4-component vector of uint)
+0:118      move second child to first child ( temp highp 4-component vector of int)
+0:118        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118            Constant:
+0:118              1 (const int)
+0:118          Constant:
+0:118            1 (const int)
+0:118        subgroupPartitionedOrNV ( global highp 4-component vector of int)
+0:118          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:118            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:118              Constant:
+0:118                3 (const int)
+0:118            Constant:
+0:118              1 (const int)
+0:118          'ballot' ( temp highp 4-component vector of uint)
+0:120      move second child to first child ( temp highp uint)
+0:120        direct index ( temp highp uint)
+0:120          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:120            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120              Constant:
+0:120                2 (const int)
+0:120            Constant:
+0:120              2 (const int)
+0:120          Constant:
+0:120            0 (const int)
+0:120        subgroupPartitionedOrNV ( global highp uint)
+0:120          direct index ( temp highp uint)
+0:120            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:120              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:120                Constant:
+0:120                  0 (const int)
+0:120              Constant:
+0:120                2 (const int)
+0:120            Constant:
+0:120              0 (const int)
+0:120          'ballot' ( temp highp 4-component vector of uint)
+0:121      move second child to first child ( temp highp 2-component vector of uint)
+0:121        vector swizzle ( temp highp 2-component vector of uint)
+0:121          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:121            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121              Constant:
+0:121                2 (const int)
+0:121            Constant:
+0:121              2 (const int)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121        subgroupPartitionedOrNV ( global highp 2-component vector of uint)
+0:121          vector swizzle ( temp highp 2-component vector of uint)
+0:121            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:121              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:121                Constant:
+0:121                  1 (const int)
+0:121              Constant:
+0:121                2 (const int)
+0:121            Sequence
+0:121              Constant:
+0:121                0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:121          'ballot' ( temp highp 4-component vector of uint)
+0:122      move second child to first child ( temp highp 3-component vector of uint)
+0:122        vector swizzle ( temp highp 3-component vector of uint)
+0:122          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:122            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:122              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:122              Constant:
+0:122                2 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:122          Sequence
+0:122            Constant:
+0:122              0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:122        subgroupPartitionedOrNV ( global highp 3-component vector of uint)
+0:122          vector swizzle ( temp highp 3-component vector of uint)
+0:122            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:122              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:122                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:122                Constant:
+0:122                  2 (const int)
+0:122              Constant:
+0:122                2 (const int)
+0:122            Sequence
+0:122              Constant:
+0:122                0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122              Constant:
+0:122                2 (const int)
+0:122          'ballot' ( temp highp 4-component vector of uint)
+0:123      move second child to first child ( temp highp 4-component vector of uint)
+0:123        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:123          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123            Constant:
+0:123              2 (const int)
+0:123          Constant:
+0:123            2 (const int)
+0:123        subgroupPartitionedOrNV ( global highp 4-component vector of uint)
+0:123          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:123            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:123              Constant:
+0:123                3 (const int)
+0:123            Constant:
+0:123              2 (const int)
+0:123          'ballot' ( temp highp 4-component vector of uint)
+0:125      move second child to first child ( temp highp int)
+0:125        direct index ( temp highp int)
+0:125          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:125            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125              Constant:
+0:125                2 (const int)
+0:125            Constant:
+0:125              1 (const int)
+0:125          Constant:
+0:125            0 (const int)
+0:125        Convert bool to int ( temp highp int)
+0:125          subgroupPartitionedOrNV ( global bool, operation at highp)
+0:125            Compare Less Than ( temp bool)
+0:125              direct index ( temp highp int)
+0:125                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:125                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:125                    Constant:
+0:125                      0 (const int)
+0:125                  Constant:
+0:125                    1 (const int)
+0:125                Constant:
+0:125                  0 (const int)
+0:125              Constant:
+0:125                0 (const int)
+0:125            'ballot' ( temp highp 4-component vector of uint)
+0:126      move second child to first child ( temp highp 2-component vector of int)
+0:126        vector swizzle ( temp highp 2-component vector of int)
+0:126          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:126            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126              Constant:
+0:126                2 (const int)
+0:126            Constant:
+0:126              1 (const int)
+0:126          Sequence
+0:126            Constant:
+0:126              0 (const int)
+0:126            Constant:
+0:126              1 (const int)
+0:126        Convert bool to int ( temp highp 2-component vector of int)
+0:126          subgroupPartitionedOrNV ( global 2-component vector of bool, operation at highp)
+0:126            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:126              vector swizzle ( temp highp 2-component vector of int)
+0:126                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:126                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:126                    Constant:
+0:126                      1 (const int)
+0:126                  Constant:
+0:126                    1 (const int)
+0:126                Sequence
+0:126                  Constant:
+0:126                    0 (const int)
+0:126                  Constant:
+0:126                    1 (const int)
+0:126              Constant:
+0:126                0 (const int)
+0:126                0 (const int)
+0:126            'ballot' ( temp highp 4-component vector of uint)
+0:127      move second child to first child ( temp highp 3-component vector of int)
+0:127        vector swizzle ( temp highp 3-component vector of int)
+0:127          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:127            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:127              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:127              Constant:
+0:127                2 (const int)
+0:127            Constant:
+0:127              1 (const int)
+0:127          Sequence
+0:127            Constant:
+0:127              0 (const int)
+0:127            Constant:
+0:127              1 (const int)
+0:127            Constant:
+0:127              2 (const int)
+0:127        Convert bool to int ( temp highp 3-component vector of int)
+0:127          subgroupPartitionedOrNV ( global 3-component vector of bool, operation at highp)
+0:127            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:127              vector swizzle ( temp highp 3-component vector of int)
+0:127                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:127                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:127                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:127                    Constant:
+0:127                      1 (const int)
+0:127                  Constant:
+0:127                    1 (const int)
+0:127                Sequence
+0:127                  Constant:
+0:127                    0 (const int)
+0:127                  Constant:
+0:127                    1 (const int)
+0:127                  Constant:
+0:127                    2 (const int)
+0:127              Constant:
+0:127                0 (const int)
+0:127                0 (const int)
+0:127                0 (const int)
+0:127            'ballot' ( temp highp 4-component vector of uint)
+0:128      move second child to first child ( temp highp 4-component vector of int)
+0:128        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:128          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128            Constant:
+0:128              2 (const int)
+0:128          Constant:
+0:128            1 (const int)
+0:128        Convert bool to int ( temp highp 4-component vector of int)
+0:128          subgroupPartitionedOrNV ( global 4-component vector of bool, operation at highp)
+0:128            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:128              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:128                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:128                  Constant:
+0:128                    1 (const int)
+0:128                Constant:
+0:128                  1 (const int)
+0:128              Constant:
+0:128                0 (const int)
+0:128                0 (const int)
+0:128                0 (const int)
+0:128                0 (const int)
+0:128            'ballot' ( temp highp 4-component vector of uint)
+0:130      move second child to first child ( temp highp int)
+0:130        direct index ( temp highp int)
+0:130          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:130            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130              Constant:
+0:130                2 (const int)
+0:130            Constant:
+0:130              1 (const int)
+0:130          Constant:
+0:130            0 (const int)
+0:130        subgroupPartitionedXorNV ( global highp int)
+0:130          direct index ( temp highp int)
+0:130            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:130              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:130                Constant:
+0:130                  0 (const int)
+0:130              Constant:
+0:130                1 (const int)
+0:130            Constant:
+0:130              0 (const int)
+0:130          'ballot' ( temp highp 4-component vector of uint)
+0:131      move second child to first child ( temp highp 2-component vector of int)
+0:131        vector swizzle ( temp highp 2-component vector of int)
+0:131          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:131            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131              Constant:
+0:131                2 (const int)
+0:131            Constant:
+0:131              1 (const int)
+0:131          Sequence
+0:131            Constant:
+0:131              0 (const int)
+0:131            Constant:
+0:131              1 (const int)
+0:131        subgroupPartitionedXorNV ( global highp 2-component vector of int)
+0:131          vector swizzle ( temp highp 2-component vector of int)
+0:131            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:131              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:131                Constant:
+0:131                  1 (const int)
+0:131              Constant:
+0:131                1 (const int)
+0:131            Sequence
+0:131              Constant:
+0:131                0 (const int)
+0:131              Constant:
+0:131                1 (const int)
+0:131          'ballot' ( temp highp 4-component vector of uint)
+0:132      move second child to first child ( temp highp 3-component vector of int)
+0:132        vector swizzle ( temp highp 3-component vector of int)
+0:132          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:132            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:132              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:132              Constant:
+0:132                2 (const int)
+0:132            Constant:
+0:132              1 (const int)
+0:132          Sequence
+0:132            Constant:
+0:132              0 (const int)
+0:132            Constant:
+0:132              1 (const int)
+0:132            Constant:
+0:132              2 (const int)
+0:132        subgroupPartitionedXorNV ( global highp 3-component vector of int)
+0:132          vector swizzle ( temp highp 3-component vector of int)
+0:132            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:132              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:132                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:132                Constant:
+0:132                  2 (const int)
+0:132              Constant:
+0:132                1 (const int)
+0:132            Sequence
+0:132              Constant:
+0:132                0 (const int)
+0:132              Constant:
+0:132                1 (const int)
+0:132              Constant:
+0:132                2 (const int)
+0:132          'ballot' ( temp highp 4-component vector of uint)
+0:133      move second child to first child ( temp highp 4-component vector of int)
+0:133        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:133          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133            Constant:
+0:133              2 (const int)
+0:133          Constant:
+0:133            1 (const int)
+0:133        subgroupPartitionedXorNV ( global highp 4-component vector of int)
+0:133          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:133            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:133              Constant:
+0:133                3 (const int)
+0:133            Constant:
+0:133              1 (const int)
+0:133          'ballot' ( temp highp 4-component vector of uint)
+0:135      move second child to first child ( temp highp uint)
+0:135        direct index ( temp highp uint)
+0:135          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:135            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135              Constant:
+0:135                2 (const int)
+0:135            Constant:
+0:135              2 (const int)
+0:135          Constant:
+0:135            0 (const int)
+0:135        subgroupPartitionedXorNV ( global highp uint)
+0:135          direct index ( temp highp uint)
+0:135            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:135              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:135                Constant:
+0:135                  0 (const int)
+0:135              Constant:
+0:135                2 (const int)
+0:135            Constant:
+0:135              0 (const int)
+0:135          'ballot' ( temp highp 4-component vector of uint)
+0:136      move second child to first child ( temp highp 2-component vector of uint)
+0:136        vector swizzle ( temp highp 2-component vector of uint)
+0:136          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:136            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136              Constant:
+0:136                2 (const int)
+0:136            Constant:
+0:136              2 (const int)
+0:136          Sequence
+0:136            Constant:
+0:136              0 (const int)
+0:136            Constant:
+0:136              1 (const int)
+0:136        subgroupPartitionedXorNV ( global highp 2-component vector of uint)
+0:136          vector swizzle ( temp highp 2-component vector of uint)
+0:136            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:136              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:136                Constant:
+0:136                  1 (const int)
+0:136              Constant:
+0:136                2 (const int)
+0:136            Sequence
+0:136              Constant:
+0:136                0 (const int)
+0:136              Constant:
+0:136                1 (const int)
+0:136          'ballot' ( temp highp 4-component vector of uint)
+0:137      move second child to first child ( temp highp 3-component vector of uint)
+0:137        vector swizzle ( temp highp 3-component vector of uint)
+0:137          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:137            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:137              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:137              Constant:
+0:137                2 (const int)
+0:137            Constant:
+0:137              2 (const int)
+0:137          Sequence
+0:137            Constant:
+0:137              0 (const int)
+0:137            Constant:
+0:137              1 (const int)
+0:137            Constant:
+0:137              2 (const int)
+0:137        subgroupPartitionedXorNV ( global highp 3-component vector of uint)
+0:137          vector swizzle ( temp highp 3-component vector of uint)
+0:137            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:137              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:137                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:137                Constant:
+0:137                  2 (const int)
+0:137              Constant:
+0:137                2 (const int)
+0:137            Sequence
+0:137              Constant:
+0:137                0 (const int)
+0:137              Constant:
+0:137                1 (const int)
+0:137              Constant:
+0:137                2 (const int)
+0:137          'ballot' ( temp highp 4-component vector of uint)
+0:138      move second child to first child ( temp highp 4-component vector of uint)
+0:138        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:138          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138            Constant:
+0:138              2 (const int)
+0:138          Constant:
+0:138            2 (const int)
+0:138        subgroupPartitionedXorNV ( global highp 4-component vector of uint)
+0:138          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:138            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:138              Constant:
+0:138                3 (const int)
+0:138            Constant:
+0:138              2 (const int)
+0:138          'ballot' ( temp highp 4-component vector of uint)
+0:140      move second child to first child ( temp highp int)
+0:140        direct index ( temp highp int)
+0:140          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:140            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140              Constant:
+0:140                3 (const int)
+0:140            Constant:
+0:140              1 (const int)
+0:140          Constant:
+0:140            0 (const int)
+0:140        Convert bool to int ( temp highp int)
+0:140          subgroupPartitionedXorNV ( global bool, operation at highp)
+0:140            Compare Less Than ( temp bool)
+0:140              direct index ( temp highp int)
+0:140                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:140                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:140                    Constant:
+0:140                      0 (const int)
+0:140                  Constant:
+0:140                    1 (const int)
+0:140                Constant:
+0:140                  0 (const int)
+0:140              Constant:
+0:140                0 (const int)
+0:140            'ballot' ( temp highp 4-component vector of uint)
+0:141      move second child to first child ( temp highp 2-component vector of int)
+0:141        vector swizzle ( temp highp 2-component vector of int)
+0:141          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:141            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141              Constant:
+0:141                3 (const int)
+0:141            Constant:
+0:141              1 (const int)
+0:141          Sequence
+0:141            Constant:
+0:141              0 (const int)
+0:141            Constant:
+0:141              1 (const int)
+0:141        Convert bool to int ( temp highp 2-component vector of int)
+0:141          subgroupPartitionedXorNV ( global 2-component vector of bool, operation at highp)
+0:141            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:141              vector swizzle ( temp highp 2-component vector of int)
+0:141                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:141                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:141                    Constant:
+0:141                      1 (const int)
+0:141                  Constant:
+0:141                    1 (const int)
+0:141                Sequence
+0:141                  Constant:
+0:141                    0 (const int)
+0:141                  Constant:
+0:141                    1 (const int)
+0:141              Constant:
+0:141                0 (const int)
+0:141                0 (const int)
+0:141            'ballot' ( temp highp 4-component vector of uint)
+0:142      move second child to first child ( temp highp 3-component vector of int)
+0:142        vector swizzle ( temp highp 3-component vector of int)
+0:142          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:142            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:142              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:142              Constant:
+0:142                3 (const int)
+0:142            Constant:
+0:142              1 (const int)
+0:142          Sequence
+0:142            Constant:
+0:142              0 (const int)
+0:142            Constant:
+0:142              1 (const int)
+0:142            Constant:
+0:142              2 (const int)
+0:142        Convert bool to int ( temp highp 3-component vector of int)
+0:142          subgroupPartitionedXorNV ( global 3-component vector of bool, operation at highp)
+0:142            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:142              vector swizzle ( temp highp 3-component vector of int)
+0:142                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:142                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:142                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:142                    Constant:
+0:142                      1 (const int)
+0:142                  Constant:
+0:142                    1 (const int)
+0:142                Sequence
+0:142                  Constant:
+0:142                    0 (const int)
+0:142                  Constant:
+0:142                    1 (const int)
+0:142                  Constant:
+0:142                    2 (const int)
+0:142              Constant:
+0:142                0 (const int)
+0:142                0 (const int)
+0:142                0 (const int)
+0:142            'ballot' ( temp highp 4-component vector of uint)
+0:143      move second child to first child ( temp highp 4-component vector of int)
+0:143        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:143          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143            Constant:
+0:143              3 (const int)
+0:143          Constant:
+0:143            1 (const int)
+0:143        Convert bool to int ( temp highp 4-component vector of int)
+0:143          subgroupPartitionedXorNV ( global 4-component vector of bool, operation at highp)
+0:143            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:143              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:143                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:143                  Constant:
+0:143                    1 (const int)
+0:143                Constant:
+0:143                  1 (const int)
+0:143              Constant:
+0:143                0 (const int)
+0:143                0 (const int)
+0:143                0 (const int)
+0:143                0 (const int)
+0:143            'ballot' ( temp highp 4-component vector of uint)
+0:145      move second child to first child ( temp highp float)
+0:145        direct index ( temp highp float)
+0:145          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:145            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145              Constant:
+0:145                3 (const int)
+0:145            Constant:
+0:145              0 (const int)
+0:145          Constant:
+0:145            0 (const int)
+0:145        subgroupPartitionedInclusiveAddNV ( global highp float)
+0:145          direct index ( temp highp float)
+0:145            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:145              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:145                Constant:
+0:145                  0 (const int)
+0:145              Constant:
+0:145                0 (const int)
+0:145            Constant:
+0:145              0 (const int)
+0:145          'ballot' ( temp highp 4-component vector of uint)
+0:146      move second child to first child ( temp highp 2-component vector of float)
+0:146        vector swizzle ( temp highp 2-component vector of float)
+0:146          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:146            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146              Constant:
+0:146                3 (const int)
+0:146            Constant:
+0:146              0 (const int)
+0:146          Sequence
+0:146            Constant:
+0:146              0 (const int)
+0:146            Constant:
+0:146              1 (const int)
+0:146        subgroupPartitionedInclusiveAddNV ( global highp 2-component vector of float)
+0:146          vector swizzle ( temp highp 2-component vector of float)
+0:146            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:146              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:146                Constant:
+0:146                  1 (const int)
+0:146              Constant:
+0:146                0 (const int)
+0:146            Sequence
+0:146              Constant:
+0:146                0 (const int)
+0:146              Constant:
+0:146                1 (const int)
+0:146          'ballot' ( temp highp 4-component vector of uint)
+0:147      move second child to first child ( temp highp 3-component vector of float)
+0:147        vector swizzle ( temp highp 3-component vector of float)
+0:147          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:147            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:147              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:147              Constant:
+0:147                3 (const int)
+0:147            Constant:
+0:147              0 (const int)
+0:147          Sequence
+0:147            Constant:
+0:147              0 (const int)
+0:147            Constant:
+0:147              1 (const int)
+0:147            Constant:
+0:147              2 (const int)
+0:147        subgroupPartitionedInclusiveAddNV ( global highp 3-component vector of float)
+0:147          vector swizzle ( temp highp 3-component vector of float)
+0:147            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:147              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:147                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:147                Constant:
+0:147                  2 (const int)
+0:147              Constant:
+0:147                0 (const int)
+0:147            Sequence
+0:147              Constant:
+0:147                0 (const int)
+0:147              Constant:
+0:147                1 (const int)
+0:147              Constant:
+0:147                2 (const int)
+0:147          'ballot' ( temp highp 4-component vector of uint)
+0:148      move second child to first child ( temp highp 4-component vector of float)
+0:148        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:148          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148            Constant:
+0:148              3 (const int)
+0:148          Constant:
+0:148            0 (const int)
+0:148        subgroupPartitionedInclusiveAddNV ( global highp 4-component vector of float)
+0:148          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:148            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:148              Constant:
+0:148                3 (const int)
+0:148            Constant:
+0:148              0 (const int)
+0:148          'ballot' ( temp highp 4-component vector of uint)
+0:150      move second child to first child ( temp highp int)
+0:150        direct index ( temp highp int)
+0:150          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:150            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150              Constant:
+0:150                3 (const int)
+0:150            Constant:
+0:150              1 (const int)
+0:150          Constant:
+0:150            0 (const int)
+0:150        subgroupPartitionedInclusiveAddNV ( global highp int)
+0:150          direct index ( temp highp int)
+0:150            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:150              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:150                Constant:
+0:150                  0 (const int)
+0:150              Constant:
+0:150                1 (const int)
+0:150            Constant:
+0:150              0 (const int)
+0:150          'ballot' ( temp highp 4-component vector of uint)
+0:151      move second child to first child ( temp highp 2-component vector of int)
+0:151        vector swizzle ( temp highp 2-component vector of int)
+0:151          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:151            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151              Constant:
+0:151                3 (const int)
+0:151            Constant:
+0:151              1 (const int)
+0:151          Sequence
+0:151            Constant:
+0:151              0 (const int)
+0:151            Constant:
+0:151              1 (const int)
+0:151        subgroupPartitionedInclusiveAddNV ( global highp 2-component vector of int)
+0:151          vector swizzle ( temp highp 2-component vector of int)
+0:151            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:151              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:151                Constant:
+0:151                  1 (const int)
+0:151              Constant:
+0:151                1 (const int)
+0:151            Sequence
+0:151              Constant:
+0:151                0 (const int)
+0:151              Constant:
+0:151                1 (const int)
+0:151          'ballot' ( temp highp 4-component vector of uint)
+0:152      move second child to first child ( temp highp 3-component vector of int)
+0:152        vector swizzle ( temp highp 3-component vector of int)
+0:152          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:152            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:152              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:152              Constant:
+0:152                3 (const int)
+0:152            Constant:
+0:152              1 (const int)
+0:152          Sequence
+0:152            Constant:
+0:152              0 (const int)
+0:152            Constant:
+0:152              1 (const int)
+0:152            Constant:
+0:152              2 (const int)
+0:152        subgroupPartitionedInclusiveAddNV ( global highp 3-component vector of int)
+0:152          vector swizzle ( temp highp 3-component vector of int)
+0:152            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:152              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:152                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:152                Constant:
+0:152                  2 (const int)
+0:152              Constant:
+0:152                1 (const int)
+0:152            Sequence
+0:152              Constant:
+0:152                0 (const int)
+0:152              Constant:
+0:152                1 (const int)
+0:152              Constant:
+0:152                2 (const int)
+0:152          'ballot' ( temp highp 4-component vector of uint)
+0:153      move second child to first child ( temp highp 4-component vector of int)
+0:153        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:153          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153            Constant:
+0:153              3 (const int)
+0:153          Constant:
+0:153            1 (const int)
+0:153        subgroupPartitionedInclusiveAddNV ( global highp 4-component vector of int)
+0:153          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:153            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:153              Constant:
+0:153                3 (const int)
+0:153            Constant:
+0:153              1 (const int)
+0:153          'ballot' ( temp highp 4-component vector of uint)
+0:155      move second child to first child ( temp highp uint)
+0:155        direct index ( temp highp uint)
+0:155          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:155            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155              Constant:
+0:155                3 (const int)
+0:155            Constant:
+0:155              2 (const int)
+0:155          Constant:
+0:155            0 (const int)
+0:155        subgroupPartitionedInclusiveAddNV ( global highp uint)
+0:155          direct index ( temp highp uint)
+0:155            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:155              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:155                Constant:
+0:155                  0 (const int)
+0:155              Constant:
+0:155                2 (const int)
+0:155            Constant:
+0:155              0 (const int)
+0:155          'ballot' ( temp highp 4-component vector of uint)
+0:156      move second child to first child ( temp highp 2-component vector of uint)
+0:156        vector swizzle ( temp highp 2-component vector of uint)
+0:156          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:156            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156              Constant:
+0:156                3 (const int)
+0:156            Constant:
+0:156              2 (const int)
+0:156          Sequence
+0:156            Constant:
+0:156              0 (const int)
+0:156            Constant:
+0:156              1 (const int)
+0:156        subgroupPartitionedInclusiveAddNV ( global highp 2-component vector of uint)
+0:156          vector swizzle ( temp highp 2-component vector of uint)
+0:156            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:156              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:156                Constant:
+0:156                  1 (const int)
+0:156              Constant:
+0:156                2 (const int)
+0:156            Sequence
+0:156              Constant:
+0:156                0 (const int)
+0:156              Constant:
+0:156                1 (const int)
+0:156          'ballot' ( temp highp 4-component vector of uint)
+0:157      move second child to first child ( temp highp 3-component vector of uint)
+0:157        vector swizzle ( temp highp 3-component vector of uint)
+0:157          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:157            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:157              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:157              Constant:
+0:157                3 (const int)
+0:157            Constant:
+0:157              2 (const int)
+0:157          Sequence
+0:157            Constant:
+0:157              0 (const int)
+0:157            Constant:
+0:157              1 (const int)
+0:157            Constant:
+0:157              2 (const int)
+0:157        subgroupPartitionedInclusiveAddNV ( global highp 3-component vector of uint)
+0:157          vector swizzle ( temp highp 3-component vector of uint)
+0:157            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:157              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:157                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:157                Constant:
+0:157                  2 (const int)
+0:157              Constant:
+0:157                2 (const int)
+0:157            Sequence
+0:157              Constant:
+0:157                0 (const int)
+0:157              Constant:
+0:157                1 (const int)
+0:157              Constant:
+0:157                2 (const int)
+0:157          'ballot' ( temp highp 4-component vector of uint)
+0:158      move second child to first child ( temp highp 4-component vector of uint)
+0:158        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:158          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158            Constant:
+0:158              3 (const int)
+0:158          Constant:
+0:158            2 (const int)
+0:158        subgroupPartitionedInclusiveAddNV ( global highp 4-component vector of uint)
+0:158          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:158            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:158              Constant:
+0:158                3 (const int)
+0:158            Constant:
+0:158              2 (const int)
+0:158          'ballot' ( temp highp 4-component vector of uint)
+0:160      move second child to first child ( temp highp float)
+0:160        direct index ( temp highp float)
+0:160          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:160            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160              Constant:
+0:160                3 (const int)
+0:160            Constant:
+0:160              0 (const int)
+0:160          Constant:
+0:160            0 (const int)
+0:160        subgroupPartitionedInclusiveMulNV ( global highp float)
+0:160          direct index ( temp highp float)
+0:160            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:160              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:160                Constant:
+0:160                  0 (const int)
+0:160              Constant:
+0:160                0 (const int)
+0:160            Constant:
+0:160              0 (const int)
+0:160          'ballot' ( temp highp 4-component vector of uint)
+0:161      move second child to first child ( temp highp 2-component vector of float)
+0:161        vector swizzle ( temp highp 2-component vector of float)
+0:161          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:161            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161              Constant:
+0:161                3 (const int)
+0:161            Constant:
+0:161              0 (const int)
+0:161          Sequence
+0:161            Constant:
+0:161              0 (const int)
+0:161            Constant:
+0:161              1 (const int)
+0:161        subgroupPartitionedInclusiveMulNV ( global highp 2-component vector of float)
+0:161          vector swizzle ( temp highp 2-component vector of float)
+0:161            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:161              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:161                Constant:
+0:161                  1 (const int)
+0:161              Constant:
+0:161                0 (const int)
+0:161            Sequence
+0:161              Constant:
+0:161                0 (const int)
+0:161              Constant:
+0:161                1 (const int)
+0:161          'ballot' ( temp highp 4-component vector of uint)
+0:162      move second child to first child ( temp highp 3-component vector of float)
+0:162        vector swizzle ( temp highp 3-component vector of float)
+0:162          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:162            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:162              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:162              Constant:
+0:162                3 (const int)
+0:162            Constant:
+0:162              0 (const int)
+0:162          Sequence
+0:162            Constant:
+0:162              0 (const int)
+0:162            Constant:
+0:162              1 (const int)
+0:162            Constant:
+0:162              2 (const int)
+0:162        subgroupPartitionedInclusiveMulNV ( global highp 3-component vector of float)
+0:162          vector swizzle ( temp highp 3-component vector of float)
+0:162            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:162              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:162                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:162                Constant:
+0:162                  2 (const int)
+0:162              Constant:
+0:162                0 (const int)
+0:162            Sequence
+0:162              Constant:
+0:162                0 (const int)
+0:162              Constant:
+0:162                1 (const int)
+0:162              Constant:
+0:162                2 (const int)
+0:162          'ballot' ( temp highp 4-component vector of uint)
+0:163      move second child to first child ( temp highp 4-component vector of float)
+0:163        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:163          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163            Constant:
+0:163              3 (const int)
+0:163          Constant:
+0:163            0 (const int)
+0:163        subgroupPartitionedInclusiveMulNV ( global highp 4-component vector of float)
+0:163          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:163            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:163              Constant:
+0:163                3 (const int)
+0:163            Constant:
+0:163              0 (const int)
+0:163          'ballot' ( temp highp 4-component vector of uint)
+0:165      move second child to first child ( temp highp int)
+0:165        direct index ( temp highp int)
+0:165          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:165            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165              Constant:
+0:165                3 (const int)
+0:165            Constant:
+0:165              1 (const int)
+0:165          Constant:
+0:165            0 (const int)
+0:165        subgroupPartitionedInclusiveMulNV ( global highp int)
+0:165          direct index ( temp highp int)
+0:165            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:165              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:165                Constant:
+0:165                  0 (const int)
+0:165              Constant:
+0:165                1 (const int)
+0:165            Constant:
+0:165              0 (const int)
+0:165          'ballot' ( temp highp 4-component vector of uint)
+0:166      move second child to first child ( temp highp 2-component vector of int)
+0:166        vector swizzle ( temp highp 2-component vector of int)
+0:166          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:166            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166              Constant:
+0:166                3 (const int)
+0:166            Constant:
+0:166              1 (const int)
+0:166          Sequence
+0:166            Constant:
+0:166              0 (const int)
+0:166            Constant:
+0:166              1 (const int)
+0:166        subgroupPartitionedInclusiveMulNV ( global highp 2-component vector of int)
+0:166          vector swizzle ( temp highp 2-component vector of int)
+0:166            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:166              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:166                Constant:
+0:166                  1 (const int)
+0:166              Constant:
+0:166                1 (const int)
+0:166            Sequence
+0:166              Constant:
+0:166                0 (const int)
+0:166              Constant:
+0:166                1 (const int)
+0:166          'ballot' ( temp highp 4-component vector of uint)
+0:167      move second child to first child ( temp highp 3-component vector of int)
+0:167        vector swizzle ( temp highp 3-component vector of int)
+0:167          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:167            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:167              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:167              Constant:
+0:167                3 (const int)
+0:167            Constant:
+0:167              1 (const int)
+0:167          Sequence
+0:167            Constant:
+0:167              0 (const int)
+0:167            Constant:
+0:167              1 (const int)
+0:167            Constant:
+0:167              2 (const int)
+0:167        subgroupPartitionedInclusiveMulNV ( global highp 3-component vector of int)
+0:167          vector swizzle ( temp highp 3-component vector of int)
+0:167            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:167              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:167                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:167                Constant:
+0:167                  2 (const int)
+0:167              Constant:
+0:167                1 (const int)
+0:167            Sequence
+0:167              Constant:
+0:167                0 (const int)
+0:167              Constant:
+0:167                1 (const int)
+0:167              Constant:
+0:167                2 (const int)
+0:167          'ballot' ( temp highp 4-component vector of uint)
+0:168      move second child to first child ( temp highp 4-component vector of int)
+0:168        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:168          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168            Constant:
+0:168              3 (const int)
+0:168          Constant:
+0:168            1 (const int)
+0:168        subgroupPartitionedInclusiveMulNV ( global highp 4-component vector of int)
+0:168          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:168            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:168              Constant:
+0:168                3 (const int)
+0:168            Constant:
+0:168              1 (const int)
+0:168          'ballot' ( temp highp 4-component vector of uint)
+0:170      move second child to first child ( temp highp uint)
+0:170        direct index ( temp highp uint)
+0:170          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:170            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170              Constant:
+0:170                0 (const int)
+0:170            Constant:
+0:170              2 (const int)
+0:170          Constant:
+0:170            0 (const int)
+0:170        subgroupPartitionedInclusiveMulNV ( global highp uint)
+0:170          direct index ( temp highp uint)
+0:170            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:170              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:170                Constant:
+0:170                  0 (const int)
+0:170              Constant:
+0:170                2 (const int)
+0:170            Constant:
+0:170              0 (const int)
+0:170          'ballot' ( temp highp 4-component vector of uint)
+0:171      move second child to first child ( temp highp 2-component vector of uint)
+0:171        vector swizzle ( temp highp 2-component vector of uint)
+0:171          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:171            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171              Constant:
+0:171                0 (const int)
+0:171            Constant:
+0:171              2 (const int)
+0:171          Sequence
+0:171            Constant:
+0:171              0 (const int)
+0:171            Constant:
+0:171              1 (const int)
+0:171        subgroupPartitionedInclusiveMulNV ( global highp 2-component vector of uint)
+0:171          vector swizzle ( temp highp 2-component vector of uint)
+0:171            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:171              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:171                Constant:
+0:171                  1 (const int)
+0:171              Constant:
+0:171                2 (const int)
+0:171            Sequence
+0:171              Constant:
+0:171                0 (const int)
+0:171              Constant:
+0:171                1 (const int)
+0:171          'ballot' ( temp highp 4-component vector of uint)
+0:172      move second child to first child ( temp highp 3-component vector of uint)
+0:172        vector swizzle ( temp highp 3-component vector of uint)
+0:172          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:172            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:172              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:172              Constant:
+0:172                0 (const int)
+0:172            Constant:
+0:172              2 (const int)
+0:172          Sequence
+0:172            Constant:
+0:172              0 (const int)
+0:172            Constant:
+0:172              1 (const int)
+0:172            Constant:
+0:172              2 (const int)
+0:172        subgroupPartitionedInclusiveMulNV ( global highp 3-component vector of uint)
+0:172          vector swizzle ( temp highp 3-component vector of uint)
+0:172            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:172              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:172                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:172                Constant:
+0:172                  2 (const int)
+0:172              Constant:
+0:172                2 (const int)
+0:172            Sequence
+0:172              Constant:
+0:172                0 (const int)
+0:172              Constant:
+0:172                1 (const int)
+0:172              Constant:
+0:172                2 (const int)
+0:172          'ballot' ( temp highp 4-component vector of uint)
+0:173      move second child to first child ( temp highp 4-component vector of uint)
+0:173        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:173          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173            Constant:
+0:173              0 (const int)
+0:173          Constant:
+0:173            2 (const int)
+0:173        subgroupPartitionedInclusiveMulNV ( global highp 4-component vector of uint)
+0:173          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:173            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:173              Constant:
+0:173                3 (const int)
+0:173            Constant:
+0:173              2 (const int)
+0:173          'ballot' ( temp highp 4-component vector of uint)
+0:175      move second child to first child ( temp highp float)
+0:175        direct index ( temp highp float)
+0:175          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:175            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175              Constant:
+0:175                0 (const int)
+0:175            Constant:
+0:175              0 (const int)
+0:175          Constant:
+0:175            0 (const int)
+0:175        subgroupPartitionedInclusiveMinNV ( global highp float)
+0:175          direct index ( temp highp float)
+0:175            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:175              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:175                Constant:
+0:175                  0 (const int)
+0:175              Constant:
+0:175                0 (const int)
+0:175            Constant:
+0:175              0 (const int)
+0:175          'ballot' ( temp highp 4-component vector of uint)
+0:176      move second child to first child ( temp highp 2-component vector of float)
+0:176        vector swizzle ( temp highp 2-component vector of float)
+0:176          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:176            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176              Constant:
+0:176                0 (const int)
+0:176            Constant:
+0:176              0 (const int)
+0:176          Sequence
+0:176            Constant:
+0:176              0 (const int)
+0:176            Constant:
+0:176              1 (const int)
+0:176        subgroupPartitionedInclusiveMinNV ( global highp 2-component vector of float)
+0:176          vector swizzle ( temp highp 2-component vector of float)
+0:176            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:176              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:176                Constant:
+0:176                  1 (const int)
+0:176              Constant:
+0:176                0 (const int)
+0:176            Sequence
+0:176              Constant:
+0:176                0 (const int)
+0:176              Constant:
+0:176                1 (const int)
+0:176          'ballot' ( temp highp 4-component vector of uint)
+0:177      move second child to first child ( temp highp 3-component vector of float)
+0:177        vector swizzle ( temp highp 3-component vector of float)
+0:177          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:177            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:177              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:177              Constant:
+0:177                0 (const int)
+0:177            Constant:
+0:177              0 (const int)
+0:177          Sequence
+0:177            Constant:
+0:177              0 (const int)
+0:177            Constant:
+0:177              1 (const int)
+0:177            Constant:
+0:177              2 (const int)
+0:177        subgroupPartitionedInclusiveMinNV ( global highp 3-component vector of float)
+0:177          vector swizzle ( temp highp 3-component vector of float)
+0:177            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:177              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:177                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:177                Constant:
+0:177                  2 (const int)
+0:177              Constant:
+0:177                0 (const int)
+0:177            Sequence
+0:177              Constant:
+0:177                0 (const int)
+0:177              Constant:
+0:177                1 (const int)
+0:177              Constant:
+0:177                2 (const int)
+0:177          'ballot' ( temp highp 4-component vector of uint)
+0:178      move second child to first child ( temp highp 4-component vector of float)
+0:178        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:178          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178            Constant:
+0:178              0 (const int)
+0:178          Constant:
+0:178            0 (const int)
+0:178        subgroupPartitionedInclusiveMinNV ( global highp 4-component vector of float)
+0:178          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:178            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:178              Constant:
+0:178                3 (const int)
+0:178            Constant:
+0:178              0 (const int)
+0:178          'ballot' ( temp highp 4-component vector of uint)
+0:180      move second child to first child ( temp highp int)
+0:180        direct index ( temp highp int)
+0:180          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:180            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180              Constant:
+0:180                0 (const int)
+0:180            Constant:
+0:180              1 (const int)
+0:180          Constant:
+0:180            0 (const int)
+0:180        subgroupPartitionedInclusiveMinNV ( global highp int)
+0:180          direct index ( temp highp int)
+0:180            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:180              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:180                Constant:
+0:180                  0 (const int)
+0:180              Constant:
+0:180                1 (const int)
+0:180            Constant:
+0:180              0 (const int)
+0:180          'ballot' ( temp highp 4-component vector of uint)
+0:181      move second child to first child ( temp highp 2-component vector of int)
+0:181        vector swizzle ( temp highp 2-component vector of int)
+0:181          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:181            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181              Constant:
+0:181                0 (const int)
+0:181            Constant:
+0:181              1 (const int)
+0:181          Sequence
+0:181            Constant:
+0:181              0 (const int)
+0:181            Constant:
+0:181              1 (const int)
+0:181        subgroupPartitionedInclusiveMinNV ( global highp 2-component vector of int)
+0:181          vector swizzle ( temp highp 2-component vector of int)
+0:181            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:181              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:181                Constant:
+0:181                  1 (const int)
+0:181              Constant:
+0:181                1 (const int)
+0:181            Sequence
+0:181              Constant:
+0:181                0 (const int)
+0:181              Constant:
+0:181                1 (const int)
+0:181          'ballot' ( temp highp 4-component vector of uint)
+0:182      move second child to first child ( temp highp 3-component vector of int)
+0:182        vector swizzle ( temp highp 3-component vector of int)
+0:182          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:182            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:182              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:182              Constant:
+0:182                0 (const int)
+0:182            Constant:
+0:182              1 (const int)
+0:182          Sequence
+0:182            Constant:
+0:182              0 (const int)
+0:182            Constant:
+0:182              1 (const int)
+0:182            Constant:
+0:182              2 (const int)
+0:182        subgroupPartitionedInclusiveMinNV ( global highp 3-component vector of int)
+0:182          vector swizzle ( temp highp 3-component vector of int)
+0:182            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:182              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:182                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:182                Constant:
+0:182                  2 (const int)
+0:182              Constant:
+0:182                1 (const int)
+0:182            Sequence
+0:182              Constant:
+0:182                0 (const int)
+0:182              Constant:
+0:182                1 (const int)
+0:182              Constant:
+0:182                2 (const int)
+0:182          'ballot' ( temp highp 4-component vector of uint)
+0:183      move second child to first child ( temp highp 4-component vector of int)
+0:183        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:183          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183            Constant:
+0:183              0 (const int)
+0:183          Constant:
+0:183            1 (const int)
+0:183        subgroupPartitionedInclusiveMinNV ( global highp 4-component vector of int)
+0:183          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:183            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:183              Constant:
+0:183                3 (const int)
+0:183            Constant:
+0:183              1 (const int)
+0:183          'ballot' ( temp highp 4-component vector of uint)
+0:185      move second child to first child ( temp highp uint)
+0:185        direct index ( temp highp uint)
+0:185          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:185            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185              Constant:
+0:185                0 (const int)
+0:185            Constant:
+0:185              2 (const int)
+0:185          Constant:
+0:185            0 (const int)
+0:185        subgroupPartitionedInclusiveMinNV ( global highp uint)
+0:185          direct index ( temp highp uint)
+0:185            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:185              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:185                Constant:
+0:185                  0 (const int)
+0:185              Constant:
+0:185                2 (const int)
+0:185            Constant:
+0:185              0 (const int)
+0:185          'ballot' ( temp highp 4-component vector of uint)
+0:186      move second child to first child ( temp highp 2-component vector of uint)
+0:186        vector swizzle ( temp highp 2-component vector of uint)
+0:186          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:186            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186              Constant:
+0:186                0 (const int)
+0:186            Constant:
+0:186              2 (const int)
+0:186          Sequence
+0:186            Constant:
+0:186              0 (const int)
+0:186            Constant:
+0:186              1 (const int)
+0:186        subgroupPartitionedInclusiveMinNV ( global highp 2-component vector of uint)
+0:186          vector swizzle ( temp highp 2-component vector of uint)
+0:186            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:186              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:186                Constant:
+0:186                  1 (const int)
+0:186              Constant:
+0:186                2 (const int)
+0:186            Sequence
+0:186              Constant:
+0:186                0 (const int)
+0:186              Constant:
+0:186                1 (const int)
+0:186          'ballot' ( temp highp 4-component vector of uint)
+0:187      move second child to first child ( temp highp 3-component vector of uint)
+0:187        vector swizzle ( temp highp 3-component vector of uint)
+0:187          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:187            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:187              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:187              Constant:
+0:187                0 (const int)
+0:187            Constant:
+0:187              2 (const int)
+0:187          Sequence
+0:187            Constant:
+0:187              0 (const int)
+0:187            Constant:
+0:187              1 (const int)
+0:187            Constant:
+0:187              2 (const int)
+0:187        subgroupPartitionedInclusiveMinNV ( global highp 3-component vector of uint)
+0:187          vector swizzle ( temp highp 3-component vector of uint)
+0:187            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:187              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:187                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:187                Constant:
+0:187                  2 (const int)
+0:187              Constant:
+0:187                2 (const int)
+0:187            Sequence
+0:187              Constant:
+0:187                0 (const int)
+0:187              Constant:
+0:187                1 (const int)
+0:187              Constant:
+0:187                2 (const int)
+0:187          'ballot' ( temp highp 4-component vector of uint)
+0:188      move second child to first child ( temp highp 4-component vector of uint)
+0:188        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:188          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188            Constant:
+0:188              0 (const int)
+0:188          Constant:
+0:188            2 (const int)
+0:188        subgroupPartitionedInclusiveMinNV ( global highp 4-component vector of uint)
+0:188          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:188            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:188              Constant:
+0:188                3 (const int)
+0:188            Constant:
+0:188              2 (const int)
+0:188          'ballot' ( temp highp 4-component vector of uint)
+0:190      move second child to first child ( temp highp float)
+0:190        direct index ( temp highp float)
+0:190          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:190            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190              Constant:
+0:190                1 (const int)
+0:190            Constant:
+0:190              0 (const int)
+0:190          Constant:
+0:190            0 (const int)
+0:190        subgroupPartitionedInclusiveMaxNV ( global highp float)
+0:190          direct index ( temp highp float)
+0:190            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:190              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:190                Constant:
+0:190                  0 (const int)
+0:190              Constant:
+0:190                0 (const int)
+0:190            Constant:
+0:190              0 (const int)
+0:190          'ballot' ( temp highp 4-component vector of uint)
+0:191      move second child to first child ( temp highp 2-component vector of float)
+0:191        vector swizzle ( temp highp 2-component vector of float)
+0:191          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:191            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191              Constant:
+0:191                1 (const int)
+0:191            Constant:
+0:191              0 (const int)
+0:191          Sequence
+0:191            Constant:
+0:191              0 (const int)
+0:191            Constant:
+0:191              1 (const int)
+0:191        subgroupPartitionedInclusiveMaxNV ( global highp 2-component vector of float)
+0:191          vector swizzle ( temp highp 2-component vector of float)
+0:191            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:191              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:191                Constant:
+0:191                  1 (const int)
+0:191              Constant:
+0:191                0 (const int)
+0:191            Sequence
+0:191              Constant:
+0:191                0 (const int)
+0:191              Constant:
+0:191                1 (const int)
+0:191          'ballot' ( temp highp 4-component vector of uint)
+0:192      move second child to first child ( temp highp 3-component vector of float)
+0:192        vector swizzle ( temp highp 3-component vector of float)
+0:192          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:192            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:192              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:192              Constant:
+0:192                1 (const int)
+0:192            Constant:
+0:192              0 (const int)
+0:192          Sequence
+0:192            Constant:
+0:192              0 (const int)
+0:192            Constant:
+0:192              1 (const int)
+0:192            Constant:
+0:192              2 (const int)
+0:192        subgroupPartitionedInclusiveMaxNV ( global highp 3-component vector of float)
+0:192          vector swizzle ( temp highp 3-component vector of float)
+0:192            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:192              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:192                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:192                Constant:
+0:192                  2 (const int)
+0:192              Constant:
+0:192                0 (const int)
+0:192            Sequence
+0:192              Constant:
+0:192                0 (const int)
+0:192              Constant:
+0:192                1 (const int)
+0:192              Constant:
+0:192                2 (const int)
+0:192          'ballot' ( temp highp 4-component vector of uint)
+0:193      move second child to first child ( temp highp 4-component vector of float)
+0:193        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:193          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193            Constant:
+0:193              1 (const int)
+0:193          Constant:
+0:193            0 (const int)
+0:193        subgroupPartitionedInclusiveMaxNV ( global highp 4-component vector of float)
+0:193          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:193            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:193              Constant:
+0:193                3 (const int)
+0:193            Constant:
+0:193              0 (const int)
+0:193          'ballot' ( temp highp 4-component vector of uint)
+0:195      move second child to first child ( temp highp int)
+0:195        direct index ( temp highp int)
+0:195          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:195            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195              Constant:
+0:195                1 (const int)
+0:195            Constant:
+0:195              1 (const int)
+0:195          Constant:
+0:195            0 (const int)
+0:195        subgroupPartitionedInclusiveMaxNV ( global highp int)
+0:195          direct index ( temp highp int)
+0:195            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:195              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:195                Constant:
+0:195                  0 (const int)
+0:195              Constant:
+0:195                1 (const int)
+0:195            Constant:
+0:195              0 (const int)
+0:195          'ballot' ( temp highp 4-component vector of uint)
+0:196      move second child to first child ( temp highp 2-component vector of int)
+0:196        vector swizzle ( temp highp 2-component vector of int)
+0:196          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:196            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196              Constant:
+0:196                1 (const int)
+0:196            Constant:
+0:196              1 (const int)
+0:196          Sequence
+0:196            Constant:
+0:196              0 (const int)
+0:196            Constant:
+0:196              1 (const int)
+0:196        subgroupPartitionedInclusiveMaxNV ( global highp 2-component vector of int)
+0:196          vector swizzle ( temp highp 2-component vector of int)
+0:196            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:196              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:196                Constant:
+0:196                  1 (const int)
+0:196              Constant:
+0:196                1 (const int)
+0:196            Sequence
+0:196              Constant:
+0:196                0 (const int)
+0:196              Constant:
+0:196                1 (const int)
+0:196          'ballot' ( temp highp 4-component vector of uint)
+0:197      move second child to first child ( temp highp 3-component vector of int)
+0:197        vector swizzle ( temp highp 3-component vector of int)
+0:197          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:197            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:197              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:197              Constant:
+0:197                1 (const int)
+0:197            Constant:
+0:197              1 (const int)
+0:197          Sequence
+0:197            Constant:
+0:197              0 (const int)
+0:197            Constant:
+0:197              1 (const int)
+0:197            Constant:
+0:197              2 (const int)
+0:197        subgroupPartitionedInclusiveMaxNV ( global highp 3-component vector of int)
+0:197          vector swizzle ( temp highp 3-component vector of int)
+0:197            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:197              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:197                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:197                Constant:
+0:197                  2 (const int)
+0:197              Constant:
+0:197                1 (const int)
+0:197            Sequence
+0:197              Constant:
+0:197                0 (const int)
+0:197              Constant:
+0:197                1 (const int)
+0:197              Constant:
+0:197                2 (const int)
+0:197          'ballot' ( temp highp 4-component vector of uint)
+0:198      move second child to first child ( temp highp 4-component vector of int)
+0:198        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:198          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198            Constant:
+0:198              1 (const int)
+0:198          Constant:
+0:198            1 (const int)
+0:198        subgroupPartitionedInclusiveMaxNV ( global highp 4-component vector of int)
+0:198          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:198            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:198              Constant:
+0:198                3 (const int)
+0:198            Constant:
+0:198              1 (const int)
+0:198          'ballot' ( temp highp 4-component vector of uint)
+0:200      move second child to first child ( temp highp uint)
+0:200        direct index ( temp highp uint)
+0:200          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:200            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200              Constant:
+0:200                1 (const int)
+0:200            Constant:
+0:200              2 (const int)
+0:200          Constant:
+0:200            0 (const int)
+0:200        subgroupPartitionedInclusiveMaxNV ( global highp uint)
+0:200          direct index ( temp highp uint)
+0:200            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:200              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:200                Constant:
+0:200                  0 (const int)
+0:200              Constant:
+0:200                2 (const int)
+0:200            Constant:
+0:200              0 (const int)
+0:200          'ballot' ( temp highp 4-component vector of uint)
+0:201      move second child to first child ( temp highp 2-component vector of uint)
+0:201        vector swizzle ( temp highp 2-component vector of uint)
+0:201          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:201            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201              Constant:
+0:201                1 (const int)
+0:201            Constant:
+0:201              2 (const int)
+0:201          Sequence
+0:201            Constant:
+0:201              0 (const int)
+0:201            Constant:
+0:201              1 (const int)
+0:201        subgroupPartitionedInclusiveMaxNV ( global highp 2-component vector of uint)
+0:201          vector swizzle ( temp highp 2-component vector of uint)
+0:201            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:201              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:201                Constant:
+0:201                  1 (const int)
+0:201              Constant:
+0:201                2 (const int)
+0:201            Sequence
+0:201              Constant:
+0:201                0 (const int)
+0:201              Constant:
+0:201                1 (const int)
+0:201          'ballot' ( temp highp 4-component vector of uint)
+0:202      move second child to first child ( temp highp 3-component vector of uint)
+0:202        vector swizzle ( temp highp 3-component vector of uint)
+0:202          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:202            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:202              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:202              Constant:
+0:202                1 (const int)
+0:202            Constant:
+0:202              2 (const int)
+0:202          Sequence
+0:202            Constant:
+0:202              0 (const int)
+0:202            Constant:
+0:202              1 (const int)
+0:202            Constant:
+0:202              2 (const int)
+0:202        subgroupPartitionedInclusiveMaxNV ( global highp 3-component vector of uint)
+0:202          vector swizzle ( temp highp 3-component vector of uint)
+0:202            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:202              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:202                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:202                Constant:
+0:202                  2 (const int)
+0:202              Constant:
+0:202                2 (const int)
+0:202            Sequence
+0:202              Constant:
+0:202                0 (const int)
+0:202              Constant:
+0:202                1 (const int)
+0:202              Constant:
+0:202                2 (const int)
+0:202          'ballot' ( temp highp 4-component vector of uint)
+0:203      move second child to first child ( temp highp 4-component vector of uint)
+0:203        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:203          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203            Constant:
+0:203              1 (const int)
+0:203          Constant:
+0:203            2 (const int)
+0:203        subgroupPartitionedInclusiveMaxNV ( global highp 4-component vector of uint)
+0:203          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:203            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:203              Constant:
+0:203                3 (const int)
+0:203            Constant:
+0:203              2 (const int)
+0:203          'ballot' ( temp highp 4-component vector of uint)
+0:205      move second child to first child ( temp highp int)
+0:205        direct index ( temp highp int)
+0:205          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:205            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205              Constant:
+0:205                1 (const int)
+0:205            Constant:
+0:205              1 (const int)
+0:205          Constant:
+0:205            0 (const int)
+0:205        subgroupPartitionedInclusiveAndNV ( global highp int)
+0:205          direct index ( temp highp int)
+0:205            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:205              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:205                Constant:
+0:205                  0 (const int)
+0:205              Constant:
+0:205                1 (const int)
+0:205            Constant:
+0:205              0 (const int)
+0:205          'ballot' ( temp highp 4-component vector of uint)
+0:206      move second child to first child ( temp highp 2-component vector of int)
+0:206        vector swizzle ( temp highp 2-component vector of int)
+0:206          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:206            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206              Constant:
+0:206                1 (const int)
+0:206            Constant:
+0:206              1 (const int)
+0:206          Sequence
+0:206            Constant:
+0:206              0 (const int)
+0:206            Constant:
+0:206              1 (const int)
+0:206        subgroupPartitionedInclusiveAndNV ( global highp 2-component vector of int)
+0:206          vector swizzle ( temp highp 2-component vector of int)
+0:206            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:206              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:206                Constant:
+0:206                  1 (const int)
+0:206              Constant:
+0:206                1 (const int)
+0:206            Sequence
+0:206              Constant:
+0:206                0 (const int)
+0:206              Constant:
+0:206                1 (const int)
+0:206          'ballot' ( temp highp 4-component vector of uint)
+0:207      move second child to first child ( temp highp 3-component vector of int)
+0:207        vector swizzle ( temp highp 3-component vector of int)
+0:207          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:207            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:207              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:207              Constant:
+0:207                1 (const int)
+0:207            Constant:
+0:207              1 (const int)
+0:207          Sequence
+0:207            Constant:
+0:207              0 (const int)
+0:207            Constant:
+0:207              1 (const int)
+0:207            Constant:
+0:207              2 (const int)
+0:207        subgroupPartitionedInclusiveAndNV ( global highp 3-component vector of int)
+0:207          vector swizzle ( temp highp 3-component vector of int)
+0:207            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:207              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:207                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:207                Constant:
+0:207                  2 (const int)
+0:207              Constant:
+0:207                1 (const int)
+0:207            Sequence
+0:207              Constant:
+0:207                0 (const int)
+0:207              Constant:
+0:207                1 (const int)
+0:207              Constant:
+0:207                2 (const int)
+0:207          'ballot' ( temp highp 4-component vector of uint)
+0:208      move second child to first child ( temp highp 4-component vector of int)
+0:208        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:208          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208            Constant:
+0:208              1 (const int)
+0:208          Constant:
+0:208            1 (const int)
+0:208        subgroupPartitionedInclusiveAndNV ( global highp 4-component vector of int)
+0:208          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:208            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:208              Constant:
+0:208                3 (const int)
+0:208            Constant:
+0:208              1 (const int)
+0:208          'ballot' ( temp highp 4-component vector of uint)
+0:210      move second child to first child ( temp highp uint)
+0:210        direct index ( temp highp uint)
+0:210          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:210            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210              Constant:
+0:210                2 (const int)
+0:210            Constant:
+0:210              2 (const int)
+0:210          Constant:
+0:210            0 (const int)
+0:210        subgroupPartitionedInclusiveAndNV ( global highp uint)
+0:210          direct index ( temp highp uint)
+0:210            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:210              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:210                Constant:
+0:210                  0 (const int)
+0:210              Constant:
+0:210                2 (const int)
+0:210            Constant:
+0:210              0 (const int)
+0:210          'ballot' ( temp highp 4-component vector of uint)
+0:211      move second child to first child ( temp highp 2-component vector of uint)
+0:211        vector swizzle ( temp highp 2-component vector of uint)
+0:211          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:211            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211              Constant:
+0:211                2 (const int)
+0:211            Constant:
+0:211              2 (const int)
+0:211          Sequence
+0:211            Constant:
+0:211              0 (const int)
+0:211            Constant:
+0:211              1 (const int)
+0:211        subgroupPartitionedInclusiveAndNV ( global highp 2-component vector of uint)
+0:211          vector swizzle ( temp highp 2-component vector of uint)
+0:211            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:211              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:211                Constant:
+0:211                  1 (const int)
+0:211              Constant:
+0:211                2 (const int)
+0:211            Sequence
+0:211              Constant:
+0:211                0 (const int)
+0:211              Constant:
+0:211                1 (const int)
+0:211          'ballot' ( temp highp 4-component vector of uint)
+0:212      move second child to first child ( temp highp 3-component vector of uint)
+0:212        vector swizzle ( temp highp 3-component vector of uint)
+0:212          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:212            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:212              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:212              Constant:
+0:212                2 (const int)
+0:212            Constant:
+0:212              2 (const int)
+0:212          Sequence
+0:212            Constant:
+0:212              0 (const int)
+0:212            Constant:
+0:212              1 (const int)
+0:212            Constant:
+0:212              2 (const int)
+0:212        subgroupPartitionedInclusiveAndNV ( global highp 3-component vector of uint)
+0:212          vector swizzle ( temp highp 3-component vector of uint)
+0:212            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:212              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:212                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:212                Constant:
+0:212                  2 (const int)
+0:212              Constant:
+0:212                2 (const int)
+0:212            Sequence
+0:212              Constant:
+0:212                0 (const int)
+0:212              Constant:
+0:212                1 (const int)
+0:212              Constant:
+0:212                2 (const int)
+0:212          'ballot' ( temp highp 4-component vector of uint)
+0:213      move second child to first child ( temp highp 4-component vector of uint)
+0:213        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:213          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213            Constant:
+0:213              2 (const int)
+0:213          Constant:
+0:213            2 (const int)
+0:213        subgroupPartitionedInclusiveAndNV ( global highp 4-component vector of uint)
+0:213          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:213            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:213              Constant:
+0:213                3 (const int)
+0:213            Constant:
+0:213              2 (const int)
+0:213          'ballot' ( temp highp 4-component vector of uint)
+0:215      move second child to first child ( temp highp int)
+0:215        direct index ( temp highp int)
+0:215          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:215            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215              Constant:
+0:215                2 (const int)
+0:215            Constant:
+0:215              1 (const int)
+0:215          Constant:
+0:215            0 (const int)
+0:215        Convert bool to int ( temp highp int)
+0:215          subgroupPartitionedInclusiveAndNV ( global bool, operation at highp)
+0:215            Compare Less Than ( temp bool)
+0:215              direct index ( temp highp int)
+0:215                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:215                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:215                    Constant:
+0:215                      0 (const int)
+0:215                  Constant:
+0:215                    1 (const int)
+0:215                Constant:
+0:215                  0 (const int)
+0:215              Constant:
+0:215                0 (const int)
+0:215            'ballot' ( temp highp 4-component vector of uint)
+0:216      move second child to first child ( temp highp 2-component vector of int)
+0:216        vector swizzle ( temp highp 2-component vector of int)
+0:216          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:216            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216              Constant:
+0:216                2 (const int)
+0:216            Constant:
+0:216              1 (const int)
+0:216          Sequence
+0:216            Constant:
+0:216              0 (const int)
+0:216            Constant:
+0:216              1 (const int)
+0:216        Convert bool to int ( temp highp 2-component vector of int)
+0:216          subgroupPartitionedInclusiveAndNV ( global 2-component vector of bool, operation at highp)
+0:216            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:216              vector swizzle ( temp highp 2-component vector of int)
+0:216                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:216                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:216                    Constant:
+0:216                      1 (const int)
+0:216                  Constant:
+0:216                    1 (const int)
+0:216                Sequence
+0:216                  Constant:
+0:216                    0 (const int)
+0:216                  Constant:
+0:216                    1 (const int)
+0:216              Constant:
+0:216                0 (const int)
+0:216                0 (const int)
+0:216            'ballot' ( temp highp 4-component vector of uint)
+0:217      move second child to first child ( temp highp 3-component vector of int)
+0:217        vector swizzle ( temp highp 3-component vector of int)
+0:217          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:217            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:217              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:217              Constant:
+0:217                2 (const int)
+0:217            Constant:
+0:217              1 (const int)
+0:217          Sequence
+0:217            Constant:
+0:217              0 (const int)
+0:217            Constant:
+0:217              1 (const int)
+0:217            Constant:
+0:217              2 (const int)
+0:217        Convert bool to int ( temp highp 3-component vector of int)
+0:217          subgroupPartitionedInclusiveAndNV ( global 3-component vector of bool, operation at highp)
+0:217            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:217              vector swizzle ( temp highp 3-component vector of int)
+0:217                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:217                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:217                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:217                    Constant:
+0:217                      1 (const int)
+0:217                  Constant:
+0:217                    1 (const int)
+0:217                Sequence
+0:217                  Constant:
+0:217                    0 (const int)
+0:217                  Constant:
+0:217                    1 (const int)
+0:217                  Constant:
+0:217                    2 (const int)
+0:217              Constant:
+0:217                0 (const int)
+0:217                0 (const int)
+0:217                0 (const int)
+0:217            'ballot' ( temp highp 4-component vector of uint)
+0:218      move second child to first child ( temp highp 4-component vector of int)
+0:218        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:218          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218            Constant:
+0:218              2 (const int)
+0:218          Constant:
+0:218            1 (const int)
+0:218        Convert bool to int ( temp highp 4-component vector of int)
+0:218          subgroupPartitionedInclusiveAndNV ( global 4-component vector of bool, operation at highp)
+0:218            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:218              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:218                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:218                  Constant:
+0:218                    1 (const int)
+0:218                Constant:
+0:218                  1 (const int)
+0:218              Constant:
+0:218                0 (const int)
+0:218                0 (const int)
+0:218                0 (const int)
+0:218                0 (const int)
+0:218            'ballot' ( temp highp 4-component vector of uint)
+0:220      move second child to first child ( temp highp int)
+0:220        direct index ( temp highp int)
+0:220          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:220            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220              Constant:
+0:220                2 (const int)
+0:220            Constant:
+0:220              1 (const int)
+0:220          Constant:
+0:220            0 (const int)
+0:220        subgroupPartitionedInclusiveOrNV ( global highp int)
+0:220          direct index ( temp highp int)
+0:220            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:220              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:220                Constant:
+0:220                  0 (const int)
+0:220              Constant:
+0:220                1 (const int)
+0:220            Constant:
+0:220              0 (const int)
+0:220          'ballot' ( temp highp 4-component vector of uint)
+0:221      move second child to first child ( temp highp 2-component vector of int)
+0:221        vector swizzle ( temp highp 2-component vector of int)
+0:221          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:221            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221              Constant:
+0:221                2 (const int)
+0:221            Constant:
+0:221              1 (const int)
+0:221          Sequence
+0:221            Constant:
+0:221              0 (const int)
+0:221            Constant:
+0:221              1 (const int)
+0:221        subgroupPartitionedInclusiveOrNV ( global highp 2-component vector of int)
+0:221          vector swizzle ( temp highp 2-component vector of int)
+0:221            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:221              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:221                Constant:
+0:221                  1 (const int)
+0:221              Constant:
+0:221                1 (const int)
+0:221            Sequence
+0:221              Constant:
+0:221                0 (const int)
+0:221              Constant:
+0:221                1 (const int)
+0:221          'ballot' ( temp highp 4-component vector of uint)
+0:222      move second child to first child ( temp highp 3-component vector of int)
+0:222        vector swizzle ( temp highp 3-component vector of int)
+0:222          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:222            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:222              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:222              Constant:
+0:222                2 (const int)
+0:222            Constant:
+0:222              1 (const int)
+0:222          Sequence
+0:222            Constant:
+0:222              0 (const int)
+0:222            Constant:
+0:222              1 (const int)
+0:222            Constant:
+0:222              2 (const int)
+0:222        subgroupPartitionedInclusiveOrNV ( global highp 3-component vector of int)
+0:222          vector swizzle ( temp highp 3-component vector of int)
+0:222            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:222              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:222                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:222                Constant:
+0:222                  2 (const int)
+0:222              Constant:
+0:222                1 (const int)
+0:222            Sequence
+0:222              Constant:
+0:222                0 (const int)
+0:222              Constant:
+0:222                1 (const int)
+0:222              Constant:
+0:222                2 (const int)
+0:222          'ballot' ( temp highp 4-component vector of uint)
+0:223      move second child to first child ( temp highp 4-component vector of int)
+0:223        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:223          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223            Constant:
+0:223              2 (const int)
+0:223          Constant:
+0:223            1 (const int)
+0:223        subgroupPartitionedInclusiveOrNV ( global highp 4-component vector of int)
+0:223          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:223            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:223              Constant:
+0:223                3 (const int)
+0:223            Constant:
+0:223              1 (const int)
+0:223          'ballot' ( temp highp 4-component vector of uint)
+0:225      move second child to first child ( temp highp uint)
+0:225        direct index ( temp highp uint)
+0:225          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:225            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225              Constant:
+0:225                2 (const int)
+0:225            Constant:
+0:225              2 (const int)
+0:225          Constant:
+0:225            0 (const int)
+0:225        subgroupPartitionedInclusiveOrNV ( global highp uint)
+0:225          direct index ( temp highp uint)
+0:225            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:225              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:225                Constant:
+0:225                  0 (const int)
+0:225              Constant:
+0:225                2 (const int)
+0:225            Constant:
+0:225              0 (const int)
+0:225          'ballot' ( temp highp 4-component vector of uint)
+0:226      move second child to first child ( temp highp 2-component vector of uint)
+0:226        vector swizzle ( temp highp 2-component vector of uint)
+0:226          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:226            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226              Constant:
+0:226                2 (const int)
+0:226            Constant:
+0:226              2 (const int)
+0:226          Sequence
+0:226            Constant:
+0:226              0 (const int)
+0:226            Constant:
+0:226              1 (const int)
+0:226        subgroupPartitionedInclusiveOrNV ( global highp 2-component vector of uint)
+0:226          vector swizzle ( temp highp 2-component vector of uint)
+0:226            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:226              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:226                Constant:
+0:226                  1 (const int)
+0:226              Constant:
+0:226                2 (const int)
+0:226            Sequence
+0:226              Constant:
+0:226                0 (const int)
+0:226              Constant:
+0:226                1 (const int)
+0:226          'ballot' ( temp highp 4-component vector of uint)
+0:227      move second child to first child ( temp highp 3-component vector of uint)
+0:227        vector swizzle ( temp highp 3-component vector of uint)
+0:227          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:227            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:227              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:227              Constant:
+0:227                2 (const int)
+0:227            Constant:
+0:227              2 (const int)
+0:227          Sequence
+0:227            Constant:
+0:227              0 (const int)
+0:227            Constant:
+0:227              1 (const int)
+0:227            Constant:
+0:227              2 (const int)
+0:227        subgroupPartitionedInclusiveOrNV ( global highp 3-component vector of uint)
+0:227          vector swizzle ( temp highp 3-component vector of uint)
+0:227            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:227              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:227                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:227                Constant:
+0:227                  2 (const int)
+0:227              Constant:
+0:227                2 (const int)
+0:227            Sequence
+0:227              Constant:
+0:227                0 (const int)
+0:227              Constant:
+0:227                1 (const int)
+0:227              Constant:
+0:227                2 (const int)
+0:227          'ballot' ( temp highp 4-component vector of uint)
+0:228      move second child to first child ( temp highp 4-component vector of uint)
+0:228        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:228          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228            Constant:
+0:228              2 (const int)
+0:228          Constant:
+0:228            2 (const int)
+0:228        subgroupPartitionedInclusiveOrNV ( global highp 4-component vector of uint)
+0:228          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:228            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:228              Constant:
+0:228                3 (const int)
+0:228            Constant:
+0:228              2 (const int)
+0:228          'ballot' ( temp highp 4-component vector of uint)
+0:230      move second child to first child ( temp highp int)
+0:230        direct index ( temp highp int)
+0:230          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:230            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230              Constant:
+0:230                3 (const int)
+0:230            Constant:
+0:230              1 (const int)
+0:230          Constant:
+0:230            0 (const int)
+0:230        Convert bool to int ( temp highp int)
+0:230          subgroupPartitionedInclusiveOrNV ( global bool, operation at highp)
+0:230            Compare Less Than ( temp bool)
+0:230              direct index ( temp highp int)
+0:230                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:230                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:230                    Constant:
+0:230                      0 (const int)
+0:230                  Constant:
+0:230                    1 (const int)
+0:230                Constant:
+0:230                  0 (const int)
+0:230              Constant:
+0:230                0 (const int)
+0:230            'ballot' ( temp highp 4-component vector of uint)
+0:231      move second child to first child ( temp highp 2-component vector of int)
+0:231        vector swizzle ( temp highp 2-component vector of int)
+0:231          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:231            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231              Constant:
+0:231                3 (const int)
+0:231            Constant:
+0:231              1 (const int)
+0:231          Sequence
+0:231            Constant:
+0:231              0 (const int)
+0:231            Constant:
+0:231              1 (const int)
+0:231        Convert bool to int ( temp highp 2-component vector of int)
+0:231          subgroupPartitionedInclusiveOrNV ( global 2-component vector of bool, operation at highp)
+0:231            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:231              vector swizzle ( temp highp 2-component vector of int)
+0:231                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:231                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:231                    Constant:
+0:231                      1 (const int)
+0:231                  Constant:
+0:231                    1 (const int)
+0:231                Sequence
+0:231                  Constant:
+0:231                    0 (const int)
+0:231                  Constant:
+0:231                    1 (const int)
+0:231              Constant:
+0:231                0 (const int)
+0:231                0 (const int)
+0:231            'ballot' ( temp highp 4-component vector of uint)
+0:232      move second child to first child ( temp highp 3-component vector of int)
+0:232        vector swizzle ( temp highp 3-component vector of int)
+0:232          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:232            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:232              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:232              Constant:
+0:232                3 (const int)
+0:232            Constant:
+0:232              1 (const int)
+0:232          Sequence
+0:232            Constant:
+0:232              0 (const int)
+0:232            Constant:
+0:232              1 (const int)
+0:232            Constant:
+0:232              2 (const int)
+0:232        Convert bool to int ( temp highp 3-component vector of int)
+0:232          subgroupPartitionedInclusiveOrNV ( global 3-component vector of bool, operation at highp)
+0:232            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:232              vector swizzle ( temp highp 3-component vector of int)
+0:232                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:232                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:232                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:232                    Constant:
+0:232                      1 (const int)
+0:232                  Constant:
+0:232                    1 (const int)
+0:232                Sequence
+0:232                  Constant:
+0:232                    0 (const int)
+0:232                  Constant:
+0:232                    1 (const int)
+0:232                  Constant:
+0:232                    2 (const int)
+0:232              Constant:
+0:232                0 (const int)
+0:232                0 (const int)
+0:232                0 (const int)
+0:232            'ballot' ( temp highp 4-component vector of uint)
+0:233      move second child to first child ( temp highp 4-component vector of int)
+0:233        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:233          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233            Constant:
+0:233              3 (const int)
+0:233          Constant:
+0:233            1 (const int)
+0:233        Convert bool to int ( temp highp 4-component vector of int)
+0:233          subgroupPartitionedInclusiveOrNV ( global 4-component vector of bool, operation at highp)
+0:233            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:233              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:233                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:233                  Constant:
+0:233                    1 (const int)
+0:233                Constant:
+0:233                  1 (const int)
+0:233              Constant:
+0:233                0 (const int)
+0:233                0 (const int)
+0:233                0 (const int)
+0:233                0 (const int)
+0:233            'ballot' ( temp highp 4-component vector of uint)
+0:235      move second child to first child ( temp highp int)
+0:235        direct index ( temp highp int)
+0:235          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:235            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235              Constant:
+0:235                3 (const int)
+0:235            Constant:
+0:235              1 (const int)
+0:235          Constant:
+0:235            0 (const int)
+0:235        subgroupPartitionedInclusiveXorNV ( global highp int)
+0:235          direct index ( temp highp int)
+0:235            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:235              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:235                Constant:
+0:235                  0 (const int)
+0:235              Constant:
+0:235                1 (const int)
+0:235            Constant:
+0:235              0 (const int)
+0:235          'ballot' ( temp highp 4-component vector of uint)
+0:236      move second child to first child ( temp highp 2-component vector of int)
+0:236        vector swizzle ( temp highp 2-component vector of int)
+0:236          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:236            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236              Constant:
+0:236                3 (const int)
+0:236            Constant:
+0:236              1 (const int)
+0:236          Sequence
+0:236            Constant:
+0:236              0 (const int)
+0:236            Constant:
+0:236              1 (const int)
+0:236        subgroupPartitionedInclusiveXorNV ( global highp 2-component vector of int)
+0:236          vector swizzle ( temp highp 2-component vector of int)
+0:236            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:236              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:236                Constant:
+0:236                  1 (const int)
+0:236              Constant:
+0:236                1 (const int)
+0:236            Sequence
+0:236              Constant:
+0:236                0 (const int)
+0:236              Constant:
+0:236                1 (const int)
+0:236          'ballot' ( temp highp 4-component vector of uint)
+0:237      move second child to first child ( temp highp 3-component vector of int)
+0:237        vector swizzle ( temp highp 3-component vector of int)
+0:237          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:237            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:237              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:237              Constant:
+0:237                3 (const int)
+0:237            Constant:
+0:237              1 (const int)
+0:237          Sequence
+0:237            Constant:
+0:237              0 (const int)
+0:237            Constant:
+0:237              1 (const int)
+0:237            Constant:
+0:237              2 (const int)
+0:237        subgroupPartitionedInclusiveXorNV ( global highp 3-component vector of int)
+0:237          vector swizzle ( temp highp 3-component vector of int)
+0:237            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:237              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:237                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:237                Constant:
+0:237                  2 (const int)
+0:237              Constant:
+0:237                1 (const int)
+0:237            Sequence
+0:237              Constant:
+0:237                0 (const int)
+0:237              Constant:
+0:237                1 (const int)
+0:237              Constant:
+0:237                2 (const int)
+0:237          'ballot' ( temp highp 4-component vector of uint)
+0:238      move second child to first child ( temp highp 4-component vector of int)
+0:238        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:238          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238            Constant:
+0:238              3 (const int)
+0:238          Constant:
+0:238            1 (const int)
+0:238        subgroupPartitionedInclusiveXorNV ( global highp 4-component vector of int)
+0:238          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:238            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:238              Constant:
+0:238                3 (const int)
+0:238            Constant:
+0:238              1 (const int)
+0:238          'ballot' ( temp highp 4-component vector of uint)
+0:240      move second child to first child ( temp highp uint)
+0:240        direct index ( temp highp uint)
+0:240          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:240            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240              Constant:
+0:240                3 (const int)
+0:240            Constant:
+0:240              2 (const int)
+0:240          Constant:
+0:240            0 (const int)
+0:240        subgroupPartitionedInclusiveXorNV ( global highp uint)
+0:240          direct index ( temp highp uint)
+0:240            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:240              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:240                Constant:
+0:240                  0 (const int)
+0:240              Constant:
+0:240                2 (const int)
+0:240            Constant:
+0:240              0 (const int)
+0:240          'ballot' ( temp highp 4-component vector of uint)
+0:241      move second child to first child ( temp highp 2-component vector of uint)
+0:241        vector swizzle ( temp highp 2-component vector of uint)
+0:241          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:241            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241              Constant:
+0:241                3 (const int)
+0:241            Constant:
+0:241              2 (const int)
+0:241          Sequence
+0:241            Constant:
+0:241              0 (const int)
+0:241            Constant:
+0:241              1 (const int)
+0:241        subgroupPartitionedInclusiveXorNV ( global highp 2-component vector of uint)
+0:241          vector swizzle ( temp highp 2-component vector of uint)
+0:241            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:241              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:241                Constant:
+0:241                  1 (const int)
+0:241              Constant:
+0:241                2 (const int)
+0:241            Sequence
+0:241              Constant:
+0:241                0 (const int)
+0:241              Constant:
+0:241                1 (const int)
+0:241          'ballot' ( temp highp 4-component vector of uint)
+0:242      move second child to first child ( temp highp 3-component vector of uint)
+0:242        vector swizzle ( temp highp 3-component vector of uint)
+0:242          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:242            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:242              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:242              Constant:
+0:242                3 (const int)
+0:242            Constant:
+0:242              2 (const int)
+0:242          Sequence
+0:242            Constant:
+0:242              0 (const int)
+0:242            Constant:
+0:242              1 (const int)
+0:242            Constant:
+0:242              2 (const int)
+0:242        subgroupPartitionedInclusiveXorNV ( global highp 3-component vector of uint)
+0:242          vector swizzle ( temp highp 3-component vector of uint)
+0:242            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:242              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:242                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:242                Constant:
+0:242                  2 (const int)
+0:242              Constant:
+0:242                2 (const int)
+0:242            Sequence
+0:242              Constant:
+0:242                0 (const int)
+0:242              Constant:
+0:242                1 (const int)
+0:242              Constant:
+0:242                2 (const int)
+0:242          'ballot' ( temp highp 4-component vector of uint)
+0:243      move second child to first child ( temp highp 4-component vector of uint)
+0:243        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:243          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243            Constant:
+0:243              3 (const int)
+0:243          Constant:
+0:243            2 (const int)
+0:243        subgroupPartitionedInclusiveXorNV ( global highp 4-component vector of uint)
+0:243          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:243            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:243              Constant:
+0:243                3 (const int)
+0:243            Constant:
+0:243              2 (const int)
+0:243          'ballot' ( temp highp 4-component vector of uint)
+0:245      move second child to first child ( temp highp int)
+0:245        direct index ( temp highp int)
+0:245          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:245            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245              Constant:
+0:245                3 (const int)
+0:245            Constant:
+0:245              1 (const int)
+0:245          Constant:
+0:245            0 (const int)
+0:245        Convert bool to int ( temp highp int)
+0:245          subgroupPartitionedInclusiveXorNV ( global bool, operation at highp)
+0:245            Compare Less Than ( temp bool)
+0:245              direct index ( temp highp int)
+0:245                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:245                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:245                    Constant:
+0:245                      0 (const int)
+0:245                  Constant:
+0:245                    1 (const int)
+0:245                Constant:
+0:245                  0 (const int)
+0:245              Constant:
+0:245                0 (const int)
+0:245            'ballot' ( temp highp 4-component vector of uint)
+0:246      move second child to first child ( temp highp 2-component vector of int)
+0:246        vector swizzle ( temp highp 2-component vector of int)
+0:246          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:246            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246              Constant:
+0:246                3 (const int)
+0:246            Constant:
+0:246              1 (const int)
+0:246          Sequence
+0:246            Constant:
+0:246              0 (const int)
+0:246            Constant:
+0:246              1 (const int)
+0:246        Convert bool to int ( temp highp 2-component vector of int)
+0:246          subgroupPartitionedInclusiveXorNV ( global 2-component vector of bool, operation at highp)
+0:246            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:246              vector swizzle ( temp highp 2-component vector of int)
+0:246                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:246                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:246                    Constant:
+0:246                      1 (const int)
+0:246                  Constant:
+0:246                    1 (const int)
+0:246                Sequence
+0:246                  Constant:
+0:246                    0 (const int)
+0:246                  Constant:
+0:246                    1 (const int)
+0:246              Constant:
+0:246                0 (const int)
+0:246                0 (const int)
+0:246            'ballot' ( temp highp 4-component vector of uint)
+0:247      move second child to first child ( temp highp 3-component vector of int)
+0:247        vector swizzle ( temp highp 3-component vector of int)
+0:247          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:247            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:247              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:247              Constant:
+0:247                3 (const int)
+0:247            Constant:
+0:247              1 (const int)
+0:247          Sequence
+0:247            Constant:
+0:247              0 (const int)
+0:247            Constant:
+0:247              1 (const int)
+0:247            Constant:
+0:247              2 (const int)
+0:247        Convert bool to int ( temp highp 3-component vector of int)
+0:247          subgroupPartitionedInclusiveXorNV ( global 3-component vector of bool, operation at highp)
+0:247            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:247              vector swizzle ( temp highp 3-component vector of int)
+0:247                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:247                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:247                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:247                    Constant:
+0:247                      1 (const int)
+0:247                  Constant:
+0:247                    1 (const int)
+0:247                Sequence
+0:247                  Constant:
+0:247                    0 (const int)
+0:247                  Constant:
+0:247                    1 (const int)
+0:247                  Constant:
+0:247                    2 (const int)
+0:247              Constant:
+0:247                0 (const int)
+0:247                0 (const int)
+0:247                0 (const int)
+0:247            'ballot' ( temp highp 4-component vector of uint)
+0:248      move second child to first child ( temp highp 4-component vector of int)
+0:248        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:248          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248            Constant:
+0:248              3 (const int)
+0:248          Constant:
+0:248            1 (const int)
+0:248        Convert bool to int ( temp highp 4-component vector of int)
+0:248          subgroupPartitionedInclusiveXorNV ( global 4-component vector of bool, operation at highp)
+0:248            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:248              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:248                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:248                  Constant:
+0:248                    1 (const int)
+0:248                Constant:
+0:248                  1 (const int)
+0:248              Constant:
+0:248                0 (const int)
+0:248                0 (const int)
+0:248                0 (const int)
+0:248                0 (const int)
+0:248            'ballot' ( temp highp 4-component vector of uint)
+0:250      move second child to first child ( temp highp float)
+0:250        direct index ( temp highp float)
+0:250          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:250            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250              Constant:
+0:250                0 (const int)
+0:250            Constant:
+0:250              0 (const int)
+0:250          Constant:
+0:250            0 (const int)
+0:250        subgroupPartitionedExclusiveAddNV ( global highp float)
+0:250          direct index ( temp highp float)
+0:250            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:250              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:250                Constant:
+0:250                  0 (const int)
+0:250              Constant:
+0:250                0 (const int)
+0:250            Constant:
+0:250              0 (const int)
+0:250          'ballot' ( temp highp 4-component vector of uint)
+0:251      move second child to first child ( temp highp 2-component vector of float)
+0:251        vector swizzle ( temp highp 2-component vector of float)
+0:251          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:251            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251              Constant:
+0:251                0 (const int)
+0:251            Constant:
+0:251              0 (const int)
+0:251          Sequence
+0:251            Constant:
+0:251              0 (const int)
+0:251            Constant:
+0:251              1 (const int)
+0:251        subgroupPartitionedExclusiveAddNV ( global highp 2-component vector of float)
+0:251          vector swizzle ( temp highp 2-component vector of float)
+0:251            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:251              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:251                Constant:
+0:251                  1 (const int)
+0:251              Constant:
+0:251                0 (const int)
+0:251            Sequence
+0:251              Constant:
+0:251                0 (const int)
+0:251              Constant:
+0:251                1 (const int)
+0:251          'ballot' ( temp highp 4-component vector of uint)
+0:252      move second child to first child ( temp highp 3-component vector of float)
+0:252        vector swizzle ( temp highp 3-component vector of float)
+0:252          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:252            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:252              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:252              Constant:
+0:252                0 (const int)
+0:252            Constant:
+0:252              0 (const int)
+0:252          Sequence
+0:252            Constant:
+0:252              0 (const int)
+0:252            Constant:
+0:252              1 (const int)
+0:252            Constant:
+0:252              2 (const int)
+0:252        subgroupPartitionedExclusiveAddNV ( global highp 3-component vector of float)
+0:252          vector swizzle ( temp highp 3-component vector of float)
+0:252            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:252              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:252                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:252                Constant:
+0:252                  2 (const int)
+0:252              Constant:
+0:252                0 (const int)
+0:252            Sequence
+0:252              Constant:
+0:252                0 (const int)
+0:252              Constant:
+0:252                1 (const int)
+0:252              Constant:
+0:252                2 (const int)
+0:252          'ballot' ( temp highp 4-component vector of uint)
+0:253      move second child to first child ( temp highp 4-component vector of float)
+0:253        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:253          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253            Constant:
+0:253              0 (const int)
+0:253          Constant:
+0:253            0 (const int)
+0:253        subgroupPartitionedExclusiveAddNV ( global highp 4-component vector of float)
+0:253          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:253            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:253              Constant:
+0:253                3 (const int)
+0:253            Constant:
+0:253              0 (const int)
+0:253          'ballot' ( temp highp 4-component vector of uint)
+0:255      move second child to first child ( temp highp int)
+0:255        direct index ( temp highp int)
+0:255          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:255            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255              Constant:
+0:255                0 (const int)
+0:255            Constant:
+0:255              1 (const int)
+0:255          Constant:
+0:255            0 (const int)
+0:255        subgroupPartitionedExclusiveAddNV ( global highp int)
+0:255          direct index ( temp highp int)
+0:255            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:255              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:255                Constant:
+0:255                  0 (const int)
+0:255              Constant:
+0:255                1 (const int)
+0:255            Constant:
+0:255              0 (const int)
+0:255          'ballot' ( temp highp 4-component vector of uint)
+0:256      move second child to first child ( temp highp 2-component vector of int)
+0:256        vector swizzle ( temp highp 2-component vector of int)
+0:256          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:256            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256              Constant:
+0:256                0 (const int)
+0:256            Constant:
+0:256              1 (const int)
+0:256          Sequence
+0:256            Constant:
+0:256              0 (const int)
+0:256            Constant:
+0:256              1 (const int)
+0:256        subgroupPartitionedExclusiveAddNV ( global highp 2-component vector of int)
+0:256          vector swizzle ( temp highp 2-component vector of int)
+0:256            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:256              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:256                Constant:
+0:256                  1 (const int)
+0:256              Constant:
+0:256                1 (const int)
+0:256            Sequence
+0:256              Constant:
+0:256                0 (const int)
+0:256              Constant:
+0:256                1 (const int)
+0:256          'ballot' ( temp highp 4-component vector of uint)
+0:257      move second child to first child ( temp highp 3-component vector of int)
+0:257        vector swizzle ( temp highp 3-component vector of int)
+0:257          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:257            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:257              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:257              Constant:
+0:257                0 (const int)
+0:257            Constant:
+0:257              1 (const int)
+0:257          Sequence
+0:257            Constant:
+0:257              0 (const int)
+0:257            Constant:
+0:257              1 (const int)
+0:257            Constant:
+0:257              2 (const int)
+0:257        subgroupPartitionedExclusiveAddNV ( global highp 3-component vector of int)
+0:257          vector swizzle ( temp highp 3-component vector of int)
+0:257            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:257              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:257                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:257                Constant:
+0:257                  2 (const int)
+0:257              Constant:
+0:257                1 (const int)
+0:257            Sequence
+0:257              Constant:
+0:257                0 (const int)
+0:257              Constant:
+0:257                1 (const int)
+0:257              Constant:
+0:257                2 (const int)
+0:257          'ballot' ( temp highp 4-component vector of uint)
+0:258      move second child to first child ( temp highp 4-component vector of int)
+0:258        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:258          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258            Constant:
+0:258              0 (const int)
+0:258          Constant:
+0:258            1 (const int)
+0:258        subgroupPartitionedExclusiveAddNV ( global highp 4-component vector of int)
+0:258          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:258            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:258              Constant:
+0:258                3 (const int)
+0:258            Constant:
+0:258              1 (const int)
+0:258          'ballot' ( temp highp 4-component vector of uint)
+0:260      move second child to first child ( temp highp uint)
+0:260        direct index ( temp highp uint)
+0:260          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:260            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260              Constant:
+0:260                0 (const int)
+0:260            Constant:
+0:260              2 (const int)
+0:260          Constant:
+0:260            0 (const int)
+0:260        subgroupPartitionedExclusiveAddNV ( global highp uint)
+0:260          direct index ( temp highp uint)
+0:260            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:260              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:260                Constant:
+0:260                  0 (const int)
+0:260              Constant:
+0:260                2 (const int)
+0:260            Constant:
+0:260              0 (const int)
+0:260          'ballot' ( temp highp 4-component vector of uint)
+0:261      move second child to first child ( temp highp 2-component vector of uint)
+0:261        vector swizzle ( temp highp 2-component vector of uint)
+0:261          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:261            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261              Constant:
+0:261                0 (const int)
+0:261            Constant:
+0:261              2 (const int)
+0:261          Sequence
+0:261            Constant:
+0:261              0 (const int)
+0:261            Constant:
+0:261              1 (const int)
+0:261        subgroupPartitionedExclusiveAddNV ( global highp 2-component vector of uint)
+0:261          vector swizzle ( temp highp 2-component vector of uint)
+0:261            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:261              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:261                Constant:
+0:261                  1 (const int)
+0:261              Constant:
+0:261                2 (const int)
+0:261            Sequence
+0:261              Constant:
+0:261                0 (const int)
+0:261              Constant:
+0:261                1 (const int)
+0:261          'ballot' ( temp highp 4-component vector of uint)
+0:262      move second child to first child ( temp highp 3-component vector of uint)
+0:262        vector swizzle ( temp highp 3-component vector of uint)
+0:262          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:262            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:262              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:262              Constant:
+0:262                0 (const int)
+0:262            Constant:
+0:262              2 (const int)
+0:262          Sequence
+0:262            Constant:
+0:262              0 (const int)
+0:262            Constant:
+0:262              1 (const int)
+0:262            Constant:
+0:262              2 (const int)
+0:262        subgroupPartitionedExclusiveAddNV ( global highp 3-component vector of uint)
+0:262          vector swizzle ( temp highp 3-component vector of uint)
+0:262            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:262              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:262                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:262                Constant:
+0:262                  2 (const int)
+0:262              Constant:
+0:262                2 (const int)
+0:262            Sequence
+0:262              Constant:
+0:262                0 (const int)
+0:262              Constant:
+0:262                1 (const int)
+0:262              Constant:
+0:262                2 (const int)
+0:262          'ballot' ( temp highp 4-component vector of uint)
+0:263      move second child to first child ( temp highp 4-component vector of uint)
+0:263        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:263          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263            Constant:
+0:263              0 (const int)
+0:263          Constant:
+0:263            2 (const int)
+0:263        subgroupPartitionedExclusiveAddNV ( global highp 4-component vector of uint)
+0:263          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:263            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:263              Constant:
+0:263                3 (const int)
+0:263            Constant:
+0:263              2 (const int)
+0:263          'ballot' ( temp highp 4-component vector of uint)
+0:265      move second child to first child ( temp highp float)
+0:265        direct index ( temp highp float)
+0:265          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:265            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265              Constant:
+0:265                0 (const int)
+0:265            Constant:
+0:265              0 (const int)
+0:265          Constant:
+0:265            0 (const int)
+0:265        subgroupPartitionedExclusiveMulNV ( global highp float)
+0:265          direct index ( temp highp float)
+0:265            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:265              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:265                Constant:
+0:265                  0 (const int)
+0:265              Constant:
+0:265                0 (const int)
+0:265            Constant:
+0:265              0 (const int)
+0:265          'ballot' ( temp highp 4-component vector of uint)
+0:266      move second child to first child ( temp highp 2-component vector of float)
+0:266        vector swizzle ( temp highp 2-component vector of float)
+0:266          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:266            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266              Constant:
+0:266                0 (const int)
+0:266            Constant:
+0:266              0 (const int)
+0:266          Sequence
+0:266            Constant:
+0:266              0 (const int)
+0:266            Constant:
+0:266              1 (const int)
+0:266        subgroupPartitionedExclusiveMulNV ( global highp 2-component vector of float)
+0:266          vector swizzle ( temp highp 2-component vector of float)
+0:266            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:266              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:266                Constant:
+0:266                  1 (const int)
+0:266              Constant:
+0:266                0 (const int)
+0:266            Sequence
+0:266              Constant:
+0:266                0 (const int)
+0:266              Constant:
+0:266                1 (const int)
+0:266          'ballot' ( temp highp 4-component vector of uint)
+0:267      move second child to first child ( temp highp 3-component vector of float)
+0:267        vector swizzle ( temp highp 3-component vector of float)
+0:267          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:267            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:267              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:267              Constant:
+0:267                0 (const int)
+0:267            Constant:
+0:267              0 (const int)
+0:267          Sequence
+0:267            Constant:
+0:267              0 (const int)
+0:267            Constant:
+0:267              1 (const int)
+0:267            Constant:
+0:267              2 (const int)
+0:267        subgroupPartitionedExclusiveMulNV ( global highp 3-component vector of float)
+0:267          vector swizzle ( temp highp 3-component vector of float)
+0:267            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:267              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:267                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:267                Constant:
+0:267                  2 (const int)
+0:267              Constant:
+0:267                0 (const int)
+0:267            Sequence
+0:267              Constant:
+0:267                0 (const int)
+0:267              Constant:
+0:267                1 (const int)
+0:267              Constant:
+0:267                2 (const int)
+0:267          'ballot' ( temp highp 4-component vector of uint)
+0:268      move second child to first child ( temp highp 4-component vector of float)
+0:268        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:268          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268            Constant:
+0:268              0 (const int)
+0:268          Constant:
+0:268            0 (const int)
+0:268        subgroupPartitionedExclusiveMulNV ( global highp 4-component vector of float)
+0:268          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:268            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:268              Constant:
+0:268                3 (const int)
+0:268            Constant:
+0:268              0 (const int)
+0:268          'ballot' ( temp highp 4-component vector of uint)
+0:270      move second child to first child ( temp highp int)
+0:270        direct index ( temp highp int)
+0:270          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:270            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270              Constant:
+0:270                1 (const int)
+0:270            Constant:
+0:270              1 (const int)
+0:270          Constant:
+0:270            0 (const int)
+0:270        subgroupPartitionedExclusiveMulNV ( global highp int)
+0:270          direct index ( temp highp int)
+0:270            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:270              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:270                Constant:
+0:270                  0 (const int)
+0:270              Constant:
+0:270                1 (const int)
+0:270            Constant:
+0:270              0 (const int)
+0:270          'ballot' ( temp highp 4-component vector of uint)
+0:271      move second child to first child ( temp highp 2-component vector of int)
+0:271        vector swizzle ( temp highp 2-component vector of int)
+0:271          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:271            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271              Constant:
+0:271                1 (const int)
+0:271            Constant:
+0:271              1 (const int)
+0:271          Sequence
+0:271            Constant:
+0:271              0 (const int)
+0:271            Constant:
+0:271              1 (const int)
+0:271        subgroupPartitionedExclusiveMulNV ( global highp 2-component vector of int)
+0:271          vector swizzle ( temp highp 2-component vector of int)
+0:271            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:271              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:271                Constant:
+0:271                  1 (const int)
+0:271              Constant:
+0:271                1 (const int)
+0:271            Sequence
+0:271              Constant:
+0:271                0 (const int)
+0:271              Constant:
+0:271                1 (const int)
+0:271          'ballot' ( temp highp 4-component vector of uint)
+0:272      move second child to first child ( temp highp 3-component vector of int)
+0:272        vector swizzle ( temp highp 3-component vector of int)
+0:272          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:272            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:272              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:272              Constant:
+0:272                1 (const int)
+0:272            Constant:
+0:272              1 (const int)
+0:272          Sequence
+0:272            Constant:
+0:272              0 (const int)
+0:272            Constant:
+0:272              1 (const int)
+0:272            Constant:
+0:272              2 (const int)
+0:272        subgroupPartitionedExclusiveMulNV ( global highp 3-component vector of int)
+0:272          vector swizzle ( temp highp 3-component vector of int)
+0:272            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:272              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:272                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:272                Constant:
+0:272                  2 (const int)
+0:272              Constant:
+0:272                1 (const int)
+0:272            Sequence
+0:272              Constant:
+0:272                0 (const int)
+0:272              Constant:
+0:272                1 (const int)
+0:272              Constant:
+0:272                2 (const int)
+0:272          'ballot' ( temp highp 4-component vector of uint)
+0:273      move second child to first child ( temp highp 4-component vector of int)
+0:273        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:273          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273            Constant:
+0:273              1 (const int)
+0:273          Constant:
+0:273            1 (const int)
+0:273        subgroupPartitionedExclusiveMulNV ( global highp 4-component vector of int)
+0:273          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:273            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:273              Constant:
+0:273                3 (const int)
+0:273            Constant:
+0:273              1 (const int)
+0:273          'ballot' ( temp highp 4-component vector of uint)
+0:275      move second child to first child ( temp highp uint)
+0:275        direct index ( temp highp uint)
+0:275          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:275            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275              Constant:
+0:275                1 (const int)
+0:275            Constant:
+0:275              2 (const int)
+0:275          Constant:
+0:275            0 (const int)
+0:275        subgroupPartitionedExclusiveMulNV ( global highp uint)
+0:275          direct index ( temp highp uint)
+0:275            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:275              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:275                Constant:
+0:275                  0 (const int)
+0:275              Constant:
+0:275                2 (const int)
+0:275            Constant:
+0:275              0 (const int)
+0:275          'ballot' ( temp highp 4-component vector of uint)
+0:276      move second child to first child ( temp highp 2-component vector of uint)
+0:276        vector swizzle ( temp highp 2-component vector of uint)
+0:276          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:276            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276              Constant:
+0:276                1 (const int)
+0:276            Constant:
+0:276              2 (const int)
+0:276          Sequence
+0:276            Constant:
+0:276              0 (const int)
+0:276            Constant:
+0:276              1 (const int)
+0:276        subgroupPartitionedExclusiveMulNV ( global highp 2-component vector of uint)
+0:276          vector swizzle ( temp highp 2-component vector of uint)
+0:276            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:276              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:276                Constant:
+0:276                  1 (const int)
+0:276              Constant:
+0:276                2 (const int)
+0:276            Sequence
+0:276              Constant:
+0:276                0 (const int)
+0:276              Constant:
+0:276                1 (const int)
+0:276          'ballot' ( temp highp 4-component vector of uint)
+0:277      move second child to first child ( temp highp 3-component vector of uint)
+0:277        vector swizzle ( temp highp 3-component vector of uint)
+0:277          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:277            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:277              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:277              Constant:
+0:277                1 (const int)
+0:277            Constant:
+0:277              2 (const int)
+0:277          Sequence
+0:277            Constant:
+0:277              0 (const int)
+0:277            Constant:
+0:277              1 (const int)
+0:277            Constant:
+0:277              2 (const int)
+0:277        subgroupPartitionedExclusiveMulNV ( global highp 3-component vector of uint)
+0:277          vector swizzle ( temp highp 3-component vector of uint)
+0:277            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:277              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:277                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:277                Constant:
+0:277                  2 (const int)
+0:277              Constant:
+0:277                2 (const int)
+0:277            Sequence
+0:277              Constant:
+0:277                0 (const int)
+0:277              Constant:
+0:277                1 (const int)
+0:277              Constant:
+0:277                2 (const int)
+0:277          'ballot' ( temp highp 4-component vector of uint)
+0:278      move second child to first child ( temp highp 4-component vector of uint)
+0:278        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:278          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278            Constant:
+0:278              1 (const int)
+0:278          Constant:
+0:278            2 (const int)
+0:278        subgroupPartitionedExclusiveMulNV ( global highp 4-component vector of uint)
+0:278          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:278            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:278              Constant:
+0:278                3 (const int)
+0:278            Constant:
+0:278              2 (const int)
+0:278          'ballot' ( temp highp 4-component vector of uint)
+0:280      move second child to first child ( temp highp float)
+0:280        direct index ( temp highp float)
+0:280          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:280            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280              Constant:
+0:280                1 (const int)
+0:280            Constant:
+0:280              0 (const int)
+0:280          Constant:
+0:280            0 (const int)
+0:280        subgroupPartitionedExclusiveMinNV ( global highp float)
+0:280          direct index ( temp highp float)
+0:280            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:280              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:280                Constant:
+0:280                  0 (const int)
+0:280              Constant:
+0:280                0 (const int)
+0:280            Constant:
+0:280              0 (const int)
+0:280          'ballot' ( temp highp 4-component vector of uint)
+0:281      move second child to first child ( temp highp 2-component vector of float)
+0:281        vector swizzle ( temp highp 2-component vector of float)
+0:281          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:281            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281              Constant:
+0:281                1 (const int)
+0:281            Constant:
+0:281              0 (const int)
+0:281          Sequence
+0:281            Constant:
+0:281              0 (const int)
+0:281            Constant:
+0:281              1 (const int)
+0:281        subgroupPartitionedExclusiveMinNV ( global highp 2-component vector of float)
+0:281          vector swizzle ( temp highp 2-component vector of float)
+0:281            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:281              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:281                Constant:
+0:281                  1 (const int)
+0:281              Constant:
+0:281                0 (const int)
+0:281            Sequence
+0:281              Constant:
+0:281                0 (const int)
+0:281              Constant:
+0:281                1 (const int)
+0:281          'ballot' ( temp highp 4-component vector of uint)
+0:282      move second child to first child ( temp highp 3-component vector of float)
+0:282        vector swizzle ( temp highp 3-component vector of float)
+0:282          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:282            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:282              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:282              Constant:
+0:282                1 (const int)
+0:282            Constant:
+0:282              0 (const int)
+0:282          Sequence
+0:282            Constant:
+0:282              0 (const int)
+0:282            Constant:
+0:282              1 (const int)
+0:282            Constant:
+0:282              2 (const int)
+0:282        subgroupPartitionedExclusiveMinNV ( global highp 3-component vector of float)
+0:282          vector swizzle ( temp highp 3-component vector of float)
+0:282            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:282              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:282                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:282                Constant:
+0:282                  2 (const int)
+0:282              Constant:
+0:282                0 (const int)
+0:282            Sequence
+0:282              Constant:
+0:282                0 (const int)
+0:282              Constant:
+0:282                1 (const int)
+0:282              Constant:
+0:282                2 (const int)
+0:282          'ballot' ( temp highp 4-component vector of uint)
+0:283      move second child to first child ( temp highp 4-component vector of float)
+0:283        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:283          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283            Constant:
+0:283              1 (const int)
+0:283          Constant:
+0:283            0 (const int)
+0:283        subgroupPartitionedExclusiveMinNV ( global highp 4-component vector of float)
+0:283          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:283            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:283              Constant:
+0:283                3 (const int)
+0:283            Constant:
+0:283              0 (const int)
+0:283          'ballot' ( temp highp 4-component vector of uint)
+0:285      move second child to first child ( temp highp int)
+0:285        direct index ( temp highp int)
+0:285          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:285            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285              Constant:
+0:285                1 (const int)
+0:285            Constant:
+0:285              1 (const int)
+0:285          Constant:
+0:285            0 (const int)
+0:285        subgroupPartitionedExclusiveMinNV ( global highp int)
+0:285          direct index ( temp highp int)
+0:285            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:285              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:285                Constant:
+0:285                  0 (const int)
+0:285              Constant:
+0:285                1 (const int)
+0:285            Constant:
+0:285              0 (const int)
+0:285          'ballot' ( temp highp 4-component vector of uint)
+0:286      move second child to first child ( temp highp 2-component vector of int)
+0:286        vector swizzle ( temp highp 2-component vector of int)
+0:286          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:286            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286              Constant:
+0:286                1 (const int)
+0:286            Constant:
+0:286              1 (const int)
+0:286          Sequence
+0:286            Constant:
+0:286              0 (const int)
+0:286            Constant:
+0:286              1 (const int)
+0:286        subgroupPartitionedExclusiveMinNV ( global highp 2-component vector of int)
+0:286          vector swizzle ( temp highp 2-component vector of int)
+0:286            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:286              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:286                Constant:
+0:286                  1 (const int)
+0:286              Constant:
+0:286                1 (const int)
+0:286            Sequence
+0:286              Constant:
+0:286                0 (const int)
+0:286              Constant:
+0:286                1 (const int)
+0:286          'ballot' ( temp highp 4-component vector of uint)
+0:287      move second child to first child ( temp highp 3-component vector of int)
+0:287        vector swizzle ( temp highp 3-component vector of int)
+0:287          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:287            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:287              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:287              Constant:
+0:287                1 (const int)
+0:287            Constant:
+0:287              1 (const int)
+0:287          Sequence
+0:287            Constant:
+0:287              0 (const int)
+0:287            Constant:
+0:287              1 (const int)
+0:287            Constant:
+0:287              2 (const int)
+0:287        subgroupPartitionedExclusiveMinNV ( global highp 3-component vector of int)
+0:287          vector swizzle ( temp highp 3-component vector of int)
+0:287            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:287              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:287                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:287                Constant:
+0:287                  2 (const int)
+0:287              Constant:
+0:287                1 (const int)
+0:287            Sequence
+0:287              Constant:
+0:287                0 (const int)
+0:287              Constant:
+0:287                1 (const int)
+0:287              Constant:
+0:287                2 (const int)
+0:287          'ballot' ( temp highp 4-component vector of uint)
+0:288      move second child to first child ( temp highp 4-component vector of int)
+0:288        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:288          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288            Constant:
+0:288              1 (const int)
+0:288          Constant:
+0:288            1 (const int)
+0:288        subgroupPartitionedExclusiveMinNV ( global highp 4-component vector of int)
+0:288          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:288            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:288              Constant:
+0:288                3 (const int)
+0:288            Constant:
+0:288              1 (const int)
+0:288          'ballot' ( temp highp 4-component vector of uint)
+0:290      move second child to first child ( temp highp uint)
+0:290        direct index ( temp highp uint)
+0:290          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:290            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290              Constant:
+0:290                2 (const int)
+0:290            Constant:
+0:290              2 (const int)
+0:290          Constant:
+0:290            0 (const int)
+0:290        subgroupPartitionedExclusiveMinNV ( global highp uint)
+0:290          direct index ( temp highp uint)
+0:290            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:290              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:290                Constant:
+0:290                  0 (const int)
+0:290              Constant:
+0:290                2 (const int)
+0:290            Constant:
+0:290              0 (const int)
+0:290          'ballot' ( temp highp 4-component vector of uint)
+0:291      move second child to first child ( temp highp 2-component vector of uint)
+0:291        vector swizzle ( temp highp 2-component vector of uint)
+0:291          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:291            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291              Constant:
+0:291                2 (const int)
+0:291            Constant:
+0:291              2 (const int)
+0:291          Sequence
+0:291            Constant:
+0:291              0 (const int)
+0:291            Constant:
+0:291              1 (const int)
+0:291        subgroupPartitionedExclusiveMinNV ( global highp 2-component vector of uint)
+0:291          vector swizzle ( temp highp 2-component vector of uint)
+0:291            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:291              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:291                Constant:
+0:291                  1 (const int)
+0:291              Constant:
+0:291                2 (const int)
+0:291            Sequence
+0:291              Constant:
+0:291                0 (const int)
+0:291              Constant:
+0:291                1 (const int)
+0:291          'ballot' ( temp highp 4-component vector of uint)
+0:292      move second child to first child ( temp highp 3-component vector of uint)
+0:292        vector swizzle ( temp highp 3-component vector of uint)
+0:292          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:292            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:292              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:292              Constant:
+0:292                2 (const int)
+0:292            Constant:
+0:292              2 (const int)
+0:292          Sequence
+0:292            Constant:
+0:292              0 (const int)
+0:292            Constant:
+0:292              1 (const int)
+0:292            Constant:
+0:292              2 (const int)
+0:292        subgroupPartitionedExclusiveMinNV ( global highp 3-component vector of uint)
+0:292          vector swizzle ( temp highp 3-component vector of uint)
+0:292            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:292              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:292                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:292                Constant:
+0:292                  2 (const int)
+0:292              Constant:
+0:292                2 (const int)
+0:292            Sequence
+0:292              Constant:
+0:292                0 (const int)
+0:292              Constant:
+0:292                1 (const int)
+0:292              Constant:
+0:292                2 (const int)
+0:292          'ballot' ( temp highp 4-component vector of uint)
+0:293      move second child to first child ( temp highp 4-component vector of uint)
+0:293        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:293          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293            Constant:
+0:293              2 (const int)
+0:293          Constant:
+0:293            2 (const int)
+0:293        subgroupPartitionedExclusiveMinNV ( global highp 4-component vector of uint)
+0:293          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:293            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:293              Constant:
+0:293                3 (const int)
+0:293            Constant:
+0:293              2 (const int)
+0:293          'ballot' ( temp highp 4-component vector of uint)
+0:295      move second child to first child ( temp highp float)
+0:295        direct index ( temp highp float)
+0:295          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:295            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295              Constant:
+0:295                2 (const int)
+0:295            Constant:
+0:295              0 (const int)
+0:295          Constant:
+0:295            0 (const int)
+0:295        subgroupPartitionedExclusiveMaxNV ( global highp float)
+0:295          direct index ( temp highp float)
+0:295            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:295              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:295                Constant:
+0:295                  0 (const int)
+0:295              Constant:
+0:295                0 (const int)
+0:295            Constant:
+0:295              0 (const int)
+0:295          'ballot' ( temp highp 4-component vector of uint)
+0:296      move second child to first child ( temp highp 2-component vector of float)
+0:296        vector swizzle ( temp highp 2-component vector of float)
+0:296          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:296            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296              Constant:
+0:296                2 (const int)
+0:296            Constant:
+0:296              0 (const int)
+0:296          Sequence
+0:296            Constant:
+0:296              0 (const int)
+0:296            Constant:
+0:296              1 (const int)
+0:296        subgroupPartitionedExclusiveMaxNV ( global highp 2-component vector of float)
+0:296          vector swizzle ( temp highp 2-component vector of float)
+0:296            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:296              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:296                Constant:
+0:296                  1 (const int)
+0:296              Constant:
+0:296                0 (const int)
+0:296            Sequence
+0:296              Constant:
+0:296                0 (const int)
+0:296              Constant:
+0:296                1 (const int)
+0:296          'ballot' ( temp highp 4-component vector of uint)
+0:297      move second child to first child ( temp highp 3-component vector of float)
+0:297        vector swizzle ( temp highp 3-component vector of float)
+0:297          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:297            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:297              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:297              Constant:
+0:297                2 (const int)
+0:297            Constant:
+0:297              0 (const int)
+0:297          Sequence
+0:297            Constant:
+0:297              0 (const int)
+0:297            Constant:
+0:297              1 (const int)
+0:297            Constant:
+0:297              2 (const int)
+0:297        subgroupPartitionedExclusiveMaxNV ( global highp 3-component vector of float)
+0:297          vector swizzle ( temp highp 3-component vector of float)
+0:297            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:297              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:297                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:297                Constant:
+0:297                  2 (const int)
+0:297              Constant:
+0:297                0 (const int)
+0:297            Sequence
+0:297              Constant:
+0:297                0 (const int)
+0:297              Constant:
+0:297                1 (const int)
+0:297              Constant:
+0:297                2 (const int)
+0:297          'ballot' ( temp highp 4-component vector of uint)
+0:298      move second child to first child ( temp highp 4-component vector of float)
+0:298        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:298          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298            Constant:
+0:298              2 (const int)
+0:298          Constant:
+0:298            0 (const int)
+0:298        subgroupPartitionedExclusiveMaxNV ( global highp 4-component vector of float)
+0:298          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:298            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:298              Constant:
+0:298                3 (const int)
+0:298            Constant:
+0:298              0 (const int)
+0:298          'ballot' ( temp highp 4-component vector of uint)
+0:300      move second child to first child ( temp highp int)
+0:300        direct index ( temp highp int)
+0:300          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:300            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300              Constant:
+0:300                2 (const int)
+0:300            Constant:
+0:300              1 (const int)
+0:300          Constant:
+0:300            0 (const int)
+0:300        subgroupPartitionedExclusiveMaxNV ( global highp int)
+0:300          direct index ( temp highp int)
+0:300            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:300              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:300                Constant:
+0:300                  0 (const int)
+0:300              Constant:
+0:300                1 (const int)
+0:300            Constant:
+0:300              0 (const int)
+0:300          'ballot' ( temp highp 4-component vector of uint)
+0:301      move second child to first child ( temp highp 2-component vector of int)
+0:301        vector swizzle ( temp highp 2-component vector of int)
+0:301          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:301            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301              Constant:
+0:301                2 (const int)
+0:301            Constant:
+0:301              1 (const int)
+0:301          Sequence
+0:301            Constant:
+0:301              0 (const int)
+0:301            Constant:
+0:301              1 (const int)
+0:301        subgroupPartitionedExclusiveMaxNV ( global highp 2-component vector of int)
+0:301          vector swizzle ( temp highp 2-component vector of int)
+0:301            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:301              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:301                Constant:
+0:301                  1 (const int)
+0:301              Constant:
+0:301                1 (const int)
+0:301            Sequence
+0:301              Constant:
+0:301                0 (const int)
+0:301              Constant:
+0:301                1 (const int)
+0:301          'ballot' ( temp highp 4-component vector of uint)
+0:302      move second child to first child ( temp highp 3-component vector of int)
+0:302        vector swizzle ( temp highp 3-component vector of int)
+0:302          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:302            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:302              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:302              Constant:
+0:302                2 (const int)
+0:302            Constant:
+0:302              1 (const int)
+0:302          Sequence
+0:302            Constant:
+0:302              0 (const int)
+0:302            Constant:
+0:302              1 (const int)
+0:302            Constant:
+0:302              2 (const int)
+0:302        subgroupPartitionedExclusiveMaxNV ( global highp 3-component vector of int)
+0:302          vector swizzle ( temp highp 3-component vector of int)
+0:302            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:302              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:302                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:302                Constant:
+0:302                  2 (const int)
+0:302              Constant:
+0:302                1 (const int)
+0:302            Sequence
+0:302              Constant:
+0:302                0 (const int)
+0:302              Constant:
+0:302                1 (const int)
+0:302              Constant:
+0:302                2 (const int)
+0:302          'ballot' ( temp highp 4-component vector of uint)
+0:303      move second child to first child ( temp highp 4-component vector of int)
+0:303        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:303          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303            Constant:
+0:303              2 (const int)
+0:303          Constant:
+0:303            1 (const int)
+0:303        subgroupPartitionedExclusiveMaxNV ( global highp 4-component vector of int)
+0:303          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:303            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:303              Constant:
+0:303                3 (const int)
+0:303            Constant:
+0:303              1 (const int)
+0:303          'ballot' ( temp highp 4-component vector of uint)
+0:305      move second child to first child ( temp highp uint)
+0:305        direct index ( temp highp uint)
+0:305          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:305            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305              Constant:
+0:305                2 (const int)
+0:305            Constant:
+0:305              2 (const int)
+0:305          Constant:
+0:305            0 (const int)
+0:305        subgroupPartitionedExclusiveMaxNV ( global highp uint)
+0:305          direct index ( temp highp uint)
+0:305            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:305              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:305                Constant:
+0:305                  0 (const int)
+0:305              Constant:
+0:305                2 (const int)
+0:305            Constant:
+0:305              0 (const int)
+0:305          'ballot' ( temp highp 4-component vector of uint)
+0:306      move second child to first child ( temp highp 2-component vector of uint)
+0:306        vector swizzle ( temp highp 2-component vector of uint)
+0:306          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:306            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306              Constant:
+0:306                2 (const int)
+0:306            Constant:
+0:306              2 (const int)
+0:306          Sequence
+0:306            Constant:
+0:306              0 (const int)
+0:306            Constant:
+0:306              1 (const int)
+0:306        subgroupPartitionedExclusiveMaxNV ( global highp 2-component vector of uint)
+0:306          vector swizzle ( temp highp 2-component vector of uint)
+0:306            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:306              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:306                Constant:
+0:306                  1 (const int)
+0:306              Constant:
+0:306                2 (const int)
+0:306            Sequence
+0:306              Constant:
+0:306                0 (const int)
+0:306              Constant:
+0:306                1 (const int)
+0:306          'ballot' ( temp highp 4-component vector of uint)
+0:307      move second child to first child ( temp highp 3-component vector of uint)
+0:307        vector swizzle ( temp highp 3-component vector of uint)
+0:307          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:307            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:307              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:307              Constant:
+0:307                2 (const int)
+0:307            Constant:
+0:307              2 (const int)
+0:307          Sequence
+0:307            Constant:
+0:307              0 (const int)
+0:307            Constant:
+0:307              1 (const int)
+0:307            Constant:
+0:307              2 (const int)
+0:307        subgroupPartitionedExclusiveMaxNV ( global highp 3-component vector of uint)
+0:307          vector swizzle ( temp highp 3-component vector of uint)
+0:307            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:307              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:307                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:307                Constant:
+0:307                  2 (const int)
+0:307              Constant:
+0:307                2 (const int)
+0:307            Sequence
+0:307              Constant:
+0:307                0 (const int)
+0:307              Constant:
+0:307                1 (const int)
+0:307              Constant:
+0:307                2 (const int)
+0:307          'ballot' ( temp highp 4-component vector of uint)
+0:308      move second child to first child ( temp highp 4-component vector of uint)
+0:308        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:308          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308            Constant:
+0:308              2 (const int)
+0:308          Constant:
+0:308            2 (const int)
+0:308        subgroupPartitionedExclusiveMaxNV ( global highp 4-component vector of uint)
+0:308          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:308            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:308              Constant:
+0:308                3 (const int)
+0:308            Constant:
+0:308              2 (const int)
+0:308          'ballot' ( temp highp 4-component vector of uint)
+0:310      move second child to first child ( temp highp int)
+0:310        direct index ( temp highp int)
+0:310          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:310            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310              Constant:
+0:310                2 (const int)
+0:310            Constant:
+0:310              1 (const int)
+0:310          Constant:
+0:310            0 (const int)
+0:310        subgroupPartitionedExclusiveAndNV ( global highp int)
+0:310          direct index ( temp highp int)
+0:310            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:310              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:310                Constant:
+0:310                  0 (const int)
+0:310              Constant:
+0:310                1 (const int)
+0:310            Constant:
+0:310              0 (const int)
+0:310          'ballot' ( temp highp 4-component vector of uint)
+0:311      move second child to first child ( temp highp 2-component vector of int)
+0:311        vector swizzle ( temp highp 2-component vector of int)
+0:311          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:311            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311              Constant:
+0:311                2 (const int)
+0:311            Constant:
+0:311              1 (const int)
+0:311          Sequence
+0:311            Constant:
+0:311              0 (const int)
+0:311            Constant:
+0:311              1 (const int)
+0:311        subgroupPartitionedExclusiveAndNV ( global highp 2-component vector of int)
+0:311          vector swizzle ( temp highp 2-component vector of int)
+0:311            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:311              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:311                Constant:
+0:311                  1 (const int)
+0:311              Constant:
+0:311                1 (const int)
+0:311            Sequence
+0:311              Constant:
+0:311                0 (const int)
+0:311              Constant:
+0:311                1 (const int)
+0:311          'ballot' ( temp highp 4-component vector of uint)
+0:312      move second child to first child ( temp highp 3-component vector of int)
+0:312        vector swizzle ( temp highp 3-component vector of int)
+0:312          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:312            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:312              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:312              Constant:
+0:312                2 (const int)
+0:312            Constant:
+0:312              1 (const int)
+0:312          Sequence
+0:312            Constant:
+0:312              0 (const int)
+0:312            Constant:
+0:312              1 (const int)
+0:312            Constant:
+0:312              2 (const int)
+0:312        subgroupPartitionedExclusiveAndNV ( global highp 3-component vector of int)
+0:312          vector swizzle ( temp highp 3-component vector of int)
+0:312            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:312              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:312                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:312                Constant:
+0:312                  2 (const int)
+0:312              Constant:
+0:312                1 (const int)
+0:312            Sequence
+0:312              Constant:
+0:312                0 (const int)
+0:312              Constant:
+0:312                1 (const int)
+0:312              Constant:
+0:312                2 (const int)
+0:312          'ballot' ( temp highp 4-component vector of uint)
+0:313      move second child to first child ( temp highp 4-component vector of int)
+0:313        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:313          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313            Constant:
+0:313              2 (const int)
+0:313          Constant:
+0:313            1 (const int)
+0:313        subgroupPartitionedExclusiveAndNV ( global highp 4-component vector of int)
+0:313          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:313            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:313              Constant:
+0:313                3 (const int)
+0:313            Constant:
+0:313              1 (const int)
+0:313          'ballot' ( temp highp 4-component vector of uint)
+0:315      move second child to first child ( temp highp uint)
+0:315        direct index ( temp highp uint)
+0:315          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:315            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315              Constant:
+0:315                2 (const int)
+0:315            Constant:
+0:315              2 (const int)
+0:315          Constant:
+0:315            0 (const int)
+0:315        subgroupPartitionedExclusiveAndNV ( global highp uint)
+0:315          direct index ( temp highp uint)
+0:315            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:315              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:315                Constant:
+0:315                  0 (const int)
+0:315              Constant:
+0:315                2 (const int)
+0:315            Constant:
+0:315              0 (const int)
+0:315          'ballot' ( temp highp 4-component vector of uint)
+0:316      move second child to first child ( temp highp 2-component vector of uint)
+0:316        vector swizzle ( temp highp 2-component vector of uint)
+0:316          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:316            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316              Constant:
+0:316                2 (const int)
+0:316            Constant:
+0:316              2 (const int)
+0:316          Sequence
+0:316            Constant:
+0:316              0 (const int)
+0:316            Constant:
+0:316              1 (const int)
+0:316        subgroupPartitionedExclusiveAndNV ( global highp 2-component vector of uint)
+0:316          vector swizzle ( temp highp 2-component vector of uint)
+0:316            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:316              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:316                Constant:
+0:316                  1 (const int)
+0:316              Constant:
+0:316                2 (const int)
+0:316            Sequence
+0:316              Constant:
+0:316                0 (const int)
+0:316              Constant:
+0:316                1 (const int)
+0:316          'ballot' ( temp highp 4-component vector of uint)
+0:317      move second child to first child ( temp highp 3-component vector of uint)
+0:317        vector swizzle ( temp highp 3-component vector of uint)
+0:317          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:317            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:317              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:317              Constant:
+0:317                2 (const int)
+0:317            Constant:
+0:317              2 (const int)
+0:317          Sequence
+0:317            Constant:
+0:317              0 (const int)
+0:317            Constant:
+0:317              1 (const int)
+0:317            Constant:
+0:317              2 (const int)
+0:317        subgroupPartitionedExclusiveAndNV ( global highp 3-component vector of uint)
+0:317          vector swizzle ( temp highp 3-component vector of uint)
+0:317            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:317              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:317                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:317                Constant:
+0:317                  2 (const int)
+0:317              Constant:
+0:317                2 (const int)
+0:317            Sequence
+0:317              Constant:
+0:317                0 (const int)
+0:317              Constant:
+0:317                1 (const int)
+0:317              Constant:
+0:317                2 (const int)
+0:317          'ballot' ( temp highp 4-component vector of uint)
+0:318      move second child to first child ( temp highp 4-component vector of uint)
+0:318        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:318          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318            Constant:
+0:318              2 (const int)
+0:318          Constant:
+0:318            2 (const int)
+0:318        subgroupPartitionedExclusiveAndNV ( global highp 4-component vector of uint)
+0:318          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:318            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:318              Constant:
+0:318                3 (const int)
+0:318            Constant:
+0:318              2 (const int)
+0:318          'ballot' ( temp highp 4-component vector of uint)
+0:320      move second child to first child ( temp highp int)
+0:320        direct index ( temp highp int)
+0:320          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:320            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320              Constant:
+0:320                3 (const int)
+0:320            Constant:
+0:320              1 (const int)
+0:320          Constant:
+0:320            0 (const int)
+0:320        Convert bool to int ( temp highp int)
+0:320          subgroupPartitionedExclusiveAndNV ( global bool, operation at highp)
+0:320            Compare Less Than ( temp bool)
+0:320              direct index ( temp highp int)
+0:320                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:320                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:320                    Constant:
+0:320                      0 (const int)
+0:320                  Constant:
+0:320                    1 (const int)
+0:320                Constant:
+0:320                  0 (const int)
+0:320              Constant:
+0:320                0 (const int)
+0:320            'ballot' ( temp highp 4-component vector of uint)
+0:321      move second child to first child ( temp highp 2-component vector of int)
+0:321        vector swizzle ( temp highp 2-component vector of int)
+0:321          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:321            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321              Constant:
+0:321                3 (const int)
+0:321            Constant:
+0:321              1 (const int)
+0:321          Sequence
+0:321            Constant:
+0:321              0 (const int)
+0:321            Constant:
+0:321              1 (const int)
+0:321        Convert bool to int ( temp highp 2-component vector of int)
+0:321          subgroupPartitionedExclusiveAndNV ( global 2-component vector of bool, operation at highp)
+0:321            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:321              vector swizzle ( temp highp 2-component vector of int)
+0:321                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:321                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:321                    Constant:
+0:321                      1 (const int)
+0:321                  Constant:
+0:321                    1 (const int)
+0:321                Sequence
+0:321                  Constant:
+0:321                    0 (const int)
+0:321                  Constant:
+0:321                    1 (const int)
+0:321              Constant:
+0:321                0 (const int)
+0:321                0 (const int)
+0:321            'ballot' ( temp highp 4-component vector of uint)
+0:322      move second child to first child ( temp highp 3-component vector of int)
+0:322        vector swizzle ( temp highp 3-component vector of int)
+0:322          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:322            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:322              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:322              Constant:
+0:322                3 (const int)
+0:322            Constant:
+0:322              1 (const int)
+0:322          Sequence
+0:322            Constant:
+0:322              0 (const int)
+0:322            Constant:
+0:322              1 (const int)
+0:322            Constant:
+0:322              2 (const int)
+0:322        Convert bool to int ( temp highp 3-component vector of int)
+0:322          subgroupPartitionedExclusiveAndNV ( global 3-component vector of bool, operation at highp)
+0:322            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:322              vector swizzle ( temp highp 3-component vector of int)
+0:322                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:322                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:322                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:322                    Constant:
+0:322                      1 (const int)
+0:322                  Constant:
+0:322                    1 (const int)
+0:322                Sequence
+0:322                  Constant:
+0:322                    0 (const int)
+0:322                  Constant:
+0:322                    1 (const int)
+0:322                  Constant:
+0:322                    2 (const int)
+0:322              Constant:
+0:322                0 (const int)
+0:322                0 (const int)
+0:322                0 (const int)
+0:322            'ballot' ( temp highp 4-component vector of uint)
+0:323      move second child to first child ( temp highp 4-component vector of int)
+0:323        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:323          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323            Constant:
+0:323              3 (const int)
+0:323          Constant:
+0:323            1 (const int)
+0:323        Convert bool to int ( temp highp 4-component vector of int)
+0:323          subgroupPartitionedExclusiveAndNV ( global 4-component vector of bool, operation at highp)
+0:323            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:323              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:323                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:323                  Constant:
+0:323                    1 (const int)
+0:323                Constant:
+0:323                  1 (const int)
+0:323              Constant:
+0:323                0 (const int)
+0:323                0 (const int)
+0:323                0 (const int)
+0:323                0 (const int)
+0:323            'ballot' ( temp highp 4-component vector of uint)
+0:325      move second child to first child ( temp highp int)
+0:325        direct index ( temp highp int)
+0:325          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:325            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325              Constant:
+0:325                3 (const int)
+0:325            Constant:
+0:325              1 (const int)
+0:325          Constant:
+0:325            0 (const int)
+0:325        subgroupPartitionedExclusiveOrNV ( global highp int)
+0:325          direct index ( temp highp int)
+0:325            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:325              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:325                Constant:
+0:325                  0 (const int)
+0:325              Constant:
+0:325                1 (const int)
+0:325            Constant:
+0:325              0 (const int)
+0:325          'ballot' ( temp highp 4-component vector of uint)
+0:326      move second child to first child ( temp highp 2-component vector of int)
+0:326        vector swizzle ( temp highp 2-component vector of int)
+0:326          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:326            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326              Constant:
+0:326                3 (const int)
+0:326            Constant:
+0:326              1 (const int)
+0:326          Sequence
+0:326            Constant:
+0:326              0 (const int)
+0:326            Constant:
+0:326              1 (const int)
+0:326        subgroupPartitionedExclusiveOrNV ( global highp 2-component vector of int)
+0:326          vector swizzle ( temp highp 2-component vector of int)
+0:326            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:326              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:326                Constant:
+0:326                  1 (const int)
+0:326              Constant:
+0:326                1 (const int)
+0:326            Sequence
+0:326              Constant:
+0:326                0 (const int)
+0:326              Constant:
+0:326                1 (const int)
+0:326          'ballot' ( temp highp 4-component vector of uint)
+0:327      move second child to first child ( temp highp 3-component vector of int)
+0:327        vector swizzle ( temp highp 3-component vector of int)
+0:327          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:327            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:327              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:327              Constant:
+0:327                3 (const int)
+0:327            Constant:
+0:327              1 (const int)
+0:327          Sequence
+0:327            Constant:
+0:327              0 (const int)
+0:327            Constant:
+0:327              1 (const int)
+0:327            Constant:
+0:327              2 (const int)
+0:327        subgroupPartitionedExclusiveOrNV ( global highp 3-component vector of int)
+0:327          vector swizzle ( temp highp 3-component vector of int)
+0:327            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:327              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:327                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:327                Constant:
+0:327                  2 (const int)
+0:327              Constant:
+0:327                1 (const int)
+0:327            Sequence
+0:327              Constant:
+0:327                0 (const int)
+0:327              Constant:
+0:327                1 (const int)
+0:327              Constant:
+0:327                2 (const int)
+0:327          'ballot' ( temp highp 4-component vector of uint)
+0:328      move second child to first child ( temp highp 4-component vector of int)
+0:328        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:328          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328            Constant:
+0:328              3 (const int)
+0:328          Constant:
+0:328            1 (const int)
+0:328        subgroupPartitionedExclusiveOrNV ( global highp 4-component vector of int)
+0:328          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:328            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:328              Constant:
+0:328                3 (const int)
+0:328            Constant:
+0:328              1 (const int)
+0:328          'ballot' ( temp highp 4-component vector of uint)
+0:330      move second child to first child ( temp highp uint)
+0:330        direct index ( temp highp uint)
+0:330          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:330            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330              Constant:
+0:330                3 (const int)
+0:330            Constant:
+0:330              2 (const int)
+0:330          Constant:
+0:330            0 (const int)
+0:330        subgroupPartitionedExclusiveOrNV ( global highp uint)
+0:330          direct index ( temp highp uint)
+0:330            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:330              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:330                Constant:
+0:330                  0 (const int)
+0:330              Constant:
+0:330                2 (const int)
+0:330            Constant:
+0:330              0 (const int)
+0:330          'ballot' ( temp highp 4-component vector of uint)
+0:331      move second child to first child ( temp highp 2-component vector of uint)
+0:331        vector swizzle ( temp highp 2-component vector of uint)
+0:331          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:331            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331              Constant:
+0:331                3 (const int)
+0:331            Constant:
+0:331              2 (const int)
+0:331          Sequence
+0:331            Constant:
+0:331              0 (const int)
+0:331            Constant:
+0:331              1 (const int)
+0:331        subgroupPartitionedExclusiveOrNV ( global highp 2-component vector of uint)
+0:331          vector swizzle ( temp highp 2-component vector of uint)
+0:331            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:331              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:331                Constant:
+0:331                  1 (const int)
+0:331              Constant:
+0:331                2 (const int)
+0:331            Sequence
+0:331              Constant:
+0:331                0 (const int)
+0:331              Constant:
+0:331                1 (const int)
+0:331          'ballot' ( temp highp 4-component vector of uint)
+0:332      move second child to first child ( temp highp 3-component vector of uint)
+0:332        vector swizzle ( temp highp 3-component vector of uint)
+0:332          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:332            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:332              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:332              Constant:
+0:332                3 (const int)
+0:332            Constant:
+0:332              2 (const int)
+0:332          Sequence
+0:332            Constant:
+0:332              0 (const int)
+0:332            Constant:
+0:332              1 (const int)
+0:332            Constant:
+0:332              2 (const int)
+0:332        subgroupPartitionedExclusiveOrNV ( global highp 3-component vector of uint)
+0:332          vector swizzle ( temp highp 3-component vector of uint)
+0:332            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:332              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:332                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:332                Constant:
+0:332                  2 (const int)
+0:332              Constant:
+0:332                2 (const int)
+0:332            Sequence
+0:332              Constant:
+0:332                0 (const int)
+0:332              Constant:
+0:332                1 (const int)
+0:332              Constant:
+0:332                2 (const int)
+0:332          'ballot' ( temp highp 4-component vector of uint)
+0:333      move second child to first child ( temp highp 4-component vector of uint)
+0:333        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:333          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:333            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:333            Constant:
+0:333              3 (const int)
+0:333          Constant:
+0:333            2 (const int)
+0:333        subgroupPartitionedExclusiveOrNV ( global highp 4-component vector of uint)
+0:333          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:333            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:333              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:333              Constant:
+0:333                3 (const int)
+0:333            Constant:
+0:333              2 (const int)
+0:333          'ballot' ( temp highp 4-component vector of uint)
+0:335      move second child to first child ( temp highp int)
+0:335        direct index ( temp highp int)
+0:335          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:335            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:335              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:335              Constant:
+0:335                3 (const int)
+0:335            Constant:
+0:335              1 (const int)
+0:335          Constant:
+0:335            0 (const int)
+0:335        Convert bool to int ( temp highp int)
+0:335          subgroupPartitionedExclusiveOrNV ( global bool, operation at highp)
+0:335            Compare Less Than ( temp bool)
+0:335              direct index ( temp highp int)
+0:335                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:335                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:335                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:335                    Constant:
+0:335                      0 (const int)
+0:335                  Constant:
+0:335                    1 (const int)
+0:335                Constant:
+0:335                  0 (const int)
+0:335              Constant:
+0:335                0 (const int)
+0:335            'ballot' ( temp highp 4-component vector of uint)
+0:336      move second child to first child ( temp highp 2-component vector of int)
+0:336        vector swizzle ( temp highp 2-component vector of int)
+0:336          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:336            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:336              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:336              Constant:
+0:336                3 (const int)
+0:336            Constant:
+0:336              1 (const int)
+0:336          Sequence
+0:336            Constant:
+0:336              0 (const int)
+0:336            Constant:
+0:336              1 (const int)
+0:336        Convert bool to int ( temp highp 2-component vector of int)
+0:336          subgroupPartitionedExclusiveOrNV ( global 2-component vector of bool, operation at highp)
+0:336            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:336              vector swizzle ( temp highp 2-component vector of int)
+0:336                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:336                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:336                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:336                    Constant:
+0:336                      1 (const int)
+0:336                  Constant:
+0:336                    1 (const int)
+0:336                Sequence
+0:336                  Constant:
+0:336                    0 (const int)
+0:336                  Constant:
+0:336                    1 (const int)
+0:336              Constant:
+0:336                0 (const int)
+0:336                0 (const int)
+0:336            'ballot' ( temp highp 4-component vector of uint)
+0:337      move second child to first child ( temp highp 3-component vector of int)
+0:337        vector swizzle ( temp highp 3-component vector of int)
+0:337          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:337            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:337              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:337              Constant:
+0:337                3 (const int)
+0:337            Constant:
+0:337              1 (const int)
+0:337          Sequence
+0:337            Constant:
+0:337              0 (const int)
+0:337            Constant:
+0:337              1 (const int)
+0:337            Constant:
+0:337              2 (const int)
+0:337        Convert bool to int ( temp highp 3-component vector of int)
+0:337          subgroupPartitionedExclusiveOrNV ( global 3-component vector of bool, operation at highp)
+0:337            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:337              vector swizzle ( temp highp 3-component vector of int)
+0:337                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:337                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:337                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:337                    Constant:
+0:337                      1 (const int)
+0:337                  Constant:
+0:337                    1 (const int)
+0:337                Sequence
+0:337                  Constant:
+0:337                    0 (const int)
+0:337                  Constant:
+0:337                    1 (const int)
+0:337                  Constant:
+0:337                    2 (const int)
+0:337              Constant:
+0:337                0 (const int)
+0:337                0 (const int)
+0:337                0 (const int)
+0:337            'ballot' ( temp highp 4-component vector of uint)
+0:338      move second child to first child ( temp highp 4-component vector of int)
+0:338        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:338          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:338            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:338            Constant:
+0:338              3 (const int)
+0:338          Constant:
+0:338            1 (const int)
+0:338        Convert bool to int ( temp highp 4-component vector of int)
+0:338          subgroupPartitionedExclusiveOrNV ( global 4-component vector of bool, operation at highp)
+0:338            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:338              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:338                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:338                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:338                  Constant:
+0:338                    1 (const int)
+0:338                Constant:
+0:338                  1 (const int)
+0:338              Constant:
+0:338                0 (const int)
+0:338                0 (const int)
+0:338                0 (const int)
+0:338                0 (const int)
+0:338            'ballot' ( temp highp 4-component vector of uint)
+0:340      move second child to first child ( temp highp int)
+0:340        direct index ( temp highp int)
+0:340          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:340            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:340              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:340              Constant:
+0:340                3 (const int)
+0:340            Constant:
+0:340              1 (const int)
+0:340          Constant:
+0:340            0 (const int)
+0:340        subgroupPartitionedExclusiveXorNV ( global highp int)
+0:340          direct index ( temp highp int)
+0:340            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:340              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:340                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:340                Constant:
+0:340                  0 (const int)
+0:340              Constant:
+0:340                1 (const int)
+0:340            Constant:
+0:340              0 (const int)
+0:340          'ballot' ( temp highp 4-component vector of uint)
+0:341      move second child to first child ( temp highp 2-component vector of int)
+0:341        vector swizzle ( temp highp 2-component vector of int)
+0:341          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:341            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:341              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:341              Constant:
+0:341                3 (const int)
+0:341            Constant:
+0:341              1 (const int)
+0:341          Sequence
+0:341            Constant:
+0:341              0 (const int)
+0:341            Constant:
+0:341              1 (const int)
+0:341        subgroupPartitionedExclusiveXorNV ( global highp 2-component vector of int)
+0:341          vector swizzle ( temp highp 2-component vector of int)
+0:341            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:341              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:341                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:341                Constant:
+0:341                  1 (const int)
+0:341              Constant:
+0:341                1 (const int)
+0:341            Sequence
+0:341              Constant:
+0:341                0 (const int)
+0:341              Constant:
+0:341                1 (const int)
+0:341          'ballot' ( temp highp 4-component vector of uint)
+0:342      move second child to first child ( temp highp 3-component vector of int)
+0:342        vector swizzle ( temp highp 3-component vector of int)
+0:342          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:342            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:342              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:342              Constant:
+0:342                3 (const int)
+0:342            Constant:
+0:342              1 (const int)
+0:342          Sequence
+0:342            Constant:
+0:342              0 (const int)
+0:342            Constant:
+0:342              1 (const int)
+0:342            Constant:
+0:342              2 (const int)
+0:342        subgroupPartitionedExclusiveXorNV ( global highp 3-component vector of int)
+0:342          vector swizzle ( temp highp 3-component vector of int)
+0:342            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:342              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:342                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:342                Constant:
+0:342                  2 (const int)
+0:342              Constant:
+0:342                1 (const int)
+0:342            Sequence
+0:342              Constant:
+0:342                0 (const int)
+0:342              Constant:
+0:342                1 (const int)
+0:342              Constant:
+0:342                2 (const int)
+0:342          'ballot' ( temp highp 4-component vector of uint)
+0:343      move second child to first child ( temp highp 4-component vector of int)
+0:343        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:343          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:343            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:343            Constant:
+0:343              3 (const int)
+0:343          Constant:
+0:343            1 (const int)
+0:343        subgroupPartitionedExclusiveXorNV ( global highp 4-component vector of int)
+0:343          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:343            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:343              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:343              Constant:
+0:343                3 (const int)
+0:343            Constant:
+0:343              1 (const int)
+0:343          'ballot' ( temp highp 4-component vector of uint)
+0:345      move second child to first child ( temp highp uint)
+0:345        direct index ( temp highp uint)
+0:345          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:345            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:345              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:345              Constant:
+0:345                0 (const int)
+0:345            Constant:
+0:345              2 (const int)
+0:345          Constant:
+0:345            0 (const int)
+0:345        subgroupPartitionedExclusiveXorNV ( global highp uint)
+0:345          direct index ( temp highp uint)
+0:345            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:345              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:345                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:345                Constant:
+0:345                  0 (const int)
+0:345              Constant:
+0:345                2 (const int)
+0:345            Constant:
+0:345              0 (const int)
+0:345          'ballot' ( temp highp 4-component vector of uint)
+0:346      move second child to first child ( temp highp 2-component vector of uint)
+0:346        vector swizzle ( temp highp 2-component vector of uint)
+0:346          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:346            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:346              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:346              Constant:
+0:346                0 (const int)
+0:346            Constant:
+0:346              2 (const int)
+0:346          Sequence
+0:346            Constant:
+0:346              0 (const int)
+0:346            Constant:
+0:346              1 (const int)
+0:346        subgroupPartitionedExclusiveXorNV ( global highp 2-component vector of uint)
+0:346          vector swizzle ( temp highp 2-component vector of uint)
+0:346            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:346              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:346                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:346                Constant:
+0:346                  1 (const int)
+0:346              Constant:
+0:346                2 (const int)
+0:346            Sequence
+0:346              Constant:
+0:346                0 (const int)
+0:346              Constant:
+0:346                1 (const int)
+0:346          'ballot' ( temp highp 4-component vector of uint)
+0:347      move second child to first child ( temp highp 3-component vector of uint)
+0:347        vector swizzle ( temp highp 3-component vector of uint)
+0:347          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:347            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:347              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:347              Constant:
+0:347                0 (const int)
+0:347            Constant:
+0:347              2 (const int)
+0:347          Sequence
+0:347            Constant:
+0:347              0 (const int)
+0:347            Constant:
+0:347              1 (const int)
+0:347            Constant:
+0:347              2 (const int)
+0:347        subgroupPartitionedExclusiveXorNV ( global highp 3-component vector of uint)
+0:347          vector swizzle ( temp highp 3-component vector of uint)
+0:347            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:347              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:347                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:347                Constant:
+0:347                  2 (const int)
+0:347              Constant:
+0:347                2 (const int)
+0:347            Sequence
+0:347              Constant:
+0:347                0 (const int)
+0:347              Constant:
+0:347                1 (const int)
+0:347              Constant:
+0:347                2 (const int)
+0:347          'ballot' ( temp highp 4-component vector of uint)
+0:348      move second child to first child ( temp highp 4-component vector of uint)
+0:348        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:348          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:348            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:348            Constant:
+0:348              0 (const int)
+0:348          Constant:
+0:348            2 (const int)
+0:348        subgroupPartitionedExclusiveXorNV ( global highp 4-component vector of uint)
+0:348          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:348            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:348              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:348              Constant:
+0:348                3 (const int)
+0:348            Constant:
+0:348              2 (const int)
+0:348          'ballot' ( temp highp 4-component vector of uint)
+0:350      move second child to first child ( temp highp int)
+0:350        direct index ( temp highp int)
+0:350          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:350            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:350              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:350              Constant:
+0:350                0 (const int)
+0:350            Constant:
+0:350              1 (const int)
+0:350          Constant:
+0:350            0 (const int)
+0:350        Convert bool to int ( temp highp int)
+0:350          subgroupPartitionedExclusiveXorNV ( global bool, operation at highp)
+0:350            Compare Less Than ( temp bool)
+0:350              direct index ( temp highp int)
+0:350                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:350                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:350                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:350                    Constant:
+0:350                      0 (const int)
+0:350                  Constant:
+0:350                    1 (const int)
+0:350                Constant:
+0:350                  0 (const int)
+0:350              Constant:
+0:350                0 (const int)
+0:350            'ballot' ( temp highp 4-component vector of uint)
+0:351      move second child to first child ( temp highp 2-component vector of int)
+0:351        vector swizzle ( temp highp 2-component vector of int)
+0:351          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:351            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:351              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:351              Constant:
+0:351                0 (const int)
+0:351            Constant:
+0:351              1 (const int)
+0:351          Sequence
+0:351            Constant:
+0:351              0 (const int)
+0:351            Constant:
+0:351              1 (const int)
+0:351        Convert bool to int ( temp highp 2-component vector of int)
+0:351          subgroupPartitionedExclusiveXorNV ( global 2-component vector of bool, operation at highp)
+0:351            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:351              vector swizzle ( temp highp 2-component vector of int)
+0:351                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:351                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:351                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:351                    Constant:
+0:351                      1 (const int)
+0:351                  Constant:
+0:351                    1 (const int)
+0:351                Sequence
+0:351                  Constant:
+0:351                    0 (const int)
+0:351                  Constant:
+0:351                    1 (const int)
+0:351              Constant:
+0:351                0 (const int)
+0:351                0 (const int)
+0:351            'ballot' ( temp highp 4-component vector of uint)
+0:352      move second child to first child ( temp highp 3-component vector of int)
+0:352        vector swizzle ( temp highp 3-component vector of int)
+0:352          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:352            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:352              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:352              Constant:
+0:352                0 (const int)
+0:352            Constant:
+0:352              1 (const int)
+0:352          Sequence
+0:352            Constant:
+0:352              0 (const int)
+0:352            Constant:
+0:352              1 (const int)
+0:352            Constant:
+0:352              2 (const int)
+0:352        Convert bool to int ( temp highp 3-component vector of int)
+0:352          subgroupPartitionedExclusiveXorNV ( global 3-component vector of bool, operation at highp)
+0:352            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:352              vector swizzle ( temp highp 3-component vector of int)
+0:352                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:352                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:352                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:352                    Constant:
+0:352                      1 (const int)
+0:352                  Constant:
+0:352                    1 (const int)
+0:352                Sequence
+0:352                  Constant:
+0:352                    0 (const int)
+0:352                  Constant:
+0:352                    1 (const int)
+0:352                  Constant:
+0:352                    2 (const int)
+0:352              Constant:
+0:352                0 (const int)
+0:352                0 (const int)
+0:352                0 (const int)
+0:352            'ballot' ( temp highp 4-component vector of uint)
+0:353      move second child to first child ( temp highp 4-component vector of int)
+0:353        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:353          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:353            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:353            Constant:
+0:353              0 (const int)
+0:353          Constant:
+0:353            1 (const int)
+0:353        Convert bool to int ( temp highp 4-component vector of int)
+0:353          subgroupPartitionedExclusiveXorNV ( global 4-component vector of bool, operation at highp)
+0:353            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:353              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:353                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:353                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:353                  Constant:
+0:353                    1 (const int)
+0:353                Constant:
+0:353                  1 (const int)
+0:353              Constant:
+0:353                0 (const int)
+0:353                0 (const int)
+0:353                0 (const int)
+0:353                0 (const int)
+0:353            'ballot' ( temp highp 4-component vector of uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
diff --git a/Test/baseResults/glsl.es320.subgroupQuad.comp.out b/Test/baseResults/glsl.es320.subgroupQuad.comp.out
new file mode 100644
index 0000000..1df8d7f
--- /dev/null
+++ b/Test/baseResults/glsl.es320.subgroupQuad.comp.out
@@ -0,0 +1,3429 @@
+glsl.es320.subgroupQuad.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_quad
+local_size = (8, 1, 1)
+0:? Sequence
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp highp uint)
+0:16          'invocation' ( temp highp uint)
+0:16          mod ( temp mediump uint)
+0:16            add ( temp mediump uint)
+0:16              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16            Constant:
+0:16              4 (const uint)
+0:18      move second child to first child ( temp highp float)
+0:18        direct index ( temp highp float)
+0:18          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          Constant:
+0:18            0 (const int)
+0:18        subgroupQuadBroadcast ( global highp float)
+0:18          direct index ( temp highp float)
+0:18            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                Constant:
+0:18                  0 (const int)
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          Constant:
+0:18            1 (const uint)
+0:19      move second child to first child ( temp highp 2-component vector of float)
+0:19        vector swizzle ( temp highp 2-component vector of float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Sequence
+0:19            Constant:
+0:19              0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19        subgroupQuadBroadcast ( global highp 2-component vector of float)
+0:19          vector swizzle ( temp highp 2-component vector of float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                Constant:
+0:19                  1 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Sequence
+0:19              Constant:
+0:19                0 (const int)
+0:19              Constant:
+0:19                1 (const int)
+0:19          Constant:
+0:19            1 (const uint)
+0:20      move second child to first child ( temp highp 3-component vector of float)
+0:20        vector swizzle ( temp highp 3-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              Constant:
+0:20                0 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20            Constant:
+0:20              2 (const int)
+0:20        subgroupQuadBroadcast ( global highp 3-component vector of float)
+0:20          vector swizzle ( temp highp 3-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                Constant:
+0:20                  2 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20              Constant:
+0:20                2 (const int)
+0:20          Constant:
+0:20            1 (const uint)
+0:21      move second child to first child ( temp highp 4-component vector of float)
+0:21        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            0 (const int)
+0:21        subgroupQuadBroadcast ( global highp 4-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              Constant:
+0:21                3 (const int)
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            1 (const uint)
+0:23      move second child to first child ( temp highp int)
+0:23        direct index ( temp highp int)
+0:23          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              Constant:
+0:23                0 (const int)
+0:23            Constant:
+0:23              1 (const int)
+0:23          Constant:
+0:23            0 (const int)
+0:23        subgroupQuadBroadcast ( global highp int)
+0:23          direct index ( temp highp int)
+0:23            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                1 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:23          Constant:
+0:23            1 (const uint)
+0:24      move second child to first child ( temp highp 2-component vector of int)
+0:24        vector swizzle ( temp highp 2-component vector of int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              Constant:
+0:24                0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Sequence
+0:24            Constant:
+0:24              0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24        subgroupQuadBroadcast ( global highp 2-component vector of int)
+0:24          vector swizzle ( temp highp 2-component vector of int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                Constant:
+0:24                  1 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Sequence
+0:24              Constant:
+0:24                0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24          Constant:
+0:24            1 (const uint)
+0:25      move second child to first child ( temp highp 3-component vector of int)
+0:25        vector swizzle ( temp highp 3-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              Constant:
+0:25                0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25        subgroupQuadBroadcast ( global highp 3-component vector of int)
+0:25          vector swizzle ( temp highp 3-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                Constant:
+0:25                  2 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25          Constant:
+0:25            1 (const uint)
+0:26      move second child to first child ( temp highp 4-component vector of int)
+0:26        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            Constant:
+0:26              0 (const int)
+0:26          Constant:
+0:26            1 (const int)
+0:26        subgroupQuadBroadcast ( global highp 4-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              Constant:
+0:26                3 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Constant:
+0:26            1 (const uint)
+0:28      move second child to first child ( temp highp uint)
+0:28        direct index ( temp highp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                0 (const int)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:28        subgroupQuadBroadcast ( global highp uint)
+0:28          direct index ( temp highp uint)
+0:28            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                2 (const int)
+0:28            Constant:
+0:28              0 (const int)
+0:28          Constant:
+0:28            1 (const uint)
+0:29      move second child to first child ( temp highp 2-component vector of uint)
+0:29        vector swizzle ( temp highp 2-component vector of uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              Constant:
+0:29                0 (const int)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Sequence
+0:29            Constant:
+0:29              0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29        subgroupQuadBroadcast ( global highp 2-component vector of uint)
+0:29          vector swizzle ( temp highp 2-component vector of uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                Constant:
+0:29                  1 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Sequence
+0:29              Constant:
+0:29                0 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29          Constant:
+0:29            1 (const uint)
+0:30      move second child to first child ( temp highp 3-component vector of uint)
+0:30        vector swizzle ( temp highp 3-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              Constant:
+0:30                0 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30        subgroupQuadBroadcast ( global highp 3-component vector of uint)
+0:30          vector swizzle ( temp highp 3-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                Constant:
+0:30                  2 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30          Constant:
+0:30            1 (const uint)
+0:31      move second child to first child ( temp highp 4-component vector of uint)
+0:31        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            Constant:
+0:31              0 (const int)
+0:31          Constant:
+0:31            2 (const int)
+0:31        subgroupQuadBroadcast ( global highp 4-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              Constant:
+0:31                3 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31          Constant:
+0:31            1 (const uint)
+0:33      move second child to first child ( temp highp int)
+0:33        direct index ( temp highp int)
+0:33          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              Constant:
+0:33                1 (const int)
+0:33            Constant:
+0:33              1 (const int)
+0:33          Constant:
+0:33            0 (const int)
+0:33        Convert bool to int ( temp highp int)
+0:33          subgroupQuadBroadcast ( global bool)
+0:33            Compare Less Than ( temp bool)
+0:33              direct index ( temp highp int)
+0:33                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                    Constant:
+0:33                      0 (const int)
+0:33                  Constant:
+0:33                    1 (const int)
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                0 (const int)
+0:33            Constant:
+0:33              1 (const uint)
+0:34      move second child to first child ( temp highp 2-component vector of int)
+0:34        vector swizzle ( temp highp 2-component vector of int)
+0:34          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              Constant:
+0:34                1 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34        Convert bool to int ( temp highp 2-component vector of int)
+0:34          subgroupQuadBroadcast ( global 2-component vector of bool)
+0:34            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:34              vector swizzle ( temp highp 2-component vector of int)
+0:34                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                    Constant:
+0:34                      1 (const int)
+0:34                  Constant:
+0:34                    1 (const int)
+0:34                Sequence
+0:34                  Constant:
+0:34                    0 (const int)
+0:34                  Constant:
+0:34                    1 (const int)
+0:34              Constant:
+0:34                0 (const int)
+0:34                0 (const int)
+0:34            Constant:
+0:34              1 (const uint)
+0:35      move second child to first child ( temp highp 3-component vector of int)
+0:35        vector swizzle ( temp highp 3-component vector of int)
+0:35          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              Constant:
+0:35                1 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35            Constant:
+0:35              2 (const int)
+0:35        Convert bool to int ( temp highp 3-component vector of int)
+0:35          subgroupQuadBroadcast ( global 3-component vector of bool)
+0:35            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:35              vector swizzle ( temp highp 3-component vector of int)
+0:35                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                    Constant:
+0:35                      1 (const int)
+0:35                  Constant:
+0:35                    1 (const int)
+0:35                Sequence
+0:35                  Constant:
+0:35                    0 (const int)
+0:35                  Constant:
+0:35                    1 (const int)
+0:35                  Constant:
+0:35                    2 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35                0 (const int)
+0:35                0 (const int)
+0:35            Constant:
+0:35              1 (const uint)
+0:36      move second child to first child ( temp highp 4-component vector of int)
+0:36        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            Constant:
+0:36              1 (const int)
+0:36          Constant:
+0:36            1 (const int)
+0:36        Convert bool to int ( temp highp 4-component vector of int)
+0:36          subgroupQuadBroadcast ( global 4-component vector of bool)
+0:36            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:36              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  Constant:
+0:36                    1 (const int)
+0:36                Constant:
+0:36                  1 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36                0 (const int)
+0:36                0 (const int)
+0:36                0 (const int)
+0:36            Constant:
+0:36              1 (const uint)
+0:38      move second child to first child ( temp highp float)
+0:38        direct index ( temp highp float)
+0:38          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              Constant:
+0:38                1 (const int)
+0:38            Constant:
+0:38              0 (const int)
+0:38          Constant:
+0:38            0 (const int)
+0:38        subgroupQuadSwapHorizontal ( global highp float)
+0:38          direct index ( temp highp float)
+0:38            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                0 (const int)
+0:38            Constant:
+0:38              0 (const int)
+0:39      move second child to first child ( temp highp 2-component vector of float)
+0:39        vector swizzle ( temp highp 2-component vector of float)
+0:39          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              Constant:
+0:39                1 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39          Sequence
+0:39            Constant:
+0:39              0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39        subgroupQuadSwapHorizontal ( global highp 2-component vector of float)
+0:39          vector swizzle ( temp highp 2-component vector of float)
+0:39            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                Constant:
+0:39                  1 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            Sequence
+0:39              Constant:
+0:39                0 (const int)
+0:39              Constant:
+0:39                1 (const int)
+0:40      move second child to first child ( temp highp 3-component vector of float)
+0:40        vector swizzle ( temp highp 3-component vector of float)
+0:40          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40            Constant:
+0:40              2 (const int)
+0:40        subgroupQuadSwapHorizontal ( global highp 3-component vector of float)
+0:40          vector swizzle ( temp highp 3-component vector of float)
+0:40            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                Constant:
+0:40                  2 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40            Sequence
+0:40              Constant:
+0:40                0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40              Constant:
+0:40                2 (const int)
+0:41      move second child to first child ( temp highp 4-component vector of float)
+0:41        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            Constant:
+0:41              1 (const int)
+0:41          Constant:
+0:41            0 (const int)
+0:41        subgroupQuadSwapHorizontal ( global highp 4-component vector of float)
+0:41          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              Constant:
+0:41                3 (const int)
+0:41            Constant:
+0:41              0 (const int)
+0:43      move second child to first child ( temp highp int)
+0:43        direct index ( temp highp int)
+0:43          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              Constant:
+0:43                1 (const int)
+0:43            Constant:
+0:43              1 (const int)
+0:43          Constant:
+0:43            0 (const int)
+0:43        subgroupQuadSwapHorizontal ( global highp int)
+0:43          direct index ( temp highp int)
+0:43            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                Constant:
+0:43                  0 (const int)
+0:43              Constant:
+0:43                1 (const int)
+0:43            Constant:
+0:43              0 (const int)
+0:44      move second child to first child ( temp highp 2-component vector of int)
+0:44        vector swizzle ( temp highp 2-component vector of int)
+0:44          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              Constant:
+0:44                1 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44          Sequence
+0:44            Constant:
+0:44              0 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44        subgroupQuadSwapHorizontal ( global highp 2-component vector of int)
+0:44          vector swizzle ( temp highp 2-component vector of int)
+0:44            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                Constant:
+0:44                  1 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44            Sequence
+0:44              Constant:
+0:44                0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:45      move second child to first child ( temp highp 3-component vector of int)
+0:45        vector swizzle ( temp highp 3-component vector of int)
+0:45          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              Constant:
+0:45                1 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45        subgroupQuadSwapHorizontal ( global highp 3-component vector of int)
+0:45          vector swizzle ( temp highp 3-component vector of int)
+0:45            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                Constant:
+0:45                  2 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:46      move second child to first child ( temp highp 4-component vector of int)
+0:46        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            Constant:
+0:46              1 (const int)
+0:46          Constant:
+0:46            1 (const int)
+0:46        subgroupQuadSwapHorizontal ( global highp 4-component vector of int)
+0:46          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              Constant:
+0:46                3 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:48      move second child to first child ( temp highp uint)
+0:48        direct index ( temp highp uint)
+0:48          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              Constant:
+0:48                1 (const int)
+0:48            Constant:
+0:48              2 (const int)
+0:48          Constant:
+0:48            0 (const int)
+0:48        subgroupQuadSwapHorizontal ( global highp uint)
+0:48          direct index ( temp highp uint)
+0:48            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                Constant:
+0:48                  0 (const int)
+0:48              Constant:
+0:48                2 (const int)
+0:48            Constant:
+0:48              0 (const int)
+0:49      move second child to first child ( temp highp 2-component vector of uint)
+0:49        vector swizzle ( temp highp 2-component vector of uint)
+0:49          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              Constant:
+0:49                1 (const int)
+0:49            Constant:
+0:49              2 (const int)
+0:49          Sequence
+0:49            Constant:
+0:49              0 (const int)
+0:49            Constant:
+0:49              1 (const int)
+0:49        subgroupQuadSwapHorizontal ( global highp 2-component vector of uint)
+0:49          vector swizzle ( temp highp 2-component vector of uint)
+0:49            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                Constant:
+0:49                  1 (const int)
+0:49              Constant:
+0:49                2 (const int)
+0:49            Sequence
+0:49              Constant:
+0:49                0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:50      move second child to first child ( temp highp 3-component vector of uint)
+0:50        vector swizzle ( temp highp 3-component vector of uint)
+0:50          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              Constant:
+0:50                1 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50        subgroupQuadSwapHorizontal ( global highp 3-component vector of uint)
+0:50          vector swizzle ( temp highp 3-component vector of uint)
+0:50            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                Constant:
+0:50                  2 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:51      move second child to first child ( temp highp 4-component vector of uint)
+0:51        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            Constant:
+0:51              1 (const int)
+0:51          Constant:
+0:51            2 (const int)
+0:51        subgroupQuadSwapHorizontal ( global highp 4-component vector of uint)
+0:51          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              Constant:
+0:51                3 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:53      move second child to first child ( temp highp int)
+0:53        direct index ( temp highp int)
+0:53          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              Constant:
+0:53                2 (const int)
+0:53            Constant:
+0:53              1 (const int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        Convert bool to int ( temp highp int)
+0:53          subgroupQuadSwapHorizontal ( global bool)
+0:53            Compare Less Than ( temp bool)
+0:53              direct index ( temp highp int)
+0:53                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                    Constant:
+0:53                      0 (const int)
+0:53                  Constant:
+0:53                    1 (const int)
+0:53                Constant:
+0:53                  0 (const int)
+0:53              Constant:
+0:53                0 (const int)
+0:54      move second child to first child ( temp highp 2-component vector of int)
+0:54        vector swizzle ( temp highp 2-component vector of int)
+0:54          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              Constant:
+0:54                2 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54          Sequence
+0:54            Constant:
+0:54              0 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54        Convert bool to int ( temp highp 2-component vector of int)
+0:54          subgroupQuadSwapHorizontal ( global 2-component vector of bool)
+0:54            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:54              vector swizzle ( temp highp 2-component vector of int)
+0:54                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                    Constant:
+0:54                      1 (const int)
+0:54                  Constant:
+0:54                    1 (const int)
+0:54                Sequence
+0:54                  Constant:
+0:54                    0 (const int)
+0:54                  Constant:
+0:54                    1 (const int)
+0:54              Constant:
+0:54                0 (const int)
+0:54                0 (const int)
+0:55      move second child to first child ( temp highp 3-component vector of int)
+0:55        vector swizzle ( temp highp 3-component vector of int)
+0:55          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              Constant:
+0:55                2 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55            Constant:
+0:55              2 (const int)
+0:55        Convert bool to int ( temp highp 3-component vector of int)
+0:55          subgroupQuadSwapHorizontal ( global 3-component vector of bool)
+0:55            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:55              vector swizzle ( temp highp 3-component vector of int)
+0:55                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                    Constant:
+0:55                      1 (const int)
+0:55                  Constant:
+0:55                    1 (const int)
+0:55                Sequence
+0:55                  Constant:
+0:55                    0 (const int)
+0:55                  Constant:
+0:55                    1 (const int)
+0:55                  Constant:
+0:55                    2 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55                0 (const int)
+0:55                0 (const int)
+0:56      move second child to first child ( temp highp 4-component vector of int)
+0:56        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            Constant:
+0:56              2 (const int)
+0:56          Constant:
+0:56            1 (const int)
+0:56        Convert bool to int ( temp highp 4-component vector of int)
+0:56          subgroupQuadSwapHorizontal ( global 4-component vector of bool)
+0:56            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:56              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                  Constant:
+0:56                    1 (const int)
+0:56                Constant:
+0:56                  1 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:56                0 (const int)
+0:56                0 (const int)
+0:56                0 (const int)
+0:58      move second child to first child ( temp highp float)
+0:58        direct index ( temp highp float)
+0:58          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              Constant:
+0:58                2 (const int)
+0:58            Constant:
+0:58              0 (const int)
+0:58          Constant:
+0:58            0 (const int)
+0:58        subgroupQuadSwapVertical ( global highp float)
+0:58          direct index ( temp highp float)
+0:58            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                Constant:
+0:58                  0 (const int)
+0:58              Constant:
+0:58                0 (const int)
+0:58            Constant:
+0:58              0 (const int)
+0:59      move second child to first child ( temp highp 2-component vector of float)
+0:59        vector swizzle ( temp highp 2-component vector of float)
+0:59          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:59            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59              Constant:
+0:59                2 (const int)
+0:59            Constant:
+0:59              0 (const int)
+0:59          Sequence
+0:59            Constant:
+0:59              0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:59        subgroupQuadSwapVertical ( global highp 2-component vector of float)
+0:59          vector swizzle ( temp highp 2-component vector of float)
+0:59            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59                Constant:
+0:59                  1 (const int)
+0:59              Constant:
+0:59                0 (const int)
+0:59            Sequence
+0:59              Constant:
+0:59                0 (const int)
+0:59              Constant:
+0:59                1 (const int)
+0:60      move second child to first child ( temp highp 3-component vector of float)
+0:60        vector swizzle ( temp highp 3-component vector of float)
+0:60          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:60            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              Constant:
+0:60                2 (const int)
+0:60            Constant:
+0:60              0 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60            Constant:
+0:60              2 (const int)
+0:60        subgroupQuadSwapVertical ( global highp 3-component vector of float)
+0:60          vector swizzle ( temp highp 3-component vector of float)
+0:60            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                Constant:
+0:60                  2 (const int)
+0:60              Constant:
+0:60                0 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60              Constant:
+0:60                2 (const int)
+0:61      move second child to first child ( temp highp 4-component vector of float)
+0:61        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:61          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61            Constant:
+0:61              2 (const int)
+0:61          Constant:
+0:61            0 (const int)
+0:61        subgroupQuadSwapVertical ( global highp 4-component vector of float)
+0:61          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:61            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61              Constant:
+0:61                3 (const int)
+0:61            Constant:
+0:61              0 (const int)
+0:63      move second child to first child ( temp highp int)
+0:63        direct index ( temp highp int)
+0:63          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63              Constant:
+0:63                2 (const int)
+0:63            Constant:
+0:63              1 (const int)
+0:63          Constant:
+0:63            0 (const int)
+0:63        subgroupQuadSwapVertical ( global highp int)
+0:63          direct index ( temp highp int)
+0:63            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                Constant:
+0:63                  0 (const int)
+0:63              Constant:
+0:63                1 (const int)
+0:63            Constant:
+0:63              0 (const int)
+0:64      move second child to first child ( temp highp 2-component vector of int)
+0:64        vector swizzle ( temp highp 2-component vector of int)
+0:64          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:64            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64              Constant:
+0:64                2 (const int)
+0:64            Constant:
+0:64              1 (const int)
+0:64          Sequence
+0:64            Constant:
+0:64              0 (const int)
+0:64            Constant:
+0:64              1 (const int)
+0:64        subgroupQuadSwapVertical ( global highp 2-component vector of int)
+0:64          vector swizzle ( temp highp 2-component vector of int)
+0:64            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:64              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64                Constant:
+0:64                  1 (const int)
+0:64              Constant:
+0:64                1 (const int)
+0:64            Sequence
+0:64              Constant:
+0:64                0 (const int)
+0:64              Constant:
+0:64                1 (const int)
+0:65      move second child to first child ( temp highp 3-component vector of int)
+0:65        vector swizzle ( temp highp 3-component vector of int)
+0:65          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:65            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65              Constant:
+0:65                2 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65            Constant:
+0:65              2 (const int)
+0:65        subgroupQuadSwapVertical ( global highp 3-component vector of int)
+0:65          vector swizzle ( temp highp 3-component vector of int)
+0:65            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:65              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                Constant:
+0:65                  2 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:65            Sequence
+0:65              Constant:
+0:65                0 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:65              Constant:
+0:65                2 (const int)
+0:66      move second child to first child ( temp highp 4-component vector of int)
+0:66        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:66          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66            Constant:
+0:66              2 (const int)
+0:66          Constant:
+0:66            1 (const int)
+0:66        subgroupQuadSwapVertical ( global highp 4-component vector of int)
+0:66          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:66            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66              Constant:
+0:66                3 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:68      move second child to first child ( temp highp uint)
+0:68        direct index ( temp highp uint)
+0:68          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68              Constant:
+0:68                2 (const int)
+0:68            Constant:
+0:68              2 (const int)
+0:68          Constant:
+0:68            0 (const int)
+0:68        subgroupQuadSwapVertical ( global highp uint)
+0:68          direct index ( temp highp uint)
+0:68            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                Constant:
+0:68                  0 (const int)
+0:68              Constant:
+0:68                2 (const int)
+0:68            Constant:
+0:68              0 (const int)
+0:69      move second child to first child ( temp highp 2-component vector of uint)
+0:69        vector swizzle ( temp highp 2-component vector of uint)
+0:69          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:69            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69              Constant:
+0:69                2 (const int)
+0:69            Constant:
+0:69              2 (const int)
+0:69          Sequence
+0:69            Constant:
+0:69              0 (const int)
+0:69            Constant:
+0:69              1 (const int)
+0:69        subgroupQuadSwapVertical ( global highp 2-component vector of uint)
+0:69          vector swizzle ( temp highp 2-component vector of uint)
+0:69            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:69              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69                Constant:
+0:69                  1 (const int)
+0:69              Constant:
+0:69                2 (const int)
+0:69            Sequence
+0:69              Constant:
+0:69                0 (const int)
+0:69              Constant:
+0:69                1 (const int)
+0:70      move second child to first child ( temp highp 3-component vector of uint)
+0:70        vector swizzle ( temp highp 3-component vector of uint)
+0:70          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:70            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70              Constant:
+0:70                2 (const int)
+0:70            Constant:
+0:70              2 (const int)
+0:70          Sequence
+0:70            Constant:
+0:70              0 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70            Constant:
+0:70              2 (const int)
+0:70        subgroupQuadSwapVertical ( global highp 3-component vector of uint)
+0:70          vector swizzle ( temp highp 3-component vector of uint)
+0:70            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:70              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                Constant:
+0:70                  2 (const int)
+0:70              Constant:
+0:70                2 (const int)
+0:70            Sequence
+0:70              Constant:
+0:70                0 (const int)
+0:70              Constant:
+0:70                1 (const int)
+0:70              Constant:
+0:70                2 (const int)
+0:71      move second child to first child ( temp highp 4-component vector of uint)
+0:71        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:71          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71            Constant:
+0:71              2 (const int)
+0:71          Constant:
+0:71            2 (const int)
+0:71        subgroupQuadSwapVertical ( global highp 4-component vector of uint)
+0:71          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:71            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71              Constant:
+0:71                3 (const int)
+0:71            Constant:
+0:71              2 (const int)
+0:73      move second child to first child ( temp highp int)
+0:73        direct index ( temp highp int)
+0:73          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:73            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73              Constant:
+0:73                3 (const int)
+0:73            Constant:
+0:73              1 (const int)
+0:73          Constant:
+0:73            0 (const int)
+0:73        Convert bool to int ( temp highp int)
+0:73          subgroupQuadSwapVertical ( global bool)
+0:73            Compare Less Than ( temp bool)
+0:73              direct index ( temp highp int)
+0:73                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:73                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                    Constant:
+0:73                      0 (const int)
+0:73                  Constant:
+0:73                    1 (const int)
+0:73                Constant:
+0:73                  0 (const int)
+0:73              Constant:
+0:73                0 (const int)
+0:74      move second child to first child ( temp highp 2-component vector of int)
+0:74        vector swizzle ( temp highp 2-component vector of int)
+0:74          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:74            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74              Constant:
+0:74                3 (const int)
+0:74            Constant:
+0:74              1 (const int)
+0:74          Sequence
+0:74            Constant:
+0:74              0 (const int)
+0:74            Constant:
+0:74              1 (const int)
+0:74        Convert bool to int ( temp highp 2-component vector of int)
+0:74          subgroupQuadSwapVertical ( global 2-component vector of bool)
+0:74            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:74              vector swizzle ( temp highp 2-component vector of int)
+0:74                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:74                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74                    Constant:
+0:74                      1 (const int)
+0:74                  Constant:
+0:74                    1 (const int)
+0:74                Sequence
+0:74                  Constant:
+0:74                    0 (const int)
+0:74                  Constant:
+0:74                    1 (const int)
+0:74              Constant:
+0:74                0 (const int)
+0:74                0 (const int)
+0:75      move second child to first child ( temp highp 3-component vector of int)
+0:75        vector swizzle ( temp highp 3-component vector of int)
+0:75          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:75            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75              Constant:
+0:75                3 (const int)
+0:75            Constant:
+0:75              1 (const int)
+0:75          Sequence
+0:75            Constant:
+0:75              0 (const int)
+0:75            Constant:
+0:75              1 (const int)
+0:75            Constant:
+0:75              2 (const int)
+0:75        Convert bool to int ( temp highp 3-component vector of int)
+0:75          subgroupQuadSwapVertical ( global 3-component vector of bool)
+0:75            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:75              vector swizzle ( temp highp 3-component vector of int)
+0:75                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:75                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75                    Constant:
+0:75                      1 (const int)
+0:75                  Constant:
+0:75                    1 (const int)
+0:75                Sequence
+0:75                  Constant:
+0:75                    0 (const int)
+0:75                  Constant:
+0:75                    1 (const int)
+0:75                  Constant:
+0:75                    2 (const int)
+0:75              Constant:
+0:75                0 (const int)
+0:75                0 (const int)
+0:75                0 (const int)
+0:76      move second child to first child ( temp highp 4-component vector of int)
+0:76        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:76          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76            Constant:
+0:76              3 (const int)
+0:76          Constant:
+0:76            1 (const int)
+0:76        Convert bool to int ( temp highp 4-component vector of int)
+0:76          subgroupQuadSwapVertical ( global 4-component vector of bool)
+0:76            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:76              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:76                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76                  Constant:
+0:76                    1 (const int)
+0:76                Constant:
+0:76                  1 (const int)
+0:76              Constant:
+0:76                0 (const int)
+0:76                0 (const int)
+0:76                0 (const int)
+0:76                0 (const int)
+0:78      move second child to first child ( temp highp float)
+0:78        direct index ( temp highp float)
+0:78          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:78            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78              Constant:
+0:78                3 (const int)
+0:78            Constant:
+0:78              0 (const int)
+0:78          Constant:
+0:78            0 (const int)
+0:78        subgroupQuadSwapDiagonal ( global highp float)
+0:78          direct index ( temp highp float)
+0:78            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:78              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78                Constant:
+0:78                  0 (const int)
+0:78              Constant:
+0:78                0 (const int)
+0:78            Constant:
+0:78              0 (const int)
+0:79      move second child to first child ( temp highp 2-component vector of float)
+0:79        vector swizzle ( temp highp 2-component vector of float)
+0:79          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:79            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79              Constant:
+0:79                3 (const int)
+0:79            Constant:
+0:79              0 (const int)
+0:79          Sequence
+0:79            Constant:
+0:79              0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:79        subgroupQuadSwapDiagonal ( global highp 2-component vector of float)
+0:79          vector swizzle ( temp highp 2-component vector of float)
+0:79            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:79              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79                Constant:
+0:79                  1 (const int)
+0:79              Constant:
+0:79                0 (const int)
+0:79            Sequence
+0:79              Constant:
+0:79                0 (const int)
+0:79              Constant:
+0:79                1 (const int)
+0:80      move second child to first child ( temp highp 3-component vector of float)
+0:80        vector swizzle ( temp highp 3-component vector of float)
+0:80          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:80            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80              Constant:
+0:80                3 (const int)
+0:80            Constant:
+0:80              0 (const int)
+0:80          Sequence
+0:80            Constant:
+0:80              0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80            Constant:
+0:80              2 (const int)
+0:80        subgroupQuadSwapDiagonal ( global highp 3-component vector of float)
+0:80          vector swizzle ( temp highp 3-component vector of float)
+0:80            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:80              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80                Constant:
+0:80                  2 (const int)
+0:80              Constant:
+0:80                0 (const int)
+0:80            Sequence
+0:80              Constant:
+0:80                0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80              Constant:
+0:80                2 (const int)
+0:81      move second child to first child ( temp highp 4-component vector of float)
+0:81        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:81          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81            Constant:
+0:81              3 (const int)
+0:81          Constant:
+0:81            0 (const int)
+0:81        subgroupQuadSwapDiagonal ( global highp 4-component vector of float)
+0:81          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:81            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81              Constant:
+0:81                3 (const int)
+0:81            Constant:
+0:81              0 (const int)
+0:83      move second child to first child ( temp highp int)
+0:83        direct index ( temp highp int)
+0:83          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:83            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83              Constant:
+0:83                3 (const int)
+0:83            Constant:
+0:83              1 (const int)
+0:83          Constant:
+0:83            0 (const int)
+0:83        subgroupQuadSwapDiagonal ( global highp int)
+0:83          direct index ( temp highp int)
+0:83            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:83              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83                Constant:
+0:83                  0 (const int)
+0:83              Constant:
+0:83                1 (const int)
+0:83            Constant:
+0:83              0 (const int)
+0:84      move second child to first child ( temp highp 2-component vector of int)
+0:84        vector swizzle ( temp highp 2-component vector of int)
+0:84          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:84            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84              Constant:
+0:84                3 (const int)
+0:84            Constant:
+0:84              1 (const int)
+0:84          Sequence
+0:84            Constant:
+0:84              0 (const int)
+0:84            Constant:
+0:84              1 (const int)
+0:84        subgroupQuadSwapDiagonal ( global highp 2-component vector of int)
+0:84          vector swizzle ( temp highp 2-component vector of int)
+0:84            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:84              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84                Constant:
+0:84                  1 (const int)
+0:84              Constant:
+0:84                1 (const int)
+0:84            Sequence
+0:84              Constant:
+0:84                0 (const int)
+0:84              Constant:
+0:84                1 (const int)
+0:85      move second child to first child ( temp highp 3-component vector of int)
+0:85        vector swizzle ( temp highp 3-component vector of int)
+0:85          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:85            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85              Constant:
+0:85                3 (const int)
+0:85            Constant:
+0:85              1 (const int)
+0:85          Sequence
+0:85            Constant:
+0:85              0 (const int)
+0:85            Constant:
+0:85              1 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85        subgroupQuadSwapDiagonal ( global highp 3-component vector of int)
+0:85          vector swizzle ( temp highp 3-component vector of int)
+0:85            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:85              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85                Constant:
+0:85                  2 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:85            Sequence
+0:85              Constant:
+0:85                0 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:86      move second child to first child ( temp highp 4-component vector of int)
+0:86        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:86          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86            Constant:
+0:86              3 (const int)
+0:86          Constant:
+0:86            1 (const int)
+0:86        subgroupQuadSwapDiagonal ( global highp 4-component vector of int)
+0:86          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:86            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86              Constant:
+0:86                3 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:88      move second child to first child ( temp highp uint)
+0:88        direct index ( temp highp uint)
+0:88          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:88            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88              Constant:
+0:88                3 (const int)
+0:88            Constant:
+0:88              2 (const int)
+0:88          Constant:
+0:88            0 (const int)
+0:88        subgroupQuadSwapDiagonal ( global highp uint)
+0:88          direct index ( temp highp uint)
+0:88            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:88              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88                Constant:
+0:88                  0 (const int)
+0:88              Constant:
+0:88                2 (const int)
+0:88            Constant:
+0:88              0 (const int)
+0:89      move second child to first child ( temp highp 2-component vector of uint)
+0:89        vector swizzle ( temp highp 2-component vector of uint)
+0:89          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:89            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89              Constant:
+0:89                3 (const int)
+0:89            Constant:
+0:89              2 (const int)
+0:89          Sequence
+0:89            Constant:
+0:89              0 (const int)
+0:89            Constant:
+0:89              1 (const int)
+0:89        subgroupQuadSwapDiagonal ( global highp 2-component vector of uint)
+0:89          vector swizzle ( temp highp 2-component vector of uint)
+0:89            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:89              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89                Constant:
+0:89                  1 (const int)
+0:89              Constant:
+0:89                2 (const int)
+0:89            Sequence
+0:89              Constant:
+0:89                0 (const int)
+0:89              Constant:
+0:89                1 (const int)
+0:90      move second child to first child ( temp highp 3-component vector of uint)
+0:90        vector swizzle ( temp highp 3-component vector of uint)
+0:90          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:90            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90              Constant:
+0:90                3 (const int)
+0:90            Constant:
+0:90              2 (const int)
+0:90          Sequence
+0:90            Constant:
+0:90              0 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90            Constant:
+0:90              2 (const int)
+0:90        subgroupQuadSwapDiagonal ( global highp 3-component vector of uint)
+0:90          vector swizzle ( temp highp 3-component vector of uint)
+0:90            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:90              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90                Constant:
+0:90                  2 (const int)
+0:90              Constant:
+0:90                2 (const int)
+0:90            Sequence
+0:90              Constant:
+0:90                0 (const int)
+0:90              Constant:
+0:90                1 (const int)
+0:90              Constant:
+0:90                2 (const int)
+0:91      move second child to first child ( temp highp 4-component vector of uint)
+0:91        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:91          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91            Constant:
+0:91              3 (const int)
+0:91          Constant:
+0:91            2 (const int)
+0:91        subgroupQuadSwapDiagonal ( global highp 4-component vector of uint)
+0:91          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:91            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91              Constant:
+0:91                3 (const int)
+0:91            Constant:
+0:91              2 (const int)
+0:93      move second child to first child ( temp highp int)
+0:93        direct index ( temp highp int)
+0:93          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93              Constant:
+0:93                3 (const int)
+0:93            Constant:
+0:93              1 (const int)
+0:93          Constant:
+0:93            0 (const int)
+0:93        Convert bool to int ( temp highp int)
+0:93          subgroupQuadSwapDiagonal ( global bool)
+0:93            Compare Less Than ( temp bool)
+0:93              direct index ( temp highp int)
+0:93                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93                    Constant:
+0:93                      0 (const int)
+0:93                  Constant:
+0:93                    1 (const int)
+0:93                Constant:
+0:93                  0 (const int)
+0:93              Constant:
+0:93                0 (const int)
+0:94      move second child to first child ( temp highp 2-component vector of int)
+0:94        vector swizzle ( temp highp 2-component vector of int)
+0:94          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94              Constant:
+0:94                3 (const int)
+0:94            Constant:
+0:94              1 (const int)
+0:94          Sequence
+0:94            Constant:
+0:94              0 (const int)
+0:94            Constant:
+0:94              1 (const int)
+0:94        Convert bool to int ( temp highp 2-component vector of int)
+0:94          subgroupQuadSwapDiagonal ( global 2-component vector of bool)
+0:94            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:94              vector swizzle ( temp highp 2-component vector of int)
+0:94                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94                    Constant:
+0:94                      1 (const int)
+0:94                  Constant:
+0:94                    1 (const int)
+0:94                Sequence
+0:94                  Constant:
+0:94                    0 (const int)
+0:94                  Constant:
+0:94                    1 (const int)
+0:94              Constant:
+0:94                0 (const int)
+0:94                0 (const int)
+0:95      move second child to first child ( temp highp 3-component vector of int)
+0:95        vector swizzle ( temp highp 3-component vector of int)
+0:95          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95              Constant:
+0:95                3 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95          Sequence
+0:95            Constant:
+0:95              0 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95            Constant:
+0:95              2 (const int)
+0:95        Convert bool to int ( temp highp 3-component vector of int)
+0:95          subgroupQuadSwapDiagonal ( global 3-component vector of bool)
+0:95            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:95              vector swizzle ( temp highp 3-component vector of int)
+0:95                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95                    Constant:
+0:95                      1 (const int)
+0:95                  Constant:
+0:95                    1 (const int)
+0:95                Sequence
+0:95                  Constant:
+0:95                    0 (const int)
+0:95                  Constant:
+0:95                    1 (const int)
+0:95                  Constant:
+0:95                    2 (const int)
+0:95              Constant:
+0:95                0 (const int)
+0:95                0 (const int)
+0:95                0 (const int)
+0:96      move second child to first child ( temp highp 4-component vector of int)
+0:96        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96            Constant:
+0:96              3 (const int)
+0:96          Constant:
+0:96            1 (const int)
+0:96        Convert bool to int ( temp highp 4-component vector of int)
+0:96          subgroupQuadSwapDiagonal ( global 4-component vector of bool)
+0:96            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:96              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96                  Constant:
+0:96                    1 (const int)
+0:96                Constant:
+0:96                  1 (const int)
+0:96              Constant:
+0:96                0 (const int)
+0:96                0 (const int)
+0:96                0 (const int)
+0:96                0 (const int)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_quad
+local_size = (8, 1, 1)
+0:? Sequence
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp highp uint)
+0:16          'invocation' ( temp highp uint)
+0:16          mod ( temp mediump uint)
+0:16            add ( temp mediump uint)
+0:16              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16            Constant:
+0:16              4 (const uint)
+0:18      move second child to first child ( temp highp float)
+0:18        direct index ( temp highp float)
+0:18          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          Constant:
+0:18            0 (const int)
+0:18        subgroupQuadBroadcast ( global highp float)
+0:18          direct index ( temp highp float)
+0:18            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                Constant:
+0:18                  0 (const int)
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          Constant:
+0:18            1 (const uint)
+0:19      move second child to first child ( temp highp 2-component vector of float)
+0:19        vector swizzle ( temp highp 2-component vector of float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Sequence
+0:19            Constant:
+0:19              0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19        subgroupQuadBroadcast ( global highp 2-component vector of float)
+0:19          vector swizzle ( temp highp 2-component vector of float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                Constant:
+0:19                  1 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Sequence
+0:19              Constant:
+0:19                0 (const int)
+0:19              Constant:
+0:19                1 (const int)
+0:19          Constant:
+0:19            1 (const uint)
+0:20      move second child to first child ( temp highp 3-component vector of float)
+0:20        vector swizzle ( temp highp 3-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              Constant:
+0:20                0 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20            Constant:
+0:20              2 (const int)
+0:20        subgroupQuadBroadcast ( global highp 3-component vector of float)
+0:20          vector swizzle ( temp highp 3-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                Constant:
+0:20                  2 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20              Constant:
+0:20                2 (const int)
+0:20          Constant:
+0:20            1 (const uint)
+0:21      move second child to first child ( temp highp 4-component vector of float)
+0:21        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            0 (const int)
+0:21        subgroupQuadBroadcast ( global highp 4-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              Constant:
+0:21                3 (const int)
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            1 (const uint)
+0:23      move second child to first child ( temp highp int)
+0:23        direct index ( temp highp int)
+0:23          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              Constant:
+0:23                0 (const int)
+0:23            Constant:
+0:23              1 (const int)
+0:23          Constant:
+0:23            0 (const int)
+0:23        subgroupQuadBroadcast ( global highp int)
+0:23          direct index ( temp highp int)
+0:23            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                1 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:23          Constant:
+0:23            1 (const uint)
+0:24      move second child to first child ( temp highp 2-component vector of int)
+0:24        vector swizzle ( temp highp 2-component vector of int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              Constant:
+0:24                0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Sequence
+0:24            Constant:
+0:24              0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24        subgroupQuadBroadcast ( global highp 2-component vector of int)
+0:24          vector swizzle ( temp highp 2-component vector of int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                Constant:
+0:24                  1 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Sequence
+0:24              Constant:
+0:24                0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24          Constant:
+0:24            1 (const uint)
+0:25      move second child to first child ( temp highp 3-component vector of int)
+0:25        vector swizzle ( temp highp 3-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              Constant:
+0:25                0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25        subgroupQuadBroadcast ( global highp 3-component vector of int)
+0:25          vector swizzle ( temp highp 3-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                Constant:
+0:25                  2 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25          Constant:
+0:25            1 (const uint)
+0:26      move second child to first child ( temp highp 4-component vector of int)
+0:26        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            Constant:
+0:26              0 (const int)
+0:26          Constant:
+0:26            1 (const int)
+0:26        subgroupQuadBroadcast ( global highp 4-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              Constant:
+0:26                3 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26          Constant:
+0:26            1 (const uint)
+0:28      move second child to first child ( temp highp uint)
+0:28        direct index ( temp highp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                0 (const int)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:28        subgroupQuadBroadcast ( global highp uint)
+0:28          direct index ( temp highp uint)
+0:28            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                2 (const int)
+0:28            Constant:
+0:28              0 (const int)
+0:28          Constant:
+0:28            1 (const uint)
+0:29      move second child to first child ( temp highp 2-component vector of uint)
+0:29        vector swizzle ( temp highp 2-component vector of uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              Constant:
+0:29                0 (const int)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Sequence
+0:29            Constant:
+0:29              0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29        subgroupQuadBroadcast ( global highp 2-component vector of uint)
+0:29          vector swizzle ( temp highp 2-component vector of uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                Constant:
+0:29                  1 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Sequence
+0:29              Constant:
+0:29                0 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29          Constant:
+0:29            1 (const uint)
+0:30      move second child to first child ( temp highp 3-component vector of uint)
+0:30        vector swizzle ( temp highp 3-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              Constant:
+0:30                0 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30        subgroupQuadBroadcast ( global highp 3-component vector of uint)
+0:30          vector swizzle ( temp highp 3-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                Constant:
+0:30                  2 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30          Constant:
+0:30            1 (const uint)
+0:31      move second child to first child ( temp highp 4-component vector of uint)
+0:31        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            Constant:
+0:31              0 (const int)
+0:31          Constant:
+0:31            2 (const int)
+0:31        subgroupQuadBroadcast ( global highp 4-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              Constant:
+0:31                3 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31          Constant:
+0:31            1 (const uint)
+0:33      move second child to first child ( temp highp int)
+0:33        direct index ( temp highp int)
+0:33          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              Constant:
+0:33                1 (const int)
+0:33            Constant:
+0:33              1 (const int)
+0:33          Constant:
+0:33            0 (const int)
+0:33        Convert bool to int ( temp highp int)
+0:33          subgroupQuadBroadcast ( global bool)
+0:33            Compare Less Than ( temp bool)
+0:33              direct index ( temp highp int)
+0:33                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                    Constant:
+0:33                      0 (const int)
+0:33                  Constant:
+0:33                    1 (const int)
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                0 (const int)
+0:33            Constant:
+0:33              1 (const uint)
+0:34      move second child to first child ( temp highp 2-component vector of int)
+0:34        vector swizzle ( temp highp 2-component vector of int)
+0:34          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              Constant:
+0:34                1 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34        Convert bool to int ( temp highp 2-component vector of int)
+0:34          subgroupQuadBroadcast ( global 2-component vector of bool)
+0:34            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:34              vector swizzle ( temp highp 2-component vector of int)
+0:34                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                    Constant:
+0:34                      1 (const int)
+0:34                  Constant:
+0:34                    1 (const int)
+0:34                Sequence
+0:34                  Constant:
+0:34                    0 (const int)
+0:34                  Constant:
+0:34                    1 (const int)
+0:34              Constant:
+0:34                0 (const int)
+0:34                0 (const int)
+0:34            Constant:
+0:34              1 (const uint)
+0:35      move second child to first child ( temp highp 3-component vector of int)
+0:35        vector swizzle ( temp highp 3-component vector of int)
+0:35          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              Constant:
+0:35                1 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35            Constant:
+0:35              2 (const int)
+0:35        Convert bool to int ( temp highp 3-component vector of int)
+0:35          subgroupQuadBroadcast ( global 3-component vector of bool)
+0:35            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:35              vector swizzle ( temp highp 3-component vector of int)
+0:35                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                    Constant:
+0:35                      1 (const int)
+0:35                  Constant:
+0:35                    1 (const int)
+0:35                Sequence
+0:35                  Constant:
+0:35                    0 (const int)
+0:35                  Constant:
+0:35                    1 (const int)
+0:35                  Constant:
+0:35                    2 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35                0 (const int)
+0:35                0 (const int)
+0:35            Constant:
+0:35              1 (const uint)
+0:36      move second child to first child ( temp highp 4-component vector of int)
+0:36        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            Constant:
+0:36              1 (const int)
+0:36          Constant:
+0:36            1 (const int)
+0:36        Convert bool to int ( temp highp 4-component vector of int)
+0:36          subgroupQuadBroadcast ( global 4-component vector of bool)
+0:36            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:36              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  Constant:
+0:36                    1 (const int)
+0:36                Constant:
+0:36                  1 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36                0 (const int)
+0:36                0 (const int)
+0:36                0 (const int)
+0:36            Constant:
+0:36              1 (const uint)
+0:38      move second child to first child ( temp highp float)
+0:38        direct index ( temp highp float)
+0:38          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              Constant:
+0:38                1 (const int)
+0:38            Constant:
+0:38              0 (const int)
+0:38          Constant:
+0:38            0 (const int)
+0:38        subgroupQuadSwapHorizontal ( global highp float)
+0:38          direct index ( temp highp float)
+0:38            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                0 (const int)
+0:38            Constant:
+0:38              0 (const int)
+0:39      move second child to first child ( temp highp 2-component vector of float)
+0:39        vector swizzle ( temp highp 2-component vector of float)
+0:39          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              Constant:
+0:39                1 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39          Sequence
+0:39            Constant:
+0:39              0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39        subgroupQuadSwapHorizontal ( global highp 2-component vector of float)
+0:39          vector swizzle ( temp highp 2-component vector of float)
+0:39            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                Constant:
+0:39                  1 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            Sequence
+0:39              Constant:
+0:39                0 (const int)
+0:39              Constant:
+0:39                1 (const int)
+0:40      move second child to first child ( temp highp 3-component vector of float)
+0:40        vector swizzle ( temp highp 3-component vector of float)
+0:40          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40            Constant:
+0:40              2 (const int)
+0:40        subgroupQuadSwapHorizontal ( global highp 3-component vector of float)
+0:40          vector swizzle ( temp highp 3-component vector of float)
+0:40            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                Constant:
+0:40                  2 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40            Sequence
+0:40              Constant:
+0:40                0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40              Constant:
+0:40                2 (const int)
+0:41      move second child to first child ( temp highp 4-component vector of float)
+0:41        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            Constant:
+0:41              1 (const int)
+0:41          Constant:
+0:41            0 (const int)
+0:41        subgroupQuadSwapHorizontal ( global highp 4-component vector of float)
+0:41          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              Constant:
+0:41                3 (const int)
+0:41            Constant:
+0:41              0 (const int)
+0:43      move second child to first child ( temp highp int)
+0:43        direct index ( temp highp int)
+0:43          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              Constant:
+0:43                1 (const int)
+0:43            Constant:
+0:43              1 (const int)
+0:43          Constant:
+0:43            0 (const int)
+0:43        subgroupQuadSwapHorizontal ( global highp int)
+0:43          direct index ( temp highp int)
+0:43            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                Constant:
+0:43                  0 (const int)
+0:43              Constant:
+0:43                1 (const int)
+0:43            Constant:
+0:43              0 (const int)
+0:44      move second child to first child ( temp highp 2-component vector of int)
+0:44        vector swizzle ( temp highp 2-component vector of int)
+0:44          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              Constant:
+0:44                1 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44          Sequence
+0:44            Constant:
+0:44              0 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44        subgroupQuadSwapHorizontal ( global highp 2-component vector of int)
+0:44          vector swizzle ( temp highp 2-component vector of int)
+0:44            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                Constant:
+0:44                  1 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44            Sequence
+0:44              Constant:
+0:44                0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:45      move second child to first child ( temp highp 3-component vector of int)
+0:45        vector swizzle ( temp highp 3-component vector of int)
+0:45          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              Constant:
+0:45                1 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45        subgroupQuadSwapHorizontal ( global highp 3-component vector of int)
+0:45          vector swizzle ( temp highp 3-component vector of int)
+0:45            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                Constant:
+0:45                  2 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:46      move second child to first child ( temp highp 4-component vector of int)
+0:46        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            Constant:
+0:46              1 (const int)
+0:46          Constant:
+0:46            1 (const int)
+0:46        subgroupQuadSwapHorizontal ( global highp 4-component vector of int)
+0:46          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              Constant:
+0:46                3 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:48      move second child to first child ( temp highp uint)
+0:48        direct index ( temp highp uint)
+0:48          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              Constant:
+0:48                1 (const int)
+0:48            Constant:
+0:48              2 (const int)
+0:48          Constant:
+0:48            0 (const int)
+0:48        subgroupQuadSwapHorizontal ( global highp uint)
+0:48          direct index ( temp highp uint)
+0:48            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                Constant:
+0:48                  0 (const int)
+0:48              Constant:
+0:48                2 (const int)
+0:48            Constant:
+0:48              0 (const int)
+0:49      move second child to first child ( temp highp 2-component vector of uint)
+0:49        vector swizzle ( temp highp 2-component vector of uint)
+0:49          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              Constant:
+0:49                1 (const int)
+0:49            Constant:
+0:49              2 (const int)
+0:49          Sequence
+0:49            Constant:
+0:49              0 (const int)
+0:49            Constant:
+0:49              1 (const int)
+0:49        subgroupQuadSwapHorizontal ( global highp 2-component vector of uint)
+0:49          vector swizzle ( temp highp 2-component vector of uint)
+0:49            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                Constant:
+0:49                  1 (const int)
+0:49              Constant:
+0:49                2 (const int)
+0:49            Sequence
+0:49              Constant:
+0:49                0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:50      move second child to first child ( temp highp 3-component vector of uint)
+0:50        vector swizzle ( temp highp 3-component vector of uint)
+0:50          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              Constant:
+0:50                1 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50        subgroupQuadSwapHorizontal ( global highp 3-component vector of uint)
+0:50          vector swizzle ( temp highp 3-component vector of uint)
+0:50            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                Constant:
+0:50                  2 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:51      move second child to first child ( temp highp 4-component vector of uint)
+0:51        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            Constant:
+0:51              1 (const int)
+0:51          Constant:
+0:51            2 (const int)
+0:51        subgroupQuadSwapHorizontal ( global highp 4-component vector of uint)
+0:51          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              Constant:
+0:51                3 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:53      move second child to first child ( temp highp int)
+0:53        direct index ( temp highp int)
+0:53          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              Constant:
+0:53                2 (const int)
+0:53            Constant:
+0:53              1 (const int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        Convert bool to int ( temp highp int)
+0:53          subgroupQuadSwapHorizontal ( global bool)
+0:53            Compare Less Than ( temp bool)
+0:53              direct index ( temp highp int)
+0:53                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                    Constant:
+0:53                      0 (const int)
+0:53                  Constant:
+0:53                    1 (const int)
+0:53                Constant:
+0:53                  0 (const int)
+0:53              Constant:
+0:53                0 (const int)
+0:54      move second child to first child ( temp highp 2-component vector of int)
+0:54        vector swizzle ( temp highp 2-component vector of int)
+0:54          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              Constant:
+0:54                2 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54          Sequence
+0:54            Constant:
+0:54              0 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54        Convert bool to int ( temp highp 2-component vector of int)
+0:54          subgroupQuadSwapHorizontal ( global 2-component vector of bool)
+0:54            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:54              vector swizzle ( temp highp 2-component vector of int)
+0:54                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                    Constant:
+0:54                      1 (const int)
+0:54                  Constant:
+0:54                    1 (const int)
+0:54                Sequence
+0:54                  Constant:
+0:54                    0 (const int)
+0:54                  Constant:
+0:54                    1 (const int)
+0:54              Constant:
+0:54                0 (const int)
+0:54                0 (const int)
+0:55      move second child to first child ( temp highp 3-component vector of int)
+0:55        vector swizzle ( temp highp 3-component vector of int)
+0:55          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              Constant:
+0:55                2 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55            Constant:
+0:55              2 (const int)
+0:55        Convert bool to int ( temp highp 3-component vector of int)
+0:55          subgroupQuadSwapHorizontal ( global 3-component vector of bool)
+0:55            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:55              vector swizzle ( temp highp 3-component vector of int)
+0:55                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                    Constant:
+0:55                      1 (const int)
+0:55                  Constant:
+0:55                    1 (const int)
+0:55                Sequence
+0:55                  Constant:
+0:55                    0 (const int)
+0:55                  Constant:
+0:55                    1 (const int)
+0:55                  Constant:
+0:55                    2 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55                0 (const int)
+0:55                0 (const int)
+0:56      move second child to first child ( temp highp 4-component vector of int)
+0:56        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            Constant:
+0:56              2 (const int)
+0:56          Constant:
+0:56            1 (const int)
+0:56        Convert bool to int ( temp highp 4-component vector of int)
+0:56          subgroupQuadSwapHorizontal ( global 4-component vector of bool)
+0:56            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:56              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                  Constant:
+0:56                    1 (const int)
+0:56                Constant:
+0:56                  1 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:56                0 (const int)
+0:56                0 (const int)
+0:56                0 (const int)
+0:58      move second child to first child ( temp highp float)
+0:58        direct index ( temp highp float)
+0:58          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              Constant:
+0:58                2 (const int)
+0:58            Constant:
+0:58              0 (const int)
+0:58          Constant:
+0:58            0 (const int)
+0:58        subgroupQuadSwapVertical ( global highp float)
+0:58          direct index ( temp highp float)
+0:58            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:58              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                Constant:
+0:58                  0 (const int)
+0:58              Constant:
+0:58                0 (const int)
+0:58            Constant:
+0:58              0 (const int)
+0:59      move second child to first child ( temp highp 2-component vector of float)
+0:59        vector swizzle ( temp highp 2-component vector of float)
+0:59          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:59            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59              Constant:
+0:59                2 (const int)
+0:59            Constant:
+0:59              0 (const int)
+0:59          Sequence
+0:59            Constant:
+0:59              0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:59        subgroupQuadSwapVertical ( global highp 2-component vector of float)
+0:59          vector swizzle ( temp highp 2-component vector of float)
+0:59            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59                Constant:
+0:59                  1 (const int)
+0:59              Constant:
+0:59                0 (const int)
+0:59            Sequence
+0:59              Constant:
+0:59                0 (const int)
+0:59              Constant:
+0:59                1 (const int)
+0:60      move second child to first child ( temp highp 3-component vector of float)
+0:60        vector swizzle ( temp highp 3-component vector of float)
+0:60          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:60            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              Constant:
+0:60                2 (const int)
+0:60            Constant:
+0:60              0 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60            Constant:
+0:60              2 (const int)
+0:60        subgroupQuadSwapVertical ( global highp 3-component vector of float)
+0:60          vector swizzle ( temp highp 3-component vector of float)
+0:60            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                Constant:
+0:60                  2 (const int)
+0:60              Constant:
+0:60                0 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60              Constant:
+0:60                2 (const int)
+0:61      move second child to first child ( temp highp 4-component vector of float)
+0:61        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:61          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61            Constant:
+0:61              2 (const int)
+0:61          Constant:
+0:61            0 (const int)
+0:61        subgroupQuadSwapVertical ( global highp 4-component vector of float)
+0:61          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:61            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61              Constant:
+0:61                3 (const int)
+0:61            Constant:
+0:61              0 (const int)
+0:63      move second child to first child ( temp highp int)
+0:63        direct index ( temp highp int)
+0:63          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63              Constant:
+0:63                2 (const int)
+0:63            Constant:
+0:63              1 (const int)
+0:63          Constant:
+0:63            0 (const int)
+0:63        subgroupQuadSwapVertical ( global highp int)
+0:63          direct index ( temp highp int)
+0:63            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:63              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:63                Constant:
+0:63                  0 (const int)
+0:63              Constant:
+0:63                1 (const int)
+0:63            Constant:
+0:63              0 (const int)
+0:64      move second child to first child ( temp highp 2-component vector of int)
+0:64        vector swizzle ( temp highp 2-component vector of int)
+0:64          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:64            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64              Constant:
+0:64                2 (const int)
+0:64            Constant:
+0:64              1 (const int)
+0:64          Sequence
+0:64            Constant:
+0:64              0 (const int)
+0:64            Constant:
+0:64              1 (const int)
+0:64        subgroupQuadSwapVertical ( global highp 2-component vector of int)
+0:64          vector swizzle ( temp highp 2-component vector of int)
+0:64            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:64              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:64                Constant:
+0:64                  1 (const int)
+0:64              Constant:
+0:64                1 (const int)
+0:64            Sequence
+0:64              Constant:
+0:64                0 (const int)
+0:64              Constant:
+0:64                1 (const int)
+0:65      move second child to first child ( temp highp 3-component vector of int)
+0:65        vector swizzle ( temp highp 3-component vector of int)
+0:65          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:65            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65              Constant:
+0:65                2 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65            Constant:
+0:65              2 (const int)
+0:65        subgroupQuadSwapVertical ( global highp 3-component vector of int)
+0:65          vector swizzle ( temp highp 3-component vector of int)
+0:65            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:65              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:65                Constant:
+0:65                  2 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:65            Sequence
+0:65              Constant:
+0:65                0 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:65              Constant:
+0:65                2 (const int)
+0:66      move second child to first child ( temp highp 4-component vector of int)
+0:66        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:66          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66            Constant:
+0:66              2 (const int)
+0:66          Constant:
+0:66            1 (const int)
+0:66        subgroupQuadSwapVertical ( global highp 4-component vector of int)
+0:66          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:66            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:66              Constant:
+0:66                3 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:68      move second child to first child ( temp highp uint)
+0:68        direct index ( temp highp uint)
+0:68          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68              Constant:
+0:68                2 (const int)
+0:68            Constant:
+0:68              2 (const int)
+0:68          Constant:
+0:68            0 (const int)
+0:68        subgroupQuadSwapVertical ( global highp uint)
+0:68          direct index ( temp highp uint)
+0:68            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:68              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:68                Constant:
+0:68                  0 (const int)
+0:68              Constant:
+0:68                2 (const int)
+0:68            Constant:
+0:68              0 (const int)
+0:69      move second child to first child ( temp highp 2-component vector of uint)
+0:69        vector swizzle ( temp highp 2-component vector of uint)
+0:69          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:69            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69              Constant:
+0:69                2 (const int)
+0:69            Constant:
+0:69              2 (const int)
+0:69          Sequence
+0:69            Constant:
+0:69              0 (const int)
+0:69            Constant:
+0:69              1 (const int)
+0:69        subgroupQuadSwapVertical ( global highp 2-component vector of uint)
+0:69          vector swizzle ( temp highp 2-component vector of uint)
+0:69            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:69              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:69                Constant:
+0:69                  1 (const int)
+0:69              Constant:
+0:69                2 (const int)
+0:69            Sequence
+0:69              Constant:
+0:69                0 (const int)
+0:69              Constant:
+0:69                1 (const int)
+0:70      move second child to first child ( temp highp 3-component vector of uint)
+0:70        vector swizzle ( temp highp 3-component vector of uint)
+0:70          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:70            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70              Constant:
+0:70                2 (const int)
+0:70            Constant:
+0:70              2 (const int)
+0:70          Sequence
+0:70            Constant:
+0:70              0 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70            Constant:
+0:70              2 (const int)
+0:70        subgroupQuadSwapVertical ( global highp 3-component vector of uint)
+0:70          vector swizzle ( temp highp 3-component vector of uint)
+0:70            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:70              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:70                Constant:
+0:70                  2 (const int)
+0:70              Constant:
+0:70                2 (const int)
+0:70            Sequence
+0:70              Constant:
+0:70                0 (const int)
+0:70              Constant:
+0:70                1 (const int)
+0:70              Constant:
+0:70                2 (const int)
+0:71      move second child to first child ( temp highp 4-component vector of uint)
+0:71        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:71          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71            Constant:
+0:71              2 (const int)
+0:71          Constant:
+0:71            2 (const int)
+0:71        subgroupQuadSwapVertical ( global highp 4-component vector of uint)
+0:71          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:71            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:71              Constant:
+0:71                3 (const int)
+0:71            Constant:
+0:71              2 (const int)
+0:73      move second child to first child ( temp highp int)
+0:73        direct index ( temp highp int)
+0:73          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:73            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73              Constant:
+0:73                3 (const int)
+0:73            Constant:
+0:73              1 (const int)
+0:73          Constant:
+0:73            0 (const int)
+0:73        Convert bool to int ( temp highp int)
+0:73          subgroupQuadSwapVertical ( global bool)
+0:73            Compare Less Than ( temp bool)
+0:73              direct index ( temp highp int)
+0:73                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:73                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:73                    Constant:
+0:73                      0 (const int)
+0:73                  Constant:
+0:73                    1 (const int)
+0:73                Constant:
+0:73                  0 (const int)
+0:73              Constant:
+0:73                0 (const int)
+0:74      move second child to first child ( temp highp 2-component vector of int)
+0:74        vector swizzle ( temp highp 2-component vector of int)
+0:74          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:74            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74              Constant:
+0:74                3 (const int)
+0:74            Constant:
+0:74              1 (const int)
+0:74          Sequence
+0:74            Constant:
+0:74              0 (const int)
+0:74            Constant:
+0:74              1 (const int)
+0:74        Convert bool to int ( temp highp 2-component vector of int)
+0:74          subgroupQuadSwapVertical ( global 2-component vector of bool)
+0:74            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:74              vector swizzle ( temp highp 2-component vector of int)
+0:74                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:74                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:74                    Constant:
+0:74                      1 (const int)
+0:74                  Constant:
+0:74                    1 (const int)
+0:74                Sequence
+0:74                  Constant:
+0:74                    0 (const int)
+0:74                  Constant:
+0:74                    1 (const int)
+0:74              Constant:
+0:74                0 (const int)
+0:74                0 (const int)
+0:75      move second child to first child ( temp highp 3-component vector of int)
+0:75        vector swizzle ( temp highp 3-component vector of int)
+0:75          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:75            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75              Constant:
+0:75                3 (const int)
+0:75            Constant:
+0:75              1 (const int)
+0:75          Sequence
+0:75            Constant:
+0:75              0 (const int)
+0:75            Constant:
+0:75              1 (const int)
+0:75            Constant:
+0:75              2 (const int)
+0:75        Convert bool to int ( temp highp 3-component vector of int)
+0:75          subgroupQuadSwapVertical ( global 3-component vector of bool)
+0:75            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:75              vector swizzle ( temp highp 3-component vector of int)
+0:75                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:75                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:75                    Constant:
+0:75                      1 (const int)
+0:75                  Constant:
+0:75                    1 (const int)
+0:75                Sequence
+0:75                  Constant:
+0:75                    0 (const int)
+0:75                  Constant:
+0:75                    1 (const int)
+0:75                  Constant:
+0:75                    2 (const int)
+0:75              Constant:
+0:75                0 (const int)
+0:75                0 (const int)
+0:75                0 (const int)
+0:76      move second child to first child ( temp highp 4-component vector of int)
+0:76        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:76          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76            Constant:
+0:76              3 (const int)
+0:76          Constant:
+0:76            1 (const int)
+0:76        Convert bool to int ( temp highp 4-component vector of int)
+0:76          subgroupQuadSwapVertical ( global 4-component vector of bool)
+0:76            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:76              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:76                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:76                  Constant:
+0:76                    1 (const int)
+0:76                Constant:
+0:76                  1 (const int)
+0:76              Constant:
+0:76                0 (const int)
+0:76                0 (const int)
+0:76                0 (const int)
+0:76                0 (const int)
+0:78      move second child to first child ( temp highp float)
+0:78        direct index ( temp highp float)
+0:78          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:78            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78              Constant:
+0:78                3 (const int)
+0:78            Constant:
+0:78              0 (const int)
+0:78          Constant:
+0:78            0 (const int)
+0:78        subgroupQuadSwapDiagonal ( global highp float)
+0:78          direct index ( temp highp float)
+0:78            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:78              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:78                Constant:
+0:78                  0 (const int)
+0:78              Constant:
+0:78                0 (const int)
+0:78            Constant:
+0:78              0 (const int)
+0:79      move second child to first child ( temp highp 2-component vector of float)
+0:79        vector swizzle ( temp highp 2-component vector of float)
+0:79          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:79            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79              Constant:
+0:79                3 (const int)
+0:79            Constant:
+0:79              0 (const int)
+0:79          Sequence
+0:79            Constant:
+0:79              0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:79        subgroupQuadSwapDiagonal ( global highp 2-component vector of float)
+0:79          vector swizzle ( temp highp 2-component vector of float)
+0:79            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:79              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:79                Constant:
+0:79                  1 (const int)
+0:79              Constant:
+0:79                0 (const int)
+0:79            Sequence
+0:79              Constant:
+0:79                0 (const int)
+0:79              Constant:
+0:79                1 (const int)
+0:80      move second child to first child ( temp highp 3-component vector of float)
+0:80        vector swizzle ( temp highp 3-component vector of float)
+0:80          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:80            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80              Constant:
+0:80                3 (const int)
+0:80            Constant:
+0:80              0 (const int)
+0:80          Sequence
+0:80            Constant:
+0:80              0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80            Constant:
+0:80              2 (const int)
+0:80        subgroupQuadSwapDiagonal ( global highp 3-component vector of float)
+0:80          vector swizzle ( temp highp 3-component vector of float)
+0:80            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:80              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:80                Constant:
+0:80                  2 (const int)
+0:80              Constant:
+0:80                0 (const int)
+0:80            Sequence
+0:80              Constant:
+0:80                0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80              Constant:
+0:80                2 (const int)
+0:81      move second child to first child ( temp highp 4-component vector of float)
+0:81        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:81          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81            Constant:
+0:81              3 (const int)
+0:81          Constant:
+0:81            0 (const int)
+0:81        subgroupQuadSwapDiagonal ( global highp 4-component vector of float)
+0:81          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:81            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:81              Constant:
+0:81                3 (const int)
+0:81            Constant:
+0:81              0 (const int)
+0:83      move second child to first child ( temp highp int)
+0:83        direct index ( temp highp int)
+0:83          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:83            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83              Constant:
+0:83                3 (const int)
+0:83            Constant:
+0:83              1 (const int)
+0:83          Constant:
+0:83            0 (const int)
+0:83        subgroupQuadSwapDiagonal ( global highp int)
+0:83          direct index ( temp highp int)
+0:83            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:83              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:83                Constant:
+0:83                  0 (const int)
+0:83              Constant:
+0:83                1 (const int)
+0:83            Constant:
+0:83              0 (const int)
+0:84      move second child to first child ( temp highp 2-component vector of int)
+0:84        vector swizzle ( temp highp 2-component vector of int)
+0:84          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:84            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84              Constant:
+0:84                3 (const int)
+0:84            Constant:
+0:84              1 (const int)
+0:84          Sequence
+0:84            Constant:
+0:84              0 (const int)
+0:84            Constant:
+0:84              1 (const int)
+0:84        subgroupQuadSwapDiagonal ( global highp 2-component vector of int)
+0:84          vector swizzle ( temp highp 2-component vector of int)
+0:84            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:84              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:84                Constant:
+0:84                  1 (const int)
+0:84              Constant:
+0:84                1 (const int)
+0:84            Sequence
+0:84              Constant:
+0:84                0 (const int)
+0:84              Constant:
+0:84                1 (const int)
+0:85      move second child to first child ( temp highp 3-component vector of int)
+0:85        vector swizzle ( temp highp 3-component vector of int)
+0:85          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:85            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85              Constant:
+0:85                3 (const int)
+0:85            Constant:
+0:85              1 (const int)
+0:85          Sequence
+0:85            Constant:
+0:85              0 (const int)
+0:85            Constant:
+0:85              1 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85        subgroupQuadSwapDiagonal ( global highp 3-component vector of int)
+0:85          vector swizzle ( temp highp 3-component vector of int)
+0:85            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:85              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:85                Constant:
+0:85                  2 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:85            Sequence
+0:85              Constant:
+0:85                0 (const int)
+0:85              Constant:
+0:85                1 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:86      move second child to first child ( temp highp 4-component vector of int)
+0:86        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:86          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86            Constant:
+0:86              3 (const int)
+0:86          Constant:
+0:86            1 (const int)
+0:86        subgroupQuadSwapDiagonal ( global highp 4-component vector of int)
+0:86          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:86            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:86              Constant:
+0:86                3 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:88      move second child to first child ( temp highp uint)
+0:88        direct index ( temp highp uint)
+0:88          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:88            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88              Constant:
+0:88                3 (const int)
+0:88            Constant:
+0:88              2 (const int)
+0:88          Constant:
+0:88            0 (const int)
+0:88        subgroupQuadSwapDiagonal ( global highp uint)
+0:88          direct index ( temp highp uint)
+0:88            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:88              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:88                Constant:
+0:88                  0 (const int)
+0:88              Constant:
+0:88                2 (const int)
+0:88            Constant:
+0:88              0 (const int)
+0:89      move second child to first child ( temp highp 2-component vector of uint)
+0:89        vector swizzle ( temp highp 2-component vector of uint)
+0:89          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:89            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89              Constant:
+0:89                3 (const int)
+0:89            Constant:
+0:89              2 (const int)
+0:89          Sequence
+0:89            Constant:
+0:89              0 (const int)
+0:89            Constant:
+0:89              1 (const int)
+0:89        subgroupQuadSwapDiagonal ( global highp 2-component vector of uint)
+0:89          vector swizzle ( temp highp 2-component vector of uint)
+0:89            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:89              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:89                Constant:
+0:89                  1 (const int)
+0:89              Constant:
+0:89                2 (const int)
+0:89            Sequence
+0:89              Constant:
+0:89                0 (const int)
+0:89              Constant:
+0:89                1 (const int)
+0:90      move second child to first child ( temp highp 3-component vector of uint)
+0:90        vector swizzle ( temp highp 3-component vector of uint)
+0:90          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:90            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90              Constant:
+0:90                3 (const int)
+0:90            Constant:
+0:90              2 (const int)
+0:90          Sequence
+0:90            Constant:
+0:90              0 (const int)
+0:90            Constant:
+0:90              1 (const int)
+0:90            Constant:
+0:90              2 (const int)
+0:90        subgroupQuadSwapDiagonal ( global highp 3-component vector of uint)
+0:90          vector swizzle ( temp highp 3-component vector of uint)
+0:90            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:90              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:90                Constant:
+0:90                  2 (const int)
+0:90              Constant:
+0:90                2 (const int)
+0:90            Sequence
+0:90              Constant:
+0:90                0 (const int)
+0:90              Constant:
+0:90                1 (const int)
+0:90              Constant:
+0:90                2 (const int)
+0:91      move second child to first child ( temp highp 4-component vector of uint)
+0:91        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:91          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91            Constant:
+0:91              3 (const int)
+0:91          Constant:
+0:91            2 (const int)
+0:91        subgroupQuadSwapDiagonal ( global highp 4-component vector of uint)
+0:91          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:91            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:91              Constant:
+0:91                3 (const int)
+0:91            Constant:
+0:91              2 (const int)
+0:93      move second child to first child ( temp highp int)
+0:93        direct index ( temp highp int)
+0:93          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93              Constant:
+0:93                3 (const int)
+0:93            Constant:
+0:93              1 (const int)
+0:93          Constant:
+0:93            0 (const int)
+0:93        Convert bool to int ( temp highp int)
+0:93          subgroupQuadSwapDiagonal ( global bool)
+0:93            Compare Less Than ( temp bool)
+0:93              direct index ( temp highp int)
+0:93                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:93                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:93                    Constant:
+0:93                      0 (const int)
+0:93                  Constant:
+0:93                    1 (const int)
+0:93                Constant:
+0:93                  0 (const int)
+0:93              Constant:
+0:93                0 (const int)
+0:94      move second child to first child ( temp highp 2-component vector of int)
+0:94        vector swizzle ( temp highp 2-component vector of int)
+0:94          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94              Constant:
+0:94                3 (const int)
+0:94            Constant:
+0:94              1 (const int)
+0:94          Sequence
+0:94            Constant:
+0:94              0 (const int)
+0:94            Constant:
+0:94              1 (const int)
+0:94        Convert bool to int ( temp highp 2-component vector of int)
+0:94          subgroupQuadSwapDiagonal ( global 2-component vector of bool)
+0:94            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:94              vector swizzle ( temp highp 2-component vector of int)
+0:94                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:94                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:94                    Constant:
+0:94                      1 (const int)
+0:94                  Constant:
+0:94                    1 (const int)
+0:94                Sequence
+0:94                  Constant:
+0:94                    0 (const int)
+0:94                  Constant:
+0:94                    1 (const int)
+0:94              Constant:
+0:94                0 (const int)
+0:94                0 (const int)
+0:95      move second child to first child ( temp highp 3-component vector of int)
+0:95        vector swizzle ( temp highp 3-component vector of int)
+0:95          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95              Constant:
+0:95                3 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95          Sequence
+0:95            Constant:
+0:95              0 (const int)
+0:95            Constant:
+0:95              1 (const int)
+0:95            Constant:
+0:95              2 (const int)
+0:95        Convert bool to int ( temp highp 3-component vector of int)
+0:95          subgroupQuadSwapDiagonal ( global 3-component vector of bool)
+0:95            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:95              vector swizzle ( temp highp 3-component vector of int)
+0:95                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:95                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:95                    Constant:
+0:95                      1 (const int)
+0:95                  Constant:
+0:95                    1 (const int)
+0:95                Sequence
+0:95                  Constant:
+0:95                    0 (const int)
+0:95                  Constant:
+0:95                    1 (const int)
+0:95                  Constant:
+0:95                    2 (const int)
+0:95              Constant:
+0:95                0 (const int)
+0:95                0 (const int)
+0:95                0 (const int)
+0:96      move second child to first child ( temp highp 4-component vector of int)
+0:96        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96            Constant:
+0:96              3 (const int)
+0:96          Constant:
+0:96            1 (const int)
+0:96        Convert bool to int ( temp highp 4-component vector of int)
+0:96          subgroupQuadSwapDiagonal ( global 4-component vector of bool)
+0:96            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:96              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:96                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:96                  Constant:
+0:96                    1 (const int)
+0:96                Constant:
+0:96                  1 (const int)
+0:96              Constant:
+0:96                0 (const int)
+0:96                0 (const int)
+0:96                0 (const int)
+0:96                0 (const int)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
diff --git a/Test/baseResults/glsl.es320.subgroupShuffle.comp.out b/Test/baseResults/glsl.es320.subgroupShuffle.comp.out
new file mode 100644
index 0000000..31b1430
--- /dev/null
+++ b/Test/baseResults/glsl.es320.subgroupShuffle.comp.out
@@ -0,0 +1,1773 @@
+glsl.es320.subgroupShuffle.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_shuffle
+local_size = (8, 8, 1)
+0:? Sequence
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp highp uint)
+0:16          'invocation' ( temp highp uint)
+0:16          mod ( temp mediump uint)
+0:16            add ( temp mediump uint)
+0:16              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16            Constant:
+0:16              4 (const uint)
+0:18      move second child to first child ( temp highp float)
+0:18        direct index ( temp highp float)
+0:18          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          Constant:
+0:18            0 (const int)
+0:18        subgroupShuffle ( global highp float)
+0:18          direct index ( temp highp float)
+0:18            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                Constant:
+0:18                  0 (const int)
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          'invocation' ( temp highp uint)
+0:19      move second child to first child ( temp highp 2-component vector of float)
+0:19        vector swizzle ( temp highp 2-component vector of float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Sequence
+0:19            Constant:
+0:19              0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19        subgroupShuffle ( global highp 2-component vector of float)
+0:19          vector swizzle ( temp highp 2-component vector of float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                Constant:
+0:19                  1 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Sequence
+0:19              Constant:
+0:19                0 (const int)
+0:19              Constant:
+0:19                1 (const int)
+0:19          'invocation' ( temp highp uint)
+0:20      move second child to first child ( temp highp 3-component vector of float)
+0:20        vector swizzle ( temp highp 3-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              Constant:
+0:20                0 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20            Constant:
+0:20              2 (const int)
+0:20        subgroupShuffle ( global highp 3-component vector of float)
+0:20          vector swizzle ( temp highp 3-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                Constant:
+0:20                  2 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20              Constant:
+0:20                2 (const int)
+0:20          'invocation' ( temp highp uint)
+0:21      move second child to first child ( temp highp 4-component vector of float)
+0:21        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            0 (const int)
+0:21        subgroupShuffle ( global highp 4-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              Constant:
+0:21                3 (const int)
+0:21            Constant:
+0:21              0 (const int)
+0:21          'invocation' ( temp highp uint)
+0:23      move second child to first child ( temp highp int)
+0:23        direct index ( temp highp int)
+0:23          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              Constant:
+0:23                0 (const int)
+0:23            Constant:
+0:23              1 (const int)
+0:23          Constant:
+0:23            0 (const int)
+0:23        subgroupShuffle ( global highp int)
+0:23          direct index ( temp highp int)
+0:23            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                1 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:23          'invocation' ( temp highp uint)
+0:24      move second child to first child ( temp highp 2-component vector of int)
+0:24        vector swizzle ( temp highp 2-component vector of int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              Constant:
+0:24                0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Sequence
+0:24            Constant:
+0:24              0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24        subgroupShuffle ( global highp 2-component vector of int)
+0:24          vector swizzle ( temp highp 2-component vector of int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                Constant:
+0:24                  1 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Sequence
+0:24              Constant:
+0:24                0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24          'invocation' ( temp highp uint)
+0:25      move second child to first child ( temp highp 3-component vector of int)
+0:25        vector swizzle ( temp highp 3-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              Constant:
+0:25                0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25        subgroupShuffle ( global highp 3-component vector of int)
+0:25          vector swizzle ( temp highp 3-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                Constant:
+0:25                  2 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25          'invocation' ( temp highp uint)
+0:26      move second child to first child ( temp highp 4-component vector of int)
+0:26        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            Constant:
+0:26              0 (const int)
+0:26          Constant:
+0:26            1 (const int)
+0:26        subgroupShuffle ( global highp 4-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              Constant:
+0:26                3 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26          'invocation' ( temp highp uint)
+0:28      move second child to first child ( temp highp uint)
+0:28        direct index ( temp highp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                1 (const int)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:28        subgroupShuffle ( global highp uint)
+0:28          direct index ( temp highp uint)
+0:28            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                2 (const int)
+0:28            Constant:
+0:28              0 (const int)
+0:28          'invocation' ( temp highp uint)
+0:29      move second child to first child ( temp highp 2-component vector of uint)
+0:29        vector swizzle ( temp highp 2-component vector of uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              Constant:
+0:29                1 (const int)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Sequence
+0:29            Constant:
+0:29              0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29        subgroupShuffle ( global highp 2-component vector of uint)
+0:29          vector swizzle ( temp highp 2-component vector of uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                Constant:
+0:29                  1 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Sequence
+0:29              Constant:
+0:29                0 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29          'invocation' ( temp highp uint)
+0:30      move second child to first child ( temp highp 3-component vector of uint)
+0:30        vector swizzle ( temp highp 3-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              Constant:
+0:30                1 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30        subgroupShuffle ( global highp 3-component vector of uint)
+0:30          vector swizzle ( temp highp 3-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                Constant:
+0:30                  2 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30          'invocation' ( temp highp uint)
+0:31      move second child to first child ( temp highp 4-component vector of uint)
+0:31        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            Constant:
+0:31              1 (const int)
+0:31          Constant:
+0:31            2 (const int)
+0:31        subgroupShuffle ( global highp 4-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              Constant:
+0:31                3 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31          'invocation' ( temp highp uint)
+0:33      move second child to first child ( temp highp int)
+0:33        direct index ( temp highp int)
+0:33          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              Constant:
+0:33                1 (const int)
+0:33            Constant:
+0:33              1 (const int)
+0:33          Constant:
+0:33            0 (const int)
+0:33        Convert bool to int ( temp highp int)
+0:33          subgroupShuffle ( global bool, operation at highp)
+0:33            Compare Less Than ( temp bool)
+0:33              direct index ( temp highp int)
+0:33                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                    Constant:
+0:33                      0 (const int)
+0:33                  Constant:
+0:33                    1 (const int)
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                0 (const int)
+0:33            'invocation' ( temp highp uint)
+0:34      move second child to first child ( temp highp 2-component vector of int)
+0:34        vector swizzle ( temp highp 2-component vector of int)
+0:34          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              Constant:
+0:34                1 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34        Convert bool to int ( temp highp 2-component vector of int)
+0:34          subgroupShuffle ( global 2-component vector of bool, operation at highp)
+0:34            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:34              vector swizzle ( temp highp 2-component vector of int)
+0:34                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                    Constant:
+0:34                      1 (const int)
+0:34                  Constant:
+0:34                    1 (const int)
+0:34                Sequence
+0:34                  Constant:
+0:34                    0 (const int)
+0:34                  Constant:
+0:34                    1 (const int)
+0:34              Constant:
+0:34                0 (const int)
+0:34                0 (const int)
+0:34            'invocation' ( temp highp uint)
+0:35      move second child to first child ( temp highp 3-component vector of int)
+0:35        vector swizzle ( temp highp 3-component vector of int)
+0:35          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              Constant:
+0:35                1 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35            Constant:
+0:35              2 (const int)
+0:35        Convert bool to int ( temp highp 3-component vector of int)
+0:35          subgroupShuffle ( global 3-component vector of bool, operation at highp)
+0:35            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:35              vector swizzle ( temp highp 3-component vector of int)
+0:35                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                    Constant:
+0:35                      1 (const int)
+0:35                  Constant:
+0:35                    1 (const int)
+0:35                Sequence
+0:35                  Constant:
+0:35                    0 (const int)
+0:35                  Constant:
+0:35                    1 (const int)
+0:35                  Constant:
+0:35                    2 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35                0 (const int)
+0:35                0 (const int)
+0:35            'invocation' ( temp highp uint)
+0:36      move second child to first child ( temp highp 4-component vector of int)
+0:36        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            Constant:
+0:36              1 (const int)
+0:36          Constant:
+0:36            1 (const int)
+0:36        Convert bool to int ( temp highp 4-component vector of int)
+0:36          subgroupShuffle ( global 4-component vector of bool, operation at highp)
+0:36            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:36              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  Constant:
+0:36                    1 (const int)
+0:36                Constant:
+0:36                  1 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36                0 (const int)
+0:36                0 (const int)
+0:36                0 (const int)
+0:36            'invocation' ( temp highp uint)
+0:38      move second child to first child ( temp highp float)
+0:38        direct index ( temp highp float)
+0:38          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              Constant:
+0:38                2 (const int)
+0:38            Constant:
+0:38              0 (const int)
+0:38          Constant:
+0:38            0 (const int)
+0:38        subgroupShuffleXor ( global highp float)
+0:38          direct index ( temp highp float)
+0:38            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                0 (const int)
+0:38            Constant:
+0:38              0 (const int)
+0:38          'invocation' ( temp highp uint)
+0:39      move second child to first child ( temp highp 2-component vector of float)
+0:39        vector swizzle ( temp highp 2-component vector of float)
+0:39          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              Constant:
+0:39                2 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39          Sequence
+0:39            Constant:
+0:39              0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39        subgroupShuffleXor ( global highp 2-component vector of float)
+0:39          vector swizzle ( temp highp 2-component vector of float)
+0:39            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                Constant:
+0:39                  1 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            Sequence
+0:39              Constant:
+0:39                0 (const int)
+0:39              Constant:
+0:39                1 (const int)
+0:39          'invocation' ( temp highp uint)
+0:40      move second child to first child ( temp highp 3-component vector of float)
+0:40        vector swizzle ( temp highp 3-component vector of float)
+0:40          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              Constant:
+0:40                2 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40            Constant:
+0:40              2 (const int)
+0:40        subgroupShuffleXor ( global highp 3-component vector of float)
+0:40          vector swizzle ( temp highp 3-component vector of float)
+0:40            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                Constant:
+0:40                  2 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40            Sequence
+0:40              Constant:
+0:40                0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40              Constant:
+0:40                2 (const int)
+0:40          'invocation' ( temp highp uint)
+0:41      move second child to first child ( temp highp 4-component vector of float)
+0:41        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            Constant:
+0:41              2 (const int)
+0:41          Constant:
+0:41            0 (const int)
+0:41        subgroupShuffleXor ( global highp 4-component vector of float)
+0:41          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              Constant:
+0:41                3 (const int)
+0:41            Constant:
+0:41              0 (const int)
+0:41          'invocation' ( temp highp uint)
+0:43      move second child to first child ( temp highp int)
+0:43        direct index ( temp highp int)
+0:43          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              Constant:
+0:43                2 (const int)
+0:43            Constant:
+0:43              1 (const int)
+0:43          Constant:
+0:43            0 (const int)
+0:43        subgroupShuffleXor ( global highp int)
+0:43          direct index ( temp highp int)
+0:43            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                Constant:
+0:43                  0 (const int)
+0:43              Constant:
+0:43                1 (const int)
+0:43            Constant:
+0:43              0 (const int)
+0:43          'invocation' ( temp highp uint)
+0:44      move second child to first child ( temp highp 2-component vector of int)
+0:44        vector swizzle ( temp highp 2-component vector of int)
+0:44          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              Constant:
+0:44                2 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44          Sequence
+0:44            Constant:
+0:44              0 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44        subgroupShuffleXor ( global highp 2-component vector of int)
+0:44          vector swizzle ( temp highp 2-component vector of int)
+0:44            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                Constant:
+0:44                  1 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44            Sequence
+0:44              Constant:
+0:44                0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44          'invocation' ( temp highp uint)
+0:45      move second child to first child ( temp highp 3-component vector of int)
+0:45        vector swizzle ( temp highp 3-component vector of int)
+0:45          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45        subgroupShuffleXor ( global highp 3-component vector of int)
+0:45          vector swizzle ( temp highp 3-component vector of int)
+0:45            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                Constant:
+0:45                  2 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45          'invocation' ( temp highp uint)
+0:46      move second child to first child ( temp highp 4-component vector of int)
+0:46        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            Constant:
+0:46              2 (const int)
+0:46          Constant:
+0:46            1 (const int)
+0:46        subgroupShuffleXor ( global highp 4-component vector of int)
+0:46          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              Constant:
+0:46                3 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46          'invocation' ( temp highp uint)
+0:48      move second child to first child ( temp highp uint)
+0:48        direct index ( temp highp uint)
+0:48          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              Constant:
+0:48                3 (const int)
+0:48            Constant:
+0:48              2 (const int)
+0:48          Constant:
+0:48            0 (const int)
+0:48        subgroupShuffleXor ( global highp uint)
+0:48          direct index ( temp highp uint)
+0:48            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                Constant:
+0:48                  0 (const int)
+0:48              Constant:
+0:48                2 (const int)
+0:48            Constant:
+0:48              0 (const int)
+0:48          'invocation' ( temp highp uint)
+0:49      move second child to first child ( temp highp 2-component vector of uint)
+0:49        vector swizzle ( temp highp 2-component vector of uint)
+0:49          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              Constant:
+0:49                3 (const int)
+0:49            Constant:
+0:49              2 (const int)
+0:49          Sequence
+0:49            Constant:
+0:49              0 (const int)
+0:49            Constant:
+0:49              1 (const int)
+0:49        subgroupShuffleXor ( global highp 2-component vector of uint)
+0:49          vector swizzle ( temp highp 2-component vector of uint)
+0:49            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                Constant:
+0:49                  1 (const int)
+0:49              Constant:
+0:49                2 (const int)
+0:49            Sequence
+0:49              Constant:
+0:49                0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:49          'invocation' ( temp highp uint)
+0:50      move second child to first child ( temp highp 3-component vector of uint)
+0:50        vector swizzle ( temp highp 3-component vector of uint)
+0:50          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50        subgroupShuffleXor ( global highp 3-component vector of uint)
+0:50          vector swizzle ( temp highp 3-component vector of uint)
+0:50            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                Constant:
+0:50                  2 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50          'invocation' ( temp highp uint)
+0:51      move second child to first child ( temp highp 4-component vector of uint)
+0:51        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            Constant:
+0:51              3 (const int)
+0:51          Constant:
+0:51            2 (const int)
+0:51        subgroupShuffleXor ( global highp 4-component vector of uint)
+0:51          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              Constant:
+0:51                3 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:51          'invocation' ( temp highp uint)
+0:53      move second child to first child ( temp highp int)
+0:53        direct index ( temp highp int)
+0:53          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              Constant:
+0:53                3 (const int)
+0:53            Constant:
+0:53              1 (const int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        Convert bool to int ( temp highp int)
+0:53          subgroupShuffleXor ( global bool, operation at highp)
+0:53            Compare Less Than ( temp bool)
+0:53              direct index ( temp highp int)
+0:53                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                    Constant:
+0:53                      0 (const int)
+0:53                  Constant:
+0:53                    1 (const int)
+0:53                Constant:
+0:53                  0 (const int)
+0:53              Constant:
+0:53                0 (const int)
+0:53            'invocation' ( temp highp uint)
+0:54      move second child to first child ( temp highp 2-component vector of int)
+0:54        vector swizzle ( temp highp 2-component vector of int)
+0:54          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              Constant:
+0:54                3 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54          Sequence
+0:54            Constant:
+0:54              0 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54        Convert bool to int ( temp highp 2-component vector of int)
+0:54          subgroupShuffleXor ( global 2-component vector of bool, operation at highp)
+0:54            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:54              vector swizzle ( temp highp 2-component vector of int)
+0:54                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                    Constant:
+0:54                      1 (const int)
+0:54                  Constant:
+0:54                    1 (const int)
+0:54                Sequence
+0:54                  Constant:
+0:54                    0 (const int)
+0:54                  Constant:
+0:54                    1 (const int)
+0:54              Constant:
+0:54                0 (const int)
+0:54                0 (const int)
+0:54            'invocation' ( temp highp uint)
+0:55      move second child to first child ( temp highp 3-component vector of int)
+0:55        vector swizzle ( temp highp 3-component vector of int)
+0:55          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              Constant:
+0:55                3 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55            Constant:
+0:55              2 (const int)
+0:55        Convert bool to int ( temp highp 3-component vector of int)
+0:55          subgroupShuffleXor ( global 3-component vector of bool, operation at highp)
+0:55            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:55              vector swizzle ( temp highp 3-component vector of int)
+0:55                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                    Constant:
+0:55                      1 (const int)
+0:55                  Constant:
+0:55                    1 (const int)
+0:55                Sequence
+0:55                  Constant:
+0:55                    0 (const int)
+0:55                  Constant:
+0:55                    1 (const int)
+0:55                  Constant:
+0:55                    2 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55                0 (const int)
+0:55                0 (const int)
+0:55            'invocation' ( temp highp uint)
+0:56      move second child to first child ( temp highp 4-component vector of int)
+0:56        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            Constant:
+0:56              3 (const int)
+0:56          Constant:
+0:56            1 (const int)
+0:56        Convert bool to int ( temp highp 4-component vector of int)
+0:56          subgroupShuffleXor ( global 4-component vector of bool, operation at highp)
+0:56            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:56              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                  Constant:
+0:56                    1 (const int)
+0:56                Constant:
+0:56                  1 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:56                0 (const int)
+0:56                0 (const int)
+0:56                0 (const int)
+0:56            'invocation' ( temp highp uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_shuffle
+local_size = (8, 8, 1)
+0:? Sequence
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp highp uint)
+0:16          'invocation' ( temp highp uint)
+0:16          mod ( temp mediump uint)
+0:16            add ( temp mediump uint)
+0:16              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16            Constant:
+0:16              4 (const uint)
+0:18      move second child to first child ( temp highp float)
+0:18        direct index ( temp highp float)
+0:18          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          Constant:
+0:18            0 (const int)
+0:18        subgroupShuffle ( global highp float)
+0:18          direct index ( temp highp float)
+0:18            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                Constant:
+0:18                  0 (const int)
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          'invocation' ( temp highp uint)
+0:19      move second child to first child ( temp highp 2-component vector of float)
+0:19        vector swizzle ( temp highp 2-component vector of float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Sequence
+0:19            Constant:
+0:19              0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19        subgroupShuffle ( global highp 2-component vector of float)
+0:19          vector swizzle ( temp highp 2-component vector of float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                Constant:
+0:19                  1 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Sequence
+0:19              Constant:
+0:19                0 (const int)
+0:19              Constant:
+0:19                1 (const int)
+0:19          'invocation' ( temp highp uint)
+0:20      move second child to first child ( temp highp 3-component vector of float)
+0:20        vector swizzle ( temp highp 3-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              Constant:
+0:20                0 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20            Constant:
+0:20              2 (const int)
+0:20        subgroupShuffle ( global highp 3-component vector of float)
+0:20          vector swizzle ( temp highp 3-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                Constant:
+0:20                  2 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20              Constant:
+0:20                2 (const int)
+0:20          'invocation' ( temp highp uint)
+0:21      move second child to first child ( temp highp 4-component vector of float)
+0:21        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            0 (const int)
+0:21        subgroupShuffle ( global highp 4-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              Constant:
+0:21                3 (const int)
+0:21            Constant:
+0:21              0 (const int)
+0:21          'invocation' ( temp highp uint)
+0:23      move second child to first child ( temp highp int)
+0:23        direct index ( temp highp int)
+0:23          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              Constant:
+0:23                0 (const int)
+0:23            Constant:
+0:23              1 (const int)
+0:23          Constant:
+0:23            0 (const int)
+0:23        subgroupShuffle ( global highp int)
+0:23          direct index ( temp highp int)
+0:23            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                1 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:23          'invocation' ( temp highp uint)
+0:24      move second child to first child ( temp highp 2-component vector of int)
+0:24        vector swizzle ( temp highp 2-component vector of int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              Constant:
+0:24                0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Sequence
+0:24            Constant:
+0:24              0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24        subgroupShuffle ( global highp 2-component vector of int)
+0:24          vector swizzle ( temp highp 2-component vector of int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                Constant:
+0:24                  1 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Sequence
+0:24              Constant:
+0:24                0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24          'invocation' ( temp highp uint)
+0:25      move second child to first child ( temp highp 3-component vector of int)
+0:25        vector swizzle ( temp highp 3-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              Constant:
+0:25                0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25        subgroupShuffle ( global highp 3-component vector of int)
+0:25          vector swizzle ( temp highp 3-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                Constant:
+0:25                  2 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25          'invocation' ( temp highp uint)
+0:26      move second child to first child ( temp highp 4-component vector of int)
+0:26        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            Constant:
+0:26              0 (const int)
+0:26          Constant:
+0:26            1 (const int)
+0:26        subgroupShuffle ( global highp 4-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              Constant:
+0:26                3 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26          'invocation' ( temp highp uint)
+0:28      move second child to first child ( temp highp uint)
+0:28        direct index ( temp highp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                1 (const int)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:28        subgroupShuffle ( global highp uint)
+0:28          direct index ( temp highp uint)
+0:28            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                2 (const int)
+0:28            Constant:
+0:28              0 (const int)
+0:28          'invocation' ( temp highp uint)
+0:29      move second child to first child ( temp highp 2-component vector of uint)
+0:29        vector swizzle ( temp highp 2-component vector of uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              Constant:
+0:29                1 (const int)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Sequence
+0:29            Constant:
+0:29              0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29        subgroupShuffle ( global highp 2-component vector of uint)
+0:29          vector swizzle ( temp highp 2-component vector of uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                Constant:
+0:29                  1 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Sequence
+0:29              Constant:
+0:29                0 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29          'invocation' ( temp highp uint)
+0:30      move second child to first child ( temp highp 3-component vector of uint)
+0:30        vector swizzle ( temp highp 3-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              Constant:
+0:30                1 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30        subgroupShuffle ( global highp 3-component vector of uint)
+0:30          vector swizzle ( temp highp 3-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                Constant:
+0:30                  2 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30          'invocation' ( temp highp uint)
+0:31      move second child to first child ( temp highp 4-component vector of uint)
+0:31        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            Constant:
+0:31              1 (const int)
+0:31          Constant:
+0:31            2 (const int)
+0:31        subgroupShuffle ( global highp 4-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              Constant:
+0:31                3 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31          'invocation' ( temp highp uint)
+0:33      move second child to first child ( temp highp int)
+0:33        direct index ( temp highp int)
+0:33          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              Constant:
+0:33                1 (const int)
+0:33            Constant:
+0:33              1 (const int)
+0:33          Constant:
+0:33            0 (const int)
+0:33        Convert bool to int ( temp highp int)
+0:33          subgroupShuffle ( global bool, operation at highp)
+0:33            Compare Less Than ( temp bool)
+0:33              direct index ( temp highp int)
+0:33                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                    Constant:
+0:33                      0 (const int)
+0:33                  Constant:
+0:33                    1 (const int)
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                0 (const int)
+0:33            'invocation' ( temp highp uint)
+0:34      move second child to first child ( temp highp 2-component vector of int)
+0:34        vector swizzle ( temp highp 2-component vector of int)
+0:34          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              Constant:
+0:34                1 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34        Convert bool to int ( temp highp 2-component vector of int)
+0:34          subgroupShuffle ( global 2-component vector of bool, operation at highp)
+0:34            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:34              vector swizzle ( temp highp 2-component vector of int)
+0:34                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                    Constant:
+0:34                      1 (const int)
+0:34                  Constant:
+0:34                    1 (const int)
+0:34                Sequence
+0:34                  Constant:
+0:34                    0 (const int)
+0:34                  Constant:
+0:34                    1 (const int)
+0:34              Constant:
+0:34                0 (const int)
+0:34                0 (const int)
+0:34            'invocation' ( temp highp uint)
+0:35      move second child to first child ( temp highp 3-component vector of int)
+0:35        vector swizzle ( temp highp 3-component vector of int)
+0:35          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              Constant:
+0:35                1 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35            Constant:
+0:35              2 (const int)
+0:35        Convert bool to int ( temp highp 3-component vector of int)
+0:35          subgroupShuffle ( global 3-component vector of bool, operation at highp)
+0:35            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:35              vector swizzle ( temp highp 3-component vector of int)
+0:35                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                    Constant:
+0:35                      1 (const int)
+0:35                  Constant:
+0:35                    1 (const int)
+0:35                Sequence
+0:35                  Constant:
+0:35                    0 (const int)
+0:35                  Constant:
+0:35                    1 (const int)
+0:35                  Constant:
+0:35                    2 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35                0 (const int)
+0:35                0 (const int)
+0:35            'invocation' ( temp highp uint)
+0:36      move second child to first child ( temp highp 4-component vector of int)
+0:36        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            Constant:
+0:36              1 (const int)
+0:36          Constant:
+0:36            1 (const int)
+0:36        Convert bool to int ( temp highp 4-component vector of int)
+0:36          subgroupShuffle ( global 4-component vector of bool, operation at highp)
+0:36            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:36              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  Constant:
+0:36                    1 (const int)
+0:36                Constant:
+0:36                  1 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36                0 (const int)
+0:36                0 (const int)
+0:36                0 (const int)
+0:36            'invocation' ( temp highp uint)
+0:38      move second child to first child ( temp highp float)
+0:38        direct index ( temp highp float)
+0:38          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              Constant:
+0:38                2 (const int)
+0:38            Constant:
+0:38              0 (const int)
+0:38          Constant:
+0:38            0 (const int)
+0:38        subgroupShuffleXor ( global highp float)
+0:38          direct index ( temp highp float)
+0:38            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                0 (const int)
+0:38            Constant:
+0:38              0 (const int)
+0:38          'invocation' ( temp highp uint)
+0:39      move second child to first child ( temp highp 2-component vector of float)
+0:39        vector swizzle ( temp highp 2-component vector of float)
+0:39          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              Constant:
+0:39                2 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39          Sequence
+0:39            Constant:
+0:39              0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39        subgroupShuffleXor ( global highp 2-component vector of float)
+0:39          vector swizzle ( temp highp 2-component vector of float)
+0:39            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                Constant:
+0:39                  1 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            Sequence
+0:39              Constant:
+0:39                0 (const int)
+0:39              Constant:
+0:39                1 (const int)
+0:39          'invocation' ( temp highp uint)
+0:40      move second child to first child ( temp highp 3-component vector of float)
+0:40        vector swizzle ( temp highp 3-component vector of float)
+0:40          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              Constant:
+0:40                2 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40            Constant:
+0:40              2 (const int)
+0:40        subgroupShuffleXor ( global highp 3-component vector of float)
+0:40          vector swizzle ( temp highp 3-component vector of float)
+0:40            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                Constant:
+0:40                  2 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40            Sequence
+0:40              Constant:
+0:40                0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40              Constant:
+0:40                2 (const int)
+0:40          'invocation' ( temp highp uint)
+0:41      move second child to first child ( temp highp 4-component vector of float)
+0:41        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            Constant:
+0:41              2 (const int)
+0:41          Constant:
+0:41            0 (const int)
+0:41        subgroupShuffleXor ( global highp 4-component vector of float)
+0:41          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              Constant:
+0:41                3 (const int)
+0:41            Constant:
+0:41              0 (const int)
+0:41          'invocation' ( temp highp uint)
+0:43      move second child to first child ( temp highp int)
+0:43        direct index ( temp highp int)
+0:43          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              Constant:
+0:43                2 (const int)
+0:43            Constant:
+0:43              1 (const int)
+0:43          Constant:
+0:43            0 (const int)
+0:43        subgroupShuffleXor ( global highp int)
+0:43          direct index ( temp highp int)
+0:43            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                Constant:
+0:43                  0 (const int)
+0:43              Constant:
+0:43                1 (const int)
+0:43            Constant:
+0:43              0 (const int)
+0:43          'invocation' ( temp highp uint)
+0:44      move second child to first child ( temp highp 2-component vector of int)
+0:44        vector swizzle ( temp highp 2-component vector of int)
+0:44          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              Constant:
+0:44                2 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44          Sequence
+0:44            Constant:
+0:44              0 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44        subgroupShuffleXor ( global highp 2-component vector of int)
+0:44          vector swizzle ( temp highp 2-component vector of int)
+0:44            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                Constant:
+0:44                  1 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44            Sequence
+0:44              Constant:
+0:44                0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44          'invocation' ( temp highp uint)
+0:45      move second child to first child ( temp highp 3-component vector of int)
+0:45        vector swizzle ( temp highp 3-component vector of int)
+0:45          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45        subgroupShuffleXor ( global highp 3-component vector of int)
+0:45          vector swizzle ( temp highp 3-component vector of int)
+0:45            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                Constant:
+0:45                  2 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45          'invocation' ( temp highp uint)
+0:46      move second child to first child ( temp highp 4-component vector of int)
+0:46        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            Constant:
+0:46              2 (const int)
+0:46          Constant:
+0:46            1 (const int)
+0:46        subgroupShuffleXor ( global highp 4-component vector of int)
+0:46          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              Constant:
+0:46                3 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46          'invocation' ( temp highp uint)
+0:48      move second child to first child ( temp highp uint)
+0:48        direct index ( temp highp uint)
+0:48          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              Constant:
+0:48                3 (const int)
+0:48            Constant:
+0:48              2 (const int)
+0:48          Constant:
+0:48            0 (const int)
+0:48        subgroupShuffleXor ( global highp uint)
+0:48          direct index ( temp highp uint)
+0:48            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                Constant:
+0:48                  0 (const int)
+0:48              Constant:
+0:48                2 (const int)
+0:48            Constant:
+0:48              0 (const int)
+0:48          'invocation' ( temp highp uint)
+0:49      move second child to first child ( temp highp 2-component vector of uint)
+0:49        vector swizzle ( temp highp 2-component vector of uint)
+0:49          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              Constant:
+0:49                3 (const int)
+0:49            Constant:
+0:49              2 (const int)
+0:49          Sequence
+0:49            Constant:
+0:49              0 (const int)
+0:49            Constant:
+0:49              1 (const int)
+0:49        subgroupShuffleXor ( global highp 2-component vector of uint)
+0:49          vector swizzle ( temp highp 2-component vector of uint)
+0:49            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                Constant:
+0:49                  1 (const int)
+0:49              Constant:
+0:49                2 (const int)
+0:49            Sequence
+0:49              Constant:
+0:49                0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:49          'invocation' ( temp highp uint)
+0:50      move second child to first child ( temp highp 3-component vector of uint)
+0:50        vector swizzle ( temp highp 3-component vector of uint)
+0:50          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50        subgroupShuffleXor ( global highp 3-component vector of uint)
+0:50          vector swizzle ( temp highp 3-component vector of uint)
+0:50            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                Constant:
+0:50                  2 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50          'invocation' ( temp highp uint)
+0:51      move second child to first child ( temp highp 4-component vector of uint)
+0:51        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            Constant:
+0:51              3 (const int)
+0:51          Constant:
+0:51            2 (const int)
+0:51        subgroupShuffleXor ( global highp 4-component vector of uint)
+0:51          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              Constant:
+0:51                3 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:51          'invocation' ( temp highp uint)
+0:53      move second child to first child ( temp highp int)
+0:53        direct index ( temp highp int)
+0:53          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              Constant:
+0:53                3 (const int)
+0:53            Constant:
+0:53              1 (const int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        Convert bool to int ( temp highp int)
+0:53          subgroupShuffleXor ( global bool, operation at highp)
+0:53            Compare Less Than ( temp bool)
+0:53              direct index ( temp highp int)
+0:53                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                    Constant:
+0:53                      0 (const int)
+0:53                  Constant:
+0:53                    1 (const int)
+0:53                Constant:
+0:53                  0 (const int)
+0:53              Constant:
+0:53                0 (const int)
+0:53            'invocation' ( temp highp uint)
+0:54      move second child to first child ( temp highp 2-component vector of int)
+0:54        vector swizzle ( temp highp 2-component vector of int)
+0:54          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              Constant:
+0:54                3 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54          Sequence
+0:54            Constant:
+0:54              0 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54        Convert bool to int ( temp highp 2-component vector of int)
+0:54          subgroupShuffleXor ( global 2-component vector of bool, operation at highp)
+0:54            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:54              vector swizzle ( temp highp 2-component vector of int)
+0:54                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                    Constant:
+0:54                      1 (const int)
+0:54                  Constant:
+0:54                    1 (const int)
+0:54                Sequence
+0:54                  Constant:
+0:54                    0 (const int)
+0:54                  Constant:
+0:54                    1 (const int)
+0:54              Constant:
+0:54                0 (const int)
+0:54                0 (const int)
+0:54            'invocation' ( temp highp uint)
+0:55      move second child to first child ( temp highp 3-component vector of int)
+0:55        vector swizzle ( temp highp 3-component vector of int)
+0:55          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              Constant:
+0:55                3 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55            Constant:
+0:55              2 (const int)
+0:55        Convert bool to int ( temp highp 3-component vector of int)
+0:55          subgroupShuffleXor ( global 3-component vector of bool, operation at highp)
+0:55            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:55              vector swizzle ( temp highp 3-component vector of int)
+0:55                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                    Constant:
+0:55                      1 (const int)
+0:55                  Constant:
+0:55                    1 (const int)
+0:55                Sequence
+0:55                  Constant:
+0:55                    0 (const int)
+0:55                  Constant:
+0:55                    1 (const int)
+0:55                  Constant:
+0:55                    2 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55                0 (const int)
+0:55                0 (const int)
+0:55            'invocation' ( temp highp uint)
+0:56      move second child to first child ( temp highp 4-component vector of int)
+0:56        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            Constant:
+0:56              3 (const int)
+0:56          Constant:
+0:56            1 (const int)
+0:56        Convert bool to int ( temp highp 4-component vector of int)
+0:56          subgroupShuffleXor ( global 4-component vector of bool, operation at highp)
+0:56            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:56              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                  Constant:
+0:56                    1 (const int)
+0:56                Constant:
+0:56                  1 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:56                0 (const int)
+0:56                0 (const int)
+0:56                0 (const int)
+0:56            'invocation' ( temp highp uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
diff --git a/Test/baseResults/glsl.es320.subgroupShuffleRelative.comp.out b/Test/baseResults/glsl.es320.subgroupShuffleRelative.comp.out
new file mode 100644
index 0000000..421e3bb
--- /dev/null
+++ b/Test/baseResults/glsl.es320.subgroupShuffleRelative.comp.out
@@ -0,0 +1,1773 @@
+glsl.es320.subgroupShuffleRelative.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_shuffle_relative
+local_size = (8, 8, 1)
+0:? Sequence
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp highp uint)
+0:16          'invocation' ( temp highp uint)
+0:16          mod ( temp mediump uint)
+0:16            add ( temp mediump uint)
+0:16              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16            Constant:
+0:16              4 (const uint)
+0:18      move second child to first child ( temp highp float)
+0:18        direct index ( temp highp float)
+0:18          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          Constant:
+0:18            0 (const int)
+0:18        subgroupShuffleUp ( global highp float)
+0:18          direct index ( temp highp float)
+0:18            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                Constant:
+0:18                  0 (const int)
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          'invocation' ( temp highp uint)
+0:19      move second child to first child ( temp highp 2-component vector of float)
+0:19        vector swizzle ( temp highp 2-component vector of float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Sequence
+0:19            Constant:
+0:19              0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19        subgroupShuffleUp ( global highp 2-component vector of float)
+0:19          vector swizzle ( temp highp 2-component vector of float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                Constant:
+0:19                  1 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Sequence
+0:19              Constant:
+0:19                0 (const int)
+0:19              Constant:
+0:19                1 (const int)
+0:19          'invocation' ( temp highp uint)
+0:20      move second child to first child ( temp highp 3-component vector of float)
+0:20        vector swizzle ( temp highp 3-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              Constant:
+0:20                0 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20            Constant:
+0:20              2 (const int)
+0:20        subgroupShuffleUp ( global highp 3-component vector of float)
+0:20          vector swizzle ( temp highp 3-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                Constant:
+0:20                  2 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20              Constant:
+0:20                2 (const int)
+0:20          'invocation' ( temp highp uint)
+0:21      move second child to first child ( temp highp 4-component vector of float)
+0:21        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            0 (const int)
+0:21        subgroupShuffleUp ( global highp 4-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              Constant:
+0:21                3 (const int)
+0:21            Constant:
+0:21              0 (const int)
+0:21          'invocation' ( temp highp uint)
+0:23      move second child to first child ( temp highp int)
+0:23        direct index ( temp highp int)
+0:23          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              Constant:
+0:23                0 (const int)
+0:23            Constant:
+0:23              1 (const int)
+0:23          Constant:
+0:23            0 (const int)
+0:23        subgroupShuffleUp ( global highp int)
+0:23          direct index ( temp highp int)
+0:23            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                1 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:23          'invocation' ( temp highp uint)
+0:24      move second child to first child ( temp highp 2-component vector of int)
+0:24        vector swizzle ( temp highp 2-component vector of int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              Constant:
+0:24                0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Sequence
+0:24            Constant:
+0:24              0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24        subgroupShuffleUp ( global highp 2-component vector of int)
+0:24          vector swizzle ( temp highp 2-component vector of int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                Constant:
+0:24                  1 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Sequence
+0:24              Constant:
+0:24                0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24          'invocation' ( temp highp uint)
+0:25      move second child to first child ( temp highp 3-component vector of int)
+0:25        vector swizzle ( temp highp 3-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              Constant:
+0:25                0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25        subgroupShuffleUp ( global highp 3-component vector of int)
+0:25          vector swizzle ( temp highp 3-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                Constant:
+0:25                  2 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25          'invocation' ( temp highp uint)
+0:26      move second child to first child ( temp highp 4-component vector of int)
+0:26        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            Constant:
+0:26              0 (const int)
+0:26          Constant:
+0:26            1 (const int)
+0:26        subgroupShuffleUp ( global highp 4-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              Constant:
+0:26                3 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26          'invocation' ( temp highp uint)
+0:28      move second child to first child ( temp highp uint)
+0:28        direct index ( temp highp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                1 (const int)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:28        subgroupShuffleUp ( global highp uint)
+0:28          direct index ( temp highp uint)
+0:28            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                2 (const int)
+0:28            Constant:
+0:28              0 (const int)
+0:28          'invocation' ( temp highp uint)
+0:29      move second child to first child ( temp highp 2-component vector of uint)
+0:29        vector swizzle ( temp highp 2-component vector of uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              Constant:
+0:29                1 (const int)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Sequence
+0:29            Constant:
+0:29              0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29        subgroupShuffleUp ( global highp 2-component vector of uint)
+0:29          vector swizzle ( temp highp 2-component vector of uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                Constant:
+0:29                  1 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Sequence
+0:29              Constant:
+0:29                0 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29          'invocation' ( temp highp uint)
+0:30      move second child to first child ( temp highp 3-component vector of uint)
+0:30        vector swizzle ( temp highp 3-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              Constant:
+0:30                1 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30        subgroupShuffleUp ( global highp 3-component vector of uint)
+0:30          vector swizzle ( temp highp 3-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                Constant:
+0:30                  2 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30          'invocation' ( temp highp uint)
+0:31      move second child to first child ( temp highp 4-component vector of uint)
+0:31        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            Constant:
+0:31              1 (const int)
+0:31          Constant:
+0:31            2 (const int)
+0:31        subgroupShuffleUp ( global highp 4-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              Constant:
+0:31                3 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31          'invocation' ( temp highp uint)
+0:33      move second child to first child ( temp highp int)
+0:33        direct index ( temp highp int)
+0:33          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              Constant:
+0:33                1 (const int)
+0:33            Constant:
+0:33              1 (const int)
+0:33          Constant:
+0:33            0 (const int)
+0:33        Convert bool to int ( temp highp int)
+0:33          subgroupShuffleUp ( global bool, operation at highp)
+0:33            Compare Less Than ( temp bool)
+0:33              direct index ( temp highp int)
+0:33                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                    Constant:
+0:33                      0 (const int)
+0:33                  Constant:
+0:33                    1 (const int)
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                0 (const int)
+0:33            'invocation' ( temp highp uint)
+0:34      move second child to first child ( temp highp 2-component vector of int)
+0:34        vector swizzle ( temp highp 2-component vector of int)
+0:34          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              Constant:
+0:34                1 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34        Convert bool to int ( temp highp 2-component vector of int)
+0:34          subgroupShuffleUp ( global 2-component vector of bool, operation at highp)
+0:34            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:34              vector swizzle ( temp highp 2-component vector of int)
+0:34                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                    Constant:
+0:34                      1 (const int)
+0:34                  Constant:
+0:34                    1 (const int)
+0:34                Sequence
+0:34                  Constant:
+0:34                    0 (const int)
+0:34                  Constant:
+0:34                    1 (const int)
+0:34              Constant:
+0:34                0 (const int)
+0:34                0 (const int)
+0:34            'invocation' ( temp highp uint)
+0:35      move second child to first child ( temp highp 3-component vector of int)
+0:35        vector swizzle ( temp highp 3-component vector of int)
+0:35          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              Constant:
+0:35                1 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35            Constant:
+0:35              2 (const int)
+0:35        Convert bool to int ( temp highp 3-component vector of int)
+0:35          subgroupShuffleUp ( global 3-component vector of bool, operation at highp)
+0:35            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:35              vector swizzle ( temp highp 3-component vector of int)
+0:35                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                    Constant:
+0:35                      1 (const int)
+0:35                  Constant:
+0:35                    1 (const int)
+0:35                Sequence
+0:35                  Constant:
+0:35                    0 (const int)
+0:35                  Constant:
+0:35                    1 (const int)
+0:35                  Constant:
+0:35                    2 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35                0 (const int)
+0:35                0 (const int)
+0:35            'invocation' ( temp highp uint)
+0:36      move second child to first child ( temp highp 4-component vector of int)
+0:36        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            Constant:
+0:36              1 (const int)
+0:36          Constant:
+0:36            1 (const int)
+0:36        Convert bool to int ( temp highp 4-component vector of int)
+0:36          subgroupShuffleUp ( global 4-component vector of bool, operation at highp)
+0:36            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:36              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  Constant:
+0:36                    1 (const int)
+0:36                Constant:
+0:36                  1 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36                0 (const int)
+0:36                0 (const int)
+0:36                0 (const int)
+0:36            'invocation' ( temp highp uint)
+0:38      move second child to first child ( temp highp float)
+0:38        direct index ( temp highp float)
+0:38          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              Constant:
+0:38                2 (const int)
+0:38            Constant:
+0:38              0 (const int)
+0:38          Constant:
+0:38            0 (const int)
+0:38        subgroupShuffleDown ( global highp float)
+0:38          direct index ( temp highp float)
+0:38            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                0 (const int)
+0:38            Constant:
+0:38              0 (const int)
+0:38          'invocation' ( temp highp uint)
+0:39      move second child to first child ( temp highp 2-component vector of float)
+0:39        vector swizzle ( temp highp 2-component vector of float)
+0:39          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              Constant:
+0:39                2 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39          Sequence
+0:39            Constant:
+0:39              0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39        subgroupShuffleDown ( global highp 2-component vector of float)
+0:39          vector swizzle ( temp highp 2-component vector of float)
+0:39            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                Constant:
+0:39                  1 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            Sequence
+0:39              Constant:
+0:39                0 (const int)
+0:39              Constant:
+0:39                1 (const int)
+0:39          'invocation' ( temp highp uint)
+0:40      move second child to first child ( temp highp 3-component vector of float)
+0:40        vector swizzle ( temp highp 3-component vector of float)
+0:40          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              Constant:
+0:40                2 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40            Constant:
+0:40              2 (const int)
+0:40        subgroupShuffleDown ( global highp 3-component vector of float)
+0:40          vector swizzle ( temp highp 3-component vector of float)
+0:40            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                Constant:
+0:40                  2 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40            Sequence
+0:40              Constant:
+0:40                0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40              Constant:
+0:40                2 (const int)
+0:40          'invocation' ( temp highp uint)
+0:41      move second child to first child ( temp highp 4-component vector of float)
+0:41        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            Constant:
+0:41              2 (const int)
+0:41          Constant:
+0:41            0 (const int)
+0:41        subgroupShuffleDown ( global highp 4-component vector of float)
+0:41          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              Constant:
+0:41                3 (const int)
+0:41            Constant:
+0:41              0 (const int)
+0:41          'invocation' ( temp highp uint)
+0:43      move second child to first child ( temp highp int)
+0:43        direct index ( temp highp int)
+0:43          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              Constant:
+0:43                2 (const int)
+0:43            Constant:
+0:43              1 (const int)
+0:43          Constant:
+0:43            0 (const int)
+0:43        subgroupShuffleDown ( global highp int)
+0:43          direct index ( temp highp int)
+0:43            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                Constant:
+0:43                  0 (const int)
+0:43              Constant:
+0:43                1 (const int)
+0:43            Constant:
+0:43              0 (const int)
+0:43          'invocation' ( temp highp uint)
+0:44      move second child to first child ( temp highp 2-component vector of int)
+0:44        vector swizzle ( temp highp 2-component vector of int)
+0:44          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              Constant:
+0:44                2 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44          Sequence
+0:44            Constant:
+0:44              0 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44        subgroupShuffleDown ( global highp 2-component vector of int)
+0:44          vector swizzle ( temp highp 2-component vector of int)
+0:44            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                Constant:
+0:44                  1 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44            Sequence
+0:44              Constant:
+0:44                0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44          'invocation' ( temp highp uint)
+0:45      move second child to first child ( temp highp 3-component vector of int)
+0:45        vector swizzle ( temp highp 3-component vector of int)
+0:45          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45        subgroupShuffleDown ( global highp 3-component vector of int)
+0:45          vector swizzle ( temp highp 3-component vector of int)
+0:45            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                Constant:
+0:45                  2 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45          'invocation' ( temp highp uint)
+0:46      move second child to first child ( temp highp 4-component vector of int)
+0:46        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            Constant:
+0:46              2 (const int)
+0:46          Constant:
+0:46            1 (const int)
+0:46        subgroupShuffleDown ( global highp 4-component vector of int)
+0:46          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              Constant:
+0:46                3 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46          'invocation' ( temp highp uint)
+0:48      move second child to first child ( temp highp uint)
+0:48        direct index ( temp highp uint)
+0:48          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              Constant:
+0:48                3 (const int)
+0:48            Constant:
+0:48              2 (const int)
+0:48          Constant:
+0:48            0 (const int)
+0:48        subgroupShuffleDown ( global highp uint)
+0:48          direct index ( temp highp uint)
+0:48            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                Constant:
+0:48                  0 (const int)
+0:48              Constant:
+0:48                2 (const int)
+0:48            Constant:
+0:48              0 (const int)
+0:48          'invocation' ( temp highp uint)
+0:49      move second child to first child ( temp highp 2-component vector of uint)
+0:49        vector swizzle ( temp highp 2-component vector of uint)
+0:49          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              Constant:
+0:49                3 (const int)
+0:49            Constant:
+0:49              2 (const int)
+0:49          Sequence
+0:49            Constant:
+0:49              0 (const int)
+0:49            Constant:
+0:49              1 (const int)
+0:49        subgroupShuffleDown ( global highp 2-component vector of uint)
+0:49          vector swizzle ( temp highp 2-component vector of uint)
+0:49            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                Constant:
+0:49                  1 (const int)
+0:49              Constant:
+0:49                2 (const int)
+0:49            Sequence
+0:49              Constant:
+0:49                0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:49          'invocation' ( temp highp uint)
+0:50      move second child to first child ( temp highp 3-component vector of uint)
+0:50        vector swizzle ( temp highp 3-component vector of uint)
+0:50          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50        subgroupShuffleDown ( global highp 3-component vector of uint)
+0:50          vector swizzle ( temp highp 3-component vector of uint)
+0:50            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                Constant:
+0:50                  2 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50          'invocation' ( temp highp uint)
+0:51      move second child to first child ( temp highp 4-component vector of uint)
+0:51        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            Constant:
+0:51              3 (const int)
+0:51          Constant:
+0:51            2 (const int)
+0:51        subgroupShuffleDown ( global highp 4-component vector of uint)
+0:51          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              Constant:
+0:51                3 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:51          'invocation' ( temp highp uint)
+0:53      move second child to first child ( temp highp int)
+0:53        direct index ( temp highp int)
+0:53          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              Constant:
+0:53                3 (const int)
+0:53            Constant:
+0:53              1 (const int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        Convert bool to int ( temp highp int)
+0:53          subgroupShuffleDown ( global bool, operation at highp)
+0:53            Compare Less Than ( temp bool)
+0:53              direct index ( temp highp int)
+0:53                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                    Constant:
+0:53                      0 (const int)
+0:53                  Constant:
+0:53                    1 (const int)
+0:53                Constant:
+0:53                  0 (const int)
+0:53              Constant:
+0:53                0 (const int)
+0:53            'invocation' ( temp highp uint)
+0:54      move second child to first child ( temp highp 2-component vector of int)
+0:54        vector swizzle ( temp highp 2-component vector of int)
+0:54          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              Constant:
+0:54                3 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54          Sequence
+0:54            Constant:
+0:54              0 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54        Convert bool to int ( temp highp 2-component vector of int)
+0:54          subgroupShuffleDown ( global 2-component vector of bool, operation at highp)
+0:54            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:54              vector swizzle ( temp highp 2-component vector of int)
+0:54                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                    Constant:
+0:54                      1 (const int)
+0:54                  Constant:
+0:54                    1 (const int)
+0:54                Sequence
+0:54                  Constant:
+0:54                    0 (const int)
+0:54                  Constant:
+0:54                    1 (const int)
+0:54              Constant:
+0:54                0 (const int)
+0:54                0 (const int)
+0:54            'invocation' ( temp highp uint)
+0:55      move second child to first child ( temp highp 3-component vector of int)
+0:55        vector swizzle ( temp highp 3-component vector of int)
+0:55          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              Constant:
+0:55                3 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55            Constant:
+0:55              2 (const int)
+0:55        Convert bool to int ( temp highp 3-component vector of int)
+0:55          subgroupShuffleDown ( global 3-component vector of bool, operation at highp)
+0:55            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:55              vector swizzle ( temp highp 3-component vector of int)
+0:55                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                    Constant:
+0:55                      1 (const int)
+0:55                  Constant:
+0:55                    1 (const int)
+0:55                Sequence
+0:55                  Constant:
+0:55                    0 (const int)
+0:55                  Constant:
+0:55                    1 (const int)
+0:55                  Constant:
+0:55                    2 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55                0 (const int)
+0:55                0 (const int)
+0:55            'invocation' ( temp highp uint)
+0:56      move second child to first child ( temp highp 4-component vector of int)
+0:56        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            Constant:
+0:56              3 (const int)
+0:56          Constant:
+0:56            1 (const int)
+0:56        Convert bool to int ( temp highp 4-component vector of int)
+0:56          subgroupShuffleDown ( global 4-component vector of bool, operation at highp)
+0:56            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:56              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                  Constant:
+0:56                    1 (const int)
+0:56                Constant:
+0:56                  1 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:56                0 (const int)
+0:56                0 (const int)
+0:56                0 (const int)
+0:56            'invocation' ( temp highp uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_shuffle_relative
+local_size = (8, 8, 1)
+0:? Sequence
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      Sequence
+0:16        move second child to first child ( temp highp uint)
+0:16          'invocation' ( temp highp uint)
+0:16          mod ( temp mediump uint)
+0:16            add ( temp mediump uint)
+0:16              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:16              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:16            Constant:
+0:16              4 (const uint)
+0:18      move second child to first child ( temp highp float)
+0:18        direct index ( temp highp float)
+0:18          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          Constant:
+0:18            0 (const int)
+0:18        subgroupShuffleUp ( global highp float)
+0:18          direct index ( temp highp float)
+0:18            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:18              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:18                Constant:
+0:18                  0 (const int)
+0:18              Constant:
+0:18                0 (const int)
+0:18            Constant:
+0:18              0 (const int)
+0:18          'invocation' ( temp highp uint)
+0:19      move second child to first child ( temp highp 2-component vector of float)
+0:19        vector swizzle ( temp highp 2-component vector of float)
+0:19          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19              Constant:
+0:19                0 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19          Sequence
+0:19            Constant:
+0:19              0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19        subgroupShuffleUp ( global highp 2-component vector of float)
+0:19          vector swizzle ( temp highp 2-component vector of float)
+0:19            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:19                Constant:
+0:19                  1 (const int)
+0:19              Constant:
+0:19                0 (const int)
+0:19            Sequence
+0:19              Constant:
+0:19                0 (const int)
+0:19              Constant:
+0:19                1 (const int)
+0:19          'invocation' ( temp highp uint)
+0:20      move second child to first child ( temp highp 3-component vector of float)
+0:20        vector swizzle ( temp highp 3-component vector of float)
+0:20          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20              Constant:
+0:20                0 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Sequence
+0:20            Constant:
+0:20              0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20            Constant:
+0:20              2 (const int)
+0:20        subgroupShuffleUp ( global highp 3-component vector of float)
+0:20          vector swizzle ( temp highp 3-component vector of float)
+0:20            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:20              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:20                Constant:
+0:20                  2 (const int)
+0:20              Constant:
+0:20                0 (const int)
+0:20            Sequence
+0:20              Constant:
+0:20                0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20              Constant:
+0:20                2 (const int)
+0:20          'invocation' ( temp highp uint)
+0:21      move second child to first child ( temp highp 4-component vector of float)
+0:21        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            0 (const int)
+0:21        subgroupShuffleUp ( global highp 4-component vector of float)
+0:21          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:21              Constant:
+0:21                3 (const int)
+0:21            Constant:
+0:21              0 (const int)
+0:21          'invocation' ( temp highp uint)
+0:23      move second child to first child ( temp highp int)
+0:23        direct index ( temp highp int)
+0:23          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              Constant:
+0:23                0 (const int)
+0:23            Constant:
+0:23              1 (const int)
+0:23          Constant:
+0:23            0 (const int)
+0:23        subgroupShuffleUp ( global highp int)
+0:23          direct index ( temp highp int)
+0:23            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                1 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:23          'invocation' ( temp highp uint)
+0:24      move second child to first child ( temp highp 2-component vector of int)
+0:24        vector swizzle ( temp highp 2-component vector of int)
+0:24          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              Constant:
+0:24                0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24          Sequence
+0:24            Constant:
+0:24              0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24        subgroupShuffleUp ( global highp 2-component vector of int)
+0:24          vector swizzle ( temp highp 2-component vector of int)
+0:24            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                Constant:
+0:24                  1 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24            Sequence
+0:24              Constant:
+0:24                0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24          'invocation' ( temp highp uint)
+0:25      move second child to first child ( temp highp 3-component vector of int)
+0:25        vector swizzle ( temp highp 3-component vector of int)
+0:25          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              Constant:
+0:25                0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25        subgroupShuffleUp ( global highp 3-component vector of int)
+0:25          vector swizzle ( temp highp 3-component vector of int)
+0:25            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                Constant:
+0:25                  2 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25          'invocation' ( temp highp uint)
+0:26      move second child to first child ( temp highp 4-component vector of int)
+0:26        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            Constant:
+0:26              0 (const int)
+0:26          Constant:
+0:26            1 (const int)
+0:26        subgroupShuffleUp ( global highp 4-component vector of int)
+0:26          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              Constant:
+0:26                3 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26          'invocation' ( temp highp uint)
+0:28      move second child to first child ( temp highp uint)
+0:28        direct index ( temp highp uint)
+0:28          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                1 (const int)
+0:28            Constant:
+0:28              2 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:28        subgroupShuffleUp ( global highp uint)
+0:28          direct index ( temp highp uint)
+0:28            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                2 (const int)
+0:28            Constant:
+0:28              0 (const int)
+0:28          'invocation' ( temp highp uint)
+0:29      move second child to first child ( temp highp 2-component vector of uint)
+0:29        vector swizzle ( temp highp 2-component vector of uint)
+0:29          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              Constant:
+0:29                1 (const int)
+0:29            Constant:
+0:29              2 (const int)
+0:29          Sequence
+0:29            Constant:
+0:29              0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29        subgroupShuffleUp ( global highp 2-component vector of uint)
+0:29          vector swizzle ( temp highp 2-component vector of uint)
+0:29            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                Constant:
+0:29                  1 (const int)
+0:29              Constant:
+0:29                2 (const int)
+0:29            Sequence
+0:29              Constant:
+0:29                0 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29          'invocation' ( temp highp uint)
+0:30      move second child to first child ( temp highp 3-component vector of uint)
+0:30        vector swizzle ( temp highp 3-component vector of uint)
+0:30          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              Constant:
+0:30                1 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30        subgroupShuffleUp ( global highp 3-component vector of uint)
+0:30          vector swizzle ( temp highp 3-component vector of uint)
+0:30            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                Constant:
+0:30                  2 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30          'invocation' ( temp highp uint)
+0:31      move second child to first child ( temp highp 4-component vector of uint)
+0:31        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            Constant:
+0:31              1 (const int)
+0:31          Constant:
+0:31            2 (const int)
+0:31        subgroupShuffleUp ( global highp 4-component vector of uint)
+0:31          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              Constant:
+0:31                3 (const int)
+0:31            Constant:
+0:31              2 (const int)
+0:31          'invocation' ( temp highp uint)
+0:33      move second child to first child ( temp highp int)
+0:33        direct index ( temp highp int)
+0:33          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              Constant:
+0:33                1 (const int)
+0:33            Constant:
+0:33              1 (const int)
+0:33          Constant:
+0:33            0 (const int)
+0:33        Convert bool to int ( temp highp int)
+0:33          subgroupShuffleUp ( global bool, operation at highp)
+0:33            Compare Less Than ( temp bool)
+0:33              direct index ( temp highp int)
+0:33                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:33                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                    Constant:
+0:33                      0 (const int)
+0:33                  Constant:
+0:33                    1 (const int)
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                0 (const int)
+0:33            'invocation' ( temp highp uint)
+0:34      move second child to first child ( temp highp 2-component vector of int)
+0:34        vector swizzle ( temp highp 2-component vector of int)
+0:34          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              Constant:
+0:34                1 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34        Convert bool to int ( temp highp 2-component vector of int)
+0:34          subgroupShuffleUp ( global 2-component vector of bool, operation at highp)
+0:34            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:34              vector swizzle ( temp highp 2-component vector of int)
+0:34                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:34                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                    Constant:
+0:34                      1 (const int)
+0:34                  Constant:
+0:34                    1 (const int)
+0:34                Sequence
+0:34                  Constant:
+0:34                    0 (const int)
+0:34                  Constant:
+0:34                    1 (const int)
+0:34              Constant:
+0:34                0 (const int)
+0:34                0 (const int)
+0:34            'invocation' ( temp highp uint)
+0:35      move second child to first child ( temp highp 3-component vector of int)
+0:35        vector swizzle ( temp highp 3-component vector of int)
+0:35          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              Constant:
+0:35                1 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35            Constant:
+0:35              2 (const int)
+0:35        Convert bool to int ( temp highp 3-component vector of int)
+0:35          subgroupShuffleUp ( global 3-component vector of bool, operation at highp)
+0:35            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:35              vector swizzle ( temp highp 3-component vector of int)
+0:35                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:35                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                    Constant:
+0:35                      1 (const int)
+0:35                  Constant:
+0:35                    1 (const int)
+0:35                Sequence
+0:35                  Constant:
+0:35                    0 (const int)
+0:35                  Constant:
+0:35                    1 (const int)
+0:35                  Constant:
+0:35                    2 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35                0 (const int)
+0:35                0 (const int)
+0:35            'invocation' ( temp highp uint)
+0:36      move second child to first child ( temp highp 4-component vector of int)
+0:36        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            Constant:
+0:36              1 (const int)
+0:36          Constant:
+0:36            1 (const int)
+0:36        Convert bool to int ( temp highp 4-component vector of int)
+0:36          subgroupShuffleUp ( global 4-component vector of bool, operation at highp)
+0:36            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:36              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:36                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36                  Constant:
+0:36                    1 (const int)
+0:36                Constant:
+0:36                  1 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36                0 (const int)
+0:36                0 (const int)
+0:36                0 (const int)
+0:36            'invocation' ( temp highp uint)
+0:38      move second child to first child ( temp highp float)
+0:38        direct index ( temp highp float)
+0:38          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              Constant:
+0:38                2 (const int)
+0:38            Constant:
+0:38              0 (const int)
+0:38          Constant:
+0:38            0 (const int)
+0:38        subgroupShuffleDown ( global highp float)
+0:38          direct index ( temp highp float)
+0:38            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:38              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                0 (const int)
+0:38            Constant:
+0:38              0 (const int)
+0:38          'invocation' ( temp highp uint)
+0:39      move second child to first child ( temp highp 2-component vector of float)
+0:39        vector swizzle ( temp highp 2-component vector of float)
+0:39          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              Constant:
+0:39                2 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39          Sequence
+0:39            Constant:
+0:39              0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39        subgroupShuffleDown ( global highp 2-component vector of float)
+0:39          vector swizzle ( temp highp 2-component vector of float)
+0:39            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:39              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                Constant:
+0:39                  1 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39            Sequence
+0:39              Constant:
+0:39                0 (const int)
+0:39              Constant:
+0:39                1 (const int)
+0:39          'invocation' ( temp highp uint)
+0:40      move second child to first child ( temp highp 3-component vector of float)
+0:40        vector swizzle ( temp highp 3-component vector of float)
+0:40          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              Constant:
+0:40                2 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40            Constant:
+0:40              2 (const int)
+0:40        subgroupShuffleDown ( global highp 3-component vector of float)
+0:40          vector swizzle ( temp highp 3-component vector of float)
+0:40            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                Constant:
+0:40                  2 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40            Sequence
+0:40              Constant:
+0:40                0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40              Constant:
+0:40                2 (const int)
+0:40          'invocation' ( temp highp uint)
+0:41      move second child to first child ( temp highp 4-component vector of float)
+0:41        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            Constant:
+0:41              2 (const int)
+0:41          Constant:
+0:41            0 (const int)
+0:41        subgroupShuffleDown ( global highp 4-component vector of float)
+0:41          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:41            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41              Constant:
+0:41                3 (const int)
+0:41            Constant:
+0:41              0 (const int)
+0:41          'invocation' ( temp highp uint)
+0:43      move second child to first child ( temp highp int)
+0:43        direct index ( temp highp int)
+0:43          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              Constant:
+0:43                2 (const int)
+0:43            Constant:
+0:43              1 (const int)
+0:43          Constant:
+0:43            0 (const int)
+0:43        subgroupShuffleDown ( global highp int)
+0:43          direct index ( temp highp int)
+0:43            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:43              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                Constant:
+0:43                  0 (const int)
+0:43              Constant:
+0:43                1 (const int)
+0:43            Constant:
+0:43              0 (const int)
+0:43          'invocation' ( temp highp uint)
+0:44      move second child to first child ( temp highp 2-component vector of int)
+0:44        vector swizzle ( temp highp 2-component vector of int)
+0:44          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              Constant:
+0:44                2 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44          Sequence
+0:44            Constant:
+0:44              0 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44        subgroupShuffleDown ( global highp 2-component vector of int)
+0:44          vector swizzle ( temp highp 2-component vector of int)
+0:44            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                Constant:
+0:44                  1 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44            Sequence
+0:44              Constant:
+0:44                0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44          'invocation' ( temp highp uint)
+0:45      move second child to first child ( temp highp 3-component vector of int)
+0:45        vector swizzle ( temp highp 3-component vector of int)
+0:45          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45        subgroupShuffleDown ( global highp 3-component vector of int)
+0:45          vector swizzle ( temp highp 3-component vector of int)
+0:45            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                Constant:
+0:45                  2 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45          'invocation' ( temp highp uint)
+0:46      move second child to first child ( temp highp 4-component vector of int)
+0:46        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            Constant:
+0:46              2 (const int)
+0:46          Constant:
+0:46            1 (const int)
+0:46        subgroupShuffleDown ( global highp 4-component vector of int)
+0:46          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:46            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              Constant:
+0:46                3 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46          'invocation' ( temp highp uint)
+0:48      move second child to first child ( temp highp uint)
+0:48        direct index ( temp highp uint)
+0:48          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              Constant:
+0:48                3 (const int)
+0:48            Constant:
+0:48              2 (const int)
+0:48          Constant:
+0:48            0 (const int)
+0:48        subgroupShuffleDown ( global highp uint)
+0:48          direct index ( temp highp uint)
+0:48            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:48              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                Constant:
+0:48                  0 (const int)
+0:48              Constant:
+0:48                2 (const int)
+0:48            Constant:
+0:48              0 (const int)
+0:48          'invocation' ( temp highp uint)
+0:49      move second child to first child ( temp highp 2-component vector of uint)
+0:49        vector swizzle ( temp highp 2-component vector of uint)
+0:49          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              Constant:
+0:49                3 (const int)
+0:49            Constant:
+0:49              2 (const int)
+0:49          Sequence
+0:49            Constant:
+0:49              0 (const int)
+0:49            Constant:
+0:49              1 (const int)
+0:49        subgroupShuffleDown ( global highp 2-component vector of uint)
+0:49          vector swizzle ( temp highp 2-component vector of uint)
+0:49            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                Constant:
+0:49                  1 (const int)
+0:49              Constant:
+0:49                2 (const int)
+0:49            Sequence
+0:49              Constant:
+0:49                0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:49          'invocation' ( temp highp uint)
+0:50      move second child to first child ( temp highp 3-component vector of uint)
+0:50        vector swizzle ( temp highp 3-component vector of uint)
+0:50          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50        subgroupShuffleDown ( global highp 3-component vector of uint)
+0:50          vector swizzle ( temp highp 3-component vector of uint)
+0:50            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                Constant:
+0:50                  2 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50          'invocation' ( temp highp uint)
+0:51      move second child to first child ( temp highp 4-component vector of uint)
+0:51        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            Constant:
+0:51              3 (const int)
+0:51          Constant:
+0:51            2 (const int)
+0:51        subgroupShuffleDown ( global highp 4-component vector of uint)
+0:51          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:51            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              Constant:
+0:51                3 (const int)
+0:51            Constant:
+0:51              2 (const int)
+0:51          'invocation' ( temp highp uint)
+0:53      move second child to first child ( temp highp int)
+0:53        direct index ( temp highp int)
+0:53          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              Constant:
+0:53                3 (const int)
+0:53            Constant:
+0:53              1 (const int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        Convert bool to int ( temp highp int)
+0:53          subgroupShuffleDown ( global bool, operation at highp)
+0:53            Compare Less Than ( temp bool)
+0:53              direct index ( temp highp int)
+0:53                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:53                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                    Constant:
+0:53                      0 (const int)
+0:53                  Constant:
+0:53                    1 (const int)
+0:53                Constant:
+0:53                  0 (const int)
+0:53              Constant:
+0:53                0 (const int)
+0:53            'invocation' ( temp highp uint)
+0:54      move second child to first child ( temp highp 2-component vector of int)
+0:54        vector swizzle ( temp highp 2-component vector of int)
+0:54          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              Constant:
+0:54                3 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54          Sequence
+0:54            Constant:
+0:54              0 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54        Convert bool to int ( temp highp 2-component vector of int)
+0:54          subgroupShuffleDown ( global 2-component vector of bool, operation at highp)
+0:54            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:54              vector swizzle ( temp highp 2-component vector of int)
+0:54                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:54                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                    Constant:
+0:54                      1 (const int)
+0:54                  Constant:
+0:54                    1 (const int)
+0:54                Sequence
+0:54                  Constant:
+0:54                    0 (const int)
+0:54                  Constant:
+0:54                    1 (const int)
+0:54              Constant:
+0:54                0 (const int)
+0:54                0 (const int)
+0:54            'invocation' ( temp highp uint)
+0:55      move second child to first child ( temp highp 3-component vector of int)
+0:55        vector swizzle ( temp highp 3-component vector of int)
+0:55          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              Constant:
+0:55                3 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55            Constant:
+0:55              2 (const int)
+0:55        Convert bool to int ( temp highp 3-component vector of int)
+0:55          subgroupShuffleDown ( global 3-component vector of bool, operation at highp)
+0:55            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:55              vector swizzle ( temp highp 3-component vector of int)
+0:55                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:55                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                    Constant:
+0:55                      1 (const int)
+0:55                  Constant:
+0:55                    1 (const int)
+0:55                Sequence
+0:55                  Constant:
+0:55                    0 (const int)
+0:55                  Constant:
+0:55                    1 (const int)
+0:55                  Constant:
+0:55                    2 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55                0 (const int)
+0:55                0 (const int)
+0:55            'invocation' ( temp highp uint)
+0:56      move second child to first child ( temp highp 4-component vector of int)
+0:56        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            Constant:
+0:56              3 (const int)
+0:56          Constant:
+0:56            1 (const int)
+0:56        Convert bool to int ( temp highp 4-component vector of int)
+0:56          subgroupShuffleDown ( global 4-component vector of bool, operation at highp)
+0:56            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:56              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:56                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56                  Constant:
+0:56                    1 (const int)
+0:56                Constant:
+0:56                  1 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:56                0 (const int)
+0:56                0 (const int)
+0:56                0 (const int)
+0:56            'invocation' ( temp highp uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
diff --git a/Test/baseResults/glsl.es320.subgroupVote.comp.out b/Test/baseResults/glsl.es320.subgroupVote.comp.out
new file mode 100644
index 0000000..34c4f39
--- /dev/null
+++ b/Test/baseResults/glsl.es320.subgroupVote.comp.out
@@ -0,0 +1,845 @@
+glsl.es320.subgroupVote.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_vote
+local_size = (8, 8, 1)
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp highp uint)
+0:17          'invocation' ( temp highp uint)
+0:17          mod ( temp mediump uint)
+0:17            add ( temp mediump uint)
+0:17              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      Test condition and select ( temp void)
+0:19        Condition
+0:19        subgroupAll ( global bool)
+0:19          Compare Less Than ( temp bool)
+0:19            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:19                Constant:
+0:19                  0 (const int)
+0:19              Constant:
+0:19                3 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19        true case
+0:21        Sequence
+0:21          move second child to first child ( temp highp int)
+0:21            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:21                Constant:
+0:21                  0 (const int)
+0:21              Constant:
+0:21                3 (const int)
+0:21            Convert bool to int ( temp highp int)
+0:21              subgroupAllEqual ( global bool, operation at highp)
+0:21                direct index ( temp highp float)
+0:21                  f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:21                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:21                      Constant:
+0:21                        0 (const int)
+0:21                    Constant:
+0:21                      0 (const int)
+0:21                  Constant:
+0:21                    0 (const int)
+0:22          move second child to first child ( temp highp int)
+0:22            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:22              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:22                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:22                Constant:
+0:22                  0 (const int)
+0:22              Constant:
+0:22                3 (const int)
+0:22            Convert bool to int ( temp highp int)
+0:22              subgroupAllEqual ( global bool, operation at highp)
+0:22                vector swizzle ( temp highp 2-component vector of float)
+0:22                  f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:22                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:22                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:22                      Constant:
+0:22                        1 (const int)
+0:22                    Constant:
+0:22                      0 (const int)
+0:22                  Sequence
+0:22                    Constant:
+0:22                      0 (const int)
+0:22                    Constant:
+0:22                      1 (const int)
+0:23          move second child to first child ( temp highp int)
+0:23            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                3 (const int)
+0:23            Convert bool to int ( temp highp int)
+0:23              subgroupAllEqual ( global bool, operation at highp)
+0:23                vector swizzle ( temp highp 3-component vector of float)
+0:23                  f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:23                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:23                      Constant:
+0:23                        2 (const int)
+0:23                    Constant:
+0:23                      0 (const int)
+0:23                  Sequence
+0:23                    Constant:
+0:23                      0 (const int)
+0:23                    Constant:
+0:23                      1 (const int)
+0:23                    Constant:
+0:23                      2 (const int)
+0:24          move second child to first child ( temp highp int)
+0:24            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:24                Constant:
+0:24                  0 (const int)
+0:24              Constant:
+0:24                3 (const int)
+0:24            Convert bool to int ( temp highp int)
+0:24              subgroupAllEqual ( global bool, operation at highp)
+0:24                f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:24                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:24                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:24                    Constant:
+0:24                      3 (const int)
+0:24                  Constant:
+0:24                    0 (const int)
+0:26          move second child to first child ( temp highp int)
+0:26            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:26                Constant:
+0:26                  0 (const int)
+0:26              Constant:
+0:26                3 (const int)
+0:26            Convert bool to int ( temp highp int)
+0:26              subgroupAllEqual ( global bool, operation at highp)
+0:26                direct index ( temp highp int)
+0:26                  i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:26                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:26                      Constant:
+0:26                        0 (const int)
+0:26                    Constant:
+0:26                      1 (const int)
+0:26                  Constant:
+0:26                    0 (const int)
+0:27          move second child to first child ( temp highp int)
+0:27            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:27              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:27                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:27                Constant:
+0:27                  0 (const int)
+0:27              Constant:
+0:27                3 (const int)
+0:27            Convert bool to int ( temp highp int)
+0:27              subgroupAllEqual ( global bool, operation at highp)
+0:27                vector swizzle ( temp highp 2-component vector of int)
+0:27                  i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:27                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:27                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:27                      Constant:
+0:27                        1 (const int)
+0:27                    Constant:
+0:27                      1 (const int)
+0:27                  Sequence
+0:27                    Constant:
+0:27                      0 (const int)
+0:27                    Constant:
+0:27                      1 (const int)
+0:28          move second child to first child ( temp highp int)
+0:28            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                3 (const int)
+0:28            Convert bool to int ( temp highp int)
+0:28              subgroupAllEqual ( global bool, operation at highp)
+0:28                vector swizzle ( temp highp 3-component vector of int)
+0:28                  i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:28                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:28                      Constant:
+0:28                        2 (const int)
+0:28                    Constant:
+0:28                      1 (const int)
+0:28                  Sequence
+0:28                    Constant:
+0:28                      0 (const int)
+0:28                    Constant:
+0:28                      1 (const int)
+0:28                    Constant:
+0:28                      2 (const int)
+0:29          move second child to first child ( temp highp int)
+0:29            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:29                Constant:
+0:29                  0 (const int)
+0:29              Constant:
+0:29                3 (const int)
+0:29            Convert bool to int ( temp highp int)
+0:29              subgroupAllEqual ( global bool, operation at highp)
+0:29                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:29                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:29                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:29                    Constant:
+0:29                      3 (const int)
+0:29                  Constant:
+0:29                    1 (const int)
+0:31          move second child to first child ( temp highp int)
+0:31            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:31                Constant:
+0:31                  0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Convert bool to int ( temp highp int)
+0:31              subgroupAllEqual ( global bool, operation at highp)
+0:31                direct index ( temp highp uint)
+0:31                  u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:31                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:31                      Constant:
+0:31                        0 (const int)
+0:31                    Constant:
+0:31                      2 (const int)
+0:31                  Constant:
+0:31                    0 (const int)
+0:32          move second child to first child ( temp highp int)
+0:32            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:32              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:32                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:32                Constant:
+0:32                  0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Convert bool to int ( temp highp int)
+0:32              subgroupAllEqual ( global bool, operation at highp)
+0:32                vector swizzle ( temp highp 2-component vector of uint)
+0:32                  u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:32                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:32                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:32                      Constant:
+0:32                        1 (const int)
+0:32                    Constant:
+0:32                      2 (const int)
+0:32                  Sequence
+0:32                    Constant:
+0:32                      0 (const int)
+0:32                    Constant:
+0:32                      1 (const int)
+0:33          move second child to first child ( temp highp int)
+0:33            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:33              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:33                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                3 (const int)
+0:33            Convert bool to int ( temp highp int)
+0:33              subgroupAllEqual ( global bool, operation at highp)
+0:33                vector swizzle ( temp highp 3-component vector of uint)
+0:33                  u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:33                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:33                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:33                      Constant:
+0:33                        2 (const int)
+0:33                    Constant:
+0:33                      2 (const int)
+0:33                  Sequence
+0:33                    Constant:
+0:33                      0 (const int)
+0:33                    Constant:
+0:33                      1 (const int)
+0:33                    Constant:
+0:33                      2 (const int)
+0:34          move second child to first child ( temp highp int)
+0:34            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                3 (const int)
+0:34            Convert bool to int ( temp highp int)
+0:34              subgroupAllEqual ( global bool, operation at highp)
+0:34                u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:34                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:34                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:34                    Constant:
+0:34                      3 (const int)
+0:34                  Constant:
+0:34                    2 (const int)
+0:19        false case
+0:36        Test condition and select ( temp void)
+0:36          Condition
+0:36          subgroupAny ( global bool)
+0:36            Compare Less Than ( temp bool)
+0:36              r: direct index for structure (layout( column_major shared) buffer highp int)
+0:36                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:36                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:36                  Constant:
+0:36                    1 (const int)
+0:36                Constant:
+0:36                  3 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36          true case
+0:38          Sequence
+0:38            move second child to first child ( temp highp int)
+0:38              r: direct index for structure (layout( column_major shared) buffer highp int)
+0:38                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:38                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:38                  Constant:
+0:38                    1 (const int)
+0:38                Constant:
+0:38                  3 (const int)
+0:38              Construct int ( temp highp int)
+0:38                Convert bool to int ( temp highp int)
+0:38                  subgroupAllEqual ( global bool)
+0:38                    Compare Less Than ( temp bool)
+0:38                      direct index ( temp highp int)
+0:38                        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38                          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:38                            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:38                            Constant:
+0:38                              0 (const int)
+0:38                          Constant:
+0:38                            1 (const int)
+0:38                        Constant:
+0:38                          0 (const int)
+0:38                      Constant:
+0:38                        0 (const int)
+0:39            move second child to first child ( temp highp int)
+0:39              r: direct index for structure (layout( column_major shared) buffer highp int)
+0:39                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:39                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:39                  Constant:
+0:39                    1 (const int)
+0:39                Constant:
+0:39                  3 (const int)
+0:39              Construct int ( temp highp int)
+0:39                Construct ivec2 ( temp highp 2-component vector of int)
+0:39                  Convert bool to int ( temp highp int)
+0:39                    subgroupAllEqual ( global bool)
+0:39                      Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:39                        vector swizzle ( temp highp 2-component vector of int)
+0:39                          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39                            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:39                              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:39                              Constant:
+0:39                                1 (const int)
+0:39                            Constant:
+0:39                              1 (const int)
+0:39                          Sequence
+0:39                            Constant:
+0:39                              0 (const int)
+0:39                            Constant:
+0:39                              1 (const int)
+0:39                        Constant:
+0:39                          0 (const int)
+0:39                          0 (const int)
+0:40            move second child to first child ( temp highp int)
+0:40              r: direct index for structure (layout( column_major shared) buffer highp int)
+0:40                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:40                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                Constant:
+0:40                  3 (const int)
+0:40              Construct int ( temp highp int)
+0:40                Construct ivec3 ( temp highp 3-component vector of int)
+0:40                  Convert bool to int ( temp highp int)
+0:40                    subgroupAllEqual ( global bool)
+0:40                      Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:40                        vector swizzle ( temp highp 3-component vector of int)
+0:40                          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40                            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:40                              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:40                              Constant:
+0:40                                1 (const int)
+0:40                            Constant:
+0:40                              1 (const int)
+0:40                          Sequence
+0:40                            Constant:
+0:40                              0 (const int)
+0:40                            Constant:
+0:40                              1 (const int)
+0:40                            Constant:
+0:40                              2 (const int)
+0:40                        Constant:
+0:40                          0 (const int)
+0:40                          0 (const int)
+0:40                          0 (const int)
+0:41            move second child to first child ( temp highp int)
+0:41              r: direct index for structure (layout( column_major shared) buffer highp int)
+0:41                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:41                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                Constant:
+0:41                  3 (const int)
+0:41              Construct int ( temp highp int)
+0:41                Construct ivec4 ( temp highp 4-component vector of int)
+0:41                  Convert bool to int ( temp highp int)
+0:41                    subgroupAllEqual ( global bool)
+0:41                      Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:41                        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41                          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:41                            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:41                            Constant:
+0:41                              1 (const int)
+0:41                          Constant:
+0:41                            1 (const int)
+0:41                        Constant:
+0:41                          0 (const int)
+0:41                          0 (const int)
+0:41                          0 (const int)
+0:41                          0 (const int)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_vote
+local_size = (8, 8, 1)
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      Sequence
+0:17        move second child to first child ( temp highp uint)
+0:17          'invocation' ( temp highp uint)
+0:17          mod ( temp mediump uint)
+0:17            add ( temp mediump uint)
+0:17              'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID)
+0:17              'gl_SubgroupSize' ( in mediump uint SubgroupSize)
+0:17            Constant:
+0:17              4 (const uint)
+0:19      Test condition and select ( temp void)
+0:19        Condition
+0:19        subgroupAll ( global bool)
+0:19          Compare Less Than ( temp bool)
+0:19            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:19              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:19                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:19                Constant:
+0:19                  0 (const int)
+0:19              Constant:
+0:19                3 (const int)
+0:19            Constant:
+0:19              0 (const int)
+0:19        true case
+0:21        Sequence
+0:21          move second child to first child ( temp highp int)
+0:21            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:21              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:21                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:21                Constant:
+0:21                  0 (const int)
+0:21              Constant:
+0:21                3 (const int)
+0:21            Convert bool to int ( temp highp int)
+0:21              subgroupAllEqual ( global bool, operation at highp)
+0:21                direct index ( temp highp float)
+0:21                  f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:21                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:21                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:21                      Constant:
+0:21                        0 (const int)
+0:21                    Constant:
+0:21                      0 (const int)
+0:21                  Constant:
+0:21                    0 (const int)
+0:22          move second child to first child ( temp highp int)
+0:22            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:22              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:22                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:22                Constant:
+0:22                  0 (const int)
+0:22              Constant:
+0:22                3 (const int)
+0:22            Convert bool to int ( temp highp int)
+0:22              subgroupAllEqual ( global bool, operation at highp)
+0:22                vector swizzle ( temp highp 2-component vector of float)
+0:22                  f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:22                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:22                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:22                      Constant:
+0:22                        1 (const int)
+0:22                    Constant:
+0:22                      0 (const int)
+0:22                  Sequence
+0:22                    Constant:
+0:22                      0 (const int)
+0:22                    Constant:
+0:22                      1 (const int)
+0:23          move second child to first child ( temp highp int)
+0:23            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                3 (const int)
+0:23            Convert bool to int ( temp highp int)
+0:23              subgroupAllEqual ( global bool, operation at highp)
+0:23                vector swizzle ( temp highp 3-component vector of float)
+0:23                  f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:23                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:23                      Constant:
+0:23                        2 (const int)
+0:23                    Constant:
+0:23                      0 (const int)
+0:23                  Sequence
+0:23                    Constant:
+0:23                      0 (const int)
+0:23                    Constant:
+0:23                      1 (const int)
+0:23                    Constant:
+0:23                      2 (const int)
+0:24          move second child to first child ( temp highp int)
+0:24            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:24                Constant:
+0:24                  0 (const int)
+0:24              Constant:
+0:24                3 (const int)
+0:24            Convert bool to int ( temp highp int)
+0:24              subgroupAllEqual ( global bool, operation at highp)
+0:24                f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:24                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:24                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:24                    Constant:
+0:24                      3 (const int)
+0:24                  Constant:
+0:24                    0 (const int)
+0:26          move second child to first child ( temp highp int)
+0:26            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:26                Constant:
+0:26                  0 (const int)
+0:26              Constant:
+0:26                3 (const int)
+0:26            Convert bool to int ( temp highp int)
+0:26              subgroupAllEqual ( global bool, operation at highp)
+0:26                direct index ( temp highp int)
+0:26                  i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:26                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:26                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:26                      Constant:
+0:26                        0 (const int)
+0:26                    Constant:
+0:26                      1 (const int)
+0:26                  Constant:
+0:26                    0 (const int)
+0:27          move second child to first child ( temp highp int)
+0:27            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:27              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:27                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:27                Constant:
+0:27                  0 (const int)
+0:27              Constant:
+0:27                3 (const int)
+0:27            Convert bool to int ( temp highp int)
+0:27              subgroupAllEqual ( global bool, operation at highp)
+0:27                vector swizzle ( temp highp 2-component vector of int)
+0:27                  i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:27                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:27                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:27                      Constant:
+0:27                        1 (const int)
+0:27                    Constant:
+0:27                      1 (const int)
+0:27                  Sequence
+0:27                    Constant:
+0:27                      0 (const int)
+0:27                    Constant:
+0:27                      1 (const int)
+0:28          move second child to first child ( temp highp int)
+0:28            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                3 (const int)
+0:28            Convert bool to int ( temp highp int)
+0:28              subgroupAllEqual ( global bool, operation at highp)
+0:28                vector swizzle ( temp highp 3-component vector of int)
+0:28                  i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:28                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:28                      Constant:
+0:28                        2 (const int)
+0:28                    Constant:
+0:28                      1 (const int)
+0:28                  Sequence
+0:28                    Constant:
+0:28                      0 (const int)
+0:28                    Constant:
+0:28                      1 (const int)
+0:28                    Constant:
+0:28                      2 (const int)
+0:29          move second child to first child ( temp highp int)
+0:29            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:29                Constant:
+0:29                  0 (const int)
+0:29              Constant:
+0:29                3 (const int)
+0:29            Convert bool to int ( temp highp int)
+0:29              subgroupAllEqual ( global bool, operation at highp)
+0:29                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:29                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:29                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:29                    Constant:
+0:29                      3 (const int)
+0:29                  Constant:
+0:29                    1 (const int)
+0:31          move second child to first child ( temp highp int)
+0:31            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:31                Constant:
+0:31                  0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Convert bool to int ( temp highp int)
+0:31              subgroupAllEqual ( global bool, operation at highp)
+0:31                direct index ( temp highp uint)
+0:31                  u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:31                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:31                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:31                      Constant:
+0:31                        0 (const int)
+0:31                    Constant:
+0:31                      2 (const int)
+0:31                  Constant:
+0:31                    0 (const int)
+0:32          move second child to first child ( temp highp int)
+0:32            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:32              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:32                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:32                Constant:
+0:32                  0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Convert bool to int ( temp highp int)
+0:32              subgroupAllEqual ( global bool, operation at highp)
+0:32                vector swizzle ( temp highp 2-component vector of uint)
+0:32                  u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:32                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:32                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:32                      Constant:
+0:32                        1 (const int)
+0:32                    Constant:
+0:32                      2 (const int)
+0:32                  Sequence
+0:32                    Constant:
+0:32                      0 (const int)
+0:32                    Constant:
+0:32                      1 (const int)
+0:33          move second child to first child ( temp highp int)
+0:33            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:33              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:33                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                3 (const int)
+0:33            Convert bool to int ( temp highp int)
+0:33              subgroupAllEqual ( global bool, operation at highp)
+0:33                vector swizzle ( temp highp 3-component vector of uint)
+0:33                  u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:33                    direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:33                      'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:33                      Constant:
+0:33                        2 (const int)
+0:33                    Constant:
+0:33                      2 (const int)
+0:33                  Sequence
+0:33                    Constant:
+0:33                      0 (const int)
+0:33                    Constant:
+0:33                      1 (const int)
+0:33                    Constant:
+0:33                      2 (const int)
+0:34          move second child to first child ( temp highp int)
+0:34            r: direct index for structure (layout( column_major shared) buffer highp int)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                3 (const int)
+0:34            Convert bool to int ( temp highp int)
+0:34              subgroupAllEqual ( global bool, operation at highp)
+0:34                u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:34                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:34                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:34                    Constant:
+0:34                      3 (const int)
+0:34                  Constant:
+0:34                    2 (const int)
+0:19        false case
+0:36        Test condition and select ( temp void)
+0:36          Condition
+0:36          subgroupAny ( global bool)
+0:36            Compare Less Than ( temp bool)
+0:36              r: direct index for structure (layout( column_major shared) buffer highp int)
+0:36                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:36                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:36                  Constant:
+0:36                    1 (const int)
+0:36                Constant:
+0:36                  3 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36          true case
+0:38          Sequence
+0:38            move second child to first child ( temp highp int)
+0:38              r: direct index for structure (layout( column_major shared) buffer highp int)
+0:38                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:38                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:38                  Constant:
+0:38                    1 (const int)
+0:38                Constant:
+0:38                  3 (const int)
+0:38              Construct int ( temp highp int)
+0:38                Convert bool to int ( temp highp int)
+0:38                  subgroupAllEqual ( global bool)
+0:38                    Compare Less Than ( temp bool)
+0:38                      direct index ( temp highp int)
+0:38                        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38                          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:38                            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:38                            Constant:
+0:38                              0 (const int)
+0:38                          Constant:
+0:38                            1 (const int)
+0:38                        Constant:
+0:38                          0 (const int)
+0:38                      Constant:
+0:38                        0 (const int)
+0:39            move second child to first child ( temp highp int)
+0:39              r: direct index for structure (layout( column_major shared) buffer highp int)
+0:39                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:39                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:39                  Constant:
+0:39                    1 (const int)
+0:39                Constant:
+0:39                  3 (const int)
+0:39              Construct int ( temp highp int)
+0:39                Construct ivec2 ( temp highp 2-component vector of int)
+0:39                  Convert bool to int ( temp highp int)
+0:39                    subgroupAllEqual ( global bool)
+0:39                      Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:39                        vector swizzle ( temp highp 2-component vector of int)
+0:39                          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39                            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:39                              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:39                              Constant:
+0:39                                1 (const int)
+0:39                            Constant:
+0:39                              1 (const int)
+0:39                          Sequence
+0:39                            Constant:
+0:39                              0 (const int)
+0:39                            Constant:
+0:39                              1 (const int)
+0:39                        Constant:
+0:39                          0 (const int)
+0:39                          0 (const int)
+0:40            move second child to first child ( temp highp int)
+0:40              r: direct index for structure (layout( column_major shared) buffer highp int)
+0:40                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:40                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                Constant:
+0:40                  3 (const int)
+0:40              Construct int ( temp highp int)
+0:40                Construct ivec3 ( temp highp 3-component vector of int)
+0:40                  Convert bool to int ( temp highp int)
+0:40                    subgroupAllEqual ( global bool)
+0:40                      Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:40                        vector swizzle ( temp highp 3-component vector of int)
+0:40                          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40                            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:40                              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:40                              Constant:
+0:40                                1 (const int)
+0:40                            Constant:
+0:40                              1 (const int)
+0:40                          Sequence
+0:40                            Constant:
+0:40                              0 (const int)
+0:40                            Constant:
+0:40                              1 (const int)
+0:40                            Constant:
+0:40                              2 (const int)
+0:40                        Constant:
+0:40                          0 (const int)
+0:40                          0 (const int)
+0:40                          0 (const int)
+0:41            move second child to first child ( temp highp int)
+0:41              r: direct index for structure (layout( column_major shared) buffer highp int)
+0:41                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:41                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                Constant:
+0:41                  3 (const int)
+0:41              Construct int ( temp highp int)
+0:41                Construct ivec4 ( temp highp 4-component vector of int)
+0:41                  Convert bool to int ( temp highp int)
+0:41                    subgroupAllEqual ( global bool)
+0:41                      Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:41                        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41                          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:41                            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+0:41                            Constant:
+0:41                              1 (const int)
+0:41                          Constant:
+0:41                            1 (const int)
+0:41                        Constant:
+0:41                          0 (const int)
+0:41                          0 (const int)
+0:41                          0 (const int)
+0:41                          0 (const int)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4, layout( column_major shared) buffer highp int r})
+
diff --git a/Test/baseResults/glspv.esversion.vert.out b/Test/baseResults/glspv.esversion.vert.out
index 782865a..9f92513 100644
--- a/Test/baseResults/glspv.esversion.vert.out
+++ b/Test/baseResults/glspv.esversion.vert.out
@@ -1,6 +1,25 @@
 glspv.esversion.vert
-ERROR: #version: ES shaders for OpenGL SPIR-V are not supported
-ERROR: 1 compilation errors.  No code generated.
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 10
 
-
-SPIR-V is not generated for failed compile or link
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 8 9
+                              Source ESSL 310
+                              Name 4  "main"
+                              Name 8  "gl_VertexID"
+                              Name 9  "gl_InstanceID"
+                              Decorate 8(gl_VertexID) BuiltIn VertexId
+                              Decorate 9(gl_InstanceID) BuiltIn InstanceId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Input 6(int)
+  8(gl_VertexID):      7(ptr) Variable Input
+9(gl_InstanceID):      7(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/glspv.version.frag.out b/Test/baseResults/glspv.version.frag.out
index 4a45b5b..42c73dd 100644
--- a/Test/baseResults/glspv.version.frag.out
+++ b/Test/baseResults/glspv.version.frag.out
@@ -2,7 +2,7 @@
 ERROR: #version: compilation for SPIR-V does not support the compatibility profile
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 6
 
                               Capability Shader
diff --git a/Test/baseResults/glspv.vert.out b/Test/baseResults/glspv.vert.out
index f2fe53b..d519262 100644
--- a/Test/baseResults/glspv.vert.out
+++ b/Test/baseResults/glspv.vert.out
@@ -2,12 +2,14 @@
 ERROR: 0:3: 'push_constant' : only allowed when using GLSL for Vulkan 
 ERROR: 0:6: 'descriptor set' : only allowed when using GLSL for Vulkan 
 ERROR: 0:8: 'shared' : not allowed when generating SPIR-V 
+ERROR: 0:8: 'binding' : uniform/buffer blocks require layout(binding=X) 
 ERROR: 0:9: 'packed' : not allowed when generating SPIR-V 
+ERROR: 0:9: 'binding' : uniform/buffer blocks require layout(binding=X) 
 ERROR: 0:13: 'gl_VertexIndex' : undeclared identifier 
 ERROR: 0:14: 'gl_InstanceIndex' : undeclared identifier 
 ERROR: 0:17: 'gl_DepthRangeParameters' : undeclared identifier 
 ERROR: 0:20: '' :  syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
-ERROR: 8 compilation errors.  No code generated.
+ERROR: 10 compilation errors.  No code generated.
 
 
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/hlsl.PointSize.geom.out b/Test/baseResults/hlsl.PointSize.geom.out
index 77cdc7d..80fee61 100644
--- a/Test/baseResults/hlsl.PointSize.geom.out
+++ b/Test/baseResults/hlsl.PointSize.geom.out
@@ -71,7 +71,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 36
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.PointSize.vert.out b/Test/baseResults/hlsl.PointSize.vert.out
index bda0030..2390a5a 100644
--- a/Test/baseResults/hlsl.PointSize.vert.out
+++ b/Test/baseResults/hlsl.PointSize.vert.out
@@ -38,7 +38,7 @@
 0:?     '@entryPointOutput' ( out float PointSize)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 16
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.aliasOpaque.frag.out b/Test/baseResults/hlsl.aliasOpaque.frag.out
index 63d29fa..d22bac6 100644
--- a/Test/baseResults/hlsl.aliasOpaque.frag.out
+++ b/Test/baseResults/hlsl.aliasOpaque.frag.out
@@ -143,7 +143,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 64
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.amend.frag.out b/Test/baseResults/hlsl.amend.frag.out
index e273abe..7fd0727 100644
--- a/Test/baseResults/hlsl.amend.frag.out
+++ b/Test/baseResults/hlsl.amend.frag.out
@@ -160,7 +160,7 @@
 0:?     'm' ( global 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.array.flatten.frag.out b/Test/baseResults/hlsl.array.flatten.frag.out
index 80d5153..4c2a8c1 100644
--- a/Test/baseResults/hlsl.array.flatten.frag.out
+++ b/Test/baseResults/hlsl.array.flatten.frag.out
@@ -345,7 +345,7 @@
 0:?     'ps_output.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 143
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.array.frag.out b/Test/baseResults/hlsl.array.frag.out
index 2e706d7..7178102 100644
--- a/Test/baseResults/hlsl.array.frag.out
+++ b/Test/baseResults/hlsl.array.frag.out
@@ -290,7 +290,7 @@
 0:?     'input' (layout( location=1) in 3-element array of 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 126
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.array.implicit-size.frag.out b/Test/baseResults/hlsl.array.implicit-size.frag.out
index 9af6fed..402807e 100644
--- a/Test/baseResults/hlsl.array.implicit-size.frag.out
+++ b/Test/baseResults/hlsl.array.implicit-size.frag.out
@@ -163,7 +163,7 @@
 0:?     'g_mystruct' ( global 2-element array of structure{ temp int i,  temp float f})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.array.multidim.frag.out b/Test/baseResults/hlsl.array.multidim.frag.out
index 9462999..6c852c3 100644
--- a/Test/baseResults/hlsl.array.multidim.frag.out
+++ b/Test/baseResults/hlsl.array.multidim.frag.out
@@ -134,7 +134,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.assoc.frag.out b/Test/baseResults/hlsl.assoc.frag.out
index 562a863..2002b0d 100644
--- a/Test/baseResults/hlsl.assoc.frag.out
+++ b/Test/baseResults/hlsl.assoc.frag.out
@@ -132,7 +132,7 @@
 0:?     'a5' (layout( location=4) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 58
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.attribute.expression.comp.out b/Test/baseResults/hlsl.attribute.expression.comp.out
index 1b3ffdb..1ff2123 100644
--- a/Test/baseResults/hlsl.attribute.expression.comp.out
+++ b/Test/baseResults/hlsl.attribute.expression.comp.out
@@ -82,7 +82,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.attribute.frag.out b/Test/baseResults/hlsl.attribute.frag.out
index 44e963e..2290cd8 100644
--- a/Test/baseResults/hlsl.attribute.frag.out
+++ b/Test/baseResults/hlsl.attribute.frag.out
@@ -50,7 +50,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.attributeC11.frag.out b/Test/baseResults/hlsl.attributeC11.frag.out
index 47dd96a..14bdcdd 100644
--- a/Test/baseResults/hlsl.attributeC11.frag.out
+++ b/Test/baseResults/hlsl.attributeC11.frag.out
@@ -95,7 +95,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 51
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out b/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
index e378447..a486d1e 100644
--- a/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
+++ b/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
@@ -56,7 +56,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 28
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.automap.frag.out b/Test/baseResults/hlsl.automap.frag.out
index b9ab49c..7691b89 100644
--- a/Test/baseResults/hlsl.automap.frag.out
+++ b/Test/baseResults/hlsl.automap.frag.out
@@ -3,8 +3,8 @@
 t1: offset -1, type 8b5d, size 1, index -1, binding 11, stages 16
 t2: offset -1, type 8b5e, size 1, index -1, binding 12, stages 16
 t3: offset -1, type 8b5f, size 1, index -1, binding 13, stages 16
-t4.@data: offset 0, type 8b52, size 1, index 0, binding -1, stages 16
-t5.@data: offset 0, type 1405, size 0, index 1, binding -1, stages 16
+t4.@data: offset 0, type 8b52, size 1, index 0, binding -1, stages 16, arrayStride 16, topLevelArrayStride 16
+t5.@data: offset 0, type 1405, size 0, index 1, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4
 t6: offset -1, type 8dc2, size 1, index -1, binding 16, stages 16
 s1: offset -1, type 0, size 1, index -1, binding 31, stages 16
 s2: offset -1, type 0, size 1, index -1, binding 32, stages 16
@@ -12,18 +12,25 @@
 u2: offset -1, type 904d, size 1, index -1, binding 42, stages 16
 u3: offset -1, type 904e, size 1, index -1, binding 43, stages 16
 u4: offset -1, type 9051, size 1, index -1, binding 44, stages 16
-u5.@data: offset 0, type 1405, size 0, index 2, binding -1, stages 16
-u6.@data: offset 0, type 1406, size 1, index 3, binding -1, stages 16
+u5.@data: offset 0, type 1405, size 0, index 2, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4
+u6.@data: offset 0, type 1406, size 1, index 3, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4
 cb1: offset 0, type 1404, size 1, index 4, binding -1, stages 16
 tb1: offset 0, type 1404, size 1, index 5, binding -1, stages 16
 
 Uniform block reflection:
-t4: offset -1, type ffffffff, size 0, index -1, binding 14, stages 0
-t5: offset -1, type ffffffff, size 0, index -1, binding 15, stages 0
-u5: offset -1, type ffffffff, size 0, index -1, binding 45, stages 0
-u6: offset -1, type ffffffff, size 0, index -1, binding 46, stages 0
-cb: offset -1, type ffffffff, size 4, index -1, binding 51, stages 0
-tb: offset -1, type ffffffff, size 4, index -1, binding 17, stages 0
+t4: offset -1, type ffffffff, size 0, index -1, binding 14, stages 16, numMembers 1
+t5: offset -1, type ffffffff, size 0, index -1, binding 15, stages 16, numMembers 1
+u5: offset -1, type ffffffff, size 0, index -1, binding 45, stages 16, numMembers 1
+u6: offset -1, type ffffffff, size 0, index -1, binding 46, stages 16, numMembers 1
+cb: offset -1, type ffffffff, size 4, index -1, binding 51, stages 16, numMembers 1
+tb: offset -1, type ffffffff, size 4, index -1, binding 17, stages 16, numMembers 1
 
-Vertex attribute reflection:
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+
+Pipeline output reflection:
+@entryPointOutput: offset 0, type 8b52, size 1, index 0, binding -1, stages 16
 
diff --git a/Test/baseResults/hlsl.basic.comp.out b/Test/baseResults/hlsl.basic.comp.out
index d84642e..fb26bc3 100644
--- a/Test/baseResults/hlsl.basic.comp.out
+++ b/Test/baseResults/hlsl.basic.comp.out
@@ -64,7 +64,7 @@
 0:?     'gti' ( in 3-component vector of int LocalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.basic.geom.out b/Test/baseResults/hlsl.basic.geom.out
index f4116d4..ee123d4 100644
--- a/Test/baseResults/hlsl.basic.geom.out
+++ b/Test/baseResults/hlsl.basic.geom.out
@@ -188,7 +188,7 @@
 0:?     'OutputStream.something' (layout( location=1) out int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 68
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.boolConv.vert.out b/Test/baseResults/hlsl.boolConv.vert.out
index d88955f..8762faf 100644
--- a/Test/baseResults/hlsl.boolConv.vert.out
+++ b/Test/baseResults/hlsl.boolConv.vert.out
@@ -204,7 +204,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 99
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.buffer.frag.out b/Test/baseResults/hlsl.buffer.frag.out
index 25a7963..e41c02d 100644
--- a/Test/baseResults/hlsl.buffer.frag.out
+++ b/Test/baseResults/hlsl.buffer.frag.out
@@ -147,7 +147,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 73
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.calculatelod.dx10.frag.out b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
index f327883..698350c 100644
--- a/Test/baseResults/hlsl.calculatelod.dx10.frag.out
+++ b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 148
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
index 85dafcc..e4bcb61 100644
--- a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
+++ b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 148
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.cast.frag.out b/Test/baseResults/hlsl.cast.frag.out
index 0aa11be..aa657f3 100644
--- a/Test/baseResults/hlsl.cast.frag.out
+++ b/Test/baseResults/hlsl.cast.frag.out
@@ -70,7 +70,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.cbuffer-identifier.vert.out b/Test/baseResults/hlsl.cbuffer-identifier.vert.out
index f7225f8..5cec136 100644
--- a/Test/baseResults/hlsl.cbuffer-identifier.vert.out
+++ b/Test/baseResults/hlsl.cbuffer-identifier.vert.out
@@ -250,7 +250,7 @@
 0:?     'input.Norm' (layout( location=1) in 3-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 93
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.charLit.vert.out b/Test/baseResults/hlsl.charLit.vert.out
index b09fc81..4846f8f 100644
--- a/Test/baseResults/hlsl.charLit.vert.out
+++ b/Test/baseResults/hlsl.charLit.vert.out
@@ -146,7 +146,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 58
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clip.frag.out b/Test/baseResults/hlsl.clip.frag.out
index dbf99bf..a0ebb74 100644
--- a/Test/baseResults/hlsl.clip.frag.out
+++ b/Test/baseResults/hlsl.clip.frag.out
@@ -74,7 +74,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-1.frag.out b/Test/baseResults/hlsl.clipdistance-1.frag.out
index f223ddc..4382505 100644
--- a/Test/baseResults/hlsl.clipdistance-1.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-1.frag.out
@@ -98,7 +98,7 @@
 0:?     'cull' ( in 1-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-1.geom.out b/Test/baseResults/hlsl.clipdistance-1.geom.out
index 144b877..5348359 100644
--- a/Test/baseResults/hlsl.clipdistance-1.geom.out
+++ b/Test/baseResults/hlsl.clipdistance-1.geom.out
@@ -550,7 +550,7 @@
 0:?     'OutputStream.clip' ( out 2-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 118
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.clipdistance-1.vert.out b/Test/baseResults/hlsl.clipdistance-1.vert.out
index d1d1370..7d8b49f 100644
--- a/Test/baseResults/hlsl.clipdistance-1.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-1.vert.out
@@ -108,7 +108,7 @@
 0:?     'cull' ( out 1-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 46
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-2.frag.out b/Test/baseResults/hlsl.clipdistance-2.frag.out
index 64604eb..d1da7bc 100644
--- a/Test/baseResults/hlsl.clipdistance-2.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-2.frag.out
@@ -290,7 +290,7 @@
 0:?     'cull' ( in 4-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-2.geom.out b/Test/baseResults/hlsl.clipdistance-2.geom.out
index a8abd02..bdee84f 100644
--- a/Test/baseResults/hlsl.clipdistance-2.geom.out
+++ b/Test/baseResults/hlsl.clipdistance-2.geom.out
@@ -724,7 +724,7 @@
 0:?     'OutputStream.clip' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 128
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.clipdistance-2.vert.out b/Test/baseResults/hlsl.clipdistance-2.vert.out
index 397a25d..77bd23d 100644
--- a/Test/baseResults/hlsl.clipdistance-2.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-2.vert.out
@@ -420,7 +420,7 @@
 0:?     'cull' ( out 4-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 89
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-3.frag.out b/Test/baseResults/hlsl.clipdistance-3.frag.out
index 3b5082e..c7eda56 100644
--- a/Test/baseResults/hlsl.clipdistance-3.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-3.frag.out
@@ -98,7 +98,7 @@
 0:?     'cull' ( in 2-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-3.geom.out b/Test/baseResults/hlsl.clipdistance-3.geom.out
index f8ba5c6..2e6b5f6 100644
--- a/Test/baseResults/hlsl.clipdistance-3.geom.out
+++ b/Test/baseResults/hlsl.clipdistance-3.geom.out
@@ -630,7 +630,7 @@
 0:?     'OutputStream.clip1' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 127
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.clipdistance-3.vert.out b/Test/baseResults/hlsl.clipdistance-3.vert.out
index 01afd17..c9289a5 100644
--- a/Test/baseResults/hlsl.clipdistance-3.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-3.vert.out
@@ -136,7 +136,7 @@
 0:?     'cull' ( out 2-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 51
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-4.frag.out b/Test/baseResults/hlsl.clipdistance-4.frag.out
index 95f81c9..8a46b15 100644
--- a/Test/baseResults/hlsl.clipdistance-4.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-4.frag.out
@@ -174,7 +174,7 @@
 0:?     'v.ClipRect' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-4.geom.out b/Test/baseResults/hlsl.clipdistance-4.geom.out
index 1096e02..31d3205 100644
--- a/Test/baseResults/hlsl.clipdistance-4.geom.out
+++ b/Test/baseResults/hlsl.clipdistance-4.geom.out
@@ -612,7 +612,7 @@
 0:?     'OutputStream.clip1' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 130
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.clipdistance-4.vert.out b/Test/baseResults/hlsl.clipdistance-4.vert.out
index d05fae4..7fca9d4 100644
--- a/Test/baseResults/hlsl.clipdistance-4.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-4.vert.out
@@ -270,7 +270,7 @@
 0:?     '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-5.frag.out b/Test/baseResults/hlsl.clipdistance-5.frag.out
index afdd4c4..f0adb05 100644
--- a/Test/baseResults/hlsl.clipdistance-5.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-5.frag.out
@@ -232,7 +232,7 @@
 0:?     'v.ClipRect' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 62
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-5.vert.out b/Test/baseResults/hlsl.clipdistance-5.vert.out
index 3e8f1fe..264c22c 100644
--- a/Test/baseResults/hlsl.clipdistance-5.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-5.vert.out
@@ -318,7 +318,7 @@
 0:?     '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 73
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-6.frag.out b/Test/baseResults/hlsl.clipdistance-6.frag.out
index 3ee8065..49c225a 100644
--- a/Test/baseResults/hlsl.clipdistance-6.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-6.frag.out
@@ -282,7 +282,7 @@
 0:?     'v.clip1' ( in 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 79
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-6.vert.out b/Test/baseResults/hlsl.clipdistance-6.vert.out
index a386d0a..024d028 100644
--- a/Test/baseResults/hlsl.clipdistance-6.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-6.vert.out
@@ -428,7 +428,7 @@
 0:?     '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 86
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-7.frag.out b/Test/baseResults/hlsl.clipdistance-7.frag.out
index 94b6a79..5ff568e 100644
--- a/Test/baseResults/hlsl.clipdistance-7.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-7.frag.out
@@ -270,7 +270,7 @@
 0:?     'v.clip1' ( in 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 78
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-7.vert.out b/Test/baseResults/hlsl.clipdistance-7.vert.out
index 87e34bd..24eced8 100644
--- a/Test/baseResults/hlsl.clipdistance-7.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-7.vert.out
@@ -384,7 +384,7 @@
 0:?     '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 81
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-8.frag.out b/Test/baseResults/hlsl.clipdistance-8.frag.out
index 98c9505..f4e55ac 100644
--- a/Test/baseResults/hlsl.clipdistance-8.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-8.frag.out
@@ -186,7 +186,7 @@
 0:?     'v.clip1' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-8.vert.out b/Test/baseResults/hlsl.clipdistance-8.vert.out
index 88800e3..456e11f 100644
--- a/Test/baseResults/hlsl.clipdistance-8.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-8.vert.out
@@ -240,7 +240,7 @@
 0:?     '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 62
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-9.frag.out b/Test/baseResults/hlsl.clipdistance-9.frag.out
index ff7f261..0a17eaf 100644
--- a/Test/baseResults/hlsl.clipdistance-9.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-9.frag.out
@@ -144,7 +144,7 @@
 0:?     'clip0' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 68
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-9.vert.out b/Test/baseResults/hlsl.clipdistance-9.vert.out
index 2d0c9b0..61b996f 100644
--- a/Test/baseResults/hlsl.clipdistance-9.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-9.vert.out
@@ -194,7 +194,7 @@
 0:?     'clip0' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 67
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.color.hull.tesc.out b/Test/baseResults/hlsl.color.hull.tesc.out
index 72e0b7e..c5be8e4 100644
--- a/Test/baseResults/hlsl.color.hull.tesc.out
+++ b/Test/baseResults/hlsl.color.hull.tesc.out
@@ -356,7 +356,7 @@
 0:?     '@patchConstantOutput.inside' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 127
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.comparison.vec.frag.out b/Test/baseResults/hlsl.comparison.vec.frag.out
index ff73e17..5936c9a 100644
--- a/Test/baseResults/hlsl.comparison.vec.frag.out
+++ b/Test/baseResults/hlsl.comparison.vec.frag.out
@@ -262,7 +262,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 96
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.conditional.frag.out b/Test/baseResults/hlsl.conditional.frag.out
index 7df88e7..e23d49c 100644
--- a/Test/baseResults/hlsl.conditional.frag.out
+++ b/Test/baseResults/hlsl.conditional.frag.out
@@ -522,7 +522,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 206
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.constantbuffer.frag.out b/Test/baseResults/hlsl.constantbuffer.frag.out
index fa8881d..48d849b 100644
--- a/Test/baseResults/hlsl.constantbuffer.frag.out
+++ b/Test/baseResults/hlsl.constantbuffer.frag.out
@@ -133,7 +133,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 66
 
                               Capability Shader
@@ -240,6 +240,5 @@
               60:    7(fvec4)   CompositeConstruct 59 59 59 59
                                 ReturnValue 60
               30:             Label
-              62:    7(fvec4) Undef
-                              ReturnValue 62
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.constructArray.vert.out b/Test/baseResults/hlsl.constructArray.vert.out
index 6e18ad9..8ba41bc 100644
--- a/Test/baseResults/hlsl.constructArray.vert.out
+++ b/Test/baseResults/hlsl.constructArray.vert.out
@@ -268,7 +268,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 89
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.constructexpr.frag.out b/Test/baseResults/hlsl.constructexpr.frag.out
index 227c7e1..085821a 100644
--- a/Test/baseResults/hlsl.constructexpr.frag.out
+++ b/Test/baseResults/hlsl.constructexpr.frag.out
@@ -104,7 +104,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.constructimat.frag.out b/Test/baseResults/hlsl.constructimat.frag.out
index 075dabb..a5014db 100644
--- a/Test/baseResults/hlsl.constructimat.frag.out
+++ b/Test/baseResults/hlsl.constructimat.frag.out
@@ -545,7 +545,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 98
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.coverage.frag.out b/Test/baseResults/hlsl.coverage.frag.out
index 691d643..a148073 100644
--- a/Test/baseResults/hlsl.coverage.frag.out
+++ b/Test/baseResults/hlsl.coverage.frag.out
@@ -119,7 +119,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 52
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.dashI.vert.out b/Test/baseResults/hlsl.dashI.vert.out
index eb9406b..d5e7e20 100644
--- a/Test/baseResults/hlsl.dashI.vert.out
+++ b/Test/baseResults/hlsl.dashI.vert.out
@@ -1,6 +1,6 @@
 hlsl.dashI.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out b/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
index 2bc08da..559708d 100644
--- a/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
+++ b/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
@@ -1,6 +1,6 @@
 hlsl.deadFunctionMissingBody.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.depthGreater.frag.out b/Test/baseResults/hlsl.depthGreater.frag.out
index 9749371..7092802 100644
--- a/Test/baseResults/hlsl.depthGreater.frag.out
+++ b/Test/baseResults/hlsl.depthGreater.frag.out
@@ -50,7 +50,7 @@
 0:?     'depth' ( out float FragDepth)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
@@ -58,8 +58,8 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "PixelShaderFunction" 18
                               ExecutionMode 4 OriginUpperLeft
-                              ExecutionMode 4 DepthGreater
                               ExecutionMode 4 DepthReplacing
+                              ExecutionMode 4 DepthGreater
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
                               Name 10  "@PixelShaderFunction(f1;"
diff --git a/Test/baseResults/hlsl.depthLess.frag.out b/Test/baseResults/hlsl.depthLess.frag.out
index c3af8ee..275eaf1 100644
--- a/Test/baseResults/hlsl.depthLess.frag.out
+++ b/Test/baseResults/hlsl.depthLess.frag.out
@@ -42,7 +42,7 @@
 0:?     '@entryPointOutput' ( out float FragDepth)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 16
 
                               Capability Shader
@@ -50,8 +50,8 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "PixelShaderFunction" 14
                               ExecutionMode 4 OriginUpperLeft
-                              ExecutionMode 4 DepthLess
                               ExecutionMode 4 DepthReplacing
+                              ExecutionMode 4 DepthLess
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
                               Name 8  "@PixelShaderFunction("
diff --git a/Test/baseResults/hlsl.discard.frag.out b/Test/baseResults/hlsl.discard.frag.out
index cc7c866..23ed871 100644
--- a/Test/baseResults/hlsl.discard.frag.out
+++ b/Test/baseResults/hlsl.discard.frag.out
@@ -108,7 +108,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.doLoop.frag.out b/Test/baseResults/hlsl.doLoop.frag.out
index bb56465..2b65a76 100644
--- a/Test/baseResults/hlsl.doLoop.frag.out
+++ b/Test/baseResults/hlsl.doLoop.frag.out
@@ -2,68 +2,95 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: @PixelShaderFunction(f1; ( temp 4-component vector of float)
-0:2    Function Parameters: 
-0:2      'input' ( in float)
+0:1  Function Definition: f0( ( temp void)
+0:1    Function Parameters: 
 0:?     Sequence
-0:3      Loop with condition not tested first: Unroll
-0:3        Loop Condition
-0:3        Constant:
-0:3          false (const bool)
-0:3        No loop body
-0:4      Loop with condition not tested first: Unroll
-0:4        Loop Condition
-0:4        Constant:
-0:4          false (const bool)
-0:4        No loop body
-0:5      Loop with condition not tested first
-0:5        Loop Condition
-0:5        Compare Greater Than ( temp bool)
-0:5          'input' ( in float)
-0:5          Constant:
-0:5            2.000000
-0:5        Loop Body
-0:?         Sequence
-0:5          Branch: Return with expression
-0:5            Construct vec4 ( temp 4-component vector of float)
-0:5              'input' ( in float)
-0:6      Loop with condition not tested first
+0:2      Loop with condition not tested first: Unroll
+0:2        Loop Condition
+0:2        Constant:
+0:2          false (const bool)
+0:2        No loop body
+0:5  Function Definition: f1( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:6      Loop with condition not tested first: Unroll
 0:6        Loop Condition
-0:6        Compare Less Than ( temp bool)
-0:6          'input' ( in float)
-0:6          Constant:
-0:6            10.000000
-0:6        Loop Body
-0:6        Pre-Increment ( temp float)
-0:6          'input' ( in float)
-0:7      Loop with condition not tested first
-0:7        Loop Condition
-0:7        Compare Less Than ( temp bool)
-0:7          Pre-Increment ( temp float)
-0:7            'input' ( in float)
-0:7          Constant:
-0:7            10.000000
-0:7        Loop Body
-0:7        Loop with condition tested first
-0:7          Loop Condition
-0:7          Compare Less Than ( temp bool)
-0:7            Pre-Increment ( temp float)
-0:7              'input' ( in float)
-0:7            Constant:
-0:7              10.000000
-0:7          No loop body
-0:8      Branch: Return with expression
-0:8        Construct vec4 ( temp 4-component vector of float)
-0:8          'input' ( in float)
-0:2  Function Definition: PixelShaderFunction( ( temp void)
-0:2    Function Parameters: 
+0:6        Constant:
+0:6          false (const bool)
+0:6        No loop body
+0:9  Function Definition: f2(f1; ( temp float)
+0:9    Function Parameters: 
+0:9      'input' ( in float)
 0:?     Sequence
-0:2      move second child to first child ( temp float)
+0:10      Loop with condition not tested first
+0:10        Loop Condition
+0:10        Compare Greater Than ( temp bool)
+0:10          'input' ( in float)
+0:10          Constant:
+0:10            2.000000
+0:10        Loop Body
+0:?         Sequence
+0:10          Branch: Return with expression
+0:10            Construct float ( temp float)
+0:10              Construct vec4 ( temp 4-component vector of float)
+0:10                'input' ( in float)
+0:13  Function Definition: f3(f1; ( temp void)
+0:13    Function Parameters: 
+0:13      'input' ( in float)
+0:?     Sequence
+0:14      Loop with condition not tested first
+0:14        Loop Condition
+0:14        Compare Less Than ( temp bool)
+0:14          'input' ( in float)
+0:14          Constant:
+0:14            10.000000
+0:14        Loop Body
+0:14        Pre-Increment ( temp float)
+0:14          'input' ( in float)
+0:17  Function Definition: f4(f1; ( temp void)
+0:17    Function Parameters: 
+0:17      'input' ( in float)
+0:?     Sequence
+0:18      Loop with condition not tested first
+0:18        Loop Condition
+0:18        Compare Less Than ( temp bool)
+0:18          Pre-Increment ( temp float)
+0:18            'input' ( in float)
+0:18          Constant:
+0:18            10.000000
+0:18        Loop Body
+0:18        Loop with condition tested first
+0:18          Loop Condition
+0:18          Compare Less Than ( temp bool)
+0:18            Pre-Increment ( temp float)
+0:18              'input' ( in float)
+0:18            Constant:
+0:18              10.000000
+0:18          No loop body
+0:22  Function Definition: @PixelShaderFunction(f1; ( temp 4-component vector of float)
+0:22    Function Parameters: 
+0:22      'input' ( in float)
+0:?     Sequence
+0:23      Function Call: f0( ( temp void)
+0:24      Function Call: f1( ( temp void)
+0:25      Function Call: f2(f1; ( temp float)
+0:25        'input' ( in float)
+0:26      Function Call: f3(f1; ( temp void)
+0:26        'input' ( in float)
+0:27      Function Call: f4(f1; ( temp void)
+0:27        'input' ( in float)
+0:28      Branch: Return with expression
+0:28        Construct vec4 ( temp 4-component vector of float)
+0:28          'input' ( in float)
+0:22  Function Definition: PixelShaderFunction( ( temp void)
+0:22    Function Parameters: 
+0:?     Sequence
+0:22      move second child to first child ( temp float)
 0:?         'input' ( temp float)
 0:?         'input' (layout( location=0) in float)
-0:2      move second child to first child ( temp 4-component vector of float)
+0:22      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2        Function Call: @PixelShaderFunction(f1; ( temp 4-component vector of float)
+0:22        Function Call: @PixelShaderFunction(f1; ( temp 4-component vector of float)
 0:?           'input' ( temp float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
@@ -76,196 +103,272 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: @PixelShaderFunction(f1; ( temp 4-component vector of float)
-0:2    Function Parameters: 
-0:2      'input' ( in float)
+0:1  Function Definition: f0( ( temp void)
+0:1    Function Parameters: 
 0:?     Sequence
-0:3      Loop with condition not tested first: Unroll
-0:3        Loop Condition
-0:3        Constant:
-0:3          false (const bool)
-0:3        No loop body
-0:4      Loop with condition not tested first: Unroll
-0:4        Loop Condition
-0:4        Constant:
-0:4          false (const bool)
-0:4        No loop body
-0:5      Loop with condition not tested first
-0:5        Loop Condition
-0:5        Compare Greater Than ( temp bool)
-0:5          'input' ( in float)
-0:5          Constant:
-0:5            2.000000
-0:5        Loop Body
-0:?         Sequence
-0:5          Branch: Return with expression
-0:5            Construct vec4 ( temp 4-component vector of float)
-0:5              'input' ( in float)
-0:6      Loop with condition not tested first
+0:2      Loop with condition not tested first: Unroll
+0:2        Loop Condition
+0:2        Constant:
+0:2          false (const bool)
+0:2        No loop body
+0:5  Function Definition: f1( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:6      Loop with condition not tested first: Unroll
 0:6        Loop Condition
-0:6        Compare Less Than ( temp bool)
-0:6          'input' ( in float)
-0:6          Constant:
-0:6            10.000000
-0:6        Loop Body
-0:6        Pre-Increment ( temp float)
-0:6          'input' ( in float)
-0:7      Loop with condition not tested first
-0:7        Loop Condition
-0:7        Compare Less Than ( temp bool)
-0:7          Pre-Increment ( temp float)
-0:7            'input' ( in float)
-0:7          Constant:
-0:7            10.000000
-0:7        Loop Body
-0:7        Loop with condition tested first
-0:7          Loop Condition
-0:7          Compare Less Than ( temp bool)
-0:7            Pre-Increment ( temp float)
-0:7              'input' ( in float)
-0:7            Constant:
-0:7              10.000000
-0:7          No loop body
-0:8      Branch: Return with expression
-0:8        Construct vec4 ( temp 4-component vector of float)
-0:8          'input' ( in float)
-0:2  Function Definition: PixelShaderFunction( ( temp void)
-0:2    Function Parameters: 
+0:6        Constant:
+0:6          false (const bool)
+0:6        No loop body
+0:9  Function Definition: f2(f1; ( temp float)
+0:9    Function Parameters: 
+0:9      'input' ( in float)
 0:?     Sequence
-0:2      move second child to first child ( temp float)
+0:10      Loop with condition not tested first
+0:10        Loop Condition
+0:10        Compare Greater Than ( temp bool)
+0:10          'input' ( in float)
+0:10          Constant:
+0:10            2.000000
+0:10        Loop Body
+0:?         Sequence
+0:10          Branch: Return with expression
+0:10            Construct float ( temp float)
+0:10              Construct vec4 ( temp 4-component vector of float)
+0:10                'input' ( in float)
+0:13  Function Definition: f3(f1; ( temp void)
+0:13    Function Parameters: 
+0:13      'input' ( in float)
+0:?     Sequence
+0:14      Loop with condition not tested first
+0:14        Loop Condition
+0:14        Compare Less Than ( temp bool)
+0:14          'input' ( in float)
+0:14          Constant:
+0:14            10.000000
+0:14        Loop Body
+0:14        Pre-Increment ( temp float)
+0:14          'input' ( in float)
+0:17  Function Definition: f4(f1; ( temp void)
+0:17    Function Parameters: 
+0:17      'input' ( in float)
+0:?     Sequence
+0:18      Loop with condition not tested first
+0:18        Loop Condition
+0:18        Compare Less Than ( temp bool)
+0:18          Pre-Increment ( temp float)
+0:18            'input' ( in float)
+0:18          Constant:
+0:18            10.000000
+0:18        Loop Body
+0:18        Loop with condition tested first
+0:18          Loop Condition
+0:18          Compare Less Than ( temp bool)
+0:18            Pre-Increment ( temp float)
+0:18              'input' ( in float)
+0:18            Constant:
+0:18              10.000000
+0:18          No loop body
+0:22  Function Definition: @PixelShaderFunction(f1; ( temp 4-component vector of float)
+0:22    Function Parameters: 
+0:22      'input' ( in float)
+0:?     Sequence
+0:23      Function Call: f0( ( temp void)
+0:24      Function Call: f1( ( temp void)
+0:25      Function Call: f2(f1; ( temp float)
+0:25        'input' ( in float)
+0:26      Function Call: f3(f1; ( temp void)
+0:26        'input' ( in float)
+0:27      Function Call: f4(f1; ( temp void)
+0:27        'input' ( in float)
+0:28      Branch: Return with expression
+0:28        Construct vec4 ( temp 4-component vector of float)
+0:28          'input' ( in float)
+0:22  Function Definition: PixelShaderFunction( ( temp void)
+0:22    Function Parameters: 
+0:?     Sequence
+0:22      move second child to first child ( temp float)
 0:?         'input' ( temp float)
 0:?         'input' (layout( location=0) in float)
-0:2      move second child to first child ( temp 4-component vector of float)
+0:22      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2        Function Call: @PixelShaderFunction(f1; ( temp 4-component vector of float)
+0:22        Function Call: @PixelShaderFunction(f1; ( temp 4-component vector of float)
 0:?           'input' ( temp float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'input' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 71
+// Generated by (magic number): 80008
+// Id's are bound by 99
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 64 67
+                              EntryPoint Fragment 4  "PixelShaderFunction" 92 95
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
-                              Name 11  "@PixelShaderFunction(f1;"
-                              Name 10  "input"
-                              Name 62  "input"
-                              Name 64  "input"
-                              Name 67  "@entryPointOutput"
-                              Name 68  "param"
-                              Decorate 64(input) Location 0
-                              Decorate 67(@entryPointOutput) Location 0
+                              Name 6  "f0("
+                              Name 8  "f1("
+                              Name 14  "f2(f1;"
+                              Name 13  "input"
+                              Name 18  "f3(f1;"
+                              Name 17  "input"
+                              Name 21  "f4(f1;"
+                              Name 20  "input"
+                              Name 26  "@PixelShaderFunction(f1;"
+                              Name 25  "input"
+                              Name 77  "param"
+                              Name 80  "param"
+                              Name 83  "param"
+                              Name 90  "input"
+                              Name 92  "input"
+                              Name 95  "@entryPointOutput"
+                              Name 96  "param"
+                              Decorate 92(input) Location 0
+                              Decorate 95(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeFloat 32
-               7:             TypePointer Function 6(float)
-               8:             TypeVector 6(float) 4
-               9:             TypeFunction 8(fvec4) 7(ptr)
-              17:             TypeBool
-              18:    17(bool) ConstantFalse
-              31:    6(float) Constant 1073741824
-              38:    6(float) Constant 1065353216
-              41:    6(float) Constant 1092616192
-              63:             TypePointer Input 6(float)
-       64(input):     63(ptr) Variable Input
-              66:             TypePointer Output 8(fvec4)
-67(@entryPointOutput):     66(ptr) Variable Output
+              10:             TypeFloat 32
+              11:             TypePointer Function 10(float)
+              12:             TypeFunction 10(float) 11(ptr)
+              16:             TypeFunction 2 11(ptr)
+              23:             TypeVector 10(float) 4
+              24:             TypeFunction 23(fvec4) 11(ptr)
+              32:             TypeBool
+              33:    32(bool) ConstantFalse
+              47:   10(float) Constant 1073741824
+              55:   10(float) Constant 1065353216
+              58:   10(float) Constant 1092616192
+              91:             TypePointer Input 10(float)
+       92(input):     91(ptr) Variable Input
+              94:             TypePointer Output 23(fvec4)
+95(@entryPointOutput):     94(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-       62(input):      7(ptr) Variable Function
-       68(param):      7(ptr) Variable Function
-              65:    6(float) Load 64(input)
-                              Store 62(input) 65
-              69:    6(float) Load 62(input)
-                              Store 68(param) 69
-              70:    8(fvec4) FunctionCall 11(@PixelShaderFunction(f1;) 68(param)
-                              Store 67(@entryPointOutput) 70
+       90(input):     11(ptr) Variable Function
+       96(param):     11(ptr) Variable Function
+              93:   10(float) Load 92(input)
+                              Store 90(input) 93
+              97:   10(float) Load 90(input)
+                              Store 96(param) 97
+              98:   23(fvec4) FunctionCall 26(@PixelShaderFunction(f1;) 96(param)
+                              Store 95(@entryPointOutput) 98
                               Return
                               FunctionEnd
-11(@PixelShaderFunction(f1;):    8(fvec4) Function None 9
-       10(input):      7(ptr) FunctionParameter
-              12:             Label
-                              Branch 13
-              13:             Label
-                              LoopMerge 15 16 Unroll 
-                              Branch 14
-              14:             Label
-                              Branch 16
-              16:             Label
-                              BranchConditional 18 13 15
-              15:             Label
-                              Branch 19
-              19:             Label
-                              LoopMerge 21 22 Unroll 
-                              Branch 20
-              20:             Label
-                              Branch 22
-              22:             Label
-                              BranchConditional 18 19 21
-              21:             Label
-                              Branch 23
-              23:             Label
-                              LoopMerge 25 26 None
-                              Branch 24
-              24:             Label
-              27:    6(float) Load 10(input)
-              28:    8(fvec4) CompositeConstruct 27 27 27 27
-                              ReturnValue 28
-              26:             Label
-              30:    6(float) Load 10(input)
-              32:    17(bool) FOrdGreaterThan 30 31
-                              BranchConditional 32 23 25
-              25:             Label
-                              Branch 33
-              33:             Label
-                              LoopMerge 35 36 None
+          6(f0():           2 Function None 3
+               7:             Label
+                              Branch 28
+              28:             Label
+                              LoopMerge 30 31 Unroll 
+                              Branch 29
+              29:             Label
+                              Branch 31
+              31:             Label
+                              BranchConditional 33 28 30
+              30:             Label
+                              Return
+                              FunctionEnd
+          8(f1():           2 Function None 3
+               9:             Label
                               Branch 34
               34:             Label
-              37:    6(float) Load 10(input)
-              39:    6(float) FAdd 37 38
-                              Store 10(input) 39
-                              Branch 36
-              36:             Label
-              40:    6(float) Load 10(input)
-              42:    17(bool) FOrdLessThan 40 41
-                              BranchConditional 42 33 35
+                              LoopMerge 36 37 Unroll 
+                              Branch 35
               35:             Label
-                              Branch 43
-              43:             Label
-                              LoopMerge 45 46 None
-                              Branch 44
-              44:             Label
-                              Branch 47
-              47:             Label
-                              LoopMerge 49 50 None
+                              Branch 37
+              37:             Label
+                              BranchConditional 33 34 36
+              36:             Label
+                              Return
+                              FunctionEnd
+      14(f2(f1;):   10(float) Function None 12
+       13(input):     11(ptr) FunctionParameter
+              15:             Label
+                              Branch 38
+              38:             Label
+                              LoopMerge 40 41 None
+                              Branch 39
+              39:             Label
+              42:   10(float) Load 13(input)
+              43:   23(fvec4) CompositeConstruct 42 42 42 42
+              44:   10(float) CompositeExtract 43 0
+                              ReturnValue 44
+              41:             Label
+                              Branch 38
+              40:             Label
+                              Unreachable
+                              FunctionEnd
+      18(f3(f1;):           2 Function None 16
+       17(input):     11(ptr) FunctionParameter
+              19:             Label
+                              Branch 50
+              50:             Label
+                              LoopMerge 52 53 None
                               Branch 51
               51:             Label
-              52:    6(float) Load 10(input)
-              53:    6(float) FAdd 52 38
-                              Store 10(input) 53
-              54:    17(bool) FOrdLessThan 53 41
-                              BranchConditional 54 48 49
-              48:               Label
-                                Branch 50
-              50:               Label
-                                Branch 47
-              49:             Label
-                              Branch 46
-              46:             Label
-              55:    6(float) Load 10(input)
-              56:    6(float) FAdd 55 38
-                              Store 10(input) 56
-              57:    17(bool) FOrdLessThan 56 41
-                              BranchConditional 57 43 45
-              45:             Label
-              58:    6(float) Load 10(input)
-              59:    8(fvec4) CompositeConstruct 58 58 58 58
-                              ReturnValue 59
+              54:   10(float) Load 17(input)
+              56:   10(float) FAdd 54 55
+                              Store 17(input) 56
+                              Branch 53
+              53:             Label
+              57:   10(float) Load 17(input)
+              59:    32(bool) FOrdLessThan 57 58
+                              BranchConditional 59 50 52
+              52:             Label
+                              Return
+                              FunctionEnd
+      21(f4(f1;):           2 Function None 16
+       20(input):     11(ptr) FunctionParameter
+              22:             Label
+                              Branch 60
+              60:             Label
+                              LoopMerge 62 63 None
+                              Branch 61
+              61:             Label
+                              Branch 64
+              64:             Label
+                              LoopMerge 66 67 None
+                              Branch 68
+              68:             Label
+              69:   10(float) Load 20(input)
+              70:   10(float) FAdd 69 55
+                              Store 20(input) 70
+              71:    32(bool) FOrdLessThan 70 58
+                              BranchConditional 71 65 66
+              65:               Label
+                                Branch 67
+              67:               Label
+                                Branch 64
+              66:             Label
+                              Branch 63
+              63:             Label
+              72:   10(float) Load 20(input)
+              73:   10(float) FAdd 72 55
+                              Store 20(input) 73
+              74:    32(bool) FOrdLessThan 73 58
+                              BranchConditional 74 60 62
+              62:             Label
+                              Return
+                              FunctionEnd
+26(@PixelShaderFunction(f1;):   23(fvec4) Function None 24
+       25(input):     11(ptr) FunctionParameter
+              27:             Label
+       77(param):     11(ptr) Variable Function
+       80(param):     11(ptr) Variable Function
+       83(param):     11(ptr) Variable Function
+              75:           2 FunctionCall 6(f0()
+              76:           2 FunctionCall 8(f1()
+              78:   10(float) Load 25(input)
+                              Store 77(param) 78
+              79:   10(float) FunctionCall 14(f2(f1;) 77(param)
+              81:   10(float) Load 25(input)
+                              Store 80(param) 81
+              82:           2 FunctionCall 18(f3(f1;) 80(param)
+              84:   10(float) Load 25(input)
+                              Store 83(param) 84
+              85:           2 FunctionCall 21(f4(f1;) 83(param)
+              86:   10(float) Load 25(input)
+              87:   23(fvec4) CompositeConstruct 86 86 86 86
+                              ReturnValue 87
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.domain.1.tese.out b/Test/baseResults/hlsl.domain.1.tese.out
index 4bc8bac..0b7b275 100644
--- a/Test/baseResults/hlsl.domain.1.tese.out
+++ b/Test/baseResults/hlsl.domain.1.tese.out
@@ -286,7 +286,7 @@
 0:?     'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 103
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.domain.2.tese.out b/Test/baseResults/hlsl.domain.2.tese.out
index 827f80f..e6ec924 100644
--- a/Test/baseResults/hlsl.domain.2.tese.out
+++ b/Test/baseResults/hlsl.domain.2.tese.out
@@ -284,7 +284,7 @@
 0:?     'pcf_data.foo' (layout( location=2) patch in float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 98
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.domain.3.tese.out b/Test/baseResults/hlsl.domain.3.tese.out
index dd3d502..4b8584c 100644
--- a/Test/baseResults/hlsl.domain.3.tese.out
+++ b/Test/baseResults/hlsl.domain.3.tese.out
@@ -264,7 +264,7 @@
 0:?     'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 100
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.earlydepthstencil.frag.out b/Test/baseResults/hlsl.earlydepthstencil.frag.out
new file mode 100755
index 0000000..f30b89a
--- /dev/null
+++ b/Test/baseResults/hlsl.earlydepthstencil.frag.out
@@ -0,0 +1,189 @@
+hlsl.earlydepthstencil.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+using early_fragment_tests
+0:? Sequence
+0:8  Function Definition: @main(struct-InputStruct-vf41; ( temp uint)
+0:8    Function Parameters: 
+0:8      'input' ( in structure{ temp 4-component vector of float Position})
+0:?     Sequence
+0:10      move second child to first child ( temp uint)
+0:10        'oldVal' ( temp uint)
+0:10        imageAtomicExchange ( temp uint)
+0:10          'Values' (layout( r32ui) uniform uimage2D)
+0:?           Construct uvec2 ( temp 2-component vector of uint)
+0:10            Convert float to uint ( temp uint)
+0:10              direct index ( temp float)
+0:10                Position: direct index for structure ( temp 4-component vector of float)
+0:10                  'input' ( in structure{ temp 4-component vector of float Position})
+0:10                  Constant:
+0:10                    0 (const int)
+0:10                Constant:
+0:10                  0 (const int)
+0:10            Convert float to uint ( temp uint)
+0:10              direct index ( temp float)
+0:10                Position: direct index for structure ( temp 4-component vector of float)
+0:10                  'input' ( in structure{ temp 4-component vector of float Position})
+0:10                  Constant:
+0:10                    0 (const int)
+0:10                Constant:
+0:10                  1 (const int)
+0:10          Constant:
+0:10            1 (const uint)
+0:11      Branch: Return with expression
+0:11        'oldVal' ( temp uint)
+0:8  Function Definition: main( ( temp void)
+0:8    Function Parameters: 
+0:?     Sequence
+0:8      Sequence
+0:8        move second child to first child ( temp 4-component vector of float)
+0:8          Position: direct index for structure ( temp 4-component vector of float)
+0:?             'input' ( temp structure{ temp 4-component vector of float Position})
+0:8            Constant:
+0:8              0 (const int)
+0:?           'input.Position' ( in 4-component vector of float FragCoord)
+0:8      move second child to first child ( temp uint)
+0:?         '@entryPointOutput' (layout( location=0) out uint)
+0:8        Function Call: @main(struct-InputStruct-vf41; ( temp uint)
+0:?           'input' ( temp structure{ temp 4-component vector of float Position})
+0:?   Linker Objects
+0:?     'Values' (layout( r32ui) uniform uimage2D)
+0:?     '@entryPointOutput' (layout( location=0) out uint)
+0:?     'input.Position' ( in 4-component vector of float FragCoord)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+using early_fragment_tests
+0:? Sequence
+0:8  Function Definition: @main(struct-InputStruct-vf41; ( temp uint)
+0:8    Function Parameters: 
+0:8      'input' ( in structure{ temp 4-component vector of float Position})
+0:?     Sequence
+0:10      move second child to first child ( temp uint)
+0:10        'oldVal' ( temp uint)
+0:10        imageAtomicExchange ( temp uint)
+0:10          'Values' (layout( r32ui) uniform uimage2D)
+0:?           Construct uvec2 ( temp 2-component vector of uint)
+0:10            Convert float to uint ( temp uint)
+0:10              direct index ( temp float)
+0:10                Position: direct index for structure ( temp 4-component vector of float)
+0:10                  'input' ( in structure{ temp 4-component vector of float Position})
+0:10                  Constant:
+0:10                    0 (const int)
+0:10                Constant:
+0:10                  0 (const int)
+0:10            Convert float to uint ( temp uint)
+0:10              direct index ( temp float)
+0:10                Position: direct index for structure ( temp 4-component vector of float)
+0:10                  'input' ( in structure{ temp 4-component vector of float Position})
+0:10                  Constant:
+0:10                    0 (const int)
+0:10                Constant:
+0:10                  1 (const int)
+0:10          Constant:
+0:10            1 (const uint)
+0:11      Branch: Return with expression
+0:11        'oldVal' ( temp uint)
+0:8  Function Definition: main( ( temp void)
+0:8    Function Parameters: 
+0:?     Sequence
+0:8      Sequence
+0:8        move second child to first child ( temp 4-component vector of float)
+0:8          Position: direct index for structure ( temp 4-component vector of float)
+0:?             'input' ( temp structure{ temp 4-component vector of float Position})
+0:8            Constant:
+0:8              0 (const int)
+0:?           'input.Position' ( in 4-component vector of float FragCoord)
+0:8      move second child to first child ( temp uint)
+0:?         '@entryPointOutput' (layout( location=0) out uint)
+0:8        Function Call: @main(struct-InputStruct-vf41; ( temp uint)
+0:?           'input' ( temp structure{ temp 4-component vector of float Position})
+0:?   Linker Objects
+0:?     'Values' (layout( r32ui) uniform uimage2D)
+0:?     '@entryPointOutput' (layout( location=0) out uint)
+0:?     'input.Position' ( in 4-component vector of float FragCoord)
+
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 50
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 41 46
+                              ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 EarlyFragmentTests
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 8  "InputStruct"
+                              MemberName 8(InputStruct) 0  "Position"
+                              Name 13  "@main(struct-InputStruct-vf41;"
+                              Name 12  "input"
+                              Name 16  "oldVal"
+                              Name 19  "Values"
+                              Name 39  "input"
+                              Name 41  "input.Position"
+                              Name 46  "@entryPointOutput"
+                              Name 47  "param"
+                              Decorate 19(Values) DescriptorSet 0
+                              Decorate 19(Values) Binding 0
+                              Decorate 41(input.Position) BuiltIn FragCoord
+                              Decorate 46(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+  8(InputStruct):             TypeStruct 7(fvec4)
+               9:             TypePointer Function 8(InputStruct)
+              10:             TypeInt 32 0
+              11:             TypeFunction 10(int) 9(ptr)
+              15:             TypePointer Function 10(int)
+              17:             TypeImage 10(int) 2D nonsampled format:R32ui
+              18:             TypePointer UniformConstant 17
+      19(Values):     18(ptr) Variable UniformConstant
+              20:             TypeInt 32 1
+              21:     20(int) Constant 0
+              22:     10(int) Constant 0
+              23:             TypePointer Function 6(float)
+              27:     10(int) Constant 1
+              31:             TypeVector 10(int) 2
+              33:             TypePointer Image 10(int)
+              40:             TypePointer Input 7(fvec4)
+41(input.Position):     40(ptr) Variable Input
+              43:             TypePointer Function 7(fvec4)
+              45:             TypePointer Output 10(int)
+46(@entryPointOutput):     45(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+       39(input):      9(ptr) Variable Function
+       47(param):      9(ptr) Variable Function
+              42:    7(fvec4) Load 41(input.Position)
+              44:     43(ptr) AccessChain 39(input) 21
+                              Store 44 42
+              48:8(InputStruct) Load 39(input)
+                              Store 47(param) 48
+              49:     10(int) FunctionCall 13(@main(struct-InputStruct-vf41;) 47(param)
+                              Store 46(@entryPointOutput) 49
+                              Return
+                              FunctionEnd
+13(@main(struct-InputStruct-vf41;):     10(int) Function None 11
+       12(input):      9(ptr) FunctionParameter
+              14:             Label
+      16(oldVal):     15(ptr) Variable Function
+              24:     23(ptr) AccessChain 12(input) 21 22
+              25:    6(float) Load 24
+              26:     10(int) ConvertFToU 25
+              28:     23(ptr) AccessChain 12(input) 21 27
+              29:    6(float) Load 28
+              30:     10(int) ConvertFToU 29
+              32:   31(ivec2) CompositeConstruct 26 30
+              34:     33(ptr) ImageTexelPointer 19(Values) 32 22
+              35:     10(int) AtomicExchange 34 27 22 27
+                              Store 16(oldVal) 35
+              36:     10(int) Load 16(oldVal)
+                              ReturnValue 36
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.emptystruct.init.vert.out b/Test/baseResults/hlsl.emptystruct.init.vert.out
index 410915c..c3c3aef 100644
--- a/Test/baseResults/hlsl.emptystruct.init.vert.out
+++ b/Test/baseResults/hlsl.emptystruct.init.vert.out
@@ -60,7 +60,7 @@
 0:?     'vertexIndex' (layout( location=0) in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.emptystructreturn.frag.out b/Test/baseResults/hlsl.emptystructreturn.frag.out
index 1c9953b..bb9c26c 100644
--- a/Test/baseResults/hlsl.emptystructreturn.frag.out
+++ b/Test/baseResults/hlsl.emptystructreturn.frag.out
@@ -51,7 +51,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.emptystructreturn.vert.out b/Test/baseResults/hlsl.emptystructreturn.vert.out
index 65d326d..22027bf 100644
--- a/Test/baseResults/hlsl.emptystructreturn.vert.out
+++ b/Test/baseResults/hlsl.emptystructreturn.vert.out
@@ -49,7 +49,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.entry-in.frag.out b/Test/baseResults/hlsl.entry-in.frag.out
index dc9eea4..d65532d 100644
--- a/Test/baseResults/hlsl.entry-in.frag.out
+++ b/Test/baseResults/hlsl.entry-in.frag.out
@@ -166,7 +166,7 @@
 0:?     'i.i2' (layout( location=1) flat in 2-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 74
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.entry-out.frag.out b/Test/baseResults/hlsl.entry-out.frag.out
index 6ca3011..e1af284 100644
--- a/Test/baseResults/hlsl.entry-out.frag.out
+++ b/Test/baseResults/hlsl.entry-out.frag.out
@@ -244,7 +244,7 @@
 0:?     'out3.i' (layout( location=5) out 2-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 89
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.entry.rename.frag.out b/Test/baseResults/hlsl.entry.rename.frag.out
index 9e23396..b0e958b 100644
--- a/Test/baseResults/hlsl.entry.rename.frag.out
+++ b/Test/baseResults/hlsl.entry.rename.frag.out
@@ -72,7 +72,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out b/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
index 61367d6..c4e6baf 100644
--- a/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
+++ b/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
@@ -1,6 +1,6 @@
 hlsl.explicitDescriptorSet.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.explicitDescriptorSet.frag.out b/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
index 9bc2f01..9665ad2 100644
--- a/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
+++ b/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
@@ -1,6 +1,6 @@
 hlsl.explicitDescriptorSet.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flatten.return.frag.out b/Test/baseResults/hlsl.flatten.return.frag.out
index e47fe3e..bc388f8 100644
--- a/Test/baseResults/hlsl.flatten.return.frag.out
+++ b/Test/baseResults/hlsl.flatten.return.frag.out
@@ -118,7 +118,7 @@
 0:?     '@entryPointOutput.other_struct_member3' (layout( location=3) out float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 49
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flattenOpaque.frag.out b/Test/baseResults/hlsl.flattenOpaque.frag.out
index 94d02f4..688656c 100644
--- a/Test/baseResults/hlsl.flattenOpaque.frag.out
+++ b/Test/baseResults/hlsl.flattenOpaque.frag.out
@@ -295,7 +295,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 122
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
index a5a5944..6d16858 100644
--- a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
+++ b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
@@ -165,7 +165,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 82
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
index 5a2aa2a..62a2e8e 100644
--- a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
+++ b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
@@ -107,7 +107,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 59
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flattenSubset.frag.out b/Test/baseResults/hlsl.flattenSubset.frag.out
index 262a29d..f6da1a9 100644
--- a/Test/baseResults/hlsl.flattenSubset.frag.out
+++ b/Test/baseResults/hlsl.flattenSubset.frag.out
@@ -115,7 +115,7 @@
 0:?     'vpos' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flattenSubset2.frag.out b/Test/baseResults/hlsl.flattenSubset2.frag.out
index 77dc4cd..40d92a9 100644
--- a/Test/baseResults/hlsl.flattenSubset2.frag.out
+++ b/Test/baseResults/hlsl.flattenSubset2.frag.out
@@ -149,7 +149,7 @@
 0:?     'vpos' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 56
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.float1.frag.out b/Test/baseResults/hlsl.float1.frag.out
index 49827dc..0f7600e 100644
--- a/Test/baseResults/hlsl.float1.frag.out
+++ b/Test/baseResults/hlsl.float1.frag.out
@@ -65,7 +65,7 @@
 0:?     'scalar' ( global float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.float4.frag.out b/Test/baseResults/hlsl.float4.frag.out
index 8dc3307..8e8c821 100644
--- a/Test/baseResults/hlsl.float4.frag.out
+++ b/Test/baseResults/hlsl.float4.frag.out
@@ -42,7 +42,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor,  uniform bool ff1, layout( offset=20) uniform float ff2, layout( binding=0 offset=32) uniform 4-component vector of float ff3, layout( binding=1 offset=48) uniform 4-component vector of float ff4})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.forLoop.frag.out b/Test/baseResults/hlsl.forLoop.frag.out
index 3e835f8..b6c2710 100644
--- a/Test/baseResults/hlsl.forLoop.frag.out
+++ b/Test/baseResults/hlsl.forLoop.frag.out
@@ -2,197 +2,251 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
-0:2    Function Parameters: 
-0:2      'input' ( in 4-component vector of float)
+0:1  Function Definition: f0( ( temp void)
+0:1    Function Parameters: 
 0:?     Sequence
 0:?       Sequence
-0:3        Loop with condition tested first
-0:3          No loop condition
-0:3          No loop body
-0:4      Sequence
-0:4        Pre-Increment ( temp 4-component vector of float)
-0:4          'input' ( in 4-component vector of float)
-0:4        Loop with condition tested first
-0:4          No loop condition
-0:4          No loop body
-0:?       Sequence
-0:5        Loop with condition tested first: Unroll
-0:5          Loop Condition
-0:5          any ( temp bool)
-0:5            NotEqual ( temp 4-component vector of bool)
-0:5              'input' ( in 4-component vector of float)
-0:5              'input' ( in 4-component vector of float)
-0:5          No loop body
-0:?       Sequence
+0:2        Loop with condition tested first
+0:2          No loop condition
+0:2          No loop body
+0:5  Function Definition: f1(vf4; ( temp void)
+0:5    Function Parameters: 
+0:5      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:6      Sequence
+0:6        Pre-Increment ( temp 4-component vector of float)
+0:6          'input' ( in 4-component vector of float)
 0:6        Loop with condition tested first
-0:6          Loop Condition
-0:6          any ( temp bool)
-0:6            NotEqual ( temp 4-component vector of bool)
-0:6              'input' ( in 4-component vector of float)
-0:6              'input' ( in 4-component vector of float)
-0:6          Loop Body
-0:?           Sequence
-0:6            Branch: Return with expression
-0:6              Negate value ( temp 4-component vector of float)
-0:6                'input' ( in 4-component vector of float)
-0:7      Sequence
-0:7        Pre-Decrement ( temp 4-component vector of float)
-0:7          'input' ( in 4-component vector of float)
-0:7        Loop with condition tested first
-0:7          Loop Condition
-0:7          any ( temp bool)
-0:7            NotEqual ( temp 4-component vector of bool)
-0:7              'input' ( in 4-component vector of float)
-0:7              'input' ( in 4-component vector of float)
-0:7          Loop Body
-0:?           Sequence
-0:7            Branch: Return with expression
-0:7              Negate value ( temp 4-component vector of float)
-0:7                'input' ( in 4-component vector of float)
-0:7          Loop Terminal Expression
-0:7          add second child into first child ( temp 4-component vector of float)
-0:7            'input' ( in 4-component vector of float)
-0:7            Constant:
-0:7              2.000000
+0:6          No loop condition
+0:6          No loop body
+0:9  Function Definition: f2(vf4; ( temp void)
+0:9    Function Parameters: 
+0:9      'input' ( in 4-component vector of float)
+0:?     Sequence
 0:?       Sequence
-0:8        Loop with condition tested first
-0:8          No loop condition
-0:8          Loop Body
-0:8          Test condition and select ( temp void)
-0:8            Condition
-0:8            Compare Greater Than ( temp bool)
-0:8              direct index ( temp float)
-0:8                'input' ( in 4-component vector of float)
-0:8                Constant:
-0:8                  0 (const int)
-0:8              Constant:
-0:8                2.000000
-0:8            true case
-0:8            Branch: Break
+0:10        Loop with condition tested first: Unroll
+0:10          Loop Condition
+0:10          any ( temp bool)
+0:10            NotEqual ( temp 4-component vector of bool)
+0:10              'input' ( in 4-component vector of float)
+0:10              'input' ( in 4-component vector of float)
+0:10          No loop body
+0:13  Function Definition: f3(vf4; ( temp float)
+0:13    Function Parameters: 
+0:13      'input' ( in 4-component vector of float)
+0:?     Sequence
 0:?       Sequence
-0:9        Loop with condition tested first
-0:9          No loop condition
-0:9          Loop Body
-0:9          Test condition and select ( temp void)
-0:9            Condition
-0:9            Compare Greater Than ( temp bool)
-0:9              direct index ( temp float)
-0:9                'input' ( in 4-component vector of float)
-0:9                Constant:
-0:9                  0 (const int)
-0:9              Constant:
-0:9                2.000000
-0:9            true case
-0:9            Branch: Continue
-0:11      Sequence
-0:11        move second child to first child ( temp int)
-0:11          'ii' ( temp int)
-0:11          Constant:
-0:11            -1 (const int)
-0:11        Loop with condition tested first
-0:11          Loop Condition
-0:11          Compare Less Than ( temp bool)
-0:11            'ii' ( temp int)
-0:11            Constant:
-0:11              3 (const int)
-0:11          Loop Body
-0:11          Test condition and select ( temp void)
-0:11            Condition
-0:11            Compare Equal ( temp bool)
-0:11              'ii' ( temp int)
-0:11              Constant:
-0:11                2 (const int)
-0:11            true case
-0:11            Branch: Continue
-0:11          Loop Terminal Expression
-0:11          Pre-Increment ( temp int)
-0:11            'ii' ( temp int)
-0:12      Pre-Decrement ( temp float)
-0:12        'ii' ( temp float)
-0:13      Sequence
-0:13        move second child to first child ( temp int)
-0:13          'first' ( temp int)
-0:13          Constant:
-0:13            0 (const int)
-0:13        move second child to first child ( temp int)
-0:13          'second' ( temp int)
-0:13          Constant:
-0:13            1 (const int)
-0:13        Loop with condition tested first
-0:13          No loop condition
-0:13          Loop Body
-0:13          add ( temp int)
-0:13            'first' ( temp int)
-0:13            'second' ( temp int)
-0:14      Sequence
-0:14        move second child to first child ( temp int)
-0:14          'i' ( temp int)
-0:14          Constant:
-0:14            0 (const int)
-0:14        move second child to first child ( temp int)
-0:14          'count' ( temp int)
-0:14          Convert float to int ( temp int)
-0:14            'ii' ( temp float)
 0:14        Loop with condition tested first
 0:14          Loop Condition
-0:14          Compare Less Than ( temp bool)
-0:14            'i' ( temp int)
-0:14            'count' ( temp int)
-0:14          No loop body
-0:14          Loop Terminal Expression
-0:14          Post-Increment ( temp int)
-0:14            'i' ( temp int)
-0:15      Sequence
-0:15        move second child to first child ( temp float)
-0:15          'first' ( temp float)
-0:15          Constant:
-0:15            0.000000
-0:15        Loop with condition tested first
-0:15          Loop Condition
-0:15          Compare Less Than ( temp bool)
-0:15            'first' ( temp float)
-0:15            direct index ( temp float)
-0:15              'second' ( temp 2-element array of float)
-0:15              Constant:
-0:15                0 (const int)
-0:15          Loop Body
-0:15          add ( temp float)
-0:15            add ( temp float)
-0:15              'first' ( temp float)
-0:15              direct index ( temp float)
-0:15                'second' ( temp 2-element array of float)
-0:15                Constant:
-0:15                  1 (const int)
-0:15            'third' ( temp float)
-0:15          Loop Terminal Expression
-0:15          Pre-Increment ( temp float)
-0:15            direct index ( temp float)
-0:15              'second' ( temp 2-element array of float)
-0:15              Constant:
-0:15                1 (const int)
-0:?       Sequence
-0:16        Comma ( temp float)
-0:16          Comma ( temp float)
-0:16            Pre-Decrement ( temp float)
-0:16              'ii' ( temp float)
-0:16            Pre-Decrement ( temp float)
-0:16              'ii' ( temp float)
-0:16          Pre-Decrement ( temp float)
-0:16            'ii' ( temp float)
-0:16        Loop with condition tested first
-0:16          No loop condition
-0:16          Loop Body
-0:16          'ii' ( temp float)
-0:2  Function Definition: PixelShaderFunction( ( temp void)
-0:2    Function Parameters: 
+0:14          any ( temp bool)
+0:14            NotEqual ( temp 4-component vector of bool)
+0:14              'input' ( in 4-component vector of float)
+0:14              'input' ( in 4-component vector of float)
+0:14          Loop Body
+0:?           Sequence
+0:14            Branch: Return with expression
+0:14              Construct float ( temp float)
+0:14                Negate value ( temp 4-component vector of float)
+0:14                  'input' ( in 4-component vector of float)
+0:17  Function Definition: f4(vf4; ( temp float)
+0:17    Function Parameters: 
+0:17      'input' ( in 4-component vector of float)
 0:?     Sequence
-0:2      move second child to first child ( temp 4-component vector of float)
+0:18      Sequence
+0:18        Pre-Decrement ( temp 4-component vector of float)
+0:18          'input' ( in 4-component vector of float)
+0:18        Loop with condition tested first
+0:18          Loop Condition
+0:18          any ( temp bool)
+0:18            NotEqual ( temp 4-component vector of bool)
+0:18              'input' ( in 4-component vector of float)
+0:18              'input' ( in 4-component vector of float)
+0:18          Loop Body
+0:?           Sequence
+0:18            Branch: Return with expression
+0:18              Construct float ( temp float)
+0:18                Negate value ( temp 4-component vector of float)
+0:18                  'input' ( in 4-component vector of float)
+0:18          Loop Terminal Expression
+0:18          add second child into first child ( temp 4-component vector of float)
+0:18            'input' ( in 4-component vector of float)
+0:18            Constant:
+0:18              2.000000
+0:21  Function Definition: f5(vf4; ( temp void)
+0:21    Function Parameters: 
+0:21      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:?       Sequence
+0:22        Loop with condition tested first
+0:22          No loop condition
+0:22          Loop Body
+0:22          Test condition and select ( temp void)
+0:22            Condition
+0:22            Compare Greater Than ( temp bool)
+0:22              direct index ( temp float)
+0:22                'input' ( in 4-component vector of float)
+0:22                Constant:
+0:22                  0 (const int)
+0:22              Constant:
+0:22                2.000000
+0:22            true case
+0:22            Branch: Break
+0:25  Function Definition: f6(vf4; ( temp void)
+0:25    Function Parameters: 
+0:25      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:?       Sequence
+0:26        Loop with condition tested first
+0:26          No loop condition
+0:26          Loop Body
+0:26          Test condition and select ( temp void)
+0:26            Condition
+0:26            Compare Greater Than ( temp bool)
+0:26              direct index ( temp float)
+0:26                'input' ( in 4-component vector of float)
+0:26                Constant:
+0:26                  0 (const int)
+0:26              Constant:
+0:26                2.000000
+0:26            true case
+0:26            Branch: Continue
+0:29  Function Definition: f99( ( temp void)
+0:29    Function Parameters: 
+0:?     Sequence
+0:30      Sequence
+0:30        move second child to first child ( temp int)
+0:30          'first' ( temp int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        move second child to first child ( temp int)
+0:30          'second' ( temp int)
+0:30          Constant:
+0:30            1 (const int)
+0:30        Loop with condition tested first
+0:30          No loop condition
+0:30          Loop Body
+0:30          add ( temp int)
+0:30            'first' ( temp int)
+0:30            'second' ( temp int)
+0:33  Function Definition: f100(f1; ( temp void)
+0:33    Function Parameters: 
+0:33      'ii' ( in float)
+0:?     Sequence
+0:?       Sequence
+0:34        Comma ( temp float)
+0:34          Comma ( temp float)
+0:34            Pre-Decrement ( temp float)
+0:34              'ii' ( in float)
+0:34            Pre-Decrement ( temp float)
+0:34              'ii' ( in float)
+0:34          Pre-Decrement ( temp float)
+0:34            'ii' ( in float)
+0:34        Loop with condition tested first
+0:34          No loop condition
+0:34          Loop Body
+0:34          'ii' ( in float)
+0:38  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:38    Function Parameters: 
+0:38      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:39      Function Call: f0( ( temp void)
+0:40      Function Call: f1(vf4; ( temp void)
+0:40        'input' ( in 4-component vector of float)
+0:41      Function Call: f2(vf4; ( temp void)
+0:41        'input' ( in 4-component vector of float)
+0:42      Function Call: f3(vf4; ( temp float)
+0:42        'input' ( in 4-component vector of float)
+0:43      Function Call: f4(vf4; ( temp float)
+0:43        'input' ( in 4-component vector of float)
+0:44      Function Call: f5(vf4; ( temp void)
+0:44        'input' ( in 4-component vector of float)
+0:45      Function Call: f6(vf4; ( temp void)
+0:45        'input' ( in 4-component vector of float)
+0:48      Sequence
+0:48        move second child to first child ( temp int)
+0:48          'ii' ( temp int)
+0:48          Constant:
+0:48            -1 (const int)
+0:48        Loop with condition tested first
+0:48          Loop Condition
+0:48          Compare Less Than ( temp bool)
+0:48            'ii' ( temp int)
+0:48            Constant:
+0:48              3 (const int)
+0:48          Loop Body
+0:48          Test condition and select ( temp void)
+0:48            Condition
+0:48            Compare Equal ( temp bool)
+0:48              'ii' ( temp int)
+0:48              Constant:
+0:48                2 (const int)
+0:48            true case
+0:48            Branch: Continue
+0:48          Loop Terminal Expression
+0:48          Pre-Increment ( temp int)
+0:48            'ii' ( temp int)
+0:49      Pre-Decrement ( temp float)
+0:49        'ii' ( temp float)
+0:51      Function Call: f99( ( temp void)
+0:53      Sequence
+0:53        move second child to first child ( temp int)
+0:53          'i' ( temp int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        move second child to first child ( temp int)
+0:53          'count' ( temp int)
+0:53          Convert float to int ( temp int)
+0:53            'ii' ( temp float)
+0:53        Loop with condition tested first
+0:53          Loop Condition
+0:53          Compare Less Than ( temp bool)
+0:53            'i' ( temp int)
+0:53            'count' ( temp int)
+0:53          No loop body
+0:53          Loop Terminal Expression
+0:53          Post-Increment ( temp int)
+0:53            'i' ( temp int)
+0:54      Sequence
+0:54        move second child to first child ( temp float)
+0:54          'first' ( temp float)
+0:54          Constant:
+0:54            0.000000
+0:54        Loop with condition tested first
+0:54          Loop Condition
+0:54          Compare Less Than ( temp bool)
+0:54            'first' ( temp float)
+0:54            direct index ( temp float)
+0:54              'second' ( temp 2-element array of float)
+0:54              Constant:
+0:54                0 (const int)
+0:54          Loop Body
+0:54          add ( temp float)
+0:54            add ( temp float)
+0:54              'first' ( temp float)
+0:54              direct index ( temp float)
+0:54                'second' ( temp 2-element array of float)
+0:54                Constant:
+0:54                  1 (const int)
+0:54            'third' ( temp float)
+0:54          Loop Terminal Expression
+0:54          Pre-Increment ( temp float)
+0:54            direct index ( temp float)
+0:54              'second' ( temp 2-element array of float)
+0:54              Constant:
+0:54                1 (const int)
+0:56      Function Call: f100(f1; ( temp void)
+0:56        'ii' ( temp float)
+0:58      Branch: Return with expression
+0:58        'input' ( in 4-component vector of float)
+0:38  Function Definition: PixelShaderFunction( ( temp void)
+0:38    Function Parameters: 
+0:?     Sequence
+0:38      move second child to first child ( temp 4-component vector of float)
 0:?         'input' ( temp 4-component vector of float)
 0:?         'input' (layout( location=0) in 4-component vector of float)
-0:2      move second child to first child ( temp 4-component vector of float)
+0:38      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:38        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
 0:?           'input' ( temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
@@ -205,501 +259,654 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
-0:2    Function Parameters: 
-0:2      'input' ( in 4-component vector of float)
+0:1  Function Definition: f0( ( temp void)
+0:1    Function Parameters: 
 0:?     Sequence
 0:?       Sequence
-0:3        Loop with condition tested first
-0:3          No loop condition
-0:3          No loop body
-0:4      Sequence
-0:4        Pre-Increment ( temp 4-component vector of float)
-0:4          'input' ( in 4-component vector of float)
-0:4        Loop with condition tested first
-0:4          No loop condition
-0:4          No loop body
-0:?       Sequence
-0:5        Loop with condition tested first: Unroll
-0:5          Loop Condition
-0:5          any ( temp bool)
-0:5            NotEqual ( temp 4-component vector of bool)
-0:5              'input' ( in 4-component vector of float)
-0:5              'input' ( in 4-component vector of float)
-0:5          No loop body
-0:?       Sequence
+0:2        Loop with condition tested first
+0:2          No loop condition
+0:2          No loop body
+0:5  Function Definition: f1(vf4; ( temp void)
+0:5    Function Parameters: 
+0:5      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:6      Sequence
+0:6        Pre-Increment ( temp 4-component vector of float)
+0:6          'input' ( in 4-component vector of float)
 0:6        Loop with condition tested first
-0:6          Loop Condition
-0:6          any ( temp bool)
-0:6            NotEqual ( temp 4-component vector of bool)
-0:6              'input' ( in 4-component vector of float)
-0:6              'input' ( in 4-component vector of float)
-0:6          Loop Body
-0:?           Sequence
-0:6            Branch: Return with expression
-0:6              Negate value ( temp 4-component vector of float)
-0:6                'input' ( in 4-component vector of float)
-0:7      Sequence
-0:7        Pre-Decrement ( temp 4-component vector of float)
-0:7          'input' ( in 4-component vector of float)
-0:7        Loop with condition tested first
-0:7          Loop Condition
-0:7          any ( temp bool)
-0:7            NotEqual ( temp 4-component vector of bool)
-0:7              'input' ( in 4-component vector of float)
-0:7              'input' ( in 4-component vector of float)
-0:7          Loop Body
-0:?           Sequence
-0:7            Branch: Return with expression
-0:7              Negate value ( temp 4-component vector of float)
-0:7                'input' ( in 4-component vector of float)
-0:7          Loop Terminal Expression
-0:7          add second child into first child ( temp 4-component vector of float)
-0:7            'input' ( in 4-component vector of float)
-0:7            Constant:
-0:7              2.000000
+0:6          No loop condition
+0:6          No loop body
+0:9  Function Definition: f2(vf4; ( temp void)
+0:9    Function Parameters: 
+0:9      'input' ( in 4-component vector of float)
+0:?     Sequence
 0:?       Sequence
-0:8        Loop with condition tested first
-0:8          No loop condition
-0:8          Loop Body
-0:8          Test condition and select ( temp void)
-0:8            Condition
-0:8            Compare Greater Than ( temp bool)
-0:8              direct index ( temp float)
-0:8                'input' ( in 4-component vector of float)
-0:8                Constant:
-0:8                  0 (const int)
-0:8              Constant:
-0:8                2.000000
-0:8            true case
-0:8            Branch: Break
+0:10        Loop with condition tested first: Unroll
+0:10          Loop Condition
+0:10          any ( temp bool)
+0:10            NotEqual ( temp 4-component vector of bool)
+0:10              'input' ( in 4-component vector of float)
+0:10              'input' ( in 4-component vector of float)
+0:10          No loop body
+0:13  Function Definition: f3(vf4; ( temp float)
+0:13    Function Parameters: 
+0:13      'input' ( in 4-component vector of float)
+0:?     Sequence
 0:?       Sequence
-0:9        Loop with condition tested first
-0:9          No loop condition
-0:9          Loop Body
-0:9          Test condition and select ( temp void)
-0:9            Condition
-0:9            Compare Greater Than ( temp bool)
-0:9              direct index ( temp float)
-0:9                'input' ( in 4-component vector of float)
-0:9                Constant:
-0:9                  0 (const int)
-0:9              Constant:
-0:9                2.000000
-0:9            true case
-0:9            Branch: Continue
-0:11      Sequence
-0:11        move second child to first child ( temp int)
-0:11          'ii' ( temp int)
-0:11          Constant:
-0:11            -1 (const int)
-0:11        Loop with condition tested first
-0:11          Loop Condition
-0:11          Compare Less Than ( temp bool)
-0:11            'ii' ( temp int)
-0:11            Constant:
-0:11              3 (const int)
-0:11          Loop Body
-0:11          Test condition and select ( temp void)
-0:11            Condition
-0:11            Compare Equal ( temp bool)
-0:11              'ii' ( temp int)
-0:11              Constant:
-0:11                2 (const int)
-0:11            true case
-0:11            Branch: Continue
-0:11          Loop Terminal Expression
-0:11          Pre-Increment ( temp int)
-0:11            'ii' ( temp int)
-0:12      Pre-Decrement ( temp float)
-0:12        'ii' ( temp float)
-0:13      Sequence
-0:13        move second child to first child ( temp int)
-0:13          'first' ( temp int)
-0:13          Constant:
-0:13            0 (const int)
-0:13        move second child to first child ( temp int)
-0:13          'second' ( temp int)
-0:13          Constant:
-0:13            1 (const int)
-0:13        Loop with condition tested first
-0:13          No loop condition
-0:13          Loop Body
-0:13          add ( temp int)
-0:13            'first' ( temp int)
-0:13            'second' ( temp int)
-0:14      Sequence
-0:14        move second child to first child ( temp int)
-0:14          'i' ( temp int)
-0:14          Constant:
-0:14            0 (const int)
-0:14        move second child to first child ( temp int)
-0:14          'count' ( temp int)
-0:14          Convert float to int ( temp int)
-0:14            'ii' ( temp float)
 0:14        Loop with condition tested first
 0:14          Loop Condition
-0:14          Compare Less Than ( temp bool)
-0:14            'i' ( temp int)
-0:14            'count' ( temp int)
-0:14          No loop body
-0:14          Loop Terminal Expression
-0:14          Post-Increment ( temp int)
-0:14            'i' ( temp int)
-0:15      Sequence
-0:15        move second child to first child ( temp float)
-0:15          'first' ( temp float)
-0:15          Constant:
-0:15            0.000000
-0:15        Loop with condition tested first
-0:15          Loop Condition
-0:15          Compare Less Than ( temp bool)
-0:15            'first' ( temp float)
-0:15            direct index ( temp float)
-0:15              'second' ( temp 2-element array of float)
-0:15              Constant:
-0:15                0 (const int)
-0:15          Loop Body
-0:15          add ( temp float)
-0:15            add ( temp float)
-0:15              'first' ( temp float)
-0:15              direct index ( temp float)
-0:15                'second' ( temp 2-element array of float)
-0:15                Constant:
-0:15                  1 (const int)
-0:15            'third' ( temp float)
-0:15          Loop Terminal Expression
-0:15          Pre-Increment ( temp float)
-0:15            direct index ( temp float)
-0:15              'second' ( temp 2-element array of float)
-0:15              Constant:
-0:15                1 (const int)
-0:?       Sequence
-0:16        Comma ( temp float)
-0:16          Comma ( temp float)
-0:16            Pre-Decrement ( temp float)
-0:16              'ii' ( temp float)
-0:16            Pre-Decrement ( temp float)
-0:16              'ii' ( temp float)
-0:16          Pre-Decrement ( temp float)
-0:16            'ii' ( temp float)
-0:16        Loop with condition tested first
-0:16          No loop condition
-0:16          Loop Body
-0:16          'ii' ( temp float)
-0:2  Function Definition: PixelShaderFunction( ( temp void)
-0:2    Function Parameters: 
+0:14          any ( temp bool)
+0:14            NotEqual ( temp 4-component vector of bool)
+0:14              'input' ( in 4-component vector of float)
+0:14              'input' ( in 4-component vector of float)
+0:14          Loop Body
+0:?           Sequence
+0:14            Branch: Return with expression
+0:14              Construct float ( temp float)
+0:14                Negate value ( temp 4-component vector of float)
+0:14                  'input' ( in 4-component vector of float)
+0:17  Function Definition: f4(vf4; ( temp float)
+0:17    Function Parameters: 
+0:17      'input' ( in 4-component vector of float)
 0:?     Sequence
-0:2      move second child to first child ( temp 4-component vector of float)
+0:18      Sequence
+0:18        Pre-Decrement ( temp 4-component vector of float)
+0:18          'input' ( in 4-component vector of float)
+0:18        Loop with condition tested first
+0:18          Loop Condition
+0:18          any ( temp bool)
+0:18            NotEqual ( temp 4-component vector of bool)
+0:18              'input' ( in 4-component vector of float)
+0:18              'input' ( in 4-component vector of float)
+0:18          Loop Body
+0:?           Sequence
+0:18            Branch: Return with expression
+0:18              Construct float ( temp float)
+0:18                Negate value ( temp 4-component vector of float)
+0:18                  'input' ( in 4-component vector of float)
+0:18          Loop Terminal Expression
+0:18          add second child into first child ( temp 4-component vector of float)
+0:18            'input' ( in 4-component vector of float)
+0:18            Constant:
+0:18              2.000000
+0:21  Function Definition: f5(vf4; ( temp void)
+0:21    Function Parameters: 
+0:21      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:?       Sequence
+0:22        Loop with condition tested first
+0:22          No loop condition
+0:22          Loop Body
+0:22          Test condition and select ( temp void)
+0:22            Condition
+0:22            Compare Greater Than ( temp bool)
+0:22              direct index ( temp float)
+0:22                'input' ( in 4-component vector of float)
+0:22                Constant:
+0:22                  0 (const int)
+0:22              Constant:
+0:22                2.000000
+0:22            true case
+0:22            Branch: Break
+0:25  Function Definition: f6(vf4; ( temp void)
+0:25    Function Parameters: 
+0:25      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:?       Sequence
+0:26        Loop with condition tested first
+0:26          No loop condition
+0:26          Loop Body
+0:26          Test condition and select ( temp void)
+0:26            Condition
+0:26            Compare Greater Than ( temp bool)
+0:26              direct index ( temp float)
+0:26                'input' ( in 4-component vector of float)
+0:26                Constant:
+0:26                  0 (const int)
+0:26              Constant:
+0:26                2.000000
+0:26            true case
+0:26            Branch: Continue
+0:29  Function Definition: f99( ( temp void)
+0:29    Function Parameters: 
+0:?     Sequence
+0:30      Sequence
+0:30        move second child to first child ( temp int)
+0:30          'first' ( temp int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        move second child to first child ( temp int)
+0:30          'second' ( temp int)
+0:30          Constant:
+0:30            1 (const int)
+0:30        Loop with condition tested first
+0:30          No loop condition
+0:30          Loop Body
+0:30          add ( temp int)
+0:30            'first' ( temp int)
+0:30            'second' ( temp int)
+0:33  Function Definition: f100(f1; ( temp void)
+0:33    Function Parameters: 
+0:33      'ii' ( in float)
+0:?     Sequence
+0:?       Sequence
+0:34        Comma ( temp float)
+0:34          Comma ( temp float)
+0:34            Pre-Decrement ( temp float)
+0:34              'ii' ( in float)
+0:34            Pre-Decrement ( temp float)
+0:34              'ii' ( in float)
+0:34          Pre-Decrement ( temp float)
+0:34            'ii' ( in float)
+0:34        Loop with condition tested first
+0:34          No loop condition
+0:34          Loop Body
+0:34          'ii' ( in float)
+0:38  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:38    Function Parameters: 
+0:38      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:39      Function Call: f0( ( temp void)
+0:40      Function Call: f1(vf4; ( temp void)
+0:40        'input' ( in 4-component vector of float)
+0:41      Function Call: f2(vf4; ( temp void)
+0:41        'input' ( in 4-component vector of float)
+0:42      Function Call: f3(vf4; ( temp float)
+0:42        'input' ( in 4-component vector of float)
+0:43      Function Call: f4(vf4; ( temp float)
+0:43        'input' ( in 4-component vector of float)
+0:44      Function Call: f5(vf4; ( temp void)
+0:44        'input' ( in 4-component vector of float)
+0:45      Function Call: f6(vf4; ( temp void)
+0:45        'input' ( in 4-component vector of float)
+0:48      Sequence
+0:48        move second child to first child ( temp int)
+0:48          'ii' ( temp int)
+0:48          Constant:
+0:48            -1 (const int)
+0:48        Loop with condition tested first
+0:48          Loop Condition
+0:48          Compare Less Than ( temp bool)
+0:48            'ii' ( temp int)
+0:48            Constant:
+0:48              3 (const int)
+0:48          Loop Body
+0:48          Test condition and select ( temp void)
+0:48            Condition
+0:48            Compare Equal ( temp bool)
+0:48              'ii' ( temp int)
+0:48              Constant:
+0:48                2 (const int)
+0:48            true case
+0:48            Branch: Continue
+0:48          Loop Terminal Expression
+0:48          Pre-Increment ( temp int)
+0:48            'ii' ( temp int)
+0:49      Pre-Decrement ( temp float)
+0:49        'ii' ( temp float)
+0:51      Function Call: f99( ( temp void)
+0:53      Sequence
+0:53        move second child to first child ( temp int)
+0:53          'i' ( temp int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        move second child to first child ( temp int)
+0:53          'count' ( temp int)
+0:53          Convert float to int ( temp int)
+0:53            'ii' ( temp float)
+0:53        Loop with condition tested first
+0:53          Loop Condition
+0:53          Compare Less Than ( temp bool)
+0:53            'i' ( temp int)
+0:53            'count' ( temp int)
+0:53          No loop body
+0:53          Loop Terminal Expression
+0:53          Post-Increment ( temp int)
+0:53            'i' ( temp int)
+0:54      Sequence
+0:54        move second child to first child ( temp float)
+0:54          'first' ( temp float)
+0:54          Constant:
+0:54            0.000000
+0:54        Loop with condition tested first
+0:54          Loop Condition
+0:54          Compare Less Than ( temp bool)
+0:54            'first' ( temp float)
+0:54            direct index ( temp float)
+0:54              'second' ( temp 2-element array of float)
+0:54              Constant:
+0:54                0 (const int)
+0:54          Loop Body
+0:54          add ( temp float)
+0:54            add ( temp float)
+0:54              'first' ( temp float)
+0:54              direct index ( temp float)
+0:54                'second' ( temp 2-element array of float)
+0:54                Constant:
+0:54                  1 (const int)
+0:54            'third' ( temp float)
+0:54          Loop Terminal Expression
+0:54          Pre-Increment ( temp float)
+0:54            direct index ( temp float)
+0:54              'second' ( temp 2-element array of float)
+0:54              Constant:
+0:54                1 (const int)
+0:56      Function Call: f100(f1; ( temp void)
+0:56        'ii' ( temp float)
+0:58      Branch: Return with expression
+0:58        'input' ( in 4-component vector of float)
+0:38  Function Definition: PixelShaderFunction( ( temp void)
+0:38    Function Parameters: 
+0:?     Sequence
+0:38      move second child to first child ( temp 4-component vector of float)
 0:?         'input' ( temp 4-component vector of float)
 0:?         'input' (layout( location=0) in 4-component vector of float)
-0:2      move second child to first child ( temp 4-component vector of float)
+0:38      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:38        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
 0:?           'input' ( temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 183
+// Generated by (magic number): 80008
+// Id's are bound by 240
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 176 179
+                              EntryPoint Fragment 4  "PixelShaderFunction" 233 236
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
-                              Name 11  "@PixelShaderFunction(vf4;"
-                              Name 10  "input"
-                              Name 92  "ii"
-                              Name 111  "ii"
-                              Name 114  "first"
-                              Name 116  "second"
-                              Name 124  "i"
-                              Name 125  "count"
-                              Name 138  "first"
-                              Name 149  "second"
-                              Name 157  "third"
-                              Name 174  "input"
-                              Name 176  "input"
-                              Name 179  "@entryPointOutput"
-                              Name 180  "param"
-                              Decorate 176(input) Location 0
-                              Decorate 179(@entryPointOutput) Location 0
+                              Name 6  "f0("
+                              Name 13  "f1(vf4;"
+                              Name 12  "input"
+                              Name 16  "f2(vf4;"
+                              Name 15  "input"
+                              Name 20  "f3(vf4;"
+                              Name 19  "input"
+                              Name 23  "f4(vf4;"
+                              Name 22  "input"
+                              Name 26  "f5(vf4;"
+                              Name 25  "input"
+                              Name 29  "f6(vf4;"
+                              Name 28  "input"
+                              Name 31  "f99("
+                              Name 36  "f100(f1;"
+                              Name 35  "ii"
+                              Name 40  "@PixelShaderFunction(vf4;"
+                              Name 39  "input"
+                              Name 124  "first"
+                              Name 126  "second"
+                              Name 146  "param"
+                              Name 149  "param"
+                              Name 152  "param"
+                              Name 155  "param"
+                              Name 158  "param"
+                              Name 161  "param"
+                              Name 164  "ii"
+                              Name 182  "ii"
+                              Name 186  "i"
+                              Name 187  "count"
+                              Name 200  "first"
+                              Name 211  "second"
+                              Name 219  "third"
+                              Name 225  "param"
+                              Name 231  "input"
+                              Name 233  "input"
+                              Name 236  "@entryPointOutput"
+                              Name 237  "param"
+                              Decorate 233(input) Location 0
+                              Decorate 236(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeFloat 32
-               7:             TypeVector 6(float) 4
-               8:             TypePointer Function 7(fvec4)
-               9:             TypeFunction 7(fvec4) 8(ptr)
-              18:    6(float) Constant 1065353216
-              32:             TypeBool
-              33:             TypeVector 32(bool) 4
-              63:    6(float) Constant 1073741824
-              71:             TypeInt 32 0
-              72:     71(int) Constant 0
-              73:             TypePointer Function 6(float)
-              90:             TypeInt 32 1
-              91:             TypePointer Function 90(int)
-              93:     90(int) Constant 4294967295
-             100:     90(int) Constant 3
-             103:     90(int) Constant 2
-             109:     90(int) Constant 1
-             115:     90(int) Constant 0
-             139:    6(float) Constant 0
-             146:     71(int) Constant 2
-             147:             TypeArray 6(float) 146
-             148:             TypePointer Function 147
-             175:             TypePointer Input 7(fvec4)
-      176(input):    175(ptr) Variable Input
-             178:             TypePointer Output 7(fvec4)
-179(@entryPointOutput):    178(ptr) Variable Output
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 4
+              10:             TypePointer Function 9(fvec4)
+              11:             TypeFunction 2 10(ptr)
+              18:             TypeFunction 8(float) 10(ptr)
+              33:             TypePointer Function 8(float)
+              34:             TypeFunction 2 33(ptr)
+              38:             TypeFunction 9(fvec4) 10(ptr)
+              47:    8(float) Constant 1065353216
+              61:             TypeBool
+              62:             TypeVector 61(bool) 4
+              95:    8(float) Constant 1073741824
+             104:             TypeInt 32 0
+             105:    104(int) Constant 0
+             122:             TypeInt 32 1
+             123:             TypePointer Function 122(int)
+             125:    122(int) Constant 0
+             127:    122(int) Constant 1
+             165:    122(int) Constant 4294967295
+             172:    122(int) Constant 3
+             175:    122(int) Constant 2
+             201:    8(float) Constant 0
+             208:    104(int) Constant 2
+             209:             TypeArray 8(float) 208
+             210:             TypePointer Function 209
+             232:             TypePointer Input 9(fvec4)
+      233(input):    232(ptr) Variable Input
+             235:             TypePointer Output 9(fvec4)
+236(@entryPointOutput):    235(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-      174(input):      8(ptr) Variable Function
-      180(param):      8(ptr) Variable Function
-             177:    7(fvec4) Load 176(input)
-                              Store 174(input) 177
-             181:    7(fvec4) Load 174(input)
-                              Store 180(param) 181
-             182:    7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 180(param)
-                              Store 179(@entryPointOutput) 182
+      231(input):     10(ptr) Variable Function
+      237(param):     10(ptr) Variable Function
+             234:    9(fvec4) Load 233(input)
+                              Store 231(input) 234
+             238:    9(fvec4) Load 231(input)
+                              Store 237(param) 238
+             239:    9(fvec4) FunctionCall 40(@PixelShaderFunction(vf4;) 237(param)
+                              Store 236(@entryPointOutput) 239
                               Return
                               FunctionEnd
-11(@PixelShaderFunction(vf4;):    7(fvec4) Function None 9
-       10(input):      8(ptr) FunctionParameter
-              12:             Label
-          92(ii):     91(ptr) Variable Function
-         111(ii):     73(ptr) Variable Function
-      114(first):     91(ptr) Variable Function
-     116(second):     91(ptr) Variable Function
-          124(i):     91(ptr) Variable Function
-      125(count):     91(ptr) Variable Function
-      138(first):     73(ptr) Variable Function
-     149(second):    148(ptr) Variable Function
-      157(third):     73(ptr) Variable Function
-                              Branch 13
-              13:             Label
-                              LoopMerge 15 16 None
-                              Branch 14
+          6(f0():           2 Function None 3
+               7:             Label
+                              Branch 42
+              42:             Label
+                              LoopMerge 44 45 None
+                              Branch 43
+              43:             Label
+                              Branch 45
+              45:             Label
+                              Branch 42
+              44:             Label
+                              Unreachable
+                              FunctionEnd
+     13(f1(vf4;):           2 Function None 11
+       12(input):     10(ptr) FunctionParameter
               14:             Label
-                              Branch 16
-              16:             Label
-                              Branch 13
-              15:             Label
-              17:    7(fvec4) Load 10(input)
-              19:    7(fvec4) CompositeConstruct 18 18 18 18
-              20:    7(fvec4) FAdd 17 19
-                              Store 10(input) 20
-                              Branch 21
-              21:             Label
-                              LoopMerge 23 24 None
-                              Branch 22
-              22:             Label
-                              Branch 24
-              24:             Label
-                              Branch 21
-              23:             Label
-                              Branch 25
-              25:             Label
-                              LoopMerge 27 28 Unroll 
-                              Branch 29
-              29:             Label
-              30:    7(fvec4) Load 10(input)
-              31:    7(fvec4) Load 10(input)
-              34:   33(bvec4) FOrdNotEqual 30 31
-              35:    32(bool) Any 34
-                              BranchConditional 35 26 27
-              26:               Label
-                                Branch 28
-              28:               Label
-                                Branch 25
-              27:             Label
-                              Branch 36
-              36:             Label
-                              LoopMerge 38 39 None
-                              Branch 40
-              40:             Label
-              41:    7(fvec4) Load 10(input)
-              42:    7(fvec4) Load 10(input)
-              43:   33(bvec4) FOrdNotEqual 41 42
-              44:    32(bool) Any 43
-                              BranchConditional 44 37 38
-              37:               Label
-              45:    7(fvec4)   Load 10(input)
-              46:    7(fvec4)   FNegate 45
-                                ReturnValue 46
-              39:               Label
-                                Branch 36
-              38:             Label
-              48:    7(fvec4) Load 10(input)
-              49:    7(fvec4) CompositeConstruct 18 18 18 18
-              50:    7(fvec4) FSub 48 49
-                              Store 10(input) 50
+              46:    9(fvec4) Load 12(input)
+              48:    9(fvec4) CompositeConstruct 47 47 47 47
+              49:    9(fvec4) FAdd 46 48
+                              Store 12(input) 49
+                              Branch 50
+              50:             Label
+                              LoopMerge 52 53 None
                               Branch 51
               51:             Label
-                              LoopMerge 53 54 None
-                              Branch 55
-              55:             Label
-              56:    7(fvec4) Load 10(input)
-              57:    7(fvec4) Load 10(input)
-              58:   33(bvec4) FOrdNotEqual 56 57
-              59:    32(bool) Any 58
-                              BranchConditional 59 52 53
-              52:               Label
-              60:    7(fvec4)   Load 10(input)
-              61:    7(fvec4)   FNegate 60
-                                ReturnValue 61
-              54:               Label
-              64:    7(fvec4)   Load 10(input)
-              65:    7(fvec4)   CompositeConstruct 63 63 63 63
-              66:    7(fvec4)   FAdd 64 65
-                                Store 10(input) 66
-                                Branch 51
+                              Branch 53
               53:             Label
-                              Branch 67
-              67:             Label
-                              LoopMerge 69 70 None
-                              Branch 68
-              68:             Label
-              74:     73(ptr) AccessChain 10(input) 72
-              75:    6(float) Load 74
-              76:    32(bool) FOrdGreaterThan 75 63
-                              SelectionMerge 78 None
-                              BranchConditional 76 77 78
-              77:               Label
-                                Branch 69
-              78:             Label
-                              Branch 70
-              70:             Label
-                              Branch 67
+                              Branch 50
+              52:             Label
+                              Unreachable
+                              FunctionEnd
+     16(f2(vf4;):           2 Function None 11
+       15(input):     10(ptr) FunctionParameter
+              17:             Label
+                              Branch 54
+              54:             Label
+                              LoopMerge 56 57 Unroll 
+                              Branch 58
+              58:             Label
+              59:    9(fvec4) Load 15(input)
+              60:    9(fvec4) Load 15(input)
+              63:   62(bvec4) FOrdNotEqual 59 60
+              64:    61(bool) Any 63
+                              BranchConditional 64 55 56
+              55:               Label
+                                Branch 57
+              57:               Label
+                                Branch 54
+              56:             Label
+                              Return
+                              FunctionEnd
+     20(f3(vf4;):    8(float) Function None 18
+       19(input):     10(ptr) FunctionParameter
+              21:             Label
+                              Branch 65
+              65:             Label
+                              LoopMerge 67 68 None
+                              Branch 69
               69:             Label
-                              Branch 80
-              80:             Label
-                              LoopMerge 82 83 None
-                              Branch 81
-              81:             Label
-              84:     73(ptr) AccessChain 10(input) 72
-              85:    6(float) Load 84
-              86:    32(bool) FOrdGreaterThan 85 63
-                              SelectionMerge 88 None
-                              BranchConditional 86 87 88
-              87:               Label
-                                Branch 83
-              88:             Label
-                              Branch 83
-              83:             Label
-                              Branch 80
+              70:    9(fvec4) Load 19(input)
+              71:    9(fvec4) Load 19(input)
+              72:   62(bvec4) FOrdNotEqual 70 71
+              73:    61(bool) Any 72
+                              BranchConditional 73 66 67
+              66:               Label
+              74:    9(fvec4)   Load 19(input)
+              75:    9(fvec4)   FNegate 74
+              76:    8(float)   CompositeExtract 75 0
+                                ReturnValue 76
+              68:               Label
+                                Branch 65
+              67:             Label
+              78:    8(float) Undef
+                              ReturnValue 78
+                              FunctionEnd
+     23(f4(vf4;):    8(float) Function None 18
+       22(input):     10(ptr) FunctionParameter
+              24:             Label
+              79:    9(fvec4) Load 22(input)
+              80:    9(fvec4) CompositeConstruct 47 47 47 47
+              81:    9(fvec4) FSub 79 80
+                              Store 22(input) 81
+                              Branch 82
               82:             Label
-                              Store 92(ii) 93
-                              Branch 94
-              94:             Label
-                              LoopMerge 96 97 None
-                              Branch 98
-              98:             Label
-              99:     90(int) Load 92(ii)
-             101:    32(bool) SLessThan 99 100
-                              BranchConditional 101 95 96
-              95:               Label
-             102:     90(int)   Load 92(ii)
-             104:    32(bool)   IEqual 102 103
-                                SelectionMerge 106 None
-                                BranchConditional 104 105 106
-             105:                 Label
-                                  Branch 97
-             106:               Label
-                                Branch 97
-              97:               Label
-             108:     90(int)   Load 92(ii)
-             110:     90(int)   IAdd 108 109
-                                Store 92(ii) 110
-                                Branch 94
-              96:             Label
-             112:    6(float) Load 111(ii)
-             113:    6(float) FSub 112 18
-                              Store 111(ii) 113
-                              Store 114(first) 115
-                              Store 116(second) 109
-                              Branch 117
-             117:             Label
-                              LoopMerge 119 120 None
-                              Branch 118
-             118:             Label
-             121:     90(int) Load 114(first)
-             122:     90(int) Load 116(second)
-             123:     90(int) IAdd 121 122
-                              Branch 120
+                              LoopMerge 84 85 None
+                              Branch 86
+              86:             Label
+              87:    9(fvec4) Load 22(input)
+              88:    9(fvec4) Load 22(input)
+              89:   62(bvec4) FOrdNotEqual 87 88
+              90:    61(bool) Any 89
+                              BranchConditional 90 83 84
+              83:               Label
+              91:    9(fvec4)   Load 22(input)
+              92:    9(fvec4)   FNegate 91
+              93:    8(float)   CompositeExtract 92 0
+                                ReturnValue 93
+              85:               Label
+                                Branch 82
+              84:             Label
+              99:    8(float) Undef
+                              ReturnValue 99
+                              FunctionEnd
+     26(f5(vf4;):           2 Function None 11
+       25(input):     10(ptr) FunctionParameter
+              27:             Label
+                              Branch 100
+             100:             Label
+                              LoopMerge 102 103 None
+                              Branch 101
+             101:             Label
+             106:     33(ptr) AccessChain 25(input) 105
+             107:    8(float) Load 106
+             108:    61(bool) FOrdGreaterThan 107 95
+                              SelectionMerge 110 None
+                              BranchConditional 108 109 110
+             109:               Label
+                                Branch 102
+             110:             Label
+                              Branch 103
+             103:             Label
+                              Branch 100
+             102:             Label
+                              Return
+                              FunctionEnd
+     29(f6(vf4;):           2 Function None 11
+       28(input):     10(ptr) FunctionParameter
+              30:             Label
+                              Branch 112
+             112:             Label
+                              LoopMerge 114 115 None
+                              Branch 113
+             113:             Label
+             116:     33(ptr) AccessChain 28(input) 105
+             117:    8(float) Load 116
+             118:    61(bool) FOrdGreaterThan 117 95
+                              SelectionMerge 120 None
+                              BranchConditional 118 119 120
+             119:               Label
+                                Branch 115
              120:             Label
-                              Branch 117
-             119:             Label
-                              Store 124(i) 115
-             126:    6(float) Load 111(ii)
-             127:     90(int) ConvertFToS 126
-                              Store 125(count) 127
+                              Branch 115
+             115:             Label
+                              Branch 112
+             114:             Label
+                              Unreachable
+                              FunctionEnd
+        31(f99():           2 Function None 3
+              32:             Label
+      124(first):    123(ptr) Variable Function
+     126(second):    123(ptr) Variable Function
+                              Store 124(first) 125
+                              Store 126(second) 127
                               Branch 128
              128:             Label
                               LoopMerge 130 131 None
-                              Branch 132
-             132:             Label
-             133:     90(int) Load 124(i)
-             134:     90(int) Load 125(count)
-             135:    32(bool) SLessThan 133 134
-                              BranchConditional 135 129 130
-             129:               Label
-                                Branch 131
-             131:               Label
-             136:     90(int)   Load 124(i)
-             137:     90(int)   IAdd 136 109
-                                Store 124(i) 137
-                                Branch 128
+                              Branch 129
+             129:             Label
+             132:    122(int) Load 124(first)
+             133:    122(int) Load 126(second)
+             134:    122(int) IAdd 132 133
+                              Branch 131
+             131:             Label
+                              Branch 128
              130:             Label
-                              Store 138(first) 139
-                              Branch 140
-             140:             Label
-                              LoopMerge 142 143 None
+                              Unreachable
+                              FunctionEnd
+    36(f100(f1;):           2 Function None 34
+          35(ii):     33(ptr) FunctionParameter
+              37:             Label
+             135:    8(float) Load 35(ii)
+             136:    8(float) FSub 135 47
+                              Store 35(ii) 136
+             137:    8(float) Load 35(ii)
+             138:    8(float) FSub 137 47
+                              Store 35(ii) 138
+             139:    8(float) Load 35(ii)
+             140:    8(float) FSub 139 47
+                              Store 35(ii) 140
+                              Branch 141
+             141:             Label
+                              LoopMerge 143 144 None
+                              Branch 142
+             142:             Label
                               Branch 144
              144:             Label
-             145:    6(float) Load 138(first)
-             150:     73(ptr) AccessChain 149(second) 115
-             151:    6(float) Load 150
-             152:    32(bool) FOrdLessThan 145 151
-                              BranchConditional 152 141 142
-             141:               Label
-             153:    6(float)   Load 138(first)
-             154:     73(ptr)   AccessChain 149(second) 109
-             155:    6(float)   Load 154
-             156:    6(float)   FAdd 153 155
-             158:    6(float)   Load 157(third)
-             159:    6(float)   FAdd 156 158
-                                Branch 143
-             143:               Label
-             160:     73(ptr)   AccessChain 149(second) 109
-             161:    6(float)   Load 160
-             162:    6(float)   FAdd 161 18
-                                Store 160 162
-                                Branch 140
-             142:             Label
-             163:    6(float) Load 111(ii)
-             164:    6(float) FSub 163 18
-                              Store 111(ii) 164
-             165:    6(float) Load 111(ii)
-             166:    6(float) FSub 165 18
-                              Store 111(ii) 166
-             167:    6(float) Load 111(ii)
-             168:    6(float) FSub 167 18
-                              Store 111(ii) 168
-                              Branch 169
-             169:             Label
-                              LoopMerge 171 172 None
+                              Branch 141
+             143:             Label
+                              Unreachable
+                              FunctionEnd
+40(@PixelShaderFunction(vf4;):    9(fvec4) Function None 38
+       39(input):     10(ptr) FunctionParameter
+              41:             Label
+      146(param):     10(ptr) Variable Function
+      149(param):     10(ptr) Variable Function
+      152(param):     10(ptr) Variable Function
+      155(param):     10(ptr) Variable Function
+      158(param):     10(ptr) Variable Function
+      161(param):     10(ptr) Variable Function
+         164(ii):    123(ptr) Variable Function
+         182(ii):     33(ptr) Variable Function
+          186(i):    123(ptr) Variable Function
+      187(count):    123(ptr) Variable Function
+      200(first):     33(ptr) Variable Function
+     211(second):    210(ptr) Variable Function
+      219(third):     33(ptr) Variable Function
+      225(param):     33(ptr) Variable Function
+             145:           2 FunctionCall 6(f0()
+             147:    9(fvec4) Load 39(input)
+                              Store 146(param) 147
+             148:           2 FunctionCall 13(f1(vf4;) 146(param)
+             150:    9(fvec4) Load 39(input)
+                              Store 149(param) 150
+             151:           2 FunctionCall 16(f2(vf4;) 149(param)
+             153:    9(fvec4) Load 39(input)
+                              Store 152(param) 153
+             154:    8(float) FunctionCall 20(f3(vf4;) 152(param)
+             156:    9(fvec4) Load 39(input)
+                              Store 155(param) 156
+             157:    8(float) FunctionCall 23(f4(vf4;) 155(param)
+             159:    9(fvec4) Load 39(input)
+                              Store 158(param) 159
+             160:           2 FunctionCall 26(f5(vf4;) 158(param)
+             162:    9(fvec4) Load 39(input)
+                              Store 161(param) 162
+             163:           2 FunctionCall 29(f6(vf4;) 161(param)
+                              Store 164(ii) 165
+                              Branch 166
+             166:             Label
+                              LoopMerge 168 169 None
                               Branch 170
              170:             Label
-                              Branch 172
-             172:             Label
-                              Branch 169
-             171:             Label
-             173:    7(fvec4) Undef
-                              ReturnValue 173
+             171:    122(int) Load 164(ii)
+             173:    61(bool) SLessThan 171 172
+                              BranchConditional 173 167 168
+             167:               Label
+             174:    122(int)   Load 164(ii)
+             176:    61(bool)   IEqual 174 175
+                                SelectionMerge 178 None
+                                BranchConditional 176 177 178
+             177:                 Label
+                                  Branch 169
+             178:               Label
+                                Branch 169
+             169:               Label
+             180:    122(int)   Load 164(ii)
+             181:    122(int)   IAdd 180 127
+                                Store 164(ii) 181
+                                Branch 166
+             168:             Label
+             183:    8(float) Load 182(ii)
+             184:    8(float) FSub 183 47
+                              Store 182(ii) 184
+             185:           2 FunctionCall 31(f99()
+                              Store 186(i) 125
+             188:    8(float) Load 182(ii)
+             189:    122(int) ConvertFToS 188
+                              Store 187(count) 189
+                              Branch 190
+             190:             Label
+                              LoopMerge 192 193 None
+                              Branch 194
+             194:             Label
+             195:    122(int) Load 186(i)
+             196:    122(int) Load 187(count)
+             197:    61(bool) SLessThan 195 196
+                              BranchConditional 197 191 192
+             191:               Label
+                                Branch 193
+             193:               Label
+             198:    122(int)   Load 186(i)
+             199:    122(int)   IAdd 198 127
+                                Store 186(i) 199
+                                Branch 190
+             192:             Label
+                              Store 200(first) 201
+                              Branch 202
+             202:             Label
+                              LoopMerge 204 205 None
+                              Branch 206
+             206:             Label
+             207:    8(float) Load 200(first)
+             212:     33(ptr) AccessChain 211(second) 125
+             213:    8(float) Load 212
+             214:    61(bool) FOrdLessThan 207 213
+                              BranchConditional 214 203 204
+             203:               Label
+             215:    8(float)   Load 200(first)
+             216:     33(ptr)   AccessChain 211(second) 127
+             217:    8(float)   Load 216
+             218:    8(float)   FAdd 215 217
+             220:    8(float)   Load 219(third)
+             221:    8(float)   FAdd 218 220
+                                Branch 205
+             205:               Label
+             222:     33(ptr)   AccessChain 211(second) 127
+             223:    8(float)   Load 222
+             224:    8(float)   FAdd 223 47
+                                Store 222 224
+                                Branch 202
+             204:             Label
+             226:    8(float) Load 182(ii)
+                              Store 225(param) 226
+             227:           2 FunctionCall 36(f100(f1;) 225(param)
+             228:    9(fvec4) Load 39(input)
+                              ReturnValue 228
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.format.rwtexture.frag.out b/Test/baseResults/hlsl.format.rwtexture.frag.out
new file mode 100644
index 0000000..699dafe
--- /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): 80008
+// 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/hlsl.fraggeom.frag.out b/Test/baseResults/hlsl.fraggeom.frag.out
index af3564d..7509ddc 100644
--- a/Test/baseResults/hlsl.fraggeom.frag.out
+++ b/Test/baseResults/hlsl.fraggeom.frag.out
@@ -64,7 +64,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.array.dx10.frag.out b/Test/baseResults/hlsl.gather.array.dx10.frag.out
index 32d27ab..b954c2b 100644
--- a/Test/baseResults/hlsl.gather.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.array.dx10.frag.out
@@ -262,7 +262,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 124
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.frag.out b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
index 57e4499..530bccd 100644
--- a/Test/baseResults/hlsl.gather.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
@@ -258,7 +258,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 135
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.vert.out b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
index a0c8d15..de745d1 100644
--- a/Test/baseResults/hlsl.gather.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
@@ -220,7 +220,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 126
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.offset.dx10.frag.out b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
index 85ba294..3a89712 100644
--- a/Test/baseResults/hlsl.gather.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
@@ -208,7 +208,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 114
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
index c73547e..3601187 100644
--- a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
@@ -202,7 +202,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 97
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
index ac6c817..c2a4901 100644
--- a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
@@ -750,7 +750,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 255
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
index 8617d70..8bb01d5 100644
--- a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
@@ -758,7 +758,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 265
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
index 4a0d77a..a777678 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
@@ -1263,7 +1263,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 399
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
index c9740b0..2acc975 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
@@ -1255,7 +1255,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 389
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
index 5e2d422..8ad84cd 100644
--- a/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
@@ -456,7 +456,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 164
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
index eb92fbb..cf406ed 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.frag.out
+++ b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
@@ -2318,7 +2318,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 550
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.vert.out b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
index cccdfeb..51368b6 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.vert.out
+++ b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
@@ -116,7 +116,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 48
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
index d8675a2..d096c38 100644
--- a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
+++ b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
@@ -718,7 +718,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 232
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
index d1e2844..7c46c8e 100644
--- a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
+++ b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
@@ -580,7 +580,7 @@
 0:?     'sample' (layout( location=0) flat in int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.global-const-init.frag.out b/Test/baseResults/hlsl.global-const-init.frag.out
index a1aa55b..828c0c5 100644
--- a/Test/baseResults/hlsl.global-const-init.frag.out
+++ b/Test/baseResults/hlsl.global-const-init.frag.out
@@ -102,7 +102,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.groupid.comp.out b/Test/baseResults/hlsl.groupid.comp.out
index a76db50..65804b7 100644
--- a/Test/baseResults/hlsl.groupid.comp.out
+++ b/Test/baseResults/hlsl.groupid.comp.out
@@ -82,7 +82,7 @@
 0:?     'vGroupId' ( in 3-component vector of uint WorkGroupID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gs-hs-mix.tesc.out b/Test/baseResults/hlsl.gs-hs-mix.tesc.out
index 4971371..ffa96b1 100644
--- a/Test/baseResults/hlsl.gs-hs-mix.tesc.out
+++ b/Test/baseResults/hlsl.gs-hs-mix.tesc.out
@@ -1,7 +1,6 @@
 hlsl.gs-hs-mix.tesc
 Shader version: 500
 vertices = 3
-input primitive = triangles
 vertex spacing = fractional_odd_spacing
 triangle order = ccw
 0:? Sequence
@@ -402,7 +401,6 @@
 
 Shader version: 500
 vertices = 3
-input primitive = triangles
 vertex spacing = fractional_odd_spacing
 triangle order = ccw
 0:? Sequence
@@ -798,7 +796,7 @@
 0:?     '@patchConstantOutput' (layout( location=1) patch out structure{ temp 3-element array of 3-component vector of float NormalWS})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 216
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hlslOffset.vert.out b/Test/baseResults/hlsl.hlslOffset.vert.out
index b0c0467..099318c 100644
--- a/Test/baseResults/hlsl.hlslOffset.vert.out
+++ b/Test/baseResults/hlsl.hlslOffset.vert.out
@@ -26,7 +26,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float m0, layout( row_major std140) uniform 3-component vector of float m4, layout( row_major std140) uniform float m16, layout( row_major std140 offset=20) uniform 3-component vector of float m20, layout( row_major std140 offset=36) uniform 3-component vector of float m36, layout( row_major std140 offset=56) uniform 2-component vector of float m56, layout( row_major std140) uniform float m64, layout( row_major std140) uniform 2-component vector of float m68, layout( row_major std140) uniform float m76, layout( row_major std140) uniform float m80, layout( row_major std140) uniform 1-element array of 2-component vector of float m96})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.hull.1.tesc.out b/Test/baseResults/hlsl.hull.1.tesc.out
index 1be1498..ca4417d 100644
--- a/Test/baseResults/hlsl.hull.1.tesc.out
+++ b/Test/baseResults/hlsl.hull.1.tesc.out
@@ -224,7 +224,7 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 89
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.2.tesc.out b/Test/baseResults/hlsl.hull.2.tesc.out
index c8218d2..70fc4f1 100644
--- a/Test/baseResults/hlsl.hull.2.tesc.out
+++ b/Test/baseResults/hlsl.hull.2.tesc.out
@@ -220,7 +220,7 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 91
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.3.tesc.out b/Test/baseResults/hlsl.hull.3.tesc.out
index 4ff0198..fba7fac 100644
--- a/Test/baseResults/hlsl.hull.3.tesc.out
+++ b/Test/baseResults/hlsl.hull.3.tesc.out
@@ -220,7 +220,7 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 91
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.4.tesc.out b/Test/baseResults/hlsl.hull.4.tesc.out
index a99730d..253bdc6 100644
--- a/Test/baseResults/hlsl.hull.4.tesc.out
+++ b/Test/baseResults/hlsl.hull.4.tesc.out
@@ -476,7 +476,7 @@
 0:?     '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 127
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
index 41f3c0a..2bf3c7c 100644
--- a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
+++ b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
@@ -396,7 +396,7 @@
 0:?     '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 124
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
index 986e110..62e48f7 100644
--- a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
+++ b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
@@ -414,7 +414,7 @@
 0:?     '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 126
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.void.tesc.out b/Test/baseResults/hlsl.hull.void.tesc.out
index c44c7e4..7c006db 100644
--- a/Test/baseResults/hlsl.hull.void.tesc.out
+++ b/Test/baseResults/hlsl.hull.void.tesc.out
@@ -108,7 +108,7 @@
 0:?     'InvocationId' ( in uint InvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 55
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.identifier.sample.frag.out b/Test/baseResults/hlsl.identifier.sample.frag.out
index a23451e..ddc4c51 100644
--- a/Test/baseResults/hlsl.identifier.sample.frag.out
+++ b/Test/baseResults/hlsl.identifier.sample.frag.out
@@ -86,7 +86,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.if.frag.out b/Test/baseResults/hlsl.if.frag.out
index 056b672..6b6de9c 100644
--- a/Test/baseResults/hlsl.if.frag.out
+++ b/Test/baseResults/hlsl.if.frag.out
@@ -2,104 +2,116 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
-0:2    Function Parameters: 
-0:2      'input' ( in 4-component vector of float)
+0:1  Function Definition: f0(vf4; ( temp 4-component vector of float)
+0:1    Function Parameters: 
+0:1      'input' ( in 4-component vector of float)
 0:?     Sequence
-0:3      Test condition and select ( temp void)
-0:3        Condition
-0:3        all ( temp bool)
-0:3          Equal ( temp 4-component vector of bool)
-0:3            'input' ( in 4-component vector of float)
-0:3            'input' ( in 4-component vector of float)
-0:3        true case
-0:4        Branch: Return with expression
-0:4          'input' ( in 4-component vector of float)
-0:6      Test condition and select ( temp void)
-0:6        Condition
-0:6        all ( temp bool)
-0:6          Equal ( temp 4-component vector of bool)
-0:6            'input' ( in 4-component vector of float)
-0:6            'input' ( in 4-component vector of float)
-0:6        true case
-0:7        Branch: Return with expression
-0:7          'input' ( in 4-component vector of float)
-0:6        false case
-0:9        Branch: Return with expression
-0:9          Negate value ( temp 4-component vector of float)
+0:2      Test condition and select ( temp void)
+0:2        Condition
+0:2        all ( temp bool)
+0:2          Equal ( temp 4-component vector of bool)
+0:2            'input' ( in 4-component vector of float)
+0:2            'input' ( in 4-component vector of float)
+0:2        true case
+0:3        Branch: Return with expression
+0:3          'input' ( in 4-component vector of float)
+0:2        false case
+0:5        Branch: Return with expression
+0:5          Negate value ( temp 4-component vector of float)
+0:5            'input' ( in 4-component vector of float)
+0:8  Function Definition: f1(vf4; ( temp 4-component vector of float)
+0:8    Function Parameters: 
+0:8      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:9      Test condition and select ( temp void)
+0:9        Condition
+0:9        all ( temp bool)
+0:9          Equal ( temp 4-component vector of bool)
 0:9            'input' ( in 4-component vector of float)
-0:11      Test condition and select ( temp void)
-0:11        Condition
-0:11        all ( temp bool)
-0:11          Equal ( temp 4-component vector of bool)
-0:11            'input' ( in 4-component vector of float)
-0:11            'input' ( in 4-component vector of float)
-0:11        true case is null
-0:14      Test condition and select ( temp void)
-0:14        Condition
-0:14        all ( temp bool)
-0:14          Equal ( temp 4-component vector of bool)
-0:14            'input' ( in 4-component vector of float)
-0:14            'input' ( in 4-component vector of float)
-0:14        true case is null
-0:19      Test condition and select ( temp void): Flatten
-0:19        Condition
-0:19        all ( temp bool)
-0:19          Equal ( temp 4-component vector of bool)
-0:19            'input' ( in 4-component vector of float)
-0:19            'input' ( in 4-component vector of float)
-0:19        true case
+0:9            'input' ( in 4-component vector of float)
+0:9        true case
 0:?         Sequence
-0:20          Branch: Return with expression
-0:20            'input' ( in 4-component vector of float)
+0:10          Branch: Return with expression
+0:10            'input' ( in 4-component vector of float)
+0:9        false case
+0:?         Sequence
+0:12          Branch: Return with expression
+0:12            Negate value ( temp 4-component vector of float)
+0:12              'input' ( in 4-component vector of float)
+0:17  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:17    Function Parameters: 
+0:17      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:18      Test condition and select ( temp void)
+0:18        Condition
+0:18        all ( temp bool)
+0:18          Equal ( temp 4-component vector of bool)
+0:18            'input' ( in 4-component vector of float)
+0:18            'input' ( in 4-component vector of float)
+0:18        true case
+0:19        Branch: Return with expression
+0:19          'input' ( in 4-component vector of float)
+0:21      Function Call: f0(vf4; ( temp 4-component vector of float)
+0:21        'input' ( in 4-component vector of float)
 0:23      Test condition and select ( temp void)
 0:23        Condition
 0:23        all ( temp bool)
 0:23          Equal ( temp 4-component vector of bool)
 0:23            'input' ( in 4-component vector of float)
 0:23            'input' ( in 4-component vector of float)
-0:23        true case
+0:23        true case is null
+0:26      Test condition and select ( temp void)
+0:26        Condition
+0:26        all ( temp bool)
+0:26          Equal ( temp 4-component vector of bool)
+0:26            'input' ( in 4-component vector of float)
+0:26            'input' ( in 4-component vector of float)
+0:26        true case is null
+0:31      Test condition and select ( temp void): Flatten
+0:31        Condition
+0:31        all ( temp bool)
+0:31          Equal ( temp 4-component vector of bool)
+0:31            'input' ( in 4-component vector of float)
+0:31            'input' ( in 4-component vector of float)
+0:31        true case
 0:?         Sequence
-0:24          Branch: Return with expression
-0:24            'input' ( in 4-component vector of float)
-0:23        false case
-0:?         Sequence
-0:26          Branch: Return with expression
-0:26            Negate value ( temp 4-component vector of float)
-0:26              'input' ( in 4-component vector of float)
-0:30      Test condition and select ( temp void)
-0:30        Condition
-0:30        Convert float to bool ( temp bool)
-0:30          move second child to first child ( temp float)
-0:30            'ii' ( temp float)
-0:30            direct index ( temp float)
-0:30              'input' ( in 4-component vector of float)
-0:30              Constant:
-0:30                2 (const int)
-0:30        true case
-0:31        Pre-Increment ( temp float)
-0:31          'ii' ( temp float)
-0:32      Pre-Increment ( temp int)
-0:32        'ii' ( temp int)
-0:33      Test condition and select ( temp void)
-0:33        Condition
-0:33        Compare Equal ( temp bool)
-0:33          Convert int to float ( temp float)
-0:33            'ii' ( temp int)
-0:33          Constant:
-0:33            1.000000
-0:33        true case
-0:34        Pre-Increment ( temp int)
-0:34          'ii' ( temp int)
-0:2  Function Definition: PixelShaderFunction( ( temp void)
-0:2    Function Parameters: 
+0:32          Branch: Return with expression
+0:32            'input' ( in 4-component vector of float)
+0:35      Function Call: f1(vf4; ( temp 4-component vector of float)
+0:35        'input' ( in 4-component vector of float)
+0:38      Test condition and select ( temp void)
+0:38        Condition
+0:38        Convert float to bool ( temp bool)
+0:38          move second child to first child ( temp float)
+0:38            'ii' ( temp float)
+0:38            direct index ( temp float)
+0:38              'input' ( in 4-component vector of float)
+0:38              Constant:
+0:38                2 (const int)
+0:38        true case
+0:39        Pre-Increment ( temp float)
+0:39          'ii' ( temp float)
+0:40      Pre-Increment ( temp int)
+0:40        'ii' ( temp int)
+0:41      Test condition and select ( temp void)
+0:41        Condition
+0:41        Compare Equal ( temp bool)
+0:41          Convert int to float ( temp float)
+0:41            'ii' ( temp int)
+0:41          Constant:
+0:41            1.000000
+0:41        true case
+0:42        Pre-Increment ( temp int)
+0:42          'ii' ( temp int)
+0:17  Function Definition: PixelShaderFunction( ( temp void)
+0:17    Function Parameters: 
 0:?     Sequence
-0:2      move second child to first child ( temp 4-component vector of float)
+0:17      move second child to first child ( temp 4-component vector of float)
 0:?         'input' ( temp 4-component vector of float)
 0:?         'input' (layout( location=0) in 4-component vector of float)
-0:2      move second child to first child ( temp 4-component vector of float)
+0:17      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:17        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
 0:?           'input' ( temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
@@ -112,259 +124,295 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
-0:2    Function Parameters: 
-0:2      'input' ( in 4-component vector of float)
+0:1  Function Definition: f0(vf4; ( temp 4-component vector of float)
+0:1    Function Parameters: 
+0:1      'input' ( in 4-component vector of float)
 0:?     Sequence
-0:3      Test condition and select ( temp void)
-0:3        Condition
-0:3        all ( temp bool)
-0:3          Equal ( temp 4-component vector of bool)
-0:3            'input' ( in 4-component vector of float)
-0:3            'input' ( in 4-component vector of float)
-0:3        true case
-0:4        Branch: Return with expression
-0:4          'input' ( in 4-component vector of float)
-0:6      Test condition and select ( temp void)
-0:6        Condition
-0:6        all ( temp bool)
-0:6          Equal ( temp 4-component vector of bool)
-0:6            'input' ( in 4-component vector of float)
-0:6            'input' ( in 4-component vector of float)
-0:6        true case
-0:7        Branch: Return with expression
-0:7          'input' ( in 4-component vector of float)
-0:6        false case
-0:9        Branch: Return with expression
-0:9          Negate value ( temp 4-component vector of float)
+0:2      Test condition and select ( temp void)
+0:2        Condition
+0:2        all ( temp bool)
+0:2          Equal ( temp 4-component vector of bool)
+0:2            'input' ( in 4-component vector of float)
+0:2            'input' ( in 4-component vector of float)
+0:2        true case
+0:3        Branch: Return with expression
+0:3          'input' ( in 4-component vector of float)
+0:2        false case
+0:5        Branch: Return with expression
+0:5          Negate value ( temp 4-component vector of float)
+0:5            'input' ( in 4-component vector of float)
+0:8  Function Definition: f1(vf4; ( temp 4-component vector of float)
+0:8    Function Parameters: 
+0:8      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:9      Test condition and select ( temp void)
+0:9        Condition
+0:9        all ( temp bool)
+0:9          Equal ( temp 4-component vector of bool)
 0:9            'input' ( in 4-component vector of float)
-0:11      Test condition and select ( temp void)
-0:11        Condition
-0:11        all ( temp bool)
-0:11          Equal ( temp 4-component vector of bool)
-0:11            'input' ( in 4-component vector of float)
-0:11            'input' ( in 4-component vector of float)
-0:11        true case is null
-0:14      Test condition and select ( temp void)
-0:14        Condition
-0:14        all ( temp bool)
-0:14          Equal ( temp 4-component vector of bool)
-0:14            'input' ( in 4-component vector of float)
-0:14            'input' ( in 4-component vector of float)
-0:14        true case is null
-0:19      Test condition and select ( temp void): Flatten
-0:19        Condition
-0:19        all ( temp bool)
-0:19          Equal ( temp 4-component vector of bool)
-0:19            'input' ( in 4-component vector of float)
-0:19            'input' ( in 4-component vector of float)
-0:19        true case
+0:9            'input' ( in 4-component vector of float)
+0:9        true case
 0:?         Sequence
-0:20          Branch: Return with expression
-0:20            'input' ( in 4-component vector of float)
+0:10          Branch: Return with expression
+0:10            'input' ( in 4-component vector of float)
+0:9        false case
+0:?         Sequence
+0:12          Branch: Return with expression
+0:12            Negate value ( temp 4-component vector of float)
+0:12              'input' ( in 4-component vector of float)
+0:17  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:17    Function Parameters: 
+0:17      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:18      Test condition and select ( temp void)
+0:18        Condition
+0:18        all ( temp bool)
+0:18          Equal ( temp 4-component vector of bool)
+0:18            'input' ( in 4-component vector of float)
+0:18            'input' ( in 4-component vector of float)
+0:18        true case
+0:19        Branch: Return with expression
+0:19          'input' ( in 4-component vector of float)
+0:21      Function Call: f0(vf4; ( temp 4-component vector of float)
+0:21        'input' ( in 4-component vector of float)
 0:23      Test condition and select ( temp void)
 0:23        Condition
 0:23        all ( temp bool)
 0:23          Equal ( temp 4-component vector of bool)
 0:23            'input' ( in 4-component vector of float)
 0:23            'input' ( in 4-component vector of float)
-0:23        true case
+0:23        true case is null
+0:26      Test condition and select ( temp void)
+0:26        Condition
+0:26        all ( temp bool)
+0:26          Equal ( temp 4-component vector of bool)
+0:26            'input' ( in 4-component vector of float)
+0:26            'input' ( in 4-component vector of float)
+0:26        true case is null
+0:31      Test condition and select ( temp void): Flatten
+0:31        Condition
+0:31        all ( temp bool)
+0:31          Equal ( temp 4-component vector of bool)
+0:31            'input' ( in 4-component vector of float)
+0:31            'input' ( in 4-component vector of float)
+0:31        true case
 0:?         Sequence
-0:24          Branch: Return with expression
-0:24            'input' ( in 4-component vector of float)
-0:23        false case
-0:?         Sequence
-0:26          Branch: Return with expression
-0:26            Negate value ( temp 4-component vector of float)
-0:26              'input' ( in 4-component vector of float)
-0:30      Test condition and select ( temp void)
-0:30        Condition
-0:30        Convert float to bool ( temp bool)
-0:30          move second child to first child ( temp float)
-0:30            'ii' ( temp float)
-0:30            direct index ( temp float)
-0:30              'input' ( in 4-component vector of float)
-0:30              Constant:
-0:30                2 (const int)
-0:30        true case
-0:31        Pre-Increment ( temp float)
-0:31          'ii' ( temp float)
-0:32      Pre-Increment ( temp int)
-0:32        'ii' ( temp int)
-0:33      Test condition and select ( temp void)
-0:33        Condition
-0:33        Compare Equal ( temp bool)
-0:33          Convert int to float ( temp float)
-0:33            'ii' ( temp int)
-0:33          Constant:
-0:33            1.000000
-0:33        true case
-0:34        Pre-Increment ( temp int)
-0:34          'ii' ( temp int)
-0:2  Function Definition: PixelShaderFunction( ( temp void)
-0:2    Function Parameters: 
+0:32          Branch: Return with expression
+0:32            'input' ( in 4-component vector of float)
+0:35      Function Call: f1(vf4; ( temp 4-component vector of float)
+0:35        'input' ( in 4-component vector of float)
+0:38      Test condition and select ( temp void)
+0:38        Condition
+0:38        Convert float to bool ( temp bool)
+0:38          move second child to first child ( temp float)
+0:38            'ii' ( temp float)
+0:38            direct index ( temp float)
+0:38              'input' ( in 4-component vector of float)
+0:38              Constant:
+0:38                2 (const int)
+0:38        true case
+0:39        Pre-Increment ( temp float)
+0:39          'ii' ( temp float)
+0:40      Pre-Increment ( temp int)
+0:40        'ii' ( temp int)
+0:41      Test condition and select ( temp void)
+0:41        Condition
+0:41        Compare Equal ( temp bool)
+0:41          Convert int to float ( temp float)
+0:41            'ii' ( temp int)
+0:41          Constant:
+0:41            1.000000
+0:41        true case
+0:42        Pre-Increment ( temp int)
+0:42          'ii' ( temp int)
+0:17  Function Definition: PixelShaderFunction( ( temp void)
+0:17    Function Parameters: 
 0:?     Sequence
-0:2      move second child to first child ( temp 4-component vector of float)
+0:17      move second child to first child ( temp 4-component vector of float)
 0:?         'input' ( temp 4-component vector of float)
 0:?         'input' (layout( location=0) in 4-component vector of float)
-0:2      move second child to first child ( temp 4-component vector of float)
+0:17      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:17        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
 0:?           'input' ( temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 103
+// Generated by (magic number): 80008
+// Id's are bound by 117
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 96 99
+                              EntryPoint Fragment 4  "PixelShaderFunction" 110 113
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
-                              Name 11  "@PixelShaderFunction(vf4;"
+                              Name 11  "f0(vf4;"
                               Name 10  "input"
-                              Name 68  "ii"
+                              Name 14  "f1(vf4;"
+                              Name 13  "input"
+                              Name 17  "@PixelShaderFunction(vf4;"
+                              Name 16  "input"
+                              Name 55  "param"
+                              Name 78  "param"
                               Name 82  "ii"
-                              Name 94  "input"
-                              Name 96  "input"
-                              Name 99  "@entryPointOutput"
-                              Name 100  "param"
-                              Decorate 96(input) Location 0
-                              Decorate 99(@entryPointOutput) Location 0
+                              Name 96  "ii"
+                              Name 108  "input"
+                              Name 110  "input"
+                              Name 113  "@entryPointOutput"
+                              Name 114  "param"
+                              Decorate 110(input) Location 0
+                              Decorate 113(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
                8:             TypePointer Function 7(fvec4)
                9:             TypeFunction 7(fvec4) 8(ptr)
-              15:             TypeBool
-              16:             TypeVector 15(bool) 4
-              67:             TypePointer Function 6(float)
-              69:             TypeInt 32 0
-              70:     69(int) Constant 2
-              73:    6(float) Constant 0
-              78:    6(float) Constant 1065353216
-              80:             TypeInt 32 1
-              81:             TypePointer Function 80(int)
-              84:     80(int) Constant 1
-              95:             TypePointer Input 7(fvec4)
-       96(input):     95(ptr) Variable Input
-              98:             TypePointer Output 7(fvec4)
-99(@entryPointOutput):     98(ptr) Variable Output
+              21:             TypeBool
+              22:             TypeVector 21(bool) 4
+              81:             TypePointer Function 6(float)
+              83:             TypeInt 32 0
+              84:     83(int) Constant 2
+              87:    6(float) Constant 0
+              92:    6(float) Constant 1065353216
+              94:             TypeInt 32 1
+              95:             TypePointer Function 94(int)
+              98:     94(int) Constant 1
+             109:             TypePointer Input 7(fvec4)
+      110(input):    109(ptr) Variable Input
+             112:             TypePointer Output 7(fvec4)
+113(@entryPointOutput):    112(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-       94(input):      8(ptr) Variable Function
-      100(param):      8(ptr) Variable Function
-              97:    7(fvec4) Load 96(input)
-                              Store 94(input) 97
-             101:    7(fvec4) Load 94(input)
-                              Store 100(param) 101
-             102:    7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 100(param)
-                              Store 99(@entryPointOutput) 102
+      108(input):      8(ptr) Variable Function
+      114(param):      8(ptr) Variable Function
+             111:    7(fvec4) Load 110(input)
+                              Store 108(input) 111
+             115:    7(fvec4) Load 108(input)
+                              Store 114(param) 115
+             116:    7(fvec4) FunctionCall 17(@PixelShaderFunction(vf4;) 114(param)
+                              Store 113(@entryPointOutput) 116
                               Return
                               FunctionEnd
-11(@PixelShaderFunction(vf4;):    7(fvec4) Function None 9
+     11(f0(vf4;):    7(fvec4) Function None 9
        10(input):      8(ptr) FunctionParameter
               12:             Label
-          68(ii):     67(ptr) Variable Function
+              19:    7(fvec4) Load 10(input)
+              20:    7(fvec4) Load 10(input)
+              23:   22(bvec4) FOrdEqual 19 20
+              24:    21(bool) All 23
+                              SelectionMerge 26 None
+                              BranchConditional 24 25 29
+              25:               Label
+              27:    7(fvec4)   Load 10(input)
+                                ReturnValue 27
+              29:               Label
+              30:    7(fvec4)   Load 10(input)
+              31:    7(fvec4)   FNegate 30
+                                ReturnValue 31
+              26:             Label
+                              Unreachable
+                              FunctionEnd
+     14(f1(vf4;):    7(fvec4) Function None 9
+       13(input):      8(ptr) FunctionParameter
+              15:             Label
+              34:    7(fvec4) Load 13(input)
+              35:    7(fvec4) Load 13(input)
+              36:   22(bvec4) FOrdEqual 34 35
+              37:    21(bool) All 36
+                              SelectionMerge 39 None
+                              BranchConditional 37 38 42
+              38:               Label
+              40:    7(fvec4)   Load 13(input)
+                                ReturnValue 40
+              42:               Label
+              43:    7(fvec4)   Load 13(input)
+              44:    7(fvec4)   FNegate 43
+                                ReturnValue 44
+              39:             Label
+                              Unreachable
+                              FunctionEnd
+17(@PixelShaderFunction(vf4;):    7(fvec4) Function None 9
+       16(input):      8(ptr) FunctionParameter
+              18:             Label
+       55(param):      8(ptr) Variable Function
+       78(param):      8(ptr) Variable Function
           82(ii):     81(ptr) Variable Function
-              13:    7(fvec4) Load 10(input)
-              14:    7(fvec4) Load 10(input)
-              17:   16(bvec4) FOrdEqual 13 14
-              18:    15(bool) All 17
-                              SelectionMerge 20 None
-                              BranchConditional 18 19 20
-              19:               Label
-              21:    7(fvec4)   Load 10(input)
-                                ReturnValue 21
-              20:             Label
-              23:    7(fvec4) Load 10(input)
-              24:    7(fvec4) Load 10(input)
-              25:   16(bvec4) FOrdEqual 23 24
-              26:    15(bool) All 25
-                              SelectionMerge 28 None
-                              BranchConditional 26 27 31
-              27:               Label
-              29:    7(fvec4)   Load 10(input)
-                                ReturnValue 29
-              31:               Label
-              32:    7(fvec4)   Load 10(input)
-              33:    7(fvec4)   FNegate 32
-                                ReturnValue 33
-              28:             Label
-              35:    7(fvec4) Load 10(input)
-              36:    7(fvec4) Load 10(input)
-              37:   16(bvec4) FOrdEqual 35 36
-              38:    15(bool) All 37
-                              SelectionMerge 40 None
-                              BranchConditional 38 39 40
-              39:               Label
-                                Branch 40
-              40:             Label
-              41:    7(fvec4) Load 10(input)
-              42:    7(fvec4) Load 10(input)
-              43:   16(bvec4) FOrdEqual 41 42
-              44:    15(bool) All 43
-                              SelectionMerge 46 None
-                              BranchConditional 44 45 46
-              45:               Label
-                                Branch 46
-              46:             Label
-              47:    7(fvec4) Load 10(input)
-              48:    7(fvec4) Load 10(input)
-              49:   16(bvec4) FOrdEqual 47 48
-              50:    15(bool) All 49
-                              SelectionMerge 52 Flatten 
+          96(ii):     95(ptr) Variable Function
+              47:    7(fvec4) Load 16(input)
+              48:    7(fvec4) Load 16(input)
+              49:   22(bvec4) FOrdEqual 47 48
+              50:    21(bool) All 49
+                              SelectionMerge 52 None
                               BranchConditional 50 51 52
               51:               Label
-              53:    7(fvec4)   Load 10(input)
+              53:    7(fvec4)   Load 16(input)
                                 ReturnValue 53
               52:             Label
-              55:    7(fvec4) Load 10(input)
-              56:    7(fvec4) Load 10(input)
-              57:   16(bvec4) FOrdEqual 55 56
-              58:    15(bool) All 57
-                              SelectionMerge 60 None
-                              BranchConditional 58 59 63
-              59:               Label
-              61:    7(fvec4)   Load 10(input)
-                                ReturnValue 61
-              63:               Label
-              64:    7(fvec4)   Load 10(input)
-              65:    7(fvec4)   FNegate 64
-                                ReturnValue 65
-              60:             Label
-              71:     67(ptr) AccessChain 10(input) 70
-              72:    6(float) Load 71
-                              Store 68(ii) 72
-              74:    15(bool) FOrdNotEqual 72 73
-                              SelectionMerge 76 None
-                              BranchConditional 74 75 76
-              75:               Label
-              77:    6(float)   Load 68(ii)
-              79:    6(float)   FAdd 77 78
-                                Store 68(ii) 79
-                                Branch 76
-              76:             Label
-              83:     80(int) Load 82(ii)
-              85:     80(int) IAdd 83 84
-                              Store 82(ii) 85
-              86:     80(int) Load 82(ii)
-              87:    6(float) ConvertSToF 86
-              88:    15(bool) FOrdEqual 87 78
+              56:    7(fvec4) Load 16(input)
+                              Store 55(param) 56
+              57:    7(fvec4) FunctionCall 11(f0(vf4;) 55(param)
+              58:    7(fvec4) Load 16(input)
+              59:    7(fvec4) Load 16(input)
+              60:   22(bvec4) FOrdEqual 58 59
+              61:    21(bool) All 60
+                              SelectionMerge 63 None
+                              BranchConditional 61 62 63
+              62:               Label
+                                Branch 63
+              63:             Label
+              64:    7(fvec4) Load 16(input)
+              65:    7(fvec4) Load 16(input)
+              66:   22(bvec4) FOrdEqual 64 65
+              67:    21(bool) All 66
+                              SelectionMerge 69 None
+                              BranchConditional 67 68 69
+              68:               Label
+                                Branch 69
+              69:             Label
+              70:    7(fvec4) Load 16(input)
+              71:    7(fvec4) Load 16(input)
+              72:   22(bvec4) FOrdEqual 70 71
+              73:    21(bool) All 72
+                              SelectionMerge 75 Flatten 
+                              BranchConditional 73 74 75
+              74:               Label
+              76:    7(fvec4)   Load 16(input)
+                                ReturnValue 76
+              75:             Label
+              79:    7(fvec4) Load 16(input)
+                              Store 78(param) 79
+              80:    7(fvec4) FunctionCall 14(f1(vf4;) 78(param)
+              85:     81(ptr) AccessChain 16(input) 84
+              86:    6(float) Load 85
+                              Store 82(ii) 86
+              88:    21(bool) FOrdNotEqual 86 87
                               SelectionMerge 90 None
                               BranchConditional 88 89 90
               89:               Label
-              91:     80(int)   Load 82(ii)
-              92:     80(int)   IAdd 91 84
-                                Store 82(ii) 92
+              91:    6(float)   Load 82(ii)
+              93:    6(float)   FAdd 91 92
+                                Store 82(ii) 93
                                 Branch 90
               90:             Label
-              93:    7(fvec4) Undef
-                              ReturnValue 93
+              97:     94(int) Load 96(ii)
+              99:     94(int) IAdd 97 98
+                              Store 96(ii) 99
+             100:     94(int) Load 96(ii)
+             101:    6(float) ConvertSToF 100
+             102:    21(bool) FOrdEqual 101 92
+                              SelectionMerge 104 None
+                              BranchConditional 102 103 104
+             103:               Label
+             105:     94(int)   Load 96(ii)
+             106:     94(int)   IAdd 105 98
+                                Store 96(ii) 106
+                                Branch 104
+             104:             Label
+             107:    7(fvec4) Undef
+                              ReturnValue 107
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.imagefetch-subvec4.comp.out b/Test/baseResults/hlsl.imagefetch-subvec4.comp.out
index 721aeea..304f24b 100644
--- a/Test/baseResults/hlsl.imagefetch-subvec4.comp.out
+++ b/Test/baseResults/hlsl.imagefetch-subvec4.comp.out
@@ -72,7 +72,7 @@
 0:?     'tid' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.implicitBool.frag.out b/Test/baseResults/hlsl.implicitBool.frag.out
index c616125..8b5dcde 100644
--- a/Test/baseResults/hlsl.implicitBool.frag.out
+++ b/Test/baseResults/hlsl.implicitBool.frag.out
@@ -332,7 +332,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 139
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.include.vert.out b/Test/baseResults/hlsl.include.vert.out
index 88ee8e7..4a814ae 100644
--- a/Test/baseResults/hlsl.include.vert.out
+++ b/Test/baseResults/hlsl.include.vert.out
@@ -1,6 +1,6 @@
 ../Test/hlsl.include.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.inf.vert.out b/Test/baseResults/hlsl.inf.vert.out
index 1cedc55..02326b3 100644
--- a/Test/baseResults/hlsl.inf.vert.out
+++ b/Test/baseResults/hlsl.inf.vert.out
@@ -112,7 +112,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.init.frag.out b/Test/baseResults/hlsl.init.frag.out
index 1d9a5ef..2139adb 100644
--- a/Test/baseResults/hlsl.init.frag.out
+++ b/Test/baseResults/hlsl.init.frag.out
@@ -331,7 +331,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float a, layout( row_major std140) uniform float b, layout( row_major std140) uniform float c})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 110
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.init2.frag.out b/Test/baseResults/hlsl.init2.frag.out
index 9e03de3..0ba8bd2 100644
--- a/Test/baseResults/hlsl.init2.frag.out
+++ b/Test/baseResults/hlsl.init2.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 112
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.inoutquals.frag.out b/Test/baseResults/hlsl.inoutquals.frag.out
index 42adb1a..2ffa3c5 100644
--- a/Test/baseResults/hlsl.inoutquals.frag.out
+++ b/Test/baseResults/hlsl.inoutquals.frag.out
@@ -214,7 +214,7 @@
 0:?     'sampleMask' ( out 1-element array of int SampleMaskIn)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 92
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.int.dot.frag.out b/Test/baseResults/hlsl.int.dot.frag.out
index afe44c8..7ea22a1 100644
--- a/Test/baseResults/hlsl.int.dot.frag.out
+++ b/Test/baseResults/hlsl.int.dot.frag.out
@@ -224,7 +224,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 84
 
                               Capability Shader
@@ -295,7 +295,7 @@
               39:   17(ivec2) Load 19(i3)
               40:   17(ivec2) IMul 38 39
               41:     11(int) CompositeExtract 40 0
-              42:     11(int) CompositeExtract 38 1
+              42:     11(int) CompositeExtract 40 1
               43:     11(int) IAdd 41 42
               44:   17(ivec2) CompositeConstruct 43 43
                               Store 19(i3) 44
@@ -303,9 +303,9 @@
               46:   22(ivec3) Load 24(i4)
               47:   22(ivec3) IMul 45 46
               48:     11(int) CompositeExtract 47 0
-              49:     11(int) CompositeExtract 45 1
+              49:     11(int) CompositeExtract 47 1
               50:     11(int) IAdd 48 49
-              51:     11(int) CompositeExtract 45 2
+              51:     11(int) CompositeExtract 47 2
               52:     11(int) IAdd 50 51
               53:   22(ivec3) CompositeConstruct 52 52 52
                               Store 24(i4) 53
@@ -313,11 +313,11 @@
               55:   27(ivec4) Load 29(i5)
               56:   27(ivec4) IMul 54 55
               57:     11(int) CompositeExtract 56 0
-              58:     11(int) CompositeExtract 54 1
+              58:     11(int) CompositeExtract 56 1
               59:     11(int) IAdd 57 58
-              60:     11(int) CompositeExtract 54 2
+              60:     11(int) CompositeExtract 56 2
               61:     11(int) IAdd 59 60
-              62:     11(int) CompositeExtract 54 3
+              62:     11(int) CompositeExtract 56 3
               63:     11(int) IAdd 61 62
               64:   27(ivec4) CompositeConstruct 63 63 63 63
                               Store 29(i5) 64
diff --git a/Test/baseResults/hlsl.intrinsic.frexp.frag.out b/Test/baseResults/hlsl.intrinsic.frexp.frag.out
index 3a9d6fd..9fb9cc5 100644
--- a/Test/baseResults/hlsl.intrinsic.frexp.frag.out
+++ b/Test/baseResults/hlsl.intrinsic.frexp.frag.out
@@ -190,7 +190,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 98
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsic.frexp.vert.out b/Test/baseResults/hlsl.intrinsic.frexp.vert.out
index 92bd7ef..7069ece 100644
--- a/Test/baseResults/hlsl.intrinsic.frexp.vert.out
+++ b/Test/baseResults/hlsl.intrinsic.frexp.vert.out
@@ -113,7 +113,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 78
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.barriers.comp.out b/Test/baseResults/hlsl.intrinsics.barriers.comp.out
index 13fe578..a078978 100644
--- a/Test/baseResults/hlsl.intrinsics.barriers.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.barriers.comp.out
@@ -52,7 +52,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.comp.out b/Test/baseResults/hlsl.intrinsics.comp.out
index 3329c5c..761a3b3 100644
--- a/Test/baseResults/hlsl.intrinsics.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.comp.out
@@ -717,7 +717,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 265
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out b/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
index f2216de..4832241 100644
--- a/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
@@ -74,7 +74,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.double.frag.out b/Test/baseResults/hlsl.intrinsics.double.frag.out
index 55a102f..472f31b 100644
--- a/Test/baseResults/hlsl.intrinsics.double.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.double.frag.out
@@ -164,7 +164,7 @@
 0:?     'inU1b' (layout( location=9) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 90
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.evalfns.frag.out b/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
index 3f69827..0260b93 100644
--- a/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
@@ -155,7 +155,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.f1632.frag.out b/Test/baseResults/hlsl.intrinsics.f1632.frag.out
index c5619ef..5277c5c 100644
--- a/Test/baseResults/hlsl.intrinsics.f1632.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.f1632.frag.out
@@ -17,8 +17,13 @@
 0:7      'inF0' ( in 1-component vector of uint)
 0:?     Sequence
 0:8      Branch: Return with expression
-0:8        Constant:
-0:8          0.000000
+0:8        Construct float ( temp 1-component vector of float)
+0:8          direct index ( temp float)
+0:8            unpackHalf2x16 ( temp 2-component vector of float)
+0:8              Construct uint ( in uint)
+0:8                'inF0' ( in 1-component vector of uint)
+0:8            Constant:
+0:8              0 (const int)
 0:12  Function Definition: PixelShaderFunction2(vu2; ( temp 2-component vector of float)
 0:12    Function Parameters: 
 0:12      'inF0' ( in 2-component vector of uint)
@@ -149,8 +154,13 @@
 0:7      'inF0' ( in 1-component vector of uint)
 0:?     Sequence
 0:8      Branch: Return with expression
-0:8        Constant:
-0:8          0.000000
+0:8        Construct float ( temp 1-component vector of float)
+0:8          direct index ( temp float)
+0:8            unpackHalf2x16 ( temp 2-component vector of float)
+0:8              Construct uint ( in uint)
+0:8                'inF0' ( in 1-component vector of uint)
+0:8            Constant:
+0:8              0 (const int)
 0:12  Function Definition: PixelShaderFunction2(vu2; ( temp 2-component vector of float)
 0:12    Function Parameters: 
 0:12      'inF0' ( in 2-component vector of uint)
@@ -260,13 +270,13 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 103
+// Generated by (magic number): 80008
+// Id's are bound by 106
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 101
+                              EntryPoint Fragment 4  "main" 104
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -281,8 +291,8 @@
                               Name 35  "PixelShaderFunction(vu4;"
                               Name 34  "inF0"
                               Name 38  "@main("
-                              Name 101  "@entryPointOutput"
-                              Decorate 101(@entryPointOutput) Location 0
+                              Name 104  "@entryPointOutput"
+                              Decorate 104(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -303,17 +313,17 @@
               33:             TypeFunction 32(fvec4) 31(ptr)
               37:             TypeFunction 32(fvec4)
               42:      6(int) Constant 0
-              46:    8(float) Constant 0
-              53:      6(int) Constant 1
-              69:      6(int) Constant 2
-              89:      6(int) Constant 3
-              97:   32(fvec4) ConstantComposite 46 46 46 46
-             100:             TypePointer Output 32(fvec4)
-101(@entryPointOutput):    100(ptr) Variable Output
+              55:      6(int) Constant 1
+              71:      6(int) Constant 2
+              91:      6(int) Constant 3
+              99:    8(float) Constant 0
+             100:   32(fvec4) ConstantComposite 99 99 99 99
+             103:             TypePointer Output 32(fvec4)
+104(@entryPointOutput):    103(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-             102:   32(fvec4) FunctionCall 38(@main()
-                              Store 101(@entryPointOutput) 102
+             105:   32(fvec4) FunctionCall 38(@main()
+                              Store 104(@entryPointOutput) 105
                               Return
                               FunctionEnd
 11(PixelShaderFunctionS(u1;):    8(float) Function None 9
@@ -327,63 +337,66 @@
 14(PixelShaderFunction1(vu1;):    8(float) Function None 9
         13(inF0):      7(ptr) FunctionParameter
               15:             Label
-                              ReturnValue 46
+              46:      6(int) Load 13(inF0)
+              47:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 46
+              48:    8(float) CompositeExtract 47 0
+                              ReturnValue 48
                               FunctionEnd
 21(PixelShaderFunction2(vu2;):   18(fvec2) Function None 19
         20(inF0):     17(ptr) FunctionParameter
               22:             Label
-              49:      7(ptr) AccessChain 20(inF0) 42
-              50:      6(int) Load 49
-              51:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 50
-              52:    8(float) CompositeExtract 51 0
-              54:      7(ptr) AccessChain 20(inF0) 53
-              55:      6(int) Load 54
-              56:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 55
-              57:    8(float) CompositeExtract 56 0
-              58:   18(fvec2) CompositeConstruct 52 57
-                              ReturnValue 58
+              51:      7(ptr) AccessChain 20(inF0) 42
+              52:      6(int) Load 51
+              53:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 52
+              54:    8(float) CompositeExtract 53 0
+              56:      7(ptr) AccessChain 20(inF0) 55
+              57:      6(int) Load 56
+              58:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 57
+              59:    8(float) CompositeExtract 58 0
+              60:   18(fvec2) CompositeConstruct 54 59
+                              ReturnValue 60
                               FunctionEnd
 28(PixelShaderFunction3(vu3;):   25(fvec3) Function None 26
         27(inF0):     24(ptr) FunctionParameter
               29:             Label
-              61:      7(ptr) AccessChain 27(inF0) 42
-              62:      6(int) Load 61
-              63:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 62
-              64:    8(float) CompositeExtract 63 0
-              65:      7(ptr) AccessChain 27(inF0) 53
-              66:      6(int) Load 65
-              67:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 66
-              68:    8(float) CompositeExtract 67 0
-              70:      7(ptr) AccessChain 27(inF0) 69
-              71:      6(int) Load 70
-              72:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 71
-              73:    8(float) CompositeExtract 72 0
-              74:   25(fvec3) CompositeConstruct 64 68 73
-                              ReturnValue 74
+              63:      7(ptr) AccessChain 27(inF0) 42
+              64:      6(int) Load 63
+              65:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 64
+              66:    8(float) CompositeExtract 65 0
+              67:      7(ptr) AccessChain 27(inF0) 55
+              68:      6(int) Load 67
+              69:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 68
+              70:    8(float) CompositeExtract 69 0
+              72:      7(ptr) AccessChain 27(inF0) 71
+              73:      6(int) Load 72
+              74:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 73
+              75:    8(float) CompositeExtract 74 0
+              76:   25(fvec3) CompositeConstruct 66 70 75
+                              ReturnValue 76
                               FunctionEnd
 35(PixelShaderFunction(vu4;):   32(fvec4) Function None 33
         34(inF0):     31(ptr) FunctionParameter
               36:             Label
-              77:      7(ptr) AccessChain 34(inF0) 42
-              78:      6(int) Load 77
-              79:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 78
-              80:    8(float) CompositeExtract 79 0
-              81:      7(ptr) AccessChain 34(inF0) 53
-              82:      6(int) Load 81
-              83:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 82
-              84:    8(float) CompositeExtract 83 0
-              85:      7(ptr) AccessChain 34(inF0) 69
-              86:      6(int) Load 85
-              87:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 86
-              88:    8(float) CompositeExtract 87 0
-              90:      7(ptr) AccessChain 34(inF0) 89
-              91:      6(int) Load 90
-              92:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 91
-              93:    8(float) CompositeExtract 92 0
-              94:   32(fvec4) CompositeConstruct 80 84 88 93
-                              ReturnValue 94
+              79:      7(ptr) AccessChain 34(inF0) 42
+              80:      6(int) Load 79
+              81:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 80
+              82:    8(float) CompositeExtract 81 0
+              83:      7(ptr) AccessChain 34(inF0) 55
+              84:      6(int) Load 83
+              85:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 84
+              86:    8(float) CompositeExtract 85 0
+              87:      7(ptr) AccessChain 34(inF0) 71
+              88:      6(int) Load 87
+              89:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 88
+              90:    8(float) CompositeExtract 89 0
+              92:      7(ptr) AccessChain 34(inF0) 91
+              93:      6(int) Load 92
+              94:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 93
+              95:    8(float) CompositeExtract 94 0
+              96:   32(fvec4) CompositeConstruct 82 86 90 95
+                              ReturnValue 96
                               FunctionEnd
       38(@main():   32(fvec4) Function None 37
               39:             Label
-                              ReturnValue 97
+                              ReturnValue 100
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.f3216.frag.out b/Test/baseResults/hlsl.intrinsics.f3216.frag.out
index c447efc..77826b3 100644
--- a/Test/baseResults/hlsl.intrinsics.f3216.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.f3216.frag.out
@@ -270,7 +270,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 106
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.frag.out b/Test/baseResults/hlsl.intrinsics.frag.out
index b8add07..dca823b 100644
--- a/Test/baseResults/hlsl.intrinsics.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.frag.out
@@ -185,1073 +185,1068 @@
 0:55            'inF1' ( in float)
 0:56      Sequence
 0:56        move second child to first child ( temp float)
-0:56          'r034' ( temp float)
-0:56          Fraction ( temp float)
+0:56          'r033i' ( temp float)
+0:56          mod ( temp float)
 0:56            'inF0' ( in float)
+0:56            Constant:
+0:56              2.000000
 0:57      Sequence
 0:57        move second child to first child ( temp float)
-0:57          'r036' ( temp float)
-0:57          fwidth ( temp float)
+0:57          'r034' ( temp float)
+0:57          Fraction ( temp float)
 0:57            'inF0' ( in float)
 0:58      Sequence
-0:58        move second child to first child ( temp bool)
-0:58          'r037' ( temp bool)
-0:58          isinf ( temp bool)
+0:58        move second child to first child ( temp float)
+0:58          'r036' ( temp float)
+0:58          fwidth ( temp float)
 0:58            'inF0' ( in float)
 0:59      Sequence
 0:59        move second child to first child ( temp bool)
-0:59          'r038' ( temp bool)
-0:59          isnan ( temp bool)
+0:59          'r037' ( temp bool)
+0:59          isinf ( temp bool)
 0:59            'inF0' ( in float)
 0:60      Sequence
-0:60        move second child to first child ( temp float)
-0:60          'r039' ( temp float)
-0:60          ldexp ( temp float)
+0:60        move second child to first child ( temp bool)
+0:60          'r038' ( temp bool)
+0:60          isnan ( temp bool)
 0:60            'inF0' ( in float)
-0:60            'inF1' ( in float)
 0:61      Sequence
 0:61        move second child to first child ( temp float)
-0:61          'r039a' ( temp float)
-0:61          mix ( temp float)
+0:61          'r039' ( temp float)
+0:61          ldexp ( temp float)
 0:61            'inF0' ( in float)
 0:61            'inF1' ( in float)
-0:61            'inF2' ( in float)
 0:62      Sequence
 0:62        move second child to first child ( temp float)
-0:62          'r040' ( temp float)
-0:62          log ( temp float)
+0:62          'r039a' ( temp float)
+0:62          mix ( temp float)
 0:62            'inF0' ( in float)
+0:62            'inF1' ( in float)
+0:62            'inF2' ( in float)
 0:63      Sequence
 0:63        move second child to first child ( temp float)
-0:63          'r041' ( temp float)
-0:63          component-wise multiply ( temp float)
-0:63            log2 ( temp float)
-0:63              'inF0' ( in float)
-0:63            Constant:
-0:63              0.301030
+0:63          'r040' ( temp float)
+0:63          log ( temp float)
+0:63            'inF0' ( in float)
 0:64      Sequence
 0:64        move second child to first child ( temp float)
-0:64          'r042' ( temp float)
-0:64          log2 ( temp float)
-0:64            'inF0' ( in float)
+0:64          'r041' ( temp float)
+0:64          component-wise multiply ( temp float)
+0:64            log2 ( temp float)
+0:64              'inF0' ( in float)
+0:64            Constant:
+0:64              0.301030
 0:65      Sequence
 0:65        move second child to first child ( temp float)
-0:65          'r043' ( temp float)
-0:65          max ( temp float)
+0:65          'r042' ( temp float)
+0:65          log2 ( temp float)
 0:65            'inF0' ( in float)
-0:65            'inF1' ( in float)
 0:66      Sequence
 0:66        move second child to first child ( temp float)
-0:66          'r044' ( temp float)
-0:66          min ( temp float)
+0:66          'r043' ( temp float)
+0:66          max ( temp float)
 0:66            'inF0' ( in float)
 0:66            'inF1' ( in float)
 0:67      Sequence
 0:67        move second child to first child ( temp float)
-0:67          'r045' ( temp float)
-0:67          pow ( temp float)
+0:67          'r044' ( temp float)
+0:67          min ( temp float)
 0:67            'inF0' ( in float)
 0:67            'inF1' ( in float)
 0:68      Sequence
 0:68        move second child to first child ( temp float)
-0:68          'r046' ( temp float)
-0:68          radians ( temp float)
+0:68          'r045' ( temp float)
+0:68          pow ( temp float)
 0:68            'inF0' ( in float)
+0:68            'inF1' ( in float)
 0:69      Sequence
 0:69        move second child to first child ( temp float)
-0:69          'r047' ( temp float)
-0:69          divide ( temp float)
-0:69            Constant:
-0:69              1.000000
+0:69          'r046' ( temp float)
+0:69          radians ( temp float)
 0:69            'inF0' ( in float)
 0:70      Sequence
-0:70        move second child to first child ( temp uint)
-0:70          'r048' ( temp uint)
-0:70          Convert int to uint ( temp uint)
-0:70            bitFieldReverse ( temp int)
-0:70              Constant:
-0:70                2 (const int)
+0:70        move second child to first child ( temp float)
+0:70          'r047' ( temp float)
+0:70          divide ( temp float)
+0:70            Constant:
+0:70              1.000000
+0:70            'inF0' ( in float)
 0:71      Sequence
-0:71        move second child to first child ( temp float)
-0:71          'r049' ( temp float)
-0:71          roundEven ( temp float)
-0:71            'inF0' ( in float)
+0:71        move second child to first child ( temp uint)
+0:71          'r048' ( temp uint)
+0:71          Convert int to uint ( temp uint)
+0:71            bitFieldReverse ( temp int)
+0:71              Constant:
+0:71                2 (const int)
 0:72      Sequence
 0:72        move second child to first child ( temp float)
-0:72          'r050' ( temp float)
-0:72          inverse sqrt ( temp float)
+0:72          'r049' ( temp float)
+0:72          roundEven ( temp float)
 0:72            'inF0' ( in float)
 0:73      Sequence
 0:73        move second child to first child ( temp float)
-0:73          'r051' ( temp float)
-0:73          clamp ( temp float)
+0:73          'r050' ( temp float)
+0:73          inverse sqrt ( temp float)
 0:73            'inF0' ( in float)
-0:73            Constant:
-0:73              0.000000
-0:73            Constant:
-0:73              1.000000
 0:74      Sequence
 0:74        move second child to first child ( temp float)
-0:74          'r052' ( temp float)
-0:74          Sign ( temp float)
+0:74          'r051' ( temp float)
+0:74          clamp ( temp float)
 0:74            'inF0' ( in float)
+0:74            Constant:
+0:74              0.000000
+0:74            Constant:
+0:74              1.000000
 0:75      Sequence
 0:75        move second child to first child ( temp float)
-0:75          'r053' ( temp float)
-0:75          sine ( temp float)
+0:75          'r052' ( temp float)
+0:75          Sign ( temp float)
 0:75            'inF0' ( in float)
 0:76      Sequence
 0:76        move second child to first child ( temp float)
-0:76          'inF1' ( in float)
+0:76          'r053' ( temp float)
 0:76          sine ( temp float)
 0:76            'inF0' ( in float)
-0:76        move second child to first child ( temp float)
-0:76          'inF2' ( in float)
-0:76          cosine ( temp float)
-0:76            'inF0' ( in float)
 0:77      Sequence
 0:77        move second child to first child ( temp float)
-0:77          'r055' ( temp float)
-0:77          hyp. sine ( temp float)
+0:77          'inF1' ( in float)
+0:77          sine ( temp float)
+0:77            'inF0' ( in float)
+0:77        move second child to first child ( temp float)
+0:77          'inF2' ( in float)
+0:77          cosine ( temp float)
 0:77            'inF0' ( in float)
 0:78      Sequence
 0:78        move second child to first child ( temp float)
-0:78          'r056' ( temp float)
-0:78          smoothstep ( temp float)
+0:78          'r055' ( temp float)
+0:78          hyp. sine ( temp float)
 0:78            'inF0' ( in float)
-0:78            'inF1' ( in float)
-0:78            'inF2' ( in float)
 0:79      Sequence
 0:79        move second child to first child ( temp float)
-0:79          'r057' ( temp float)
-0:79          sqrt ( temp float)
+0:79          'r056' ( temp float)
+0:79          smoothstep ( temp float)
 0:79            'inF0' ( in float)
+0:79            'inF1' ( in float)
+0:79            'inF2' ( in float)
 0:80      Sequence
 0:80        move second child to first child ( temp float)
-0:80          'r058' ( temp float)
-0:80          step ( temp float)
+0:80          'r057' ( temp float)
+0:80          sqrt ( temp float)
 0:80            'inF0' ( in float)
-0:80            'inF1' ( in float)
 0:81      Sequence
 0:81        move second child to first child ( temp float)
-0:81          'r059' ( temp float)
-0:81          tangent ( temp float)
+0:81          'r058' ( temp float)
+0:81          step ( temp float)
 0:81            'inF0' ( in float)
+0:81            'inF1' ( in float)
 0:82      Sequence
 0:82        move second child to first child ( temp float)
-0:82          'r060' ( temp float)
-0:82          hyp. tangent ( temp float)
+0:82          'r059' ( temp float)
+0:82          tangent ( temp float)
 0:82            'inF0' ( in float)
-0:84      Sequence
-0:84        move second child to first child ( temp float)
-0:84          'r061' ( temp float)
-0:84          trunc ( temp float)
-0:84            'inF0' ( in float)
-0:86      Branch: Return with expression
-0:86        Constant:
-0:86          0.000000
-0:90  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
-0:90    Function Parameters: 
-0:90      'inF0' ( in 1-component vector of float)
-0:90      'inF1' ( in 1-component vector of float)
-0:90      'inF2' ( in 1-component vector of float)
+0:83      Sequence
+0:83        move second child to first child ( temp float)
+0:83          'r060' ( temp float)
+0:83          hyp. tangent ( temp float)
+0:83            'inF0' ( in float)
+0:85      Sequence
+0:85        move second child to first child ( temp float)
+0:85          'r061' ( temp float)
+0:85          trunc ( temp float)
+0:85            'inF0' ( in float)
+0:87      Branch: Return with expression
+0:87        Constant:
+0:87          0.000000
+0:91  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
+0:91    Function Parameters: 
+0:91      'inF0' ( in 1-component vector of float)
+0:91      'inF1' ( in 1-component vector of float)
+0:91      'inF2' ( in 1-component vector of float)
 0:?     Sequence
-0:92      Branch: Return with expression
-0:92        Constant:
-0:92          0.000000
-0:96  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
-0:96    Function Parameters: 
-0:96      'inF0' ( in 2-component vector of float)
-0:96      'inF1' ( in 2-component vector of float)
-0:96      'inF2' ( in 2-component vector of float)
-0:96      'inU0' ( in 2-component vector of uint)
-0:96      'inU1' ( in 2-component vector of uint)
+0:93      Branch: Return with expression
+0:93        Constant:
+0:93          0.000000
+0:97  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
+0:97    Function Parameters: 
+0:97      'inF0' ( in 2-component vector of float)
+0:97      'inF1' ( in 2-component vector of float)
+0:97      'inF2' ( in 2-component vector of float)
+0:97      'inU0' ( in 2-component vector of uint)
+0:97      'inU1' ( in 2-component vector of uint)
 0:?     Sequence
-0:99      Sequence
-0:99        move second child to first child ( temp bool)
-0:99          'r000' ( temp bool)
-0:99          all ( temp bool)
-0:99            Convert float to bool ( temp 2-component vector of bool)
-0:99              'inF0' ( in 2-component vector of float)
 0:100      Sequence
-0:100        move second child to first child ( temp 2-component vector of float)
-0:100          'r001' ( temp 2-component vector of float)
-0:100          Absolute value ( temp 2-component vector of float)
-0:100            'inF0' ( in 2-component vector of float)
+0:100        move second child to first child ( temp bool)
+0:100          'r000' ( temp bool)
+0:100          all ( temp bool)
+0:100            Convert float to bool ( temp 2-component vector of bool)
+0:100              'inF0' ( in 2-component vector of float)
 0:101      Sequence
 0:101        move second child to first child ( temp 2-component vector of float)
-0:101          'r002' ( temp 2-component vector of float)
-0:101          arc cosine ( temp 2-component vector of float)
+0:101          'r001' ( temp 2-component vector of float)
+0:101          Absolute value ( temp 2-component vector of float)
 0:101            'inF0' ( in 2-component vector of float)
 0:102      Sequence
-0:102        move second child to first child ( temp bool)
-0:102          'r003' ( temp bool)
-0:102          any ( temp bool)
-0:102            Convert float to bool ( temp 2-component vector of bool)
-0:102              'inF0' ( in 2-component vector of float)
+0:102        move second child to first child ( temp 2-component vector of float)
+0:102          'r002' ( temp 2-component vector of float)
+0:102          arc cosine ( temp 2-component vector of float)
+0:102            'inF0' ( in 2-component vector of float)
 0:103      Sequence
-0:103        move second child to first child ( temp 2-component vector of float)
-0:103          'r004' ( temp 2-component vector of float)
-0:103          arc sine ( temp 2-component vector of float)
-0:103            'inF0' ( in 2-component vector of float)
+0:103        move second child to first child ( temp bool)
+0:103          'r003' ( temp bool)
+0:103          any ( temp bool)
+0:103            Convert float to bool ( temp 2-component vector of bool)
+0:103              'inF0' ( in 2-component vector of float)
 0:104      Sequence
-0:104        move second child to first child ( temp 2-component vector of int)
-0:104          'r005' ( temp 2-component vector of int)
-0:104          floatBitsToInt ( temp 2-component vector of int)
+0:104        move second child to first child ( temp 2-component vector of float)
+0:104          'r004' ( temp 2-component vector of float)
+0:104          arc sine ( temp 2-component vector of float)
 0:104            'inF0' ( in 2-component vector of float)
 0:105      Sequence
-0:105        move second child to first child ( temp 2-component vector of uint)
-0:105          'r006' ( temp 2-component vector of uint)
-0:105          floatBitsToUint ( temp 2-component vector of uint)
+0:105        move second child to first child ( temp 2-component vector of int)
+0:105          'r005' ( temp 2-component vector of int)
+0:105          floatBitsToInt ( temp 2-component vector of int)
 0:105            'inF0' ( in 2-component vector of float)
 0:106      Sequence
-0:106        move second child to first child ( temp 2-component vector of float)
-0:106          'r007' ( temp 2-component vector of float)
-0:106          intBitsToFloat ( temp 2-component vector of float)
-0:106            'inU0' ( in 2-component vector of uint)
-0:108      Sequence
-0:108        move second child to first child ( temp 2-component vector of float)
-0:108          'r009' ( temp 2-component vector of float)
-0:108          arc tangent ( temp 2-component vector of float)
-0:108            'inF0' ( in 2-component vector of float)
+0:106        move second child to first child ( temp 2-component vector of uint)
+0:106          'r006' ( temp 2-component vector of uint)
+0:106          floatBitsToUint ( temp 2-component vector of uint)
+0:106            'inF0' ( in 2-component vector of float)
+0:107      Sequence
+0:107        move second child to first child ( temp 2-component vector of float)
+0:107          'r007' ( temp 2-component vector of float)
+0:107          intBitsToFloat ( temp 2-component vector of float)
+0:107            'inU0' ( in 2-component vector of uint)
 0:109      Sequence
 0:109        move second child to first child ( temp 2-component vector of float)
-0:109          'r010' ( temp 2-component vector of float)
+0:109          'r009' ( temp 2-component vector of float)
 0:109          arc tangent ( temp 2-component vector of float)
 0:109            'inF0' ( in 2-component vector of float)
-0:109            'inF1' ( in 2-component vector of float)
 0:110      Sequence
 0:110        move second child to first child ( temp 2-component vector of float)
-0:110          'r011' ( temp 2-component vector of float)
-0:110          Ceiling ( temp 2-component vector of float)
+0:110          'r010' ( temp 2-component vector of float)
+0:110          arc tangent ( temp 2-component vector of float)
 0:110            'inF0' ( in 2-component vector of float)
+0:110            'inF1' ( in 2-component vector of float)
 0:111      Sequence
 0:111        move second child to first child ( temp 2-component vector of float)
-0:111          'r012' ( temp 2-component vector of float)
-0:111          clamp ( temp 2-component vector of float)
+0:111          'r011' ( temp 2-component vector of float)
+0:111          Ceiling ( temp 2-component vector of float)
 0:111            'inF0' ( in 2-component vector of float)
-0:111            'inF1' ( in 2-component vector of float)
-0:111            'inF2' ( in 2-component vector of float)
-0:112      Test condition and select ( temp void)
-0:112        Condition
-0:112        any ( temp bool)
-0:112          Compare Less Than ( temp 2-component vector of bool)
+0:112      Sequence
+0:112        move second child to first child ( temp 2-component vector of float)
+0:112          'r012' ( temp 2-component vector of float)
+0:112          clamp ( temp 2-component vector of float)
 0:112            'inF0' ( in 2-component vector of float)
-0:112            Constant:
-0:112              0.000000
-0:112              0.000000
-0:112        true case
-0:112        Branch: Kill
+0:112            'inF1' ( in 2-component vector of float)
+0:112            'inF2' ( in 2-component vector of float)
 0:113      Test condition and select ( temp void)
 0:113        Condition
 0:113        any ( temp bool)
 0:113          Compare Less Than ( temp 2-component vector of bool)
-0:113            'inU0' ( in 2-component vector of uint)
+0:113            'inF0' ( in 2-component vector of float)
 0:113            Constant:
 0:113              0.000000
 0:113              0.000000
 0:113        true case
 0:113        Branch: Kill
-0:114      Sequence
-0:114        move second child to first child ( temp 2-component vector of float)
-0:114          'r013' ( temp 2-component vector of float)
-0:114          cosine ( temp 2-component vector of float)
-0:114            'inF0' ( in 2-component vector of float)
+0:114      Test condition and select ( temp void)
+0:114        Condition
+0:114        any ( temp bool)
+0:114          Compare Less Than ( temp 2-component vector of bool)
+0:114            'inU0' ( in 2-component vector of uint)
+0:114            Constant:
+0:114              0.000000
+0:114              0.000000
+0:114        true case
+0:114        Branch: Kill
 0:115      Sequence
 0:115        move second child to first child ( temp 2-component vector of float)
-0:115          'r015' ( temp 2-component vector of float)
-0:115          hyp. cosine ( temp 2-component vector of float)
+0:115          'r013' ( temp 2-component vector of float)
+0:115          cosine ( temp 2-component vector of float)
 0:115            'inF0' ( in 2-component vector of float)
 0:116      Sequence
-0:116        move second child to first child ( temp 2-component vector of int)
-0:116          'r016' ( temp 2-component vector of int)
+0:116        move second child to first child ( temp 2-component vector of float)
+0:116          'r015' ( temp 2-component vector of float)
+0:116          hyp. cosine ( temp 2-component vector of float)
+0:116            'inF0' ( in 2-component vector of float)
+0:117      Sequence
+0:117        move second child to first child ( temp 2-component vector of int)
+0:117          'r016' ( temp 2-component vector of int)
 0:?           bitCount ( temp 2-component vector of int)
 0:?             Constant:
 0:?               7 (const int)
 0:?               3 (const int)
-0:117      Sequence
-0:117        move second child to first child ( temp 2-component vector of float)
-0:117          'r017' ( temp 2-component vector of float)
-0:117          dPdx ( temp 2-component vector of float)
-0:117            'inF0' ( in 2-component vector of float)
 0:118      Sequence
 0:118        move second child to first child ( temp 2-component vector of float)
-0:118          'r018' ( temp 2-component vector of float)
-0:118          dPdxCoarse ( temp 2-component vector of float)
+0:118          'r017' ( temp 2-component vector of float)
+0:118          dPdx ( temp 2-component vector of float)
 0:118            'inF0' ( in 2-component vector of float)
 0:119      Sequence
 0:119        move second child to first child ( temp 2-component vector of float)
-0:119          'r019' ( temp 2-component vector of float)
-0:119          dPdxFine ( temp 2-component vector of float)
+0:119          'r018' ( temp 2-component vector of float)
+0:119          dPdxCoarse ( temp 2-component vector of float)
 0:119            'inF0' ( in 2-component vector of float)
 0:120      Sequence
 0:120        move second child to first child ( temp 2-component vector of float)
-0:120          'r020' ( temp 2-component vector of float)
-0:120          dPdy ( temp 2-component vector of float)
+0:120          'r019' ( temp 2-component vector of float)
+0:120          dPdxFine ( temp 2-component vector of float)
 0:120            'inF0' ( in 2-component vector of float)
 0:121      Sequence
 0:121        move second child to first child ( temp 2-component vector of float)
-0:121          'r021' ( temp 2-component vector of float)
-0:121          dPdyCoarse ( temp 2-component vector of float)
+0:121          'r020' ( temp 2-component vector of float)
+0:121          dPdy ( temp 2-component vector of float)
 0:121            'inF0' ( in 2-component vector of float)
 0:122      Sequence
 0:122        move second child to first child ( temp 2-component vector of float)
-0:122          'r022' ( temp 2-component vector of float)
-0:122          dPdyFine ( temp 2-component vector of float)
+0:122          'r021' ( temp 2-component vector of float)
+0:122          dPdyCoarse ( temp 2-component vector of float)
 0:122            'inF0' ( in 2-component vector of float)
 0:123      Sequence
 0:123        move second child to first child ( temp 2-component vector of float)
-0:123          'r023' ( temp 2-component vector of float)
-0:123          degrees ( temp 2-component vector of float)
+0:123          'r022' ( temp 2-component vector of float)
+0:123          dPdyFine ( temp 2-component vector of float)
 0:123            'inF0' ( in 2-component vector of float)
-0:127      Sequence
-0:127        move second child to first child ( temp float)
-0:127          'r026' ( temp float)
-0:127          distance ( temp float)
-0:127            'inF0' ( in 2-component vector of float)
-0:127            'inF1' ( in 2-component vector of float)
+0:124      Sequence
+0:124        move second child to first child ( temp 2-component vector of float)
+0:124          'r023' ( temp 2-component vector of float)
+0:124          degrees ( temp 2-component vector of float)
+0:124            'inF0' ( in 2-component vector of float)
 0:128      Sequence
 0:128        move second child to first child ( temp float)
-0:128          'r027' ( temp float)
-0:128          dot-product ( temp float)
+0:128          'r026' ( temp float)
+0:128          distance ( temp float)
 0:128            'inF0' ( in 2-component vector of float)
 0:128            'inF1' ( in 2-component vector of float)
-0:132      Sequence
-0:132        move second child to first child ( temp 2-component vector of float)
-0:132          'r028' ( temp 2-component vector of float)
-0:132          exp ( temp 2-component vector of float)
-0:132            'inF0' ( in 2-component vector of float)
+0:129      Sequence
+0:129        move second child to first child ( temp float)
+0:129          'r027' ( temp float)
+0:129          dot-product ( temp float)
+0:129            'inF0' ( in 2-component vector of float)
+0:129            'inF1' ( in 2-component vector of float)
 0:133      Sequence
 0:133        move second child to first child ( temp 2-component vector of float)
-0:133          'r029' ( temp 2-component vector of float)
-0:133          exp2 ( temp 2-component vector of float)
+0:133          'r028' ( temp 2-component vector of float)
+0:133          exp ( temp 2-component vector of float)
 0:133            'inF0' ( in 2-component vector of float)
 0:134      Sequence
 0:134        move second child to first child ( temp 2-component vector of float)
-0:134          'r030' ( temp 2-component vector of float)
-0:134          face-forward ( temp 2-component vector of float)
+0:134          'r029' ( temp 2-component vector of float)
+0:134          exp2 ( temp 2-component vector of float)
 0:134            'inF0' ( in 2-component vector of float)
-0:134            'inF1' ( in 2-component vector of float)
-0:134            'inF2' ( in 2-component vector of float)
 0:135      Sequence
-0:135        move second child to first child ( temp 2-component vector of uint)
-0:135          'r031' ( temp 2-component vector of uint)
+0:135        move second child to first child ( temp 2-component vector of float)
+0:135          'r030' ( temp 2-component vector of float)
+0:135          face-forward ( temp 2-component vector of float)
+0:135            'inF0' ( in 2-component vector of float)
+0:135            'inF1' ( in 2-component vector of float)
+0:135            'inF2' ( in 2-component vector of float)
+0:136      Sequence
+0:136        move second child to first child ( temp 2-component vector of uint)
+0:136          'r031' ( temp 2-component vector of uint)
 0:?           findMSB ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
-0:136      Sequence
-0:136        move second child to first child ( temp 2-component vector of uint)
-0:136          'r032' ( temp 2-component vector of uint)
+0:137      Sequence
+0:137        move second child to first child ( temp 2-component vector of uint)
+0:137          'r032' ( temp 2-component vector of uint)
 0:?           findLSB ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
-0:137      Sequence
-0:137        move second child to first child ( temp 2-component vector of float)
-0:137          'r033' ( temp 2-component vector of float)
-0:137          Floor ( temp 2-component vector of float)
-0:137            'inF0' ( in 2-component vector of float)
-0:139      Sequence
-0:139        move second child to first child ( temp 2-component vector of float)
-0:139          'r035' ( temp 2-component vector of float)
-0:139          mod ( temp 2-component vector of float)
-0:139            'inF0' ( in 2-component vector of float)
-0:139            'inF1' ( in 2-component vector of float)
+0:138      Sequence
+0:138        move second child to first child ( temp 2-component vector of float)
+0:138          'r033' ( temp 2-component vector of float)
+0:138          Floor ( temp 2-component vector of float)
+0:138            'inF0' ( in 2-component vector of float)
 0:140      Sequence
 0:140        move second child to first child ( temp 2-component vector of float)
-0:140          'r036' ( temp 2-component vector of float)
-0:140          Fraction ( temp 2-component vector of float)
+0:140          'r035' ( temp 2-component vector of float)
+0:140          mod ( temp 2-component vector of float)
 0:140            'inF0' ( in 2-component vector of float)
+0:140            'inF1' ( in 2-component vector of float)
 0:141      Sequence
 0:141        move second child to first child ( temp 2-component vector of float)
-0:141          'r038' ( temp 2-component vector of float)
-0:141          fwidth ( temp 2-component vector of float)
+0:141          'r036' ( temp 2-component vector of float)
+0:141          Fraction ( temp 2-component vector of float)
 0:141            'inF0' ( in 2-component vector of float)
 0:142      Sequence
-0:142        move second child to first child ( temp 2-component vector of bool)
-0:142          'r039' ( temp 2-component vector of bool)
-0:142          isinf ( temp 2-component vector of bool)
+0:142        move second child to first child ( temp 2-component vector of float)
+0:142          'r038' ( temp 2-component vector of float)
+0:142          fwidth ( temp 2-component vector of float)
 0:142            'inF0' ( in 2-component vector of float)
 0:143      Sequence
 0:143        move second child to first child ( temp 2-component vector of bool)
-0:143          'r040' ( temp 2-component vector of bool)
-0:143          isnan ( temp 2-component vector of bool)
+0:143          'r039' ( temp 2-component vector of bool)
+0:143          isinf ( temp 2-component vector of bool)
 0:143            'inF0' ( in 2-component vector of float)
 0:144      Sequence
-0:144        move second child to first child ( temp 2-component vector of float)
-0:144          'r041' ( temp 2-component vector of float)
-0:144          ldexp ( temp 2-component vector of float)
+0:144        move second child to first child ( temp 2-component vector of bool)
+0:144          'r040' ( temp 2-component vector of bool)
+0:144          isnan ( temp 2-component vector of bool)
 0:144            'inF0' ( in 2-component vector of float)
-0:144            'inF1' ( in 2-component vector of float)
 0:145      Sequence
 0:145        move second child to first child ( temp 2-component vector of float)
-0:145          'r039a' ( temp 2-component vector of float)
-0:145          mix ( temp 2-component vector of float)
+0:145          'r041' ( temp 2-component vector of float)
+0:145          ldexp ( temp 2-component vector of float)
 0:145            'inF0' ( in 2-component vector of float)
 0:145            'inF1' ( in 2-component vector of float)
-0:145            'inF2' ( in 2-component vector of float)
 0:146      Sequence
-0:146        move second child to first child ( temp float)
-0:146          'r042' ( temp float)
-0:146          length ( temp float)
+0:146        move second child to first child ( temp 2-component vector of float)
+0:146          'r039a' ( temp 2-component vector of float)
+0:146          mix ( temp 2-component vector of float)
 0:146            'inF0' ( in 2-component vector of float)
+0:146            'inF1' ( in 2-component vector of float)
+0:146            'inF2' ( in 2-component vector of float)
 0:147      Sequence
-0:147        move second child to first child ( temp 2-component vector of float)
-0:147          'r043' ( temp 2-component vector of float)
-0:147          log ( temp 2-component vector of float)
+0:147        move second child to first child ( temp float)
+0:147          'r042' ( temp float)
+0:147          length ( temp float)
 0:147            'inF0' ( in 2-component vector of float)
 0:148      Sequence
 0:148        move second child to first child ( temp 2-component vector of float)
-0:148          'r044' ( temp 2-component vector of float)
-0:148          vector-scale ( temp 2-component vector of float)
-0:148            log2 ( temp 2-component vector of float)
-0:148              'inF0' ( in 2-component vector of float)
-0:148            Constant:
-0:148              0.301030
+0:148          'r043' ( temp 2-component vector of float)
+0:148          log ( temp 2-component vector of float)
+0:148            'inF0' ( in 2-component vector of float)
 0:149      Sequence
 0:149        move second child to first child ( temp 2-component vector of float)
-0:149          'r045' ( temp 2-component vector of float)
-0:149          log2 ( temp 2-component vector of float)
-0:149            'inF0' ( in 2-component vector of float)
+0:149          'r044' ( temp 2-component vector of float)
+0:149          vector-scale ( temp 2-component vector of float)
+0:149            log2 ( temp 2-component vector of float)
+0:149              'inF0' ( in 2-component vector of float)
+0:149            Constant:
+0:149              0.301030
 0:150      Sequence
 0:150        move second child to first child ( temp 2-component vector of float)
-0:150          'r046' ( temp 2-component vector of float)
-0:150          max ( temp 2-component vector of float)
+0:150          'r045' ( temp 2-component vector of float)
+0:150          log2 ( temp 2-component vector of float)
 0:150            'inF0' ( in 2-component vector of float)
-0:150            'inF1' ( in 2-component vector of float)
 0:151      Sequence
 0:151        move second child to first child ( temp 2-component vector of float)
-0:151          'r047' ( temp 2-component vector of float)
-0:151          min ( temp 2-component vector of float)
+0:151          'r046' ( temp 2-component vector of float)
+0:151          max ( temp 2-component vector of float)
 0:151            'inF0' ( in 2-component vector of float)
 0:151            'inF1' ( in 2-component vector of float)
 0:152      Sequence
 0:152        move second child to first child ( temp 2-component vector of float)
-0:152          'r048' ( temp 2-component vector of float)
-0:152          normalize ( temp 2-component vector of float)
+0:152          'r047' ( temp 2-component vector of float)
+0:152          min ( temp 2-component vector of float)
 0:152            'inF0' ( in 2-component vector of float)
+0:152            'inF1' ( in 2-component vector of float)
 0:153      Sequence
 0:153        move second child to first child ( temp 2-component vector of float)
-0:153          'r049' ( temp 2-component vector of float)
-0:153          pow ( temp 2-component vector of float)
+0:153          'r048' ( temp 2-component vector of float)
+0:153          normalize ( temp 2-component vector of float)
 0:153            'inF0' ( in 2-component vector of float)
-0:153            'inF1' ( in 2-component vector of float)
 0:154      Sequence
 0:154        move second child to first child ( temp 2-component vector of float)
-0:154          'r050' ( temp 2-component vector of float)
-0:154          radians ( temp 2-component vector of float)
+0:154          'r049' ( temp 2-component vector of float)
+0:154          pow ( temp 2-component vector of float)
 0:154            'inF0' ( in 2-component vector of float)
+0:154            'inF1' ( in 2-component vector of float)
 0:155      Sequence
 0:155        move second child to first child ( temp 2-component vector of float)
-0:155          'r051' ( temp 2-component vector of float)
-0:155          divide ( temp 2-component vector of float)
-0:155            Constant:
-0:155              1.000000
+0:155          'r050' ( temp 2-component vector of float)
+0:155          radians ( temp 2-component vector of float)
 0:155            'inF0' ( in 2-component vector of float)
 0:156      Sequence
 0:156        move second child to first child ( temp 2-component vector of float)
-0:156          'r052' ( temp 2-component vector of float)
-0:156          reflect ( temp 2-component vector of float)
+0:156          'r051' ( temp 2-component vector of float)
+0:156          divide ( temp 2-component vector of float)
+0:156            Constant:
+0:156              1.000000
 0:156            'inF0' ( in 2-component vector of float)
-0:156            'inF1' ( in 2-component vector of float)
 0:157      Sequence
 0:157        move second child to first child ( temp 2-component vector of float)
-0:157          'r053' ( temp 2-component vector of float)
-0:157          refract ( temp 2-component vector of float)
+0:157          'r052' ( temp 2-component vector of float)
+0:157          reflect ( temp 2-component vector of float)
 0:157            'inF0' ( in 2-component vector of float)
 0:157            'inF1' ( in 2-component vector of float)
-0:157            Constant:
-0:157              2.000000
 0:158      Sequence
-0:158        move second child to first child ( temp 2-component vector of uint)
-0:158          'r054' ( temp 2-component vector of uint)
+0:158        move second child to first child ( temp 2-component vector of float)
+0:158          'r053' ( temp 2-component vector of float)
+0:158          refract ( temp 2-component vector of float)
+0:158            'inF0' ( in 2-component vector of float)
+0:158            'inF1' ( in 2-component vector of float)
+0:158            Constant:
+0:158              2.000000
+0:159      Sequence
+0:159        move second child to first child ( temp 2-component vector of uint)
+0:159          'r054' ( temp 2-component vector of uint)
 0:?           bitFieldReverse ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
-0:159      Sequence
-0:159        move second child to first child ( temp 2-component vector of float)
-0:159          'r055' ( temp 2-component vector of float)
-0:159          roundEven ( temp 2-component vector of float)
-0:159            'inF0' ( in 2-component vector of float)
 0:160      Sequence
 0:160        move second child to first child ( temp 2-component vector of float)
-0:160          'r056' ( temp 2-component vector of float)
-0:160          inverse sqrt ( temp 2-component vector of float)
+0:160          'r055' ( temp 2-component vector of float)
+0:160          roundEven ( temp 2-component vector of float)
 0:160            'inF0' ( in 2-component vector of float)
 0:161      Sequence
 0:161        move second child to first child ( temp 2-component vector of float)
-0:161          'r057' ( temp 2-component vector of float)
-0:161          clamp ( temp 2-component vector of float)
+0:161          'r056' ( temp 2-component vector of float)
+0:161          inverse sqrt ( temp 2-component vector of float)
 0:161            'inF0' ( in 2-component vector of float)
-0:161            Constant:
-0:161              0.000000
-0:161            Constant:
-0:161              1.000000
 0:162      Sequence
 0:162        move second child to first child ( temp 2-component vector of float)
-0:162          'r058' ( temp 2-component vector of float)
-0:162          Sign ( temp 2-component vector of float)
+0:162          'r057' ( temp 2-component vector of float)
+0:162          clamp ( temp 2-component vector of float)
 0:162            'inF0' ( in 2-component vector of float)
+0:162            Constant:
+0:162              0.000000
+0:162            Constant:
+0:162              1.000000
 0:163      Sequence
 0:163        move second child to first child ( temp 2-component vector of float)
-0:163          'r059' ( temp 2-component vector of float)
-0:163          sine ( temp 2-component vector of float)
+0:163          'r058' ( temp 2-component vector of float)
+0:163          Sign ( temp 2-component vector of float)
 0:163            'inF0' ( in 2-component vector of float)
 0:164      Sequence
 0:164        move second child to first child ( temp 2-component vector of float)
-0:164          'inF1' ( in 2-component vector of float)
+0:164          'r059' ( temp 2-component vector of float)
 0:164          sine ( temp 2-component vector of float)
 0:164            'inF0' ( in 2-component vector of float)
-0:164        move second child to first child ( temp 2-component vector of float)
-0:164          'inF2' ( in 2-component vector of float)
-0:164          cosine ( temp 2-component vector of float)
-0:164            'inF0' ( in 2-component vector of float)
 0:165      Sequence
 0:165        move second child to first child ( temp 2-component vector of float)
-0:165          'r060' ( temp 2-component vector of float)
-0:165          hyp. sine ( temp 2-component vector of float)
+0:165          'inF1' ( in 2-component vector of float)
+0:165          sine ( temp 2-component vector of float)
+0:165            'inF0' ( in 2-component vector of float)
+0:165        move second child to first child ( temp 2-component vector of float)
+0:165          'inF2' ( in 2-component vector of float)
+0:165          cosine ( temp 2-component vector of float)
 0:165            'inF0' ( in 2-component vector of float)
 0:166      Sequence
 0:166        move second child to first child ( temp 2-component vector of float)
-0:166          'r061' ( temp 2-component vector of float)
-0:166          smoothstep ( temp 2-component vector of float)
+0:166          'r060' ( temp 2-component vector of float)
+0:166          hyp. sine ( temp 2-component vector of float)
 0:166            'inF0' ( in 2-component vector of float)
-0:166            'inF1' ( in 2-component vector of float)
-0:166            'inF2' ( in 2-component vector of float)
 0:167      Sequence
 0:167        move second child to first child ( temp 2-component vector of float)
-0:167          'r062' ( temp 2-component vector of float)
-0:167          sqrt ( temp 2-component vector of float)
+0:167          'r061' ( temp 2-component vector of float)
+0:167          smoothstep ( temp 2-component vector of float)
 0:167            'inF0' ( in 2-component vector of float)
+0:167            'inF1' ( in 2-component vector of float)
+0:167            'inF2' ( in 2-component vector of float)
 0:168      Sequence
 0:168        move second child to first child ( temp 2-component vector of float)
-0:168          'r063' ( temp 2-component vector of float)
-0:168          step ( temp 2-component vector of float)
+0:168          'r062' ( temp 2-component vector of float)
+0:168          sqrt ( temp 2-component vector of float)
 0:168            'inF0' ( in 2-component vector of float)
-0:168            'inF1' ( in 2-component vector of float)
 0:169      Sequence
 0:169        move second child to first child ( temp 2-component vector of float)
-0:169          'r064' ( temp 2-component vector of float)
-0:169          tangent ( temp 2-component vector of float)
+0:169          'r063' ( temp 2-component vector of float)
+0:169          step ( temp 2-component vector of float)
 0:169            'inF0' ( in 2-component vector of float)
+0:169            'inF1' ( in 2-component vector of float)
 0:170      Sequence
 0:170        move second child to first child ( temp 2-component vector of float)
-0:170          'r065' ( temp 2-component vector of float)
-0:170          hyp. tangent ( temp 2-component vector of float)
+0:170          'r064' ( temp 2-component vector of float)
+0:170          tangent ( temp 2-component vector of float)
 0:170            'inF0' ( in 2-component vector of float)
-0:172      Sequence
-0:172        move second child to first child ( temp 2-component vector of float)
-0:172          'r066' ( temp 2-component vector of float)
-0:172          trunc ( temp 2-component vector of float)
-0:172            'inF0' ( in 2-component vector of float)
-0:175      Branch: Return with expression
+0:171      Sequence
+0:171        move second child to first child ( temp 2-component vector of float)
+0:171          'r065' ( temp 2-component vector of float)
+0:171          hyp. tangent ( temp 2-component vector of float)
+0:171            'inF0' ( in 2-component vector of float)
+0:173      Sequence
+0:173        move second child to first child ( temp 2-component vector of float)
+0:173          'r066' ( temp 2-component vector of float)
+0:173          trunc ( temp 2-component vector of float)
+0:173            'inF0' ( in 2-component vector of float)
+0:176      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:179  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
-0:179    Function Parameters: 
-0:179      'inF0' ( in 3-component vector of float)
-0:179      'inF1' ( in 3-component vector of float)
-0:179      'inF2' ( in 3-component vector of float)
-0:179      'inU0' ( in 3-component vector of uint)
-0:179      'inU1' ( in 3-component vector of uint)
+0:180  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
+0:180    Function Parameters: 
+0:180      'inF0' ( in 3-component vector of float)
+0:180      'inF1' ( in 3-component vector of float)
+0:180      'inF2' ( in 3-component vector of float)
+0:180      'inU0' ( in 3-component vector of uint)
+0:180      'inU1' ( in 3-component vector of uint)
 0:?     Sequence
-0:182      Sequence
-0:182        move second child to first child ( temp bool)
-0:182          'r000' ( temp bool)
-0:182          all ( temp bool)
-0:182            Convert float to bool ( temp 3-component vector of bool)
-0:182              'inF0' ( in 3-component vector of float)
 0:183      Sequence
-0:183        move second child to first child ( temp 3-component vector of float)
-0:183          'r001' ( temp 3-component vector of float)
-0:183          Absolute value ( temp 3-component vector of float)
-0:183            'inF0' ( in 3-component vector of float)
+0:183        move second child to first child ( temp bool)
+0:183          'r000' ( temp bool)
+0:183          all ( temp bool)
+0:183            Convert float to bool ( temp 3-component vector of bool)
+0:183              'inF0' ( in 3-component vector of float)
 0:184      Sequence
 0:184        move second child to first child ( temp 3-component vector of float)
-0:184          'r002' ( temp 3-component vector of float)
-0:184          arc cosine ( temp 3-component vector of float)
+0:184          'r001' ( temp 3-component vector of float)
+0:184          Absolute value ( temp 3-component vector of float)
 0:184            'inF0' ( in 3-component vector of float)
 0:185      Sequence
-0:185        move second child to first child ( temp bool)
-0:185          'r003' ( temp bool)
-0:185          any ( temp bool)
-0:185            Convert float to bool ( temp 3-component vector of bool)
-0:185              'inF0' ( in 3-component vector of float)
+0:185        move second child to first child ( temp 3-component vector of float)
+0:185          'r002' ( temp 3-component vector of float)
+0:185          arc cosine ( temp 3-component vector of float)
+0:185            'inF0' ( in 3-component vector of float)
 0:186      Sequence
-0:186        move second child to first child ( temp 3-component vector of float)
-0:186          'r004' ( temp 3-component vector of float)
-0:186          arc sine ( temp 3-component vector of float)
-0:186            'inF0' ( in 3-component vector of float)
+0:186        move second child to first child ( temp bool)
+0:186          'r003' ( temp bool)
+0:186          any ( temp bool)
+0:186            Convert float to bool ( temp 3-component vector of bool)
+0:186              'inF0' ( in 3-component vector of float)
 0:187      Sequence
-0:187        move second child to first child ( temp 3-component vector of int)
-0:187          'r005' ( temp 3-component vector of int)
-0:187          floatBitsToInt ( temp 3-component vector of int)
+0:187        move second child to first child ( temp 3-component vector of float)
+0:187          'r004' ( temp 3-component vector of float)
+0:187          arc sine ( temp 3-component vector of float)
 0:187            'inF0' ( in 3-component vector of float)
 0:188      Sequence
-0:188        move second child to first child ( temp 3-component vector of uint)
-0:188          'r006' ( temp 3-component vector of uint)
-0:188          floatBitsToUint ( temp 3-component vector of uint)
+0:188        move second child to first child ( temp 3-component vector of int)
+0:188          'r005' ( temp 3-component vector of int)
+0:188          floatBitsToInt ( temp 3-component vector of int)
 0:188            'inF0' ( in 3-component vector of float)
 0:189      Sequence
-0:189        move second child to first child ( temp 3-component vector of float)
-0:189          'r007' ( temp 3-component vector of float)
-0:189          intBitsToFloat ( temp 3-component vector of float)
-0:189            'inU0' ( in 3-component vector of uint)
-0:191      Sequence
-0:191        move second child to first child ( temp 3-component vector of float)
-0:191          'r009' ( temp 3-component vector of float)
-0:191          arc tangent ( temp 3-component vector of float)
-0:191            'inF0' ( in 3-component vector of float)
+0:189        move second child to first child ( temp 3-component vector of uint)
+0:189          'r006' ( temp 3-component vector of uint)
+0:189          floatBitsToUint ( temp 3-component vector of uint)
+0:189            'inF0' ( in 3-component vector of float)
+0:190      Sequence
+0:190        move second child to first child ( temp 3-component vector of float)
+0:190          'r007' ( temp 3-component vector of float)
+0:190          intBitsToFloat ( temp 3-component vector of float)
+0:190            'inU0' ( in 3-component vector of uint)
 0:192      Sequence
 0:192        move second child to first child ( temp 3-component vector of float)
-0:192          'r010' ( temp 3-component vector of float)
+0:192          'r009' ( temp 3-component vector of float)
 0:192          arc tangent ( temp 3-component vector of float)
 0:192            'inF0' ( in 3-component vector of float)
-0:192            'inF1' ( in 3-component vector of float)
 0:193      Sequence
 0:193        move second child to first child ( temp 3-component vector of float)
-0:193          'r011' ( temp 3-component vector of float)
-0:193          Ceiling ( temp 3-component vector of float)
+0:193          'r010' ( temp 3-component vector of float)
+0:193          arc tangent ( temp 3-component vector of float)
 0:193            'inF0' ( in 3-component vector of float)
+0:193            'inF1' ( in 3-component vector of float)
 0:194      Sequence
 0:194        move second child to first child ( temp 3-component vector of float)
-0:194          'r012' ( temp 3-component vector of float)
-0:194          clamp ( temp 3-component vector of float)
+0:194          'r011' ( temp 3-component vector of float)
+0:194          Ceiling ( temp 3-component vector of float)
 0:194            'inF0' ( in 3-component vector of float)
-0:194            'inF1' ( in 3-component vector of float)
-0:194            'inF2' ( in 3-component vector of float)
-0:195      Test condition and select ( temp void)
-0:195        Condition
-0:195        any ( temp bool)
-0:195          Compare Less Than ( temp 3-component vector of bool)
+0:195      Sequence
+0:195        move second child to first child ( temp 3-component vector of float)
+0:195          'r012' ( temp 3-component vector of float)
+0:195          clamp ( temp 3-component vector of float)
 0:195            'inF0' ( in 3-component vector of float)
-0:195            Constant:
-0:195              0.000000
-0:195              0.000000
-0:195              0.000000
-0:195        true case
-0:195        Branch: Kill
+0:195            'inF1' ( in 3-component vector of float)
+0:195            'inF2' ( in 3-component vector of float)
 0:196      Test condition and select ( temp void)
 0:196        Condition
 0:196        any ( temp bool)
 0:196          Compare Less Than ( temp 3-component vector of bool)
-0:196            'inU0' ( in 3-component vector of uint)
+0:196            'inF0' ( in 3-component vector of float)
 0:196            Constant:
 0:196              0.000000
 0:196              0.000000
 0:196              0.000000
 0:196        true case
 0:196        Branch: Kill
-0:197      Sequence
-0:197        move second child to first child ( temp 3-component vector of float)
-0:197          'r013' ( temp 3-component vector of float)
-0:197          cosine ( temp 3-component vector of float)
-0:197            'inF0' ( in 3-component vector of float)
+0:197      Test condition and select ( temp void)
+0:197        Condition
+0:197        any ( temp bool)
+0:197          Compare Less Than ( temp 3-component vector of bool)
+0:197            'inU0' ( in 3-component vector of uint)
+0:197            Constant:
+0:197              0.000000
+0:197              0.000000
+0:197              0.000000
+0:197        true case
+0:197        Branch: Kill
 0:198      Sequence
 0:198        move second child to first child ( temp 3-component vector of float)
-0:198          'r014' ( temp 3-component vector of float)
-0:198          hyp. cosine ( temp 3-component vector of float)
+0:198          'r013' ( temp 3-component vector of float)
+0:198          cosine ( temp 3-component vector of float)
 0:198            'inF0' ( in 3-component vector of float)
 0:199      Sequence
-0:199        move second child to first child ( temp 3-component vector of uint)
-0:199          'r015' ( temp 3-component vector of uint)
+0:199        move second child to first child ( temp 3-component vector of float)
+0:199          'r014' ( temp 3-component vector of float)
+0:199          hyp. cosine ( temp 3-component vector of float)
+0:199            'inF0' ( in 3-component vector of float)
+0:200      Sequence
+0:200        move second child to first child ( temp 3-component vector of uint)
+0:200          'r015' ( temp 3-component vector of uint)
 0:?           bitCount ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
-0:200      Sequence
-0:200        move second child to first child ( temp 3-component vector of float)
-0:200          'r016' ( temp 3-component vector of float)
-0:200          cross-product ( temp 3-component vector of float)
-0:200            'inF0' ( in 3-component vector of float)
-0:200            'inF1' ( in 3-component vector of float)
 0:201      Sequence
 0:201        move second child to first child ( temp 3-component vector of float)
-0:201          'r017' ( temp 3-component vector of float)
-0:201          dPdx ( temp 3-component vector of float)
+0:201          'r016' ( temp 3-component vector of float)
+0:201          cross-product ( temp 3-component vector of float)
 0:201            'inF0' ( in 3-component vector of float)
+0:201            'inF1' ( in 3-component vector of float)
 0:202      Sequence
 0:202        move second child to first child ( temp 3-component vector of float)
-0:202          'r018' ( temp 3-component vector of float)
-0:202          dPdxCoarse ( temp 3-component vector of float)
+0:202          'r017' ( temp 3-component vector of float)
+0:202          dPdx ( temp 3-component vector of float)
 0:202            'inF0' ( in 3-component vector of float)
 0:203      Sequence
 0:203        move second child to first child ( temp 3-component vector of float)
-0:203          'r019' ( temp 3-component vector of float)
-0:203          dPdxFine ( temp 3-component vector of float)
+0:203          'r018' ( temp 3-component vector of float)
+0:203          dPdxCoarse ( temp 3-component vector of float)
 0:203            'inF0' ( in 3-component vector of float)
 0:204      Sequence
 0:204        move second child to first child ( temp 3-component vector of float)
-0:204          'r020' ( temp 3-component vector of float)
-0:204          dPdy ( temp 3-component vector of float)
+0:204          'r019' ( temp 3-component vector of float)
+0:204          dPdxFine ( temp 3-component vector of float)
 0:204            'inF0' ( in 3-component vector of float)
 0:205      Sequence
 0:205        move second child to first child ( temp 3-component vector of float)
-0:205          'r021' ( temp 3-component vector of float)
-0:205          dPdyCoarse ( temp 3-component vector of float)
+0:205          'r020' ( temp 3-component vector of float)
+0:205          dPdy ( temp 3-component vector of float)
 0:205            'inF0' ( in 3-component vector of float)
 0:206      Sequence
 0:206        move second child to first child ( temp 3-component vector of float)
-0:206          'r022' ( temp 3-component vector of float)
-0:206          dPdyFine ( temp 3-component vector of float)
+0:206          'r021' ( temp 3-component vector of float)
+0:206          dPdyCoarse ( temp 3-component vector of float)
 0:206            'inF0' ( in 3-component vector of float)
 0:207      Sequence
 0:207        move second child to first child ( temp 3-component vector of float)
-0:207          'r023' ( temp 3-component vector of float)
-0:207          degrees ( temp 3-component vector of float)
+0:207          'r022' ( temp 3-component vector of float)
+0:207          dPdyFine ( temp 3-component vector of float)
 0:207            'inF0' ( in 3-component vector of float)
 0:208      Sequence
-0:208        move second child to first child ( temp float)
-0:208          'r024' ( temp float)
-0:208          distance ( temp float)
+0:208        move second child to first child ( temp 3-component vector of float)
+0:208          'r023' ( temp 3-component vector of float)
+0:208          degrees ( temp 3-component vector of float)
 0:208            'inF0' ( in 3-component vector of float)
-0:208            'inF1' ( in 3-component vector of float)
 0:209      Sequence
 0:209        move second child to first child ( temp float)
-0:209          'r025' ( temp float)
-0:209          dot-product ( temp float)
+0:209          'r024' ( temp float)
+0:209          distance ( temp float)
 0:209            'inF0' ( in 3-component vector of float)
 0:209            'inF1' ( in 3-component vector of float)
-0:213      Sequence
-0:213        move second child to first child ( temp 3-component vector of float)
-0:213          'r029' ( temp 3-component vector of float)
-0:213          exp ( temp 3-component vector of float)
-0:213            'inF0' ( in 3-component vector of float)
+0:210      Sequence
+0:210        move second child to first child ( temp float)
+0:210          'r025' ( temp float)
+0:210          dot-product ( temp float)
+0:210            'inF0' ( in 3-component vector of float)
+0:210            'inF1' ( in 3-component vector of float)
 0:214      Sequence
 0:214        move second child to first child ( temp 3-component vector of float)
-0:214          'r030' ( temp 3-component vector of float)
-0:214          exp2 ( temp 3-component vector of float)
+0:214          'r029' ( temp 3-component vector of float)
+0:214          exp ( temp 3-component vector of float)
 0:214            'inF0' ( in 3-component vector of float)
 0:215      Sequence
 0:215        move second child to first child ( temp 3-component vector of float)
-0:215          'r031' ( temp 3-component vector of float)
-0:215          face-forward ( temp 3-component vector of float)
+0:215          'r030' ( temp 3-component vector of float)
+0:215          exp2 ( temp 3-component vector of float)
 0:215            'inF0' ( in 3-component vector of float)
-0:215            'inF1' ( in 3-component vector of float)
-0:215            'inF2' ( in 3-component vector of float)
 0:216      Sequence
-0:216        move second child to first child ( temp 3-component vector of uint)
-0:216          'r032' ( temp 3-component vector of uint)
+0:216        move second child to first child ( temp 3-component vector of float)
+0:216          'r031' ( temp 3-component vector of float)
+0:216          face-forward ( temp 3-component vector of float)
+0:216            'inF0' ( in 3-component vector of float)
+0:216            'inF1' ( in 3-component vector of float)
+0:216            'inF2' ( in 3-component vector of float)
+0:217      Sequence
+0:217        move second child to first child ( temp 3-component vector of uint)
+0:217          'r032' ( temp 3-component vector of uint)
 0:?           findMSB ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:217      Sequence
-0:217        move second child to first child ( temp 3-component vector of uint)
-0:217          'r033' ( temp 3-component vector of uint)
+0:218      Sequence
+0:218        move second child to first child ( temp 3-component vector of uint)
+0:218          'r033' ( temp 3-component vector of uint)
 0:?           findLSB ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:218      Sequence
-0:218        move second child to first child ( temp 3-component vector of float)
-0:218          'r034' ( temp 3-component vector of float)
-0:218          Floor ( temp 3-component vector of float)
-0:218            'inF0' ( in 3-component vector of float)
-0:220      Sequence
-0:220        move second child to first child ( temp 3-component vector of float)
-0:220          'r036' ( temp 3-component vector of float)
-0:220          mod ( temp 3-component vector of float)
-0:220            'inF0' ( in 3-component vector of float)
-0:220            'inF1' ( in 3-component vector of float)
+0:219      Sequence
+0:219        move second child to first child ( temp 3-component vector of float)
+0:219          'r034' ( temp 3-component vector of float)
+0:219          Floor ( temp 3-component vector of float)
+0:219            'inF0' ( in 3-component vector of float)
 0:221      Sequence
 0:221        move second child to first child ( temp 3-component vector of float)
-0:221          'r037' ( temp 3-component vector of float)
-0:221          Fraction ( temp 3-component vector of float)
+0:221          'r036' ( temp 3-component vector of float)
+0:221          mod ( temp 3-component vector of float)
 0:221            'inF0' ( in 3-component vector of float)
+0:221            'inF1' ( in 3-component vector of float)
 0:222      Sequence
 0:222        move second child to first child ( temp 3-component vector of float)
-0:222          'r039' ( temp 3-component vector of float)
-0:222          fwidth ( temp 3-component vector of float)
+0:222          'r037' ( temp 3-component vector of float)
+0:222          Fraction ( temp 3-component vector of float)
 0:222            'inF0' ( in 3-component vector of float)
 0:223      Sequence
-0:223        move second child to first child ( temp 3-component vector of bool)
-0:223          'r040' ( temp 3-component vector of bool)
-0:223          isinf ( temp 3-component vector of bool)
+0:223        move second child to first child ( temp 3-component vector of float)
+0:223          'r039' ( temp 3-component vector of float)
+0:223          fwidth ( temp 3-component vector of float)
 0:223            'inF0' ( in 3-component vector of float)
 0:224      Sequence
 0:224        move second child to first child ( temp 3-component vector of bool)
-0:224          'r041' ( temp 3-component vector of bool)
-0:224          isnan ( temp 3-component vector of bool)
+0:224          'r040' ( temp 3-component vector of bool)
+0:224          isinf ( temp 3-component vector of bool)
 0:224            'inF0' ( in 3-component vector of float)
 0:225      Sequence
-0:225        move second child to first child ( temp 3-component vector of float)
-0:225          'r042' ( temp 3-component vector of float)
-0:225          ldexp ( temp 3-component vector of float)
+0:225        move second child to first child ( temp 3-component vector of bool)
+0:225          'r041' ( temp 3-component vector of bool)
+0:225          isnan ( temp 3-component vector of bool)
 0:225            'inF0' ( in 3-component vector of float)
-0:225            'inF1' ( in 3-component vector of float)
 0:226      Sequence
 0:226        move second child to first child ( temp 3-component vector of float)
-0:226          'r039a' ( temp 3-component vector of float)
-0:226          mix ( temp 3-component vector of float)
+0:226          'r042' ( temp 3-component vector of float)
+0:226          ldexp ( temp 3-component vector of float)
 0:226            'inF0' ( in 3-component vector of float)
 0:226            'inF1' ( in 3-component vector of float)
-0:226            'inF2' ( in 3-component vector of float)
 0:227      Sequence
 0:227        move second child to first child ( temp 3-component vector of float)
-0:227          'r039b' ( temp 3-component vector of float)
+0:227          'r039a' ( temp 3-component vector of float)
 0:227          mix ( temp 3-component vector of float)
 0:227            'inF0' ( in 3-component vector of float)
 0:227            'inF1' ( in 3-component vector of float)
-0:227            Constant:
-0:227              0.300000
+0:227            'inF2' ( in 3-component vector of float)
 0:228      Sequence
-0:228        move second child to first child ( temp float)
-0:228          'r043' ( temp float)
-0:228          length ( temp float)
+0:228        move second child to first child ( temp 3-component vector of float)
+0:228          'r039b' ( temp 3-component vector of float)
+0:228          mix ( temp 3-component vector of float)
 0:228            'inF0' ( in 3-component vector of float)
+0:228            'inF1' ( in 3-component vector of float)
+0:228            Constant:
+0:228              0.300000
 0:229      Sequence
-0:229        move second child to first child ( temp 3-component vector of float)
-0:229          'r044' ( temp 3-component vector of float)
-0:229          log ( temp 3-component vector of float)
+0:229        move second child to first child ( temp float)
+0:229          'r043' ( temp float)
+0:229          length ( temp float)
 0:229            'inF0' ( in 3-component vector of float)
 0:230      Sequence
 0:230        move second child to first child ( temp 3-component vector of float)
-0:230          'r045' ( temp 3-component vector of float)
-0:230          vector-scale ( temp 3-component vector of float)
-0:230            log2 ( temp 3-component vector of float)
-0:230              'inF0' ( in 3-component vector of float)
-0:230            Constant:
-0:230              0.301030
+0:230          'r044' ( temp 3-component vector of float)
+0:230          log ( temp 3-component vector of float)
+0:230            'inF0' ( in 3-component vector of float)
 0:231      Sequence
 0:231        move second child to first child ( temp 3-component vector of float)
-0:231          'r046' ( temp 3-component vector of float)
-0:231          log2 ( temp 3-component vector of float)
-0:231            'inF0' ( in 3-component vector of float)
+0:231          'r045' ( temp 3-component vector of float)
+0:231          vector-scale ( temp 3-component vector of float)
+0:231            log2 ( temp 3-component vector of float)
+0:231              'inF0' ( in 3-component vector of float)
+0:231            Constant:
+0:231              0.301030
 0:232      Sequence
 0:232        move second child to first child ( temp 3-component vector of float)
-0:232          'r047' ( temp 3-component vector of float)
-0:232          max ( temp 3-component vector of float)
+0:232          'r046' ( temp 3-component vector of float)
+0:232          log2 ( temp 3-component vector of float)
 0:232            'inF0' ( in 3-component vector of float)
-0:232            'inF1' ( in 3-component vector of float)
 0:233      Sequence
 0:233        move second child to first child ( temp 3-component vector of float)
-0:233          'r048' ( temp 3-component vector of float)
-0:233          min ( temp 3-component vector of float)
+0:233          'r047' ( temp 3-component vector of float)
+0:233          max ( temp 3-component vector of float)
 0:233            'inF0' ( in 3-component vector of float)
 0:233            'inF1' ( in 3-component vector of float)
 0:234      Sequence
 0:234        move second child to first child ( temp 3-component vector of float)
-0:234          'r049' ( temp 3-component vector of float)
-0:234          normalize ( temp 3-component vector of float)
+0:234          'r048' ( temp 3-component vector of float)
+0:234          min ( temp 3-component vector of float)
 0:234            'inF0' ( in 3-component vector of float)
+0:234            'inF1' ( in 3-component vector of float)
 0:235      Sequence
 0:235        move second child to first child ( temp 3-component vector of float)
-0:235          'r050' ( temp 3-component vector of float)
-0:235          pow ( temp 3-component vector of float)
+0:235          'r049' ( temp 3-component vector of float)
+0:235          normalize ( temp 3-component vector of float)
 0:235            'inF0' ( in 3-component vector of float)
-0:235            'inF1' ( in 3-component vector of float)
 0:236      Sequence
 0:236        move second child to first child ( temp 3-component vector of float)
-0:236          'r051' ( temp 3-component vector of float)
-0:236          radians ( temp 3-component vector of float)
+0:236          'r050' ( temp 3-component vector of float)
+0:236          pow ( temp 3-component vector of float)
 0:236            'inF0' ( in 3-component vector of float)
+0:236            'inF1' ( in 3-component vector of float)
 0:237      Sequence
 0:237        move second child to first child ( temp 3-component vector of float)
-0:237          'r052' ( temp 3-component vector of float)
-0:237          divide ( temp 3-component vector of float)
-0:237            Constant:
-0:237              1.000000
+0:237          'r051' ( temp 3-component vector of float)
+0:237          radians ( temp 3-component vector of float)
 0:237            'inF0' ( in 3-component vector of float)
 0:238      Sequence
 0:238        move second child to first child ( temp 3-component vector of float)
-0:238          'r053' ( temp 3-component vector of float)
-0:238          reflect ( temp 3-component vector of float)
+0:238          'r052' ( temp 3-component vector of float)
+0:238          divide ( temp 3-component vector of float)
+0:238            Constant:
+0:238              1.000000
 0:238            'inF0' ( in 3-component vector of float)
-0:238            'inF1' ( in 3-component vector of float)
 0:239      Sequence
 0:239        move second child to first child ( temp 3-component vector of float)
-0:239          'r054' ( temp 3-component vector of float)
-0:239          refract ( temp 3-component vector of float)
+0:239          'r053' ( temp 3-component vector of float)
+0:239          reflect ( temp 3-component vector of float)
 0:239            'inF0' ( in 3-component vector of float)
 0:239            'inF1' ( in 3-component vector of float)
-0:239            Constant:
-0:239              2.000000
 0:240      Sequence
-0:240        move second child to first child ( temp 3-component vector of uint)
-0:240          'r055' ( temp 3-component vector of uint)
+0:240        move second child to first child ( temp 3-component vector of float)
+0:240          'r054' ( temp 3-component vector of float)
+0:240          refract ( temp 3-component vector of float)
+0:240            'inF0' ( in 3-component vector of float)
+0:240            'inF1' ( in 3-component vector of float)
+0:240            Constant:
+0:240              2.000000
+0:241      Sequence
+0:241        move second child to first child ( temp 3-component vector of uint)
+0:241          'r055' ( temp 3-component vector of uint)
 0:?           bitFieldReverse ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
-0:241      Sequence
-0:241        move second child to first child ( temp 3-component vector of float)
-0:241          'r056' ( temp 3-component vector of float)
-0:241          roundEven ( temp 3-component vector of float)
-0:241            'inF0' ( in 3-component vector of float)
 0:242      Sequence
 0:242        move second child to first child ( temp 3-component vector of float)
-0:242          'r057' ( temp 3-component vector of float)
-0:242          inverse sqrt ( temp 3-component vector of float)
+0:242          'r056' ( temp 3-component vector of float)
+0:242          roundEven ( temp 3-component vector of float)
 0:242            'inF0' ( in 3-component vector of float)
 0:243      Sequence
 0:243        move second child to first child ( temp 3-component vector of float)
-0:243          'r058' ( temp 3-component vector of float)
-0:243          clamp ( temp 3-component vector of float)
+0:243          'r057' ( temp 3-component vector of float)
+0:243          inverse sqrt ( temp 3-component vector of float)
 0:243            'inF0' ( in 3-component vector of float)
-0:243            Constant:
-0:243              0.000000
-0:243            Constant:
-0:243              1.000000
 0:244      Sequence
 0:244        move second child to first child ( temp 3-component vector of float)
-0:244          'r059' ( temp 3-component vector of float)
-0:244          Sign ( temp 3-component vector of float)
+0:244          'r058' ( temp 3-component vector of float)
+0:244          clamp ( temp 3-component vector of float)
 0:244            'inF0' ( in 3-component vector of float)
+0:244            Constant:
+0:244              0.000000
+0:244            Constant:
+0:244              1.000000
 0:245      Sequence
 0:245        move second child to first child ( temp 3-component vector of float)
-0:245          'r060' ( temp 3-component vector of float)
-0:245          sine ( temp 3-component vector of float)
+0:245          'r059' ( temp 3-component vector of float)
+0:245          Sign ( temp 3-component vector of float)
 0:245            'inF0' ( in 3-component vector of float)
 0:246      Sequence
 0:246        move second child to first child ( temp 3-component vector of float)
-0:246          'inF1' ( in 3-component vector of float)
+0:246          'r060' ( temp 3-component vector of float)
 0:246          sine ( temp 3-component vector of float)
 0:246            'inF0' ( in 3-component vector of float)
-0:246        move second child to first child ( temp 3-component vector of float)
-0:246          'inF2' ( in 3-component vector of float)
-0:246          cosine ( temp 3-component vector of float)
-0:246            'inF0' ( in 3-component vector of float)
 0:247      Sequence
 0:247        move second child to first child ( temp 3-component vector of float)
-0:247          'r061' ( temp 3-component vector of float)
-0:247          hyp. sine ( temp 3-component vector of float)
+0:247          'inF1' ( in 3-component vector of float)
+0:247          sine ( temp 3-component vector of float)
+0:247            'inF0' ( in 3-component vector of float)
+0:247        move second child to first child ( temp 3-component vector of float)
+0:247          'inF2' ( in 3-component vector of float)
+0:247          cosine ( temp 3-component vector of float)
 0:247            'inF0' ( in 3-component vector of float)
 0:248      Sequence
 0:248        move second child to first child ( temp 3-component vector of float)
-0:248          'r062' ( temp 3-component vector of float)
-0:248          smoothstep ( temp 3-component vector of float)
+0:248          'r061' ( temp 3-component vector of float)
+0:248          hyp. sine ( temp 3-component vector of float)
 0:248            'inF0' ( in 3-component vector of float)
-0:248            'inF1' ( in 3-component vector of float)
-0:248            'inF2' ( in 3-component vector of float)
 0:249      Sequence
 0:249        move second child to first child ( temp 3-component vector of float)
-0:249          'r063' ( temp 3-component vector of float)
-0:249          sqrt ( temp 3-component vector of float)
+0:249          'r062' ( temp 3-component vector of float)
+0:249          smoothstep ( temp 3-component vector of float)
 0:249            'inF0' ( in 3-component vector of float)
+0:249            'inF1' ( in 3-component vector of float)
+0:249            'inF2' ( in 3-component vector of float)
 0:250      Sequence
 0:250        move second child to first child ( temp 3-component vector of float)
-0:250          'r064' ( temp 3-component vector of float)
-0:250          step ( temp 3-component vector of float)
+0:250          'r063' ( temp 3-component vector of float)
+0:250          sqrt ( temp 3-component vector of float)
 0:250            'inF0' ( in 3-component vector of float)
-0:250            'inF1' ( in 3-component vector of float)
 0:251      Sequence
 0:251        move second child to first child ( temp 3-component vector of float)
-0:251          'r065' ( temp 3-component vector of float)
-0:251          tangent ( temp 3-component vector of float)
+0:251          'r064' ( temp 3-component vector of float)
+0:251          step ( temp 3-component vector of float)
 0:251            'inF0' ( in 3-component vector of float)
+0:251            'inF1' ( in 3-component vector of float)
 0:252      Sequence
 0:252        move second child to first child ( temp 3-component vector of float)
-0:252          'r066' ( temp 3-component vector of float)
-0:252          hyp. tangent ( temp 3-component vector of float)
+0:252          'r065' ( temp 3-component vector of float)
+0:252          tangent ( temp 3-component vector of float)
 0:252            'inF0' ( in 3-component vector of float)
-0:254      Sequence
-0:254        move second child to first child ( temp 3-component vector of float)
-0:254          'r067' ( temp 3-component vector of float)
-0:254          trunc ( temp 3-component vector of float)
-0:254            'inF0' ( in 3-component vector of float)
-0:257      Branch: Return with expression
+0:253      Sequence
+0:253        move second child to first child ( temp 3-component vector of float)
+0:253          'r066' ( temp 3-component vector of float)
+0:253          hyp. tangent ( temp 3-component vector of float)
+0:253            'inF0' ( in 3-component vector of float)
+0:255      Sequence
+0:255        move second child to first child ( temp 3-component vector of float)
+0:255          'r067' ( temp 3-component vector of float)
+0:255          trunc ( temp 3-component vector of float)
+0:255            'inF0' ( in 3-component vector of float)
+0:258      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:261  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
-0:261    Function Parameters: 
-0:261      'inF0' ( in 4-component vector of float)
-0:261      'inF1' ( in 4-component vector of float)
-0:261      'inF2' ( in 4-component vector of float)
-0:261      'inU0' ( in 4-component vector of uint)
-0:261      'inU1' ( in 4-component vector of uint)
+0:262  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
+0:262    Function Parameters: 
+0:262      'inF0' ( in 4-component vector of float)
+0:262      'inF1' ( in 4-component vector of float)
+0:262      'inF2' ( in 4-component vector of float)
+0:262      'inU0' ( in 4-component vector of uint)
+0:262      'inU1' ( in 4-component vector of uint)
 0:?     Sequence
-0:264      Sequence
-0:264        move second child to first child ( temp bool)
-0:264          'r000' ( temp bool)
-0:264          all ( temp bool)
-0:264            Convert float to bool ( temp 4-component vector of bool)
-0:264              'inF0' ( in 4-component vector of float)
 0:265      Sequence
-0:265        move second child to first child ( temp 4-component vector of float)
-0:265          'r001' ( temp 4-component vector of float)
-0:265          Absolute value ( temp 4-component vector of float)
-0:265            'inF0' ( in 4-component vector of float)
+0:265        move second child to first child ( temp bool)
+0:265          'r000' ( temp bool)
+0:265          all ( temp bool)
+0:265            Convert float to bool ( temp 4-component vector of bool)
+0:265              'inF0' ( in 4-component vector of float)
 0:266      Sequence
 0:266        move second child to first child ( temp 4-component vector of float)
-0:266          'r002' ( temp 4-component vector of float)
-0:266          arc cosine ( temp 4-component vector of float)
+0:266          'r001' ( temp 4-component vector of float)
+0:266          Absolute value ( temp 4-component vector of float)
 0:266            'inF0' ( in 4-component vector of float)
 0:267      Sequence
-0:267        move second child to first child ( temp bool)
-0:267          'r003' ( temp bool)
-0:267          any ( temp bool)
-0:267            Convert float to bool ( temp 4-component vector of bool)
-0:267              'inF0' ( in 4-component vector of float)
+0:267        move second child to first child ( temp 4-component vector of float)
+0:267          'r002' ( temp 4-component vector of float)
+0:267          arc cosine ( temp 4-component vector of float)
+0:267            'inF0' ( in 4-component vector of float)
 0:268      Sequence
-0:268        move second child to first child ( temp 4-component vector of float)
-0:268          'r004' ( temp 4-component vector of float)
-0:268          arc sine ( temp 4-component vector of float)
-0:268            'inF0' ( in 4-component vector of float)
+0:268        move second child to first child ( temp bool)
+0:268          'r003' ( temp bool)
+0:268          any ( temp bool)
+0:268            Convert float to bool ( temp 4-component vector of bool)
+0:268              'inF0' ( in 4-component vector of float)
 0:269      Sequence
-0:269        move second child to first child ( temp 4-component vector of int)
-0:269          'r005' ( temp 4-component vector of int)
-0:269          floatBitsToInt ( temp 4-component vector of int)
+0:269        move second child to first child ( temp 4-component vector of float)
+0:269          'r004' ( temp 4-component vector of float)
+0:269          arc sine ( temp 4-component vector of float)
 0:269            'inF0' ( in 4-component vector of float)
 0:270      Sequence
-0:270        move second child to first child ( temp 4-component vector of uint)
-0:270          'r006' ( temp 4-component vector of uint)
-0:270          floatBitsToUint ( temp 4-component vector of uint)
+0:270        move second child to first child ( temp 4-component vector of int)
+0:270          'r005' ( temp 4-component vector of int)
+0:270          floatBitsToInt ( temp 4-component vector of int)
 0:270            'inF0' ( in 4-component vector of float)
 0:271      Sequence
-0:271        move second child to first child ( temp 4-component vector of float)
-0:271          'r007' ( temp 4-component vector of float)
-0:271          intBitsToFloat ( temp 4-component vector of float)
-0:271            'inU0' ( in 4-component vector of uint)
-0:273      Sequence
-0:273        move second child to first child ( temp 4-component vector of float)
-0:273          'r009' ( temp 4-component vector of float)
-0:273          arc tangent ( temp 4-component vector of float)
-0:273            'inF0' ( in 4-component vector of float)
+0:271        move second child to first child ( temp 4-component vector of uint)
+0:271          'r006' ( temp 4-component vector of uint)
+0:271          floatBitsToUint ( temp 4-component vector of uint)
+0:271            'inF0' ( in 4-component vector of float)
+0:272      Sequence
+0:272        move second child to first child ( temp 4-component vector of float)
+0:272          'r007' ( temp 4-component vector of float)
+0:272          intBitsToFloat ( temp 4-component vector of float)
+0:272            'inU0' ( in 4-component vector of uint)
 0:274      Sequence
 0:274        move second child to first child ( temp 4-component vector of float)
-0:274          'r010' ( temp 4-component vector of float)
+0:274          'r009' ( temp 4-component vector of float)
 0:274          arc tangent ( temp 4-component vector of float)
 0:274            'inF0' ( in 4-component vector of float)
-0:274            'inF1' ( in 4-component vector of float)
 0:275      Sequence
 0:275        move second child to first child ( temp 4-component vector of float)
-0:275          'r011' ( temp 4-component vector of float)
-0:275          Ceiling ( temp 4-component vector of float)
+0:275          'r010' ( temp 4-component vector of float)
+0:275          arc tangent ( temp 4-component vector of float)
 0:275            'inF0' ( in 4-component vector of float)
+0:275            'inF1' ( in 4-component vector of float)
 0:276      Sequence
 0:276        move second child to first child ( temp 4-component vector of float)
-0:276          'r012' ( temp 4-component vector of float)
-0:276          clamp ( temp 4-component vector of float)
+0:276          'r011' ( temp 4-component vector of float)
+0:276          Ceiling ( temp 4-component vector of float)
 0:276            'inF0' ( in 4-component vector of float)
-0:276            'inF1' ( in 4-component vector of float)
-0:276            'inF2' ( in 4-component vector of float)
-0:277      Test condition and select ( temp void)
-0:277        Condition
-0:277        any ( temp bool)
-0:277          Compare Less Than ( temp 4-component vector of bool)
+0:277      Sequence
+0:277        move second child to first child ( temp 4-component vector of float)
+0:277          'r012' ( temp 4-component vector of float)
+0:277          clamp ( temp 4-component vector of float)
 0:277            'inF0' ( in 4-component vector of float)
-0:277            Constant:
-0:277              0.000000
-0:277              0.000000
-0:277              0.000000
-0:277              0.000000
-0:277        true case
-0:277        Branch: Kill
+0:277            'inF1' ( in 4-component vector of float)
+0:277            'inF2' ( in 4-component vector of float)
 0:278      Test condition and select ( temp void)
 0:278        Condition
 0:278        any ( temp bool)
 0:278          Compare Less Than ( temp 4-component vector of bool)
-0:278            'inU0' ( in 4-component vector of uint)
+0:278            'inF0' ( in 4-component vector of float)
 0:278            Constant:
 0:278              0.000000
 0:278              0.000000
@@ -1259,905 +1254,917 @@
 0:278              0.000000
 0:278        true case
 0:278        Branch: Kill
-0:279      Sequence
-0:279        move second child to first child ( temp 4-component vector of float)
-0:279          'r013' ( temp 4-component vector of float)
-0:279          cosine ( temp 4-component vector of float)
-0:279            'inF0' ( in 4-component vector of float)
+0:279      Test condition and select ( temp void)
+0:279        Condition
+0:279        any ( temp bool)
+0:279          Compare Less Than ( temp 4-component vector of bool)
+0:279            'inU0' ( in 4-component vector of uint)
+0:279            Constant:
+0:279              0.000000
+0:279              0.000000
+0:279              0.000000
+0:279              0.000000
+0:279        true case
+0:279        Branch: Kill
 0:280      Sequence
 0:280        move second child to first child ( temp 4-component vector of float)
-0:280          'r014' ( temp 4-component vector of float)
-0:280          hyp. cosine ( temp 4-component vector of float)
+0:280          'r013' ( temp 4-component vector of float)
+0:280          cosine ( temp 4-component vector of float)
 0:280            'inF0' ( in 4-component vector of float)
 0:281      Sequence
-0:281        move second child to first child ( temp 4-component vector of uint)
-0:281          'r015' ( temp 4-component vector of uint)
+0:281        move second child to first child ( temp 4-component vector of float)
+0:281          'r014' ( temp 4-component vector of float)
+0:281          hyp. cosine ( temp 4-component vector of float)
+0:281            'inF0' ( in 4-component vector of float)
+0:282      Sequence
+0:282        move second child to first child ( temp 4-component vector of uint)
+0:282          'r015' ( temp 4-component vector of uint)
 0:?           bitCount ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
 0:?               2 (const uint)
-0:282      Sequence
-0:282        move second child to first child ( temp 4-component vector of float)
-0:282          'r016' ( temp 4-component vector of float)
-0:282          dPdx ( temp 4-component vector of float)
-0:282            'inF0' ( in 4-component vector of float)
 0:283      Sequence
 0:283        move second child to first child ( temp 4-component vector of float)
-0:283          'r017' ( temp 4-component vector of float)
-0:283          dPdxCoarse ( temp 4-component vector of float)
+0:283          'r016' ( temp 4-component vector of float)
+0:283          dPdx ( temp 4-component vector of float)
 0:283            'inF0' ( in 4-component vector of float)
 0:284      Sequence
 0:284        move second child to first child ( temp 4-component vector of float)
-0:284          'r018' ( temp 4-component vector of float)
-0:284          dPdxFine ( temp 4-component vector of float)
+0:284          'r017' ( temp 4-component vector of float)
+0:284          dPdxCoarse ( temp 4-component vector of float)
 0:284            'inF0' ( in 4-component vector of float)
 0:285      Sequence
 0:285        move second child to first child ( temp 4-component vector of float)
-0:285          'r019' ( temp 4-component vector of float)
-0:285          dPdy ( temp 4-component vector of float)
+0:285          'r018' ( temp 4-component vector of float)
+0:285          dPdxFine ( temp 4-component vector of float)
 0:285            'inF0' ( in 4-component vector of float)
 0:286      Sequence
 0:286        move second child to first child ( temp 4-component vector of float)
-0:286          'r020' ( temp 4-component vector of float)
-0:286          dPdyCoarse ( temp 4-component vector of float)
+0:286          'r019' ( temp 4-component vector of float)
+0:286          dPdy ( temp 4-component vector of float)
 0:286            'inF0' ( in 4-component vector of float)
 0:287      Sequence
 0:287        move second child to first child ( temp 4-component vector of float)
-0:287          'r021' ( temp 4-component vector of float)
-0:287          dPdyFine ( temp 4-component vector of float)
+0:287          'r020' ( temp 4-component vector of float)
+0:287          dPdyCoarse ( temp 4-component vector of float)
 0:287            'inF0' ( in 4-component vector of float)
 0:288      Sequence
 0:288        move second child to first child ( temp 4-component vector of float)
-0:288          'r022' ( temp 4-component vector of float)
-0:288          degrees ( temp 4-component vector of float)
+0:288          'r021' ( temp 4-component vector of float)
+0:288          dPdyFine ( temp 4-component vector of float)
 0:288            'inF0' ( in 4-component vector of float)
 0:289      Sequence
-0:289        move second child to first child ( temp float)
-0:289          'r023' ( temp float)
-0:289          distance ( temp float)
+0:289        move second child to first child ( temp 4-component vector of float)
+0:289          'r022' ( temp 4-component vector of float)
+0:289          degrees ( temp 4-component vector of float)
 0:289            'inF0' ( in 4-component vector of float)
-0:289            'inF1' ( in 4-component vector of float)
 0:290      Sequence
 0:290        move second child to first child ( temp float)
-0:290          'r024' ( temp float)
-0:290          dot-product ( temp float)
+0:290          'r023' ( temp float)
+0:290          distance ( temp float)
 0:290            'inF0' ( in 4-component vector of float)
 0:290            'inF1' ( in 4-component vector of float)
 0:291      Sequence
-0:291        move second child to first child ( temp 4-component vector of float)
-0:291          'r025' ( temp 4-component vector of float)
-0:291          Construct vec4 ( temp 4-component vector of float)
-0:291            Constant:
-0:291              1.000000
-0:291            component-wise multiply ( temp float)
-0:291              direct index ( temp float)
-0:291                'inF0' ( in 4-component vector of float)
-0:291                Constant:
-0:291                  1 (const int)
-0:291              direct index ( temp float)
-0:291                'inF1' ( in 4-component vector of float)
-0:291                Constant:
-0:291                  1 (const int)
-0:291            direct index ( temp float)
-0:291              'inF0' ( in 4-component vector of float)
-0:291              Constant:
-0:291                2 (const int)
-0:291            direct index ( temp float)
-0:291              'inF1' ( in 4-component vector of float)
-0:291              Constant:
-0:291                3 (const int)
-0:295      Sequence
-0:295        move second child to first child ( temp 4-component vector of float)
-0:295          'r029' ( temp 4-component vector of float)
-0:295          exp ( temp 4-component vector of float)
-0:295            'inF0' ( in 4-component vector of float)
+0:291        move second child to first child ( temp float)
+0:291          'r024' ( temp float)
+0:291          dot-product ( temp float)
+0:291            'inF0' ( in 4-component vector of float)
+0:291            'inF1' ( in 4-component vector of float)
+0:292      Sequence
+0:292        move second child to first child ( temp 4-component vector of float)
+0:292          'r025' ( temp 4-component vector of float)
+0:292          Construct vec4 ( temp 4-component vector of float)
+0:292            Constant:
+0:292              1.000000
+0:292            component-wise multiply ( temp float)
+0:292              direct index ( temp float)
+0:292                'inF0' ( in 4-component vector of float)
+0:292                Constant:
+0:292                  1 (const int)
+0:292              direct index ( temp float)
+0:292                'inF1' ( in 4-component vector of float)
+0:292                Constant:
+0:292                  1 (const int)
+0:292            direct index ( temp float)
+0:292              'inF0' ( in 4-component vector of float)
+0:292              Constant:
+0:292                2 (const int)
+0:292            direct index ( temp float)
+0:292              'inF1' ( in 4-component vector of float)
+0:292              Constant:
+0:292                3 (const int)
 0:296      Sequence
 0:296        move second child to first child ( temp 4-component vector of float)
-0:296          'r030' ( temp 4-component vector of float)
-0:296          exp2 ( temp 4-component vector of float)
+0:296          'r029' ( temp 4-component vector of float)
+0:296          exp ( temp 4-component vector of float)
 0:296            'inF0' ( in 4-component vector of float)
 0:297      Sequence
 0:297        move second child to first child ( temp 4-component vector of float)
-0:297          'r031' ( temp 4-component vector of float)
-0:297          face-forward ( temp 4-component vector of float)
+0:297          'r030' ( temp 4-component vector of float)
+0:297          exp2 ( temp 4-component vector of float)
 0:297            'inF0' ( in 4-component vector of float)
-0:297            'inF1' ( in 4-component vector of float)
-0:297            'inF2' ( in 4-component vector of float)
 0:298      Sequence
-0:298        move second child to first child ( temp 4-component vector of uint)
-0:298          'r032' ( temp 4-component vector of uint)
+0:298        move second child to first child ( temp 4-component vector of float)
+0:298          'r031' ( temp 4-component vector of float)
+0:298          face-forward ( temp 4-component vector of float)
+0:298            'inF0' ( in 4-component vector of float)
+0:298            'inF1' ( in 4-component vector of float)
+0:298            'inF2' ( in 4-component vector of float)
+0:299      Sequence
+0:299        move second child to first child ( temp 4-component vector of uint)
+0:299          'r032' ( temp 4-component vector of uint)
 0:?           findMSB ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:299      Sequence
-0:299        move second child to first child ( temp 4-component vector of uint)
-0:299          'r033' ( temp 4-component vector of uint)
+0:300      Sequence
+0:300        move second child to first child ( temp 4-component vector of uint)
+0:300          'r033' ( temp 4-component vector of uint)
 0:?           findLSB ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:300      Sequence
-0:300        move second child to first child ( temp 4-component vector of float)
-0:300          'r034' ( temp 4-component vector of float)
-0:300          Floor ( temp 4-component vector of float)
-0:300            'inF0' ( in 4-component vector of float)
-0:302      Sequence
-0:302        move second child to first child ( temp 4-component vector of float)
-0:302          'r036' ( temp 4-component vector of float)
-0:302          mod ( temp 4-component vector of float)
-0:302            'inF0' ( in 4-component vector of float)
-0:302            'inF1' ( in 4-component vector of float)
+0:301      Sequence
+0:301        move second child to first child ( temp 4-component vector of float)
+0:301          'r034' ( temp 4-component vector of float)
+0:301          Floor ( temp 4-component vector of float)
+0:301            'inF0' ( in 4-component vector of float)
 0:303      Sequence
 0:303        move second child to first child ( temp 4-component vector of float)
-0:303          'r037' ( temp 4-component vector of float)
-0:303          Fraction ( temp 4-component vector of float)
+0:303          'r036' ( temp 4-component vector of float)
+0:303          mod ( temp 4-component vector of float)
 0:303            'inF0' ( in 4-component vector of float)
+0:303            'inF1' ( in 4-component vector of float)
 0:304      Sequence
 0:304        move second child to first child ( temp 4-component vector of float)
-0:304          'r039' ( temp 4-component vector of float)
-0:304          fwidth ( temp 4-component vector of float)
+0:304          'r037' ( temp 4-component vector of float)
+0:304          Fraction ( temp 4-component vector of float)
 0:304            'inF0' ( in 4-component vector of float)
 0:305      Sequence
-0:305        move second child to first child ( temp 4-component vector of bool)
-0:305          'r040' ( temp 4-component vector of bool)
-0:305          isinf ( temp 4-component vector of bool)
+0:305        move second child to first child ( temp 4-component vector of float)
+0:305          'r039' ( temp 4-component vector of float)
+0:305          fwidth ( temp 4-component vector of float)
 0:305            'inF0' ( in 4-component vector of float)
 0:306      Sequence
 0:306        move second child to first child ( temp 4-component vector of bool)
-0:306          'r041' ( temp 4-component vector of bool)
-0:306          isnan ( temp 4-component vector of bool)
+0:306          'r040' ( temp 4-component vector of bool)
+0:306          isinf ( temp 4-component vector of bool)
 0:306            'inF0' ( in 4-component vector of float)
 0:307      Sequence
-0:307        move second child to first child ( temp 4-component vector of float)
-0:307          'r042' ( temp 4-component vector of float)
-0:307          ldexp ( temp 4-component vector of float)
+0:307        move second child to first child ( temp 4-component vector of bool)
+0:307          'r041' ( temp 4-component vector of bool)
+0:307          isnan ( temp 4-component vector of bool)
 0:307            'inF0' ( in 4-component vector of float)
-0:307            'inF1' ( in 4-component vector of float)
 0:308      Sequence
 0:308        move second child to first child ( temp 4-component vector of float)
-0:308          'r039a' ( temp 4-component vector of float)
-0:308          mix ( temp 4-component vector of float)
+0:308          'r042' ( temp 4-component vector of float)
+0:308          ldexp ( temp 4-component vector of float)
 0:308            'inF0' ( in 4-component vector of float)
 0:308            'inF1' ( in 4-component vector of float)
-0:308            'inF2' ( in 4-component vector of float)
 0:309      Sequence
-0:309        move second child to first child ( temp float)
-0:309          'r043' ( temp float)
-0:309          length ( temp float)
+0:309        move second child to first child ( temp 4-component vector of float)
+0:309          'r039a' ( temp 4-component vector of float)
+0:309          mix ( temp 4-component vector of float)
 0:309            'inF0' ( in 4-component vector of float)
+0:309            'inF1' ( in 4-component vector of float)
+0:309            'inF2' ( in 4-component vector of float)
 0:310      Sequence
-0:310        move second child to first child ( temp 4-component vector of float)
-0:310          'r044' ( temp 4-component vector of float)
-0:310          log ( temp 4-component vector of float)
+0:310        move second child to first child ( temp float)
+0:310          'r043' ( temp float)
+0:310          length ( temp float)
 0:310            'inF0' ( in 4-component vector of float)
 0:311      Sequence
 0:311        move second child to first child ( temp 4-component vector of float)
-0:311          'r045' ( temp 4-component vector of float)
-0:311          vector-scale ( temp 4-component vector of float)
-0:311            log2 ( temp 4-component vector of float)
-0:311              'inF0' ( in 4-component vector of float)
-0:311            Constant:
-0:311              0.301030
+0:311          'r044' ( temp 4-component vector of float)
+0:311          log ( temp 4-component vector of float)
+0:311            'inF0' ( in 4-component vector of float)
 0:312      Sequence
 0:312        move second child to first child ( temp 4-component vector of float)
-0:312          'r046' ( temp 4-component vector of float)
-0:312          log2 ( temp 4-component vector of float)
-0:312            'inF0' ( in 4-component vector of float)
+0:312          'r045' ( temp 4-component vector of float)
+0:312          vector-scale ( temp 4-component vector of float)
+0:312            log2 ( temp 4-component vector of float)
+0:312              'inF0' ( in 4-component vector of float)
+0:312            Constant:
+0:312              0.301030
 0:313      Sequence
 0:313        move second child to first child ( temp 4-component vector of float)
-0:313          'r047' ( temp 4-component vector of float)
-0:313          max ( temp 4-component vector of float)
+0:313          'r046' ( temp 4-component vector of float)
+0:313          log2 ( temp 4-component vector of float)
 0:313            'inF0' ( in 4-component vector of float)
-0:313            'inF1' ( in 4-component vector of float)
 0:314      Sequence
 0:314        move second child to first child ( temp 4-component vector of float)
-0:314          'r048' ( temp 4-component vector of float)
-0:314          min ( temp 4-component vector of float)
+0:314          'r047' ( temp 4-component vector of float)
+0:314          max ( temp 4-component vector of float)
 0:314            'inF0' ( in 4-component vector of float)
 0:314            'inF1' ( in 4-component vector of float)
 0:315      Sequence
 0:315        move second child to first child ( temp 4-component vector of float)
-0:315          'r049' ( temp 4-component vector of float)
-0:315          normalize ( temp 4-component vector of float)
+0:315          'r048' ( temp 4-component vector of float)
+0:315          min ( temp 4-component vector of float)
 0:315            'inF0' ( in 4-component vector of float)
+0:315            'inF1' ( in 4-component vector of float)
 0:316      Sequence
 0:316        move second child to first child ( temp 4-component vector of float)
-0:316          'r050' ( temp 4-component vector of float)
-0:316          pow ( temp 4-component vector of float)
+0:316          'r049' ( temp 4-component vector of float)
+0:316          normalize ( temp 4-component vector of float)
 0:316            'inF0' ( in 4-component vector of float)
-0:316            'inF1' ( in 4-component vector of float)
 0:317      Sequence
 0:317        move second child to first child ( temp 4-component vector of float)
-0:317          'r051' ( temp 4-component vector of float)
-0:317          radians ( temp 4-component vector of float)
+0:317          'r050' ( temp 4-component vector of float)
+0:317          pow ( temp 4-component vector of float)
 0:317            'inF0' ( in 4-component vector of float)
+0:317            'inF1' ( in 4-component vector of float)
 0:318      Sequence
 0:318        move second child to first child ( temp 4-component vector of float)
-0:318          'r052' ( temp 4-component vector of float)
-0:318          divide ( temp 4-component vector of float)
-0:318            Constant:
-0:318              1.000000
+0:318          'r051' ( temp 4-component vector of float)
+0:318          radians ( temp 4-component vector of float)
 0:318            'inF0' ( in 4-component vector of float)
 0:319      Sequence
 0:319        move second child to first child ( temp 4-component vector of float)
-0:319          'r053' ( temp 4-component vector of float)
-0:319          reflect ( temp 4-component vector of float)
+0:319          'r052' ( temp 4-component vector of float)
+0:319          divide ( temp 4-component vector of float)
+0:319            Constant:
+0:319              1.000000
 0:319            'inF0' ( in 4-component vector of float)
-0:319            'inF1' ( in 4-component vector of float)
 0:320      Sequence
 0:320        move second child to first child ( temp 4-component vector of float)
-0:320          'r054' ( temp 4-component vector of float)
-0:320          refract ( temp 4-component vector of float)
+0:320          'r053' ( temp 4-component vector of float)
+0:320          reflect ( temp 4-component vector of float)
 0:320            'inF0' ( in 4-component vector of float)
 0:320            'inF1' ( in 4-component vector of float)
-0:320            Constant:
-0:320              2.000000
 0:321      Sequence
-0:321        move second child to first child ( temp 4-component vector of uint)
-0:321          'r055' ( temp 4-component vector of uint)
+0:321        move second child to first child ( temp 4-component vector of float)
+0:321          'r054' ( temp 4-component vector of float)
+0:321          refract ( temp 4-component vector of float)
+0:321            'inF0' ( in 4-component vector of float)
+0:321            'inF1' ( in 4-component vector of float)
+0:321            Constant:
+0:321              2.000000
+0:322      Sequence
+0:322        move second child to first child ( temp 4-component vector of uint)
+0:322          'r055' ( temp 4-component vector of uint)
 0:?           bitFieldReverse ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:322      Sequence
-0:322        move second child to first child ( temp 4-component vector of float)
-0:322          'r056' ( temp 4-component vector of float)
-0:322          roundEven ( temp 4-component vector of float)
-0:322            'inF0' ( in 4-component vector of float)
 0:323      Sequence
 0:323        move second child to first child ( temp 4-component vector of float)
-0:323          'r057' ( temp 4-component vector of float)
-0:323          inverse sqrt ( temp 4-component vector of float)
+0:323          'r056' ( temp 4-component vector of float)
+0:323          roundEven ( temp 4-component vector of float)
 0:323            'inF0' ( in 4-component vector of float)
 0:324      Sequence
 0:324        move second child to first child ( temp 4-component vector of float)
-0:324          'r058' ( temp 4-component vector of float)
-0:324          clamp ( temp 4-component vector of float)
+0:324          'r057' ( temp 4-component vector of float)
+0:324          inverse sqrt ( temp 4-component vector of float)
 0:324            'inF0' ( in 4-component vector of float)
-0:324            Constant:
-0:324              0.000000
-0:324            Constant:
-0:324              1.000000
 0:325      Sequence
 0:325        move second child to first child ( temp 4-component vector of float)
-0:325          'r059' ( temp 4-component vector of float)
-0:325          Sign ( temp 4-component vector of float)
+0:325          'r058' ( temp 4-component vector of float)
+0:325          clamp ( temp 4-component vector of float)
 0:325            'inF0' ( in 4-component vector of float)
+0:325            Constant:
+0:325              0.000000
+0:325            Constant:
+0:325              1.000000
 0:326      Sequence
 0:326        move second child to first child ( temp 4-component vector of float)
-0:326          'r060' ( temp 4-component vector of float)
-0:326          sine ( temp 4-component vector of float)
+0:326          'r059' ( temp 4-component vector of float)
+0:326          Sign ( temp 4-component vector of float)
 0:326            'inF0' ( in 4-component vector of float)
 0:327      Sequence
 0:327        move second child to first child ( temp 4-component vector of float)
-0:327          'inF1' ( in 4-component vector of float)
+0:327          'r060' ( temp 4-component vector of float)
 0:327          sine ( temp 4-component vector of float)
 0:327            'inF0' ( in 4-component vector of float)
-0:327        move second child to first child ( temp 4-component vector of float)
-0:327          'inF2' ( in 4-component vector of float)
-0:327          cosine ( temp 4-component vector of float)
-0:327            'inF0' ( in 4-component vector of float)
 0:328      Sequence
 0:328        move second child to first child ( temp 4-component vector of float)
-0:328          'r061' ( temp 4-component vector of float)
-0:328          hyp. sine ( temp 4-component vector of float)
+0:328          'inF1' ( in 4-component vector of float)
+0:328          sine ( temp 4-component vector of float)
+0:328            'inF0' ( in 4-component vector of float)
+0:328        move second child to first child ( temp 4-component vector of float)
+0:328          'inF2' ( in 4-component vector of float)
+0:328          cosine ( temp 4-component vector of float)
 0:328            'inF0' ( in 4-component vector of float)
 0:329      Sequence
 0:329        move second child to first child ( temp 4-component vector of float)
-0:329          'r062' ( temp 4-component vector of float)
-0:329          smoothstep ( temp 4-component vector of float)
+0:329          'r061' ( temp 4-component vector of float)
+0:329          hyp. sine ( temp 4-component vector of float)
 0:329            'inF0' ( in 4-component vector of float)
-0:329            'inF1' ( in 4-component vector of float)
-0:329            'inF2' ( in 4-component vector of float)
 0:330      Sequence
 0:330        move second child to first child ( temp 4-component vector of float)
-0:330          'r063' ( temp 4-component vector of float)
-0:330          sqrt ( temp 4-component vector of float)
+0:330          'r062' ( temp 4-component vector of float)
+0:330          smoothstep ( temp 4-component vector of float)
 0:330            'inF0' ( in 4-component vector of float)
+0:330            'inF1' ( in 4-component vector of float)
+0:330            'inF2' ( in 4-component vector of float)
 0:331      Sequence
 0:331        move second child to first child ( temp 4-component vector of float)
-0:331          'r064' ( temp 4-component vector of float)
-0:331          step ( temp 4-component vector of float)
+0:331          'r063' ( temp 4-component vector of float)
+0:331          sqrt ( temp 4-component vector of float)
 0:331            'inF0' ( in 4-component vector of float)
-0:331            'inF1' ( in 4-component vector of float)
 0:332      Sequence
 0:332        move second child to first child ( temp 4-component vector of float)
-0:332          'r065' ( temp 4-component vector of float)
-0:332          tangent ( temp 4-component vector of float)
+0:332          'r064' ( temp 4-component vector of float)
+0:332          step ( temp 4-component vector of float)
 0:332            'inF0' ( in 4-component vector of float)
+0:332            'inF1' ( in 4-component vector of float)
 0:333      Sequence
 0:333        move second child to first child ( temp 4-component vector of float)
-0:333          'r066' ( temp 4-component vector of float)
-0:333          hyp. tangent ( temp 4-component vector of float)
+0:333          'r065' ( temp 4-component vector of float)
+0:333          tangent ( temp 4-component vector of float)
 0:333            'inF0' ( in 4-component vector of float)
-0:335      Sequence
-0:335        move second child to first child ( temp 4-component vector of float)
-0:335          'r067' ( temp 4-component vector of float)
-0:335          trunc ( temp 4-component vector of float)
-0:335            'inF0' ( in 4-component vector of float)
-0:338      Branch: Return with expression
+0:334      Sequence
+0:334        move second child to first child ( temp 4-component vector of float)
+0:334          'r066' ( temp 4-component vector of float)
+0:334          hyp. tangent ( temp 4-component vector of float)
+0:334            'inF0' ( in 4-component vector of float)
+0:336      Sequence
+0:336        move second child to first child ( temp 4-component vector of float)
+0:336          'r067' ( temp 4-component vector of float)
+0:336          trunc ( temp 4-component vector of float)
+0:336            'inF0' ( in 4-component vector of float)
+0:339      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:401  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
-0:401    Function Parameters: 
-0:401      'inF0' ( in 2X2 matrix of float)
-0:401      'inF1' ( in 2X2 matrix of float)
-0:401      'inF2' ( in 2X2 matrix of float)
+0:402  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
+0:402    Function Parameters: 
+0:402      'inF0' ( in 2X2 matrix of float)
+0:402      'inF1' ( in 2X2 matrix of float)
+0:402      'inF2' ( in 2X2 matrix of float)
 0:?     Sequence
-0:403      Sequence
-0:403        move second child to first child ( temp bool)
-0:403          'r000' ( temp bool)
-0:403          all ( temp bool)
-0:403            Convert float to bool ( temp 2X2 matrix of bool)
-0:403              'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r001' ( temp 2X2 matrix of float)
-0:403          Absolute value ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      arc cosine ( temp 2X2 matrix of float)
-0:403        'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp bool)
-0:403          'r003' ( temp bool)
-0:403          any ( temp bool)
-0:403            Convert float to bool ( temp 2X2 matrix of bool)
-0:403              'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r004' ( temp 2X2 matrix of float)
-0:403          arc sine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r005' ( temp 2X2 matrix of float)
-0:403          arc tangent ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r006' ( temp 2X2 matrix of float)
-0:403          arc tangent ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r007' ( temp 2X2 matrix of float)
-0:403          Ceiling ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Test condition and select ( temp void)
-0:403        Condition
-0:403        any ( temp bool)
-0:403          Compare Less Than ( temp 2X2 matrix of bool)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            Constant:
-0:403              0.000000
-0:403              0.000000
-0:403              0.000000
-0:403              0.000000
-0:403        true case
-0:403        Branch: Kill
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r008' ( temp 2X2 matrix of float)
-0:403          clamp ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403            'inF2' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r009' ( temp 2X2 matrix of float)
-0:403          cosine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r010' ( temp 2X2 matrix of float)
-0:403          hyp. cosine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r011' ( temp 2X2 matrix of float)
-0:403          dPdx ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r012' ( temp 2X2 matrix of float)
-0:403          dPdxCoarse ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r013' ( temp 2X2 matrix of float)
-0:403          dPdxFine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r014' ( temp 2X2 matrix of float)
-0:403          dPdy ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r015' ( temp 2X2 matrix of float)
-0:403          dPdyCoarse ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r016' ( temp 2X2 matrix of float)
-0:403          dPdyFine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r017' ( temp 2X2 matrix of float)
-0:403          degrees ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp float)
-0:403          'r018' ( temp float)
-0:403          determinant ( temp float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r019' ( temp 2X2 matrix of float)
-0:403          exp ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'R020' ( temp 2X2 matrix of float)
-0:403          exp2 ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r021' ( temp 2X2 matrix of float)
-0:403          Floor ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r022' ( temp 2X2 matrix of float)
-0:403          mod ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r023' ( temp 2X2 matrix of float)
-0:403          Fraction ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r025' ( temp 2X2 matrix of float)
-0:403          fwidth ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r026' ( temp 2X2 matrix of float)
-0:403          ldexp ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r026a' ( temp 2X2 matrix of float)
-0:403          mix ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403            'inF2' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r027' ( temp 2X2 matrix of float)
-0:403          log ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r028' ( temp 2X2 matrix of float)
-0:403          matrix-scale ( temp 2X2 matrix of float)
-0:403            log2 ( temp 2X2 matrix of float)
-0:403              'inF0' ( in 2X2 matrix of float)
-0:403            Constant:
-0:403              0.301030
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r029' ( temp 2X2 matrix of float)
-0:403          log2 ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r030' ( temp 2X2 matrix of float)
-0:403          max ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r031' ( temp 2X2 matrix of float)
-0:403          min ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r032' ( temp 2X2 matrix of float)
-0:403          pow ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r033' ( temp 2X2 matrix of float)
-0:403          radians ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r034' ( temp 2X2 matrix of float)
-0:403          roundEven ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r035' ( temp 2X2 matrix of float)
-0:403          inverse sqrt ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r036' ( temp 2X2 matrix of float)
-0:403          clamp ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            Constant:
-0:403              0.000000
-0:403            Constant:
-0:403              1.000000
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r037' ( temp 2X2 matrix of float)
-0:403          Sign ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r038' ( temp 2X2 matrix of float)
-0:403          sine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'inF1' ( in 2X2 matrix of float)
-0:403          sine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'inF2' ( in 2X2 matrix of float)
-0:403          cosine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r039' ( temp 2X2 matrix of float)
-0:403          hyp. sine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r049' ( temp 2X2 matrix of float)
-0:403          smoothstep ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403            'inF2' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r041' ( temp 2X2 matrix of float)
-0:403          sqrt ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r042' ( temp 2X2 matrix of float)
-0:403          step ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r043' ( temp 2X2 matrix of float)
-0:403          tangent ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r044' ( temp 2X2 matrix of float)
-0:403          hyp. tangent ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      transpose ( temp 2X2 matrix of float)
-0:403        'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r046' ( temp 2X2 matrix of float)
-0:403          trunc ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:406      Branch: Return with expression
+0:404      Sequence
+0:404        move second child to first child ( temp bool)
+0:404          'r000' ( temp bool)
+0:404          all ( temp bool)
+0:404            Convert float to bool ( temp 2X2 matrix of bool)
+0:404              'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r001' ( temp 2X2 matrix of float)
+0:404          Absolute value ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      arc cosine ( temp 2X2 matrix of float)
+0:404        'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp bool)
+0:404          'r003' ( temp bool)
+0:404          any ( temp bool)
+0:404            Convert float to bool ( temp 2X2 matrix of bool)
+0:404              'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r004' ( temp 2X2 matrix of float)
+0:404          arc sine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r005' ( temp 2X2 matrix of float)
+0:404          arc tangent ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r006' ( temp 2X2 matrix of float)
+0:404          arc tangent ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r007' ( temp 2X2 matrix of float)
+0:404          Ceiling ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Test condition and select ( temp void)
+0:404        Condition
+0:404        any ( temp bool)
+0:404          Compare Less Than ( temp 2X2 matrix of bool)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            Constant:
+0:404              0.000000
+0:404              0.000000
+0:404              0.000000
+0:404              0.000000
+0:404        true case
+0:404        Branch: Kill
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r008' ( temp 2X2 matrix of float)
+0:404          clamp ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404            'inF2' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r009' ( temp 2X2 matrix of float)
+0:404          cosine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r010' ( temp 2X2 matrix of float)
+0:404          hyp. cosine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r011' ( temp 2X2 matrix of float)
+0:404          dPdx ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r012' ( temp 2X2 matrix of float)
+0:404          dPdxCoarse ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r013' ( temp 2X2 matrix of float)
+0:404          dPdxFine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r014' ( temp 2X2 matrix of float)
+0:404          dPdy ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r015' ( temp 2X2 matrix of float)
+0:404          dPdyCoarse ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r016' ( temp 2X2 matrix of float)
+0:404          dPdyFine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r017' ( temp 2X2 matrix of float)
+0:404          degrees ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp float)
+0:404          'r018' ( temp float)
+0:404          determinant ( temp float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r019' ( temp 2X2 matrix of float)
+0:404          exp ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'R020' ( temp 2X2 matrix of float)
+0:404          exp2 ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r021' ( temp 2X2 matrix of float)
+0:404          Floor ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r022' ( temp 2X2 matrix of float)
+0:404          mod ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r023' ( temp 2X2 matrix of float)
+0:404          Fraction ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r025' ( temp 2X2 matrix of float)
+0:404          fwidth ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r026' ( temp 2X2 matrix of float)
+0:404          ldexp ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r026a' ( temp 2X2 matrix of float)
+0:404          mix ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404            'inF2' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r027' ( temp 2X2 matrix of float)
+0:404          log ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r028' ( temp 2X2 matrix of float)
+0:404          matrix-scale ( temp 2X2 matrix of float)
+0:404            log2 ( temp 2X2 matrix of float)
+0:404              'inF0' ( in 2X2 matrix of float)
+0:404            Constant:
+0:404              0.301030
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r029' ( temp 2X2 matrix of float)
+0:404          log2 ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r030' ( temp 2X2 matrix of float)
+0:404          max ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r031' ( temp 2X2 matrix of float)
+0:404          min ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r032' ( temp 2X2 matrix of float)
+0:404          pow ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r033' ( temp 2X2 matrix of float)
+0:404          radians ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r034' ( temp 2X2 matrix of float)
+0:404          roundEven ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r035' ( temp 2X2 matrix of float)
+0:404          inverse sqrt ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r036' ( temp 2X2 matrix of float)
+0:404          clamp ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            Constant:
+0:404              0.000000
+0:404            Constant:
+0:404              1.000000
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r037' ( temp 2X2 matrix of float)
+0:404          Sign ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r038' ( temp 2X2 matrix of float)
+0:404          sine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'inF1' ( in 2X2 matrix of float)
+0:404          sine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'inF2' ( in 2X2 matrix of float)
+0:404          cosine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r039' ( temp 2X2 matrix of float)
+0:404          hyp. sine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r049' ( temp 2X2 matrix of float)
+0:404          smoothstep ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404            'inF2' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r041' ( temp 2X2 matrix of float)
+0:404          sqrt ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r042' ( temp 2X2 matrix of float)
+0:404          step ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r043' ( temp 2X2 matrix of float)
+0:404          tangent ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r044' ( temp 2X2 matrix of float)
+0:404          hyp. tangent ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      transpose ( temp 2X2 matrix of float)
+0:404        'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r046' ( temp 2X2 matrix of float)
+0:404          trunc ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:407      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:410  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
-0:410    Function Parameters: 
-0:410      'inF0' ( in 3X3 matrix of float)
-0:410      'inF1' ( in 3X3 matrix of float)
-0:410      'inF2' ( in 3X3 matrix of float)
+0:411  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
+0:411    Function Parameters: 
+0:411      'inF0' ( in 3X3 matrix of float)
+0:411      'inF1' ( in 3X3 matrix of float)
+0:411      'inF2' ( in 3X3 matrix of float)
 0:?     Sequence
-0:412      Sequence
-0:412        move second child to first child ( temp bool)
-0:412          'r000' ( temp bool)
-0:412          all ( temp bool)
-0:412            Convert float to bool ( temp 3X3 matrix of bool)
-0:412              'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r001' ( temp 3X3 matrix of float)
-0:412          Absolute value ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      arc cosine ( temp 3X3 matrix of float)
-0:412        'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp bool)
-0:412          'r003' ( temp bool)
-0:412          any ( temp bool)
-0:412            Convert float to bool ( temp 3X3 matrix of bool)
-0:412              'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r004' ( temp 3X3 matrix of float)
-0:412          arc sine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r005' ( temp 3X3 matrix of float)
-0:412          arc tangent ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r006' ( temp 3X3 matrix of float)
-0:412          arc tangent ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r007' ( temp 3X3 matrix of float)
-0:412          Ceiling ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Test condition and select ( temp void)
-0:412        Condition
-0:412        any ( temp bool)
-0:412          Compare Less Than ( temp 3X3 matrix of bool)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            Constant:
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412        true case
-0:412        Branch: Kill
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r008' ( temp 3X3 matrix of float)
-0:412          clamp ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412            'inF2' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r009' ( temp 3X3 matrix of float)
-0:412          cosine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r010' ( temp 3X3 matrix of float)
-0:412          hyp. cosine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r011' ( temp 3X3 matrix of float)
-0:412          dPdx ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r012' ( temp 3X3 matrix of float)
-0:412          dPdxCoarse ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r013' ( temp 3X3 matrix of float)
-0:412          dPdxFine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r014' ( temp 3X3 matrix of float)
-0:412          dPdy ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r015' ( temp 3X3 matrix of float)
-0:412          dPdyCoarse ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r016' ( temp 3X3 matrix of float)
-0:412          dPdyFine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r017' ( temp 3X3 matrix of float)
-0:412          degrees ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp float)
-0:412          'r018' ( temp float)
-0:412          determinant ( temp float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r019' ( temp 3X3 matrix of float)
-0:412          exp ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'R020' ( temp 3X3 matrix of float)
-0:412          exp2 ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r021' ( temp 3X3 matrix of float)
-0:412          Floor ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r022' ( temp 3X3 matrix of float)
-0:412          mod ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r023' ( temp 3X3 matrix of float)
-0:412          Fraction ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r025' ( temp 3X3 matrix of float)
-0:412          fwidth ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r026' ( temp 3X3 matrix of float)
-0:412          ldexp ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r026a' ( temp 3X3 matrix of float)
-0:412          mix ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412            'inF2' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r027' ( temp 3X3 matrix of float)
-0:412          log ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r028' ( temp 3X3 matrix of float)
-0:412          matrix-scale ( temp 3X3 matrix of float)
-0:412            log2 ( temp 3X3 matrix of float)
-0:412              'inF0' ( in 3X3 matrix of float)
-0:412            Constant:
-0:412              0.301030
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r029' ( temp 3X3 matrix of float)
-0:412          log2 ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r030' ( temp 3X3 matrix of float)
-0:412          max ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r031' ( temp 3X3 matrix of float)
-0:412          min ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r032' ( temp 3X3 matrix of float)
-0:412          pow ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r033' ( temp 3X3 matrix of float)
-0:412          radians ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r034' ( temp 3X3 matrix of float)
-0:412          roundEven ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r035' ( temp 3X3 matrix of float)
-0:412          inverse sqrt ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r036' ( temp 3X3 matrix of float)
-0:412          clamp ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            Constant:
-0:412              0.000000
-0:412            Constant:
-0:412              1.000000
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r037' ( temp 3X3 matrix of float)
-0:412          Sign ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r038' ( temp 3X3 matrix of float)
-0:412          sine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'inF1' ( in 3X3 matrix of float)
-0:412          sine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'inF2' ( in 3X3 matrix of float)
-0:412          cosine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r039' ( temp 3X3 matrix of float)
-0:412          hyp. sine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r049' ( temp 3X3 matrix of float)
-0:412          smoothstep ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412            'inF2' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r041' ( temp 3X3 matrix of float)
-0:412          sqrt ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r042' ( temp 3X3 matrix of float)
-0:412          step ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r043' ( temp 3X3 matrix of float)
-0:412          tangent ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r044' ( temp 3X3 matrix of float)
-0:412          hyp. tangent ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      transpose ( temp 3X3 matrix of float)
-0:412        'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r046' ( temp 3X3 matrix of float)
-0:412          trunc ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:415      Branch: Return with expression
+0:413      Sequence
+0:413        move second child to first child ( temp bool)
+0:413          'r000' ( temp bool)
+0:413          all ( temp bool)
+0:413            Convert float to bool ( temp 3X3 matrix of bool)
+0:413              'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r001' ( temp 3X3 matrix of float)
+0:413          Absolute value ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      arc cosine ( temp 3X3 matrix of float)
+0:413        'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp bool)
+0:413          'r003' ( temp bool)
+0:413          any ( temp bool)
+0:413            Convert float to bool ( temp 3X3 matrix of bool)
+0:413              'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r004' ( temp 3X3 matrix of float)
+0:413          arc sine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r005' ( temp 3X3 matrix of float)
+0:413          arc tangent ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r006' ( temp 3X3 matrix of float)
+0:413          arc tangent ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r007' ( temp 3X3 matrix of float)
+0:413          Ceiling ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Test condition and select ( temp void)
+0:413        Condition
+0:413        any ( temp bool)
+0:413          Compare Less Than ( temp 3X3 matrix of bool)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            Constant:
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413        true case
+0:413        Branch: Kill
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r008' ( temp 3X3 matrix of float)
+0:413          clamp ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413            'inF2' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r009' ( temp 3X3 matrix of float)
+0:413          cosine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r010' ( temp 3X3 matrix of float)
+0:413          hyp. cosine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r011' ( temp 3X3 matrix of float)
+0:413          dPdx ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r012' ( temp 3X3 matrix of float)
+0:413          dPdxCoarse ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r013' ( temp 3X3 matrix of float)
+0:413          dPdxFine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r014' ( temp 3X3 matrix of float)
+0:413          dPdy ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r015' ( temp 3X3 matrix of float)
+0:413          dPdyCoarse ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r016' ( temp 3X3 matrix of float)
+0:413          dPdyFine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r017' ( temp 3X3 matrix of float)
+0:413          degrees ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp float)
+0:413          'r018' ( temp float)
+0:413          determinant ( temp float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r019' ( temp 3X3 matrix of float)
+0:413          exp ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'R020' ( temp 3X3 matrix of float)
+0:413          exp2 ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r021' ( temp 3X3 matrix of float)
+0:413          Floor ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r022' ( temp 3X3 matrix of float)
+0:413          mod ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r023' ( temp 3X3 matrix of float)
+0:413          Fraction ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r025' ( temp 3X3 matrix of float)
+0:413          fwidth ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r026' ( temp 3X3 matrix of float)
+0:413          ldexp ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r026a' ( temp 3X3 matrix of float)
+0:413          mix ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413            'inF2' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r027' ( temp 3X3 matrix of float)
+0:413          log ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r028' ( temp 3X3 matrix of float)
+0:413          matrix-scale ( temp 3X3 matrix of float)
+0:413            log2 ( temp 3X3 matrix of float)
+0:413              'inF0' ( in 3X3 matrix of float)
+0:413            Constant:
+0:413              0.301030
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r029' ( temp 3X3 matrix of float)
+0:413          log2 ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r030' ( temp 3X3 matrix of float)
+0:413          max ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r031' ( temp 3X3 matrix of float)
+0:413          min ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r032' ( temp 3X3 matrix of float)
+0:413          pow ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r033' ( temp 3X3 matrix of float)
+0:413          radians ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r034' ( temp 3X3 matrix of float)
+0:413          roundEven ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r035' ( temp 3X3 matrix of float)
+0:413          inverse sqrt ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r036' ( temp 3X3 matrix of float)
+0:413          clamp ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            Constant:
+0:413              0.000000
+0:413            Constant:
+0:413              1.000000
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r037' ( temp 3X3 matrix of float)
+0:413          Sign ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r038' ( temp 3X3 matrix of float)
+0:413          sine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'inF1' ( in 3X3 matrix of float)
+0:413          sine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'inF2' ( in 3X3 matrix of float)
+0:413          cosine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r039' ( temp 3X3 matrix of float)
+0:413          hyp. sine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r049' ( temp 3X3 matrix of float)
+0:413          smoothstep ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413            'inF2' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r041' ( temp 3X3 matrix of float)
+0:413          sqrt ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r042' ( temp 3X3 matrix of float)
+0:413          step ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r043' ( temp 3X3 matrix of float)
+0:413          tangent ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r044' ( temp 3X3 matrix of float)
+0:413          hyp. tangent ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      transpose ( temp 3X3 matrix of float)
+0:413        'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r046' ( temp 3X3 matrix of float)
+0:413          trunc ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:416      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -2168,297 +2175,297 @@
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:419  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
-0:419    Function Parameters: 
-0:419      'inF0' ( in 4X4 matrix of float)
-0:419      'inF1' ( in 4X4 matrix of float)
-0:419      'inF2' ( in 4X4 matrix of float)
+0:420  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
+0:420    Function Parameters: 
+0:420      'inF0' ( in 4X4 matrix of float)
+0:420      'inF1' ( in 4X4 matrix of float)
+0:420      'inF2' ( in 4X4 matrix of float)
 0:?     Sequence
-0:421      Sequence
-0:421        move second child to first child ( temp bool)
-0:421          'r000' ( temp bool)
-0:421          all ( temp bool)
-0:421            Convert float to bool ( temp 4X4 matrix of bool)
-0:421              'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r001' ( temp 4X4 matrix of float)
-0:421          Absolute value ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      arc cosine ( temp 4X4 matrix of float)
-0:421        'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp bool)
-0:421          'r003' ( temp bool)
-0:421          any ( temp bool)
-0:421            Convert float to bool ( temp 4X4 matrix of bool)
-0:421              'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r004' ( temp 4X4 matrix of float)
-0:421          arc sine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r005' ( temp 4X4 matrix of float)
-0:421          arc tangent ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r006' ( temp 4X4 matrix of float)
-0:421          arc tangent ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r007' ( temp 4X4 matrix of float)
-0:421          Ceiling ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Test condition and select ( temp void)
-0:421        Condition
-0:421        any ( temp bool)
-0:421          Compare Less Than ( temp 4X4 matrix of bool)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            Constant:
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421        true case
-0:421        Branch: Kill
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r008' ( temp 4X4 matrix of float)
-0:421          clamp ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421            'inF2' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r009' ( temp 4X4 matrix of float)
-0:421          cosine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r010' ( temp 4X4 matrix of float)
-0:421          hyp. cosine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r011' ( temp 4X4 matrix of float)
-0:421          dPdx ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r012' ( temp 4X4 matrix of float)
-0:421          dPdxCoarse ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r013' ( temp 4X4 matrix of float)
-0:421          dPdxFine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r014' ( temp 4X4 matrix of float)
-0:421          dPdy ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r015' ( temp 4X4 matrix of float)
-0:421          dPdyCoarse ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r016' ( temp 4X4 matrix of float)
-0:421          dPdyFine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r017' ( temp 4X4 matrix of float)
-0:421          degrees ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp float)
-0:421          'r018' ( temp float)
-0:421          determinant ( temp float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r019' ( temp 4X4 matrix of float)
-0:421          exp ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'R020' ( temp 4X4 matrix of float)
-0:421          exp2 ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r021' ( temp 4X4 matrix of float)
-0:421          Floor ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r022' ( temp 4X4 matrix of float)
-0:421          mod ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r023' ( temp 4X4 matrix of float)
-0:421          Fraction ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r025' ( temp 4X4 matrix of float)
-0:421          fwidth ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r026' ( temp 4X4 matrix of float)
-0:421          ldexp ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r026a' ( temp 4X4 matrix of float)
-0:421          mix ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421            'inF2' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r027' ( temp 4X4 matrix of float)
-0:421          log ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r028' ( temp 4X4 matrix of float)
-0:421          matrix-scale ( temp 4X4 matrix of float)
-0:421            log2 ( temp 4X4 matrix of float)
-0:421              'inF0' ( in 4X4 matrix of float)
-0:421            Constant:
-0:421              0.301030
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r029' ( temp 4X4 matrix of float)
-0:421          log2 ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r030' ( temp 4X4 matrix of float)
-0:421          max ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r031' ( temp 4X4 matrix of float)
-0:421          min ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r032' ( temp 4X4 matrix of float)
-0:421          pow ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r033' ( temp 4X4 matrix of float)
-0:421          radians ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r034' ( temp 4X4 matrix of float)
-0:421          roundEven ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r035' ( temp 4X4 matrix of float)
-0:421          inverse sqrt ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r036' ( temp 4X4 matrix of float)
-0:421          clamp ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            Constant:
-0:421              0.000000
-0:421            Constant:
-0:421              1.000000
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r037' ( temp 4X4 matrix of float)
-0:421          Sign ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r038' ( temp 4X4 matrix of float)
-0:421          sine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'inF1' ( in 4X4 matrix of float)
-0:421          sine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'inF2' ( in 4X4 matrix of float)
-0:421          cosine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r039' ( temp 4X4 matrix of float)
-0:421          hyp. sine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r049' ( temp 4X4 matrix of float)
-0:421          smoothstep ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421            'inF2' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r041' ( temp 4X4 matrix of float)
-0:421          sqrt ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r042' ( temp 4X4 matrix of float)
-0:421          step ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r043' ( temp 4X4 matrix of float)
-0:421          tangent ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r044' ( temp 4X4 matrix of float)
-0:421          hyp. tangent ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      transpose ( temp 4X4 matrix of float)
-0:421        'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r046' ( temp 4X4 matrix of float)
-0:421          trunc ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:424      Branch: Return with expression
+0:422      Sequence
+0:422        move second child to first child ( temp bool)
+0:422          'r000' ( temp bool)
+0:422          all ( temp bool)
+0:422            Convert float to bool ( temp 4X4 matrix of bool)
+0:422              'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r001' ( temp 4X4 matrix of float)
+0:422          Absolute value ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      arc cosine ( temp 4X4 matrix of float)
+0:422        'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp bool)
+0:422          'r003' ( temp bool)
+0:422          any ( temp bool)
+0:422            Convert float to bool ( temp 4X4 matrix of bool)
+0:422              'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r004' ( temp 4X4 matrix of float)
+0:422          arc sine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r005' ( temp 4X4 matrix of float)
+0:422          arc tangent ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r006' ( temp 4X4 matrix of float)
+0:422          arc tangent ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r007' ( temp 4X4 matrix of float)
+0:422          Ceiling ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Test condition and select ( temp void)
+0:422        Condition
+0:422        any ( temp bool)
+0:422          Compare Less Than ( temp 4X4 matrix of bool)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            Constant:
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422        true case
+0:422        Branch: Kill
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r008' ( temp 4X4 matrix of float)
+0:422          clamp ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422            'inF2' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r009' ( temp 4X4 matrix of float)
+0:422          cosine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r010' ( temp 4X4 matrix of float)
+0:422          hyp. cosine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r011' ( temp 4X4 matrix of float)
+0:422          dPdx ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r012' ( temp 4X4 matrix of float)
+0:422          dPdxCoarse ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r013' ( temp 4X4 matrix of float)
+0:422          dPdxFine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r014' ( temp 4X4 matrix of float)
+0:422          dPdy ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r015' ( temp 4X4 matrix of float)
+0:422          dPdyCoarse ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r016' ( temp 4X4 matrix of float)
+0:422          dPdyFine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r017' ( temp 4X4 matrix of float)
+0:422          degrees ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp float)
+0:422          'r018' ( temp float)
+0:422          determinant ( temp float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r019' ( temp 4X4 matrix of float)
+0:422          exp ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'R020' ( temp 4X4 matrix of float)
+0:422          exp2 ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r021' ( temp 4X4 matrix of float)
+0:422          Floor ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r022' ( temp 4X4 matrix of float)
+0:422          mod ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r023' ( temp 4X4 matrix of float)
+0:422          Fraction ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r025' ( temp 4X4 matrix of float)
+0:422          fwidth ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r026' ( temp 4X4 matrix of float)
+0:422          ldexp ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r026a' ( temp 4X4 matrix of float)
+0:422          mix ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422            'inF2' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r027' ( temp 4X4 matrix of float)
+0:422          log ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r028' ( temp 4X4 matrix of float)
+0:422          matrix-scale ( temp 4X4 matrix of float)
+0:422            log2 ( temp 4X4 matrix of float)
+0:422              'inF0' ( in 4X4 matrix of float)
+0:422            Constant:
+0:422              0.301030
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r029' ( temp 4X4 matrix of float)
+0:422          log2 ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r030' ( temp 4X4 matrix of float)
+0:422          max ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r031' ( temp 4X4 matrix of float)
+0:422          min ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r032' ( temp 4X4 matrix of float)
+0:422          pow ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r033' ( temp 4X4 matrix of float)
+0:422          radians ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r034' ( temp 4X4 matrix of float)
+0:422          roundEven ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r035' ( temp 4X4 matrix of float)
+0:422          inverse sqrt ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r036' ( temp 4X4 matrix of float)
+0:422          clamp ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            Constant:
+0:422              0.000000
+0:422            Constant:
+0:422              1.000000
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r037' ( temp 4X4 matrix of float)
+0:422          Sign ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r038' ( temp 4X4 matrix of float)
+0:422          sine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'inF1' ( in 4X4 matrix of float)
+0:422          sine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'inF2' ( in 4X4 matrix of float)
+0:422          cosine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r039' ( temp 4X4 matrix of float)
+0:422          hyp. sine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r049' ( temp 4X4 matrix of float)
+0:422          smoothstep ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422            'inF2' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r041' ( temp 4X4 matrix of float)
+0:422          sqrt ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r042' ( temp 4X4 matrix of float)
+0:422          step ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r043' ( temp 4X4 matrix of float)
+0:422          tangent ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r044' ( temp 4X4 matrix of float)
+0:422          hyp. tangent ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      transpose ( temp 4X4 matrix of float)
+0:422        'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r046' ( temp 4X4 matrix of float)
+0:422          trunc ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:425      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
@@ -2476,334 +2483,334 @@
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:442  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
-0:442    Function Parameters: 
-0:442      'inF0' ( in float)
-0:442      'inF1' ( in float)
-0:442      'inFV0' ( in 2-component vector of float)
-0:442      'inFV1' ( in 2-component vector of float)
-0:442      'inFM0' ( in 2X2 matrix of float)
-0:442      'inFM1' ( in 2X2 matrix of float)
+0:443  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
+0:443    Function Parameters: 
+0:443      'inF0' ( in float)
+0:443      'inF1' ( in float)
+0:443      'inFV0' ( in 2-component vector of float)
+0:443      'inFV1' ( in 2-component vector of float)
+0:443      'inFM0' ( in 2X2 matrix of float)
+0:443      'inFM1' ( in 2X2 matrix of float)
 0:?     Sequence
-0:443      Sequence
-0:443        move second child to first child ( temp float)
-0:443          'r0' ( temp float)
-0:443          component-wise multiply ( temp float)
-0:443            'inF1' ( in float)
-0:443            'inF0' ( in float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2-component vector of float)
-0:443          'r1' ( temp 2-component vector of float)
-0:443          vector-scale ( temp 2-component vector of float)
-0:443            'inF0' ( in float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2-component vector of float)
-0:443          'r2' ( temp 2-component vector of float)
-0:443          vector-scale ( temp 2-component vector of float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443            'inF0' ( in float)
-0:443      Sequence
-0:443        move second child to first child ( temp float)
-0:443          'r3' ( temp float)
-0:443          dot-product ( temp float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443            'inFV1' ( in 2-component vector of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2-component vector of float)
-0:443          'r4' ( temp 2-component vector of float)
-0:443          vector-times-matrix ( temp 2-component vector of float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2-component vector of float)
-0:443          'r5' ( temp 2-component vector of float)
-0:443          matrix-times-vector ( temp 2-component vector of float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2X2 matrix of float)
-0:443          'r6' ( temp 2X2 matrix of float)
-0:443          matrix-scale ( temp 2X2 matrix of float)
-0:443            'inF0' ( in float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2X2 matrix of float)
-0:443          'r7' ( temp 2X2 matrix of float)
-0:443          matrix-scale ( temp 2X2 matrix of float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:443            'inF0' ( in float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2X2 matrix of float)
-0:443          'r8' ( temp 2X2 matrix of float)
-0:443          matrix-multiply ( temp 2X2 matrix of float)
-0:443            'inFM1' ( in 2X2 matrix of float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:449  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
-0:449    Function Parameters: 
-0:449      'inF0' ( in float)
-0:449      'inF1' ( in float)
-0:449      'inFV0' ( in 3-component vector of float)
-0:449      'inFV1' ( in 3-component vector of float)
-0:449      'inFM0' ( in 3X3 matrix of float)
-0:449      'inFM1' ( in 3X3 matrix of float)
+0:444      Sequence
+0:444        move second child to first child ( temp float)
+0:444          'r0' ( temp float)
+0:444          component-wise multiply ( temp float)
+0:444            'inF1' ( in float)
+0:444            'inF0' ( in float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2-component vector of float)
+0:444          'r1' ( temp 2-component vector of float)
+0:444          vector-scale ( temp 2-component vector of float)
+0:444            'inF0' ( in float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2-component vector of float)
+0:444          'r2' ( temp 2-component vector of float)
+0:444          vector-scale ( temp 2-component vector of float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444            'inF0' ( in float)
+0:444      Sequence
+0:444        move second child to first child ( temp float)
+0:444          'r3' ( temp float)
+0:444          dot-product ( temp float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444            'inFV1' ( in 2-component vector of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2-component vector of float)
+0:444          'r4' ( temp 2-component vector of float)
+0:444          vector-times-matrix ( temp 2-component vector of float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2-component vector of float)
+0:444          'r5' ( temp 2-component vector of float)
+0:444          matrix-times-vector ( temp 2-component vector of float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2X2 matrix of float)
+0:444          'r6' ( temp 2X2 matrix of float)
+0:444          matrix-scale ( temp 2X2 matrix of float)
+0:444            'inF0' ( in float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2X2 matrix of float)
+0:444          'r7' ( temp 2X2 matrix of float)
+0:444          matrix-scale ( temp 2X2 matrix of float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:444            'inF0' ( in float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2X2 matrix of float)
+0:444          'r8' ( temp 2X2 matrix of float)
+0:444          matrix-multiply ( temp 2X2 matrix of float)
+0:444            'inFM1' ( in 2X2 matrix of float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:450  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
+0:450    Function Parameters: 
+0:450      'inF0' ( in float)
+0:450      'inF1' ( in float)
+0:450      'inFV0' ( in 3-component vector of float)
+0:450      'inFV1' ( in 3-component vector of float)
+0:450      'inFM0' ( in 3X3 matrix of float)
+0:450      'inFM1' ( in 3X3 matrix of float)
 0:?     Sequence
-0:450      Sequence
-0:450        move second child to first child ( temp float)
-0:450          'r0' ( temp float)
-0:450          component-wise multiply ( temp float)
-0:450            'inF1' ( in float)
-0:450            'inF0' ( in float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3-component vector of float)
-0:450          'r1' ( temp 3-component vector of float)
-0:450          vector-scale ( temp 3-component vector of float)
-0:450            'inF0' ( in float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3-component vector of float)
-0:450          'r2' ( temp 3-component vector of float)
-0:450          vector-scale ( temp 3-component vector of float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450            'inF0' ( in float)
-0:450      Sequence
-0:450        move second child to first child ( temp float)
-0:450          'r3' ( temp float)
-0:450          dot-product ( temp float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450            'inFV1' ( in 3-component vector of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3-component vector of float)
-0:450          'r4' ( temp 3-component vector of float)
-0:450          vector-times-matrix ( temp 3-component vector of float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3-component vector of float)
-0:450          'r5' ( temp 3-component vector of float)
-0:450          matrix-times-vector ( temp 3-component vector of float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3X3 matrix of float)
-0:450          'r6' ( temp 3X3 matrix of float)
-0:450          matrix-scale ( temp 3X3 matrix of float)
-0:450            'inF0' ( in float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3X3 matrix of float)
-0:450          'r7' ( temp 3X3 matrix of float)
-0:450          matrix-scale ( temp 3X3 matrix of float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:450            'inF0' ( in float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3X3 matrix of float)
-0:450          'r8' ( temp 3X3 matrix of float)
-0:450          matrix-multiply ( temp 3X3 matrix of float)
-0:450            'inFM1' ( in 3X3 matrix of float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:456  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
-0:456    Function Parameters: 
-0:456      'inF0' ( in float)
-0:456      'inF1' ( in float)
-0:456      'inFV0' ( in 4-component vector of float)
-0:456      'inFV1' ( in 4-component vector of float)
-0:456      'inFM0' ( in 4X4 matrix of float)
-0:456      'inFM1' ( in 4X4 matrix of float)
+0:451      Sequence
+0:451        move second child to first child ( temp float)
+0:451          'r0' ( temp float)
+0:451          component-wise multiply ( temp float)
+0:451            'inF1' ( in float)
+0:451            'inF0' ( in float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3-component vector of float)
+0:451          'r1' ( temp 3-component vector of float)
+0:451          vector-scale ( temp 3-component vector of float)
+0:451            'inF0' ( in float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3-component vector of float)
+0:451          'r2' ( temp 3-component vector of float)
+0:451          vector-scale ( temp 3-component vector of float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451            'inF0' ( in float)
+0:451      Sequence
+0:451        move second child to first child ( temp float)
+0:451          'r3' ( temp float)
+0:451          dot-product ( temp float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451            'inFV1' ( in 3-component vector of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3-component vector of float)
+0:451          'r4' ( temp 3-component vector of float)
+0:451          vector-times-matrix ( temp 3-component vector of float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3-component vector of float)
+0:451          'r5' ( temp 3-component vector of float)
+0:451          matrix-times-vector ( temp 3-component vector of float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3X3 matrix of float)
+0:451          'r6' ( temp 3X3 matrix of float)
+0:451          matrix-scale ( temp 3X3 matrix of float)
+0:451            'inF0' ( in float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3X3 matrix of float)
+0:451          'r7' ( temp 3X3 matrix of float)
+0:451          matrix-scale ( temp 3X3 matrix of float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:451            'inF0' ( in float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3X3 matrix of float)
+0:451          'r8' ( temp 3X3 matrix of float)
+0:451          matrix-multiply ( temp 3X3 matrix of float)
+0:451            'inFM1' ( in 3X3 matrix of float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:457  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
+0:457    Function Parameters: 
+0:457      'inF0' ( in float)
+0:457      'inF1' ( in float)
+0:457      'inFV0' ( in 4-component vector of float)
+0:457      'inFV1' ( in 4-component vector of float)
+0:457      'inFM0' ( in 4X4 matrix of float)
+0:457      'inFM1' ( in 4X4 matrix of float)
 0:?     Sequence
-0:457      Sequence
-0:457        move second child to first child ( temp float)
-0:457          'r0' ( temp float)
-0:457          component-wise multiply ( temp float)
-0:457            'inF1' ( in float)
-0:457            'inF0' ( in float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4-component vector of float)
-0:457          'r1' ( temp 4-component vector of float)
-0:457          vector-scale ( temp 4-component vector of float)
-0:457            'inF0' ( in float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4-component vector of float)
-0:457          'r2' ( temp 4-component vector of float)
-0:457          vector-scale ( temp 4-component vector of float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457            'inF0' ( in float)
-0:457      Sequence
-0:457        move second child to first child ( temp float)
-0:457          'r3' ( temp float)
-0:457          dot-product ( temp float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457            'inFV1' ( in 4-component vector of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4-component vector of float)
-0:457          'r4' ( temp 4-component vector of float)
-0:457          vector-times-matrix ( temp 4-component vector of float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4-component vector of float)
-0:457          'r5' ( temp 4-component vector of float)
-0:457          matrix-times-vector ( temp 4-component vector of float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4X4 matrix of float)
-0:457          'r6' ( temp 4X4 matrix of float)
-0:457          matrix-scale ( temp 4X4 matrix of float)
-0:457            'inF0' ( in float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4X4 matrix of float)
-0:457          'r7' ( temp 4X4 matrix of float)
-0:457          matrix-scale ( temp 4X4 matrix of float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:457            'inF0' ( in float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4X4 matrix of float)
-0:457          'r8' ( temp 4X4 matrix of float)
-0:457          matrix-multiply ( temp 4X4 matrix of float)
-0:457            'inFM1' ( in 4X4 matrix of float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:466  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
-0:466    Function Parameters: 
-0:466      'inF0' ( in float)
-0:466      'inF1' ( in float)
-0:466      'inFV2' ( in 2-component vector of float)
-0:466      'inFV3' ( in 3-component vector of float)
-0:466      'inFM2x3' ( in 2X3 matrix of float)
-0:466      'inFM3x2' ( in 3X2 matrix of float)
-0:466      'inFM3x3' ( in 3X3 matrix of float)
-0:466      'inFM3x4' ( in 3X4 matrix of float)
-0:466      'inFM2x4' ( in 2X4 matrix of float)
+0:458      Sequence
+0:458        move second child to first child ( temp float)
+0:458          'r0' ( temp float)
+0:458          component-wise multiply ( temp float)
+0:458            'inF1' ( in float)
+0:458            'inF0' ( in float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4-component vector of float)
+0:458          'r1' ( temp 4-component vector of float)
+0:458          vector-scale ( temp 4-component vector of float)
+0:458            'inF0' ( in float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4-component vector of float)
+0:458          'r2' ( temp 4-component vector of float)
+0:458          vector-scale ( temp 4-component vector of float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458            'inF0' ( in float)
+0:458      Sequence
+0:458        move second child to first child ( temp float)
+0:458          'r3' ( temp float)
+0:458          dot-product ( temp float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458            'inFV1' ( in 4-component vector of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4-component vector of float)
+0:458          'r4' ( temp 4-component vector of float)
+0:458          vector-times-matrix ( temp 4-component vector of float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4-component vector of float)
+0:458          'r5' ( temp 4-component vector of float)
+0:458          matrix-times-vector ( temp 4-component vector of float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4X4 matrix of float)
+0:458          'r6' ( temp 4X4 matrix of float)
+0:458          matrix-scale ( temp 4X4 matrix of float)
+0:458            'inF0' ( in float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4X4 matrix of float)
+0:458          'r7' ( temp 4X4 matrix of float)
+0:458          matrix-scale ( temp 4X4 matrix of float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:458            'inF0' ( in float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4X4 matrix of float)
+0:458          'r8' ( temp 4X4 matrix of float)
+0:458          matrix-multiply ( temp 4X4 matrix of float)
+0:458            'inFM1' ( in 4X4 matrix of float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:467  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
+0:467    Function Parameters: 
+0:467      'inF0' ( in float)
+0:467      'inF1' ( in float)
+0:467      'inFV2' ( in 2-component vector of float)
+0:467      'inFV3' ( in 3-component vector of float)
+0:467      'inFM2x3' ( in 2X3 matrix of float)
+0:467      'inFM3x2' ( in 3X2 matrix of float)
+0:467      'inFM3x3' ( in 3X3 matrix of float)
+0:467      'inFM3x4' ( in 3X4 matrix of float)
+0:467      'inFM2x4' ( in 2X4 matrix of float)
 0:?     Sequence
-0:467      Sequence
-0:467        move second child to first child ( temp float)
-0:467          'r00' ( temp float)
-0:467          component-wise multiply ( temp float)
-0:467            'inF1' ( in float)
-0:467            'inF0' ( in float)
 0:468      Sequence
-0:468        move second child to first child ( temp 2-component vector of float)
-0:468          'r01' ( temp 2-component vector of float)
-0:468          vector-scale ( temp 2-component vector of float)
+0:468        move second child to first child ( temp float)
+0:468          'r00' ( temp float)
+0:468          component-wise multiply ( temp float)
+0:468            'inF1' ( in float)
 0:468            'inF0' ( in float)
-0:468            'inFV2' ( in 2-component vector of float)
 0:469      Sequence
-0:469        move second child to first child ( temp 3-component vector of float)
-0:469          'r02' ( temp 3-component vector of float)
-0:469          vector-scale ( temp 3-component vector of float)
+0:469        move second child to first child ( temp 2-component vector of float)
+0:469          'r01' ( temp 2-component vector of float)
+0:469          vector-scale ( temp 2-component vector of float)
 0:469            'inF0' ( in float)
-0:469            'inFV3' ( in 3-component vector of float)
+0:469            'inFV2' ( in 2-component vector of float)
 0:470      Sequence
-0:470        move second child to first child ( temp 2-component vector of float)
-0:470          'r03' ( temp 2-component vector of float)
-0:470          vector-scale ( temp 2-component vector of float)
-0:470            'inFV2' ( in 2-component vector of float)
+0:470        move second child to first child ( temp 3-component vector of float)
+0:470          'r02' ( temp 3-component vector of float)
+0:470          vector-scale ( temp 3-component vector of float)
 0:470            'inF0' ( in float)
+0:470            'inFV3' ( in 3-component vector of float)
 0:471      Sequence
-0:471        move second child to first child ( temp 3-component vector of float)
-0:471          'r04' ( temp 3-component vector of float)
-0:471          vector-scale ( temp 3-component vector of float)
-0:471            'inFV3' ( in 3-component vector of float)
+0:471        move second child to first child ( temp 2-component vector of float)
+0:471          'r03' ( temp 2-component vector of float)
+0:471          vector-scale ( temp 2-component vector of float)
+0:471            'inFV2' ( in 2-component vector of float)
 0:471            'inF0' ( in float)
 0:472      Sequence
-0:472        move second child to first child ( temp float)
-0:472          'r05' ( temp float)
-0:472          dot-product ( temp float)
-0:472            'inFV2' ( in 2-component vector of float)
-0:472            'inFV2' ( in 2-component vector of float)
+0:472        move second child to first child ( temp 3-component vector of float)
+0:472          'r04' ( temp 3-component vector of float)
+0:472          vector-scale ( temp 3-component vector of float)
+0:472            'inFV3' ( in 3-component vector of float)
+0:472            'inF0' ( in float)
 0:473      Sequence
 0:473        move second child to first child ( temp float)
-0:473          'r06' ( temp float)
+0:473          'r05' ( temp float)
 0:473          dot-product ( temp float)
-0:473            'inFV3' ( in 3-component vector of float)
-0:473            'inFV3' ( in 3-component vector of float)
+0:473            'inFV2' ( in 2-component vector of float)
+0:473            'inFV2' ( in 2-component vector of float)
 0:474      Sequence
-0:474        move second child to first child ( temp 3-component vector of float)
-0:474          'r07' ( temp 3-component vector of float)
-0:474          matrix-times-vector ( temp 3-component vector of float)
-0:474            'inFM2x3' ( in 2X3 matrix of float)
-0:474            'inFV2' ( in 2-component vector of float)
+0:474        move second child to first child ( temp float)
+0:474          'r06' ( temp float)
+0:474          dot-product ( temp float)
+0:474            'inFV3' ( in 3-component vector of float)
+0:474            'inFV3' ( in 3-component vector of float)
 0:475      Sequence
-0:475        move second child to first child ( temp 2-component vector of float)
-0:475          'r08' ( temp 2-component vector of float)
-0:475          matrix-times-vector ( temp 2-component vector of float)
-0:475            'inFM3x2' ( in 3X2 matrix of float)
-0:475            'inFV3' ( in 3-component vector of float)
+0:475        move second child to first child ( temp 3-component vector of float)
+0:475          'r07' ( temp 3-component vector of float)
+0:475          matrix-times-vector ( temp 3-component vector of float)
+0:475            'inFM2x3' ( in 2X3 matrix of float)
+0:475            'inFV2' ( in 2-component vector of float)
 0:476      Sequence
 0:476        move second child to first child ( temp 2-component vector of float)
-0:476          'r09' ( temp 2-component vector of float)
-0:476          vector-times-matrix ( temp 2-component vector of float)
+0:476          'r08' ( temp 2-component vector of float)
+0:476          matrix-times-vector ( temp 2-component vector of float)
+0:476            'inFM3x2' ( in 3X2 matrix of float)
 0:476            'inFV3' ( in 3-component vector of float)
-0:476            'inFM2x3' ( in 2X3 matrix of float)
 0:477      Sequence
-0:477        move second child to first child ( temp 3-component vector of float)
-0:477          'r10' ( temp 3-component vector of float)
-0:477          vector-times-matrix ( temp 3-component vector of float)
-0:477            'inFV2' ( in 2-component vector of float)
-0:477            'inFM3x2' ( in 3X2 matrix of float)
+0:477        move second child to first child ( temp 2-component vector of float)
+0:477          'r09' ( temp 2-component vector of float)
+0:477          vector-times-matrix ( temp 2-component vector of float)
+0:477            'inFV3' ( in 3-component vector of float)
+0:477            'inFM2x3' ( in 2X3 matrix of float)
 0:478      Sequence
-0:478        move second child to first child ( temp 2X3 matrix of float)
-0:478          'r11' ( temp 2X3 matrix of float)
-0:478          matrix-scale ( temp 2X3 matrix of float)
-0:478            'inF0' ( in float)
-0:478            'inFM2x3' ( in 2X3 matrix of float)
+0:478        move second child to first child ( temp 3-component vector of float)
+0:478          'r10' ( temp 3-component vector of float)
+0:478          vector-times-matrix ( temp 3-component vector of float)
+0:478            'inFV2' ( in 2-component vector of float)
+0:478            'inFM3x2' ( in 3X2 matrix of float)
 0:479      Sequence
-0:479        move second child to first child ( temp 3X2 matrix of float)
-0:479          'r12' ( temp 3X2 matrix of float)
-0:479          matrix-scale ( temp 3X2 matrix of float)
+0:479        move second child to first child ( temp 2X3 matrix of float)
+0:479          'r11' ( temp 2X3 matrix of float)
+0:479          matrix-scale ( temp 2X3 matrix of float)
 0:479            'inF0' ( in float)
-0:479            'inFM3x2' ( in 3X2 matrix of float)
+0:479            'inFM2x3' ( in 2X3 matrix of float)
 0:480      Sequence
-0:480        move second child to first child ( temp 2X2 matrix of float)
-0:480          'r13' ( temp 2X2 matrix of float)
-0:480          matrix-multiply ( temp 2X2 matrix of float)
+0:480        move second child to first child ( temp 3X2 matrix of float)
+0:480          'r12' ( temp 3X2 matrix of float)
+0:480          matrix-scale ( temp 3X2 matrix of float)
+0:480            'inF0' ( in float)
 0:480            'inFM3x2' ( in 3X2 matrix of float)
-0:480            'inFM2x3' ( in 2X3 matrix of float)
 0:481      Sequence
-0:481        move second child to first child ( temp 2X3 matrix of float)
-0:481          'r14' ( temp 2X3 matrix of float)
-0:481          matrix-multiply ( temp 2X3 matrix of float)
-0:481            'inFM3x3' ( in 3X3 matrix of float)
+0:481        move second child to first child ( temp 2X2 matrix of float)
+0:481          'r13' ( temp 2X2 matrix of float)
+0:481          matrix-multiply ( temp 2X2 matrix of float)
+0:481            'inFM3x2' ( in 3X2 matrix of float)
 0:481            'inFM2x3' ( in 2X3 matrix of float)
 0:482      Sequence
-0:482        move second child to first child ( temp 2X4 matrix of float)
-0:482          'r15' ( temp 2X4 matrix of float)
-0:482          matrix-multiply ( temp 2X4 matrix of float)
-0:482            'inFM3x4' ( in 3X4 matrix of float)
+0:482        move second child to first child ( temp 2X3 matrix of float)
+0:482          'r14' ( temp 2X3 matrix of float)
+0:482          matrix-multiply ( temp 2X3 matrix of float)
+0:482            'inFM3x3' ( in 3X3 matrix of float)
 0:482            'inFM2x3' ( in 2X3 matrix of float)
 0:483      Sequence
-0:483        move second child to first child ( temp 3X4 matrix of float)
-0:483          'r16' ( temp 3X4 matrix of float)
-0:483          matrix-multiply ( temp 3X4 matrix of float)
-0:483            'inFM2x4' ( in 2X4 matrix of float)
-0:483            'inFM3x2' ( in 3X2 matrix of float)
-0:489  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
-0:489    Function Parameters: 
+0:483        move second child to first child ( temp 2X4 matrix of float)
+0:483          'r15' ( temp 2X4 matrix of float)
+0:483          matrix-multiply ( temp 2X4 matrix of float)
+0:483            'inFM3x4' ( in 3X4 matrix of float)
+0:483            'inFM2x3' ( in 2X3 matrix of float)
+0:484      Sequence
+0:484        move second child to first child ( temp 3X4 matrix of float)
+0:484          'r16' ( temp 3X4 matrix of float)
+0:484          matrix-multiply ( temp 3X4 matrix of float)
+0:484            'inFM2x4' ( in 2X4 matrix of float)
+0:484            'inFM3x2' ( in 3X2 matrix of float)
+0:490  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:490    Function Parameters: 
 0:?     Sequence
-0:491      move second child to first child ( temp 4-component vector of float)
-0:491        color: direct index for structure ( temp 4-component vector of float)
-0:491          'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:491          Constant:
-0:491            0 (const int)
-0:491        Constant:
-0:491          1.000000
-0:491          1.000000
-0:491          1.000000
-0:491          1.000000
-0:492      Branch: Return with expression
-0:492        'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:489  Function Definition: main( ( temp void)
-0:489    Function Parameters: 
+0:492      move second child to first child ( temp 4-component vector of float)
+0:492        color: direct index for structure ( temp 4-component vector of float)
+0:492          'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:492          Constant:
+0:492            0 (const int)
+0:492        Constant:
+0:492          1.000000
+0:492          1.000000
+0:492          1.000000
+0:492          1.000000
+0:493      Branch: Return with expression
+0:493        'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:490  Function Definition: main( ( temp void)
+0:490    Function Parameters: 
 0:?     Sequence
-0:489      Sequence
-0:489        move second child to first child ( temp 4-component vector of float)
+0:490      Sequence
+0:490        move second child to first child ( temp 4-component vector of float)
 0:?           '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
-0:489          color: direct index for structure ( temp 4-component vector of float)
-0:489            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
-0:489            Constant:
-0:489              0 (const int)
+0:490          color: direct index for structure ( temp 4-component vector of float)
+0:490            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:490            Constant:
+0:490              0 (const int)
 0:?   Linker Objects
 0:?     'gs_ua' ( shared uint)
 0:?     'gs_ub' ( shared uint)
@@ -3009,1073 +3016,1068 @@
 0:55            'inF1' ( in float)
 0:56      Sequence
 0:56        move second child to first child ( temp float)
-0:56          'r034' ( temp float)
-0:56          Fraction ( temp float)
+0:56          'r033i' ( temp float)
+0:56          mod ( temp float)
 0:56            'inF0' ( in float)
+0:56            Constant:
+0:56              2.000000
 0:57      Sequence
 0:57        move second child to first child ( temp float)
-0:57          'r036' ( temp float)
-0:57          fwidth ( temp float)
+0:57          'r034' ( temp float)
+0:57          Fraction ( temp float)
 0:57            'inF0' ( in float)
 0:58      Sequence
-0:58        move second child to first child ( temp bool)
-0:58          'r037' ( temp bool)
-0:58          isinf ( temp bool)
+0:58        move second child to first child ( temp float)
+0:58          'r036' ( temp float)
+0:58          fwidth ( temp float)
 0:58            'inF0' ( in float)
 0:59      Sequence
 0:59        move second child to first child ( temp bool)
-0:59          'r038' ( temp bool)
-0:59          isnan ( temp bool)
+0:59          'r037' ( temp bool)
+0:59          isinf ( temp bool)
 0:59            'inF0' ( in float)
 0:60      Sequence
-0:60        move second child to first child ( temp float)
-0:60          'r039' ( temp float)
-0:60          ldexp ( temp float)
+0:60        move second child to first child ( temp bool)
+0:60          'r038' ( temp bool)
+0:60          isnan ( temp bool)
 0:60            'inF0' ( in float)
-0:60            'inF1' ( in float)
 0:61      Sequence
 0:61        move second child to first child ( temp float)
-0:61          'r039a' ( temp float)
-0:61          mix ( temp float)
+0:61          'r039' ( temp float)
+0:61          ldexp ( temp float)
 0:61            'inF0' ( in float)
 0:61            'inF1' ( in float)
-0:61            'inF2' ( in float)
 0:62      Sequence
 0:62        move second child to first child ( temp float)
-0:62          'r040' ( temp float)
-0:62          log ( temp float)
+0:62          'r039a' ( temp float)
+0:62          mix ( temp float)
 0:62            'inF0' ( in float)
+0:62            'inF1' ( in float)
+0:62            'inF2' ( in float)
 0:63      Sequence
 0:63        move second child to first child ( temp float)
-0:63          'r041' ( temp float)
-0:63          component-wise multiply ( temp float)
-0:63            log2 ( temp float)
-0:63              'inF0' ( in float)
-0:63            Constant:
-0:63              0.301030
+0:63          'r040' ( temp float)
+0:63          log ( temp float)
+0:63            'inF0' ( in float)
 0:64      Sequence
 0:64        move second child to first child ( temp float)
-0:64          'r042' ( temp float)
-0:64          log2 ( temp float)
-0:64            'inF0' ( in float)
+0:64          'r041' ( temp float)
+0:64          component-wise multiply ( temp float)
+0:64            log2 ( temp float)
+0:64              'inF0' ( in float)
+0:64            Constant:
+0:64              0.301030
 0:65      Sequence
 0:65        move second child to first child ( temp float)
-0:65          'r043' ( temp float)
-0:65          max ( temp float)
+0:65          'r042' ( temp float)
+0:65          log2 ( temp float)
 0:65            'inF0' ( in float)
-0:65            'inF1' ( in float)
 0:66      Sequence
 0:66        move second child to first child ( temp float)
-0:66          'r044' ( temp float)
-0:66          min ( temp float)
+0:66          'r043' ( temp float)
+0:66          max ( temp float)
 0:66            'inF0' ( in float)
 0:66            'inF1' ( in float)
 0:67      Sequence
 0:67        move second child to first child ( temp float)
-0:67          'r045' ( temp float)
-0:67          pow ( temp float)
+0:67          'r044' ( temp float)
+0:67          min ( temp float)
 0:67            'inF0' ( in float)
 0:67            'inF1' ( in float)
 0:68      Sequence
 0:68        move second child to first child ( temp float)
-0:68          'r046' ( temp float)
-0:68          radians ( temp float)
+0:68          'r045' ( temp float)
+0:68          pow ( temp float)
 0:68            'inF0' ( in float)
+0:68            'inF1' ( in float)
 0:69      Sequence
 0:69        move second child to first child ( temp float)
-0:69          'r047' ( temp float)
-0:69          divide ( temp float)
-0:69            Constant:
-0:69              1.000000
+0:69          'r046' ( temp float)
+0:69          radians ( temp float)
 0:69            'inF0' ( in float)
 0:70      Sequence
-0:70        move second child to first child ( temp uint)
-0:70          'r048' ( temp uint)
-0:70          Convert int to uint ( temp uint)
-0:70            bitFieldReverse ( temp int)
-0:70              Constant:
-0:70                2 (const int)
+0:70        move second child to first child ( temp float)
+0:70          'r047' ( temp float)
+0:70          divide ( temp float)
+0:70            Constant:
+0:70              1.000000
+0:70            'inF0' ( in float)
 0:71      Sequence
-0:71        move second child to first child ( temp float)
-0:71          'r049' ( temp float)
-0:71          roundEven ( temp float)
-0:71            'inF0' ( in float)
+0:71        move second child to first child ( temp uint)
+0:71          'r048' ( temp uint)
+0:71          Convert int to uint ( temp uint)
+0:71            bitFieldReverse ( temp int)
+0:71              Constant:
+0:71                2 (const int)
 0:72      Sequence
 0:72        move second child to first child ( temp float)
-0:72          'r050' ( temp float)
-0:72          inverse sqrt ( temp float)
+0:72          'r049' ( temp float)
+0:72          roundEven ( temp float)
 0:72            'inF0' ( in float)
 0:73      Sequence
 0:73        move second child to first child ( temp float)
-0:73          'r051' ( temp float)
-0:73          clamp ( temp float)
+0:73          'r050' ( temp float)
+0:73          inverse sqrt ( temp float)
 0:73            'inF0' ( in float)
-0:73            Constant:
-0:73              0.000000
-0:73            Constant:
-0:73              1.000000
 0:74      Sequence
 0:74        move second child to first child ( temp float)
-0:74          'r052' ( temp float)
-0:74          Sign ( temp float)
+0:74          'r051' ( temp float)
+0:74          clamp ( temp float)
 0:74            'inF0' ( in float)
+0:74            Constant:
+0:74              0.000000
+0:74            Constant:
+0:74              1.000000
 0:75      Sequence
 0:75        move second child to first child ( temp float)
-0:75          'r053' ( temp float)
-0:75          sine ( temp float)
+0:75          'r052' ( temp float)
+0:75          Sign ( temp float)
 0:75            'inF0' ( in float)
 0:76      Sequence
 0:76        move second child to first child ( temp float)
-0:76          'inF1' ( in float)
+0:76          'r053' ( temp float)
 0:76          sine ( temp float)
 0:76            'inF0' ( in float)
-0:76        move second child to first child ( temp float)
-0:76          'inF2' ( in float)
-0:76          cosine ( temp float)
-0:76            'inF0' ( in float)
 0:77      Sequence
 0:77        move second child to first child ( temp float)
-0:77          'r055' ( temp float)
-0:77          hyp. sine ( temp float)
+0:77          'inF1' ( in float)
+0:77          sine ( temp float)
+0:77            'inF0' ( in float)
+0:77        move second child to first child ( temp float)
+0:77          'inF2' ( in float)
+0:77          cosine ( temp float)
 0:77            'inF0' ( in float)
 0:78      Sequence
 0:78        move second child to first child ( temp float)
-0:78          'r056' ( temp float)
-0:78          smoothstep ( temp float)
+0:78          'r055' ( temp float)
+0:78          hyp. sine ( temp float)
 0:78            'inF0' ( in float)
-0:78            'inF1' ( in float)
-0:78            'inF2' ( in float)
 0:79      Sequence
 0:79        move second child to first child ( temp float)
-0:79          'r057' ( temp float)
-0:79          sqrt ( temp float)
+0:79          'r056' ( temp float)
+0:79          smoothstep ( temp float)
 0:79            'inF0' ( in float)
+0:79            'inF1' ( in float)
+0:79            'inF2' ( in float)
 0:80      Sequence
 0:80        move second child to first child ( temp float)
-0:80          'r058' ( temp float)
-0:80          step ( temp float)
+0:80          'r057' ( temp float)
+0:80          sqrt ( temp float)
 0:80            'inF0' ( in float)
-0:80            'inF1' ( in float)
 0:81      Sequence
 0:81        move second child to first child ( temp float)
-0:81          'r059' ( temp float)
-0:81          tangent ( temp float)
+0:81          'r058' ( temp float)
+0:81          step ( temp float)
 0:81            'inF0' ( in float)
+0:81            'inF1' ( in float)
 0:82      Sequence
 0:82        move second child to first child ( temp float)
-0:82          'r060' ( temp float)
-0:82          hyp. tangent ( temp float)
+0:82          'r059' ( temp float)
+0:82          tangent ( temp float)
 0:82            'inF0' ( in float)
-0:84      Sequence
-0:84        move second child to first child ( temp float)
-0:84          'r061' ( temp float)
-0:84          trunc ( temp float)
-0:84            'inF0' ( in float)
-0:86      Branch: Return with expression
-0:86        Constant:
-0:86          0.000000
-0:90  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
-0:90    Function Parameters: 
-0:90      'inF0' ( in 1-component vector of float)
-0:90      'inF1' ( in 1-component vector of float)
-0:90      'inF2' ( in 1-component vector of float)
+0:83      Sequence
+0:83        move second child to first child ( temp float)
+0:83          'r060' ( temp float)
+0:83          hyp. tangent ( temp float)
+0:83            'inF0' ( in float)
+0:85      Sequence
+0:85        move second child to first child ( temp float)
+0:85          'r061' ( temp float)
+0:85          trunc ( temp float)
+0:85            'inF0' ( in float)
+0:87      Branch: Return with expression
+0:87        Constant:
+0:87          0.000000
+0:91  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
+0:91    Function Parameters: 
+0:91      'inF0' ( in 1-component vector of float)
+0:91      'inF1' ( in 1-component vector of float)
+0:91      'inF2' ( in 1-component vector of float)
 0:?     Sequence
-0:92      Branch: Return with expression
-0:92        Constant:
-0:92          0.000000
-0:96  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
-0:96    Function Parameters: 
-0:96      'inF0' ( in 2-component vector of float)
-0:96      'inF1' ( in 2-component vector of float)
-0:96      'inF2' ( in 2-component vector of float)
-0:96      'inU0' ( in 2-component vector of uint)
-0:96      'inU1' ( in 2-component vector of uint)
+0:93      Branch: Return with expression
+0:93        Constant:
+0:93          0.000000
+0:97  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
+0:97    Function Parameters: 
+0:97      'inF0' ( in 2-component vector of float)
+0:97      'inF1' ( in 2-component vector of float)
+0:97      'inF2' ( in 2-component vector of float)
+0:97      'inU0' ( in 2-component vector of uint)
+0:97      'inU1' ( in 2-component vector of uint)
 0:?     Sequence
-0:99      Sequence
-0:99        move second child to first child ( temp bool)
-0:99          'r000' ( temp bool)
-0:99          all ( temp bool)
-0:99            Convert float to bool ( temp 2-component vector of bool)
-0:99              'inF0' ( in 2-component vector of float)
 0:100      Sequence
-0:100        move second child to first child ( temp 2-component vector of float)
-0:100          'r001' ( temp 2-component vector of float)
-0:100          Absolute value ( temp 2-component vector of float)
-0:100            'inF0' ( in 2-component vector of float)
+0:100        move second child to first child ( temp bool)
+0:100          'r000' ( temp bool)
+0:100          all ( temp bool)
+0:100            Convert float to bool ( temp 2-component vector of bool)
+0:100              'inF0' ( in 2-component vector of float)
 0:101      Sequence
 0:101        move second child to first child ( temp 2-component vector of float)
-0:101          'r002' ( temp 2-component vector of float)
-0:101          arc cosine ( temp 2-component vector of float)
+0:101          'r001' ( temp 2-component vector of float)
+0:101          Absolute value ( temp 2-component vector of float)
 0:101            'inF0' ( in 2-component vector of float)
 0:102      Sequence
-0:102        move second child to first child ( temp bool)
-0:102          'r003' ( temp bool)
-0:102          any ( temp bool)
-0:102            Convert float to bool ( temp 2-component vector of bool)
-0:102              'inF0' ( in 2-component vector of float)
+0:102        move second child to first child ( temp 2-component vector of float)
+0:102          'r002' ( temp 2-component vector of float)
+0:102          arc cosine ( temp 2-component vector of float)
+0:102            'inF0' ( in 2-component vector of float)
 0:103      Sequence
-0:103        move second child to first child ( temp 2-component vector of float)
-0:103          'r004' ( temp 2-component vector of float)
-0:103          arc sine ( temp 2-component vector of float)
-0:103            'inF0' ( in 2-component vector of float)
+0:103        move second child to first child ( temp bool)
+0:103          'r003' ( temp bool)
+0:103          any ( temp bool)
+0:103            Convert float to bool ( temp 2-component vector of bool)
+0:103              'inF0' ( in 2-component vector of float)
 0:104      Sequence
-0:104        move second child to first child ( temp 2-component vector of int)
-0:104          'r005' ( temp 2-component vector of int)
-0:104          floatBitsToInt ( temp 2-component vector of int)
+0:104        move second child to first child ( temp 2-component vector of float)
+0:104          'r004' ( temp 2-component vector of float)
+0:104          arc sine ( temp 2-component vector of float)
 0:104            'inF0' ( in 2-component vector of float)
 0:105      Sequence
-0:105        move second child to first child ( temp 2-component vector of uint)
-0:105          'r006' ( temp 2-component vector of uint)
-0:105          floatBitsToUint ( temp 2-component vector of uint)
+0:105        move second child to first child ( temp 2-component vector of int)
+0:105          'r005' ( temp 2-component vector of int)
+0:105          floatBitsToInt ( temp 2-component vector of int)
 0:105            'inF0' ( in 2-component vector of float)
 0:106      Sequence
-0:106        move second child to first child ( temp 2-component vector of float)
-0:106          'r007' ( temp 2-component vector of float)
-0:106          intBitsToFloat ( temp 2-component vector of float)
-0:106            'inU0' ( in 2-component vector of uint)
-0:108      Sequence
-0:108        move second child to first child ( temp 2-component vector of float)
-0:108          'r009' ( temp 2-component vector of float)
-0:108          arc tangent ( temp 2-component vector of float)
-0:108            'inF0' ( in 2-component vector of float)
+0:106        move second child to first child ( temp 2-component vector of uint)
+0:106          'r006' ( temp 2-component vector of uint)
+0:106          floatBitsToUint ( temp 2-component vector of uint)
+0:106            'inF0' ( in 2-component vector of float)
+0:107      Sequence
+0:107        move second child to first child ( temp 2-component vector of float)
+0:107          'r007' ( temp 2-component vector of float)
+0:107          intBitsToFloat ( temp 2-component vector of float)
+0:107            'inU0' ( in 2-component vector of uint)
 0:109      Sequence
 0:109        move second child to first child ( temp 2-component vector of float)
-0:109          'r010' ( temp 2-component vector of float)
+0:109          'r009' ( temp 2-component vector of float)
 0:109          arc tangent ( temp 2-component vector of float)
 0:109            'inF0' ( in 2-component vector of float)
-0:109            'inF1' ( in 2-component vector of float)
 0:110      Sequence
 0:110        move second child to first child ( temp 2-component vector of float)
-0:110          'r011' ( temp 2-component vector of float)
-0:110          Ceiling ( temp 2-component vector of float)
+0:110          'r010' ( temp 2-component vector of float)
+0:110          arc tangent ( temp 2-component vector of float)
 0:110            'inF0' ( in 2-component vector of float)
+0:110            'inF1' ( in 2-component vector of float)
 0:111      Sequence
 0:111        move second child to first child ( temp 2-component vector of float)
-0:111          'r012' ( temp 2-component vector of float)
-0:111          clamp ( temp 2-component vector of float)
+0:111          'r011' ( temp 2-component vector of float)
+0:111          Ceiling ( temp 2-component vector of float)
 0:111            'inF0' ( in 2-component vector of float)
-0:111            'inF1' ( in 2-component vector of float)
-0:111            'inF2' ( in 2-component vector of float)
-0:112      Test condition and select ( temp void)
-0:112        Condition
-0:112        any ( temp bool)
-0:112          Compare Less Than ( temp 2-component vector of bool)
+0:112      Sequence
+0:112        move second child to first child ( temp 2-component vector of float)
+0:112          'r012' ( temp 2-component vector of float)
+0:112          clamp ( temp 2-component vector of float)
 0:112            'inF0' ( in 2-component vector of float)
-0:112            Constant:
-0:112              0.000000
-0:112              0.000000
-0:112        true case
-0:112        Branch: Kill
+0:112            'inF1' ( in 2-component vector of float)
+0:112            'inF2' ( in 2-component vector of float)
 0:113      Test condition and select ( temp void)
 0:113        Condition
 0:113        any ( temp bool)
 0:113          Compare Less Than ( temp 2-component vector of bool)
-0:113            'inU0' ( in 2-component vector of uint)
+0:113            'inF0' ( in 2-component vector of float)
 0:113            Constant:
 0:113              0.000000
 0:113              0.000000
 0:113        true case
 0:113        Branch: Kill
-0:114      Sequence
-0:114        move second child to first child ( temp 2-component vector of float)
-0:114          'r013' ( temp 2-component vector of float)
-0:114          cosine ( temp 2-component vector of float)
-0:114            'inF0' ( in 2-component vector of float)
+0:114      Test condition and select ( temp void)
+0:114        Condition
+0:114        any ( temp bool)
+0:114          Compare Less Than ( temp 2-component vector of bool)
+0:114            'inU0' ( in 2-component vector of uint)
+0:114            Constant:
+0:114              0.000000
+0:114              0.000000
+0:114        true case
+0:114        Branch: Kill
 0:115      Sequence
 0:115        move second child to first child ( temp 2-component vector of float)
-0:115          'r015' ( temp 2-component vector of float)
-0:115          hyp. cosine ( temp 2-component vector of float)
+0:115          'r013' ( temp 2-component vector of float)
+0:115          cosine ( temp 2-component vector of float)
 0:115            'inF0' ( in 2-component vector of float)
 0:116      Sequence
-0:116        move second child to first child ( temp 2-component vector of int)
-0:116          'r016' ( temp 2-component vector of int)
+0:116        move second child to first child ( temp 2-component vector of float)
+0:116          'r015' ( temp 2-component vector of float)
+0:116          hyp. cosine ( temp 2-component vector of float)
+0:116            'inF0' ( in 2-component vector of float)
+0:117      Sequence
+0:117        move second child to first child ( temp 2-component vector of int)
+0:117          'r016' ( temp 2-component vector of int)
 0:?           bitCount ( temp 2-component vector of int)
 0:?             Constant:
 0:?               7 (const int)
 0:?               3 (const int)
-0:117      Sequence
-0:117        move second child to first child ( temp 2-component vector of float)
-0:117          'r017' ( temp 2-component vector of float)
-0:117          dPdx ( temp 2-component vector of float)
-0:117            'inF0' ( in 2-component vector of float)
 0:118      Sequence
 0:118        move second child to first child ( temp 2-component vector of float)
-0:118          'r018' ( temp 2-component vector of float)
-0:118          dPdxCoarse ( temp 2-component vector of float)
+0:118          'r017' ( temp 2-component vector of float)
+0:118          dPdx ( temp 2-component vector of float)
 0:118            'inF0' ( in 2-component vector of float)
 0:119      Sequence
 0:119        move second child to first child ( temp 2-component vector of float)
-0:119          'r019' ( temp 2-component vector of float)
-0:119          dPdxFine ( temp 2-component vector of float)
+0:119          'r018' ( temp 2-component vector of float)
+0:119          dPdxCoarse ( temp 2-component vector of float)
 0:119            'inF0' ( in 2-component vector of float)
 0:120      Sequence
 0:120        move second child to first child ( temp 2-component vector of float)
-0:120          'r020' ( temp 2-component vector of float)
-0:120          dPdy ( temp 2-component vector of float)
+0:120          'r019' ( temp 2-component vector of float)
+0:120          dPdxFine ( temp 2-component vector of float)
 0:120            'inF0' ( in 2-component vector of float)
 0:121      Sequence
 0:121        move second child to first child ( temp 2-component vector of float)
-0:121          'r021' ( temp 2-component vector of float)
-0:121          dPdyCoarse ( temp 2-component vector of float)
+0:121          'r020' ( temp 2-component vector of float)
+0:121          dPdy ( temp 2-component vector of float)
 0:121            'inF0' ( in 2-component vector of float)
 0:122      Sequence
 0:122        move second child to first child ( temp 2-component vector of float)
-0:122          'r022' ( temp 2-component vector of float)
-0:122          dPdyFine ( temp 2-component vector of float)
+0:122          'r021' ( temp 2-component vector of float)
+0:122          dPdyCoarse ( temp 2-component vector of float)
 0:122            'inF0' ( in 2-component vector of float)
 0:123      Sequence
 0:123        move second child to first child ( temp 2-component vector of float)
-0:123          'r023' ( temp 2-component vector of float)
-0:123          degrees ( temp 2-component vector of float)
+0:123          'r022' ( temp 2-component vector of float)
+0:123          dPdyFine ( temp 2-component vector of float)
 0:123            'inF0' ( in 2-component vector of float)
-0:127      Sequence
-0:127        move second child to first child ( temp float)
-0:127          'r026' ( temp float)
-0:127          distance ( temp float)
-0:127            'inF0' ( in 2-component vector of float)
-0:127            'inF1' ( in 2-component vector of float)
+0:124      Sequence
+0:124        move second child to first child ( temp 2-component vector of float)
+0:124          'r023' ( temp 2-component vector of float)
+0:124          degrees ( temp 2-component vector of float)
+0:124            'inF0' ( in 2-component vector of float)
 0:128      Sequence
 0:128        move second child to first child ( temp float)
-0:128          'r027' ( temp float)
-0:128          dot-product ( temp float)
+0:128          'r026' ( temp float)
+0:128          distance ( temp float)
 0:128            'inF0' ( in 2-component vector of float)
 0:128            'inF1' ( in 2-component vector of float)
-0:132      Sequence
-0:132        move second child to first child ( temp 2-component vector of float)
-0:132          'r028' ( temp 2-component vector of float)
-0:132          exp ( temp 2-component vector of float)
-0:132            'inF0' ( in 2-component vector of float)
+0:129      Sequence
+0:129        move second child to first child ( temp float)
+0:129          'r027' ( temp float)
+0:129          dot-product ( temp float)
+0:129            'inF0' ( in 2-component vector of float)
+0:129            'inF1' ( in 2-component vector of float)
 0:133      Sequence
 0:133        move second child to first child ( temp 2-component vector of float)
-0:133          'r029' ( temp 2-component vector of float)
-0:133          exp2 ( temp 2-component vector of float)
+0:133          'r028' ( temp 2-component vector of float)
+0:133          exp ( temp 2-component vector of float)
 0:133            'inF0' ( in 2-component vector of float)
 0:134      Sequence
 0:134        move second child to first child ( temp 2-component vector of float)
-0:134          'r030' ( temp 2-component vector of float)
-0:134          face-forward ( temp 2-component vector of float)
+0:134          'r029' ( temp 2-component vector of float)
+0:134          exp2 ( temp 2-component vector of float)
 0:134            'inF0' ( in 2-component vector of float)
-0:134            'inF1' ( in 2-component vector of float)
-0:134            'inF2' ( in 2-component vector of float)
 0:135      Sequence
-0:135        move second child to first child ( temp 2-component vector of uint)
-0:135          'r031' ( temp 2-component vector of uint)
+0:135        move second child to first child ( temp 2-component vector of float)
+0:135          'r030' ( temp 2-component vector of float)
+0:135          face-forward ( temp 2-component vector of float)
+0:135            'inF0' ( in 2-component vector of float)
+0:135            'inF1' ( in 2-component vector of float)
+0:135            'inF2' ( in 2-component vector of float)
+0:136      Sequence
+0:136        move second child to first child ( temp 2-component vector of uint)
+0:136          'r031' ( temp 2-component vector of uint)
 0:?           findMSB ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
-0:136      Sequence
-0:136        move second child to first child ( temp 2-component vector of uint)
-0:136          'r032' ( temp 2-component vector of uint)
+0:137      Sequence
+0:137        move second child to first child ( temp 2-component vector of uint)
+0:137          'r032' ( temp 2-component vector of uint)
 0:?           findLSB ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
-0:137      Sequence
-0:137        move second child to first child ( temp 2-component vector of float)
-0:137          'r033' ( temp 2-component vector of float)
-0:137          Floor ( temp 2-component vector of float)
-0:137            'inF0' ( in 2-component vector of float)
-0:139      Sequence
-0:139        move second child to first child ( temp 2-component vector of float)
-0:139          'r035' ( temp 2-component vector of float)
-0:139          mod ( temp 2-component vector of float)
-0:139            'inF0' ( in 2-component vector of float)
-0:139            'inF1' ( in 2-component vector of float)
+0:138      Sequence
+0:138        move second child to first child ( temp 2-component vector of float)
+0:138          'r033' ( temp 2-component vector of float)
+0:138          Floor ( temp 2-component vector of float)
+0:138            'inF0' ( in 2-component vector of float)
 0:140      Sequence
 0:140        move second child to first child ( temp 2-component vector of float)
-0:140          'r036' ( temp 2-component vector of float)
-0:140          Fraction ( temp 2-component vector of float)
+0:140          'r035' ( temp 2-component vector of float)
+0:140          mod ( temp 2-component vector of float)
 0:140            'inF0' ( in 2-component vector of float)
+0:140            'inF1' ( in 2-component vector of float)
 0:141      Sequence
 0:141        move second child to first child ( temp 2-component vector of float)
-0:141          'r038' ( temp 2-component vector of float)
-0:141          fwidth ( temp 2-component vector of float)
+0:141          'r036' ( temp 2-component vector of float)
+0:141          Fraction ( temp 2-component vector of float)
 0:141            'inF0' ( in 2-component vector of float)
 0:142      Sequence
-0:142        move second child to first child ( temp 2-component vector of bool)
-0:142          'r039' ( temp 2-component vector of bool)
-0:142          isinf ( temp 2-component vector of bool)
+0:142        move second child to first child ( temp 2-component vector of float)
+0:142          'r038' ( temp 2-component vector of float)
+0:142          fwidth ( temp 2-component vector of float)
 0:142            'inF0' ( in 2-component vector of float)
 0:143      Sequence
 0:143        move second child to first child ( temp 2-component vector of bool)
-0:143          'r040' ( temp 2-component vector of bool)
-0:143          isnan ( temp 2-component vector of bool)
+0:143          'r039' ( temp 2-component vector of bool)
+0:143          isinf ( temp 2-component vector of bool)
 0:143            'inF0' ( in 2-component vector of float)
 0:144      Sequence
-0:144        move second child to first child ( temp 2-component vector of float)
-0:144          'r041' ( temp 2-component vector of float)
-0:144          ldexp ( temp 2-component vector of float)
+0:144        move second child to first child ( temp 2-component vector of bool)
+0:144          'r040' ( temp 2-component vector of bool)
+0:144          isnan ( temp 2-component vector of bool)
 0:144            'inF0' ( in 2-component vector of float)
-0:144            'inF1' ( in 2-component vector of float)
 0:145      Sequence
 0:145        move second child to first child ( temp 2-component vector of float)
-0:145          'r039a' ( temp 2-component vector of float)
-0:145          mix ( temp 2-component vector of float)
+0:145          'r041' ( temp 2-component vector of float)
+0:145          ldexp ( temp 2-component vector of float)
 0:145            'inF0' ( in 2-component vector of float)
 0:145            'inF1' ( in 2-component vector of float)
-0:145            'inF2' ( in 2-component vector of float)
 0:146      Sequence
-0:146        move second child to first child ( temp float)
-0:146          'r042' ( temp float)
-0:146          length ( temp float)
+0:146        move second child to first child ( temp 2-component vector of float)
+0:146          'r039a' ( temp 2-component vector of float)
+0:146          mix ( temp 2-component vector of float)
 0:146            'inF0' ( in 2-component vector of float)
+0:146            'inF1' ( in 2-component vector of float)
+0:146            'inF2' ( in 2-component vector of float)
 0:147      Sequence
-0:147        move second child to first child ( temp 2-component vector of float)
-0:147          'r043' ( temp 2-component vector of float)
-0:147          log ( temp 2-component vector of float)
+0:147        move second child to first child ( temp float)
+0:147          'r042' ( temp float)
+0:147          length ( temp float)
 0:147            'inF0' ( in 2-component vector of float)
 0:148      Sequence
 0:148        move second child to first child ( temp 2-component vector of float)
-0:148          'r044' ( temp 2-component vector of float)
-0:148          vector-scale ( temp 2-component vector of float)
-0:148            log2 ( temp 2-component vector of float)
-0:148              'inF0' ( in 2-component vector of float)
-0:148            Constant:
-0:148              0.301030
+0:148          'r043' ( temp 2-component vector of float)
+0:148          log ( temp 2-component vector of float)
+0:148            'inF0' ( in 2-component vector of float)
 0:149      Sequence
 0:149        move second child to first child ( temp 2-component vector of float)
-0:149          'r045' ( temp 2-component vector of float)
-0:149          log2 ( temp 2-component vector of float)
-0:149            'inF0' ( in 2-component vector of float)
+0:149          'r044' ( temp 2-component vector of float)
+0:149          vector-scale ( temp 2-component vector of float)
+0:149            log2 ( temp 2-component vector of float)
+0:149              'inF0' ( in 2-component vector of float)
+0:149            Constant:
+0:149              0.301030
 0:150      Sequence
 0:150        move second child to first child ( temp 2-component vector of float)
-0:150          'r046' ( temp 2-component vector of float)
-0:150          max ( temp 2-component vector of float)
+0:150          'r045' ( temp 2-component vector of float)
+0:150          log2 ( temp 2-component vector of float)
 0:150            'inF0' ( in 2-component vector of float)
-0:150            'inF1' ( in 2-component vector of float)
 0:151      Sequence
 0:151        move second child to first child ( temp 2-component vector of float)
-0:151          'r047' ( temp 2-component vector of float)
-0:151          min ( temp 2-component vector of float)
+0:151          'r046' ( temp 2-component vector of float)
+0:151          max ( temp 2-component vector of float)
 0:151            'inF0' ( in 2-component vector of float)
 0:151            'inF1' ( in 2-component vector of float)
 0:152      Sequence
 0:152        move second child to first child ( temp 2-component vector of float)
-0:152          'r048' ( temp 2-component vector of float)
-0:152          normalize ( temp 2-component vector of float)
+0:152          'r047' ( temp 2-component vector of float)
+0:152          min ( temp 2-component vector of float)
 0:152            'inF0' ( in 2-component vector of float)
+0:152            'inF1' ( in 2-component vector of float)
 0:153      Sequence
 0:153        move second child to first child ( temp 2-component vector of float)
-0:153          'r049' ( temp 2-component vector of float)
-0:153          pow ( temp 2-component vector of float)
+0:153          'r048' ( temp 2-component vector of float)
+0:153          normalize ( temp 2-component vector of float)
 0:153            'inF0' ( in 2-component vector of float)
-0:153            'inF1' ( in 2-component vector of float)
 0:154      Sequence
 0:154        move second child to first child ( temp 2-component vector of float)
-0:154          'r050' ( temp 2-component vector of float)
-0:154          radians ( temp 2-component vector of float)
+0:154          'r049' ( temp 2-component vector of float)
+0:154          pow ( temp 2-component vector of float)
 0:154            'inF0' ( in 2-component vector of float)
+0:154            'inF1' ( in 2-component vector of float)
 0:155      Sequence
 0:155        move second child to first child ( temp 2-component vector of float)
-0:155          'r051' ( temp 2-component vector of float)
-0:155          divide ( temp 2-component vector of float)
-0:155            Constant:
-0:155              1.000000
+0:155          'r050' ( temp 2-component vector of float)
+0:155          radians ( temp 2-component vector of float)
 0:155            'inF0' ( in 2-component vector of float)
 0:156      Sequence
 0:156        move second child to first child ( temp 2-component vector of float)
-0:156          'r052' ( temp 2-component vector of float)
-0:156          reflect ( temp 2-component vector of float)
+0:156          'r051' ( temp 2-component vector of float)
+0:156          divide ( temp 2-component vector of float)
+0:156            Constant:
+0:156              1.000000
 0:156            'inF0' ( in 2-component vector of float)
-0:156            'inF1' ( in 2-component vector of float)
 0:157      Sequence
 0:157        move second child to first child ( temp 2-component vector of float)
-0:157          'r053' ( temp 2-component vector of float)
-0:157          refract ( temp 2-component vector of float)
+0:157          'r052' ( temp 2-component vector of float)
+0:157          reflect ( temp 2-component vector of float)
 0:157            'inF0' ( in 2-component vector of float)
 0:157            'inF1' ( in 2-component vector of float)
-0:157            Constant:
-0:157              2.000000
 0:158      Sequence
-0:158        move second child to first child ( temp 2-component vector of uint)
-0:158          'r054' ( temp 2-component vector of uint)
+0:158        move second child to first child ( temp 2-component vector of float)
+0:158          'r053' ( temp 2-component vector of float)
+0:158          refract ( temp 2-component vector of float)
+0:158            'inF0' ( in 2-component vector of float)
+0:158            'inF1' ( in 2-component vector of float)
+0:158            Constant:
+0:158              2.000000
+0:159      Sequence
+0:159        move second child to first child ( temp 2-component vector of uint)
+0:159          'r054' ( temp 2-component vector of uint)
 0:?           bitFieldReverse ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
-0:159      Sequence
-0:159        move second child to first child ( temp 2-component vector of float)
-0:159          'r055' ( temp 2-component vector of float)
-0:159          roundEven ( temp 2-component vector of float)
-0:159            'inF0' ( in 2-component vector of float)
 0:160      Sequence
 0:160        move second child to first child ( temp 2-component vector of float)
-0:160          'r056' ( temp 2-component vector of float)
-0:160          inverse sqrt ( temp 2-component vector of float)
+0:160          'r055' ( temp 2-component vector of float)
+0:160          roundEven ( temp 2-component vector of float)
 0:160            'inF0' ( in 2-component vector of float)
 0:161      Sequence
 0:161        move second child to first child ( temp 2-component vector of float)
-0:161          'r057' ( temp 2-component vector of float)
-0:161          clamp ( temp 2-component vector of float)
+0:161          'r056' ( temp 2-component vector of float)
+0:161          inverse sqrt ( temp 2-component vector of float)
 0:161            'inF0' ( in 2-component vector of float)
-0:161            Constant:
-0:161              0.000000
-0:161            Constant:
-0:161              1.000000
 0:162      Sequence
 0:162        move second child to first child ( temp 2-component vector of float)
-0:162          'r058' ( temp 2-component vector of float)
-0:162          Sign ( temp 2-component vector of float)
+0:162          'r057' ( temp 2-component vector of float)
+0:162          clamp ( temp 2-component vector of float)
 0:162            'inF0' ( in 2-component vector of float)
+0:162            Constant:
+0:162              0.000000
+0:162            Constant:
+0:162              1.000000
 0:163      Sequence
 0:163        move second child to first child ( temp 2-component vector of float)
-0:163          'r059' ( temp 2-component vector of float)
-0:163          sine ( temp 2-component vector of float)
+0:163          'r058' ( temp 2-component vector of float)
+0:163          Sign ( temp 2-component vector of float)
 0:163            'inF0' ( in 2-component vector of float)
 0:164      Sequence
 0:164        move second child to first child ( temp 2-component vector of float)
-0:164          'inF1' ( in 2-component vector of float)
+0:164          'r059' ( temp 2-component vector of float)
 0:164          sine ( temp 2-component vector of float)
 0:164            'inF0' ( in 2-component vector of float)
-0:164        move second child to first child ( temp 2-component vector of float)
-0:164          'inF2' ( in 2-component vector of float)
-0:164          cosine ( temp 2-component vector of float)
-0:164            'inF0' ( in 2-component vector of float)
 0:165      Sequence
 0:165        move second child to first child ( temp 2-component vector of float)
-0:165          'r060' ( temp 2-component vector of float)
-0:165          hyp. sine ( temp 2-component vector of float)
+0:165          'inF1' ( in 2-component vector of float)
+0:165          sine ( temp 2-component vector of float)
+0:165            'inF0' ( in 2-component vector of float)
+0:165        move second child to first child ( temp 2-component vector of float)
+0:165          'inF2' ( in 2-component vector of float)
+0:165          cosine ( temp 2-component vector of float)
 0:165            'inF0' ( in 2-component vector of float)
 0:166      Sequence
 0:166        move second child to first child ( temp 2-component vector of float)
-0:166          'r061' ( temp 2-component vector of float)
-0:166          smoothstep ( temp 2-component vector of float)
+0:166          'r060' ( temp 2-component vector of float)
+0:166          hyp. sine ( temp 2-component vector of float)
 0:166            'inF0' ( in 2-component vector of float)
-0:166            'inF1' ( in 2-component vector of float)
-0:166            'inF2' ( in 2-component vector of float)
 0:167      Sequence
 0:167        move second child to first child ( temp 2-component vector of float)
-0:167          'r062' ( temp 2-component vector of float)
-0:167          sqrt ( temp 2-component vector of float)
+0:167          'r061' ( temp 2-component vector of float)
+0:167          smoothstep ( temp 2-component vector of float)
 0:167            'inF0' ( in 2-component vector of float)
+0:167            'inF1' ( in 2-component vector of float)
+0:167            'inF2' ( in 2-component vector of float)
 0:168      Sequence
 0:168        move second child to first child ( temp 2-component vector of float)
-0:168          'r063' ( temp 2-component vector of float)
-0:168          step ( temp 2-component vector of float)
+0:168          'r062' ( temp 2-component vector of float)
+0:168          sqrt ( temp 2-component vector of float)
 0:168            'inF0' ( in 2-component vector of float)
-0:168            'inF1' ( in 2-component vector of float)
 0:169      Sequence
 0:169        move second child to first child ( temp 2-component vector of float)
-0:169          'r064' ( temp 2-component vector of float)
-0:169          tangent ( temp 2-component vector of float)
+0:169          'r063' ( temp 2-component vector of float)
+0:169          step ( temp 2-component vector of float)
 0:169            'inF0' ( in 2-component vector of float)
+0:169            'inF1' ( in 2-component vector of float)
 0:170      Sequence
 0:170        move second child to first child ( temp 2-component vector of float)
-0:170          'r065' ( temp 2-component vector of float)
-0:170          hyp. tangent ( temp 2-component vector of float)
+0:170          'r064' ( temp 2-component vector of float)
+0:170          tangent ( temp 2-component vector of float)
 0:170            'inF0' ( in 2-component vector of float)
-0:172      Sequence
-0:172        move second child to first child ( temp 2-component vector of float)
-0:172          'r066' ( temp 2-component vector of float)
-0:172          trunc ( temp 2-component vector of float)
-0:172            'inF0' ( in 2-component vector of float)
-0:175      Branch: Return with expression
+0:171      Sequence
+0:171        move second child to first child ( temp 2-component vector of float)
+0:171          'r065' ( temp 2-component vector of float)
+0:171          hyp. tangent ( temp 2-component vector of float)
+0:171            'inF0' ( in 2-component vector of float)
+0:173      Sequence
+0:173        move second child to first child ( temp 2-component vector of float)
+0:173          'r066' ( temp 2-component vector of float)
+0:173          trunc ( temp 2-component vector of float)
+0:173            'inF0' ( in 2-component vector of float)
+0:176      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:179  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
-0:179    Function Parameters: 
-0:179      'inF0' ( in 3-component vector of float)
-0:179      'inF1' ( in 3-component vector of float)
-0:179      'inF2' ( in 3-component vector of float)
-0:179      'inU0' ( in 3-component vector of uint)
-0:179      'inU1' ( in 3-component vector of uint)
+0:180  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
+0:180    Function Parameters: 
+0:180      'inF0' ( in 3-component vector of float)
+0:180      'inF1' ( in 3-component vector of float)
+0:180      'inF2' ( in 3-component vector of float)
+0:180      'inU0' ( in 3-component vector of uint)
+0:180      'inU1' ( in 3-component vector of uint)
 0:?     Sequence
-0:182      Sequence
-0:182        move second child to first child ( temp bool)
-0:182          'r000' ( temp bool)
-0:182          all ( temp bool)
-0:182            Convert float to bool ( temp 3-component vector of bool)
-0:182              'inF0' ( in 3-component vector of float)
 0:183      Sequence
-0:183        move second child to first child ( temp 3-component vector of float)
-0:183          'r001' ( temp 3-component vector of float)
-0:183          Absolute value ( temp 3-component vector of float)
-0:183            'inF0' ( in 3-component vector of float)
+0:183        move second child to first child ( temp bool)
+0:183          'r000' ( temp bool)
+0:183          all ( temp bool)
+0:183            Convert float to bool ( temp 3-component vector of bool)
+0:183              'inF0' ( in 3-component vector of float)
 0:184      Sequence
 0:184        move second child to first child ( temp 3-component vector of float)
-0:184          'r002' ( temp 3-component vector of float)
-0:184          arc cosine ( temp 3-component vector of float)
+0:184          'r001' ( temp 3-component vector of float)
+0:184          Absolute value ( temp 3-component vector of float)
 0:184            'inF0' ( in 3-component vector of float)
 0:185      Sequence
-0:185        move second child to first child ( temp bool)
-0:185          'r003' ( temp bool)
-0:185          any ( temp bool)
-0:185            Convert float to bool ( temp 3-component vector of bool)
-0:185              'inF0' ( in 3-component vector of float)
+0:185        move second child to first child ( temp 3-component vector of float)
+0:185          'r002' ( temp 3-component vector of float)
+0:185          arc cosine ( temp 3-component vector of float)
+0:185            'inF0' ( in 3-component vector of float)
 0:186      Sequence
-0:186        move second child to first child ( temp 3-component vector of float)
-0:186          'r004' ( temp 3-component vector of float)
-0:186          arc sine ( temp 3-component vector of float)
-0:186            'inF0' ( in 3-component vector of float)
+0:186        move second child to first child ( temp bool)
+0:186          'r003' ( temp bool)
+0:186          any ( temp bool)
+0:186            Convert float to bool ( temp 3-component vector of bool)
+0:186              'inF0' ( in 3-component vector of float)
 0:187      Sequence
-0:187        move second child to first child ( temp 3-component vector of int)
-0:187          'r005' ( temp 3-component vector of int)
-0:187          floatBitsToInt ( temp 3-component vector of int)
+0:187        move second child to first child ( temp 3-component vector of float)
+0:187          'r004' ( temp 3-component vector of float)
+0:187          arc sine ( temp 3-component vector of float)
 0:187            'inF0' ( in 3-component vector of float)
 0:188      Sequence
-0:188        move second child to first child ( temp 3-component vector of uint)
-0:188          'r006' ( temp 3-component vector of uint)
-0:188          floatBitsToUint ( temp 3-component vector of uint)
+0:188        move second child to first child ( temp 3-component vector of int)
+0:188          'r005' ( temp 3-component vector of int)
+0:188          floatBitsToInt ( temp 3-component vector of int)
 0:188            'inF0' ( in 3-component vector of float)
 0:189      Sequence
-0:189        move second child to first child ( temp 3-component vector of float)
-0:189          'r007' ( temp 3-component vector of float)
-0:189          intBitsToFloat ( temp 3-component vector of float)
-0:189            'inU0' ( in 3-component vector of uint)
-0:191      Sequence
-0:191        move second child to first child ( temp 3-component vector of float)
-0:191          'r009' ( temp 3-component vector of float)
-0:191          arc tangent ( temp 3-component vector of float)
-0:191            'inF0' ( in 3-component vector of float)
+0:189        move second child to first child ( temp 3-component vector of uint)
+0:189          'r006' ( temp 3-component vector of uint)
+0:189          floatBitsToUint ( temp 3-component vector of uint)
+0:189            'inF0' ( in 3-component vector of float)
+0:190      Sequence
+0:190        move second child to first child ( temp 3-component vector of float)
+0:190          'r007' ( temp 3-component vector of float)
+0:190          intBitsToFloat ( temp 3-component vector of float)
+0:190            'inU0' ( in 3-component vector of uint)
 0:192      Sequence
 0:192        move second child to first child ( temp 3-component vector of float)
-0:192          'r010' ( temp 3-component vector of float)
+0:192          'r009' ( temp 3-component vector of float)
 0:192          arc tangent ( temp 3-component vector of float)
 0:192            'inF0' ( in 3-component vector of float)
-0:192            'inF1' ( in 3-component vector of float)
 0:193      Sequence
 0:193        move second child to first child ( temp 3-component vector of float)
-0:193          'r011' ( temp 3-component vector of float)
-0:193          Ceiling ( temp 3-component vector of float)
+0:193          'r010' ( temp 3-component vector of float)
+0:193          arc tangent ( temp 3-component vector of float)
 0:193            'inF0' ( in 3-component vector of float)
+0:193            'inF1' ( in 3-component vector of float)
 0:194      Sequence
 0:194        move second child to first child ( temp 3-component vector of float)
-0:194          'r012' ( temp 3-component vector of float)
-0:194          clamp ( temp 3-component vector of float)
+0:194          'r011' ( temp 3-component vector of float)
+0:194          Ceiling ( temp 3-component vector of float)
 0:194            'inF0' ( in 3-component vector of float)
-0:194            'inF1' ( in 3-component vector of float)
-0:194            'inF2' ( in 3-component vector of float)
-0:195      Test condition and select ( temp void)
-0:195        Condition
-0:195        any ( temp bool)
-0:195          Compare Less Than ( temp 3-component vector of bool)
+0:195      Sequence
+0:195        move second child to first child ( temp 3-component vector of float)
+0:195          'r012' ( temp 3-component vector of float)
+0:195          clamp ( temp 3-component vector of float)
 0:195            'inF0' ( in 3-component vector of float)
-0:195            Constant:
-0:195              0.000000
-0:195              0.000000
-0:195              0.000000
-0:195        true case
-0:195        Branch: Kill
+0:195            'inF1' ( in 3-component vector of float)
+0:195            'inF2' ( in 3-component vector of float)
 0:196      Test condition and select ( temp void)
 0:196        Condition
 0:196        any ( temp bool)
 0:196          Compare Less Than ( temp 3-component vector of bool)
-0:196            'inU0' ( in 3-component vector of uint)
+0:196            'inF0' ( in 3-component vector of float)
 0:196            Constant:
 0:196              0.000000
 0:196              0.000000
 0:196              0.000000
 0:196        true case
 0:196        Branch: Kill
-0:197      Sequence
-0:197        move second child to first child ( temp 3-component vector of float)
-0:197          'r013' ( temp 3-component vector of float)
-0:197          cosine ( temp 3-component vector of float)
-0:197            'inF0' ( in 3-component vector of float)
+0:197      Test condition and select ( temp void)
+0:197        Condition
+0:197        any ( temp bool)
+0:197          Compare Less Than ( temp 3-component vector of bool)
+0:197            'inU0' ( in 3-component vector of uint)
+0:197            Constant:
+0:197              0.000000
+0:197              0.000000
+0:197              0.000000
+0:197        true case
+0:197        Branch: Kill
 0:198      Sequence
 0:198        move second child to first child ( temp 3-component vector of float)
-0:198          'r014' ( temp 3-component vector of float)
-0:198          hyp. cosine ( temp 3-component vector of float)
+0:198          'r013' ( temp 3-component vector of float)
+0:198          cosine ( temp 3-component vector of float)
 0:198            'inF0' ( in 3-component vector of float)
 0:199      Sequence
-0:199        move second child to first child ( temp 3-component vector of uint)
-0:199          'r015' ( temp 3-component vector of uint)
+0:199        move second child to first child ( temp 3-component vector of float)
+0:199          'r014' ( temp 3-component vector of float)
+0:199          hyp. cosine ( temp 3-component vector of float)
+0:199            'inF0' ( in 3-component vector of float)
+0:200      Sequence
+0:200        move second child to first child ( temp 3-component vector of uint)
+0:200          'r015' ( temp 3-component vector of uint)
 0:?           bitCount ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
-0:200      Sequence
-0:200        move second child to first child ( temp 3-component vector of float)
-0:200          'r016' ( temp 3-component vector of float)
-0:200          cross-product ( temp 3-component vector of float)
-0:200            'inF0' ( in 3-component vector of float)
-0:200            'inF1' ( in 3-component vector of float)
 0:201      Sequence
 0:201        move second child to first child ( temp 3-component vector of float)
-0:201          'r017' ( temp 3-component vector of float)
-0:201          dPdx ( temp 3-component vector of float)
+0:201          'r016' ( temp 3-component vector of float)
+0:201          cross-product ( temp 3-component vector of float)
 0:201            'inF0' ( in 3-component vector of float)
+0:201            'inF1' ( in 3-component vector of float)
 0:202      Sequence
 0:202        move second child to first child ( temp 3-component vector of float)
-0:202          'r018' ( temp 3-component vector of float)
-0:202          dPdxCoarse ( temp 3-component vector of float)
+0:202          'r017' ( temp 3-component vector of float)
+0:202          dPdx ( temp 3-component vector of float)
 0:202            'inF0' ( in 3-component vector of float)
 0:203      Sequence
 0:203        move second child to first child ( temp 3-component vector of float)
-0:203          'r019' ( temp 3-component vector of float)
-0:203          dPdxFine ( temp 3-component vector of float)
+0:203          'r018' ( temp 3-component vector of float)
+0:203          dPdxCoarse ( temp 3-component vector of float)
 0:203            'inF0' ( in 3-component vector of float)
 0:204      Sequence
 0:204        move second child to first child ( temp 3-component vector of float)
-0:204          'r020' ( temp 3-component vector of float)
-0:204          dPdy ( temp 3-component vector of float)
+0:204          'r019' ( temp 3-component vector of float)
+0:204          dPdxFine ( temp 3-component vector of float)
 0:204            'inF0' ( in 3-component vector of float)
 0:205      Sequence
 0:205        move second child to first child ( temp 3-component vector of float)
-0:205          'r021' ( temp 3-component vector of float)
-0:205          dPdyCoarse ( temp 3-component vector of float)
+0:205          'r020' ( temp 3-component vector of float)
+0:205          dPdy ( temp 3-component vector of float)
 0:205            'inF0' ( in 3-component vector of float)
 0:206      Sequence
 0:206        move second child to first child ( temp 3-component vector of float)
-0:206          'r022' ( temp 3-component vector of float)
-0:206          dPdyFine ( temp 3-component vector of float)
+0:206          'r021' ( temp 3-component vector of float)
+0:206          dPdyCoarse ( temp 3-component vector of float)
 0:206            'inF0' ( in 3-component vector of float)
 0:207      Sequence
 0:207        move second child to first child ( temp 3-component vector of float)
-0:207          'r023' ( temp 3-component vector of float)
-0:207          degrees ( temp 3-component vector of float)
+0:207          'r022' ( temp 3-component vector of float)
+0:207          dPdyFine ( temp 3-component vector of float)
 0:207            'inF0' ( in 3-component vector of float)
 0:208      Sequence
-0:208        move second child to first child ( temp float)
-0:208          'r024' ( temp float)
-0:208          distance ( temp float)
+0:208        move second child to first child ( temp 3-component vector of float)
+0:208          'r023' ( temp 3-component vector of float)
+0:208          degrees ( temp 3-component vector of float)
 0:208            'inF0' ( in 3-component vector of float)
-0:208            'inF1' ( in 3-component vector of float)
 0:209      Sequence
 0:209        move second child to first child ( temp float)
-0:209          'r025' ( temp float)
-0:209          dot-product ( temp float)
+0:209          'r024' ( temp float)
+0:209          distance ( temp float)
 0:209            'inF0' ( in 3-component vector of float)
 0:209            'inF1' ( in 3-component vector of float)
-0:213      Sequence
-0:213        move second child to first child ( temp 3-component vector of float)
-0:213          'r029' ( temp 3-component vector of float)
-0:213          exp ( temp 3-component vector of float)
-0:213            'inF0' ( in 3-component vector of float)
+0:210      Sequence
+0:210        move second child to first child ( temp float)
+0:210          'r025' ( temp float)
+0:210          dot-product ( temp float)
+0:210            'inF0' ( in 3-component vector of float)
+0:210            'inF1' ( in 3-component vector of float)
 0:214      Sequence
 0:214        move second child to first child ( temp 3-component vector of float)
-0:214          'r030' ( temp 3-component vector of float)
-0:214          exp2 ( temp 3-component vector of float)
+0:214          'r029' ( temp 3-component vector of float)
+0:214          exp ( temp 3-component vector of float)
 0:214            'inF0' ( in 3-component vector of float)
 0:215      Sequence
 0:215        move second child to first child ( temp 3-component vector of float)
-0:215          'r031' ( temp 3-component vector of float)
-0:215          face-forward ( temp 3-component vector of float)
+0:215          'r030' ( temp 3-component vector of float)
+0:215          exp2 ( temp 3-component vector of float)
 0:215            'inF0' ( in 3-component vector of float)
-0:215            'inF1' ( in 3-component vector of float)
-0:215            'inF2' ( in 3-component vector of float)
 0:216      Sequence
-0:216        move second child to first child ( temp 3-component vector of uint)
-0:216          'r032' ( temp 3-component vector of uint)
+0:216        move second child to first child ( temp 3-component vector of float)
+0:216          'r031' ( temp 3-component vector of float)
+0:216          face-forward ( temp 3-component vector of float)
+0:216            'inF0' ( in 3-component vector of float)
+0:216            'inF1' ( in 3-component vector of float)
+0:216            'inF2' ( in 3-component vector of float)
+0:217      Sequence
+0:217        move second child to first child ( temp 3-component vector of uint)
+0:217          'r032' ( temp 3-component vector of uint)
 0:?           findMSB ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:217      Sequence
-0:217        move second child to first child ( temp 3-component vector of uint)
-0:217          'r033' ( temp 3-component vector of uint)
+0:218      Sequence
+0:218        move second child to first child ( temp 3-component vector of uint)
+0:218          'r033' ( temp 3-component vector of uint)
 0:?           findLSB ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:218      Sequence
-0:218        move second child to first child ( temp 3-component vector of float)
-0:218          'r034' ( temp 3-component vector of float)
-0:218          Floor ( temp 3-component vector of float)
-0:218            'inF0' ( in 3-component vector of float)
-0:220      Sequence
-0:220        move second child to first child ( temp 3-component vector of float)
-0:220          'r036' ( temp 3-component vector of float)
-0:220          mod ( temp 3-component vector of float)
-0:220            'inF0' ( in 3-component vector of float)
-0:220            'inF1' ( in 3-component vector of float)
+0:219      Sequence
+0:219        move second child to first child ( temp 3-component vector of float)
+0:219          'r034' ( temp 3-component vector of float)
+0:219          Floor ( temp 3-component vector of float)
+0:219            'inF0' ( in 3-component vector of float)
 0:221      Sequence
 0:221        move second child to first child ( temp 3-component vector of float)
-0:221          'r037' ( temp 3-component vector of float)
-0:221          Fraction ( temp 3-component vector of float)
+0:221          'r036' ( temp 3-component vector of float)
+0:221          mod ( temp 3-component vector of float)
 0:221            'inF0' ( in 3-component vector of float)
+0:221            'inF1' ( in 3-component vector of float)
 0:222      Sequence
 0:222        move second child to first child ( temp 3-component vector of float)
-0:222          'r039' ( temp 3-component vector of float)
-0:222          fwidth ( temp 3-component vector of float)
+0:222          'r037' ( temp 3-component vector of float)
+0:222          Fraction ( temp 3-component vector of float)
 0:222            'inF0' ( in 3-component vector of float)
 0:223      Sequence
-0:223        move second child to first child ( temp 3-component vector of bool)
-0:223          'r040' ( temp 3-component vector of bool)
-0:223          isinf ( temp 3-component vector of bool)
+0:223        move second child to first child ( temp 3-component vector of float)
+0:223          'r039' ( temp 3-component vector of float)
+0:223          fwidth ( temp 3-component vector of float)
 0:223            'inF0' ( in 3-component vector of float)
 0:224      Sequence
 0:224        move second child to first child ( temp 3-component vector of bool)
-0:224          'r041' ( temp 3-component vector of bool)
-0:224          isnan ( temp 3-component vector of bool)
+0:224          'r040' ( temp 3-component vector of bool)
+0:224          isinf ( temp 3-component vector of bool)
 0:224            'inF0' ( in 3-component vector of float)
 0:225      Sequence
-0:225        move second child to first child ( temp 3-component vector of float)
-0:225          'r042' ( temp 3-component vector of float)
-0:225          ldexp ( temp 3-component vector of float)
+0:225        move second child to first child ( temp 3-component vector of bool)
+0:225          'r041' ( temp 3-component vector of bool)
+0:225          isnan ( temp 3-component vector of bool)
 0:225            'inF0' ( in 3-component vector of float)
-0:225            'inF1' ( in 3-component vector of float)
 0:226      Sequence
 0:226        move second child to first child ( temp 3-component vector of float)
-0:226          'r039a' ( temp 3-component vector of float)
-0:226          mix ( temp 3-component vector of float)
+0:226          'r042' ( temp 3-component vector of float)
+0:226          ldexp ( temp 3-component vector of float)
 0:226            'inF0' ( in 3-component vector of float)
 0:226            'inF1' ( in 3-component vector of float)
-0:226            'inF2' ( in 3-component vector of float)
 0:227      Sequence
 0:227        move second child to first child ( temp 3-component vector of float)
-0:227          'r039b' ( temp 3-component vector of float)
+0:227          'r039a' ( temp 3-component vector of float)
 0:227          mix ( temp 3-component vector of float)
 0:227            'inF0' ( in 3-component vector of float)
 0:227            'inF1' ( in 3-component vector of float)
-0:227            Constant:
-0:227              0.300000
+0:227            'inF2' ( in 3-component vector of float)
 0:228      Sequence
-0:228        move second child to first child ( temp float)
-0:228          'r043' ( temp float)
-0:228          length ( temp float)
+0:228        move second child to first child ( temp 3-component vector of float)
+0:228          'r039b' ( temp 3-component vector of float)
+0:228          mix ( temp 3-component vector of float)
 0:228            'inF0' ( in 3-component vector of float)
+0:228            'inF1' ( in 3-component vector of float)
+0:228            Constant:
+0:228              0.300000
 0:229      Sequence
-0:229        move second child to first child ( temp 3-component vector of float)
-0:229          'r044' ( temp 3-component vector of float)
-0:229          log ( temp 3-component vector of float)
+0:229        move second child to first child ( temp float)
+0:229          'r043' ( temp float)
+0:229          length ( temp float)
 0:229            'inF0' ( in 3-component vector of float)
 0:230      Sequence
 0:230        move second child to first child ( temp 3-component vector of float)
-0:230          'r045' ( temp 3-component vector of float)
-0:230          vector-scale ( temp 3-component vector of float)
-0:230            log2 ( temp 3-component vector of float)
-0:230              'inF0' ( in 3-component vector of float)
-0:230            Constant:
-0:230              0.301030
+0:230          'r044' ( temp 3-component vector of float)
+0:230          log ( temp 3-component vector of float)
+0:230            'inF0' ( in 3-component vector of float)
 0:231      Sequence
 0:231        move second child to first child ( temp 3-component vector of float)
-0:231          'r046' ( temp 3-component vector of float)
-0:231          log2 ( temp 3-component vector of float)
-0:231            'inF0' ( in 3-component vector of float)
+0:231          'r045' ( temp 3-component vector of float)
+0:231          vector-scale ( temp 3-component vector of float)
+0:231            log2 ( temp 3-component vector of float)
+0:231              'inF0' ( in 3-component vector of float)
+0:231            Constant:
+0:231              0.301030
 0:232      Sequence
 0:232        move second child to first child ( temp 3-component vector of float)
-0:232          'r047' ( temp 3-component vector of float)
-0:232          max ( temp 3-component vector of float)
+0:232          'r046' ( temp 3-component vector of float)
+0:232          log2 ( temp 3-component vector of float)
 0:232            'inF0' ( in 3-component vector of float)
-0:232            'inF1' ( in 3-component vector of float)
 0:233      Sequence
 0:233        move second child to first child ( temp 3-component vector of float)
-0:233          'r048' ( temp 3-component vector of float)
-0:233          min ( temp 3-component vector of float)
+0:233          'r047' ( temp 3-component vector of float)
+0:233          max ( temp 3-component vector of float)
 0:233            'inF0' ( in 3-component vector of float)
 0:233            'inF1' ( in 3-component vector of float)
 0:234      Sequence
 0:234        move second child to first child ( temp 3-component vector of float)
-0:234          'r049' ( temp 3-component vector of float)
-0:234          normalize ( temp 3-component vector of float)
+0:234          'r048' ( temp 3-component vector of float)
+0:234          min ( temp 3-component vector of float)
 0:234            'inF0' ( in 3-component vector of float)
+0:234            'inF1' ( in 3-component vector of float)
 0:235      Sequence
 0:235        move second child to first child ( temp 3-component vector of float)
-0:235          'r050' ( temp 3-component vector of float)
-0:235          pow ( temp 3-component vector of float)
+0:235          'r049' ( temp 3-component vector of float)
+0:235          normalize ( temp 3-component vector of float)
 0:235            'inF0' ( in 3-component vector of float)
-0:235            'inF1' ( in 3-component vector of float)
 0:236      Sequence
 0:236        move second child to first child ( temp 3-component vector of float)
-0:236          'r051' ( temp 3-component vector of float)
-0:236          radians ( temp 3-component vector of float)
+0:236          'r050' ( temp 3-component vector of float)
+0:236          pow ( temp 3-component vector of float)
 0:236            'inF0' ( in 3-component vector of float)
+0:236            'inF1' ( in 3-component vector of float)
 0:237      Sequence
 0:237        move second child to first child ( temp 3-component vector of float)
-0:237          'r052' ( temp 3-component vector of float)
-0:237          divide ( temp 3-component vector of float)
-0:237            Constant:
-0:237              1.000000
+0:237          'r051' ( temp 3-component vector of float)
+0:237          radians ( temp 3-component vector of float)
 0:237            'inF0' ( in 3-component vector of float)
 0:238      Sequence
 0:238        move second child to first child ( temp 3-component vector of float)
-0:238          'r053' ( temp 3-component vector of float)
-0:238          reflect ( temp 3-component vector of float)
+0:238          'r052' ( temp 3-component vector of float)
+0:238          divide ( temp 3-component vector of float)
+0:238            Constant:
+0:238              1.000000
 0:238            'inF0' ( in 3-component vector of float)
-0:238            'inF1' ( in 3-component vector of float)
 0:239      Sequence
 0:239        move second child to first child ( temp 3-component vector of float)
-0:239          'r054' ( temp 3-component vector of float)
-0:239          refract ( temp 3-component vector of float)
+0:239          'r053' ( temp 3-component vector of float)
+0:239          reflect ( temp 3-component vector of float)
 0:239            'inF0' ( in 3-component vector of float)
 0:239            'inF1' ( in 3-component vector of float)
-0:239            Constant:
-0:239              2.000000
 0:240      Sequence
-0:240        move second child to first child ( temp 3-component vector of uint)
-0:240          'r055' ( temp 3-component vector of uint)
+0:240        move second child to first child ( temp 3-component vector of float)
+0:240          'r054' ( temp 3-component vector of float)
+0:240          refract ( temp 3-component vector of float)
+0:240            'inF0' ( in 3-component vector of float)
+0:240            'inF1' ( in 3-component vector of float)
+0:240            Constant:
+0:240              2.000000
+0:241      Sequence
+0:241        move second child to first child ( temp 3-component vector of uint)
+0:241          'r055' ( temp 3-component vector of uint)
 0:?           bitFieldReverse ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
-0:241      Sequence
-0:241        move second child to first child ( temp 3-component vector of float)
-0:241          'r056' ( temp 3-component vector of float)
-0:241          roundEven ( temp 3-component vector of float)
-0:241            'inF0' ( in 3-component vector of float)
 0:242      Sequence
 0:242        move second child to first child ( temp 3-component vector of float)
-0:242          'r057' ( temp 3-component vector of float)
-0:242          inverse sqrt ( temp 3-component vector of float)
+0:242          'r056' ( temp 3-component vector of float)
+0:242          roundEven ( temp 3-component vector of float)
 0:242            'inF0' ( in 3-component vector of float)
 0:243      Sequence
 0:243        move second child to first child ( temp 3-component vector of float)
-0:243          'r058' ( temp 3-component vector of float)
-0:243          clamp ( temp 3-component vector of float)
+0:243          'r057' ( temp 3-component vector of float)
+0:243          inverse sqrt ( temp 3-component vector of float)
 0:243            'inF0' ( in 3-component vector of float)
-0:243            Constant:
-0:243              0.000000
-0:243            Constant:
-0:243              1.000000
 0:244      Sequence
 0:244        move second child to first child ( temp 3-component vector of float)
-0:244          'r059' ( temp 3-component vector of float)
-0:244          Sign ( temp 3-component vector of float)
+0:244          'r058' ( temp 3-component vector of float)
+0:244          clamp ( temp 3-component vector of float)
 0:244            'inF0' ( in 3-component vector of float)
+0:244            Constant:
+0:244              0.000000
+0:244            Constant:
+0:244              1.000000
 0:245      Sequence
 0:245        move second child to first child ( temp 3-component vector of float)
-0:245          'r060' ( temp 3-component vector of float)
-0:245          sine ( temp 3-component vector of float)
+0:245          'r059' ( temp 3-component vector of float)
+0:245          Sign ( temp 3-component vector of float)
 0:245            'inF0' ( in 3-component vector of float)
 0:246      Sequence
 0:246        move second child to first child ( temp 3-component vector of float)
-0:246          'inF1' ( in 3-component vector of float)
+0:246          'r060' ( temp 3-component vector of float)
 0:246          sine ( temp 3-component vector of float)
 0:246            'inF0' ( in 3-component vector of float)
-0:246        move second child to first child ( temp 3-component vector of float)
-0:246          'inF2' ( in 3-component vector of float)
-0:246          cosine ( temp 3-component vector of float)
-0:246            'inF0' ( in 3-component vector of float)
 0:247      Sequence
 0:247        move second child to first child ( temp 3-component vector of float)
-0:247          'r061' ( temp 3-component vector of float)
-0:247          hyp. sine ( temp 3-component vector of float)
+0:247          'inF1' ( in 3-component vector of float)
+0:247          sine ( temp 3-component vector of float)
+0:247            'inF0' ( in 3-component vector of float)
+0:247        move second child to first child ( temp 3-component vector of float)
+0:247          'inF2' ( in 3-component vector of float)
+0:247          cosine ( temp 3-component vector of float)
 0:247            'inF0' ( in 3-component vector of float)
 0:248      Sequence
 0:248        move second child to first child ( temp 3-component vector of float)
-0:248          'r062' ( temp 3-component vector of float)
-0:248          smoothstep ( temp 3-component vector of float)
+0:248          'r061' ( temp 3-component vector of float)
+0:248          hyp. sine ( temp 3-component vector of float)
 0:248            'inF0' ( in 3-component vector of float)
-0:248            'inF1' ( in 3-component vector of float)
-0:248            'inF2' ( in 3-component vector of float)
 0:249      Sequence
 0:249        move second child to first child ( temp 3-component vector of float)
-0:249          'r063' ( temp 3-component vector of float)
-0:249          sqrt ( temp 3-component vector of float)
+0:249          'r062' ( temp 3-component vector of float)
+0:249          smoothstep ( temp 3-component vector of float)
 0:249            'inF0' ( in 3-component vector of float)
+0:249            'inF1' ( in 3-component vector of float)
+0:249            'inF2' ( in 3-component vector of float)
 0:250      Sequence
 0:250        move second child to first child ( temp 3-component vector of float)
-0:250          'r064' ( temp 3-component vector of float)
-0:250          step ( temp 3-component vector of float)
+0:250          'r063' ( temp 3-component vector of float)
+0:250          sqrt ( temp 3-component vector of float)
 0:250            'inF0' ( in 3-component vector of float)
-0:250            'inF1' ( in 3-component vector of float)
 0:251      Sequence
 0:251        move second child to first child ( temp 3-component vector of float)
-0:251          'r065' ( temp 3-component vector of float)
-0:251          tangent ( temp 3-component vector of float)
+0:251          'r064' ( temp 3-component vector of float)
+0:251          step ( temp 3-component vector of float)
 0:251            'inF0' ( in 3-component vector of float)
+0:251            'inF1' ( in 3-component vector of float)
 0:252      Sequence
 0:252        move second child to first child ( temp 3-component vector of float)
-0:252          'r066' ( temp 3-component vector of float)
-0:252          hyp. tangent ( temp 3-component vector of float)
+0:252          'r065' ( temp 3-component vector of float)
+0:252          tangent ( temp 3-component vector of float)
 0:252            'inF0' ( in 3-component vector of float)
-0:254      Sequence
-0:254        move second child to first child ( temp 3-component vector of float)
-0:254          'r067' ( temp 3-component vector of float)
-0:254          trunc ( temp 3-component vector of float)
-0:254            'inF0' ( in 3-component vector of float)
-0:257      Branch: Return with expression
+0:253      Sequence
+0:253        move second child to first child ( temp 3-component vector of float)
+0:253          'r066' ( temp 3-component vector of float)
+0:253          hyp. tangent ( temp 3-component vector of float)
+0:253            'inF0' ( in 3-component vector of float)
+0:255      Sequence
+0:255        move second child to first child ( temp 3-component vector of float)
+0:255          'r067' ( temp 3-component vector of float)
+0:255          trunc ( temp 3-component vector of float)
+0:255            'inF0' ( in 3-component vector of float)
+0:258      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:261  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
-0:261    Function Parameters: 
-0:261      'inF0' ( in 4-component vector of float)
-0:261      'inF1' ( in 4-component vector of float)
-0:261      'inF2' ( in 4-component vector of float)
-0:261      'inU0' ( in 4-component vector of uint)
-0:261      'inU1' ( in 4-component vector of uint)
+0:262  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
+0:262    Function Parameters: 
+0:262      'inF0' ( in 4-component vector of float)
+0:262      'inF1' ( in 4-component vector of float)
+0:262      'inF2' ( in 4-component vector of float)
+0:262      'inU0' ( in 4-component vector of uint)
+0:262      'inU1' ( in 4-component vector of uint)
 0:?     Sequence
-0:264      Sequence
-0:264        move second child to first child ( temp bool)
-0:264          'r000' ( temp bool)
-0:264          all ( temp bool)
-0:264            Convert float to bool ( temp 4-component vector of bool)
-0:264              'inF0' ( in 4-component vector of float)
 0:265      Sequence
-0:265        move second child to first child ( temp 4-component vector of float)
-0:265          'r001' ( temp 4-component vector of float)
-0:265          Absolute value ( temp 4-component vector of float)
-0:265            'inF0' ( in 4-component vector of float)
+0:265        move second child to first child ( temp bool)
+0:265          'r000' ( temp bool)
+0:265          all ( temp bool)
+0:265            Convert float to bool ( temp 4-component vector of bool)
+0:265              'inF0' ( in 4-component vector of float)
 0:266      Sequence
 0:266        move second child to first child ( temp 4-component vector of float)
-0:266          'r002' ( temp 4-component vector of float)
-0:266          arc cosine ( temp 4-component vector of float)
+0:266          'r001' ( temp 4-component vector of float)
+0:266          Absolute value ( temp 4-component vector of float)
 0:266            'inF0' ( in 4-component vector of float)
 0:267      Sequence
-0:267        move second child to first child ( temp bool)
-0:267          'r003' ( temp bool)
-0:267          any ( temp bool)
-0:267            Convert float to bool ( temp 4-component vector of bool)
-0:267              'inF0' ( in 4-component vector of float)
+0:267        move second child to first child ( temp 4-component vector of float)
+0:267          'r002' ( temp 4-component vector of float)
+0:267          arc cosine ( temp 4-component vector of float)
+0:267            'inF0' ( in 4-component vector of float)
 0:268      Sequence
-0:268        move second child to first child ( temp 4-component vector of float)
-0:268          'r004' ( temp 4-component vector of float)
-0:268          arc sine ( temp 4-component vector of float)
-0:268            'inF0' ( in 4-component vector of float)
+0:268        move second child to first child ( temp bool)
+0:268          'r003' ( temp bool)
+0:268          any ( temp bool)
+0:268            Convert float to bool ( temp 4-component vector of bool)
+0:268              'inF0' ( in 4-component vector of float)
 0:269      Sequence
-0:269        move second child to first child ( temp 4-component vector of int)
-0:269          'r005' ( temp 4-component vector of int)
-0:269          floatBitsToInt ( temp 4-component vector of int)
+0:269        move second child to first child ( temp 4-component vector of float)
+0:269          'r004' ( temp 4-component vector of float)
+0:269          arc sine ( temp 4-component vector of float)
 0:269            'inF0' ( in 4-component vector of float)
 0:270      Sequence
-0:270        move second child to first child ( temp 4-component vector of uint)
-0:270          'r006' ( temp 4-component vector of uint)
-0:270          floatBitsToUint ( temp 4-component vector of uint)
+0:270        move second child to first child ( temp 4-component vector of int)
+0:270          'r005' ( temp 4-component vector of int)
+0:270          floatBitsToInt ( temp 4-component vector of int)
 0:270            'inF0' ( in 4-component vector of float)
 0:271      Sequence
-0:271        move second child to first child ( temp 4-component vector of float)
-0:271          'r007' ( temp 4-component vector of float)
-0:271          intBitsToFloat ( temp 4-component vector of float)
-0:271            'inU0' ( in 4-component vector of uint)
-0:273      Sequence
-0:273        move second child to first child ( temp 4-component vector of float)
-0:273          'r009' ( temp 4-component vector of float)
-0:273          arc tangent ( temp 4-component vector of float)
-0:273            'inF0' ( in 4-component vector of float)
+0:271        move second child to first child ( temp 4-component vector of uint)
+0:271          'r006' ( temp 4-component vector of uint)
+0:271          floatBitsToUint ( temp 4-component vector of uint)
+0:271            'inF0' ( in 4-component vector of float)
+0:272      Sequence
+0:272        move second child to first child ( temp 4-component vector of float)
+0:272          'r007' ( temp 4-component vector of float)
+0:272          intBitsToFloat ( temp 4-component vector of float)
+0:272            'inU0' ( in 4-component vector of uint)
 0:274      Sequence
 0:274        move second child to first child ( temp 4-component vector of float)
-0:274          'r010' ( temp 4-component vector of float)
+0:274          'r009' ( temp 4-component vector of float)
 0:274          arc tangent ( temp 4-component vector of float)
 0:274            'inF0' ( in 4-component vector of float)
-0:274            'inF1' ( in 4-component vector of float)
 0:275      Sequence
 0:275        move second child to first child ( temp 4-component vector of float)
-0:275          'r011' ( temp 4-component vector of float)
-0:275          Ceiling ( temp 4-component vector of float)
+0:275          'r010' ( temp 4-component vector of float)
+0:275          arc tangent ( temp 4-component vector of float)
 0:275            'inF0' ( in 4-component vector of float)
+0:275            'inF1' ( in 4-component vector of float)
 0:276      Sequence
 0:276        move second child to first child ( temp 4-component vector of float)
-0:276          'r012' ( temp 4-component vector of float)
-0:276          clamp ( temp 4-component vector of float)
+0:276          'r011' ( temp 4-component vector of float)
+0:276          Ceiling ( temp 4-component vector of float)
 0:276            'inF0' ( in 4-component vector of float)
-0:276            'inF1' ( in 4-component vector of float)
-0:276            'inF2' ( in 4-component vector of float)
-0:277      Test condition and select ( temp void)
-0:277        Condition
-0:277        any ( temp bool)
-0:277          Compare Less Than ( temp 4-component vector of bool)
+0:277      Sequence
+0:277        move second child to first child ( temp 4-component vector of float)
+0:277          'r012' ( temp 4-component vector of float)
+0:277          clamp ( temp 4-component vector of float)
 0:277            'inF0' ( in 4-component vector of float)
-0:277            Constant:
-0:277              0.000000
-0:277              0.000000
-0:277              0.000000
-0:277              0.000000
-0:277        true case
-0:277        Branch: Kill
+0:277            'inF1' ( in 4-component vector of float)
+0:277            'inF2' ( in 4-component vector of float)
 0:278      Test condition and select ( temp void)
 0:278        Condition
 0:278        any ( temp bool)
 0:278          Compare Less Than ( temp 4-component vector of bool)
-0:278            'inU0' ( in 4-component vector of uint)
+0:278            'inF0' ( in 4-component vector of float)
 0:278            Constant:
 0:278              0.000000
 0:278              0.000000
@@ -4083,905 +4085,917 @@
 0:278              0.000000
 0:278        true case
 0:278        Branch: Kill
-0:279      Sequence
-0:279        move second child to first child ( temp 4-component vector of float)
-0:279          'r013' ( temp 4-component vector of float)
-0:279          cosine ( temp 4-component vector of float)
-0:279            'inF0' ( in 4-component vector of float)
+0:279      Test condition and select ( temp void)
+0:279        Condition
+0:279        any ( temp bool)
+0:279          Compare Less Than ( temp 4-component vector of bool)
+0:279            'inU0' ( in 4-component vector of uint)
+0:279            Constant:
+0:279              0.000000
+0:279              0.000000
+0:279              0.000000
+0:279              0.000000
+0:279        true case
+0:279        Branch: Kill
 0:280      Sequence
 0:280        move second child to first child ( temp 4-component vector of float)
-0:280          'r014' ( temp 4-component vector of float)
-0:280          hyp. cosine ( temp 4-component vector of float)
+0:280          'r013' ( temp 4-component vector of float)
+0:280          cosine ( temp 4-component vector of float)
 0:280            'inF0' ( in 4-component vector of float)
 0:281      Sequence
-0:281        move second child to first child ( temp 4-component vector of uint)
-0:281          'r015' ( temp 4-component vector of uint)
+0:281        move second child to first child ( temp 4-component vector of float)
+0:281          'r014' ( temp 4-component vector of float)
+0:281          hyp. cosine ( temp 4-component vector of float)
+0:281            'inF0' ( in 4-component vector of float)
+0:282      Sequence
+0:282        move second child to first child ( temp 4-component vector of uint)
+0:282          'r015' ( temp 4-component vector of uint)
 0:?           bitCount ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
 0:?               2 (const uint)
-0:282      Sequence
-0:282        move second child to first child ( temp 4-component vector of float)
-0:282          'r016' ( temp 4-component vector of float)
-0:282          dPdx ( temp 4-component vector of float)
-0:282            'inF0' ( in 4-component vector of float)
 0:283      Sequence
 0:283        move second child to first child ( temp 4-component vector of float)
-0:283          'r017' ( temp 4-component vector of float)
-0:283          dPdxCoarse ( temp 4-component vector of float)
+0:283          'r016' ( temp 4-component vector of float)
+0:283          dPdx ( temp 4-component vector of float)
 0:283            'inF0' ( in 4-component vector of float)
 0:284      Sequence
 0:284        move second child to first child ( temp 4-component vector of float)
-0:284          'r018' ( temp 4-component vector of float)
-0:284          dPdxFine ( temp 4-component vector of float)
+0:284          'r017' ( temp 4-component vector of float)
+0:284          dPdxCoarse ( temp 4-component vector of float)
 0:284            'inF0' ( in 4-component vector of float)
 0:285      Sequence
 0:285        move second child to first child ( temp 4-component vector of float)
-0:285          'r019' ( temp 4-component vector of float)
-0:285          dPdy ( temp 4-component vector of float)
+0:285          'r018' ( temp 4-component vector of float)
+0:285          dPdxFine ( temp 4-component vector of float)
 0:285            'inF0' ( in 4-component vector of float)
 0:286      Sequence
 0:286        move second child to first child ( temp 4-component vector of float)
-0:286          'r020' ( temp 4-component vector of float)
-0:286          dPdyCoarse ( temp 4-component vector of float)
+0:286          'r019' ( temp 4-component vector of float)
+0:286          dPdy ( temp 4-component vector of float)
 0:286            'inF0' ( in 4-component vector of float)
 0:287      Sequence
 0:287        move second child to first child ( temp 4-component vector of float)
-0:287          'r021' ( temp 4-component vector of float)
-0:287          dPdyFine ( temp 4-component vector of float)
+0:287          'r020' ( temp 4-component vector of float)
+0:287          dPdyCoarse ( temp 4-component vector of float)
 0:287            'inF0' ( in 4-component vector of float)
 0:288      Sequence
 0:288        move second child to first child ( temp 4-component vector of float)
-0:288          'r022' ( temp 4-component vector of float)
-0:288          degrees ( temp 4-component vector of float)
+0:288          'r021' ( temp 4-component vector of float)
+0:288          dPdyFine ( temp 4-component vector of float)
 0:288            'inF0' ( in 4-component vector of float)
 0:289      Sequence
-0:289        move second child to first child ( temp float)
-0:289          'r023' ( temp float)
-0:289          distance ( temp float)
+0:289        move second child to first child ( temp 4-component vector of float)
+0:289          'r022' ( temp 4-component vector of float)
+0:289          degrees ( temp 4-component vector of float)
 0:289            'inF0' ( in 4-component vector of float)
-0:289            'inF1' ( in 4-component vector of float)
 0:290      Sequence
 0:290        move second child to first child ( temp float)
-0:290          'r024' ( temp float)
-0:290          dot-product ( temp float)
+0:290          'r023' ( temp float)
+0:290          distance ( temp float)
 0:290            'inF0' ( in 4-component vector of float)
 0:290            'inF1' ( in 4-component vector of float)
 0:291      Sequence
-0:291        move second child to first child ( temp 4-component vector of float)
-0:291          'r025' ( temp 4-component vector of float)
-0:291          Construct vec4 ( temp 4-component vector of float)
-0:291            Constant:
-0:291              1.000000
-0:291            component-wise multiply ( temp float)
-0:291              direct index ( temp float)
-0:291                'inF0' ( in 4-component vector of float)
-0:291                Constant:
-0:291                  1 (const int)
-0:291              direct index ( temp float)
-0:291                'inF1' ( in 4-component vector of float)
-0:291                Constant:
-0:291                  1 (const int)
-0:291            direct index ( temp float)
-0:291              'inF0' ( in 4-component vector of float)
-0:291              Constant:
-0:291                2 (const int)
-0:291            direct index ( temp float)
-0:291              'inF1' ( in 4-component vector of float)
-0:291              Constant:
-0:291                3 (const int)
-0:295      Sequence
-0:295        move second child to first child ( temp 4-component vector of float)
-0:295          'r029' ( temp 4-component vector of float)
-0:295          exp ( temp 4-component vector of float)
-0:295            'inF0' ( in 4-component vector of float)
+0:291        move second child to first child ( temp float)
+0:291          'r024' ( temp float)
+0:291          dot-product ( temp float)
+0:291            'inF0' ( in 4-component vector of float)
+0:291            'inF1' ( in 4-component vector of float)
+0:292      Sequence
+0:292        move second child to first child ( temp 4-component vector of float)
+0:292          'r025' ( temp 4-component vector of float)
+0:292          Construct vec4 ( temp 4-component vector of float)
+0:292            Constant:
+0:292              1.000000
+0:292            component-wise multiply ( temp float)
+0:292              direct index ( temp float)
+0:292                'inF0' ( in 4-component vector of float)
+0:292                Constant:
+0:292                  1 (const int)
+0:292              direct index ( temp float)
+0:292                'inF1' ( in 4-component vector of float)
+0:292                Constant:
+0:292                  1 (const int)
+0:292            direct index ( temp float)
+0:292              'inF0' ( in 4-component vector of float)
+0:292              Constant:
+0:292                2 (const int)
+0:292            direct index ( temp float)
+0:292              'inF1' ( in 4-component vector of float)
+0:292              Constant:
+0:292                3 (const int)
 0:296      Sequence
 0:296        move second child to first child ( temp 4-component vector of float)
-0:296          'r030' ( temp 4-component vector of float)
-0:296          exp2 ( temp 4-component vector of float)
+0:296          'r029' ( temp 4-component vector of float)
+0:296          exp ( temp 4-component vector of float)
 0:296            'inF0' ( in 4-component vector of float)
 0:297      Sequence
 0:297        move second child to first child ( temp 4-component vector of float)
-0:297          'r031' ( temp 4-component vector of float)
-0:297          face-forward ( temp 4-component vector of float)
+0:297          'r030' ( temp 4-component vector of float)
+0:297          exp2 ( temp 4-component vector of float)
 0:297            'inF0' ( in 4-component vector of float)
-0:297            'inF1' ( in 4-component vector of float)
-0:297            'inF2' ( in 4-component vector of float)
 0:298      Sequence
-0:298        move second child to first child ( temp 4-component vector of uint)
-0:298          'r032' ( temp 4-component vector of uint)
+0:298        move second child to first child ( temp 4-component vector of float)
+0:298          'r031' ( temp 4-component vector of float)
+0:298          face-forward ( temp 4-component vector of float)
+0:298            'inF0' ( in 4-component vector of float)
+0:298            'inF1' ( in 4-component vector of float)
+0:298            'inF2' ( in 4-component vector of float)
+0:299      Sequence
+0:299        move second child to first child ( temp 4-component vector of uint)
+0:299          'r032' ( temp 4-component vector of uint)
 0:?           findMSB ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:299      Sequence
-0:299        move second child to first child ( temp 4-component vector of uint)
-0:299          'r033' ( temp 4-component vector of uint)
+0:300      Sequence
+0:300        move second child to first child ( temp 4-component vector of uint)
+0:300          'r033' ( temp 4-component vector of uint)
 0:?           findLSB ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:300      Sequence
-0:300        move second child to first child ( temp 4-component vector of float)
-0:300          'r034' ( temp 4-component vector of float)
-0:300          Floor ( temp 4-component vector of float)
-0:300            'inF0' ( in 4-component vector of float)
-0:302      Sequence
-0:302        move second child to first child ( temp 4-component vector of float)
-0:302          'r036' ( temp 4-component vector of float)
-0:302          mod ( temp 4-component vector of float)
-0:302            'inF0' ( in 4-component vector of float)
-0:302            'inF1' ( in 4-component vector of float)
+0:301      Sequence
+0:301        move second child to first child ( temp 4-component vector of float)
+0:301          'r034' ( temp 4-component vector of float)
+0:301          Floor ( temp 4-component vector of float)
+0:301            'inF0' ( in 4-component vector of float)
 0:303      Sequence
 0:303        move second child to first child ( temp 4-component vector of float)
-0:303          'r037' ( temp 4-component vector of float)
-0:303          Fraction ( temp 4-component vector of float)
+0:303          'r036' ( temp 4-component vector of float)
+0:303          mod ( temp 4-component vector of float)
 0:303            'inF0' ( in 4-component vector of float)
+0:303            'inF1' ( in 4-component vector of float)
 0:304      Sequence
 0:304        move second child to first child ( temp 4-component vector of float)
-0:304          'r039' ( temp 4-component vector of float)
-0:304          fwidth ( temp 4-component vector of float)
+0:304          'r037' ( temp 4-component vector of float)
+0:304          Fraction ( temp 4-component vector of float)
 0:304            'inF0' ( in 4-component vector of float)
 0:305      Sequence
-0:305        move second child to first child ( temp 4-component vector of bool)
-0:305          'r040' ( temp 4-component vector of bool)
-0:305          isinf ( temp 4-component vector of bool)
+0:305        move second child to first child ( temp 4-component vector of float)
+0:305          'r039' ( temp 4-component vector of float)
+0:305          fwidth ( temp 4-component vector of float)
 0:305            'inF0' ( in 4-component vector of float)
 0:306      Sequence
 0:306        move second child to first child ( temp 4-component vector of bool)
-0:306          'r041' ( temp 4-component vector of bool)
-0:306          isnan ( temp 4-component vector of bool)
+0:306          'r040' ( temp 4-component vector of bool)
+0:306          isinf ( temp 4-component vector of bool)
 0:306            'inF0' ( in 4-component vector of float)
 0:307      Sequence
-0:307        move second child to first child ( temp 4-component vector of float)
-0:307          'r042' ( temp 4-component vector of float)
-0:307          ldexp ( temp 4-component vector of float)
+0:307        move second child to first child ( temp 4-component vector of bool)
+0:307          'r041' ( temp 4-component vector of bool)
+0:307          isnan ( temp 4-component vector of bool)
 0:307            'inF0' ( in 4-component vector of float)
-0:307            'inF1' ( in 4-component vector of float)
 0:308      Sequence
 0:308        move second child to first child ( temp 4-component vector of float)
-0:308          'r039a' ( temp 4-component vector of float)
-0:308          mix ( temp 4-component vector of float)
+0:308          'r042' ( temp 4-component vector of float)
+0:308          ldexp ( temp 4-component vector of float)
 0:308            'inF0' ( in 4-component vector of float)
 0:308            'inF1' ( in 4-component vector of float)
-0:308            'inF2' ( in 4-component vector of float)
 0:309      Sequence
-0:309        move second child to first child ( temp float)
-0:309          'r043' ( temp float)
-0:309          length ( temp float)
+0:309        move second child to first child ( temp 4-component vector of float)
+0:309          'r039a' ( temp 4-component vector of float)
+0:309          mix ( temp 4-component vector of float)
 0:309            'inF0' ( in 4-component vector of float)
+0:309            'inF1' ( in 4-component vector of float)
+0:309            'inF2' ( in 4-component vector of float)
 0:310      Sequence
-0:310        move second child to first child ( temp 4-component vector of float)
-0:310          'r044' ( temp 4-component vector of float)
-0:310          log ( temp 4-component vector of float)
+0:310        move second child to first child ( temp float)
+0:310          'r043' ( temp float)
+0:310          length ( temp float)
 0:310            'inF0' ( in 4-component vector of float)
 0:311      Sequence
 0:311        move second child to first child ( temp 4-component vector of float)
-0:311          'r045' ( temp 4-component vector of float)
-0:311          vector-scale ( temp 4-component vector of float)
-0:311            log2 ( temp 4-component vector of float)
-0:311              'inF0' ( in 4-component vector of float)
-0:311            Constant:
-0:311              0.301030
+0:311          'r044' ( temp 4-component vector of float)
+0:311          log ( temp 4-component vector of float)
+0:311            'inF0' ( in 4-component vector of float)
 0:312      Sequence
 0:312        move second child to first child ( temp 4-component vector of float)
-0:312          'r046' ( temp 4-component vector of float)
-0:312          log2 ( temp 4-component vector of float)
-0:312            'inF0' ( in 4-component vector of float)
+0:312          'r045' ( temp 4-component vector of float)
+0:312          vector-scale ( temp 4-component vector of float)
+0:312            log2 ( temp 4-component vector of float)
+0:312              'inF0' ( in 4-component vector of float)
+0:312            Constant:
+0:312              0.301030
 0:313      Sequence
 0:313        move second child to first child ( temp 4-component vector of float)
-0:313          'r047' ( temp 4-component vector of float)
-0:313          max ( temp 4-component vector of float)
+0:313          'r046' ( temp 4-component vector of float)
+0:313          log2 ( temp 4-component vector of float)
 0:313            'inF0' ( in 4-component vector of float)
-0:313            'inF1' ( in 4-component vector of float)
 0:314      Sequence
 0:314        move second child to first child ( temp 4-component vector of float)
-0:314          'r048' ( temp 4-component vector of float)
-0:314          min ( temp 4-component vector of float)
+0:314          'r047' ( temp 4-component vector of float)
+0:314          max ( temp 4-component vector of float)
 0:314            'inF0' ( in 4-component vector of float)
 0:314            'inF1' ( in 4-component vector of float)
 0:315      Sequence
 0:315        move second child to first child ( temp 4-component vector of float)
-0:315          'r049' ( temp 4-component vector of float)
-0:315          normalize ( temp 4-component vector of float)
+0:315          'r048' ( temp 4-component vector of float)
+0:315          min ( temp 4-component vector of float)
 0:315            'inF0' ( in 4-component vector of float)
+0:315            'inF1' ( in 4-component vector of float)
 0:316      Sequence
 0:316        move second child to first child ( temp 4-component vector of float)
-0:316          'r050' ( temp 4-component vector of float)
-0:316          pow ( temp 4-component vector of float)
+0:316          'r049' ( temp 4-component vector of float)
+0:316          normalize ( temp 4-component vector of float)
 0:316            'inF0' ( in 4-component vector of float)
-0:316            'inF1' ( in 4-component vector of float)
 0:317      Sequence
 0:317        move second child to first child ( temp 4-component vector of float)
-0:317          'r051' ( temp 4-component vector of float)
-0:317          radians ( temp 4-component vector of float)
+0:317          'r050' ( temp 4-component vector of float)
+0:317          pow ( temp 4-component vector of float)
 0:317            'inF0' ( in 4-component vector of float)
+0:317            'inF1' ( in 4-component vector of float)
 0:318      Sequence
 0:318        move second child to first child ( temp 4-component vector of float)
-0:318          'r052' ( temp 4-component vector of float)
-0:318          divide ( temp 4-component vector of float)
-0:318            Constant:
-0:318              1.000000
+0:318          'r051' ( temp 4-component vector of float)
+0:318          radians ( temp 4-component vector of float)
 0:318            'inF0' ( in 4-component vector of float)
 0:319      Sequence
 0:319        move second child to first child ( temp 4-component vector of float)
-0:319          'r053' ( temp 4-component vector of float)
-0:319          reflect ( temp 4-component vector of float)
+0:319          'r052' ( temp 4-component vector of float)
+0:319          divide ( temp 4-component vector of float)
+0:319            Constant:
+0:319              1.000000
 0:319            'inF0' ( in 4-component vector of float)
-0:319            'inF1' ( in 4-component vector of float)
 0:320      Sequence
 0:320        move second child to first child ( temp 4-component vector of float)
-0:320          'r054' ( temp 4-component vector of float)
-0:320          refract ( temp 4-component vector of float)
+0:320          'r053' ( temp 4-component vector of float)
+0:320          reflect ( temp 4-component vector of float)
 0:320            'inF0' ( in 4-component vector of float)
 0:320            'inF1' ( in 4-component vector of float)
-0:320            Constant:
-0:320              2.000000
 0:321      Sequence
-0:321        move second child to first child ( temp 4-component vector of uint)
-0:321          'r055' ( temp 4-component vector of uint)
+0:321        move second child to first child ( temp 4-component vector of float)
+0:321          'r054' ( temp 4-component vector of float)
+0:321          refract ( temp 4-component vector of float)
+0:321            'inF0' ( in 4-component vector of float)
+0:321            'inF1' ( in 4-component vector of float)
+0:321            Constant:
+0:321              2.000000
+0:322      Sequence
+0:322        move second child to first child ( temp 4-component vector of uint)
+0:322          'r055' ( temp 4-component vector of uint)
 0:?           bitFieldReverse ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:322      Sequence
-0:322        move second child to first child ( temp 4-component vector of float)
-0:322          'r056' ( temp 4-component vector of float)
-0:322          roundEven ( temp 4-component vector of float)
-0:322            'inF0' ( in 4-component vector of float)
 0:323      Sequence
 0:323        move second child to first child ( temp 4-component vector of float)
-0:323          'r057' ( temp 4-component vector of float)
-0:323          inverse sqrt ( temp 4-component vector of float)
+0:323          'r056' ( temp 4-component vector of float)
+0:323          roundEven ( temp 4-component vector of float)
 0:323            'inF0' ( in 4-component vector of float)
 0:324      Sequence
 0:324        move second child to first child ( temp 4-component vector of float)
-0:324          'r058' ( temp 4-component vector of float)
-0:324          clamp ( temp 4-component vector of float)
+0:324          'r057' ( temp 4-component vector of float)
+0:324          inverse sqrt ( temp 4-component vector of float)
 0:324            'inF0' ( in 4-component vector of float)
-0:324            Constant:
-0:324              0.000000
-0:324            Constant:
-0:324              1.000000
 0:325      Sequence
 0:325        move second child to first child ( temp 4-component vector of float)
-0:325          'r059' ( temp 4-component vector of float)
-0:325          Sign ( temp 4-component vector of float)
+0:325          'r058' ( temp 4-component vector of float)
+0:325          clamp ( temp 4-component vector of float)
 0:325            'inF0' ( in 4-component vector of float)
+0:325            Constant:
+0:325              0.000000
+0:325            Constant:
+0:325              1.000000
 0:326      Sequence
 0:326        move second child to first child ( temp 4-component vector of float)
-0:326          'r060' ( temp 4-component vector of float)
-0:326          sine ( temp 4-component vector of float)
+0:326          'r059' ( temp 4-component vector of float)
+0:326          Sign ( temp 4-component vector of float)
 0:326            'inF0' ( in 4-component vector of float)
 0:327      Sequence
 0:327        move second child to first child ( temp 4-component vector of float)
-0:327          'inF1' ( in 4-component vector of float)
+0:327          'r060' ( temp 4-component vector of float)
 0:327          sine ( temp 4-component vector of float)
 0:327            'inF0' ( in 4-component vector of float)
-0:327        move second child to first child ( temp 4-component vector of float)
-0:327          'inF2' ( in 4-component vector of float)
-0:327          cosine ( temp 4-component vector of float)
-0:327            'inF0' ( in 4-component vector of float)
 0:328      Sequence
 0:328        move second child to first child ( temp 4-component vector of float)
-0:328          'r061' ( temp 4-component vector of float)
-0:328          hyp. sine ( temp 4-component vector of float)
+0:328          'inF1' ( in 4-component vector of float)
+0:328          sine ( temp 4-component vector of float)
+0:328            'inF0' ( in 4-component vector of float)
+0:328        move second child to first child ( temp 4-component vector of float)
+0:328          'inF2' ( in 4-component vector of float)
+0:328          cosine ( temp 4-component vector of float)
 0:328            'inF0' ( in 4-component vector of float)
 0:329      Sequence
 0:329        move second child to first child ( temp 4-component vector of float)
-0:329          'r062' ( temp 4-component vector of float)
-0:329          smoothstep ( temp 4-component vector of float)
+0:329          'r061' ( temp 4-component vector of float)
+0:329          hyp. sine ( temp 4-component vector of float)
 0:329            'inF0' ( in 4-component vector of float)
-0:329            'inF1' ( in 4-component vector of float)
-0:329            'inF2' ( in 4-component vector of float)
 0:330      Sequence
 0:330        move second child to first child ( temp 4-component vector of float)
-0:330          'r063' ( temp 4-component vector of float)
-0:330          sqrt ( temp 4-component vector of float)
+0:330          'r062' ( temp 4-component vector of float)
+0:330          smoothstep ( temp 4-component vector of float)
 0:330            'inF0' ( in 4-component vector of float)
+0:330            'inF1' ( in 4-component vector of float)
+0:330            'inF2' ( in 4-component vector of float)
 0:331      Sequence
 0:331        move second child to first child ( temp 4-component vector of float)
-0:331          'r064' ( temp 4-component vector of float)
-0:331          step ( temp 4-component vector of float)
+0:331          'r063' ( temp 4-component vector of float)
+0:331          sqrt ( temp 4-component vector of float)
 0:331            'inF0' ( in 4-component vector of float)
-0:331            'inF1' ( in 4-component vector of float)
 0:332      Sequence
 0:332        move second child to first child ( temp 4-component vector of float)
-0:332          'r065' ( temp 4-component vector of float)
-0:332          tangent ( temp 4-component vector of float)
+0:332          'r064' ( temp 4-component vector of float)
+0:332          step ( temp 4-component vector of float)
 0:332            'inF0' ( in 4-component vector of float)
+0:332            'inF1' ( in 4-component vector of float)
 0:333      Sequence
 0:333        move second child to first child ( temp 4-component vector of float)
-0:333          'r066' ( temp 4-component vector of float)
-0:333          hyp. tangent ( temp 4-component vector of float)
+0:333          'r065' ( temp 4-component vector of float)
+0:333          tangent ( temp 4-component vector of float)
 0:333            'inF0' ( in 4-component vector of float)
-0:335      Sequence
-0:335        move second child to first child ( temp 4-component vector of float)
-0:335          'r067' ( temp 4-component vector of float)
-0:335          trunc ( temp 4-component vector of float)
-0:335            'inF0' ( in 4-component vector of float)
-0:338      Branch: Return with expression
+0:334      Sequence
+0:334        move second child to first child ( temp 4-component vector of float)
+0:334          'r066' ( temp 4-component vector of float)
+0:334          hyp. tangent ( temp 4-component vector of float)
+0:334            'inF0' ( in 4-component vector of float)
+0:336      Sequence
+0:336        move second child to first child ( temp 4-component vector of float)
+0:336          'r067' ( temp 4-component vector of float)
+0:336          trunc ( temp 4-component vector of float)
+0:336            'inF0' ( in 4-component vector of float)
+0:339      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:401  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
-0:401    Function Parameters: 
-0:401      'inF0' ( in 2X2 matrix of float)
-0:401      'inF1' ( in 2X2 matrix of float)
-0:401      'inF2' ( in 2X2 matrix of float)
+0:402  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
+0:402    Function Parameters: 
+0:402      'inF0' ( in 2X2 matrix of float)
+0:402      'inF1' ( in 2X2 matrix of float)
+0:402      'inF2' ( in 2X2 matrix of float)
 0:?     Sequence
-0:403      Sequence
-0:403        move second child to first child ( temp bool)
-0:403          'r000' ( temp bool)
-0:403          all ( temp bool)
-0:403            Convert float to bool ( temp 2X2 matrix of bool)
-0:403              'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r001' ( temp 2X2 matrix of float)
-0:403          Absolute value ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      arc cosine ( temp 2X2 matrix of float)
-0:403        'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp bool)
-0:403          'r003' ( temp bool)
-0:403          any ( temp bool)
-0:403            Convert float to bool ( temp 2X2 matrix of bool)
-0:403              'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r004' ( temp 2X2 matrix of float)
-0:403          arc sine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r005' ( temp 2X2 matrix of float)
-0:403          arc tangent ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r006' ( temp 2X2 matrix of float)
-0:403          arc tangent ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r007' ( temp 2X2 matrix of float)
-0:403          Ceiling ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Test condition and select ( temp void)
-0:403        Condition
-0:403        any ( temp bool)
-0:403          Compare Less Than ( temp 2X2 matrix of bool)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            Constant:
-0:403              0.000000
-0:403              0.000000
-0:403              0.000000
-0:403              0.000000
-0:403        true case
-0:403        Branch: Kill
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r008' ( temp 2X2 matrix of float)
-0:403          clamp ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403            'inF2' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r009' ( temp 2X2 matrix of float)
-0:403          cosine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r010' ( temp 2X2 matrix of float)
-0:403          hyp. cosine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r011' ( temp 2X2 matrix of float)
-0:403          dPdx ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r012' ( temp 2X2 matrix of float)
-0:403          dPdxCoarse ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r013' ( temp 2X2 matrix of float)
-0:403          dPdxFine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r014' ( temp 2X2 matrix of float)
-0:403          dPdy ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r015' ( temp 2X2 matrix of float)
-0:403          dPdyCoarse ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r016' ( temp 2X2 matrix of float)
-0:403          dPdyFine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r017' ( temp 2X2 matrix of float)
-0:403          degrees ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp float)
-0:403          'r018' ( temp float)
-0:403          determinant ( temp float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r019' ( temp 2X2 matrix of float)
-0:403          exp ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'R020' ( temp 2X2 matrix of float)
-0:403          exp2 ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r021' ( temp 2X2 matrix of float)
-0:403          Floor ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r022' ( temp 2X2 matrix of float)
-0:403          mod ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r023' ( temp 2X2 matrix of float)
-0:403          Fraction ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r025' ( temp 2X2 matrix of float)
-0:403          fwidth ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r026' ( temp 2X2 matrix of float)
-0:403          ldexp ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r026a' ( temp 2X2 matrix of float)
-0:403          mix ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403            'inF2' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r027' ( temp 2X2 matrix of float)
-0:403          log ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r028' ( temp 2X2 matrix of float)
-0:403          matrix-scale ( temp 2X2 matrix of float)
-0:403            log2 ( temp 2X2 matrix of float)
-0:403              'inF0' ( in 2X2 matrix of float)
-0:403            Constant:
-0:403              0.301030
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r029' ( temp 2X2 matrix of float)
-0:403          log2 ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r030' ( temp 2X2 matrix of float)
-0:403          max ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r031' ( temp 2X2 matrix of float)
-0:403          min ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r032' ( temp 2X2 matrix of float)
-0:403          pow ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r033' ( temp 2X2 matrix of float)
-0:403          radians ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r034' ( temp 2X2 matrix of float)
-0:403          roundEven ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r035' ( temp 2X2 matrix of float)
-0:403          inverse sqrt ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r036' ( temp 2X2 matrix of float)
-0:403          clamp ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            Constant:
-0:403              0.000000
-0:403            Constant:
-0:403              1.000000
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r037' ( temp 2X2 matrix of float)
-0:403          Sign ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r038' ( temp 2X2 matrix of float)
-0:403          sine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'inF1' ( in 2X2 matrix of float)
-0:403          sine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'inF2' ( in 2X2 matrix of float)
-0:403          cosine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r039' ( temp 2X2 matrix of float)
-0:403          hyp. sine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r049' ( temp 2X2 matrix of float)
-0:403          smoothstep ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403            'inF2' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r041' ( temp 2X2 matrix of float)
-0:403          sqrt ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r042' ( temp 2X2 matrix of float)
-0:403          step ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r043' ( temp 2X2 matrix of float)
-0:403          tangent ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r044' ( temp 2X2 matrix of float)
-0:403          hyp. tangent ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      transpose ( temp 2X2 matrix of float)
-0:403        'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r046' ( temp 2X2 matrix of float)
-0:403          trunc ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:406      Branch: Return with expression
+0:404      Sequence
+0:404        move second child to first child ( temp bool)
+0:404          'r000' ( temp bool)
+0:404          all ( temp bool)
+0:404            Convert float to bool ( temp 2X2 matrix of bool)
+0:404              'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r001' ( temp 2X2 matrix of float)
+0:404          Absolute value ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      arc cosine ( temp 2X2 matrix of float)
+0:404        'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp bool)
+0:404          'r003' ( temp bool)
+0:404          any ( temp bool)
+0:404            Convert float to bool ( temp 2X2 matrix of bool)
+0:404              'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r004' ( temp 2X2 matrix of float)
+0:404          arc sine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r005' ( temp 2X2 matrix of float)
+0:404          arc tangent ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r006' ( temp 2X2 matrix of float)
+0:404          arc tangent ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r007' ( temp 2X2 matrix of float)
+0:404          Ceiling ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Test condition and select ( temp void)
+0:404        Condition
+0:404        any ( temp bool)
+0:404          Compare Less Than ( temp 2X2 matrix of bool)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            Constant:
+0:404              0.000000
+0:404              0.000000
+0:404              0.000000
+0:404              0.000000
+0:404        true case
+0:404        Branch: Kill
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r008' ( temp 2X2 matrix of float)
+0:404          clamp ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404            'inF2' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r009' ( temp 2X2 matrix of float)
+0:404          cosine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r010' ( temp 2X2 matrix of float)
+0:404          hyp. cosine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r011' ( temp 2X2 matrix of float)
+0:404          dPdx ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r012' ( temp 2X2 matrix of float)
+0:404          dPdxCoarse ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r013' ( temp 2X2 matrix of float)
+0:404          dPdxFine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r014' ( temp 2X2 matrix of float)
+0:404          dPdy ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r015' ( temp 2X2 matrix of float)
+0:404          dPdyCoarse ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r016' ( temp 2X2 matrix of float)
+0:404          dPdyFine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r017' ( temp 2X2 matrix of float)
+0:404          degrees ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp float)
+0:404          'r018' ( temp float)
+0:404          determinant ( temp float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r019' ( temp 2X2 matrix of float)
+0:404          exp ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'R020' ( temp 2X2 matrix of float)
+0:404          exp2 ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r021' ( temp 2X2 matrix of float)
+0:404          Floor ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r022' ( temp 2X2 matrix of float)
+0:404          mod ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r023' ( temp 2X2 matrix of float)
+0:404          Fraction ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r025' ( temp 2X2 matrix of float)
+0:404          fwidth ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r026' ( temp 2X2 matrix of float)
+0:404          ldexp ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r026a' ( temp 2X2 matrix of float)
+0:404          mix ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404            'inF2' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r027' ( temp 2X2 matrix of float)
+0:404          log ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r028' ( temp 2X2 matrix of float)
+0:404          matrix-scale ( temp 2X2 matrix of float)
+0:404            log2 ( temp 2X2 matrix of float)
+0:404              'inF0' ( in 2X2 matrix of float)
+0:404            Constant:
+0:404              0.301030
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r029' ( temp 2X2 matrix of float)
+0:404          log2 ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r030' ( temp 2X2 matrix of float)
+0:404          max ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r031' ( temp 2X2 matrix of float)
+0:404          min ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r032' ( temp 2X2 matrix of float)
+0:404          pow ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r033' ( temp 2X2 matrix of float)
+0:404          radians ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r034' ( temp 2X2 matrix of float)
+0:404          roundEven ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r035' ( temp 2X2 matrix of float)
+0:404          inverse sqrt ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r036' ( temp 2X2 matrix of float)
+0:404          clamp ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            Constant:
+0:404              0.000000
+0:404            Constant:
+0:404              1.000000
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r037' ( temp 2X2 matrix of float)
+0:404          Sign ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r038' ( temp 2X2 matrix of float)
+0:404          sine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'inF1' ( in 2X2 matrix of float)
+0:404          sine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'inF2' ( in 2X2 matrix of float)
+0:404          cosine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r039' ( temp 2X2 matrix of float)
+0:404          hyp. sine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r049' ( temp 2X2 matrix of float)
+0:404          smoothstep ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404            'inF2' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r041' ( temp 2X2 matrix of float)
+0:404          sqrt ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r042' ( temp 2X2 matrix of float)
+0:404          step ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r043' ( temp 2X2 matrix of float)
+0:404          tangent ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r044' ( temp 2X2 matrix of float)
+0:404          hyp. tangent ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      transpose ( temp 2X2 matrix of float)
+0:404        'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r046' ( temp 2X2 matrix of float)
+0:404          trunc ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:407      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:410  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
-0:410    Function Parameters: 
-0:410      'inF0' ( in 3X3 matrix of float)
-0:410      'inF1' ( in 3X3 matrix of float)
-0:410      'inF2' ( in 3X3 matrix of float)
+0:411  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
+0:411    Function Parameters: 
+0:411      'inF0' ( in 3X3 matrix of float)
+0:411      'inF1' ( in 3X3 matrix of float)
+0:411      'inF2' ( in 3X3 matrix of float)
 0:?     Sequence
-0:412      Sequence
-0:412        move second child to first child ( temp bool)
-0:412          'r000' ( temp bool)
-0:412          all ( temp bool)
-0:412            Convert float to bool ( temp 3X3 matrix of bool)
-0:412              'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r001' ( temp 3X3 matrix of float)
-0:412          Absolute value ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      arc cosine ( temp 3X3 matrix of float)
-0:412        'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp bool)
-0:412          'r003' ( temp bool)
-0:412          any ( temp bool)
-0:412            Convert float to bool ( temp 3X3 matrix of bool)
-0:412              'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r004' ( temp 3X3 matrix of float)
-0:412          arc sine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r005' ( temp 3X3 matrix of float)
-0:412          arc tangent ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r006' ( temp 3X3 matrix of float)
-0:412          arc tangent ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r007' ( temp 3X3 matrix of float)
-0:412          Ceiling ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Test condition and select ( temp void)
-0:412        Condition
-0:412        any ( temp bool)
-0:412          Compare Less Than ( temp 3X3 matrix of bool)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            Constant:
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412        true case
-0:412        Branch: Kill
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r008' ( temp 3X3 matrix of float)
-0:412          clamp ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412            'inF2' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r009' ( temp 3X3 matrix of float)
-0:412          cosine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r010' ( temp 3X3 matrix of float)
-0:412          hyp. cosine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r011' ( temp 3X3 matrix of float)
-0:412          dPdx ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r012' ( temp 3X3 matrix of float)
-0:412          dPdxCoarse ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r013' ( temp 3X3 matrix of float)
-0:412          dPdxFine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r014' ( temp 3X3 matrix of float)
-0:412          dPdy ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r015' ( temp 3X3 matrix of float)
-0:412          dPdyCoarse ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r016' ( temp 3X3 matrix of float)
-0:412          dPdyFine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r017' ( temp 3X3 matrix of float)
-0:412          degrees ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp float)
-0:412          'r018' ( temp float)
-0:412          determinant ( temp float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r019' ( temp 3X3 matrix of float)
-0:412          exp ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'R020' ( temp 3X3 matrix of float)
-0:412          exp2 ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r021' ( temp 3X3 matrix of float)
-0:412          Floor ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r022' ( temp 3X3 matrix of float)
-0:412          mod ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r023' ( temp 3X3 matrix of float)
-0:412          Fraction ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r025' ( temp 3X3 matrix of float)
-0:412          fwidth ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r026' ( temp 3X3 matrix of float)
-0:412          ldexp ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r026a' ( temp 3X3 matrix of float)
-0:412          mix ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412            'inF2' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r027' ( temp 3X3 matrix of float)
-0:412          log ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r028' ( temp 3X3 matrix of float)
-0:412          matrix-scale ( temp 3X3 matrix of float)
-0:412            log2 ( temp 3X3 matrix of float)
-0:412              'inF0' ( in 3X3 matrix of float)
-0:412            Constant:
-0:412              0.301030
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r029' ( temp 3X3 matrix of float)
-0:412          log2 ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r030' ( temp 3X3 matrix of float)
-0:412          max ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r031' ( temp 3X3 matrix of float)
-0:412          min ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r032' ( temp 3X3 matrix of float)
-0:412          pow ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r033' ( temp 3X3 matrix of float)
-0:412          radians ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r034' ( temp 3X3 matrix of float)
-0:412          roundEven ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r035' ( temp 3X3 matrix of float)
-0:412          inverse sqrt ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r036' ( temp 3X3 matrix of float)
-0:412          clamp ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            Constant:
-0:412              0.000000
-0:412            Constant:
-0:412              1.000000
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r037' ( temp 3X3 matrix of float)
-0:412          Sign ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r038' ( temp 3X3 matrix of float)
-0:412          sine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'inF1' ( in 3X3 matrix of float)
-0:412          sine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'inF2' ( in 3X3 matrix of float)
-0:412          cosine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r039' ( temp 3X3 matrix of float)
-0:412          hyp. sine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r049' ( temp 3X3 matrix of float)
-0:412          smoothstep ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412            'inF2' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r041' ( temp 3X3 matrix of float)
-0:412          sqrt ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r042' ( temp 3X3 matrix of float)
-0:412          step ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r043' ( temp 3X3 matrix of float)
-0:412          tangent ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r044' ( temp 3X3 matrix of float)
-0:412          hyp. tangent ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      transpose ( temp 3X3 matrix of float)
-0:412        'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r046' ( temp 3X3 matrix of float)
-0:412          trunc ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:415      Branch: Return with expression
+0:413      Sequence
+0:413        move second child to first child ( temp bool)
+0:413          'r000' ( temp bool)
+0:413          all ( temp bool)
+0:413            Convert float to bool ( temp 3X3 matrix of bool)
+0:413              'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r001' ( temp 3X3 matrix of float)
+0:413          Absolute value ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      arc cosine ( temp 3X3 matrix of float)
+0:413        'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp bool)
+0:413          'r003' ( temp bool)
+0:413          any ( temp bool)
+0:413            Convert float to bool ( temp 3X3 matrix of bool)
+0:413              'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r004' ( temp 3X3 matrix of float)
+0:413          arc sine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r005' ( temp 3X3 matrix of float)
+0:413          arc tangent ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r006' ( temp 3X3 matrix of float)
+0:413          arc tangent ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r007' ( temp 3X3 matrix of float)
+0:413          Ceiling ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Test condition and select ( temp void)
+0:413        Condition
+0:413        any ( temp bool)
+0:413          Compare Less Than ( temp 3X3 matrix of bool)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            Constant:
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413        true case
+0:413        Branch: Kill
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r008' ( temp 3X3 matrix of float)
+0:413          clamp ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413            'inF2' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r009' ( temp 3X3 matrix of float)
+0:413          cosine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r010' ( temp 3X3 matrix of float)
+0:413          hyp. cosine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r011' ( temp 3X3 matrix of float)
+0:413          dPdx ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r012' ( temp 3X3 matrix of float)
+0:413          dPdxCoarse ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r013' ( temp 3X3 matrix of float)
+0:413          dPdxFine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r014' ( temp 3X3 matrix of float)
+0:413          dPdy ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r015' ( temp 3X3 matrix of float)
+0:413          dPdyCoarse ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r016' ( temp 3X3 matrix of float)
+0:413          dPdyFine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r017' ( temp 3X3 matrix of float)
+0:413          degrees ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp float)
+0:413          'r018' ( temp float)
+0:413          determinant ( temp float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r019' ( temp 3X3 matrix of float)
+0:413          exp ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'R020' ( temp 3X3 matrix of float)
+0:413          exp2 ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r021' ( temp 3X3 matrix of float)
+0:413          Floor ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r022' ( temp 3X3 matrix of float)
+0:413          mod ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r023' ( temp 3X3 matrix of float)
+0:413          Fraction ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r025' ( temp 3X3 matrix of float)
+0:413          fwidth ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r026' ( temp 3X3 matrix of float)
+0:413          ldexp ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r026a' ( temp 3X3 matrix of float)
+0:413          mix ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413            'inF2' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r027' ( temp 3X3 matrix of float)
+0:413          log ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r028' ( temp 3X3 matrix of float)
+0:413          matrix-scale ( temp 3X3 matrix of float)
+0:413            log2 ( temp 3X3 matrix of float)
+0:413              'inF0' ( in 3X3 matrix of float)
+0:413            Constant:
+0:413              0.301030
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r029' ( temp 3X3 matrix of float)
+0:413          log2 ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r030' ( temp 3X3 matrix of float)
+0:413          max ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r031' ( temp 3X3 matrix of float)
+0:413          min ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r032' ( temp 3X3 matrix of float)
+0:413          pow ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r033' ( temp 3X3 matrix of float)
+0:413          radians ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r034' ( temp 3X3 matrix of float)
+0:413          roundEven ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r035' ( temp 3X3 matrix of float)
+0:413          inverse sqrt ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r036' ( temp 3X3 matrix of float)
+0:413          clamp ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            Constant:
+0:413              0.000000
+0:413            Constant:
+0:413              1.000000
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r037' ( temp 3X3 matrix of float)
+0:413          Sign ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r038' ( temp 3X3 matrix of float)
+0:413          sine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'inF1' ( in 3X3 matrix of float)
+0:413          sine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'inF2' ( in 3X3 matrix of float)
+0:413          cosine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r039' ( temp 3X3 matrix of float)
+0:413          hyp. sine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r049' ( temp 3X3 matrix of float)
+0:413          smoothstep ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413            'inF2' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r041' ( temp 3X3 matrix of float)
+0:413          sqrt ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r042' ( temp 3X3 matrix of float)
+0:413          step ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r043' ( temp 3X3 matrix of float)
+0:413          tangent ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r044' ( temp 3X3 matrix of float)
+0:413          hyp. tangent ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      transpose ( temp 3X3 matrix of float)
+0:413        'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r046' ( temp 3X3 matrix of float)
+0:413          trunc ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:416      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -4992,297 +5006,297 @@
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:419  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
-0:419    Function Parameters: 
-0:419      'inF0' ( in 4X4 matrix of float)
-0:419      'inF1' ( in 4X4 matrix of float)
-0:419      'inF2' ( in 4X4 matrix of float)
+0:420  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
+0:420    Function Parameters: 
+0:420      'inF0' ( in 4X4 matrix of float)
+0:420      'inF1' ( in 4X4 matrix of float)
+0:420      'inF2' ( in 4X4 matrix of float)
 0:?     Sequence
-0:421      Sequence
-0:421        move second child to first child ( temp bool)
-0:421          'r000' ( temp bool)
-0:421          all ( temp bool)
-0:421            Convert float to bool ( temp 4X4 matrix of bool)
-0:421              'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r001' ( temp 4X4 matrix of float)
-0:421          Absolute value ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      arc cosine ( temp 4X4 matrix of float)
-0:421        'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp bool)
-0:421          'r003' ( temp bool)
-0:421          any ( temp bool)
-0:421            Convert float to bool ( temp 4X4 matrix of bool)
-0:421              'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r004' ( temp 4X4 matrix of float)
-0:421          arc sine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r005' ( temp 4X4 matrix of float)
-0:421          arc tangent ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r006' ( temp 4X4 matrix of float)
-0:421          arc tangent ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r007' ( temp 4X4 matrix of float)
-0:421          Ceiling ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Test condition and select ( temp void)
-0:421        Condition
-0:421        any ( temp bool)
-0:421          Compare Less Than ( temp 4X4 matrix of bool)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            Constant:
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421        true case
-0:421        Branch: Kill
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r008' ( temp 4X4 matrix of float)
-0:421          clamp ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421            'inF2' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r009' ( temp 4X4 matrix of float)
-0:421          cosine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r010' ( temp 4X4 matrix of float)
-0:421          hyp. cosine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r011' ( temp 4X4 matrix of float)
-0:421          dPdx ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r012' ( temp 4X4 matrix of float)
-0:421          dPdxCoarse ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r013' ( temp 4X4 matrix of float)
-0:421          dPdxFine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r014' ( temp 4X4 matrix of float)
-0:421          dPdy ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r015' ( temp 4X4 matrix of float)
-0:421          dPdyCoarse ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r016' ( temp 4X4 matrix of float)
-0:421          dPdyFine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r017' ( temp 4X4 matrix of float)
-0:421          degrees ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp float)
-0:421          'r018' ( temp float)
-0:421          determinant ( temp float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r019' ( temp 4X4 matrix of float)
-0:421          exp ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'R020' ( temp 4X4 matrix of float)
-0:421          exp2 ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r021' ( temp 4X4 matrix of float)
-0:421          Floor ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r022' ( temp 4X4 matrix of float)
-0:421          mod ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r023' ( temp 4X4 matrix of float)
-0:421          Fraction ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r025' ( temp 4X4 matrix of float)
-0:421          fwidth ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r026' ( temp 4X4 matrix of float)
-0:421          ldexp ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r026a' ( temp 4X4 matrix of float)
-0:421          mix ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421            'inF2' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r027' ( temp 4X4 matrix of float)
-0:421          log ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r028' ( temp 4X4 matrix of float)
-0:421          matrix-scale ( temp 4X4 matrix of float)
-0:421            log2 ( temp 4X4 matrix of float)
-0:421              'inF0' ( in 4X4 matrix of float)
-0:421            Constant:
-0:421              0.301030
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r029' ( temp 4X4 matrix of float)
-0:421          log2 ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r030' ( temp 4X4 matrix of float)
-0:421          max ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r031' ( temp 4X4 matrix of float)
-0:421          min ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r032' ( temp 4X4 matrix of float)
-0:421          pow ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r033' ( temp 4X4 matrix of float)
-0:421          radians ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r034' ( temp 4X4 matrix of float)
-0:421          roundEven ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r035' ( temp 4X4 matrix of float)
-0:421          inverse sqrt ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r036' ( temp 4X4 matrix of float)
-0:421          clamp ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            Constant:
-0:421              0.000000
-0:421            Constant:
-0:421              1.000000
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r037' ( temp 4X4 matrix of float)
-0:421          Sign ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r038' ( temp 4X4 matrix of float)
-0:421          sine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'inF1' ( in 4X4 matrix of float)
-0:421          sine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'inF2' ( in 4X4 matrix of float)
-0:421          cosine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r039' ( temp 4X4 matrix of float)
-0:421          hyp. sine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r049' ( temp 4X4 matrix of float)
-0:421          smoothstep ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421            'inF2' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r041' ( temp 4X4 matrix of float)
-0:421          sqrt ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r042' ( temp 4X4 matrix of float)
-0:421          step ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r043' ( temp 4X4 matrix of float)
-0:421          tangent ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r044' ( temp 4X4 matrix of float)
-0:421          hyp. tangent ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      transpose ( temp 4X4 matrix of float)
-0:421        'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r046' ( temp 4X4 matrix of float)
-0:421          trunc ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:424      Branch: Return with expression
+0:422      Sequence
+0:422        move second child to first child ( temp bool)
+0:422          'r000' ( temp bool)
+0:422          all ( temp bool)
+0:422            Convert float to bool ( temp 4X4 matrix of bool)
+0:422              'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r001' ( temp 4X4 matrix of float)
+0:422          Absolute value ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      arc cosine ( temp 4X4 matrix of float)
+0:422        'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp bool)
+0:422          'r003' ( temp bool)
+0:422          any ( temp bool)
+0:422            Convert float to bool ( temp 4X4 matrix of bool)
+0:422              'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r004' ( temp 4X4 matrix of float)
+0:422          arc sine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r005' ( temp 4X4 matrix of float)
+0:422          arc tangent ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r006' ( temp 4X4 matrix of float)
+0:422          arc tangent ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r007' ( temp 4X4 matrix of float)
+0:422          Ceiling ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Test condition and select ( temp void)
+0:422        Condition
+0:422        any ( temp bool)
+0:422          Compare Less Than ( temp 4X4 matrix of bool)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            Constant:
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422        true case
+0:422        Branch: Kill
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r008' ( temp 4X4 matrix of float)
+0:422          clamp ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422            'inF2' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r009' ( temp 4X4 matrix of float)
+0:422          cosine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r010' ( temp 4X4 matrix of float)
+0:422          hyp. cosine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r011' ( temp 4X4 matrix of float)
+0:422          dPdx ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r012' ( temp 4X4 matrix of float)
+0:422          dPdxCoarse ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r013' ( temp 4X4 matrix of float)
+0:422          dPdxFine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r014' ( temp 4X4 matrix of float)
+0:422          dPdy ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r015' ( temp 4X4 matrix of float)
+0:422          dPdyCoarse ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r016' ( temp 4X4 matrix of float)
+0:422          dPdyFine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r017' ( temp 4X4 matrix of float)
+0:422          degrees ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp float)
+0:422          'r018' ( temp float)
+0:422          determinant ( temp float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r019' ( temp 4X4 matrix of float)
+0:422          exp ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'R020' ( temp 4X4 matrix of float)
+0:422          exp2 ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r021' ( temp 4X4 matrix of float)
+0:422          Floor ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r022' ( temp 4X4 matrix of float)
+0:422          mod ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r023' ( temp 4X4 matrix of float)
+0:422          Fraction ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r025' ( temp 4X4 matrix of float)
+0:422          fwidth ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r026' ( temp 4X4 matrix of float)
+0:422          ldexp ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r026a' ( temp 4X4 matrix of float)
+0:422          mix ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422            'inF2' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r027' ( temp 4X4 matrix of float)
+0:422          log ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r028' ( temp 4X4 matrix of float)
+0:422          matrix-scale ( temp 4X4 matrix of float)
+0:422            log2 ( temp 4X4 matrix of float)
+0:422              'inF0' ( in 4X4 matrix of float)
+0:422            Constant:
+0:422              0.301030
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r029' ( temp 4X4 matrix of float)
+0:422          log2 ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r030' ( temp 4X4 matrix of float)
+0:422          max ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r031' ( temp 4X4 matrix of float)
+0:422          min ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r032' ( temp 4X4 matrix of float)
+0:422          pow ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r033' ( temp 4X4 matrix of float)
+0:422          radians ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r034' ( temp 4X4 matrix of float)
+0:422          roundEven ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r035' ( temp 4X4 matrix of float)
+0:422          inverse sqrt ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r036' ( temp 4X4 matrix of float)
+0:422          clamp ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            Constant:
+0:422              0.000000
+0:422            Constant:
+0:422              1.000000
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r037' ( temp 4X4 matrix of float)
+0:422          Sign ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r038' ( temp 4X4 matrix of float)
+0:422          sine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'inF1' ( in 4X4 matrix of float)
+0:422          sine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'inF2' ( in 4X4 matrix of float)
+0:422          cosine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r039' ( temp 4X4 matrix of float)
+0:422          hyp. sine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r049' ( temp 4X4 matrix of float)
+0:422          smoothstep ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422            'inF2' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r041' ( temp 4X4 matrix of float)
+0:422          sqrt ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r042' ( temp 4X4 matrix of float)
+0:422          step ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r043' ( temp 4X4 matrix of float)
+0:422          tangent ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r044' ( temp 4X4 matrix of float)
+0:422          hyp. tangent ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      transpose ( temp 4X4 matrix of float)
+0:422        'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r046' ( temp 4X4 matrix of float)
+0:422          trunc ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:425      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
@@ -5300,334 +5314,334 @@
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:442  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
-0:442    Function Parameters: 
-0:442      'inF0' ( in float)
-0:442      'inF1' ( in float)
-0:442      'inFV0' ( in 2-component vector of float)
-0:442      'inFV1' ( in 2-component vector of float)
-0:442      'inFM0' ( in 2X2 matrix of float)
-0:442      'inFM1' ( in 2X2 matrix of float)
+0:443  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
+0:443    Function Parameters: 
+0:443      'inF0' ( in float)
+0:443      'inF1' ( in float)
+0:443      'inFV0' ( in 2-component vector of float)
+0:443      'inFV1' ( in 2-component vector of float)
+0:443      'inFM0' ( in 2X2 matrix of float)
+0:443      'inFM1' ( in 2X2 matrix of float)
 0:?     Sequence
-0:443      Sequence
-0:443        move second child to first child ( temp float)
-0:443          'r0' ( temp float)
-0:443          component-wise multiply ( temp float)
-0:443            'inF1' ( in float)
-0:443            'inF0' ( in float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2-component vector of float)
-0:443          'r1' ( temp 2-component vector of float)
-0:443          vector-scale ( temp 2-component vector of float)
-0:443            'inF0' ( in float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2-component vector of float)
-0:443          'r2' ( temp 2-component vector of float)
-0:443          vector-scale ( temp 2-component vector of float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443            'inF0' ( in float)
-0:443      Sequence
-0:443        move second child to first child ( temp float)
-0:443          'r3' ( temp float)
-0:443          dot-product ( temp float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443            'inFV1' ( in 2-component vector of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2-component vector of float)
-0:443          'r4' ( temp 2-component vector of float)
-0:443          vector-times-matrix ( temp 2-component vector of float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2-component vector of float)
-0:443          'r5' ( temp 2-component vector of float)
-0:443          matrix-times-vector ( temp 2-component vector of float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2X2 matrix of float)
-0:443          'r6' ( temp 2X2 matrix of float)
-0:443          matrix-scale ( temp 2X2 matrix of float)
-0:443            'inF0' ( in float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2X2 matrix of float)
-0:443          'r7' ( temp 2X2 matrix of float)
-0:443          matrix-scale ( temp 2X2 matrix of float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:443            'inF0' ( in float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2X2 matrix of float)
-0:443          'r8' ( temp 2X2 matrix of float)
-0:443          matrix-multiply ( temp 2X2 matrix of float)
-0:443            'inFM1' ( in 2X2 matrix of float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:449  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
-0:449    Function Parameters: 
-0:449      'inF0' ( in float)
-0:449      'inF1' ( in float)
-0:449      'inFV0' ( in 3-component vector of float)
-0:449      'inFV1' ( in 3-component vector of float)
-0:449      'inFM0' ( in 3X3 matrix of float)
-0:449      'inFM1' ( in 3X3 matrix of float)
+0:444      Sequence
+0:444        move second child to first child ( temp float)
+0:444          'r0' ( temp float)
+0:444          component-wise multiply ( temp float)
+0:444            'inF1' ( in float)
+0:444            'inF0' ( in float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2-component vector of float)
+0:444          'r1' ( temp 2-component vector of float)
+0:444          vector-scale ( temp 2-component vector of float)
+0:444            'inF0' ( in float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2-component vector of float)
+0:444          'r2' ( temp 2-component vector of float)
+0:444          vector-scale ( temp 2-component vector of float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444            'inF0' ( in float)
+0:444      Sequence
+0:444        move second child to first child ( temp float)
+0:444          'r3' ( temp float)
+0:444          dot-product ( temp float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444            'inFV1' ( in 2-component vector of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2-component vector of float)
+0:444          'r4' ( temp 2-component vector of float)
+0:444          vector-times-matrix ( temp 2-component vector of float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2-component vector of float)
+0:444          'r5' ( temp 2-component vector of float)
+0:444          matrix-times-vector ( temp 2-component vector of float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2X2 matrix of float)
+0:444          'r6' ( temp 2X2 matrix of float)
+0:444          matrix-scale ( temp 2X2 matrix of float)
+0:444            'inF0' ( in float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2X2 matrix of float)
+0:444          'r7' ( temp 2X2 matrix of float)
+0:444          matrix-scale ( temp 2X2 matrix of float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:444            'inF0' ( in float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2X2 matrix of float)
+0:444          'r8' ( temp 2X2 matrix of float)
+0:444          matrix-multiply ( temp 2X2 matrix of float)
+0:444            'inFM1' ( in 2X2 matrix of float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:450  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
+0:450    Function Parameters: 
+0:450      'inF0' ( in float)
+0:450      'inF1' ( in float)
+0:450      'inFV0' ( in 3-component vector of float)
+0:450      'inFV1' ( in 3-component vector of float)
+0:450      'inFM0' ( in 3X3 matrix of float)
+0:450      'inFM1' ( in 3X3 matrix of float)
 0:?     Sequence
-0:450      Sequence
-0:450        move second child to first child ( temp float)
-0:450          'r0' ( temp float)
-0:450          component-wise multiply ( temp float)
-0:450            'inF1' ( in float)
-0:450            'inF0' ( in float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3-component vector of float)
-0:450          'r1' ( temp 3-component vector of float)
-0:450          vector-scale ( temp 3-component vector of float)
-0:450            'inF0' ( in float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3-component vector of float)
-0:450          'r2' ( temp 3-component vector of float)
-0:450          vector-scale ( temp 3-component vector of float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450            'inF0' ( in float)
-0:450      Sequence
-0:450        move second child to first child ( temp float)
-0:450          'r3' ( temp float)
-0:450          dot-product ( temp float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450            'inFV1' ( in 3-component vector of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3-component vector of float)
-0:450          'r4' ( temp 3-component vector of float)
-0:450          vector-times-matrix ( temp 3-component vector of float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3-component vector of float)
-0:450          'r5' ( temp 3-component vector of float)
-0:450          matrix-times-vector ( temp 3-component vector of float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3X3 matrix of float)
-0:450          'r6' ( temp 3X3 matrix of float)
-0:450          matrix-scale ( temp 3X3 matrix of float)
-0:450            'inF0' ( in float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3X3 matrix of float)
-0:450          'r7' ( temp 3X3 matrix of float)
-0:450          matrix-scale ( temp 3X3 matrix of float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:450            'inF0' ( in float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3X3 matrix of float)
-0:450          'r8' ( temp 3X3 matrix of float)
-0:450          matrix-multiply ( temp 3X3 matrix of float)
-0:450            'inFM1' ( in 3X3 matrix of float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:456  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
-0:456    Function Parameters: 
-0:456      'inF0' ( in float)
-0:456      'inF1' ( in float)
-0:456      'inFV0' ( in 4-component vector of float)
-0:456      'inFV1' ( in 4-component vector of float)
-0:456      'inFM0' ( in 4X4 matrix of float)
-0:456      'inFM1' ( in 4X4 matrix of float)
+0:451      Sequence
+0:451        move second child to first child ( temp float)
+0:451          'r0' ( temp float)
+0:451          component-wise multiply ( temp float)
+0:451            'inF1' ( in float)
+0:451            'inF0' ( in float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3-component vector of float)
+0:451          'r1' ( temp 3-component vector of float)
+0:451          vector-scale ( temp 3-component vector of float)
+0:451            'inF0' ( in float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3-component vector of float)
+0:451          'r2' ( temp 3-component vector of float)
+0:451          vector-scale ( temp 3-component vector of float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451            'inF0' ( in float)
+0:451      Sequence
+0:451        move second child to first child ( temp float)
+0:451          'r3' ( temp float)
+0:451          dot-product ( temp float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451            'inFV1' ( in 3-component vector of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3-component vector of float)
+0:451          'r4' ( temp 3-component vector of float)
+0:451          vector-times-matrix ( temp 3-component vector of float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3-component vector of float)
+0:451          'r5' ( temp 3-component vector of float)
+0:451          matrix-times-vector ( temp 3-component vector of float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3X3 matrix of float)
+0:451          'r6' ( temp 3X3 matrix of float)
+0:451          matrix-scale ( temp 3X3 matrix of float)
+0:451            'inF0' ( in float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3X3 matrix of float)
+0:451          'r7' ( temp 3X3 matrix of float)
+0:451          matrix-scale ( temp 3X3 matrix of float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:451            'inF0' ( in float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3X3 matrix of float)
+0:451          'r8' ( temp 3X3 matrix of float)
+0:451          matrix-multiply ( temp 3X3 matrix of float)
+0:451            'inFM1' ( in 3X3 matrix of float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:457  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
+0:457    Function Parameters: 
+0:457      'inF0' ( in float)
+0:457      'inF1' ( in float)
+0:457      'inFV0' ( in 4-component vector of float)
+0:457      'inFV1' ( in 4-component vector of float)
+0:457      'inFM0' ( in 4X4 matrix of float)
+0:457      'inFM1' ( in 4X4 matrix of float)
 0:?     Sequence
-0:457      Sequence
-0:457        move second child to first child ( temp float)
-0:457          'r0' ( temp float)
-0:457          component-wise multiply ( temp float)
-0:457            'inF1' ( in float)
-0:457            'inF0' ( in float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4-component vector of float)
-0:457          'r1' ( temp 4-component vector of float)
-0:457          vector-scale ( temp 4-component vector of float)
-0:457            'inF0' ( in float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4-component vector of float)
-0:457          'r2' ( temp 4-component vector of float)
-0:457          vector-scale ( temp 4-component vector of float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457            'inF0' ( in float)
-0:457      Sequence
-0:457        move second child to first child ( temp float)
-0:457          'r3' ( temp float)
-0:457          dot-product ( temp float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457            'inFV1' ( in 4-component vector of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4-component vector of float)
-0:457          'r4' ( temp 4-component vector of float)
-0:457          vector-times-matrix ( temp 4-component vector of float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4-component vector of float)
-0:457          'r5' ( temp 4-component vector of float)
-0:457          matrix-times-vector ( temp 4-component vector of float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4X4 matrix of float)
-0:457          'r6' ( temp 4X4 matrix of float)
-0:457          matrix-scale ( temp 4X4 matrix of float)
-0:457            'inF0' ( in float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4X4 matrix of float)
-0:457          'r7' ( temp 4X4 matrix of float)
-0:457          matrix-scale ( temp 4X4 matrix of float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:457            'inF0' ( in float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4X4 matrix of float)
-0:457          'r8' ( temp 4X4 matrix of float)
-0:457          matrix-multiply ( temp 4X4 matrix of float)
-0:457            'inFM1' ( in 4X4 matrix of float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:466  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
-0:466    Function Parameters: 
-0:466      'inF0' ( in float)
-0:466      'inF1' ( in float)
-0:466      'inFV2' ( in 2-component vector of float)
-0:466      'inFV3' ( in 3-component vector of float)
-0:466      'inFM2x3' ( in 2X3 matrix of float)
-0:466      'inFM3x2' ( in 3X2 matrix of float)
-0:466      'inFM3x3' ( in 3X3 matrix of float)
-0:466      'inFM3x4' ( in 3X4 matrix of float)
-0:466      'inFM2x4' ( in 2X4 matrix of float)
+0:458      Sequence
+0:458        move second child to first child ( temp float)
+0:458          'r0' ( temp float)
+0:458          component-wise multiply ( temp float)
+0:458            'inF1' ( in float)
+0:458            'inF0' ( in float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4-component vector of float)
+0:458          'r1' ( temp 4-component vector of float)
+0:458          vector-scale ( temp 4-component vector of float)
+0:458            'inF0' ( in float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4-component vector of float)
+0:458          'r2' ( temp 4-component vector of float)
+0:458          vector-scale ( temp 4-component vector of float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458            'inF0' ( in float)
+0:458      Sequence
+0:458        move second child to first child ( temp float)
+0:458          'r3' ( temp float)
+0:458          dot-product ( temp float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458            'inFV1' ( in 4-component vector of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4-component vector of float)
+0:458          'r4' ( temp 4-component vector of float)
+0:458          vector-times-matrix ( temp 4-component vector of float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4-component vector of float)
+0:458          'r5' ( temp 4-component vector of float)
+0:458          matrix-times-vector ( temp 4-component vector of float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4X4 matrix of float)
+0:458          'r6' ( temp 4X4 matrix of float)
+0:458          matrix-scale ( temp 4X4 matrix of float)
+0:458            'inF0' ( in float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4X4 matrix of float)
+0:458          'r7' ( temp 4X4 matrix of float)
+0:458          matrix-scale ( temp 4X4 matrix of float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:458            'inF0' ( in float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4X4 matrix of float)
+0:458          'r8' ( temp 4X4 matrix of float)
+0:458          matrix-multiply ( temp 4X4 matrix of float)
+0:458            'inFM1' ( in 4X4 matrix of float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:467  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
+0:467    Function Parameters: 
+0:467      'inF0' ( in float)
+0:467      'inF1' ( in float)
+0:467      'inFV2' ( in 2-component vector of float)
+0:467      'inFV3' ( in 3-component vector of float)
+0:467      'inFM2x3' ( in 2X3 matrix of float)
+0:467      'inFM3x2' ( in 3X2 matrix of float)
+0:467      'inFM3x3' ( in 3X3 matrix of float)
+0:467      'inFM3x4' ( in 3X4 matrix of float)
+0:467      'inFM2x4' ( in 2X4 matrix of float)
 0:?     Sequence
-0:467      Sequence
-0:467        move second child to first child ( temp float)
-0:467          'r00' ( temp float)
-0:467          component-wise multiply ( temp float)
-0:467            'inF1' ( in float)
-0:467            'inF0' ( in float)
 0:468      Sequence
-0:468        move second child to first child ( temp 2-component vector of float)
-0:468          'r01' ( temp 2-component vector of float)
-0:468          vector-scale ( temp 2-component vector of float)
+0:468        move second child to first child ( temp float)
+0:468          'r00' ( temp float)
+0:468          component-wise multiply ( temp float)
+0:468            'inF1' ( in float)
 0:468            'inF0' ( in float)
-0:468            'inFV2' ( in 2-component vector of float)
 0:469      Sequence
-0:469        move second child to first child ( temp 3-component vector of float)
-0:469          'r02' ( temp 3-component vector of float)
-0:469          vector-scale ( temp 3-component vector of float)
+0:469        move second child to first child ( temp 2-component vector of float)
+0:469          'r01' ( temp 2-component vector of float)
+0:469          vector-scale ( temp 2-component vector of float)
 0:469            'inF0' ( in float)
-0:469            'inFV3' ( in 3-component vector of float)
+0:469            'inFV2' ( in 2-component vector of float)
 0:470      Sequence
-0:470        move second child to first child ( temp 2-component vector of float)
-0:470          'r03' ( temp 2-component vector of float)
-0:470          vector-scale ( temp 2-component vector of float)
-0:470            'inFV2' ( in 2-component vector of float)
+0:470        move second child to first child ( temp 3-component vector of float)
+0:470          'r02' ( temp 3-component vector of float)
+0:470          vector-scale ( temp 3-component vector of float)
 0:470            'inF0' ( in float)
+0:470            'inFV3' ( in 3-component vector of float)
 0:471      Sequence
-0:471        move second child to first child ( temp 3-component vector of float)
-0:471          'r04' ( temp 3-component vector of float)
-0:471          vector-scale ( temp 3-component vector of float)
-0:471            'inFV3' ( in 3-component vector of float)
+0:471        move second child to first child ( temp 2-component vector of float)
+0:471          'r03' ( temp 2-component vector of float)
+0:471          vector-scale ( temp 2-component vector of float)
+0:471            'inFV2' ( in 2-component vector of float)
 0:471            'inF0' ( in float)
 0:472      Sequence
-0:472        move second child to first child ( temp float)
-0:472          'r05' ( temp float)
-0:472          dot-product ( temp float)
-0:472            'inFV2' ( in 2-component vector of float)
-0:472            'inFV2' ( in 2-component vector of float)
+0:472        move second child to first child ( temp 3-component vector of float)
+0:472          'r04' ( temp 3-component vector of float)
+0:472          vector-scale ( temp 3-component vector of float)
+0:472            'inFV3' ( in 3-component vector of float)
+0:472            'inF0' ( in float)
 0:473      Sequence
 0:473        move second child to first child ( temp float)
-0:473          'r06' ( temp float)
+0:473          'r05' ( temp float)
 0:473          dot-product ( temp float)
-0:473            'inFV3' ( in 3-component vector of float)
-0:473            'inFV3' ( in 3-component vector of float)
+0:473            'inFV2' ( in 2-component vector of float)
+0:473            'inFV2' ( in 2-component vector of float)
 0:474      Sequence
-0:474        move second child to first child ( temp 3-component vector of float)
-0:474          'r07' ( temp 3-component vector of float)
-0:474          matrix-times-vector ( temp 3-component vector of float)
-0:474            'inFM2x3' ( in 2X3 matrix of float)
-0:474            'inFV2' ( in 2-component vector of float)
+0:474        move second child to first child ( temp float)
+0:474          'r06' ( temp float)
+0:474          dot-product ( temp float)
+0:474            'inFV3' ( in 3-component vector of float)
+0:474            'inFV3' ( in 3-component vector of float)
 0:475      Sequence
-0:475        move second child to first child ( temp 2-component vector of float)
-0:475          'r08' ( temp 2-component vector of float)
-0:475          matrix-times-vector ( temp 2-component vector of float)
-0:475            'inFM3x2' ( in 3X2 matrix of float)
-0:475            'inFV3' ( in 3-component vector of float)
+0:475        move second child to first child ( temp 3-component vector of float)
+0:475          'r07' ( temp 3-component vector of float)
+0:475          matrix-times-vector ( temp 3-component vector of float)
+0:475            'inFM2x3' ( in 2X3 matrix of float)
+0:475            'inFV2' ( in 2-component vector of float)
 0:476      Sequence
 0:476        move second child to first child ( temp 2-component vector of float)
-0:476          'r09' ( temp 2-component vector of float)
-0:476          vector-times-matrix ( temp 2-component vector of float)
+0:476          'r08' ( temp 2-component vector of float)
+0:476          matrix-times-vector ( temp 2-component vector of float)
+0:476            'inFM3x2' ( in 3X2 matrix of float)
 0:476            'inFV3' ( in 3-component vector of float)
-0:476            'inFM2x3' ( in 2X3 matrix of float)
 0:477      Sequence
-0:477        move second child to first child ( temp 3-component vector of float)
-0:477          'r10' ( temp 3-component vector of float)
-0:477          vector-times-matrix ( temp 3-component vector of float)
-0:477            'inFV2' ( in 2-component vector of float)
-0:477            'inFM3x2' ( in 3X2 matrix of float)
+0:477        move second child to first child ( temp 2-component vector of float)
+0:477          'r09' ( temp 2-component vector of float)
+0:477          vector-times-matrix ( temp 2-component vector of float)
+0:477            'inFV3' ( in 3-component vector of float)
+0:477            'inFM2x3' ( in 2X3 matrix of float)
 0:478      Sequence
-0:478        move second child to first child ( temp 2X3 matrix of float)
-0:478          'r11' ( temp 2X3 matrix of float)
-0:478          matrix-scale ( temp 2X3 matrix of float)
-0:478            'inF0' ( in float)
-0:478            'inFM2x3' ( in 2X3 matrix of float)
+0:478        move second child to first child ( temp 3-component vector of float)
+0:478          'r10' ( temp 3-component vector of float)
+0:478          vector-times-matrix ( temp 3-component vector of float)
+0:478            'inFV2' ( in 2-component vector of float)
+0:478            'inFM3x2' ( in 3X2 matrix of float)
 0:479      Sequence
-0:479        move second child to first child ( temp 3X2 matrix of float)
-0:479          'r12' ( temp 3X2 matrix of float)
-0:479          matrix-scale ( temp 3X2 matrix of float)
+0:479        move second child to first child ( temp 2X3 matrix of float)
+0:479          'r11' ( temp 2X3 matrix of float)
+0:479          matrix-scale ( temp 2X3 matrix of float)
 0:479            'inF0' ( in float)
-0:479            'inFM3x2' ( in 3X2 matrix of float)
+0:479            'inFM2x3' ( in 2X3 matrix of float)
 0:480      Sequence
-0:480        move second child to first child ( temp 2X2 matrix of float)
-0:480          'r13' ( temp 2X2 matrix of float)
-0:480          matrix-multiply ( temp 2X2 matrix of float)
+0:480        move second child to first child ( temp 3X2 matrix of float)
+0:480          'r12' ( temp 3X2 matrix of float)
+0:480          matrix-scale ( temp 3X2 matrix of float)
+0:480            'inF0' ( in float)
 0:480            'inFM3x2' ( in 3X2 matrix of float)
-0:480            'inFM2x3' ( in 2X3 matrix of float)
 0:481      Sequence
-0:481        move second child to first child ( temp 2X3 matrix of float)
-0:481          'r14' ( temp 2X3 matrix of float)
-0:481          matrix-multiply ( temp 2X3 matrix of float)
-0:481            'inFM3x3' ( in 3X3 matrix of float)
+0:481        move second child to first child ( temp 2X2 matrix of float)
+0:481          'r13' ( temp 2X2 matrix of float)
+0:481          matrix-multiply ( temp 2X2 matrix of float)
+0:481            'inFM3x2' ( in 3X2 matrix of float)
 0:481            'inFM2x3' ( in 2X3 matrix of float)
 0:482      Sequence
-0:482        move second child to first child ( temp 2X4 matrix of float)
-0:482          'r15' ( temp 2X4 matrix of float)
-0:482          matrix-multiply ( temp 2X4 matrix of float)
-0:482            'inFM3x4' ( in 3X4 matrix of float)
+0:482        move second child to first child ( temp 2X3 matrix of float)
+0:482          'r14' ( temp 2X3 matrix of float)
+0:482          matrix-multiply ( temp 2X3 matrix of float)
+0:482            'inFM3x3' ( in 3X3 matrix of float)
 0:482            'inFM2x3' ( in 2X3 matrix of float)
 0:483      Sequence
-0:483        move second child to first child ( temp 3X4 matrix of float)
-0:483          'r16' ( temp 3X4 matrix of float)
-0:483          matrix-multiply ( temp 3X4 matrix of float)
-0:483            'inFM2x4' ( in 2X4 matrix of float)
-0:483            'inFM3x2' ( in 3X2 matrix of float)
-0:489  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
-0:489    Function Parameters: 
+0:483        move second child to first child ( temp 2X4 matrix of float)
+0:483          'r15' ( temp 2X4 matrix of float)
+0:483          matrix-multiply ( temp 2X4 matrix of float)
+0:483            'inFM3x4' ( in 3X4 matrix of float)
+0:483            'inFM2x3' ( in 2X3 matrix of float)
+0:484      Sequence
+0:484        move second child to first child ( temp 3X4 matrix of float)
+0:484          'r16' ( temp 3X4 matrix of float)
+0:484          matrix-multiply ( temp 3X4 matrix of float)
+0:484            'inFM2x4' ( in 2X4 matrix of float)
+0:484            'inFM3x2' ( in 3X2 matrix of float)
+0:490  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:490    Function Parameters: 
 0:?     Sequence
-0:491      move second child to first child ( temp 4-component vector of float)
-0:491        color: direct index for structure ( temp 4-component vector of float)
-0:491          'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:491          Constant:
-0:491            0 (const int)
-0:491        Constant:
-0:491          1.000000
-0:491          1.000000
-0:491          1.000000
-0:491          1.000000
-0:492      Branch: Return with expression
-0:492        'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:489  Function Definition: main( ( temp void)
-0:489    Function Parameters: 
+0:492      move second child to first child ( temp 4-component vector of float)
+0:492        color: direct index for structure ( temp 4-component vector of float)
+0:492          'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:492          Constant:
+0:492            0 (const int)
+0:492        Constant:
+0:492          1.000000
+0:492          1.000000
+0:492          1.000000
+0:492          1.000000
+0:493      Branch: Return with expression
+0:493        'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:490  Function Definition: main( ( temp void)
+0:490    Function Parameters: 
 0:?     Sequence
-0:489      Sequence
-0:489        move second child to first child ( temp 4-component vector of float)
+0:490      Sequence
+0:490        move second child to first child ( temp 4-component vector of float)
 0:?           '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
-0:489          color: direct index for structure ( temp 4-component vector of float)
-0:489            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
-0:489            Constant:
-0:489              0 (const int)
+0:490          color: direct index for structure ( temp 4-component vector of float)
+0:490            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:490            Constant:
+0:490              0 (const int)
 0:?   Linker Objects
 0:?     'gs_ua' ( shared uint)
 0:?     'gs_ub' ( shared uint)
@@ -5645,14 +5659,14 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 1836
+// Generated by (magic number): 80008
+// Id's are bound by 1839
 
                               Capability Shader
                               Capability DerivativeControl
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 1817
+                              EntryPoint Fragment 4  "main" 1820
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -5759,416 +5773,417 @@
                               Name 235  "r030"
                               Name 238  "r031"
                               Name 241  "r033"
-                              Name 245  "r034"
-                              Name 248  "r036"
-                              Name 251  "r037"
-                              Name 254  "r038"
-                              Name 257  "r039"
-                              Name 261  "r039a"
-                              Name 266  "r040"
-                              Name 269  "r041"
-                              Name 274  "r042"
-                              Name 277  "r043"
-                              Name 281  "r044"
-                              Name 285  "r045"
-                              Name 289  "r046"
-                              Name 292  "r047"
-                              Name 296  "r048"
-                              Name 300  "r049"
-                              Name 303  "r050"
-                              Name 306  "r051"
-                              Name 309  "r052"
-                              Name 312  "r053"
-                              Name 319  "r055"
-                              Name 322  "r056"
-                              Name 327  "r057"
-                              Name 330  "r058"
-                              Name 334  "r059"
-                              Name 337  "r060"
-                              Name 340  "r061"
-                              Name 347  "r000"
-                              Name 353  "r001"
-                              Name 356  "r002"
-                              Name 359  "r003"
-                              Name 363  "r004"
-                              Name 368  "r005"
-                              Name 371  "r006"
-                              Name 374  "r007"
-                              Name 377  "r009"
-                              Name 380  "r010"
-                              Name 384  "r011"
-                              Name 387  "r012"
-                              Name 406  "r013"
-                              Name 409  "r015"
-                              Name 412  "r016"
-                              Name 416  "r017"
-                              Name 419  "r018"
-                              Name 422  "r019"
-                              Name 425  "r020"
-                              Name 428  "r021"
-                              Name 431  "r022"
-                              Name 434  "r023"
-                              Name 437  "r026"
-                              Name 441  "r027"
-                              Name 445  "r028"
-                              Name 448  "r029"
-                              Name 451  "r030"
-                              Name 456  "r031"
-                              Name 461  "r032"
-                              Name 463  "r033"
-                              Name 466  "r035"
-                              Name 470  "r036"
-                              Name 473  "r038"
-                              Name 477  "r039"
-                              Name 480  "r040"
-                              Name 483  "r041"
-                              Name 487  "r039a"
-                              Name 492  "r042"
-                              Name 495  "r043"
-                              Name 498  "r044"
-                              Name 502  "r045"
-                              Name 505  "r046"
-                              Name 509  "r047"
-                              Name 513  "r048"
-                              Name 516  "r049"
-                              Name 520  "r050"
-                              Name 523  "r051"
-                              Name 527  "r052"
-                              Name 531  "r053"
-                              Name 536  "r054"
-                              Name 541  "r055"
-                              Name 544  "r056"
-                              Name 547  "r057"
-                              Name 552  "r058"
-                              Name 555  "r059"
-                              Name 562  "r060"
-                              Name 565  "r061"
-                              Name 570  "r062"
-                              Name 573  "r063"
-                              Name 577  "r064"
-                              Name 580  "r065"
-                              Name 583  "r066"
-                              Name 589  "r000"
-                              Name 595  "r001"
-                              Name 598  "r002"
-                              Name 601  "r003"
-                              Name 605  "r004"
-                              Name 610  "r005"
-                              Name 613  "r006"
-                              Name 616  "r007"
-                              Name 619  "r009"
-                              Name 622  "r010"
-                              Name 626  "r011"
-                              Name 629  "r012"
-                              Name 647  "r013"
-                              Name 650  "r014"
-                              Name 653  "r015"
-                              Name 658  "r016"
-                              Name 662  "r017"
-                              Name 665  "r018"
-                              Name 668  "r019"
-                              Name 671  "r020"
-                              Name 674  "r021"
-                              Name 677  "r022"
-                              Name 680  "r023"
-                              Name 683  "r024"
-                              Name 687  "r025"
-                              Name 691  "r029"
-                              Name 694  "r030"
-                              Name 697  "r031"
-                              Name 702  "r032"
-                              Name 706  "r033"
-                              Name 708  "r034"
-                              Name 711  "r036"
-                              Name 715  "r037"
-                              Name 718  "r039"
-                              Name 722  "r040"
-                              Name 725  "r041"
-                              Name 728  "r042"
-                              Name 732  "r039a"
-                              Name 737  "r039b"
-                              Name 743  "r043"
-                              Name 746  "r044"
-                              Name 749  "r045"
-                              Name 753  "r046"
-                              Name 756  "r047"
-                              Name 760  "r048"
-                              Name 764  "r049"
-                              Name 767  "r050"
-                              Name 771  "r051"
-                              Name 774  "r052"
-                              Name 778  "r053"
-                              Name 782  "r054"
-                              Name 786  "r055"
-                              Name 789  "r056"
-                              Name 792  "r057"
-                              Name 795  "r058"
-                              Name 800  "r059"
-                              Name 803  "r060"
-                              Name 810  "r061"
-                              Name 813  "r062"
-                              Name 818  "r063"
-                              Name 821  "r064"
-                              Name 825  "r065"
-                              Name 828  "r066"
-                              Name 831  "r067"
-                              Name 838  "r000"
-                              Name 844  "r001"
-                              Name 847  "r002"
-                              Name 850  "r003"
-                              Name 854  "r004"
-                              Name 859  "r005"
-                              Name 862  "r006"
-                              Name 865  "r007"
-                              Name 868  "r009"
-                              Name 871  "r010"
-                              Name 875  "r011"
-                              Name 878  "r012"
-                              Name 896  "r013"
-                              Name 899  "r014"
-                              Name 902  "r015"
-                              Name 905  "r016"
-                              Name 908  "r017"
-                              Name 911  "r018"
-                              Name 914  "r019"
-                              Name 917  "r020"
-                              Name 920  "r021"
-                              Name 923  "r022"
-                              Name 926  "r023"
-                              Name 930  "r024"
-                              Name 934  "r025"
-                              Name 945  "r029"
-                              Name 948  "r030"
-                              Name 951  "r031"
-                              Name 956  "r032"
-                              Name 961  "r033"
-                              Name 963  "r034"
-                              Name 966  "r036"
-                              Name 970  "r037"
-                              Name 973  "r039"
-                              Name 977  "r040"
-                              Name 980  "r041"
-                              Name 983  "r042"
-                              Name 987  "r039a"
-                              Name 992  "r043"
-                              Name 995  "r044"
-                              Name 998  "r045"
-                              Name 1002  "r046"
-                              Name 1005  "r047"
-                              Name 1009  "r048"
-                              Name 1013  "r049"
-                              Name 1016  "r050"
-                              Name 1020  "r051"
-                              Name 1023  "r052"
-                              Name 1027  "r053"
-                              Name 1031  "r054"
-                              Name 1035  "r055"
-                              Name 1038  "r056"
-                              Name 1041  "r057"
-                              Name 1044  "r058"
-                              Name 1049  "r059"
-                              Name 1052  "r060"
-                              Name 1059  "r061"
-                              Name 1062  "r062"
-                              Name 1067  "r063"
-                              Name 1070  "r064"
-                              Name 1074  "r065"
-                              Name 1077  "r066"
-                              Name 1080  "r067"
-                              Name 1087  "r000"
-                              Name 1092  "r001"
-                              Name 1097  "r003"
-                              Name 1101  "r004"
-                              Name 1104  "r005"
-                              Name 1107  "r006"
-                              Name 1111  "r007"
-                              Name 1121  "r008"
-                              Name 1126  "r009"
-                              Name 1129  "r010"
-                              Name 1132  "r011"
-                              Name 1135  "r012"
-                              Name 1138  "r013"
-                              Name 1141  "r014"
-                              Name 1144  "r015"
-                              Name 1147  "r016"
-                              Name 1150  "r017"
-                              Name 1153  "r018"
-                              Name 1156  "r019"
-                              Name 1159  "R020"
-                              Name 1162  "r021"
-                              Name 1165  "r022"
-                              Name 1175  "r023"
-                              Name 1178  "r025"
-                              Name 1181  "r026"
-                              Name 1185  "r026a"
-                              Name 1190  "r027"
-                              Name 1193  "r028"
-                              Name 1197  "r029"
-                              Name 1200  "r030"
-                              Name 1204  "r031"
-                              Name 1208  "r032"
-                              Name 1212  "r033"
-                              Name 1215  "r034"
-                              Name 1218  "r035"
-                              Name 1221  "r036"
-                              Name 1226  "r037"
-                              Name 1229  "r038"
-                              Name 1236  "r039"
-                              Name 1239  "r049"
-                              Name 1244  "r041"
-                              Name 1247  "r042"
-                              Name 1251  "r043"
-                              Name 1254  "r044"
-                              Name 1259  "r046"
-                              Name 1266  "r000"
-                              Name 1271  "r001"
-                              Name 1276  "r003"
-                              Name 1280  "r004"
-                              Name 1283  "r005"
-                              Name 1286  "r006"
-                              Name 1290  "r007"
-                              Name 1300  "r008"
-                              Name 1305  "r009"
-                              Name 1308  "r010"
-                              Name 1311  "r011"
-                              Name 1314  "r012"
-                              Name 1317  "r013"
-                              Name 1320  "r014"
-                              Name 1323  "r015"
-                              Name 1326  "r016"
-                              Name 1329  "r017"
-                              Name 1332  "r018"
-                              Name 1335  "r019"
-                              Name 1338  "R020"
-                              Name 1341  "r021"
-                              Name 1344  "r022"
-                              Name 1357  "r023"
-                              Name 1360  "r025"
-                              Name 1363  "r026"
-                              Name 1367  "r026a"
-                              Name 1372  "r027"
-                              Name 1375  "r028"
-                              Name 1379  "r029"
-                              Name 1382  "r030"
-                              Name 1386  "r031"
-                              Name 1390  "r032"
-                              Name 1394  "r033"
-                              Name 1397  "r034"
-                              Name 1400  "r035"
-                              Name 1403  "r036"
-                              Name 1408  "r037"
-                              Name 1411  "r038"
-                              Name 1418  "r039"
-                              Name 1421  "r049"
-                              Name 1426  "r041"
-                              Name 1429  "r042"
-                              Name 1433  "r043"
-                              Name 1436  "r044"
-                              Name 1441  "r046"
-                              Name 1448  "r000"
-                              Name 1453  "r001"
-                              Name 1458  "r003"
-                              Name 1462  "r004"
-                              Name 1465  "r005"
-                              Name 1468  "r006"
-                              Name 1472  "r007"
-                              Name 1482  "r008"
-                              Name 1487  "r009"
-                              Name 1490  "r010"
-                              Name 1493  "r011"
-                              Name 1496  "r012"
-                              Name 1499  "r013"
-                              Name 1502  "r014"
-                              Name 1505  "r015"
-                              Name 1508  "r016"
-                              Name 1511  "r017"
-                              Name 1514  "r018"
-                              Name 1517  "r019"
-                              Name 1520  "R020"
-                              Name 1523  "r021"
-                              Name 1526  "r022"
-                              Name 1542  "r023"
-                              Name 1545  "r025"
-                              Name 1548  "r026"
-                              Name 1552  "r026a"
-                              Name 1557  "r027"
-                              Name 1560  "r028"
-                              Name 1564  "r029"
-                              Name 1567  "r030"
-                              Name 1571  "r031"
-                              Name 1575  "r032"
-                              Name 1579  "r033"
-                              Name 1582  "r034"
-                              Name 1585  "r035"
-                              Name 1588  "r036"
-                              Name 1593  "r037"
-                              Name 1596  "r038"
-                              Name 1603  "r039"
-                              Name 1606  "r049"
-                              Name 1611  "r041"
-                              Name 1614  "r042"
-                              Name 1618  "r043"
-                              Name 1621  "r044"
-                              Name 1626  "r046"
-                              Name 1633  "r0"
-                              Name 1637  "r1"
-                              Name 1641  "r2"
-                              Name 1645  "r3"
-                              Name 1649  "r4"
-                              Name 1653  "r5"
-                              Name 1657  "r6"
-                              Name 1661  "r7"
-                              Name 1665  "r8"
-                              Name 1669  "r0"
-                              Name 1673  "r1"
-                              Name 1677  "r2"
-                              Name 1681  "r3"
-                              Name 1685  "r4"
-                              Name 1689  "r5"
-                              Name 1693  "r6"
-                              Name 1697  "r7"
-                              Name 1701  "r8"
-                              Name 1705  "r0"
-                              Name 1709  "r1"
-                              Name 1713  "r2"
-                              Name 1717  "r3"
-                              Name 1721  "r4"
-                              Name 1725  "r5"
-                              Name 1729  "r6"
-                              Name 1733  "r7"
-                              Name 1737  "r8"
-                              Name 1741  "r00"
-                              Name 1745  "r01"
-                              Name 1749  "r02"
-                              Name 1753  "r03"
-                              Name 1757  "r04"
-                              Name 1761  "r05"
-                              Name 1765  "r06"
-                              Name 1769  "r07"
-                              Name 1773  "r08"
-                              Name 1777  "r09"
-                              Name 1781  "r10"
-                              Name 1785  "r11"
-                              Name 1789  "r12"
-                              Name 1793  "r13"
-                              Name 1797  "r14"
-                              Name 1801  "r15"
-                              Name 1805  "r16"
-                              Name 1810  "ps_output"
-                              Name 1817  "@entryPointOutput.color"
-                              Name 1821  "gs_ua"
-                              Name 1822  "gs_ub"
-                              Name 1823  "gs_uc"
-                              Name 1825  "gs_ua2"
-                              Name 1826  "gs_ub2"
-                              Name 1827  "gs_uc2"
-                              Name 1829  "gs_ua3"
-                              Name 1830  "gs_ub3"
-                              Name 1831  "gs_uc3"
-                              Name 1833  "gs_ua4"
-                              Name 1834  "gs_ub4"
-                              Name 1835  "gs_uc4"
-                              Decorate 1817(@entryPointOutput.color) Location 0
+                              Name 245  "r033i"
+                              Name 249  "r034"
+                              Name 252  "r036"
+                              Name 255  "r037"
+                              Name 258  "r038"
+                              Name 261  "r039"
+                              Name 265  "r039a"
+                              Name 270  "r040"
+                              Name 273  "r041"
+                              Name 278  "r042"
+                              Name 281  "r043"
+                              Name 285  "r044"
+                              Name 289  "r045"
+                              Name 293  "r046"
+                              Name 296  "r047"
+                              Name 300  "r048"
+                              Name 304  "r049"
+                              Name 307  "r050"
+                              Name 310  "r051"
+                              Name 313  "r052"
+                              Name 316  "r053"
+                              Name 323  "r055"
+                              Name 326  "r056"
+                              Name 331  "r057"
+                              Name 334  "r058"
+                              Name 338  "r059"
+                              Name 341  "r060"
+                              Name 344  "r061"
+                              Name 351  "r000"
+                              Name 357  "r001"
+                              Name 360  "r002"
+                              Name 363  "r003"
+                              Name 367  "r004"
+                              Name 372  "r005"
+                              Name 375  "r006"
+                              Name 378  "r007"
+                              Name 381  "r009"
+                              Name 384  "r010"
+                              Name 388  "r011"
+                              Name 391  "r012"
+                              Name 410  "r013"
+                              Name 413  "r015"
+                              Name 416  "r016"
+                              Name 420  "r017"
+                              Name 423  "r018"
+                              Name 426  "r019"
+                              Name 429  "r020"
+                              Name 432  "r021"
+                              Name 435  "r022"
+                              Name 438  "r023"
+                              Name 441  "r026"
+                              Name 445  "r027"
+                              Name 449  "r028"
+                              Name 452  "r029"
+                              Name 455  "r030"
+                              Name 460  "r031"
+                              Name 465  "r032"
+                              Name 467  "r033"
+                              Name 470  "r035"
+                              Name 474  "r036"
+                              Name 477  "r038"
+                              Name 481  "r039"
+                              Name 484  "r040"
+                              Name 487  "r041"
+                              Name 491  "r039a"
+                              Name 496  "r042"
+                              Name 499  "r043"
+                              Name 502  "r044"
+                              Name 506  "r045"
+                              Name 509  "r046"
+                              Name 513  "r047"
+                              Name 517  "r048"
+                              Name 520  "r049"
+                              Name 524  "r050"
+                              Name 527  "r051"
+                              Name 531  "r052"
+                              Name 535  "r053"
+                              Name 539  "r054"
+                              Name 544  "r055"
+                              Name 547  "r056"
+                              Name 550  "r057"
+                              Name 555  "r058"
+                              Name 558  "r059"
+                              Name 565  "r060"
+                              Name 568  "r061"
+                              Name 573  "r062"
+                              Name 576  "r063"
+                              Name 580  "r064"
+                              Name 583  "r065"
+                              Name 586  "r066"
+                              Name 592  "r000"
+                              Name 598  "r001"
+                              Name 601  "r002"
+                              Name 604  "r003"
+                              Name 608  "r004"
+                              Name 613  "r005"
+                              Name 616  "r006"
+                              Name 619  "r007"
+                              Name 622  "r009"
+                              Name 625  "r010"
+                              Name 629  "r011"
+                              Name 632  "r012"
+                              Name 650  "r013"
+                              Name 653  "r014"
+                              Name 656  "r015"
+                              Name 661  "r016"
+                              Name 665  "r017"
+                              Name 668  "r018"
+                              Name 671  "r019"
+                              Name 674  "r020"
+                              Name 677  "r021"
+                              Name 680  "r022"
+                              Name 683  "r023"
+                              Name 686  "r024"
+                              Name 690  "r025"
+                              Name 694  "r029"
+                              Name 697  "r030"
+                              Name 700  "r031"
+                              Name 705  "r032"
+                              Name 709  "r033"
+                              Name 711  "r034"
+                              Name 714  "r036"
+                              Name 718  "r037"
+                              Name 721  "r039"
+                              Name 725  "r040"
+                              Name 728  "r041"
+                              Name 731  "r042"
+                              Name 735  "r039a"
+                              Name 740  "r039b"
+                              Name 746  "r043"
+                              Name 749  "r044"
+                              Name 752  "r045"
+                              Name 756  "r046"
+                              Name 759  "r047"
+                              Name 763  "r048"
+                              Name 767  "r049"
+                              Name 770  "r050"
+                              Name 774  "r051"
+                              Name 777  "r052"
+                              Name 781  "r053"
+                              Name 785  "r054"
+                              Name 789  "r055"
+                              Name 792  "r056"
+                              Name 795  "r057"
+                              Name 798  "r058"
+                              Name 803  "r059"
+                              Name 806  "r060"
+                              Name 813  "r061"
+                              Name 816  "r062"
+                              Name 821  "r063"
+                              Name 824  "r064"
+                              Name 828  "r065"
+                              Name 831  "r066"
+                              Name 834  "r067"
+                              Name 841  "r000"
+                              Name 847  "r001"
+                              Name 850  "r002"
+                              Name 853  "r003"
+                              Name 857  "r004"
+                              Name 862  "r005"
+                              Name 865  "r006"
+                              Name 868  "r007"
+                              Name 871  "r009"
+                              Name 874  "r010"
+                              Name 878  "r011"
+                              Name 881  "r012"
+                              Name 899  "r013"
+                              Name 902  "r014"
+                              Name 905  "r015"
+                              Name 908  "r016"
+                              Name 911  "r017"
+                              Name 914  "r018"
+                              Name 917  "r019"
+                              Name 920  "r020"
+                              Name 923  "r021"
+                              Name 926  "r022"
+                              Name 929  "r023"
+                              Name 933  "r024"
+                              Name 937  "r025"
+                              Name 948  "r029"
+                              Name 951  "r030"
+                              Name 954  "r031"
+                              Name 959  "r032"
+                              Name 964  "r033"
+                              Name 966  "r034"
+                              Name 969  "r036"
+                              Name 973  "r037"
+                              Name 976  "r039"
+                              Name 980  "r040"
+                              Name 983  "r041"
+                              Name 986  "r042"
+                              Name 990  "r039a"
+                              Name 995  "r043"
+                              Name 998  "r044"
+                              Name 1001  "r045"
+                              Name 1005  "r046"
+                              Name 1008  "r047"
+                              Name 1012  "r048"
+                              Name 1016  "r049"
+                              Name 1019  "r050"
+                              Name 1023  "r051"
+                              Name 1026  "r052"
+                              Name 1030  "r053"
+                              Name 1034  "r054"
+                              Name 1038  "r055"
+                              Name 1041  "r056"
+                              Name 1044  "r057"
+                              Name 1047  "r058"
+                              Name 1052  "r059"
+                              Name 1055  "r060"
+                              Name 1062  "r061"
+                              Name 1065  "r062"
+                              Name 1070  "r063"
+                              Name 1073  "r064"
+                              Name 1077  "r065"
+                              Name 1080  "r066"
+                              Name 1083  "r067"
+                              Name 1090  "r000"
+                              Name 1095  "r001"
+                              Name 1100  "r003"
+                              Name 1104  "r004"
+                              Name 1107  "r005"
+                              Name 1110  "r006"
+                              Name 1114  "r007"
+                              Name 1124  "r008"
+                              Name 1129  "r009"
+                              Name 1132  "r010"
+                              Name 1135  "r011"
+                              Name 1138  "r012"
+                              Name 1141  "r013"
+                              Name 1144  "r014"
+                              Name 1147  "r015"
+                              Name 1150  "r016"
+                              Name 1153  "r017"
+                              Name 1156  "r018"
+                              Name 1159  "r019"
+                              Name 1162  "R020"
+                              Name 1165  "r021"
+                              Name 1168  "r022"
+                              Name 1178  "r023"
+                              Name 1181  "r025"
+                              Name 1184  "r026"
+                              Name 1188  "r026a"
+                              Name 1193  "r027"
+                              Name 1196  "r028"
+                              Name 1200  "r029"
+                              Name 1203  "r030"
+                              Name 1207  "r031"
+                              Name 1211  "r032"
+                              Name 1215  "r033"
+                              Name 1218  "r034"
+                              Name 1221  "r035"
+                              Name 1224  "r036"
+                              Name 1229  "r037"
+                              Name 1232  "r038"
+                              Name 1239  "r039"
+                              Name 1242  "r049"
+                              Name 1247  "r041"
+                              Name 1250  "r042"
+                              Name 1254  "r043"
+                              Name 1257  "r044"
+                              Name 1262  "r046"
+                              Name 1269  "r000"
+                              Name 1274  "r001"
+                              Name 1279  "r003"
+                              Name 1283  "r004"
+                              Name 1286  "r005"
+                              Name 1289  "r006"
+                              Name 1293  "r007"
+                              Name 1303  "r008"
+                              Name 1308  "r009"
+                              Name 1311  "r010"
+                              Name 1314  "r011"
+                              Name 1317  "r012"
+                              Name 1320  "r013"
+                              Name 1323  "r014"
+                              Name 1326  "r015"
+                              Name 1329  "r016"
+                              Name 1332  "r017"
+                              Name 1335  "r018"
+                              Name 1338  "r019"
+                              Name 1341  "R020"
+                              Name 1344  "r021"
+                              Name 1347  "r022"
+                              Name 1360  "r023"
+                              Name 1363  "r025"
+                              Name 1366  "r026"
+                              Name 1370  "r026a"
+                              Name 1375  "r027"
+                              Name 1378  "r028"
+                              Name 1382  "r029"
+                              Name 1385  "r030"
+                              Name 1389  "r031"
+                              Name 1393  "r032"
+                              Name 1397  "r033"
+                              Name 1400  "r034"
+                              Name 1403  "r035"
+                              Name 1406  "r036"
+                              Name 1411  "r037"
+                              Name 1414  "r038"
+                              Name 1421  "r039"
+                              Name 1424  "r049"
+                              Name 1429  "r041"
+                              Name 1432  "r042"
+                              Name 1436  "r043"
+                              Name 1439  "r044"
+                              Name 1444  "r046"
+                              Name 1451  "r000"
+                              Name 1456  "r001"
+                              Name 1461  "r003"
+                              Name 1465  "r004"
+                              Name 1468  "r005"
+                              Name 1471  "r006"
+                              Name 1475  "r007"
+                              Name 1485  "r008"
+                              Name 1490  "r009"
+                              Name 1493  "r010"
+                              Name 1496  "r011"
+                              Name 1499  "r012"
+                              Name 1502  "r013"
+                              Name 1505  "r014"
+                              Name 1508  "r015"
+                              Name 1511  "r016"
+                              Name 1514  "r017"
+                              Name 1517  "r018"
+                              Name 1520  "r019"
+                              Name 1523  "R020"
+                              Name 1526  "r021"
+                              Name 1529  "r022"
+                              Name 1545  "r023"
+                              Name 1548  "r025"
+                              Name 1551  "r026"
+                              Name 1555  "r026a"
+                              Name 1560  "r027"
+                              Name 1563  "r028"
+                              Name 1567  "r029"
+                              Name 1570  "r030"
+                              Name 1574  "r031"
+                              Name 1578  "r032"
+                              Name 1582  "r033"
+                              Name 1585  "r034"
+                              Name 1588  "r035"
+                              Name 1591  "r036"
+                              Name 1596  "r037"
+                              Name 1599  "r038"
+                              Name 1606  "r039"
+                              Name 1609  "r049"
+                              Name 1614  "r041"
+                              Name 1617  "r042"
+                              Name 1621  "r043"
+                              Name 1624  "r044"
+                              Name 1629  "r046"
+                              Name 1636  "r0"
+                              Name 1640  "r1"
+                              Name 1644  "r2"
+                              Name 1648  "r3"
+                              Name 1652  "r4"
+                              Name 1656  "r5"
+                              Name 1660  "r6"
+                              Name 1664  "r7"
+                              Name 1668  "r8"
+                              Name 1672  "r0"
+                              Name 1676  "r1"
+                              Name 1680  "r2"
+                              Name 1684  "r3"
+                              Name 1688  "r4"
+                              Name 1692  "r5"
+                              Name 1696  "r6"
+                              Name 1700  "r7"
+                              Name 1704  "r8"
+                              Name 1708  "r0"
+                              Name 1712  "r1"
+                              Name 1716  "r2"
+                              Name 1720  "r3"
+                              Name 1724  "r4"
+                              Name 1728  "r5"
+                              Name 1732  "r6"
+                              Name 1736  "r7"
+                              Name 1740  "r8"
+                              Name 1744  "r00"
+                              Name 1748  "r01"
+                              Name 1752  "r02"
+                              Name 1756  "r03"
+                              Name 1760  "r04"
+                              Name 1764  "r05"
+                              Name 1768  "r06"
+                              Name 1772  "r07"
+                              Name 1776  "r08"
+                              Name 1780  "r09"
+                              Name 1784  "r10"
+                              Name 1788  "r11"
+                              Name 1792  "r12"
+                              Name 1796  "r13"
+                              Name 1800  "r14"
+                              Name 1804  "r15"
+                              Name 1808  "r16"
+                              Name 1813  "ps_output"
+                              Name 1820  "@entryPointOutput.color"
+                              Name 1824  "gs_ua"
+                              Name 1825  "gs_ub"
+                              Name 1826  "gs_uc"
+                              Name 1828  "gs_ua2"
+                              Name 1829  "gs_ub2"
+                              Name 1830  "gs_uc2"
+                              Name 1832  "gs_ua3"
+                              Name 1833  "gs_ub3"
+                              Name 1834  "gs_uc3"
+                              Name 1836  "gs_ua4"
+                              Name 1837  "gs_ub4"
+                              Name 1838  "gs_uc4"
+                              Decorate 1820(@entryPointOutput.color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -6222,91 +6237,91 @@
              141:    6(float) Constant 0
              187:     10(int) Constant 0
              199:     10(int) Constant 7
-             272:    6(float) Constant 1050288283
-             293:    6(float) Constant 1065353216
-             297:     10(int) Constant 2
-             349:             TypeVector 137(bool) 2
-             350:   26(fvec2) ConstantComposite 141 141
-             366:             TypeVector 10(int) 2
-             367:             TypePointer Function 366(ivec2)
-             399:      8(int) Constant 0
-             400:   28(ivec2) ConstantComposite 399 399
-             413:     10(int) Constant 3
-             414:  366(ivec2) ConstantComposite 199 413
-             457:      8(int) Constant 7
-             458:      8(int) Constant 8
-             459:   28(ivec2) ConstantComposite 457 458
-             476:             TypePointer Function 349(bvec2)
-             534:    6(float) Constant 1073741824
-             537:      8(int) Constant 1
-             538:      8(int) Constant 2
-             539:   28(ivec2) ConstantComposite 537 538
-             586:   26(fvec2) ConstantComposite 293 534
-             591:             TypeVector 137(bool) 3
-             592:   38(fvec3) ConstantComposite 141 141 141
-             608:             TypeVector 10(int) 3
-             609:             TypePointer Function 608(ivec3)
-             641:   40(ivec3) ConstantComposite 399 399 399
-             654:      8(int) Constant 3
-             655:      8(int) Constant 5
-             656:   40(ivec3) ConstantComposite 457 654 655
-             703:      8(int) Constant 4
-             704:   40(ivec3) ConstantComposite 538 654 703
-             721:             TypePointer Function 591(bvec3)
-             740:    6(float) Constant 1050253722
-             787:   40(ivec3) ConstantComposite 537 538 654
-             834:    6(float) Constant 1077936128
-             835:   38(fvec3) ConstantComposite 293 534 834
-             840:             TypeVector 137(bool) 4
-             841:   50(fvec4) ConstantComposite 141 141 141 141
-             857:             TypeVector 10(int) 4
-             858:             TypePointer Function 857(ivec4)
-             890:   52(ivec4) ConstantComposite 399 399 399 399
-             903:   52(ivec4) ConstantComposite 457 654 655 538
-             957:      8(int) Constant 9
-             958:      8(int) Constant 10
-             959:   52(ivec4) ConstantComposite 457 458 957 958
-             976:             TypePointer Function 840(bvec4)
-            1036:   52(ivec4) ConstantComposite 537 538 654 703
-            1083:    6(float) Constant 1082130432
-            1084:   50(fvec4) ConstantComposite 293 534 834 1083
-            1089:             TypeMatrix 349(bvec2) 2
-            1115:          62 ConstantComposite 350 350
-            1262:   26(fvec2) ConstantComposite 534 534
-            1263:          62 ConstantComposite 1262 1262
-            1268:             TypeMatrix 591(bvec3) 3
-            1294:          70 ConstantComposite 592 592 592
-            1444:   38(fvec3) ConstantComposite 834 834 834
-            1445:          70 ConstantComposite 1444 1444 1444
-            1450:             TypeMatrix 840(bvec4) 4
-            1476:          78 ConstantComposite 841 841 841 841
-            1629:   50(fvec4) ConstantComposite 1083 1083 1083 1083
-            1630:          78 ConstantComposite 1629 1629 1629 1629
-            1809:             TypePointer Function 133(PS_OUTPUT)
-            1811:   50(fvec4) ConstantComposite 293 293 293 293
-            1816:             TypePointer Output 50(fvec4)
-1817(@entryPointOutput.color):   1816(ptr) Variable Output
-            1820:             TypePointer Workgroup 8(int)
-     1821(gs_ua):   1820(ptr) Variable Workgroup
-     1822(gs_ub):   1820(ptr) Variable Workgroup
-     1823(gs_uc):   1820(ptr) Variable Workgroup
-            1824:             TypePointer Workgroup 28(ivec2)
-    1825(gs_ua2):   1824(ptr) Variable Workgroup
-    1826(gs_ub2):   1824(ptr) Variable Workgroup
-    1827(gs_uc2):   1824(ptr) Variable Workgroup
-            1828:             TypePointer Workgroup 40(ivec3)
-    1829(gs_ua3):   1828(ptr) Variable Workgroup
-    1830(gs_ub3):   1828(ptr) Variable Workgroup
-    1831(gs_uc3):   1828(ptr) Variable Workgroup
-            1832:             TypePointer Workgroup 52(ivec4)
-    1833(gs_ua4):   1832(ptr) Variable Workgroup
-    1834(gs_ub4):   1832(ptr) Variable Workgroup
-    1835(gs_uc4):   1832(ptr) Variable Workgroup
+             247:    6(float) Constant 1073741824
+             276:    6(float) Constant 1050288283
+             297:    6(float) Constant 1065353216
+             301:     10(int) Constant 2
+             353:             TypeVector 137(bool) 2
+             354:   26(fvec2) ConstantComposite 141 141
+             370:             TypeVector 10(int) 2
+             371:             TypePointer Function 370(ivec2)
+             403:      8(int) Constant 0
+             404:   28(ivec2) ConstantComposite 403 403
+             417:     10(int) Constant 3
+             418:  370(ivec2) ConstantComposite 199 417
+             461:      8(int) Constant 7
+             462:      8(int) Constant 8
+             463:   28(ivec2) ConstantComposite 461 462
+             480:             TypePointer Function 353(bvec2)
+             540:      8(int) Constant 1
+             541:      8(int) Constant 2
+             542:   28(ivec2) ConstantComposite 540 541
+             589:   26(fvec2) ConstantComposite 297 247
+             594:             TypeVector 137(bool) 3
+             595:   38(fvec3) ConstantComposite 141 141 141
+             611:             TypeVector 10(int) 3
+             612:             TypePointer Function 611(ivec3)
+             644:   40(ivec3) ConstantComposite 403 403 403
+             657:      8(int) Constant 3
+             658:      8(int) Constant 5
+             659:   40(ivec3) ConstantComposite 461 657 658
+             706:      8(int) Constant 4
+             707:   40(ivec3) ConstantComposite 541 657 706
+             724:             TypePointer Function 594(bvec3)
+             743:    6(float) Constant 1050253722
+             790:   40(ivec3) ConstantComposite 540 541 657
+             837:    6(float) Constant 1077936128
+             838:   38(fvec3) ConstantComposite 297 247 837
+             843:             TypeVector 137(bool) 4
+             844:   50(fvec4) ConstantComposite 141 141 141 141
+             860:             TypeVector 10(int) 4
+             861:             TypePointer Function 860(ivec4)
+             893:   52(ivec4) ConstantComposite 403 403 403 403
+             906:   52(ivec4) ConstantComposite 461 657 658 541
+             960:      8(int) Constant 9
+             961:      8(int) Constant 10
+             962:   52(ivec4) ConstantComposite 461 462 960 961
+             979:             TypePointer Function 843(bvec4)
+            1039:   52(ivec4) ConstantComposite 540 541 657 706
+            1086:    6(float) Constant 1082130432
+            1087:   50(fvec4) ConstantComposite 297 247 837 1086
+            1092:             TypeMatrix 353(bvec2) 2
+            1118:          62 ConstantComposite 354 354
+            1265:   26(fvec2) ConstantComposite 247 247
+            1266:          62 ConstantComposite 1265 1265
+            1271:             TypeMatrix 594(bvec3) 3
+            1297:          70 ConstantComposite 595 595 595
+            1447:   38(fvec3) ConstantComposite 837 837 837
+            1448:          70 ConstantComposite 1447 1447 1447
+            1453:             TypeMatrix 843(bvec4) 4
+            1479:          78 ConstantComposite 844 844 844 844
+            1632:   50(fvec4) ConstantComposite 1086 1086 1086 1086
+            1633:          78 ConstantComposite 1632 1632 1632 1632
+            1812:             TypePointer Function 133(PS_OUTPUT)
+            1814:   50(fvec4) ConstantComposite 297 297 297 297
+            1819:             TypePointer Output 50(fvec4)
+1820(@entryPointOutput.color):   1819(ptr) Variable Output
+            1823:             TypePointer Workgroup 8(int)
+     1824(gs_ua):   1823(ptr) Variable Workgroup
+     1825(gs_ub):   1823(ptr) Variable Workgroup
+     1826(gs_uc):   1823(ptr) Variable Workgroup
+            1827:             TypePointer Workgroup 28(ivec2)
+    1828(gs_ua2):   1827(ptr) Variable Workgroup
+    1829(gs_ub2):   1827(ptr) Variable Workgroup
+    1830(gs_uc2):   1827(ptr) Variable Workgroup
+            1831:             TypePointer Workgroup 40(ivec3)
+    1832(gs_ua3):   1831(ptr) Variable Workgroup
+    1833(gs_ub3):   1831(ptr) Variable Workgroup
+    1834(gs_uc3):   1831(ptr) Variable Workgroup
+            1835:             TypePointer Workgroup 52(ivec4)
+    1836(gs_ua4):   1835(ptr) Variable Workgroup
+    1837(gs_ub4):   1835(ptr) Variable Workgroup
+    1838(gs_uc4):   1835(ptr) Variable Workgroup
          4(main):           2 Function None 3
                5:             Label
-            1818:133(PS_OUTPUT) FunctionCall 135(@main()
-            1819:   50(fvec4) CompositeExtract 1818 0
-                              Store 1817(@entryPointOutput.color) 1819
+            1821:133(PS_OUTPUT) FunctionCall 135(@main()
+            1822:   50(fvec4) CompositeExtract 1821 0
+                              Store 1820(@entryPointOutput.color) 1822
                               Return
                               FunctionEnd
 18(PixelShaderFunctionS(f1;f1;f1;u1;i1;):    6(float) Function None 12
@@ -6345,33 +6360,34 @@
        235(r030):      9(ptr) Variable Function
        238(r031):      7(ptr) Variable Function
        241(r033):      7(ptr) Variable Function
-       245(r034):      7(ptr) Variable Function
-       248(r036):      7(ptr) Variable Function
-       251(r037):    138(ptr) Variable Function
-       254(r038):    138(ptr) Variable Function
-       257(r039):      7(ptr) Variable Function
-      261(r039a):      7(ptr) Variable Function
-       266(r040):      7(ptr) Variable Function
-       269(r041):      7(ptr) Variable Function
-       274(r042):      7(ptr) Variable Function
-       277(r043):      7(ptr) Variable Function
-       281(r044):      7(ptr) Variable Function
-       285(r045):      7(ptr) Variable Function
-       289(r046):      7(ptr) Variable Function
-       292(r047):      7(ptr) Variable Function
-       296(r048):      9(ptr) Variable Function
-       300(r049):      7(ptr) Variable Function
-       303(r050):      7(ptr) Variable Function
-       306(r051):      7(ptr) Variable Function
-       309(r052):      7(ptr) Variable Function
-       312(r053):      7(ptr) Variable Function
-       319(r055):      7(ptr) Variable Function
-       322(r056):      7(ptr) Variable Function
-       327(r057):      7(ptr) Variable Function
-       330(r058):      7(ptr) Variable Function
-       334(r059):      7(ptr) Variable Function
-       337(r060):      7(ptr) Variable Function
-       340(r061):      7(ptr) Variable Function
+      245(r033i):      7(ptr) Variable Function
+       249(r034):      7(ptr) Variable Function
+       252(r036):      7(ptr) Variable Function
+       255(r037):    138(ptr) Variable Function
+       258(r038):    138(ptr) Variable Function
+       261(r039):      7(ptr) Variable Function
+      265(r039a):      7(ptr) Variable Function
+       270(r040):      7(ptr) Variable Function
+       273(r041):      7(ptr) Variable Function
+       278(r042):      7(ptr) Variable Function
+       281(r043):      7(ptr) Variable Function
+       285(r044):      7(ptr) Variable Function
+       289(r045):      7(ptr) Variable Function
+       293(r046):      7(ptr) Variable Function
+       296(r047):      7(ptr) Variable Function
+       300(r048):      9(ptr) Variable Function
+       304(r049):      7(ptr) Variable Function
+       307(r050):      7(ptr) Variable Function
+       310(r051):      7(ptr) Variable Function
+       313(r052):      7(ptr) Variable Function
+       316(r053):      7(ptr) Variable Function
+       323(r055):      7(ptr) Variable Function
+       326(r056):      7(ptr) Variable Function
+       331(r057):      7(ptr) Variable Function
+       334(r058):      7(ptr) Variable Function
+       338(r059):      7(ptr) Variable Function
+       341(r060):      7(ptr) Variable Function
+       344(r061):      7(ptr) Variable Function
              140:    6(float) Load 13(inF0)
              142:   137(bool) FOrdNotEqual 140 141
              143:   137(bool) All 142
@@ -6480,102 +6496,105 @@
              244:    6(float) FMod 242 243
                               Store 241(r033) 244
              246:    6(float) Load 13(inF0)
-             247:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 246
-                              Store 245(r034) 247
-             249:    6(float) Load 13(inF0)
-             250:    6(float) Fwidth 249
-                              Store 248(r036) 250
-             252:    6(float) Load 13(inF0)
-             253:   137(bool) IsInf 252
-                              Store 251(r037) 253
-             255:    6(float) Load 13(inF0)
-             256:   137(bool) IsNan 255
-                              Store 254(r038) 256
-             258:    6(float) Load 13(inF0)
-             259:    6(float) Load 14(inF1)
-             260:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 258 259
-                              Store 257(r039) 260
+             248:    6(float) FMod 246 247
+                              Store 245(r033i) 248
+             250:    6(float) Load 13(inF0)
+             251:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 250
+                              Store 249(r034) 251
+             253:    6(float) Load 13(inF0)
+             254:    6(float) Fwidth 253
+                              Store 252(r036) 254
+             256:    6(float) Load 13(inF0)
+             257:   137(bool) IsInf 256
+                              Store 255(r037) 257
+             259:    6(float) Load 13(inF0)
+             260:   137(bool) IsNan 259
+                              Store 258(r038) 260
              262:    6(float) Load 13(inF0)
              263:    6(float) Load 14(inF1)
-             264:    6(float) Load 15(inF2)
-             265:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 262 263 264
-                              Store 261(r039a) 265
-             267:    6(float) Load 13(inF0)
-             268:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 267
-                              Store 266(r040) 268
-             270:    6(float) Load 13(inF0)
-             271:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 270
-             273:    6(float) FMul 271 272
-                              Store 269(r041) 273
-             275:    6(float) Load 13(inF0)
-             276:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 275
-                              Store 274(r042) 276
-             278:    6(float) Load 13(inF0)
-             279:    6(float) Load 14(inF1)
-             280:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 278 279
-                              Store 277(r043) 280
+             264:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 262 263
+                              Store 261(r039) 264
+             266:    6(float) Load 13(inF0)
+             267:    6(float) Load 14(inF1)
+             268:    6(float) Load 15(inF2)
+             269:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 266 267 268
+                              Store 265(r039a) 269
+             271:    6(float) Load 13(inF0)
+             272:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 271
+                              Store 270(r040) 272
+             274:    6(float) Load 13(inF0)
+             275:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 274
+             277:    6(float) FMul 275 276
+                              Store 273(r041) 277
+             279:    6(float) Load 13(inF0)
+             280:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 279
+                              Store 278(r042) 280
              282:    6(float) Load 13(inF0)
              283:    6(float) Load 14(inF1)
-             284:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 282 283
-                              Store 281(r044) 284
+             284:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 282 283
+                              Store 281(r043) 284
              286:    6(float) Load 13(inF0)
              287:    6(float) Load 14(inF1)
-             288:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 286 287
-                              Store 285(r045) 288
+             288:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 286 287
+                              Store 285(r044) 288
              290:    6(float) Load 13(inF0)
-             291:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 290
-                              Store 289(r046) 291
+             291:    6(float) Load 14(inF1)
+             292:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 290 291
+                              Store 289(r045) 292
              294:    6(float) Load 13(inF0)
-             295:    6(float) FDiv 293 294
-                              Store 292(r047) 295
-             298:     10(int) BitReverse 297
-             299:      8(int) Bitcast 298
-                              Store 296(r048) 299
-             301:    6(float) Load 13(inF0)
-             302:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 301
-                              Store 300(r049) 302
-             304:    6(float) Load 13(inF0)
-             305:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 304
-                              Store 303(r050) 305
-             307:    6(float) Load 13(inF0)
-             308:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 307 141 293
-                              Store 306(r051) 308
-             310:    6(float) Load 13(inF0)
-             311:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 310
-                              Store 309(r052) 311
-             313:    6(float) Load 13(inF0)
-             314:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 313
-                              Store 312(r053) 314
-             315:    6(float) Load 13(inF0)
-             316:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 315
-                              Store 14(inF1) 316
+             295:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 294
+                              Store 293(r046) 295
+             298:    6(float) Load 13(inF0)
+             299:    6(float) FDiv 297 298
+                              Store 296(r047) 299
+             302:     10(int) BitReverse 301
+             303:      8(int) Bitcast 302
+                              Store 300(r048) 303
+             305:    6(float) Load 13(inF0)
+             306:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 305
+                              Store 304(r049) 306
+             308:    6(float) Load 13(inF0)
+             309:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 308
+                              Store 307(r050) 309
+             311:    6(float) Load 13(inF0)
+             312:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 311 141 297
+                              Store 310(r051) 312
+             314:    6(float) Load 13(inF0)
+             315:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 314
+                              Store 313(r052) 315
              317:    6(float) Load 13(inF0)
-             318:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 317
-                              Store 15(inF2) 318
-             320:    6(float) Load 13(inF0)
-             321:    6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 320
-                              Store 319(r055) 321
-             323:    6(float) Load 13(inF0)
-             324:    6(float) Load 14(inF1)
-             325:    6(float) Load 15(inF2)
-             326:    6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 323 324 325
-                              Store 322(r056) 326
-             328:    6(float) Load 13(inF0)
-             329:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 328
-                              Store 327(r057) 329
-             331:    6(float) Load 13(inF0)
-             332:    6(float) Load 14(inF1)
-             333:    6(float) ExtInst 1(GLSL.std.450) 48(Step) 331 332
-                              Store 330(r058) 333
+             318:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 317
+                              Store 316(r053) 318
+             319:    6(float) Load 13(inF0)
+             320:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 319
+                              Store 14(inF1) 320
+             321:    6(float) Load 13(inF0)
+             322:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 321
+                              Store 15(inF2) 322
+             324:    6(float) Load 13(inF0)
+             325:    6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 324
+                              Store 323(r055) 325
+             327:    6(float) Load 13(inF0)
+             328:    6(float) Load 14(inF1)
+             329:    6(float) Load 15(inF2)
+             330:    6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 327 328 329
+                              Store 326(r056) 330
+             332:    6(float) Load 13(inF0)
+             333:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 332
+                              Store 331(r057) 333
              335:    6(float) Load 13(inF0)
-             336:    6(float) ExtInst 1(GLSL.std.450) 15(Tan) 335
-                              Store 334(r059) 336
-             338:    6(float) Load 13(inF0)
-             339:    6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 338
-                              Store 337(r060) 339
-             341:    6(float) Load 13(inF0)
-             342:    6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 341
-                              Store 340(r061) 342
+             336:    6(float) Load 14(inF1)
+             337:    6(float) ExtInst 1(GLSL.std.450) 48(Step) 335 336
+                              Store 334(r058) 337
+             339:    6(float) Load 13(inF0)
+             340:    6(float) ExtInst 1(GLSL.std.450) 15(Tan) 339
+                              Store 338(r059) 340
+             342:    6(float) Load 13(inF0)
+             343:    6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 342
+                              Store 341(r060) 343
+             345:    6(float) Load 13(inF0)
+             346:    6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 345
+                              Store 344(r061) 346
                               ReturnValue 141
                               FunctionEnd
 24(PixelShaderFunction1(vf1;vf1;vf1;):    6(float) Function None 20
@@ -6592,298 +6611,298 @@
         34(inU0):     29(ptr) FunctionParameter
         35(inU1):     29(ptr) FunctionParameter
               37:             Label
-       347(r000):    138(ptr) Variable Function
-       353(r001):     27(ptr) Variable Function
-       356(r002):     27(ptr) Variable Function
-       359(r003):    138(ptr) Variable Function
-       363(r004):     27(ptr) Variable Function
-       368(r005):    367(ptr) Variable Function
-       371(r006):     29(ptr) Variable Function
-       374(r007):     27(ptr) Variable Function
-       377(r009):     27(ptr) Variable Function
-       380(r010):     27(ptr) Variable Function
-       384(r011):     27(ptr) Variable Function
-       387(r012):     27(ptr) Variable Function
-       406(r013):     27(ptr) Variable Function
-       409(r015):     27(ptr) Variable Function
-       412(r016):    367(ptr) Variable Function
-       416(r017):     27(ptr) Variable Function
-       419(r018):     27(ptr) Variable Function
-       422(r019):     27(ptr) Variable Function
-       425(r020):     27(ptr) Variable Function
-       428(r021):     27(ptr) Variable Function
-       431(r022):     27(ptr) Variable Function
-       434(r023):     27(ptr) Variable Function
-       437(r026):      7(ptr) Variable Function
-       441(r027):      7(ptr) Variable Function
-       445(r028):     27(ptr) Variable Function
-       448(r029):     27(ptr) Variable Function
-       451(r030):     27(ptr) Variable Function
-       456(r031):     29(ptr) Variable Function
-       461(r032):     29(ptr) Variable Function
-       463(r033):     27(ptr) Variable Function
-       466(r035):     27(ptr) Variable Function
-       470(r036):     27(ptr) Variable Function
-       473(r038):     27(ptr) Variable Function
-       477(r039):    476(ptr) Variable Function
-       480(r040):    476(ptr) Variable Function
-       483(r041):     27(ptr) Variable Function
-      487(r039a):     27(ptr) Variable Function
-       492(r042):      7(ptr) Variable Function
-       495(r043):     27(ptr) Variable Function
-       498(r044):     27(ptr) Variable Function
-       502(r045):     27(ptr) Variable Function
-       505(r046):     27(ptr) Variable Function
-       509(r047):     27(ptr) Variable Function
-       513(r048):     27(ptr) Variable Function
-       516(r049):     27(ptr) Variable Function
-       520(r050):     27(ptr) Variable Function
-       523(r051):     27(ptr) Variable Function
-       527(r052):     27(ptr) Variable Function
-       531(r053):     27(ptr) Variable Function
-       536(r054):     29(ptr) Variable Function
-       541(r055):     27(ptr) Variable Function
-       544(r056):     27(ptr) Variable Function
-       547(r057):     27(ptr) Variable Function
-       552(r058):     27(ptr) Variable Function
-       555(r059):     27(ptr) Variable Function
-       562(r060):     27(ptr) Variable Function
-       565(r061):     27(ptr) Variable Function
-       570(r062):     27(ptr) Variable Function
-       573(r063):     27(ptr) Variable Function
-       577(r064):     27(ptr) Variable Function
-       580(r065):     27(ptr) Variable Function
-       583(r066):     27(ptr) Variable Function
-             348:   26(fvec2) Load 31(inF0)
-             351:  349(bvec2) FOrdNotEqual 348 350
-             352:   137(bool) All 351
-                              Store 347(r000) 352
-             354:   26(fvec2) Load 31(inF0)
-             355:   26(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 354
-                              Store 353(r001) 355
-             357:   26(fvec2) Load 31(inF0)
-             358:   26(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 357
-                              Store 356(r002) 358
-             360:   26(fvec2) Load 31(inF0)
-             361:  349(bvec2) FOrdNotEqual 360 350
-             362:   137(bool) Any 361
-                              Store 359(r003) 362
+       351(r000):    138(ptr) Variable Function
+       357(r001):     27(ptr) Variable Function
+       360(r002):     27(ptr) Variable Function
+       363(r003):    138(ptr) Variable Function
+       367(r004):     27(ptr) Variable Function
+       372(r005):    371(ptr) Variable Function
+       375(r006):     29(ptr) Variable Function
+       378(r007):     27(ptr) Variable Function
+       381(r009):     27(ptr) Variable Function
+       384(r010):     27(ptr) Variable Function
+       388(r011):     27(ptr) Variable Function
+       391(r012):     27(ptr) Variable Function
+       410(r013):     27(ptr) Variable Function
+       413(r015):     27(ptr) Variable Function
+       416(r016):    371(ptr) Variable Function
+       420(r017):     27(ptr) Variable Function
+       423(r018):     27(ptr) Variable Function
+       426(r019):     27(ptr) Variable Function
+       429(r020):     27(ptr) Variable Function
+       432(r021):     27(ptr) Variable Function
+       435(r022):     27(ptr) Variable Function
+       438(r023):     27(ptr) Variable Function
+       441(r026):      7(ptr) Variable Function
+       445(r027):      7(ptr) Variable Function
+       449(r028):     27(ptr) Variable Function
+       452(r029):     27(ptr) Variable Function
+       455(r030):     27(ptr) Variable Function
+       460(r031):     29(ptr) Variable Function
+       465(r032):     29(ptr) Variable Function
+       467(r033):     27(ptr) Variable Function
+       470(r035):     27(ptr) Variable Function
+       474(r036):     27(ptr) Variable Function
+       477(r038):     27(ptr) Variable Function
+       481(r039):    480(ptr) Variable Function
+       484(r040):    480(ptr) Variable Function
+       487(r041):     27(ptr) Variable Function
+      491(r039a):     27(ptr) Variable Function
+       496(r042):      7(ptr) Variable Function
+       499(r043):     27(ptr) Variable Function
+       502(r044):     27(ptr) Variable Function
+       506(r045):     27(ptr) Variable Function
+       509(r046):     27(ptr) Variable Function
+       513(r047):     27(ptr) Variable Function
+       517(r048):     27(ptr) Variable Function
+       520(r049):     27(ptr) Variable Function
+       524(r050):     27(ptr) Variable Function
+       527(r051):     27(ptr) Variable Function
+       531(r052):     27(ptr) Variable Function
+       535(r053):     27(ptr) Variable Function
+       539(r054):     29(ptr) Variable Function
+       544(r055):     27(ptr) Variable Function
+       547(r056):     27(ptr) Variable Function
+       550(r057):     27(ptr) Variable Function
+       555(r058):     27(ptr) Variable Function
+       558(r059):     27(ptr) Variable Function
+       565(r060):     27(ptr) Variable Function
+       568(r061):     27(ptr) Variable Function
+       573(r062):     27(ptr) Variable Function
+       576(r063):     27(ptr) Variable Function
+       580(r064):     27(ptr) Variable Function
+       583(r065):     27(ptr) Variable Function
+       586(r066):     27(ptr) Variable Function
+             352:   26(fvec2) Load 31(inF0)
+             355:  353(bvec2) FOrdNotEqual 352 354
+             356:   137(bool) All 355
+                              Store 351(r000) 356
+             358:   26(fvec2) Load 31(inF0)
+             359:   26(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 358
+                              Store 357(r001) 359
+             361:   26(fvec2) Load 31(inF0)
+             362:   26(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 361
+                              Store 360(r002) 362
              364:   26(fvec2) Load 31(inF0)
-             365:   26(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 364
-                              Store 363(r004) 365
-             369:   26(fvec2) Load 31(inF0)
-             370:  366(ivec2) Bitcast 369
-                              Store 368(r005) 370
-             372:   26(fvec2) Load 31(inF0)
-             373:   28(ivec2) Bitcast 372
-                              Store 371(r006) 373
-             375:   28(ivec2) Load 34(inU0)
-             376:   26(fvec2) Bitcast 375
-                              Store 374(r007) 376
-             378:   26(fvec2) Load 31(inF0)
-             379:   26(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 378
-                              Store 377(r009) 379
-             381:   26(fvec2) Load 31(inF0)
-             382:   26(fvec2) Load 32(inF1)
-             383:   26(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 381 382
-                              Store 380(r010) 383
+             365:  353(bvec2) FOrdNotEqual 364 354
+             366:   137(bool) Any 365
+                              Store 363(r003) 366
+             368:   26(fvec2) Load 31(inF0)
+             369:   26(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 368
+                              Store 367(r004) 369
+             373:   26(fvec2) Load 31(inF0)
+             374:  370(ivec2) Bitcast 373
+                              Store 372(r005) 374
+             376:   26(fvec2) Load 31(inF0)
+             377:   28(ivec2) Bitcast 376
+                              Store 375(r006) 377
+             379:   28(ivec2) Load 34(inU0)
+             380:   26(fvec2) Bitcast 379
+                              Store 378(r007) 380
+             382:   26(fvec2) Load 31(inF0)
+             383:   26(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 382
+                              Store 381(r009) 383
              385:   26(fvec2) Load 31(inF0)
-             386:   26(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 385
-                              Store 384(r011) 386
-             388:   26(fvec2) Load 31(inF0)
-             389:   26(fvec2) Load 32(inF1)
-             390:   26(fvec2) Load 33(inF2)
-             391:   26(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 388 389 390
-                              Store 387(r012) 391
+             386:   26(fvec2) Load 32(inF1)
+             387:   26(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 385 386
+                              Store 384(r010) 387
+             389:   26(fvec2) Load 31(inF0)
+             390:   26(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 389
+                              Store 388(r011) 390
              392:   26(fvec2) Load 31(inF0)
-             393:  349(bvec2) FOrdLessThan 392 350
-             394:   137(bool) Any 393
-                              SelectionMerge 396 None
-                              BranchConditional 394 395 396
-             395:               Label
+             393:   26(fvec2) Load 32(inF1)
+             394:   26(fvec2) Load 33(inF2)
+             395:   26(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 392 393 394
+                              Store 391(r012) 395
+             396:   26(fvec2) Load 31(inF0)
+             397:  353(bvec2) FOrdLessThan 396 354
+             398:   137(bool) Any 397
+                              SelectionMerge 400 None
+                              BranchConditional 398 399 400
+             399:               Label
                                 Kill
-             396:             Label
-             398:   28(ivec2) Load 34(inU0)
-             401:  349(bvec2) ULessThan 398 400
-             402:   137(bool) Any 401
-                              SelectionMerge 404 None
-                              BranchConditional 402 403 404
-             403:               Label
+             400:             Label
+             402:   28(ivec2) Load 34(inU0)
+             405:  353(bvec2) ULessThan 402 404
+             406:   137(bool) Any 405
+                              SelectionMerge 408 None
+                              BranchConditional 406 407 408
+             407:               Label
                                 Kill
-             404:             Label
-             407:   26(fvec2) Load 31(inF0)
-             408:   26(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 407
-                              Store 406(r013) 408
-             410:   26(fvec2) Load 31(inF0)
-             411:   26(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 410
-                              Store 409(r015) 411
-             415:  366(ivec2) BitCount 414
-                              Store 412(r016) 415
-             417:   26(fvec2) Load 31(inF0)
-             418:   26(fvec2) DPdx 417
-                              Store 416(r017) 418
-             420:   26(fvec2) Load 31(inF0)
-             421:   26(fvec2) DPdxCoarse 420
-                              Store 419(r018) 421
-             423:   26(fvec2) Load 31(inF0)
-             424:   26(fvec2) DPdxFine 423
-                              Store 422(r019) 424
-             426:   26(fvec2) Load 31(inF0)
-             427:   26(fvec2) DPdy 426
-                              Store 425(r020) 427
-             429:   26(fvec2) Load 31(inF0)
-             430:   26(fvec2) DPdyCoarse 429
-                              Store 428(r021) 430
-             432:   26(fvec2) Load 31(inF0)
-             433:   26(fvec2) DPdyFine 432
-                              Store 431(r022) 433
-             435:   26(fvec2) Load 31(inF0)
-             436:   26(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 435
-                              Store 434(r023) 436
-             438:   26(fvec2) Load 31(inF0)
-             439:   26(fvec2) Load 32(inF1)
-             440:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 438 439
-                              Store 437(r026) 440
+             408:             Label
+             411:   26(fvec2) Load 31(inF0)
+             412:   26(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 411
+                              Store 410(r013) 412
+             414:   26(fvec2) Load 31(inF0)
+             415:   26(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 414
+                              Store 413(r015) 415
+             419:  370(ivec2) BitCount 418
+                              Store 416(r016) 419
+             421:   26(fvec2) Load 31(inF0)
+             422:   26(fvec2) DPdx 421
+                              Store 420(r017) 422
+             424:   26(fvec2) Load 31(inF0)
+             425:   26(fvec2) DPdxCoarse 424
+                              Store 423(r018) 425
+             427:   26(fvec2) Load 31(inF0)
+             428:   26(fvec2) DPdxFine 427
+                              Store 426(r019) 428
+             430:   26(fvec2) Load 31(inF0)
+             431:   26(fvec2) DPdy 430
+                              Store 429(r020) 431
+             433:   26(fvec2) Load 31(inF0)
+             434:   26(fvec2) DPdyCoarse 433
+                              Store 432(r021) 434
+             436:   26(fvec2) Load 31(inF0)
+             437:   26(fvec2) DPdyFine 436
+                              Store 435(r022) 437
+             439:   26(fvec2) Load 31(inF0)
+             440:   26(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 439
+                              Store 438(r023) 440
              442:   26(fvec2) Load 31(inF0)
              443:   26(fvec2) Load 32(inF1)
-             444:    6(float) Dot 442 443
-                              Store 441(r027) 444
+             444:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 442 443
+                              Store 441(r026) 444
              446:   26(fvec2) Load 31(inF0)
-             447:   26(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 446
-                              Store 445(r028) 447
-             449:   26(fvec2) Load 31(inF0)
-             450:   26(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 449
-                              Store 448(r029) 450
-             452:   26(fvec2) Load 31(inF0)
-             453:   26(fvec2) Load 32(inF1)
-             454:   26(fvec2) Load 33(inF2)
-             455:   26(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 452 453 454
-                              Store 451(r030) 455
-             460:   28(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 459
-                              Store 456(r031) 460
-             462:   28(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 459
-                              Store 461(r032) 462
-             464:   26(fvec2) Load 31(inF0)
-             465:   26(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 464
-                              Store 463(r033) 465
-             467:   26(fvec2) Load 31(inF0)
-             468:   26(fvec2) Load 32(inF1)
-             469:   26(fvec2) FMod 467 468
-                              Store 466(r035) 469
+             447:   26(fvec2) Load 32(inF1)
+             448:    6(float) Dot 446 447
+                              Store 445(r027) 448
+             450:   26(fvec2) Load 31(inF0)
+             451:   26(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 450
+                              Store 449(r028) 451
+             453:   26(fvec2) Load 31(inF0)
+             454:   26(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 453
+                              Store 452(r029) 454
+             456:   26(fvec2) Load 31(inF0)
+             457:   26(fvec2) Load 32(inF1)
+             458:   26(fvec2) Load 33(inF2)
+             459:   26(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 456 457 458
+                              Store 455(r030) 459
+             464:   28(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 463
+                              Store 460(r031) 464
+             466:   28(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 463
+                              Store 465(r032) 466
+             468:   26(fvec2) Load 31(inF0)
+             469:   26(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 468
+                              Store 467(r033) 469
              471:   26(fvec2) Load 31(inF0)
-             472:   26(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 471
-                              Store 470(r036) 472
-             474:   26(fvec2) Load 31(inF0)
-             475:   26(fvec2) Fwidth 474
-                              Store 473(r038) 475
+             472:   26(fvec2) Load 32(inF1)
+             473:   26(fvec2) FMod 471 472
+                              Store 470(r035) 473
+             475:   26(fvec2) Load 31(inF0)
+             476:   26(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 475
+                              Store 474(r036) 476
              478:   26(fvec2) Load 31(inF0)
-             479:  349(bvec2) IsInf 478
-                              Store 477(r039) 479
-             481:   26(fvec2) Load 31(inF0)
-             482:  349(bvec2) IsNan 481
-                              Store 480(r040) 482
-             484:   26(fvec2) Load 31(inF0)
-             485:   26(fvec2) Load 32(inF1)
-             486:   26(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 484 485
-                              Store 483(r041) 486
+             479:   26(fvec2) Fwidth 478
+                              Store 477(r038) 479
+             482:   26(fvec2) Load 31(inF0)
+             483:  353(bvec2) IsInf 482
+                              Store 481(r039) 483
+             485:   26(fvec2) Load 31(inF0)
+             486:  353(bvec2) IsNan 485
+                              Store 484(r040) 486
              488:   26(fvec2) Load 31(inF0)
              489:   26(fvec2) Load 32(inF1)
-             490:   26(fvec2) Load 33(inF2)
-             491:   26(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 488 489 490
-                              Store 487(r039a) 491
-             493:   26(fvec2) Load 31(inF0)
-             494:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 493
-                              Store 492(r042) 494
-             496:   26(fvec2) Load 31(inF0)
-             497:   26(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 496
-                              Store 495(r043) 497
-             499:   26(fvec2) Load 31(inF0)
-             500:   26(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 499
-             501:   26(fvec2) VectorTimesScalar 500 272
-                              Store 498(r044) 501
+             490:   26(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 488 489
+                              Store 487(r041) 490
+             492:   26(fvec2) Load 31(inF0)
+             493:   26(fvec2) Load 32(inF1)
+             494:   26(fvec2) Load 33(inF2)
+             495:   26(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 492 493 494
+                              Store 491(r039a) 495
+             497:   26(fvec2) Load 31(inF0)
+             498:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 497
+                              Store 496(r042) 498
+             500:   26(fvec2) Load 31(inF0)
+             501:   26(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 500
+                              Store 499(r043) 501
              503:   26(fvec2) Load 31(inF0)
              504:   26(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 503
-                              Store 502(r045) 504
-             506:   26(fvec2) Load 31(inF0)
-             507:   26(fvec2) Load 32(inF1)
-             508:   26(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 506 507
-                              Store 505(r046) 508
+             505:   26(fvec2) VectorTimesScalar 504 276
+                              Store 502(r044) 505
+             507:   26(fvec2) Load 31(inF0)
+             508:   26(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 507
+                              Store 506(r045) 508
              510:   26(fvec2) Load 31(inF0)
              511:   26(fvec2) Load 32(inF1)
-             512:   26(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 510 511
-                              Store 509(r047) 512
+             512:   26(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 510 511
+                              Store 509(r046) 512
              514:   26(fvec2) Load 31(inF0)
-             515:   26(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 514
-                              Store 513(r048) 515
-             517:   26(fvec2) Load 31(inF0)
-             518:   26(fvec2) Load 32(inF1)
-             519:   26(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 517 518
-                              Store 516(r049) 519
+             515:   26(fvec2) Load 32(inF1)
+             516:   26(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 514 515
+                              Store 513(r047) 516
+             518:   26(fvec2) Load 31(inF0)
+             519:   26(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 518
+                              Store 517(r048) 519
              521:   26(fvec2) Load 31(inF0)
-             522:   26(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 521
-                              Store 520(r050) 522
-             524:   26(fvec2) Load 31(inF0)
-             525:   26(fvec2) CompositeConstruct 293 293
-             526:   26(fvec2) FDiv 525 524
-                              Store 523(r051) 526
+             522:   26(fvec2) Load 32(inF1)
+             523:   26(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 521 522
+                              Store 520(r049) 523
+             525:   26(fvec2) Load 31(inF0)
+             526:   26(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 525
+                              Store 524(r050) 526
              528:   26(fvec2) Load 31(inF0)
-             529:   26(fvec2) Load 32(inF1)
-             530:   26(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 528 529
-                              Store 527(r052) 530
+             529:   26(fvec2) CompositeConstruct 297 297
+             530:   26(fvec2) FDiv 529 528
+                              Store 527(r051) 530
              532:   26(fvec2) Load 31(inF0)
              533:   26(fvec2) Load 32(inF1)
-             535:   26(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 532 533 534
-                              Store 531(r053) 535
-             540:   28(ivec2) BitReverse 539
-                              Store 536(r054) 540
-             542:   26(fvec2) Load 31(inF0)
-             543:   26(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 542
-                              Store 541(r055) 543
+             534:   26(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 532 533
+                              Store 531(r052) 534
+             536:   26(fvec2) Load 31(inF0)
+             537:   26(fvec2) Load 32(inF1)
+             538:   26(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 536 537 247
+                              Store 535(r053) 538
+             543:   28(ivec2) BitReverse 542
+                              Store 539(r054) 543
              545:   26(fvec2) Load 31(inF0)
-             546:   26(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 545
-                              Store 544(r056) 546
+             546:   26(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 545
+                              Store 544(r055) 546
              548:   26(fvec2) Load 31(inF0)
-             549:   26(fvec2) CompositeConstruct 141 141
-             550:   26(fvec2) CompositeConstruct 293 293
-             551:   26(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 548 549 550
-                              Store 547(r057) 551
-             553:   26(fvec2) Load 31(inF0)
-             554:   26(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 553
-                              Store 552(r058) 554
+             549:   26(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 548
+                              Store 547(r056) 549
+             551:   26(fvec2) Load 31(inF0)
+             552:   26(fvec2) CompositeConstruct 141 141
+             553:   26(fvec2) CompositeConstruct 297 297
+             554:   26(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 551 552 553
+                              Store 550(r057) 554
              556:   26(fvec2) Load 31(inF0)
-             557:   26(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 556
-                              Store 555(r059) 557
-             558:   26(fvec2) Load 31(inF0)
-             559:   26(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 558
-                              Store 32(inF1) 559
-             560:   26(fvec2) Load 31(inF0)
-             561:   26(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 560
-                              Store 33(inF2) 561
+             557:   26(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 556
+                              Store 555(r058) 557
+             559:   26(fvec2) Load 31(inF0)
+             560:   26(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 559
+                              Store 558(r059) 560
+             561:   26(fvec2) Load 31(inF0)
+             562:   26(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 561
+                              Store 32(inF1) 562
              563:   26(fvec2) Load 31(inF0)
-             564:   26(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 563
-                              Store 562(r060) 564
+             564:   26(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 563
+                              Store 33(inF2) 564
              566:   26(fvec2) Load 31(inF0)
-             567:   26(fvec2) Load 32(inF1)
-             568:   26(fvec2) Load 33(inF2)
-             569:   26(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 566 567 568
-                              Store 565(r061) 569
-             571:   26(fvec2) Load 31(inF0)
-             572:   26(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 571
-                              Store 570(r062) 572
+             567:   26(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 566
+                              Store 565(r060) 567
+             569:   26(fvec2) Load 31(inF0)
+             570:   26(fvec2) Load 32(inF1)
+             571:   26(fvec2) Load 33(inF2)
+             572:   26(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 569 570 571
+                              Store 568(r061) 572
              574:   26(fvec2) Load 31(inF0)
-             575:   26(fvec2) Load 32(inF1)
-             576:   26(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 574 575
-                              Store 573(r063) 576
-             578:   26(fvec2) Load 31(inF0)
-             579:   26(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 578
-                              Store 577(r064) 579
+             575:   26(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 574
+                              Store 573(r062) 575
+             577:   26(fvec2) Load 31(inF0)
+             578:   26(fvec2) Load 32(inF1)
+             579:   26(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 577 578
+                              Store 576(r063) 579
              581:   26(fvec2) Load 31(inF0)
-             582:   26(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 581
-                              Store 580(r065) 582
+             582:   26(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 581
+                              Store 580(r064) 582
              584:   26(fvec2) Load 31(inF0)
-             585:   26(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 584
-                              Store 583(r066) 585
-                              ReturnValue 586
+             585:   26(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 584
+                              Store 583(r065) 585
+             587:   26(fvec2) Load 31(inF0)
+             588:   26(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 587
+                              Store 586(r066) 588
+                              ReturnValue 589
                               FunctionEnd
 48(PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3;):   38(fvec3) Function None 42
         43(inF0):     39(ptr) FunctionParameter
@@ -6892,309 +6911,309 @@
         46(inU0):     41(ptr) FunctionParameter
         47(inU1):     41(ptr) FunctionParameter
               49:             Label
-       589(r000):    138(ptr) Variable Function
-       595(r001):     39(ptr) Variable Function
-       598(r002):     39(ptr) Variable Function
-       601(r003):    138(ptr) Variable Function
-       605(r004):     39(ptr) Variable Function
-       610(r005):    609(ptr) Variable Function
-       613(r006):     41(ptr) Variable Function
-       616(r007):     39(ptr) Variable Function
-       619(r009):     39(ptr) Variable Function
-       622(r010):     39(ptr) Variable Function
-       626(r011):     39(ptr) Variable Function
-       629(r012):     39(ptr) Variable Function
-       647(r013):     39(ptr) Variable Function
-       650(r014):     39(ptr) Variable Function
-       653(r015):     41(ptr) Variable Function
-       658(r016):     39(ptr) Variable Function
-       662(r017):     39(ptr) Variable Function
-       665(r018):     39(ptr) Variable Function
-       668(r019):     39(ptr) Variable Function
-       671(r020):     39(ptr) Variable Function
-       674(r021):     39(ptr) Variable Function
-       677(r022):     39(ptr) Variable Function
-       680(r023):     39(ptr) Variable Function
-       683(r024):      7(ptr) Variable Function
-       687(r025):      7(ptr) Variable Function
-       691(r029):     39(ptr) Variable Function
-       694(r030):     39(ptr) Variable Function
-       697(r031):     39(ptr) Variable Function
-       702(r032):     41(ptr) Variable Function
-       706(r033):     41(ptr) Variable Function
-       708(r034):     39(ptr) Variable Function
-       711(r036):     39(ptr) Variable Function
-       715(r037):     39(ptr) Variable Function
-       718(r039):     39(ptr) Variable Function
-       722(r040):    721(ptr) Variable Function
-       725(r041):    721(ptr) Variable Function
-       728(r042):     39(ptr) Variable Function
-      732(r039a):     39(ptr) Variable Function
-      737(r039b):     39(ptr) Variable Function
-       743(r043):      7(ptr) Variable Function
-       746(r044):     39(ptr) Variable Function
-       749(r045):     39(ptr) Variable Function
-       753(r046):     39(ptr) Variable Function
-       756(r047):     39(ptr) Variable Function
-       760(r048):     39(ptr) Variable Function
-       764(r049):     39(ptr) Variable Function
-       767(r050):     39(ptr) Variable Function
-       771(r051):     39(ptr) Variable Function
-       774(r052):     39(ptr) Variable Function
-       778(r053):     39(ptr) Variable Function
-       782(r054):     39(ptr) Variable Function
-       786(r055):     41(ptr) Variable Function
-       789(r056):     39(ptr) Variable Function
-       792(r057):     39(ptr) Variable Function
-       795(r058):     39(ptr) Variable Function
-       800(r059):     39(ptr) Variable Function
-       803(r060):     39(ptr) Variable Function
-       810(r061):     39(ptr) Variable Function
-       813(r062):     39(ptr) Variable Function
-       818(r063):     39(ptr) Variable Function
-       821(r064):     39(ptr) Variable Function
-       825(r065):     39(ptr) Variable Function
-       828(r066):     39(ptr) Variable Function
-       831(r067):     39(ptr) Variable Function
-             590:   38(fvec3) Load 43(inF0)
-             593:  591(bvec3) FOrdNotEqual 590 592
-             594:   137(bool) All 593
-                              Store 589(r000) 594
-             596:   38(fvec3) Load 43(inF0)
-             597:   38(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 596
-                              Store 595(r001) 597
+       592(r000):    138(ptr) Variable Function
+       598(r001):     39(ptr) Variable Function
+       601(r002):     39(ptr) Variable Function
+       604(r003):    138(ptr) Variable Function
+       608(r004):     39(ptr) Variable Function
+       613(r005):    612(ptr) Variable Function
+       616(r006):     41(ptr) Variable Function
+       619(r007):     39(ptr) Variable Function
+       622(r009):     39(ptr) Variable Function
+       625(r010):     39(ptr) Variable Function
+       629(r011):     39(ptr) Variable Function
+       632(r012):     39(ptr) Variable Function
+       650(r013):     39(ptr) Variable Function
+       653(r014):     39(ptr) Variable Function
+       656(r015):     41(ptr) Variable Function
+       661(r016):     39(ptr) Variable Function
+       665(r017):     39(ptr) Variable Function
+       668(r018):     39(ptr) Variable Function
+       671(r019):     39(ptr) Variable Function
+       674(r020):     39(ptr) Variable Function
+       677(r021):     39(ptr) Variable Function
+       680(r022):     39(ptr) Variable Function
+       683(r023):     39(ptr) Variable Function
+       686(r024):      7(ptr) Variable Function
+       690(r025):      7(ptr) Variable Function
+       694(r029):     39(ptr) Variable Function
+       697(r030):     39(ptr) Variable Function
+       700(r031):     39(ptr) Variable Function
+       705(r032):     41(ptr) Variable Function
+       709(r033):     41(ptr) Variable Function
+       711(r034):     39(ptr) Variable Function
+       714(r036):     39(ptr) Variable Function
+       718(r037):     39(ptr) Variable Function
+       721(r039):     39(ptr) Variable Function
+       725(r040):    724(ptr) Variable Function
+       728(r041):    724(ptr) Variable Function
+       731(r042):     39(ptr) Variable Function
+      735(r039a):     39(ptr) Variable Function
+      740(r039b):     39(ptr) Variable Function
+       746(r043):      7(ptr) Variable Function
+       749(r044):     39(ptr) Variable Function
+       752(r045):     39(ptr) Variable Function
+       756(r046):     39(ptr) Variable Function
+       759(r047):     39(ptr) Variable Function
+       763(r048):     39(ptr) Variable Function
+       767(r049):     39(ptr) Variable Function
+       770(r050):     39(ptr) Variable Function
+       774(r051):     39(ptr) Variable Function
+       777(r052):     39(ptr) Variable Function
+       781(r053):     39(ptr) Variable Function
+       785(r054):     39(ptr) Variable Function
+       789(r055):     41(ptr) Variable Function
+       792(r056):     39(ptr) Variable Function
+       795(r057):     39(ptr) Variable Function
+       798(r058):     39(ptr) Variable Function
+       803(r059):     39(ptr) Variable Function
+       806(r060):     39(ptr) Variable Function
+       813(r061):     39(ptr) Variable Function
+       816(r062):     39(ptr) Variable Function
+       821(r063):     39(ptr) Variable Function
+       824(r064):     39(ptr) Variable Function
+       828(r065):     39(ptr) Variable Function
+       831(r066):     39(ptr) Variable Function
+       834(r067):     39(ptr) Variable Function
+             593:   38(fvec3) Load 43(inF0)
+             596:  594(bvec3) FOrdNotEqual 593 595
+             597:   137(bool) All 596
+                              Store 592(r000) 597
              599:   38(fvec3) Load 43(inF0)
-             600:   38(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 599
-                              Store 598(r002) 600
+             600:   38(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 599
+                              Store 598(r001) 600
              602:   38(fvec3) Load 43(inF0)
-             603:  591(bvec3) FOrdNotEqual 602 592
-             604:   137(bool) Any 603
-                              Store 601(r003) 604
-             606:   38(fvec3) Load 43(inF0)
-             607:   38(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 606
-                              Store 605(r004) 607
-             611:   38(fvec3) Load 43(inF0)
-             612:  608(ivec3) Bitcast 611
-                              Store 610(r005) 612
+             603:   38(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 602
+                              Store 601(r002) 603
+             605:   38(fvec3) Load 43(inF0)
+             606:  594(bvec3) FOrdNotEqual 605 595
+             607:   137(bool) Any 606
+                              Store 604(r003) 607
+             609:   38(fvec3) Load 43(inF0)
+             610:   38(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 609
+                              Store 608(r004) 610
              614:   38(fvec3) Load 43(inF0)
-             615:   40(ivec3) Bitcast 614
-                              Store 613(r006) 615
-             617:   40(ivec3) Load 46(inU0)
-             618:   38(fvec3) Bitcast 617
-                              Store 616(r007) 618
-             620:   38(fvec3) Load 43(inF0)
-             621:   38(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 620
-                              Store 619(r009) 621
+             615:  611(ivec3) Bitcast 614
+                              Store 613(r005) 615
+             617:   38(fvec3) Load 43(inF0)
+             618:   40(ivec3) Bitcast 617
+                              Store 616(r006) 618
+             620:   40(ivec3) Load 46(inU0)
+             621:   38(fvec3) Bitcast 620
+                              Store 619(r007) 621
              623:   38(fvec3) Load 43(inF0)
-             624:   38(fvec3) Load 44(inF1)
-             625:   38(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 623 624
-                              Store 622(r010) 625
-             627:   38(fvec3) Load 43(inF0)
-             628:   38(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 627
-                              Store 626(r011) 628
+             624:   38(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 623
+                              Store 622(r009) 624
+             626:   38(fvec3) Load 43(inF0)
+             627:   38(fvec3) Load 44(inF1)
+             628:   38(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 626 627
+                              Store 625(r010) 628
              630:   38(fvec3) Load 43(inF0)
-             631:   38(fvec3) Load 44(inF1)
-             632:   38(fvec3) Load 45(inF2)
-             633:   38(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 630 631 632
-                              Store 629(r012) 633
-             634:   38(fvec3) Load 43(inF0)
-             635:  591(bvec3) FOrdLessThan 634 592
-             636:   137(bool) Any 635
-                              SelectionMerge 638 None
-                              BranchConditional 636 637 638
-             637:               Label
+             631:   38(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 630
+                              Store 629(r011) 631
+             633:   38(fvec3) Load 43(inF0)
+             634:   38(fvec3) Load 44(inF1)
+             635:   38(fvec3) Load 45(inF2)
+             636:   38(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 633 634 635
+                              Store 632(r012) 636
+             637:   38(fvec3) Load 43(inF0)
+             638:  594(bvec3) FOrdLessThan 637 595
+             639:   137(bool) Any 638
+                              SelectionMerge 641 None
+                              BranchConditional 639 640 641
+             640:               Label
                                 Kill
-             638:             Label
-             640:   40(ivec3) Load 46(inU0)
-             642:  591(bvec3) ULessThan 640 641
-             643:   137(bool) Any 642
-                              SelectionMerge 645 None
-                              BranchConditional 643 644 645
-             644:               Label
+             641:             Label
+             643:   40(ivec3) Load 46(inU0)
+             645:  594(bvec3) ULessThan 643 644
+             646:   137(bool) Any 645
+                              SelectionMerge 648 None
+                              BranchConditional 646 647 648
+             647:               Label
                                 Kill
-             645:             Label
-             648:   38(fvec3) Load 43(inF0)
-             649:   38(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 648
-                              Store 647(r013) 649
+             648:             Label
              651:   38(fvec3) Load 43(inF0)
-             652:   38(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 651
-                              Store 650(r014) 652
-             657:   40(ivec3) BitCount 656
-                              Store 653(r015) 657
-             659:   38(fvec3) Load 43(inF0)
-             660:   38(fvec3) Load 44(inF1)
-             661:   38(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 659 660
-                              Store 658(r016) 661
-             663:   38(fvec3) Load 43(inF0)
-             664:   38(fvec3) DPdx 663
-                              Store 662(r017) 664
+             652:   38(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 651
+                              Store 650(r013) 652
+             654:   38(fvec3) Load 43(inF0)
+             655:   38(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 654
+                              Store 653(r014) 655
+             660:   40(ivec3) BitCount 659
+                              Store 656(r015) 660
+             662:   38(fvec3) Load 43(inF0)
+             663:   38(fvec3) Load 44(inF1)
+             664:   38(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 662 663
+                              Store 661(r016) 664
              666:   38(fvec3) Load 43(inF0)
-             667:   38(fvec3) DPdxCoarse 666
-                              Store 665(r018) 667
+             667:   38(fvec3) DPdx 666
+                              Store 665(r017) 667
              669:   38(fvec3) Load 43(inF0)
-             670:   38(fvec3) DPdxFine 669
-                              Store 668(r019) 670
+             670:   38(fvec3) DPdxCoarse 669
+                              Store 668(r018) 670
              672:   38(fvec3) Load 43(inF0)
-             673:   38(fvec3) DPdy 672
-                              Store 671(r020) 673
+             673:   38(fvec3) DPdxFine 672
+                              Store 671(r019) 673
              675:   38(fvec3) Load 43(inF0)
-             676:   38(fvec3) DPdyCoarse 675
-                              Store 674(r021) 676
+             676:   38(fvec3) DPdy 675
+                              Store 674(r020) 676
              678:   38(fvec3) Load 43(inF0)
-             679:   38(fvec3) DPdyFine 678
-                              Store 677(r022) 679
+             679:   38(fvec3) DPdyCoarse 678
+                              Store 677(r021) 679
              681:   38(fvec3) Load 43(inF0)
-             682:   38(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 681
-                              Store 680(r023) 682
+             682:   38(fvec3) DPdyFine 681
+                              Store 680(r022) 682
              684:   38(fvec3) Load 43(inF0)
-             685:   38(fvec3) Load 44(inF1)
-             686:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 684 685
-                              Store 683(r024) 686
-             688:   38(fvec3) Load 43(inF0)
-             689:   38(fvec3) Load 44(inF1)
-             690:    6(float) Dot 688 689
-                              Store 687(r025) 690
-             692:   38(fvec3) Load 43(inF0)
-             693:   38(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 692
-                              Store 691(r029) 693
+             685:   38(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 684
+                              Store 683(r023) 685
+             687:   38(fvec3) Load 43(inF0)
+             688:   38(fvec3) Load 44(inF1)
+             689:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 687 688
+                              Store 686(r024) 689
+             691:   38(fvec3) Load 43(inF0)
+             692:   38(fvec3) Load 44(inF1)
+             693:    6(float) Dot 691 692
+                              Store 690(r025) 693
              695:   38(fvec3) Load 43(inF0)
-             696:   38(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 695
-                              Store 694(r030) 696
+             696:   38(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 695
+                              Store 694(r029) 696
              698:   38(fvec3) Load 43(inF0)
-             699:   38(fvec3) Load 44(inF1)
-             700:   38(fvec3) Load 45(inF2)
-             701:   38(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 698 699 700
-                              Store 697(r031) 701
-             705:   40(ivec3) ExtInst 1(GLSL.std.450) 75(FindUMsb) 704
-                              Store 702(r032) 705
-             707:   40(ivec3) ExtInst 1(GLSL.std.450) 73(FindILsb) 704
-                              Store 706(r033) 707
-             709:   38(fvec3) Load 43(inF0)
-             710:   38(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 709
-                              Store 708(r034) 710
+             699:   38(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 698
+                              Store 697(r030) 699
+             701:   38(fvec3) Load 43(inF0)
+             702:   38(fvec3) Load 44(inF1)
+             703:   38(fvec3) Load 45(inF2)
+             704:   38(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 701 702 703
+                              Store 700(r031) 704
+             708:   40(ivec3) ExtInst 1(GLSL.std.450) 75(FindUMsb) 707
+                              Store 705(r032) 708
+             710:   40(ivec3) ExtInst 1(GLSL.std.450) 73(FindILsb) 707
+                              Store 709(r033) 710
              712:   38(fvec3) Load 43(inF0)
-             713:   38(fvec3) Load 44(inF1)
-             714:   38(fvec3) FMod 712 713
-                              Store 711(r036) 714
-             716:   38(fvec3) Load 43(inF0)
-             717:   38(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 716
-                              Store 715(r037) 717
+             713:   38(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 712
+                              Store 711(r034) 713
+             715:   38(fvec3) Load 43(inF0)
+             716:   38(fvec3) Load 44(inF1)
+             717:   38(fvec3) FMod 715 716
+                              Store 714(r036) 717
              719:   38(fvec3) Load 43(inF0)
-             720:   38(fvec3) Fwidth 719
-                              Store 718(r039) 720
-             723:   38(fvec3) Load 43(inF0)
-             724:  591(bvec3) IsInf 723
-                              Store 722(r040) 724
+             720:   38(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 719
+                              Store 718(r037) 720
+             722:   38(fvec3) Load 43(inF0)
+             723:   38(fvec3) Fwidth 722
+                              Store 721(r039) 723
              726:   38(fvec3) Load 43(inF0)
-             727:  591(bvec3) IsNan 726
-                              Store 725(r041) 727
+             727:  594(bvec3) IsInf 726
+                              Store 725(r040) 727
              729:   38(fvec3) Load 43(inF0)
-             730:   38(fvec3) Load 44(inF1)
-             731:   38(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 729 730
-                              Store 728(r042) 731
-             733:   38(fvec3) Load 43(inF0)
-             734:   38(fvec3) Load 44(inF1)
-             735:   38(fvec3) Load 45(inF2)
-             736:   38(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 733 734 735
-                              Store 732(r039a) 736
-             738:   38(fvec3) Load 43(inF0)
-             739:   38(fvec3) Load 44(inF1)
-             741:   38(fvec3) CompositeConstruct 740 740 740
-             742:   38(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 738 739 741
-                              Store 737(r039b) 742
-             744:   38(fvec3) Load 43(inF0)
-             745:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 744
-                              Store 743(r043) 745
+             730:  594(bvec3) IsNan 729
+                              Store 728(r041) 730
+             732:   38(fvec3) Load 43(inF0)
+             733:   38(fvec3) Load 44(inF1)
+             734:   38(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 732 733
+                              Store 731(r042) 734
+             736:   38(fvec3) Load 43(inF0)
+             737:   38(fvec3) Load 44(inF1)
+             738:   38(fvec3) Load 45(inF2)
+             739:   38(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 736 737 738
+                              Store 735(r039a) 739
+             741:   38(fvec3) Load 43(inF0)
+             742:   38(fvec3) Load 44(inF1)
+             744:   38(fvec3) CompositeConstruct 743 743 743
+             745:   38(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 741 742 744
+                              Store 740(r039b) 745
              747:   38(fvec3) Load 43(inF0)
-             748:   38(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 747
-                              Store 746(r044) 748
+             748:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 747
+                              Store 746(r043) 748
              750:   38(fvec3) Load 43(inF0)
-             751:   38(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 750
-             752:   38(fvec3) VectorTimesScalar 751 272
-                              Store 749(r045) 752
-             754:   38(fvec3) Load 43(inF0)
-             755:   38(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 754
-                              Store 753(r046) 755
+             751:   38(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 750
+                              Store 749(r044) 751
+             753:   38(fvec3) Load 43(inF0)
+             754:   38(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 753
+             755:   38(fvec3) VectorTimesScalar 754 276
+                              Store 752(r045) 755
              757:   38(fvec3) Load 43(inF0)
-             758:   38(fvec3) Load 44(inF1)
-             759:   38(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 757 758
-                              Store 756(r047) 759
-             761:   38(fvec3) Load 43(inF0)
-             762:   38(fvec3) Load 44(inF1)
-             763:   38(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 761 762
-                              Store 760(r048) 763
-             765:   38(fvec3) Load 43(inF0)
-             766:   38(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 765
-                              Store 764(r049) 766
+             758:   38(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 757
+                              Store 756(r046) 758
+             760:   38(fvec3) Load 43(inF0)
+             761:   38(fvec3) Load 44(inF1)
+             762:   38(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 760 761
+                              Store 759(r047) 762
+             764:   38(fvec3) Load 43(inF0)
+             765:   38(fvec3) Load 44(inF1)
+             766:   38(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 764 765
+                              Store 763(r048) 766
              768:   38(fvec3) Load 43(inF0)
-             769:   38(fvec3) Load 44(inF1)
-             770:   38(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 768 769
-                              Store 767(r050) 770
-             772:   38(fvec3) Load 43(inF0)
-             773:   38(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 772
-                              Store 771(r051) 773
+             769:   38(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 768
+                              Store 767(r049) 769
+             771:   38(fvec3) Load 43(inF0)
+             772:   38(fvec3) Load 44(inF1)
+             773:   38(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 771 772
+                              Store 770(r050) 773
              775:   38(fvec3) Load 43(inF0)
-             776:   38(fvec3) CompositeConstruct 293 293 293
-             777:   38(fvec3) FDiv 776 775
-                              Store 774(r052) 777
-             779:   38(fvec3) Load 43(inF0)
-             780:   38(fvec3) Load 44(inF1)
-             781:   38(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 779 780
-                              Store 778(r053) 781
-             783:   38(fvec3) Load 43(inF0)
-             784:   38(fvec3) Load 44(inF1)
-             785:   38(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 783 784 534
-                              Store 782(r054) 785
-             788:   40(ivec3) BitReverse 787
-                              Store 786(r055) 788
-             790:   38(fvec3) Load 43(inF0)
-             791:   38(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 790
-                              Store 789(r056) 791
+             776:   38(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 775
+                              Store 774(r051) 776
+             778:   38(fvec3) Load 43(inF0)
+             779:   38(fvec3) CompositeConstruct 297 297 297
+             780:   38(fvec3) FDiv 779 778
+                              Store 777(r052) 780
+             782:   38(fvec3) Load 43(inF0)
+             783:   38(fvec3) Load 44(inF1)
+             784:   38(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 782 783
+                              Store 781(r053) 784
+             786:   38(fvec3) Load 43(inF0)
+             787:   38(fvec3) Load 44(inF1)
+             788:   38(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 786 787 247
+                              Store 785(r054) 788
+             791:   40(ivec3) BitReverse 790
+                              Store 789(r055) 791
              793:   38(fvec3) Load 43(inF0)
-             794:   38(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 793
-                              Store 792(r057) 794
+             794:   38(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 793
+                              Store 792(r056) 794
              796:   38(fvec3) Load 43(inF0)
-             797:   38(fvec3) CompositeConstruct 141 141 141
-             798:   38(fvec3) CompositeConstruct 293 293 293
-             799:   38(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 796 797 798
-                              Store 795(r058) 799
-             801:   38(fvec3) Load 43(inF0)
-             802:   38(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 801
-                              Store 800(r059) 802
+             797:   38(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 796
+                              Store 795(r057) 797
+             799:   38(fvec3) Load 43(inF0)
+             800:   38(fvec3) CompositeConstruct 141 141 141
+             801:   38(fvec3) CompositeConstruct 297 297 297
+             802:   38(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 799 800 801
+                              Store 798(r058) 802
              804:   38(fvec3) Load 43(inF0)
-             805:   38(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 804
-                              Store 803(r060) 805
-             806:   38(fvec3) Load 43(inF0)
-             807:   38(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 806
-                              Store 44(inF1) 807
-             808:   38(fvec3) Load 43(inF0)
-             809:   38(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 808
-                              Store 45(inF2) 809
+             805:   38(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 804
+                              Store 803(r059) 805
+             807:   38(fvec3) Load 43(inF0)
+             808:   38(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 807
+                              Store 806(r060) 808
+             809:   38(fvec3) Load 43(inF0)
+             810:   38(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 809
+                              Store 44(inF1) 810
              811:   38(fvec3) Load 43(inF0)
-             812:   38(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 811
-                              Store 810(r061) 812
+             812:   38(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 811
+                              Store 45(inF2) 812
              814:   38(fvec3) Load 43(inF0)
-             815:   38(fvec3) Load 44(inF1)
-             816:   38(fvec3) Load 45(inF2)
-             817:   38(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 814 815 816
-                              Store 813(r062) 817
-             819:   38(fvec3) Load 43(inF0)
-             820:   38(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 819
-                              Store 818(r063) 820
+             815:   38(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 814
+                              Store 813(r061) 815
+             817:   38(fvec3) Load 43(inF0)
+             818:   38(fvec3) Load 44(inF1)
+             819:   38(fvec3) Load 45(inF2)
+             820:   38(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 817 818 819
+                              Store 816(r062) 820
              822:   38(fvec3) Load 43(inF0)
-             823:   38(fvec3) Load 44(inF1)
-             824:   38(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 822 823
-                              Store 821(r064) 824
-             826:   38(fvec3) Load 43(inF0)
-             827:   38(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 826
-                              Store 825(r065) 827
+             823:   38(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 822
+                              Store 821(r063) 823
+             825:   38(fvec3) Load 43(inF0)
+             826:   38(fvec3) Load 44(inF1)
+             827:   38(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 825 826
+                              Store 824(r064) 827
              829:   38(fvec3) Load 43(inF0)
-             830:   38(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 829
-                              Store 828(r066) 830
+             830:   38(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 829
+                              Store 828(r065) 830
              832:   38(fvec3) Load 43(inF0)
-             833:   38(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 832
-                              Store 831(r067) 833
-                              ReturnValue 835
+             833:   38(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 832
+                              Store 831(r066) 833
+             835:   38(fvec3) Load 43(inF0)
+             836:   38(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 835
+                              Store 834(r067) 836
+                              ReturnValue 838
                               FunctionEnd
 60(PixelShaderFunction(vf4;vf4;vf4;vu4;vu4;):   50(fvec4) Function None 54
         55(inF0):     51(ptr) FunctionParameter
@@ -7203,1006 +7222,1006 @@
         58(inU0):     53(ptr) FunctionParameter
         59(inU1):     53(ptr) FunctionParameter
               61:             Label
-       838(r000):    138(ptr) Variable Function
-       844(r001):     51(ptr) Variable Function
-       847(r002):     51(ptr) Variable Function
-       850(r003):    138(ptr) Variable Function
-       854(r004):     51(ptr) Variable Function
-       859(r005):    858(ptr) Variable Function
-       862(r006):     53(ptr) Variable Function
-       865(r007):     51(ptr) Variable Function
-       868(r009):     51(ptr) Variable Function
-       871(r010):     51(ptr) Variable Function
-       875(r011):     51(ptr) Variable Function
-       878(r012):     51(ptr) Variable Function
-       896(r013):     51(ptr) Variable Function
-       899(r014):     51(ptr) Variable Function
-       902(r015):     53(ptr) Variable Function
-       905(r016):     51(ptr) Variable Function
-       908(r017):     51(ptr) Variable Function
-       911(r018):     51(ptr) Variable Function
-       914(r019):     51(ptr) Variable Function
-       917(r020):     51(ptr) Variable Function
-       920(r021):     51(ptr) Variable Function
-       923(r022):     51(ptr) Variable Function
-       926(r023):      7(ptr) Variable Function
-       930(r024):      7(ptr) Variable Function
-       934(r025):     51(ptr) Variable Function
-       945(r029):     51(ptr) Variable Function
-       948(r030):     51(ptr) Variable Function
-       951(r031):     51(ptr) Variable Function
-       956(r032):     53(ptr) Variable Function
-       961(r033):     53(ptr) Variable Function
-       963(r034):     51(ptr) Variable Function
-       966(r036):     51(ptr) Variable Function
-       970(r037):     51(ptr) Variable Function
-       973(r039):     51(ptr) Variable Function
-       977(r040):    976(ptr) Variable Function
-       980(r041):    976(ptr) Variable Function
-       983(r042):     51(ptr) Variable Function
-      987(r039a):     51(ptr) Variable Function
-       992(r043):      7(ptr) Variable Function
-       995(r044):     51(ptr) Variable Function
-       998(r045):     51(ptr) Variable Function
-      1002(r046):     51(ptr) Variable Function
-      1005(r047):     51(ptr) Variable Function
-      1009(r048):     51(ptr) Variable Function
-      1013(r049):     51(ptr) Variable Function
-      1016(r050):     51(ptr) Variable Function
-      1020(r051):     51(ptr) Variable Function
-      1023(r052):     51(ptr) Variable Function
-      1027(r053):     51(ptr) Variable Function
-      1031(r054):     51(ptr) Variable Function
-      1035(r055):     53(ptr) Variable Function
-      1038(r056):     51(ptr) Variable Function
-      1041(r057):     51(ptr) Variable Function
-      1044(r058):     51(ptr) Variable Function
-      1049(r059):     51(ptr) Variable Function
-      1052(r060):     51(ptr) Variable Function
-      1059(r061):     51(ptr) Variable Function
-      1062(r062):     51(ptr) Variable Function
-      1067(r063):     51(ptr) Variable Function
-      1070(r064):     51(ptr) Variable Function
-      1074(r065):     51(ptr) Variable Function
-      1077(r066):     51(ptr) Variable Function
-      1080(r067):     51(ptr) Variable Function
-             839:   50(fvec4) Load 55(inF0)
-             842:  840(bvec4) FOrdNotEqual 839 841
-             843:   137(bool) All 842
-                              Store 838(r000) 843
-             845:   50(fvec4) Load 55(inF0)
-             846:   50(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 845
-                              Store 844(r001) 846
+       841(r000):    138(ptr) Variable Function
+       847(r001):     51(ptr) Variable Function
+       850(r002):     51(ptr) Variable Function
+       853(r003):    138(ptr) Variable Function
+       857(r004):     51(ptr) Variable Function
+       862(r005):    861(ptr) Variable Function
+       865(r006):     53(ptr) Variable Function
+       868(r007):     51(ptr) Variable Function
+       871(r009):     51(ptr) Variable Function
+       874(r010):     51(ptr) Variable Function
+       878(r011):     51(ptr) Variable Function
+       881(r012):     51(ptr) Variable Function
+       899(r013):     51(ptr) Variable Function
+       902(r014):     51(ptr) Variable Function
+       905(r015):     53(ptr) Variable Function
+       908(r016):     51(ptr) Variable Function
+       911(r017):     51(ptr) Variable Function
+       914(r018):     51(ptr) Variable Function
+       917(r019):     51(ptr) Variable Function
+       920(r020):     51(ptr) Variable Function
+       923(r021):     51(ptr) Variable Function
+       926(r022):     51(ptr) Variable Function
+       929(r023):      7(ptr) Variable Function
+       933(r024):      7(ptr) Variable Function
+       937(r025):     51(ptr) Variable Function
+       948(r029):     51(ptr) Variable Function
+       951(r030):     51(ptr) Variable Function
+       954(r031):     51(ptr) Variable Function
+       959(r032):     53(ptr) Variable Function
+       964(r033):     53(ptr) Variable Function
+       966(r034):     51(ptr) Variable Function
+       969(r036):     51(ptr) Variable Function
+       973(r037):     51(ptr) Variable Function
+       976(r039):     51(ptr) Variable Function
+       980(r040):    979(ptr) Variable Function
+       983(r041):    979(ptr) Variable Function
+       986(r042):     51(ptr) Variable Function
+      990(r039a):     51(ptr) Variable Function
+       995(r043):      7(ptr) Variable Function
+       998(r044):     51(ptr) Variable Function
+      1001(r045):     51(ptr) Variable Function
+      1005(r046):     51(ptr) Variable Function
+      1008(r047):     51(ptr) Variable Function
+      1012(r048):     51(ptr) Variable Function
+      1016(r049):     51(ptr) Variable Function
+      1019(r050):     51(ptr) Variable Function
+      1023(r051):     51(ptr) Variable Function
+      1026(r052):     51(ptr) Variable Function
+      1030(r053):     51(ptr) Variable Function
+      1034(r054):     51(ptr) Variable Function
+      1038(r055):     53(ptr) Variable Function
+      1041(r056):     51(ptr) Variable Function
+      1044(r057):     51(ptr) Variable Function
+      1047(r058):     51(ptr) Variable Function
+      1052(r059):     51(ptr) Variable Function
+      1055(r060):     51(ptr) Variable Function
+      1062(r061):     51(ptr) Variable Function
+      1065(r062):     51(ptr) Variable Function
+      1070(r063):     51(ptr) Variable Function
+      1073(r064):     51(ptr) Variable Function
+      1077(r065):     51(ptr) Variable Function
+      1080(r066):     51(ptr) Variable Function
+      1083(r067):     51(ptr) Variable Function
+             842:   50(fvec4) Load 55(inF0)
+             845:  843(bvec4) FOrdNotEqual 842 844
+             846:   137(bool) All 845
+                              Store 841(r000) 846
              848:   50(fvec4) Load 55(inF0)
-             849:   50(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 848
-                              Store 847(r002) 849
+             849:   50(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 848
+                              Store 847(r001) 849
              851:   50(fvec4) Load 55(inF0)
-             852:  840(bvec4) FOrdNotEqual 851 841
-             853:   137(bool) Any 852
-                              Store 850(r003) 853
-             855:   50(fvec4) Load 55(inF0)
-             856:   50(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 855
-                              Store 854(r004) 856
-             860:   50(fvec4) Load 55(inF0)
-             861:  857(ivec4) Bitcast 860
-                              Store 859(r005) 861
+             852:   50(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 851
+                              Store 850(r002) 852
+             854:   50(fvec4) Load 55(inF0)
+             855:  843(bvec4) FOrdNotEqual 854 844
+             856:   137(bool) Any 855
+                              Store 853(r003) 856
+             858:   50(fvec4) Load 55(inF0)
+             859:   50(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 858
+                              Store 857(r004) 859
              863:   50(fvec4) Load 55(inF0)
-             864:   52(ivec4) Bitcast 863
-                              Store 862(r006) 864
-             866:   52(ivec4) Load 58(inU0)
-             867:   50(fvec4) Bitcast 866
-                              Store 865(r007) 867
-             869:   50(fvec4) Load 55(inF0)
-             870:   50(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 869
-                              Store 868(r009) 870
+             864:  860(ivec4) Bitcast 863
+                              Store 862(r005) 864
+             866:   50(fvec4) Load 55(inF0)
+             867:   52(ivec4) Bitcast 866
+                              Store 865(r006) 867
+             869:   52(ivec4) Load 58(inU0)
+             870:   50(fvec4) Bitcast 869
+                              Store 868(r007) 870
              872:   50(fvec4) Load 55(inF0)
-             873:   50(fvec4) Load 56(inF1)
-             874:   50(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 872 873
-                              Store 871(r010) 874
-             876:   50(fvec4) Load 55(inF0)
-             877:   50(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 876
-                              Store 875(r011) 877
+             873:   50(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 872
+                              Store 871(r009) 873
+             875:   50(fvec4) Load 55(inF0)
+             876:   50(fvec4) Load 56(inF1)
+             877:   50(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 875 876
+                              Store 874(r010) 877
              879:   50(fvec4) Load 55(inF0)
-             880:   50(fvec4) Load 56(inF1)
-             881:   50(fvec4) Load 57(inF2)
-             882:   50(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 879 880 881
-                              Store 878(r012) 882
-             883:   50(fvec4) Load 55(inF0)
-             884:  840(bvec4) FOrdLessThan 883 841
-             885:   137(bool) Any 884
-                              SelectionMerge 887 None
-                              BranchConditional 885 886 887
-             886:               Label
+             880:   50(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 879
+                              Store 878(r011) 880
+             882:   50(fvec4) Load 55(inF0)
+             883:   50(fvec4) Load 56(inF1)
+             884:   50(fvec4) Load 57(inF2)
+             885:   50(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 882 883 884
+                              Store 881(r012) 885
+             886:   50(fvec4) Load 55(inF0)
+             887:  843(bvec4) FOrdLessThan 886 844
+             888:   137(bool) Any 887
+                              SelectionMerge 890 None
+                              BranchConditional 888 889 890
+             889:               Label
                                 Kill
-             887:             Label
-             889:   52(ivec4) Load 58(inU0)
-             891:  840(bvec4) ULessThan 889 890
-             892:   137(bool) Any 891
-                              SelectionMerge 894 None
-                              BranchConditional 892 893 894
-             893:               Label
+             890:             Label
+             892:   52(ivec4) Load 58(inU0)
+             894:  843(bvec4) ULessThan 892 893
+             895:   137(bool) Any 894
+                              SelectionMerge 897 None
+                              BranchConditional 895 896 897
+             896:               Label
                                 Kill
-             894:             Label
-             897:   50(fvec4) Load 55(inF0)
-             898:   50(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 897
-                              Store 896(r013) 898
+             897:             Label
              900:   50(fvec4) Load 55(inF0)
-             901:   50(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 900
-                              Store 899(r014) 901
-             904:   52(ivec4) BitCount 903
-                              Store 902(r015) 904
-             906:   50(fvec4) Load 55(inF0)
-             907:   50(fvec4) DPdx 906
-                              Store 905(r016) 907
+             901:   50(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 900
+                              Store 899(r013) 901
+             903:   50(fvec4) Load 55(inF0)
+             904:   50(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 903
+                              Store 902(r014) 904
+             907:   52(ivec4) BitCount 906
+                              Store 905(r015) 907
              909:   50(fvec4) Load 55(inF0)
-             910:   50(fvec4) DPdxCoarse 909
-                              Store 908(r017) 910
+             910:   50(fvec4) DPdx 909
+                              Store 908(r016) 910
              912:   50(fvec4) Load 55(inF0)
-             913:   50(fvec4) DPdxFine 912
-                              Store 911(r018) 913
+             913:   50(fvec4) DPdxCoarse 912
+                              Store 911(r017) 913
              915:   50(fvec4) Load 55(inF0)
-             916:   50(fvec4) DPdy 915
-                              Store 914(r019) 916
+             916:   50(fvec4) DPdxFine 915
+                              Store 914(r018) 916
              918:   50(fvec4) Load 55(inF0)
-             919:   50(fvec4) DPdyCoarse 918
-                              Store 917(r020) 919
+             919:   50(fvec4) DPdy 918
+                              Store 917(r019) 919
              921:   50(fvec4) Load 55(inF0)
-             922:   50(fvec4) DPdyFine 921
-                              Store 920(r021) 922
+             922:   50(fvec4) DPdyCoarse 921
+                              Store 920(r020) 922
              924:   50(fvec4) Load 55(inF0)
-             925:   50(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 924
-                              Store 923(r022) 925
+             925:   50(fvec4) DPdyFine 924
+                              Store 923(r021) 925
              927:   50(fvec4) Load 55(inF0)
-             928:   50(fvec4) Load 56(inF1)
-             929:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 927 928
-                              Store 926(r023) 929
-             931:   50(fvec4) Load 55(inF0)
-             932:   50(fvec4) Load 56(inF1)
-             933:    6(float) Dot 931 932
-                              Store 930(r024) 933
-             935:      7(ptr) AccessChain 55(inF0) 537
-             936:    6(float) Load 935
-             937:      7(ptr) AccessChain 56(inF1) 537
-             938:    6(float) Load 937
-             939:    6(float) FMul 936 938
-             940:      7(ptr) AccessChain 55(inF0) 538
+             928:   50(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 927
+                              Store 926(r022) 928
+             930:   50(fvec4) Load 55(inF0)
+             931:   50(fvec4) Load 56(inF1)
+             932:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 930 931
+                              Store 929(r023) 932
+             934:   50(fvec4) Load 55(inF0)
+             935:   50(fvec4) Load 56(inF1)
+             936:    6(float) Dot 934 935
+                              Store 933(r024) 936
+             938:      7(ptr) AccessChain 55(inF0) 540
+             939:    6(float) Load 938
+             940:      7(ptr) AccessChain 56(inF1) 540
              941:    6(float) Load 940
-             942:      7(ptr) AccessChain 56(inF1) 654
-             943:    6(float) Load 942
-             944:   50(fvec4) CompositeConstruct 293 939 941 943
-                              Store 934(r025) 944
-             946:   50(fvec4) Load 55(inF0)
-             947:   50(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 946
-                              Store 945(r029) 947
+             942:    6(float) FMul 939 941
+             943:      7(ptr) AccessChain 55(inF0) 541
+             944:    6(float) Load 943
+             945:      7(ptr) AccessChain 56(inF1) 657
+             946:    6(float) Load 945
+             947:   50(fvec4) CompositeConstruct 297 942 944 946
+                              Store 937(r025) 947
              949:   50(fvec4) Load 55(inF0)
-             950:   50(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 949
-                              Store 948(r030) 950
+             950:   50(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 949
+                              Store 948(r029) 950
              952:   50(fvec4) Load 55(inF0)
-             953:   50(fvec4) Load 56(inF1)
-             954:   50(fvec4) Load 57(inF2)
-             955:   50(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 952 953 954
-                              Store 951(r031) 955
-             960:   52(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 959
-                              Store 956(r032) 960
-             962:   52(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 959
-                              Store 961(r033) 962
-             964:   50(fvec4) Load 55(inF0)
-             965:   50(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 964
-                              Store 963(r034) 965
+             953:   50(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 952
+                              Store 951(r030) 953
+             955:   50(fvec4) Load 55(inF0)
+             956:   50(fvec4) Load 56(inF1)
+             957:   50(fvec4) Load 57(inF2)
+             958:   50(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 955 956 957
+                              Store 954(r031) 958
+             963:   52(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 962
+                              Store 959(r032) 963
+             965:   52(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 962
+                              Store 964(r033) 965
              967:   50(fvec4) Load 55(inF0)
-             968:   50(fvec4) Load 56(inF1)
-             969:   50(fvec4) FMod 967 968
-                              Store 966(r036) 969
-             971:   50(fvec4) Load 55(inF0)
-             972:   50(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 971
-                              Store 970(r037) 972
+             968:   50(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 967
+                              Store 966(r034) 968
+             970:   50(fvec4) Load 55(inF0)
+             971:   50(fvec4) Load 56(inF1)
+             972:   50(fvec4) FMod 970 971
+                              Store 969(r036) 972
              974:   50(fvec4) Load 55(inF0)
-             975:   50(fvec4) Fwidth 974
-                              Store 973(r039) 975
-             978:   50(fvec4) Load 55(inF0)
-             979:  840(bvec4) IsInf 978
-                              Store 977(r040) 979
+             975:   50(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 974
+                              Store 973(r037) 975
+             977:   50(fvec4) Load 55(inF0)
+             978:   50(fvec4) Fwidth 977
+                              Store 976(r039) 978
              981:   50(fvec4) Load 55(inF0)
-             982:  840(bvec4) IsNan 981
-                              Store 980(r041) 982
+             982:  843(bvec4) IsInf 981
+                              Store 980(r040) 982
              984:   50(fvec4) Load 55(inF0)
-             985:   50(fvec4) Load 56(inF1)
-             986:   50(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 984 985
-                              Store 983(r042) 986
-             988:   50(fvec4) Load 55(inF0)
-             989:   50(fvec4) Load 56(inF1)
-             990:   50(fvec4) Load 57(inF2)
-             991:   50(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 988 989 990
-                              Store 987(r039a) 991
-             993:   50(fvec4) Load 55(inF0)
-             994:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 993
-                              Store 992(r043) 994
+             985:  843(bvec4) IsNan 984
+                              Store 983(r041) 985
+             987:   50(fvec4) Load 55(inF0)
+             988:   50(fvec4) Load 56(inF1)
+             989:   50(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 987 988
+                              Store 986(r042) 989
+             991:   50(fvec4) Load 55(inF0)
+             992:   50(fvec4) Load 56(inF1)
+             993:   50(fvec4) Load 57(inF2)
+             994:   50(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 991 992 993
+                              Store 990(r039a) 994
              996:   50(fvec4) Load 55(inF0)
-             997:   50(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 996
-                              Store 995(r044) 997
+             997:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 996
+                              Store 995(r043) 997
              999:   50(fvec4) Load 55(inF0)
-            1000:   50(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 999
-            1001:   50(fvec4) VectorTimesScalar 1000 272
-                              Store 998(r045) 1001
-            1003:   50(fvec4) Load 55(inF0)
-            1004:   50(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 1003
-                              Store 1002(r046) 1004
+            1000:   50(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 999
+                              Store 998(r044) 1000
+            1002:   50(fvec4) Load 55(inF0)
+            1003:   50(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 1002
+            1004:   50(fvec4) VectorTimesScalar 1003 276
+                              Store 1001(r045) 1004
             1006:   50(fvec4) Load 55(inF0)
-            1007:   50(fvec4) Load 56(inF1)
-            1008:   50(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 1006 1007
-                              Store 1005(r047) 1008
-            1010:   50(fvec4) Load 55(inF0)
-            1011:   50(fvec4) Load 56(inF1)
-            1012:   50(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 1010 1011
-                              Store 1009(r048) 1012
-            1014:   50(fvec4) Load 55(inF0)
-            1015:   50(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 1014
-                              Store 1013(r049) 1015
+            1007:   50(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 1006
+                              Store 1005(r046) 1007
+            1009:   50(fvec4) Load 55(inF0)
+            1010:   50(fvec4) Load 56(inF1)
+            1011:   50(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 1009 1010
+                              Store 1008(r047) 1011
+            1013:   50(fvec4) Load 55(inF0)
+            1014:   50(fvec4) Load 56(inF1)
+            1015:   50(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 1013 1014
+                              Store 1012(r048) 1015
             1017:   50(fvec4) Load 55(inF0)
-            1018:   50(fvec4) Load 56(inF1)
-            1019:   50(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 1017 1018
-                              Store 1016(r050) 1019
-            1021:   50(fvec4) Load 55(inF0)
-            1022:   50(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 1021
-                              Store 1020(r051) 1022
+            1018:   50(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 1017
+                              Store 1016(r049) 1018
+            1020:   50(fvec4) Load 55(inF0)
+            1021:   50(fvec4) Load 56(inF1)
+            1022:   50(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 1020 1021
+                              Store 1019(r050) 1022
             1024:   50(fvec4) Load 55(inF0)
-            1025:   50(fvec4) CompositeConstruct 293 293 293 293
-            1026:   50(fvec4) FDiv 1025 1024
-                              Store 1023(r052) 1026
-            1028:   50(fvec4) Load 55(inF0)
-            1029:   50(fvec4) Load 56(inF1)
-            1030:   50(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 1028 1029
-                              Store 1027(r053) 1030
-            1032:   50(fvec4) Load 55(inF0)
-            1033:   50(fvec4) Load 56(inF1)
-            1034:   50(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1032 1033 534
-                              Store 1031(r054) 1034
-            1037:   52(ivec4) BitReverse 1036
-                              Store 1035(r055) 1037
-            1039:   50(fvec4) Load 55(inF0)
-            1040:   50(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1039
-                              Store 1038(r056) 1040
+            1025:   50(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 1024
+                              Store 1023(r051) 1025
+            1027:   50(fvec4) Load 55(inF0)
+            1028:   50(fvec4) CompositeConstruct 297 297 297 297
+            1029:   50(fvec4) FDiv 1028 1027
+                              Store 1026(r052) 1029
+            1031:   50(fvec4) Load 55(inF0)
+            1032:   50(fvec4) Load 56(inF1)
+            1033:   50(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 1031 1032
+                              Store 1030(r053) 1033
+            1035:   50(fvec4) Load 55(inF0)
+            1036:   50(fvec4) Load 56(inF1)
+            1037:   50(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1035 1036 247
+                              Store 1034(r054) 1037
+            1040:   52(ivec4) BitReverse 1039
+                              Store 1038(r055) 1040
             1042:   50(fvec4) Load 55(inF0)
-            1043:   50(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1042
-                              Store 1041(r057) 1043
+            1043:   50(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1042
+                              Store 1041(r056) 1043
             1045:   50(fvec4) Load 55(inF0)
-            1046:   50(fvec4) CompositeConstruct 141 141 141 141
-            1047:   50(fvec4) CompositeConstruct 293 293 293 293
-            1048:   50(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 1045 1046 1047
-                              Store 1044(r058) 1048
-            1050:   50(fvec4) Load 55(inF0)
-            1051:   50(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 1050
-                              Store 1049(r059) 1051
+            1046:   50(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1045
+                              Store 1044(r057) 1046
+            1048:   50(fvec4) Load 55(inF0)
+            1049:   50(fvec4) CompositeConstruct 141 141 141 141
+            1050:   50(fvec4) CompositeConstruct 297 297 297 297
+            1051:   50(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 1048 1049 1050
+                              Store 1047(r058) 1051
             1053:   50(fvec4) Load 55(inF0)
-            1054:   50(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1053
-                              Store 1052(r060) 1054
-            1055:   50(fvec4) Load 55(inF0)
-            1056:   50(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1055
-                              Store 56(inF1) 1056
-            1057:   50(fvec4) Load 55(inF0)
-            1058:   50(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1057
-                              Store 57(inF2) 1058
+            1054:   50(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 1053
+                              Store 1052(r059) 1054
+            1056:   50(fvec4) Load 55(inF0)
+            1057:   50(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1056
+                              Store 1055(r060) 1057
+            1058:   50(fvec4) Load 55(inF0)
+            1059:   50(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1058
+                              Store 56(inF1) 1059
             1060:   50(fvec4) Load 55(inF0)
-            1061:   50(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 1060
-                              Store 1059(r061) 1061
+            1061:   50(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1060
+                              Store 57(inF2) 1061
             1063:   50(fvec4) Load 55(inF0)
-            1064:   50(fvec4) Load 56(inF1)
-            1065:   50(fvec4) Load 57(inF2)
-            1066:   50(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 1063 1064 1065
-                              Store 1062(r062) 1066
-            1068:   50(fvec4) Load 55(inF0)
-            1069:   50(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 1068
-                              Store 1067(r063) 1069
+            1064:   50(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 1063
+                              Store 1062(r061) 1064
+            1066:   50(fvec4) Load 55(inF0)
+            1067:   50(fvec4) Load 56(inF1)
+            1068:   50(fvec4) Load 57(inF2)
+            1069:   50(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 1066 1067 1068
+                              Store 1065(r062) 1069
             1071:   50(fvec4) Load 55(inF0)
-            1072:   50(fvec4) Load 56(inF1)
-            1073:   50(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 1071 1072
-                              Store 1070(r064) 1073
-            1075:   50(fvec4) Load 55(inF0)
-            1076:   50(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 1075
-                              Store 1074(r065) 1076
+            1072:   50(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 1071
+                              Store 1070(r063) 1072
+            1074:   50(fvec4) Load 55(inF0)
+            1075:   50(fvec4) Load 56(inF1)
+            1076:   50(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 1074 1075
+                              Store 1073(r064) 1076
             1078:   50(fvec4) Load 55(inF0)
-            1079:   50(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 1078
-                              Store 1077(r066) 1079
+            1079:   50(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 1078
+                              Store 1077(r065) 1079
             1081:   50(fvec4) Load 55(inF0)
-            1082:   50(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 1081
-                              Store 1080(r067) 1082
-                              ReturnValue 1084
+            1082:   50(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 1081
+                              Store 1080(r066) 1082
+            1084:   50(fvec4) Load 55(inF0)
+            1085:   50(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 1084
+                              Store 1083(r067) 1085
+                              ReturnValue 1087
                               FunctionEnd
 68(PixelShaderFunction2x2(mf22;mf22;mf22;):          62 Function None 64
         65(inF0):     63(ptr) FunctionParameter
         66(inF1):     63(ptr) FunctionParameter
         67(inF2):     63(ptr) FunctionParameter
               69:             Label
-      1087(r000):    138(ptr) Variable Function
-      1092(r001):     63(ptr) Variable Function
-      1097(r003):    138(ptr) Variable Function
-      1101(r004):     63(ptr) Variable Function
-      1104(r005):     63(ptr) Variable Function
-      1107(r006):     63(ptr) Variable Function
-      1111(r007):     63(ptr) Variable Function
-      1121(r008):     63(ptr) Variable Function
-      1126(r009):     63(ptr) Variable Function
-      1129(r010):     63(ptr) Variable Function
-      1132(r011):     63(ptr) Variable Function
-      1135(r012):     63(ptr) Variable Function
-      1138(r013):     63(ptr) Variable Function
-      1141(r014):     63(ptr) Variable Function
-      1144(r015):     63(ptr) Variable Function
-      1147(r016):     63(ptr) Variable Function
-      1150(r017):     63(ptr) Variable Function
-      1153(r018):      7(ptr) Variable Function
-      1156(r019):     63(ptr) Variable Function
-      1159(R020):     63(ptr) Variable Function
-      1162(r021):     63(ptr) Variable Function
-      1165(r022):     63(ptr) Variable Function
-      1175(r023):     63(ptr) Variable Function
-      1178(r025):     63(ptr) Variable Function
-      1181(r026):     63(ptr) Variable Function
-     1185(r026a):     63(ptr) Variable Function
-      1190(r027):     63(ptr) Variable Function
-      1193(r028):     63(ptr) Variable Function
-      1197(r029):     63(ptr) Variable Function
-      1200(r030):     63(ptr) Variable Function
-      1204(r031):     63(ptr) Variable Function
-      1208(r032):     63(ptr) Variable Function
-      1212(r033):     63(ptr) Variable Function
-      1215(r034):     63(ptr) Variable Function
-      1218(r035):     63(ptr) Variable Function
-      1221(r036):     63(ptr) Variable Function
-      1226(r037):     63(ptr) Variable Function
-      1229(r038):     63(ptr) Variable Function
-      1236(r039):     63(ptr) Variable Function
-      1239(r049):     63(ptr) Variable Function
-      1244(r041):     63(ptr) Variable Function
-      1247(r042):     63(ptr) Variable Function
-      1251(r043):     63(ptr) Variable Function
-      1254(r044):     63(ptr) Variable Function
-      1259(r046):     63(ptr) Variable Function
-            1088:          62 Load 65(inF0)
-            1090:        1089 FOrdNotEqual 1088 141
-            1091:   137(bool) All 1090
-                              Store 1087(r000) 1091
-            1093:          62 Load 65(inF0)
-            1094:          62 ExtInst 1(GLSL.std.450) 4(FAbs) 1093
-                              Store 1092(r001) 1094
-            1095:          62 Load 65(inF0)
-            1096:          62 ExtInst 1(GLSL.std.450) 17(Acos) 1095
+      1090(r000):    138(ptr) Variable Function
+      1095(r001):     63(ptr) Variable Function
+      1100(r003):    138(ptr) Variable Function
+      1104(r004):     63(ptr) Variable Function
+      1107(r005):     63(ptr) Variable Function
+      1110(r006):     63(ptr) Variable Function
+      1114(r007):     63(ptr) Variable Function
+      1124(r008):     63(ptr) Variable Function
+      1129(r009):     63(ptr) Variable Function
+      1132(r010):     63(ptr) Variable Function
+      1135(r011):     63(ptr) Variable Function
+      1138(r012):     63(ptr) Variable Function
+      1141(r013):     63(ptr) Variable Function
+      1144(r014):     63(ptr) Variable Function
+      1147(r015):     63(ptr) Variable Function
+      1150(r016):     63(ptr) Variable Function
+      1153(r017):     63(ptr) Variable Function
+      1156(r018):      7(ptr) Variable Function
+      1159(r019):     63(ptr) Variable Function
+      1162(R020):     63(ptr) Variable Function
+      1165(r021):     63(ptr) Variable Function
+      1168(r022):     63(ptr) Variable Function
+      1178(r023):     63(ptr) Variable Function
+      1181(r025):     63(ptr) Variable Function
+      1184(r026):     63(ptr) Variable Function
+     1188(r026a):     63(ptr) Variable Function
+      1193(r027):     63(ptr) Variable Function
+      1196(r028):     63(ptr) Variable Function
+      1200(r029):     63(ptr) Variable Function
+      1203(r030):     63(ptr) Variable Function
+      1207(r031):     63(ptr) Variable Function
+      1211(r032):     63(ptr) Variable Function
+      1215(r033):     63(ptr) Variable Function
+      1218(r034):     63(ptr) Variable Function
+      1221(r035):     63(ptr) Variable Function
+      1224(r036):     63(ptr) Variable Function
+      1229(r037):     63(ptr) Variable Function
+      1232(r038):     63(ptr) Variable Function
+      1239(r039):     63(ptr) Variable Function
+      1242(r049):     63(ptr) Variable Function
+      1247(r041):     63(ptr) Variable Function
+      1250(r042):     63(ptr) Variable Function
+      1254(r043):     63(ptr) Variable Function
+      1257(r044):     63(ptr) Variable Function
+      1262(r046):     63(ptr) Variable Function
+            1091:          62 Load 65(inF0)
+            1093:        1092 FOrdNotEqual 1091 141
+            1094:   137(bool) All 1093
+                              Store 1090(r000) 1094
+            1096:          62 Load 65(inF0)
+            1097:          62 ExtInst 1(GLSL.std.450) 4(FAbs) 1096
+                              Store 1095(r001) 1097
             1098:          62 Load 65(inF0)
-            1099:        1089 FOrdNotEqual 1098 141
-            1100:   137(bool) Any 1099
-                              Store 1097(r003) 1100
-            1102:          62 Load 65(inF0)
-            1103:          62 ExtInst 1(GLSL.std.450) 16(Asin) 1102
-                              Store 1101(r004) 1103
+            1099:          62 ExtInst 1(GLSL.std.450) 17(Acos) 1098
+            1101:          62 Load 65(inF0)
+            1102:        1092 FOrdNotEqual 1101 141
+            1103:   137(bool) Any 1102
+                              Store 1100(r003) 1103
             1105:          62 Load 65(inF0)
-            1106:          62 ExtInst 1(GLSL.std.450) 18(Atan) 1105
-                              Store 1104(r005) 1106
+            1106:          62 ExtInst 1(GLSL.std.450) 16(Asin) 1105
+                              Store 1104(r004) 1106
             1108:          62 Load 65(inF0)
-            1109:          62 Load 66(inF1)
-            1110:          62 ExtInst 1(GLSL.std.450) 25(Atan2) 1108 1109
-                              Store 1107(r006) 1110
-            1112:          62 Load 65(inF0)
-            1113:          62 ExtInst 1(GLSL.std.450) 9(Ceil) 1112
-                              Store 1111(r007) 1113
-            1114:          62 Load 65(inF0)
-            1116:        1089 FOrdLessThan 1114 1115
-            1117:   137(bool) Any 1116
-                              SelectionMerge 1119 None
-                              BranchConditional 1117 1118 1119
-            1118:               Label
+            1109:          62 ExtInst 1(GLSL.std.450) 18(Atan) 1108
+                              Store 1107(r005) 1109
+            1111:          62 Load 65(inF0)
+            1112:          62 Load 66(inF1)
+            1113:          62 ExtInst 1(GLSL.std.450) 25(Atan2) 1111 1112
+                              Store 1110(r006) 1113
+            1115:          62 Load 65(inF0)
+            1116:          62 ExtInst 1(GLSL.std.450) 9(Ceil) 1115
+                              Store 1114(r007) 1116
+            1117:          62 Load 65(inF0)
+            1119:        1092 FOrdLessThan 1117 1118
+            1120:   137(bool) Any 1119
+                              SelectionMerge 1122 None
+                              BranchConditional 1120 1121 1122
+            1121:               Label
                                 Kill
-            1119:             Label
-            1122:          62 Load 65(inF0)
-            1123:          62 Load 66(inF1)
-            1124:          62 Load 67(inF2)
-            1125:          62 ExtInst 1(GLSL.std.450) 43(FClamp) 1122 1123 1124
-                              Store 1121(r008) 1125
-            1127:          62 Load 65(inF0)
-            1128:          62 ExtInst 1(GLSL.std.450) 14(Cos) 1127
-                              Store 1126(r009) 1128
+            1122:             Label
+            1125:          62 Load 65(inF0)
+            1126:          62 Load 66(inF1)
+            1127:          62 Load 67(inF2)
+            1128:          62 ExtInst 1(GLSL.std.450) 43(FClamp) 1125 1126 1127
+                              Store 1124(r008) 1128
             1130:          62 Load 65(inF0)
-            1131:          62 ExtInst 1(GLSL.std.450) 20(Cosh) 1130
-                              Store 1129(r010) 1131
+            1131:          62 ExtInst 1(GLSL.std.450) 14(Cos) 1130
+                              Store 1129(r009) 1131
             1133:          62 Load 65(inF0)
-            1134:          62 DPdx 1133
-                              Store 1132(r011) 1134
+            1134:          62 ExtInst 1(GLSL.std.450) 20(Cosh) 1133
+                              Store 1132(r010) 1134
             1136:          62 Load 65(inF0)
-            1137:          62 DPdxCoarse 1136
-                              Store 1135(r012) 1137
+            1137:          62 DPdx 1136
+                              Store 1135(r011) 1137
             1139:          62 Load 65(inF0)
-            1140:          62 DPdxFine 1139
-                              Store 1138(r013) 1140
+            1140:          62 DPdxCoarse 1139
+                              Store 1138(r012) 1140
             1142:          62 Load 65(inF0)
-            1143:          62 DPdy 1142
-                              Store 1141(r014) 1143
+            1143:          62 DPdxFine 1142
+                              Store 1141(r013) 1143
             1145:          62 Load 65(inF0)
-            1146:          62 DPdyCoarse 1145
-                              Store 1144(r015) 1146
+            1146:          62 DPdy 1145
+                              Store 1144(r014) 1146
             1148:          62 Load 65(inF0)
-            1149:          62 DPdyFine 1148
-                              Store 1147(r016) 1149
+            1149:          62 DPdyCoarse 1148
+                              Store 1147(r015) 1149
             1151:          62 Load 65(inF0)
-            1152:          62 ExtInst 1(GLSL.std.450) 12(Degrees) 1151
-                              Store 1150(r017) 1152
+            1152:          62 DPdyFine 1151
+                              Store 1150(r016) 1152
             1154:          62 Load 65(inF0)
-            1155:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1154
-                              Store 1153(r018) 1155
+            1155:          62 ExtInst 1(GLSL.std.450) 12(Degrees) 1154
+                              Store 1153(r017) 1155
             1157:          62 Load 65(inF0)
-            1158:          62 ExtInst 1(GLSL.std.450) 27(Exp) 1157
-                              Store 1156(r019) 1158
+            1158:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1157
+                              Store 1156(r018) 1158
             1160:          62 Load 65(inF0)
-            1161:          62 ExtInst 1(GLSL.std.450) 29(Exp2) 1160
-                              Store 1159(R020) 1161
+            1161:          62 ExtInst 1(GLSL.std.450) 27(Exp) 1160
+                              Store 1159(r019) 1161
             1163:          62 Load 65(inF0)
-            1164:          62 ExtInst 1(GLSL.std.450) 8(Floor) 1163
-                              Store 1162(r021) 1164
+            1164:          62 ExtInst 1(GLSL.std.450) 29(Exp2) 1163
+                              Store 1162(R020) 1164
             1166:          62 Load 65(inF0)
-            1167:          62 Load 66(inF1)
-            1168:   26(fvec2) CompositeExtract 1166 0
-            1169:   26(fvec2) CompositeExtract 1167 0
-            1170:   26(fvec2) FMod 1168 1169
-            1171:   26(fvec2) CompositeExtract 1166 1
-            1172:   26(fvec2) CompositeExtract 1167 1
+            1167:          62 ExtInst 1(GLSL.std.450) 8(Floor) 1166
+                              Store 1165(r021) 1167
+            1169:          62 Load 65(inF0)
+            1170:          62 Load 66(inF1)
+            1171:   26(fvec2) CompositeExtract 1169 0
+            1172:   26(fvec2) CompositeExtract 1170 0
             1173:   26(fvec2) FMod 1171 1172
-            1174:          62 CompositeConstruct 1170 1173
-                              Store 1165(r022) 1174
-            1176:          62 Load 65(inF0)
-            1177:          62 ExtInst 1(GLSL.std.450) 10(Fract) 1176
-                              Store 1175(r023) 1177
+            1174:   26(fvec2) CompositeExtract 1169 1
+            1175:   26(fvec2) CompositeExtract 1170 1
+            1176:   26(fvec2) FMod 1174 1175
+            1177:          62 CompositeConstruct 1173 1176
+                              Store 1168(r022) 1177
             1179:          62 Load 65(inF0)
-            1180:          62 Fwidth 1179
-                              Store 1178(r025) 1180
+            1180:          62 ExtInst 1(GLSL.std.450) 10(Fract) 1179
+                              Store 1178(r023) 1180
             1182:          62 Load 65(inF0)
-            1183:          62 Load 66(inF1)
-            1184:          62 ExtInst 1(GLSL.std.450) 53(Ldexp) 1182 1183
-                              Store 1181(r026) 1184
-            1186:          62 Load 65(inF0)
-            1187:          62 Load 66(inF1)
-            1188:          62 Load 67(inF2)
-            1189:          62 ExtInst 1(GLSL.std.450) 46(FMix) 1186 1187 1188
-                              Store 1185(r026a) 1189
-            1191:          62 Load 65(inF0)
-            1192:          62 ExtInst 1(GLSL.std.450) 28(Log) 1191
-                              Store 1190(r027) 1192
+            1183:          62 Fwidth 1182
+                              Store 1181(r025) 1183
+            1185:          62 Load 65(inF0)
+            1186:          62 Load 66(inF1)
+            1187:          62 ExtInst 1(GLSL.std.450) 53(Ldexp) 1185 1186
+                              Store 1184(r026) 1187
+            1189:          62 Load 65(inF0)
+            1190:          62 Load 66(inF1)
+            1191:          62 Load 67(inF2)
+            1192:          62 ExtInst 1(GLSL.std.450) 46(FMix) 1189 1190 1191
+                              Store 1188(r026a) 1192
             1194:          62 Load 65(inF0)
-            1195:          62 ExtInst 1(GLSL.std.450) 30(Log2) 1194
-            1196:          62 MatrixTimesScalar 1195 272
-                              Store 1193(r028) 1196
-            1198:          62 Load 65(inF0)
-            1199:          62 ExtInst 1(GLSL.std.450) 30(Log2) 1198
-                              Store 1197(r029) 1199
+            1195:          62 ExtInst 1(GLSL.std.450) 28(Log) 1194
+                              Store 1193(r027) 1195
+            1197:          62 Load 65(inF0)
+            1198:          62 ExtInst 1(GLSL.std.450) 30(Log2) 1197
+            1199:          62 MatrixTimesScalar 1198 276
+                              Store 1196(r028) 1199
             1201:          62 Load 65(inF0)
-            1202:          62 Load 66(inF1)
-            1203:          62 ExtInst 1(GLSL.std.450) 40(FMax) 1201 1202
-                              Store 1200(r030) 1203
-            1205:          62 Load 65(inF0)
-            1206:          62 Load 66(inF1)
-            1207:          62 ExtInst 1(GLSL.std.450) 37(FMin) 1205 1206
-                              Store 1204(r031) 1207
-            1209:          62 Load 65(inF0)
-            1210:          62 Load 66(inF1)
-            1211:          62 ExtInst 1(GLSL.std.450) 26(Pow) 1209 1210
-                              Store 1208(r032) 1211
-            1213:          62 Load 65(inF0)
-            1214:          62 ExtInst 1(GLSL.std.450) 11(Radians) 1213
-                              Store 1212(r033) 1214
+            1202:          62 ExtInst 1(GLSL.std.450) 30(Log2) 1201
+                              Store 1200(r029) 1202
+            1204:          62 Load 65(inF0)
+            1205:          62 Load 66(inF1)
+            1206:          62 ExtInst 1(GLSL.std.450) 40(FMax) 1204 1205
+                              Store 1203(r030) 1206
+            1208:          62 Load 65(inF0)
+            1209:          62 Load 66(inF1)
+            1210:          62 ExtInst 1(GLSL.std.450) 37(FMin) 1208 1209
+                              Store 1207(r031) 1210
+            1212:          62 Load 65(inF0)
+            1213:          62 Load 66(inF1)
+            1214:          62 ExtInst 1(GLSL.std.450) 26(Pow) 1212 1213
+                              Store 1211(r032) 1214
             1216:          62 Load 65(inF0)
-            1217:          62 ExtInst 1(GLSL.std.450) 2(RoundEven) 1216
-                              Store 1215(r034) 1217
+            1217:          62 ExtInst 1(GLSL.std.450) 11(Radians) 1216
+                              Store 1215(r033) 1217
             1219:          62 Load 65(inF0)
-            1220:          62 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1219
-                              Store 1218(r035) 1220
+            1220:          62 ExtInst 1(GLSL.std.450) 2(RoundEven) 1219
+                              Store 1218(r034) 1220
             1222:          62 Load 65(inF0)
-            1223:   26(fvec2) CompositeConstruct 141 141
-            1224:   26(fvec2) CompositeConstruct 293 293
-            1225:          62 ExtInst 1(GLSL.std.450) 43(FClamp) 1222 1223 1224
-                              Store 1221(r036) 1225
-            1227:          62 Load 65(inF0)
-            1228:          62 ExtInst 1(GLSL.std.450) 6(FSign) 1227
-                              Store 1226(r037) 1228
+            1223:          62 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1222
+                              Store 1221(r035) 1223
+            1225:          62 Load 65(inF0)
+            1226:   26(fvec2) CompositeConstruct 141 141
+            1227:   26(fvec2) CompositeConstruct 297 297
+            1228:          62 ExtInst 1(GLSL.std.450) 43(FClamp) 1225 1226 1227
+                              Store 1224(r036) 1228
             1230:          62 Load 65(inF0)
-            1231:          62 ExtInst 1(GLSL.std.450) 13(Sin) 1230
-                              Store 1229(r038) 1231
-            1232:          62 Load 65(inF0)
-            1233:          62 ExtInst 1(GLSL.std.450) 13(Sin) 1232
-                              Store 66(inF1) 1233
-            1234:          62 Load 65(inF0)
-            1235:          62 ExtInst 1(GLSL.std.450) 14(Cos) 1234
-                              Store 67(inF2) 1235
+            1231:          62 ExtInst 1(GLSL.std.450) 6(FSign) 1230
+                              Store 1229(r037) 1231
+            1233:          62 Load 65(inF0)
+            1234:          62 ExtInst 1(GLSL.std.450) 13(Sin) 1233
+                              Store 1232(r038) 1234
+            1235:          62 Load 65(inF0)
+            1236:          62 ExtInst 1(GLSL.std.450) 13(Sin) 1235
+                              Store 66(inF1) 1236
             1237:          62 Load 65(inF0)
-            1238:          62 ExtInst 1(GLSL.std.450) 19(Sinh) 1237
-                              Store 1236(r039) 1238
+            1238:          62 ExtInst 1(GLSL.std.450) 14(Cos) 1237
+                              Store 67(inF2) 1238
             1240:          62 Load 65(inF0)
-            1241:          62 Load 66(inF1)
-            1242:          62 Load 67(inF2)
-            1243:          62 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1240 1241 1242
-                              Store 1239(r049) 1243
-            1245:          62 Load 65(inF0)
-            1246:          62 ExtInst 1(GLSL.std.450) 31(Sqrt) 1245
-                              Store 1244(r041) 1246
+            1241:          62 ExtInst 1(GLSL.std.450) 19(Sinh) 1240
+                              Store 1239(r039) 1241
+            1243:          62 Load 65(inF0)
+            1244:          62 Load 66(inF1)
+            1245:          62 Load 67(inF2)
+            1246:          62 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1243 1244 1245
+                              Store 1242(r049) 1246
             1248:          62 Load 65(inF0)
-            1249:          62 Load 66(inF1)
-            1250:          62 ExtInst 1(GLSL.std.450) 48(Step) 1248 1249
-                              Store 1247(r042) 1250
-            1252:          62 Load 65(inF0)
-            1253:          62 ExtInst 1(GLSL.std.450) 15(Tan) 1252
-                              Store 1251(r043) 1253
+            1249:          62 ExtInst 1(GLSL.std.450) 31(Sqrt) 1248
+                              Store 1247(r041) 1249
+            1251:          62 Load 65(inF0)
+            1252:          62 Load 66(inF1)
+            1253:          62 ExtInst 1(GLSL.std.450) 48(Step) 1251 1252
+                              Store 1250(r042) 1253
             1255:          62 Load 65(inF0)
-            1256:          62 ExtInst 1(GLSL.std.450) 21(Tanh) 1255
-                              Store 1254(r044) 1256
-            1257:          62 Load 65(inF0)
-            1258:          62 Transpose 1257
+            1256:          62 ExtInst 1(GLSL.std.450) 15(Tan) 1255
+                              Store 1254(r043) 1256
+            1258:          62 Load 65(inF0)
+            1259:          62 ExtInst 1(GLSL.std.450) 21(Tanh) 1258
+                              Store 1257(r044) 1259
             1260:          62 Load 65(inF0)
-            1261:          62 ExtInst 1(GLSL.std.450) 3(Trunc) 1260
-                              Store 1259(r046) 1261
-                              ReturnValue 1263
+            1261:          62 Transpose 1260
+            1263:          62 Load 65(inF0)
+            1264:          62 ExtInst 1(GLSL.std.450) 3(Trunc) 1263
+                              Store 1262(r046) 1264
+                              ReturnValue 1266
                               FunctionEnd
 76(PixelShaderFunction3x3(mf33;mf33;mf33;):          70 Function None 72
         73(inF0):     71(ptr) FunctionParameter
         74(inF1):     71(ptr) FunctionParameter
         75(inF2):     71(ptr) FunctionParameter
               77:             Label
-      1266(r000):    138(ptr) Variable Function
-      1271(r001):     71(ptr) Variable Function
-      1276(r003):    138(ptr) Variable Function
-      1280(r004):     71(ptr) Variable Function
-      1283(r005):     71(ptr) Variable Function
-      1286(r006):     71(ptr) Variable Function
-      1290(r007):     71(ptr) Variable Function
-      1300(r008):     71(ptr) Variable Function
-      1305(r009):     71(ptr) Variable Function
-      1308(r010):     71(ptr) Variable Function
-      1311(r011):     71(ptr) Variable Function
-      1314(r012):     71(ptr) Variable Function
-      1317(r013):     71(ptr) Variable Function
-      1320(r014):     71(ptr) Variable Function
-      1323(r015):     71(ptr) Variable Function
-      1326(r016):     71(ptr) Variable Function
-      1329(r017):     71(ptr) Variable Function
-      1332(r018):      7(ptr) Variable Function
-      1335(r019):     71(ptr) Variable Function
-      1338(R020):     71(ptr) Variable Function
-      1341(r021):     71(ptr) Variable Function
-      1344(r022):     71(ptr) Variable Function
-      1357(r023):     71(ptr) Variable Function
-      1360(r025):     71(ptr) Variable Function
-      1363(r026):     71(ptr) Variable Function
-     1367(r026a):     71(ptr) Variable Function
-      1372(r027):     71(ptr) Variable Function
-      1375(r028):     71(ptr) Variable Function
-      1379(r029):     71(ptr) Variable Function
-      1382(r030):     71(ptr) Variable Function
-      1386(r031):     71(ptr) Variable Function
-      1390(r032):     71(ptr) Variable Function
-      1394(r033):     71(ptr) Variable Function
-      1397(r034):     71(ptr) Variable Function
-      1400(r035):     71(ptr) Variable Function
-      1403(r036):     71(ptr) Variable Function
-      1408(r037):     71(ptr) Variable Function
-      1411(r038):     71(ptr) Variable Function
-      1418(r039):     71(ptr) Variable Function
-      1421(r049):     71(ptr) Variable Function
-      1426(r041):     71(ptr) Variable Function
-      1429(r042):     71(ptr) Variable Function
-      1433(r043):     71(ptr) Variable Function
-      1436(r044):     71(ptr) Variable Function
-      1441(r046):     71(ptr) Variable Function
-            1267:          70 Load 73(inF0)
-            1269:        1268 FOrdNotEqual 1267 141
-            1270:   137(bool) All 1269
-                              Store 1266(r000) 1270
-            1272:          70 Load 73(inF0)
-            1273:          70 ExtInst 1(GLSL.std.450) 4(FAbs) 1272
-                              Store 1271(r001) 1273
-            1274:          70 Load 73(inF0)
-            1275:          70 ExtInst 1(GLSL.std.450) 17(Acos) 1274
+      1269(r000):    138(ptr) Variable Function
+      1274(r001):     71(ptr) Variable Function
+      1279(r003):    138(ptr) Variable Function
+      1283(r004):     71(ptr) Variable Function
+      1286(r005):     71(ptr) Variable Function
+      1289(r006):     71(ptr) Variable Function
+      1293(r007):     71(ptr) Variable Function
+      1303(r008):     71(ptr) Variable Function
+      1308(r009):     71(ptr) Variable Function
+      1311(r010):     71(ptr) Variable Function
+      1314(r011):     71(ptr) Variable Function
+      1317(r012):     71(ptr) Variable Function
+      1320(r013):     71(ptr) Variable Function
+      1323(r014):     71(ptr) Variable Function
+      1326(r015):     71(ptr) Variable Function
+      1329(r016):     71(ptr) Variable Function
+      1332(r017):     71(ptr) Variable Function
+      1335(r018):      7(ptr) Variable Function
+      1338(r019):     71(ptr) Variable Function
+      1341(R020):     71(ptr) Variable Function
+      1344(r021):     71(ptr) Variable Function
+      1347(r022):     71(ptr) Variable Function
+      1360(r023):     71(ptr) Variable Function
+      1363(r025):     71(ptr) Variable Function
+      1366(r026):     71(ptr) Variable Function
+     1370(r026a):     71(ptr) Variable Function
+      1375(r027):     71(ptr) Variable Function
+      1378(r028):     71(ptr) Variable Function
+      1382(r029):     71(ptr) Variable Function
+      1385(r030):     71(ptr) Variable Function
+      1389(r031):     71(ptr) Variable Function
+      1393(r032):     71(ptr) Variable Function
+      1397(r033):     71(ptr) Variable Function
+      1400(r034):     71(ptr) Variable Function
+      1403(r035):     71(ptr) Variable Function
+      1406(r036):     71(ptr) Variable Function
+      1411(r037):     71(ptr) Variable Function
+      1414(r038):     71(ptr) Variable Function
+      1421(r039):     71(ptr) Variable Function
+      1424(r049):     71(ptr) Variable Function
+      1429(r041):     71(ptr) Variable Function
+      1432(r042):     71(ptr) Variable Function
+      1436(r043):     71(ptr) Variable Function
+      1439(r044):     71(ptr) Variable Function
+      1444(r046):     71(ptr) Variable Function
+            1270:          70 Load 73(inF0)
+            1272:        1271 FOrdNotEqual 1270 141
+            1273:   137(bool) All 1272
+                              Store 1269(r000) 1273
+            1275:          70 Load 73(inF0)
+            1276:          70 ExtInst 1(GLSL.std.450) 4(FAbs) 1275
+                              Store 1274(r001) 1276
             1277:          70 Load 73(inF0)
-            1278:        1268 FOrdNotEqual 1277 141
-            1279:   137(bool) Any 1278
-                              Store 1276(r003) 1279
-            1281:          70 Load 73(inF0)
-            1282:          70 ExtInst 1(GLSL.std.450) 16(Asin) 1281
-                              Store 1280(r004) 1282
+            1278:          70 ExtInst 1(GLSL.std.450) 17(Acos) 1277
+            1280:          70 Load 73(inF0)
+            1281:        1271 FOrdNotEqual 1280 141
+            1282:   137(bool) Any 1281
+                              Store 1279(r003) 1282
             1284:          70 Load 73(inF0)
-            1285:          70 ExtInst 1(GLSL.std.450) 18(Atan) 1284
-                              Store 1283(r005) 1285
+            1285:          70 ExtInst 1(GLSL.std.450) 16(Asin) 1284
+                              Store 1283(r004) 1285
             1287:          70 Load 73(inF0)
-            1288:          70 Load 74(inF1)
-            1289:          70 ExtInst 1(GLSL.std.450) 25(Atan2) 1287 1288
-                              Store 1286(r006) 1289
-            1291:          70 Load 73(inF0)
-            1292:          70 ExtInst 1(GLSL.std.450) 9(Ceil) 1291
-                              Store 1290(r007) 1292
-            1293:          70 Load 73(inF0)
-            1295:        1268 FOrdLessThan 1293 1294
-            1296:   137(bool) Any 1295
-                              SelectionMerge 1298 None
-                              BranchConditional 1296 1297 1298
-            1297:               Label
+            1288:          70 ExtInst 1(GLSL.std.450) 18(Atan) 1287
+                              Store 1286(r005) 1288
+            1290:          70 Load 73(inF0)
+            1291:          70 Load 74(inF1)
+            1292:          70 ExtInst 1(GLSL.std.450) 25(Atan2) 1290 1291
+                              Store 1289(r006) 1292
+            1294:          70 Load 73(inF0)
+            1295:          70 ExtInst 1(GLSL.std.450) 9(Ceil) 1294
+                              Store 1293(r007) 1295
+            1296:          70 Load 73(inF0)
+            1298:        1271 FOrdLessThan 1296 1297
+            1299:   137(bool) Any 1298
+                              SelectionMerge 1301 None
+                              BranchConditional 1299 1300 1301
+            1300:               Label
                                 Kill
-            1298:             Label
-            1301:          70 Load 73(inF0)
-            1302:          70 Load 74(inF1)
-            1303:          70 Load 75(inF2)
-            1304:          70 ExtInst 1(GLSL.std.450) 43(FClamp) 1301 1302 1303
-                              Store 1300(r008) 1304
-            1306:          70 Load 73(inF0)
-            1307:          70 ExtInst 1(GLSL.std.450) 14(Cos) 1306
-                              Store 1305(r009) 1307
+            1301:             Label
+            1304:          70 Load 73(inF0)
+            1305:          70 Load 74(inF1)
+            1306:          70 Load 75(inF2)
+            1307:          70 ExtInst 1(GLSL.std.450) 43(FClamp) 1304 1305 1306
+                              Store 1303(r008) 1307
             1309:          70 Load 73(inF0)
-            1310:          70 ExtInst 1(GLSL.std.450) 20(Cosh) 1309
-                              Store 1308(r010) 1310
+            1310:          70 ExtInst 1(GLSL.std.450) 14(Cos) 1309
+                              Store 1308(r009) 1310
             1312:          70 Load 73(inF0)
-            1313:          70 DPdx 1312
-                              Store 1311(r011) 1313
+            1313:          70 ExtInst 1(GLSL.std.450) 20(Cosh) 1312
+                              Store 1311(r010) 1313
             1315:          70 Load 73(inF0)
-            1316:          70 DPdxCoarse 1315
-                              Store 1314(r012) 1316
+            1316:          70 DPdx 1315
+                              Store 1314(r011) 1316
             1318:          70 Load 73(inF0)
-            1319:          70 DPdxFine 1318
-                              Store 1317(r013) 1319
+            1319:          70 DPdxCoarse 1318
+                              Store 1317(r012) 1319
             1321:          70 Load 73(inF0)
-            1322:          70 DPdy 1321
-                              Store 1320(r014) 1322
+            1322:          70 DPdxFine 1321
+                              Store 1320(r013) 1322
             1324:          70 Load 73(inF0)
-            1325:          70 DPdyCoarse 1324
-                              Store 1323(r015) 1325
+            1325:          70 DPdy 1324
+                              Store 1323(r014) 1325
             1327:          70 Load 73(inF0)
-            1328:          70 DPdyFine 1327
-                              Store 1326(r016) 1328
+            1328:          70 DPdyCoarse 1327
+                              Store 1326(r015) 1328
             1330:          70 Load 73(inF0)
-            1331:          70 ExtInst 1(GLSL.std.450) 12(Degrees) 1330
-                              Store 1329(r017) 1331
+            1331:          70 DPdyFine 1330
+                              Store 1329(r016) 1331
             1333:          70 Load 73(inF0)
-            1334:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1333
-                              Store 1332(r018) 1334
+            1334:          70 ExtInst 1(GLSL.std.450) 12(Degrees) 1333
+                              Store 1332(r017) 1334
             1336:          70 Load 73(inF0)
-            1337:          70 ExtInst 1(GLSL.std.450) 27(Exp) 1336
-                              Store 1335(r019) 1337
+            1337:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1336
+                              Store 1335(r018) 1337
             1339:          70 Load 73(inF0)
-            1340:          70 ExtInst 1(GLSL.std.450) 29(Exp2) 1339
-                              Store 1338(R020) 1340
+            1340:          70 ExtInst 1(GLSL.std.450) 27(Exp) 1339
+                              Store 1338(r019) 1340
             1342:          70 Load 73(inF0)
-            1343:          70 ExtInst 1(GLSL.std.450) 8(Floor) 1342
-                              Store 1341(r021) 1343
+            1343:          70 ExtInst 1(GLSL.std.450) 29(Exp2) 1342
+                              Store 1341(R020) 1343
             1345:          70 Load 73(inF0)
-            1346:          70 Load 74(inF1)
-            1347:   38(fvec3) CompositeExtract 1345 0
-            1348:   38(fvec3) CompositeExtract 1346 0
-            1349:   38(fvec3) FMod 1347 1348
-            1350:   38(fvec3) CompositeExtract 1345 1
-            1351:   38(fvec3) CompositeExtract 1346 1
+            1346:          70 ExtInst 1(GLSL.std.450) 8(Floor) 1345
+                              Store 1344(r021) 1346
+            1348:          70 Load 73(inF0)
+            1349:          70 Load 74(inF1)
+            1350:   38(fvec3) CompositeExtract 1348 0
+            1351:   38(fvec3) CompositeExtract 1349 0
             1352:   38(fvec3) FMod 1350 1351
-            1353:   38(fvec3) CompositeExtract 1345 2
-            1354:   38(fvec3) CompositeExtract 1346 2
+            1353:   38(fvec3) CompositeExtract 1348 1
+            1354:   38(fvec3) CompositeExtract 1349 1
             1355:   38(fvec3) FMod 1353 1354
-            1356:          70 CompositeConstruct 1349 1352 1355
-                              Store 1344(r022) 1356
-            1358:          70 Load 73(inF0)
-            1359:          70 ExtInst 1(GLSL.std.450) 10(Fract) 1358
-                              Store 1357(r023) 1359
+            1356:   38(fvec3) CompositeExtract 1348 2
+            1357:   38(fvec3) CompositeExtract 1349 2
+            1358:   38(fvec3) FMod 1356 1357
+            1359:          70 CompositeConstruct 1352 1355 1358
+                              Store 1347(r022) 1359
             1361:          70 Load 73(inF0)
-            1362:          70 Fwidth 1361
-                              Store 1360(r025) 1362
+            1362:          70 ExtInst 1(GLSL.std.450) 10(Fract) 1361
+                              Store 1360(r023) 1362
             1364:          70 Load 73(inF0)
-            1365:          70 Load 74(inF1)
-            1366:          70 ExtInst 1(GLSL.std.450) 53(Ldexp) 1364 1365
-                              Store 1363(r026) 1366
-            1368:          70 Load 73(inF0)
-            1369:          70 Load 74(inF1)
-            1370:          70 Load 75(inF2)
-            1371:          70 ExtInst 1(GLSL.std.450) 46(FMix) 1368 1369 1370
-                              Store 1367(r026a) 1371
-            1373:          70 Load 73(inF0)
-            1374:          70 ExtInst 1(GLSL.std.450) 28(Log) 1373
-                              Store 1372(r027) 1374
+            1365:          70 Fwidth 1364
+                              Store 1363(r025) 1365
+            1367:          70 Load 73(inF0)
+            1368:          70 Load 74(inF1)
+            1369:          70 ExtInst 1(GLSL.std.450) 53(Ldexp) 1367 1368
+                              Store 1366(r026) 1369
+            1371:          70 Load 73(inF0)
+            1372:          70 Load 74(inF1)
+            1373:          70 Load 75(inF2)
+            1374:          70 ExtInst 1(GLSL.std.450) 46(FMix) 1371 1372 1373
+                              Store 1370(r026a) 1374
             1376:          70 Load 73(inF0)
-            1377:          70 ExtInst 1(GLSL.std.450) 30(Log2) 1376
-            1378:          70 MatrixTimesScalar 1377 272
-                              Store 1375(r028) 1378
-            1380:          70 Load 73(inF0)
-            1381:          70 ExtInst 1(GLSL.std.450) 30(Log2) 1380
-                              Store 1379(r029) 1381
+            1377:          70 ExtInst 1(GLSL.std.450) 28(Log) 1376
+                              Store 1375(r027) 1377
+            1379:          70 Load 73(inF0)
+            1380:          70 ExtInst 1(GLSL.std.450) 30(Log2) 1379
+            1381:          70 MatrixTimesScalar 1380 276
+                              Store 1378(r028) 1381
             1383:          70 Load 73(inF0)
-            1384:          70 Load 74(inF1)
-            1385:          70 ExtInst 1(GLSL.std.450) 40(FMax) 1383 1384
-                              Store 1382(r030) 1385
-            1387:          70 Load 73(inF0)
-            1388:          70 Load 74(inF1)
-            1389:          70 ExtInst 1(GLSL.std.450) 37(FMin) 1387 1388
-                              Store 1386(r031) 1389
-            1391:          70 Load 73(inF0)
-            1392:          70 Load 74(inF1)
-            1393:          70 ExtInst 1(GLSL.std.450) 26(Pow) 1391 1392
-                              Store 1390(r032) 1393
-            1395:          70 Load 73(inF0)
-            1396:          70 ExtInst 1(GLSL.std.450) 11(Radians) 1395
-                              Store 1394(r033) 1396
+            1384:          70 ExtInst 1(GLSL.std.450) 30(Log2) 1383
+                              Store 1382(r029) 1384
+            1386:          70 Load 73(inF0)
+            1387:          70 Load 74(inF1)
+            1388:          70 ExtInst 1(GLSL.std.450) 40(FMax) 1386 1387
+                              Store 1385(r030) 1388
+            1390:          70 Load 73(inF0)
+            1391:          70 Load 74(inF1)
+            1392:          70 ExtInst 1(GLSL.std.450) 37(FMin) 1390 1391
+                              Store 1389(r031) 1392
+            1394:          70 Load 73(inF0)
+            1395:          70 Load 74(inF1)
+            1396:          70 ExtInst 1(GLSL.std.450) 26(Pow) 1394 1395
+                              Store 1393(r032) 1396
             1398:          70 Load 73(inF0)
-            1399:          70 ExtInst 1(GLSL.std.450) 2(RoundEven) 1398
-                              Store 1397(r034) 1399
+            1399:          70 ExtInst 1(GLSL.std.450) 11(Radians) 1398
+                              Store 1397(r033) 1399
             1401:          70 Load 73(inF0)
-            1402:          70 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1401
-                              Store 1400(r035) 1402
+            1402:          70 ExtInst 1(GLSL.std.450) 2(RoundEven) 1401
+                              Store 1400(r034) 1402
             1404:          70 Load 73(inF0)
-            1405:   38(fvec3) CompositeConstruct 141 141 141
-            1406:   38(fvec3) CompositeConstruct 293 293 293
-            1407:          70 ExtInst 1(GLSL.std.450) 43(FClamp) 1404 1405 1406
-                              Store 1403(r036) 1407
-            1409:          70 Load 73(inF0)
-            1410:          70 ExtInst 1(GLSL.std.450) 6(FSign) 1409
-                              Store 1408(r037) 1410
+            1405:          70 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1404
+                              Store 1403(r035) 1405
+            1407:          70 Load 73(inF0)
+            1408:   38(fvec3) CompositeConstruct 141 141 141
+            1409:   38(fvec3) CompositeConstruct 297 297 297
+            1410:          70 ExtInst 1(GLSL.std.450) 43(FClamp) 1407 1408 1409
+                              Store 1406(r036) 1410
             1412:          70 Load 73(inF0)
-            1413:          70 ExtInst 1(GLSL.std.450) 13(Sin) 1412
-                              Store 1411(r038) 1413
-            1414:          70 Load 73(inF0)
-            1415:          70 ExtInst 1(GLSL.std.450) 13(Sin) 1414
-                              Store 74(inF1) 1415
-            1416:          70 Load 73(inF0)
-            1417:          70 ExtInst 1(GLSL.std.450) 14(Cos) 1416
-                              Store 75(inF2) 1417
+            1413:          70 ExtInst 1(GLSL.std.450) 6(FSign) 1412
+                              Store 1411(r037) 1413
+            1415:          70 Load 73(inF0)
+            1416:          70 ExtInst 1(GLSL.std.450) 13(Sin) 1415
+                              Store 1414(r038) 1416
+            1417:          70 Load 73(inF0)
+            1418:          70 ExtInst 1(GLSL.std.450) 13(Sin) 1417
+                              Store 74(inF1) 1418
             1419:          70 Load 73(inF0)
-            1420:          70 ExtInst 1(GLSL.std.450) 19(Sinh) 1419
-                              Store 1418(r039) 1420
+            1420:          70 ExtInst 1(GLSL.std.450) 14(Cos) 1419
+                              Store 75(inF2) 1420
             1422:          70 Load 73(inF0)
-            1423:          70 Load 74(inF1)
-            1424:          70 Load 75(inF2)
-            1425:          70 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1422 1423 1424
-                              Store 1421(r049) 1425
-            1427:          70 Load 73(inF0)
-            1428:          70 ExtInst 1(GLSL.std.450) 31(Sqrt) 1427
-                              Store 1426(r041) 1428
+            1423:          70 ExtInst 1(GLSL.std.450) 19(Sinh) 1422
+                              Store 1421(r039) 1423
+            1425:          70 Load 73(inF0)
+            1426:          70 Load 74(inF1)
+            1427:          70 Load 75(inF2)
+            1428:          70 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1425 1426 1427
+                              Store 1424(r049) 1428
             1430:          70 Load 73(inF0)
-            1431:          70 Load 74(inF1)
-            1432:          70 ExtInst 1(GLSL.std.450) 48(Step) 1430 1431
-                              Store 1429(r042) 1432
-            1434:          70 Load 73(inF0)
-            1435:          70 ExtInst 1(GLSL.std.450) 15(Tan) 1434
-                              Store 1433(r043) 1435
+            1431:          70 ExtInst 1(GLSL.std.450) 31(Sqrt) 1430
+                              Store 1429(r041) 1431
+            1433:          70 Load 73(inF0)
+            1434:          70 Load 74(inF1)
+            1435:          70 ExtInst 1(GLSL.std.450) 48(Step) 1433 1434
+                              Store 1432(r042) 1435
             1437:          70 Load 73(inF0)
-            1438:          70 ExtInst 1(GLSL.std.450) 21(Tanh) 1437
-                              Store 1436(r044) 1438
-            1439:          70 Load 73(inF0)
-            1440:          70 Transpose 1439
+            1438:          70 ExtInst 1(GLSL.std.450) 15(Tan) 1437
+                              Store 1436(r043) 1438
+            1440:          70 Load 73(inF0)
+            1441:          70 ExtInst 1(GLSL.std.450) 21(Tanh) 1440
+                              Store 1439(r044) 1441
             1442:          70 Load 73(inF0)
-            1443:          70 ExtInst 1(GLSL.std.450) 3(Trunc) 1442
-                              Store 1441(r046) 1443
-                              ReturnValue 1445
+            1443:          70 Transpose 1442
+            1445:          70 Load 73(inF0)
+            1446:          70 ExtInst 1(GLSL.std.450) 3(Trunc) 1445
+                              Store 1444(r046) 1446
+                              ReturnValue 1448
                               FunctionEnd
 84(PixelShaderFunction4x4(mf44;mf44;mf44;):          78 Function None 80
         81(inF0):     79(ptr) FunctionParameter
         82(inF1):     79(ptr) FunctionParameter
         83(inF2):     79(ptr) FunctionParameter
               85:             Label
-      1448(r000):    138(ptr) Variable Function
-      1453(r001):     79(ptr) Variable Function
-      1458(r003):    138(ptr) Variable Function
-      1462(r004):     79(ptr) Variable Function
-      1465(r005):     79(ptr) Variable Function
-      1468(r006):     79(ptr) Variable Function
-      1472(r007):     79(ptr) Variable Function
-      1482(r008):     79(ptr) Variable Function
-      1487(r009):     79(ptr) Variable Function
-      1490(r010):     79(ptr) Variable Function
-      1493(r011):     79(ptr) Variable Function
-      1496(r012):     79(ptr) Variable Function
-      1499(r013):     79(ptr) Variable Function
-      1502(r014):     79(ptr) Variable Function
-      1505(r015):     79(ptr) Variable Function
-      1508(r016):     79(ptr) Variable Function
-      1511(r017):     79(ptr) Variable Function
-      1514(r018):      7(ptr) Variable Function
-      1517(r019):     79(ptr) Variable Function
-      1520(R020):     79(ptr) Variable Function
-      1523(r021):     79(ptr) Variable Function
-      1526(r022):     79(ptr) Variable Function
-      1542(r023):     79(ptr) Variable Function
-      1545(r025):     79(ptr) Variable Function
-      1548(r026):     79(ptr) Variable Function
-     1552(r026a):     79(ptr) Variable Function
-      1557(r027):     79(ptr) Variable Function
-      1560(r028):     79(ptr) Variable Function
-      1564(r029):     79(ptr) Variable Function
-      1567(r030):     79(ptr) Variable Function
-      1571(r031):     79(ptr) Variable Function
-      1575(r032):     79(ptr) Variable Function
-      1579(r033):     79(ptr) Variable Function
-      1582(r034):     79(ptr) Variable Function
-      1585(r035):     79(ptr) Variable Function
-      1588(r036):     79(ptr) Variable Function
-      1593(r037):     79(ptr) Variable Function
-      1596(r038):     79(ptr) Variable Function
-      1603(r039):     79(ptr) Variable Function
-      1606(r049):     79(ptr) Variable Function
-      1611(r041):     79(ptr) Variable Function
-      1614(r042):     79(ptr) Variable Function
-      1618(r043):     79(ptr) Variable Function
-      1621(r044):     79(ptr) Variable Function
-      1626(r046):     79(ptr) Variable Function
-            1449:          78 Load 81(inF0)
-            1451:        1450 FOrdNotEqual 1449 141
-            1452:   137(bool) All 1451
-                              Store 1448(r000) 1452
-            1454:          78 Load 81(inF0)
-            1455:          78 ExtInst 1(GLSL.std.450) 4(FAbs) 1454
-                              Store 1453(r001) 1455
-            1456:          78 Load 81(inF0)
-            1457:          78 ExtInst 1(GLSL.std.450) 17(Acos) 1456
+      1451(r000):    138(ptr) Variable Function
+      1456(r001):     79(ptr) Variable Function
+      1461(r003):    138(ptr) Variable Function
+      1465(r004):     79(ptr) Variable Function
+      1468(r005):     79(ptr) Variable Function
+      1471(r006):     79(ptr) Variable Function
+      1475(r007):     79(ptr) Variable Function
+      1485(r008):     79(ptr) Variable Function
+      1490(r009):     79(ptr) Variable Function
+      1493(r010):     79(ptr) Variable Function
+      1496(r011):     79(ptr) Variable Function
+      1499(r012):     79(ptr) Variable Function
+      1502(r013):     79(ptr) Variable Function
+      1505(r014):     79(ptr) Variable Function
+      1508(r015):     79(ptr) Variable Function
+      1511(r016):     79(ptr) Variable Function
+      1514(r017):     79(ptr) Variable Function
+      1517(r018):      7(ptr) Variable Function
+      1520(r019):     79(ptr) Variable Function
+      1523(R020):     79(ptr) Variable Function
+      1526(r021):     79(ptr) Variable Function
+      1529(r022):     79(ptr) Variable Function
+      1545(r023):     79(ptr) Variable Function
+      1548(r025):     79(ptr) Variable Function
+      1551(r026):     79(ptr) Variable Function
+     1555(r026a):     79(ptr) Variable Function
+      1560(r027):     79(ptr) Variable Function
+      1563(r028):     79(ptr) Variable Function
+      1567(r029):     79(ptr) Variable Function
+      1570(r030):     79(ptr) Variable Function
+      1574(r031):     79(ptr) Variable Function
+      1578(r032):     79(ptr) Variable Function
+      1582(r033):     79(ptr) Variable Function
+      1585(r034):     79(ptr) Variable Function
+      1588(r035):     79(ptr) Variable Function
+      1591(r036):     79(ptr) Variable Function
+      1596(r037):     79(ptr) Variable Function
+      1599(r038):     79(ptr) Variable Function
+      1606(r039):     79(ptr) Variable Function
+      1609(r049):     79(ptr) Variable Function
+      1614(r041):     79(ptr) Variable Function
+      1617(r042):     79(ptr) Variable Function
+      1621(r043):     79(ptr) Variable Function
+      1624(r044):     79(ptr) Variable Function
+      1629(r046):     79(ptr) Variable Function
+            1452:          78 Load 81(inF0)
+            1454:        1453 FOrdNotEqual 1452 141
+            1455:   137(bool) All 1454
+                              Store 1451(r000) 1455
+            1457:          78 Load 81(inF0)
+            1458:          78 ExtInst 1(GLSL.std.450) 4(FAbs) 1457
+                              Store 1456(r001) 1458
             1459:          78 Load 81(inF0)
-            1460:        1450 FOrdNotEqual 1459 141
-            1461:   137(bool) Any 1460
-                              Store 1458(r003) 1461
-            1463:          78 Load 81(inF0)
-            1464:          78 ExtInst 1(GLSL.std.450) 16(Asin) 1463
-                              Store 1462(r004) 1464
+            1460:          78 ExtInst 1(GLSL.std.450) 17(Acos) 1459
+            1462:          78 Load 81(inF0)
+            1463:        1453 FOrdNotEqual 1462 141
+            1464:   137(bool) Any 1463
+                              Store 1461(r003) 1464
             1466:          78 Load 81(inF0)
-            1467:          78 ExtInst 1(GLSL.std.450) 18(Atan) 1466
-                              Store 1465(r005) 1467
+            1467:          78 ExtInst 1(GLSL.std.450) 16(Asin) 1466
+                              Store 1465(r004) 1467
             1469:          78 Load 81(inF0)
-            1470:          78 Load 82(inF1)
-            1471:          78 ExtInst 1(GLSL.std.450) 25(Atan2) 1469 1470
-                              Store 1468(r006) 1471
-            1473:          78 Load 81(inF0)
-            1474:          78 ExtInst 1(GLSL.std.450) 9(Ceil) 1473
-                              Store 1472(r007) 1474
-            1475:          78 Load 81(inF0)
-            1477:        1450 FOrdLessThan 1475 1476
-            1478:   137(bool) Any 1477
-                              SelectionMerge 1480 None
-                              BranchConditional 1478 1479 1480
-            1479:               Label
+            1470:          78 ExtInst 1(GLSL.std.450) 18(Atan) 1469
+                              Store 1468(r005) 1470
+            1472:          78 Load 81(inF0)
+            1473:          78 Load 82(inF1)
+            1474:          78 ExtInst 1(GLSL.std.450) 25(Atan2) 1472 1473
+                              Store 1471(r006) 1474
+            1476:          78 Load 81(inF0)
+            1477:          78 ExtInst 1(GLSL.std.450) 9(Ceil) 1476
+                              Store 1475(r007) 1477
+            1478:          78 Load 81(inF0)
+            1480:        1453 FOrdLessThan 1478 1479
+            1481:   137(bool) Any 1480
+                              SelectionMerge 1483 None
+                              BranchConditional 1481 1482 1483
+            1482:               Label
                                 Kill
-            1480:             Label
-            1483:          78 Load 81(inF0)
-            1484:          78 Load 82(inF1)
-            1485:          78 Load 83(inF2)
-            1486:          78 ExtInst 1(GLSL.std.450) 43(FClamp) 1483 1484 1485
-                              Store 1482(r008) 1486
-            1488:          78 Load 81(inF0)
-            1489:          78 ExtInst 1(GLSL.std.450) 14(Cos) 1488
-                              Store 1487(r009) 1489
+            1483:             Label
+            1486:          78 Load 81(inF0)
+            1487:          78 Load 82(inF1)
+            1488:          78 Load 83(inF2)
+            1489:          78 ExtInst 1(GLSL.std.450) 43(FClamp) 1486 1487 1488
+                              Store 1485(r008) 1489
             1491:          78 Load 81(inF0)
-            1492:          78 ExtInst 1(GLSL.std.450) 20(Cosh) 1491
-                              Store 1490(r010) 1492
+            1492:          78 ExtInst 1(GLSL.std.450) 14(Cos) 1491
+                              Store 1490(r009) 1492
             1494:          78 Load 81(inF0)
-            1495:          78 DPdx 1494
-                              Store 1493(r011) 1495
+            1495:          78 ExtInst 1(GLSL.std.450) 20(Cosh) 1494
+                              Store 1493(r010) 1495
             1497:          78 Load 81(inF0)
-            1498:          78 DPdxCoarse 1497
-                              Store 1496(r012) 1498
+            1498:          78 DPdx 1497
+                              Store 1496(r011) 1498
             1500:          78 Load 81(inF0)
-            1501:          78 DPdxFine 1500
-                              Store 1499(r013) 1501
+            1501:          78 DPdxCoarse 1500
+                              Store 1499(r012) 1501
             1503:          78 Load 81(inF0)
-            1504:          78 DPdy 1503
-                              Store 1502(r014) 1504
+            1504:          78 DPdxFine 1503
+                              Store 1502(r013) 1504
             1506:          78 Load 81(inF0)
-            1507:          78 DPdyCoarse 1506
-                              Store 1505(r015) 1507
+            1507:          78 DPdy 1506
+                              Store 1505(r014) 1507
             1509:          78 Load 81(inF0)
-            1510:          78 DPdyFine 1509
-                              Store 1508(r016) 1510
+            1510:          78 DPdyCoarse 1509
+                              Store 1508(r015) 1510
             1512:          78 Load 81(inF0)
-            1513:          78 ExtInst 1(GLSL.std.450) 12(Degrees) 1512
-                              Store 1511(r017) 1513
+            1513:          78 DPdyFine 1512
+                              Store 1511(r016) 1513
             1515:          78 Load 81(inF0)
-            1516:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1515
-                              Store 1514(r018) 1516
+            1516:          78 ExtInst 1(GLSL.std.450) 12(Degrees) 1515
+                              Store 1514(r017) 1516
             1518:          78 Load 81(inF0)
-            1519:          78 ExtInst 1(GLSL.std.450) 27(Exp) 1518
-                              Store 1517(r019) 1519
+            1519:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1518
+                              Store 1517(r018) 1519
             1521:          78 Load 81(inF0)
-            1522:          78 ExtInst 1(GLSL.std.450) 29(Exp2) 1521
-                              Store 1520(R020) 1522
+            1522:          78 ExtInst 1(GLSL.std.450) 27(Exp) 1521
+                              Store 1520(r019) 1522
             1524:          78 Load 81(inF0)
-            1525:          78 ExtInst 1(GLSL.std.450) 8(Floor) 1524
-                              Store 1523(r021) 1525
+            1525:          78 ExtInst 1(GLSL.std.450) 29(Exp2) 1524
+                              Store 1523(R020) 1525
             1527:          78 Load 81(inF0)
-            1528:          78 Load 82(inF1)
-            1529:   50(fvec4) CompositeExtract 1527 0
-            1530:   50(fvec4) CompositeExtract 1528 0
-            1531:   50(fvec4) FMod 1529 1530
-            1532:   50(fvec4) CompositeExtract 1527 1
-            1533:   50(fvec4) CompositeExtract 1528 1
+            1528:          78 ExtInst 1(GLSL.std.450) 8(Floor) 1527
+                              Store 1526(r021) 1528
+            1530:          78 Load 81(inF0)
+            1531:          78 Load 82(inF1)
+            1532:   50(fvec4) CompositeExtract 1530 0
+            1533:   50(fvec4) CompositeExtract 1531 0
             1534:   50(fvec4) FMod 1532 1533
-            1535:   50(fvec4) CompositeExtract 1527 2
-            1536:   50(fvec4) CompositeExtract 1528 2
+            1535:   50(fvec4) CompositeExtract 1530 1
+            1536:   50(fvec4) CompositeExtract 1531 1
             1537:   50(fvec4) FMod 1535 1536
-            1538:   50(fvec4) CompositeExtract 1527 3
-            1539:   50(fvec4) CompositeExtract 1528 3
+            1538:   50(fvec4) CompositeExtract 1530 2
+            1539:   50(fvec4) CompositeExtract 1531 2
             1540:   50(fvec4) FMod 1538 1539
-            1541:          78 CompositeConstruct 1531 1534 1537 1540
-                              Store 1526(r022) 1541
-            1543:          78 Load 81(inF0)
-            1544:          78 ExtInst 1(GLSL.std.450) 10(Fract) 1543
-                              Store 1542(r023) 1544
+            1541:   50(fvec4) CompositeExtract 1530 3
+            1542:   50(fvec4) CompositeExtract 1531 3
+            1543:   50(fvec4) FMod 1541 1542
+            1544:          78 CompositeConstruct 1534 1537 1540 1543
+                              Store 1529(r022) 1544
             1546:          78 Load 81(inF0)
-            1547:          78 Fwidth 1546
-                              Store 1545(r025) 1547
+            1547:          78 ExtInst 1(GLSL.std.450) 10(Fract) 1546
+                              Store 1545(r023) 1547
             1549:          78 Load 81(inF0)
-            1550:          78 Load 82(inF1)
-            1551:          78 ExtInst 1(GLSL.std.450) 53(Ldexp) 1549 1550
-                              Store 1548(r026) 1551
-            1553:          78 Load 81(inF0)
-            1554:          78 Load 82(inF1)
-            1555:          78 Load 83(inF2)
-            1556:          78 ExtInst 1(GLSL.std.450) 46(FMix) 1553 1554 1555
-                              Store 1552(r026a) 1556
-            1558:          78 Load 81(inF0)
-            1559:          78 ExtInst 1(GLSL.std.450) 28(Log) 1558
-                              Store 1557(r027) 1559
+            1550:          78 Fwidth 1549
+                              Store 1548(r025) 1550
+            1552:          78 Load 81(inF0)
+            1553:          78 Load 82(inF1)
+            1554:          78 ExtInst 1(GLSL.std.450) 53(Ldexp) 1552 1553
+                              Store 1551(r026) 1554
+            1556:          78 Load 81(inF0)
+            1557:          78 Load 82(inF1)
+            1558:          78 Load 83(inF2)
+            1559:          78 ExtInst 1(GLSL.std.450) 46(FMix) 1556 1557 1558
+                              Store 1555(r026a) 1559
             1561:          78 Load 81(inF0)
-            1562:          78 ExtInst 1(GLSL.std.450) 30(Log2) 1561
-            1563:          78 MatrixTimesScalar 1562 272
-                              Store 1560(r028) 1563
-            1565:          78 Load 81(inF0)
-            1566:          78 ExtInst 1(GLSL.std.450) 30(Log2) 1565
-                              Store 1564(r029) 1566
+            1562:          78 ExtInst 1(GLSL.std.450) 28(Log) 1561
+                              Store 1560(r027) 1562
+            1564:          78 Load 81(inF0)
+            1565:          78 ExtInst 1(GLSL.std.450) 30(Log2) 1564
+            1566:          78 MatrixTimesScalar 1565 276
+                              Store 1563(r028) 1566
             1568:          78 Load 81(inF0)
-            1569:          78 Load 82(inF1)
-            1570:          78 ExtInst 1(GLSL.std.450) 40(FMax) 1568 1569
-                              Store 1567(r030) 1570
-            1572:          78 Load 81(inF0)
-            1573:          78 Load 82(inF1)
-            1574:          78 ExtInst 1(GLSL.std.450) 37(FMin) 1572 1573
-                              Store 1571(r031) 1574
-            1576:          78 Load 81(inF0)
-            1577:          78 Load 82(inF1)
-            1578:          78 ExtInst 1(GLSL.std.450) 26(Pow) 1576 1577
-                              Store 1575(r032) 1578
-            1580:          78 Load 81(inF0)
-            1581:          78 ExtInst 1(GLSL.std.450) 11(Radians) 1580
-                              Store 1579(r033) 1581
+            1569:          78 ExtInst 1(GLSL.std.450) 30(Log2) 1568
+                              Store 1567(r029) 1569
+            1571:          78 Load 81(inF0)
+            1572:          78 Load 82(inF1)
+            1573:          78 ExtInst 1(GLSL.std.450) 40(FMax) 1571 1572
+                              Store 1570(r030) 1573
+            1575:          78 Load 81(inF0)
+            1576:          78 Load 82(inF1)
+            1577:          78 ExtInst 1(GLSL.std.450) 37(FMin) 1575 1576
+                              Store 1574(r031) 1577
+            1579:          78 Load 81(inF0)
+            1580:          78 Load 82(inF1)
+            1581:          78 ExtInst 1(GLSL.std.450) 26(Pow) 1579 1580
+                              Store 1578(r032) 1581
             1583:          78 Load 81(inF0)
-            1584:          78 ExtInst 1(GLSL.std.450) 2(RoundEven) 1583
-                              Store 1582(r034) 1584
+            1584:          78 ExtInst 1(GLSL.std.450) 11(Radians) 1583
+                              Store 1582(r033) 1584
             1586:          78 Load 81(inF0)
-            1587:          78 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1586
-                              Store 1585(r035) 1587
+            1587:          78 ExtInst 1(GLSL.std.450) 2(RoundEven) 1586
+                              Store 1585(r034) 1587
             1589:          78 Load 81(inF0)
-            1590:   50(fvec4) CompositeConstruct 141 141 141 141
-            1591:   50(fvec4) CompositeConstruct 293 293 293 293
-            1592:          78 ExtInst 1(GLSL.std.450) 43(FClamp) 1589 1590 1591
-                              Store 1588(r036) 1592
-            1594:          78 Load 81(inF0)
-            1595:          78 ExtInst 1(GLSL.std.450) 6(FSign) 1594
-                              Store 1593(r037) 1595
+            1590:          78 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1589
+                              Store 1588(r035) 1590
+            1592:          78 Load 81(inF0)
+            1593:   50(fvec4) CompositeConstruct 141 141 141 141
+            1594:   50(fvec4) CompositeConstruct 297 297 297 297
+            1595:          78 ExtInst 1(GLSL.std.450) 43(FClamp) 1592 1593 1594
+                              Store 1591(r036) 1595
             1597:          78 Load 81(inF0)
-            1598:          78 ExtInst 1(GLSL.std.450) 13(Sin) 1597
-                              Store 1596(r038) 1598
-            1599:          78 Load 81(inF0)
-            1600:          78 ExtInst 1(GLSL.std.450) 13(Sin) 1599
-                              Store 82(inF1) 1600
-            1601:          78 Load 81(inF0)
-            1602:          78 ExtInst 1(GLSL.std.450) 14(Cos) 1601
-                              Store 83(inF2) 1602
+            1598:          78 ExtInst 1(GLSL.std.450) 6(FSign) 1597
+                              Store 1596(r037) 1598
+            1600:          78 Load 81(inF0)
+            1601:          78 ExtInst 1(GLSL.std.450) 13(Sin) 1600
+                              Store 1599(r038) 1601
+            1602:          78 Load 81(inF0)
+            1603:          78 ExtInst 1(GLSL.std.450) 13(Sin) 1602
+                              Store 82(inF1) 1603
             1604:          78 Load 81(inF0)
-            1605:          78 ExtInst 1(GLSL.std.450) 19(Sinh) 1604
-                              Store 1603(r039) 1605
+            1605:          78 ExtInst 1(GLSL.std.450) 14(Cos) 1604
+                              Store 83(inF2) 1605
             1607:          78 Load 81(inF0)
-            1608:          78 Load 82(inF1)
-            1609:          78 Load 83(inF2)
-            1610:          78 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1607 1608 1609
-                              Store 1606(r049) 1610
-            1612:          78 Load 81(inF0)
-            1613:          78 ExtInst 1(GLSL.std.450) 31(Sqrt) 1612
-                              Store 1611(r041) 1613
+            1608:          78 ExtInst 1(GLSL.std.450) 19(Sinh) 1607
+                              Store 1606(r039) 1608
+            1610:          78 Load 81(inF0)
+            1611:          78 Load 82(inF1)
+            1612:          78 Load 83(inF2)
+            1613:          78 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1610 1611 1612
+                              Store 1609(r049) 1613
             1615:          78 Load 81(inF0)
-            1616:          78 Load 82(inF1)
-            1617:          78 ExtInst 1(GLSL.std.450) 48(Step) 1615 1616
-                              Store 1614(r042) 1617
-            1619:          78 Load 81(inF0)
-            1620:          78 ExtInst 1(GLSL.std.450) 15(Tan) 1619
-                              Store 1618(r043) 1620
+            1616:          78 ExtInst 1(GLSL.std.450) 31(Sqrt) 1615
+                              Store 1614(r041) 1616
+            1618:          78 Load 81(inF0)
+            1619:          78 Load 82(inF1)
+            1620:          78 ExtInst 1(GLSL.std.450) 48(Step) 1618 1619
+                              Store 1617(r042) 1620
             1622:          78 Load 81(inF0)
-            1623:          78 ExtInst 1(GLSL.std.450) 21(Tanh) 1622
-                              Store 1621(r044) 1623
-            1624:          78 Load 81(inF0)
-            1625:          78 Transpose 1624
+            1623:          78 ExtInst 1(GLSL.std.450) 15(Tan) 1622
+                              Store 1621(r043) 1623
+            1625:          78 Load 81(inF0)
+            1626:          78 ExtInst 1(GLSL.std.450) 21(Tanh) 1625
+                              Store 1624(r044) 1626
             1627:          78 Load 81(inF0)
-            1628:          78 ExtInst 1(GLSL.std.450) 3(Trunc) 1627
-                              Store 1626(r046) 1628
-                              ReturnValue 1630
+            1628:          78 Transpose 1627
+            1630:          78 Load 81(inF0)
+            1631:          78 ExtInst 1(GLSL.std.450) 3(Trunc) 1630
+                              Store 1629(r046) 1631
+                              ReturnValue 1633
                               FunctionEnd
 93(TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;):           2 Function None 86
         87(inF0):      7(ptr) FunctionParameter
@@ -8212,51 +8231,51 @@
        91(inFM0):     63(ptr) FunctionParameter
        92(inFM1):     63(ptr) FunctionParameter
               94:             Label
-        1633(r0):      7(ptr) Variable Function
-        1637(r1):     27(ptr) Variable Function
-        1641(r2):     27(ptr) Variable Function
-        1645(r3):      7(ptr) Variable Function
-        1649(r4):     27(ptr) Variable Function
-        1653(r5):     27(ptr) Variable Function
-        1657(r6):     63(ptr) Variable Function
-        1661(r7):     63(ptr) Variable Function
-        1665(r8):     63(ptr) Variable Function
-            1634:    6(float) Load 88(inF1)
-            1635:    6(float) Load 87(inF0)
-            1636:    6(float) FMul 1634 1635
-                              Store 1633(r0) 1636
+        1636(r0):      7(ptr) Variable Function
+        1640(r1):     27(ptr) Variable Function
+        1644(r2):     27(ptr) Variable Function
+        1648(r3):      7(ptr) Variable Function
+        1652(r4):     27(ptr) Variable Function
+        1656(r5):     27(ptr) Variable Function
+        1660(r6):     63(ptr) Variable Function
+        1664(r7):     63(ptr) Variable Function
+        1668(r8):     63(ptr) Variable Function
+            1637:    6(float) Load 88(inF1)
             1638:    6(float) Load 87(inF0)
-            1639:   26(fvec2) Load 89(inFV0)
-            1640:   26(fvec2) VectorTimesScalar 1639 1638
-                              Store 1637(r1) 1640
+            1639:    6(float) FMul 1637 1638
+                              Store 1636(r0) 1639
+            1641:    6(float) Load 87(inF0)
             1642:   26(fvec2) Load 89(inFV0)
-            1643:    6(float) Load 87(inF0)
-            1644:   26(fvec2) VectorTimesScalar 1642 1643
-                              Store 1641(r2) 1644
-            1646:   26(fvec2) Load 89(inFV0)
-            1647:   26(fvec2) Load 90(inFV1)
-            1648:    6(float) Dot 1646 1647
-                              Store 1645(r3) 1648
-            1650:   26(fvec2) Load 89(inFV0)
-            1651:          62 Load 91(inFM0)
-            1652:   26(fvec2) VectorTimesMatrix 1650 1651
-                              Store 1649(r4) 1652
+            1643:   26(fvec2) VectorTimesScalar 1642 1641
+                              Store 1640(r1) 1643
+            1645:   26(fvec2) Load 89(inFV0)
+            1646:    6(float) Load 87(inF0)
+            1647:   26(fvec2) VectorTimesScalar 1645 1646
+                              Store 1644(r2) 1647
+            1649:   26(fvec2) Load 89(inFV0)
+            1650:   26(fvec2) Load 90(inFV1)
+            1651:    6(float) Dot 1649 1650
+                              Store 1648(r3) 1651
+            1653:   26(fvec2) Load 89(inFV0)
             1654:          62 Load 91(inFM0)
-            1655:   26(fvec2) Load 89(inFV0)
-            1656:   26(fvec2) MatrixTimesVector 1654 1655
-                              Store 1653(r5) 1656
-            1658:    6(float) Load 87(inF0)
-            1659:          62 Load 91(inFM0)
-            1660:          62 MatrixTimesScalar 1659 1658
-                              Store 1657(r6) 1660
+            1655:   26(fvec2) VectorTimesMatrix 1653 1654
+                              Store 1652(r4) 1655
+            1657:          62 Load 91(inFM0)
+            1658:   26(fvec2) Load 89(inFV0)
+            1659:   26(fvec2) MatrixTimesVector 1657 1658
+                              Store 1656(r5) 1659
+            1661:    6(float) Load 87(inF0)
             1662:          62 Load 91(inFM0)
-            1663:    6(float) Load 87(inF0)
-            1664:          62 MatrixTimesScalar 1662 1663
-                              Store 1661(r7) 1664
-            1666:          62 Load 92(inFM1)
-            1667:          62 Load 91(inFM0)
-            1668:          62 MatrixTimesMatrix 1666 1667
-                              Store 1665(r8) 1668
+            1663:          62 MatrixTimesScalar 1662 1661
+                              Store 1660(r6) 1663
+            1665:          62 Load 91(inFM0)
+            1666:    6(float) Load 87(inF0)
+            1667:          62 MatrixTimesScalar 1665 1666
+                              Store 1664(r7) 1667
+            1669:          62 Load 92(inFM1)
+            1670:          62 Load 91(inFM0)
+            1671:          62 MatrixTimesMatrix 1669 1670
+                              Store 1668(r8) 1671
                               Return
                               FunctionEnd
 102(TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;):           2 Function None 95
@@ -8267,51 +8286,51 @@
       100(inFM0):     71(ptr) FunctionParameter
       101(inFM1):     71(ptr) FunctionParameter
              103:             Label
-        1669(r0):      7(ptr) Variable Function
-        1673(r1):     39(ptr) Variable Function
-        1677(r2):     39(ptr) Variable Function
-        1681(r3):      7(ptr) Variable Function
-        1685(r4):     39(ptr) Variable Function
-        1689(r5):     39(ptr) Variable Function
-        1693(r6):     71(ptr) Variable Function
-        1697(r7):     71(ptr) Variable Function
-        1701(r8):     71(ptr) Variable Function
-            1670:    6(float) Load 97(inF1)
-            1671:    6(float) Load 96(inF0)
-            1672:    6(float) FMul 1670 1671
-                              Store 1669(r0) 1672
+        1672(r0):      7(ptr) Variable Function
+        1676(r1):     39(ptr) Variable Function
+        1680(r2):     39(ptr) Variable Function
+        1684(r3):      7(ptr) Variable Function
+        1688(r4):     39(ptr) Variable Function
+        1692(r5):     39(ptr) Variable Function
+        1696(r6):     71(ptr) Variable Function
+        1700(r7):     71(ptr) Variable Function
+        1704(r8):     71(ptr) Variable Function
+            1673:    6(float) Load 97(inF1)
             1674:    6(float) Load 96(inF0)
-            1675:   38(fvec3) Load 98(inFV0)
-            1676:   38(fvec3) VectorTimesScalar 1675 1674
-                              Store 1673(r1) 1676
+            1675:    6(float) FMul 1673 1674
+                              Store 1672(r0) 1675
+            1677:    6(float) Load 96(inF0)
             1678:   38(fvec3) Load 98(inFV0)
-            1679:    6(float) Load 96(inF0)
-            1680:   38(fvec3) VectorTimesScalar 1678 1679
-                              Store 1677(r2) 1680
-            1682:   38(fvec3) Load 98(inFV0)
-            1683:   38(fvec3) Load 99(inFV1)
-            1684:    6(float) Dot 1682 1683
-                              Store 1681(r3) 1684
-            1686:   38(fvec3) Load 98(inFV0)
-            1687:          70 Load 100(inFM0)
-            1688:   38(fvec3) VectorTimesMatrix 1686 1687
-                              Store 1685(r4) 1688
+            1679:   38(fvec3) VectorTimesScalar 1678 1677
+                              Store 1676(r1) 1679
+            1681:   38(fvec3) Load 98(inFV0)
+            1682:    6(float) Load 96(inF0)
+            1683:   38(fvec3) VectorTimesScalar 1681 1682
+                              Store 1680(r2) 1683
+            1685:   38(fvec3) Load 98(inFV0)
+            1686:   38(fvec3) Load 99(inFV1)
+            1687:    6(float) Dot 1685 1686
+                              Store 1684(r3) 1687
+            1689:   38(fvec3) Load 98(inFV0)
             1690:          70 Load 100(inFM0)
-            1691:   38(fvec3) Load 98(inFV0)
-            1692:   38(fvec3) MatrixTimesVector 1690 1691
-                              Store 1689(r5) 1692
-            1694:    6(float) Load 96(inF0)
-            1695:          70 Load 100(inFM0)
-            1696:          70 MatrixTimesScalar 1695 1694
-                              Store 1693(r6) 1696
+            1691:   38(fvec3) VectorTimesMatrix 1689 1690
+                              Store 1688(r4) 1691
+            1693:          70 Load 100(inFM0)
+            1694:   38(fvec3) Load 98(inFV0)
+            1695:   38(fvec3) MatrixTimesVector 1693 1694
+                              Store 1692(r5) 1695
+            1697:    6(float) Load 96(inF0)
             1698:          70 Load 100(inFM0)
-            1699:    6(float) Load 96(inF0)
-            1700:          70 MatrixTimesScalar 1698 1699
-                              Store 1697(r7) 1700
-            1702:          70 Load 101(inFM1)
-            1703:          70 Load 100(inFM0)
-            1704:          70 MatrixTimesMatrix 1702 1703
-                              Store 1701(r8) 1704
+            1699:          70 MatrixTimesScalar 1698 1697
+                              Store 1696(r6) 1699
+            1701:          70 Load 100(inFM0)
+            1702:    6(float) Load 96(inF0)
+            1703:          70 MatrixTimesScalar 1701 1702
+                              Store 1700(r7) 1703
+            1705:          70 Load 101(inFM1)
+            1706:          70 Load 100(inFM0)
+            1707:          70 MatrixTimesMatrix 1705 1706
+                              Store 1704(r8) 1707
                               Return
                               FunctionEnd
 111(TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;):           2 Function None 104
@@ -8322,51 +8341,51 @@
       109(inFM0):     79(ptr) FunctionParameter
       110(inFM1):     79(ptr) FunctionParameter
              112:             Label
-        1705(r0):      7(ptr) Variable Function
-        1709(r1):     51(ptr) Variable Function
-        1713(r2):     51(ptr) Variable Function
-        1717(r3):      7(ptr) Variable Function
-        1721(r4):     51(ptr) Variable Function
-        1725(r5):     51(ptr) Variable Function
-        1729(r6):     79(ptr) Variable Function
-        1733(r7):     79(ptr) Variable Function
-        1737(r8):     79(ptr) Variable Function
-            1706:    6(float) Load 106(inF1)
-            1707:    6(float) Load 105(inF0)
-            1708:    6(float) FMul 1706 1707
-                              Store 1705(r0) 1708
+        1708(r0):      7(ptr) Variable Function
+        1712(r1):     51(ptr) Variable Function
+        1716(r2):     51(ptr) Variable Function
+        1720(r3):      7(ptr) Variable Function
+        1724(r4):     51(ptr) Variable Function
+        1728(r5):     51(ptr) Variable Function
+        1732(r6):     79(ptr) Variable Function
+        1736(r7):     79(ptr) Variable Function
+        1740(r8):     79(ptr) Variable Function
+            1709:    6(float) Load 106(inF1)
             1710:    6(float) Load 105(inF0)
-            1711:   50(fvec4) Load 107(inFV0)
-            1712:   50(fvec4) VectorTimesScalar 1711 1710
-                              Store 1709(r1) 1712
+            1711:    6(float) FMul 1709 1710
+                              Store 1708(r0) 1711
+            1713:    6(float) Load 105(inF0)
             1714:   50(fvec4) Load 107(inFV0)
-            1715:    6(float) Load 105(inF0)
-            1716:   50(fvec4) VectorTimesScalar 1714 1715
-                              Store 1713(r2) 1716
-            1718:   50(fvec4) Load 107(inFV0)
-            1719:   50(fvec4) Load 108(inFV1)
-            1720:    6(float) Dot 1718 1719
-                              Store 1717(r3) 1720
-            1722:   50(fvec4) Load 107(inFV0)
-            1723:          78 Load 109(inFM0)
-            1724:   50(fvec4) VectorTimesMatrix 1722 1723
-                              Store 1721(r4) 1724
+            1715:   50(fvec4) VectorTimesScalar 1714 1713
+                              Store 1712(r1) 1715
+            1717:   50(fvec4) Load 107(inFV0)
+            1718:    6(float) Load 105(inF0)
+            1719:   50(fvec4) VectorTimesScalar 1717 1718
+                              Store 1716(r2) 1719
+            1721:   50(fvec4) Load 107(inFV0)
+            1722:   50(fvec4) Load 108(inFV1)
+            1723:    6(float) Dot 1721 1722
+                              Store 1720(r3) 1723
+            1725:   50(fvec4) Load 107(inFV0)
             1726:          78 Load 109(inFM0)
-            1727:   50(fvec4) Load 107(inFV0)
-            1728:   50(fvec4) MatrixTimesVector 1726 1727
-                              Store 1725(r5) 1728
-            1730:    6(float) Load 105(inF0)
-            1731:          78 Load 109(inFM0)
-            1732:          78 MatrixTimesScalar 1731 1730
-                              Store 1729(r6) 1732
+            1727:   50(fvec4) VectorTimesMatrix 1725 1726
+                              Store 1724(r4) 1727
+            1729:          78 Load 109(inFM0)
+            1730:   50(fvec4) Load 107(inFV0)
+            1731:   50(fvec4) MatrixTimesVector 1729 1730
+                              Store 1728(r5) 1731
+            1733:    6(float) Load 105(inF0)
             1734:          78 Load 109(inFM0)
-            1735:    6(float) Load 105(inF0)
-            1736:          78 MatrixTimesScalar 1734 1735
-                              Store 1733(r7) 1736
-            1738:          78 Load 110(inFM1)
-            1739:          78 Load 109(inFM0)
-            1740:          78 MatrixTimesMatrix 1738 1739
-                              Store 1737(r8) 1740
+            1735:          78 MatrixTimesScalar 1734 1733
+                              Store 1732(r6) 1735
+            1737:          78 Load 109(inFM0)
+            1738:    6(float) Load 105(inF0)
+            1739:          78 MatrixTimesScalar 1737 1738
+                              Store 1736(r7) 1739
+            1741:          78 Load 110(inFM1)
+            1742:          78 Load 109(inFM0)
+            1743:          78 MatrixTimesMatrix 1741 1742
+                              Store 1740(r8) 1743
                               Return
                               FunctionEnd
 131(TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24;):           2 Function None 121
@@ -8380,98 +8399,98 @@
     129(inFM3x4):    118(ptr) FunctionParameter
     130(inFM2x4):    120(ptr) FunctionParameter
              132:             Label
-       1741(r00):      7(ptr) Variable Function
-       1745(r01):     27(ptr) Variable Function
-       1749(r02):     39(ptr) Variable Function
-       1753(r03):     27(ptr) Variable Function
-       1757(r04):     39(ptr) Variable Function
-       1761(r05):      7(ptr) Variable Function
-       1765(r06):      7(ptr) Variable Function
-       1769(r07):     39(ptr) Variable Function
-       1773(r08):     27(ptr) Variable Function
-       1777(r09):     27(ptr) Variable Function
-       1781(r10):     39(ptr) Variable Function
-       1785(r11):    114(ptr) Variable Function
-       1789(r12):    116(ptr) Variable Function
-       1793(r13):     63(ptr) Variable Function
-       1797(r14):    114(ptr) Variable Function
-       1801(r15):    120(ptr) Variable Function
-       1805(r16):    118(ptr) Variable Function
-            1742:    6(float) Load 123(inF1)
-            1743:    6(float) Load 122(inF0)
-            1744:    6(float) FMul 1742 1743
-                              Store 1741(r00) 1744
+       1744(r00):      7(ptr) Variable Function
+       1748(r01):     27(ptr) Variable Function
+       1752(r02):     39(ptr) Variable Function
+       1756(r03):     27(ptr) Variable Function
+       1760(r04):     39(ptr) Variable Function
+       1764(r05):      7(ptr) Variable Function
+       1768(r06):      7(ptr) Variable Function
+       1772(r07):     39(ptr) Variable Function
+       1776(r08):     27(ptr) Variable Function
+       1780(r09):     27(ptr) Variable Function
+       1784(r10):     39(ptr) Variable Function
+       1788(r11):    114(ptr) Variable Function
+       1792(r12):    116(ptr) Variable Function
+       1796(r13):     63(ptr) Variable Function
+       1800(r14):    114(ptr) Variable Function
+       1804(r15):    120(ptr) Variable Function
+       1808(r16):    118(ptr) Variable Function
+            1745:    6(float) Load 123(inF1)
             1746:    6(float) Load 122(inF0)
-            1747:   26(fvec2) Load 124(inFV2)
-            1748:   26(fvec2) VectorTimesScalar 1747 1746
-                              Store 1745(r01) 1748
-            1750:    6(float) Load 122(inF0)
-            1751:   38(fvec3) Load 125(inFV3)
-            1752:   38(fvec3) VectorTimesScalar 1751 1750
-                              Store 1749(r02) 1752
-            1754:   26(fvec2) Load 124(inFV2)
-            1755:    6(float) Load 122(inF0)
-            1756:   26(fvec2) VectorTimesScalar 1754 1755
-                              Store 1753(r03) 1756
-            1758:   38(fvec3) Load 125(inFV3)
-            1759:    6(float) Load 122(inF0)
-            1760:   38(fvec3) VectorTimesScalar 1758 1759
-                              Store 1757(r04) 1760
-            1762:   26(fvec2) Load 124(inFV2)
-            1763:   26(fvec2) Load 124(inFV2)
-            1764:    6(float) Dot 1762 1763
-                              Store 1761(r05) 1764
-            1766:   38(fvec3) Load 125(inFV3)
-            1767:   38(fvec3) Load 125(inFV3)
-            1768:    6(float) Dot 1766 1767
-                              Store 1765(r06) 1768
-            1770:         113 Load 126(inFM2x3)
-            1771:   26(fvec2) Load 124(inFV2)
-            1772:   38(fvec3) MatrixTimesVector 1770 1771
-                              Store 1769(r07) 1772
-            1774:         115 Load 127(inFM3x2)
-            1775:   38(fvec3) Load 125(inFV3)
-            1776:   26(fvec2) MatrixTimesVector 1774 1775
-                              Store 1773(r08) 1776
+            1747:    6(float) FMul 1745 1746
+                              Store 1744(r00) 1747
+            1749:    6(float) Load 122(inF0)
+            1750:   26(fvec2) Load 124(inFV2)
+            1751:   26(fvec2) VectorTimesScalar 1750 1749
+                              Store 1748(r01) 1751
+            1753:    6(float) Load 122(inF0)
+            1754:   38(fvec3) Load 125(inFV3)
+            1755:   38(fvec3) VectorTimesScalar 1754 1753
+                              Store 1752(r02) 1755
+            1757:   26(fvec2) Load 124(inFV2)
+            1758:    6(float) Load 122(inF0)
+            1759:   26(fvec2) VectorTimesScalar 1757 1758
+                              Store 1756(r03) 1759
+            1761:   38(fvec3) Load 125(inFV3)
+            1762:    6(float) Load 122(inF0)
+            1763:   38(fvec3) VectorTimesScalar 1761 1762
+                              Store 1760(r04) 1763
+            1765:   26(fvec2) Load 124(inFV2)
+            1766:   26(fvec2) Load 124(inFV2)
+            1767:    6(float) Dot 1765 1766
+                              Store 1764(r05) 1767
+            1769:   38(fvec3) Load 125(inFV3)
+            1770:   38(fvec3) Load 125(inFV3)
+            1771:    6(float) Dot 1769 1770
+                              Store 1768(r06) 1771
+            1773:         113 Load 126(inFM2x3)
+            1774:   26(fvec2) Load 124(inFV2)
+            1775:   38(fvec3) MatrixTimesVector 1773 1774
+                              Store 1772(r07) 1775
+            1777:         115 Load 127(inFM3x2)
             1778:   38(fvec3) Load 125(inFV3)
-            1779:         113 Load 126(inFM2x3)
-            1780:   26(fvec2) VectorTimesMatrix 1778 1779
-                              Store 1777(r09) 1780
-            1782:   26(fvec2) Load 124(inFV2)
-            1783:         115 Load 127(inFM3x2)
-            1784:   38(fvec3) VectorTimesMatrix 1782 1783
-                              Store 1781(r10) 1784
-            1786:    6(float) Load 122(inF0)
-            1787:         113 Load 126(inFM2x3)
-            1788:         113 MatrixTimesScalar 1787 1786
-                              Store 1785(r11) 1788
-            1790:    6(float) Load 122(inF0)
-            1791:         115 Load 127(inFM3x2)
-            1792:         115 MatrixTimesScalar 1791 1790
-                              Store 1789(r12) 1792
+            1779:   26(fvec2) MatrixTimesVector 1777 1778
+                              Store 1776(r08) 1779
+            1781:   38(fvec3) Load 125(inFV3)
+            1782:         113 Load 126(inFM2x3)
+            1783:   26(fvec2) VectorTimesMatrix 1781 1782
+                              Store 1780(r09) 1783
+            1785:   26(fvec2) Load 124(inFV2)
+            1786:         115 Load 127(inFM3x2)
+            1787:   38(fvec3) VectorTimesMatrix 1785 1786
+                              Store 1784(r10) 1787
+            1789:    6(float) Load 122(inF0)
+            1790:         113 Load 126(inFM2x3)
+            1791:         113 MatrixTimesScalar 1790 1789
+                              Store 1788(r11) 1791
+            1793:    6(float) Load 122(inF0)
             1794:         115 Load 127(inFM3x2)
-            1795:         113 Load 126(inFM2x3)
-            1796:          62 MatrixTimesMatrix 1794 1795
-                              Store 1793(r13) 1796
-            1798:          70 Load 128(inFM3x3)
-            1799:         113 Load 126(inFM2x3)
-            1800:         113 MatrixTimesMatrix 1798 1799
-                              Store 1797(r14) 1800
-            1802:         117 Load 129(inFM3x4)
-            1803:         113 Load 126(inFM2x3)
-            1804:         119 MatrixTimesMatrix 1802 1803
-                              Store 1801(r15) 1804
-            1806:         119 Load 130(inFM2x4)
-            1807:         115 Load 127(inFM3x2)
-            1808:         117 MatrixTimesMatrix 1806 1807
-                              Store 1805(r16) 1808
+            1795:         115 MatrixTimesScalar 1794 1793
+                              Store 1792(r12) 1795
+            1797:         115 Load 127(inFM3x2)
+            1798:         113 Load 126(inFM2x3)
+            1799:          62 MatrixTimesMatrix 1797 1798
+                              Store 1796(r13) 1799
+            1801:          70 Load 128(inFM3x3)
+            1802:         113 Load 126(inFM2x3)
+            1803:         113 MatrixTimesMatrix 1801 1802
+                              Store 1800(r14) 1803
+            1805:         117 Load 129(inFM3x4)
+            1806:         113 Load 126(inFM2x3)
+            1807:         119 MatrixTimesMatrix 1805 1806
+                              Store 1804(r15) 1807
+            1809:         119 Load 130(inFM2x4)
+            1810:         115 Load 127(inFM3x2)
+            1811:         117 MatrixTimesMatrix 1809 1810
+                              Store 1808(r16) 1811
                               Return
                               FunctionEnd
      135(@main():133(PS_OUTPUT) Function None 134
              136:             Label
- 1810(ps_output):   1809(ptr) Variable Function
-            1812:     51(ptr) AccessChain 1810(ps_output) 187
-                              Store 1812 1811
-            1813:133(PS_OUTPUT) Load 1810(ps_output)
-                              ReturnValue 1813
+ 1813(ps_output):   1812(ptr) Variable Function
+            1815:     51(ptr) AccessChain 1813(ps_output) 187
+                              Store 1815 1814
+            1816:133(PS_OUTPUT) Load 1813(ps_output)
+                              ReturnValue 1816
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.lit.frag.out b/Test/baseResults/hlsl.intrinsics.lit.frag.out
index 8b1454b..9a8cb29 100644
--- a/Test/baseResults/hlsl.intrinsics.lit.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.lit.frag.out
@@ -118,7 +118,7 @@
 0:?     'm' (layout( location=2) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 48
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.negative.comp.out b/Test/baseResults/hlsl.intrinsics.negative.comp.out
index 97d6719..920038f 100644
--- a/Test/baseResults/hlsl.intrinsics.negative.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.negative.comp.out
@@ -180,7 +180,7 @@
 0:?     'inI0' (layout( location=3) in 4-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 99
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.negative.vert.out b/Test/baseResults/hlsl.intrinsics.negative.vert.out
index c2711c6..3b1bac8 100644
--- a/Test/baseResults/hlsl.intrinsics.negative.vert.out
+++ b/Test/baseResults/hlsl.intrinsics.negative.vert.out
@@ -308,7 +308,7 @@
 0:?     'inI0' (layout( location=3) in 4-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 155
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.promote.down.frag.out b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
index 84ea6f4..2171698 100644
--- a/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
@@ -104,7 +104,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.promote.frag.out b/Test/baseResults/hlsl.intrinsics.promote.frag.out
index 988432e..41b1c68 100644
--- a/Test/baseResults/hlsl.intrinsics.promote.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.promote.frag.out
@@ -888,7 +888,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 322
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
index 9f8ecf2..143fa72 100644
--- a/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
@@ -204,7 +204,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.vert.out b/Test/baseResults/hlsl.intrinsics.vert.out
index 460785e..28e8e41 100644
--- a/Test/baseResults/hlsl.intrinsics.vert.out
+++ b/Test/baseResults/hlsl.intrinsics.vert.out
@@ -2780,7 +2780,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 1225
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.isfinite.frag.out b/Test/baseResults/hlsl.isfinite.frag.out
index 7b8287f..a68bd1b 100644
--- a/Test/baseResults/hlsl.isfinite.frag.out
+++ b/Test/baseResults/hlsl.isfinite.frag.out
@@ -172,7 +172,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 85
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.layout.frag.out b/Test/baseResults/hlsl.layout.frag.out
index 6a3eb04..1e4f171 100644
--- a/Test/baseResults/hlsl.layout.frag.out
+++ b/Test/baseResults/hlsl.layout.frag.out
@@ -88,7 +88,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.layoutOverride.vert.out b/Test/baseResults/hlsl.layoutOverride.vert.out
index 31593aa..cc09653 100644
--- a/Test/baseResults/hlsl.layoutOverride.vert.out
+++ b/Test/baseResults/hlsl.layoutOverride.vert.out
@@ -52,7 +52,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.2dms.dx10.frag.out b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
index 8d7f70f..9597762 100644
--- a/Test/baseResults/hlsl.load.2dms.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 130
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.array.dx10.frag.out b/Test/baseResults/hlsl.load.array.dx10.frag.out
index e5c0f6e..f26d7df 100644
--- a/Test/baseResults/hlsl.load.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.array.dx10.frag.out
@@ -388,7 +388,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 159
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.basic.dx10.frag.out b/Test/baseResults/hlsl.load.basic.dx10.frag.out
index b47e037..895a109 100644
--- a/Test/baseResults/hlsl.load.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.basic.dx10.frag.out
@@ -490,7 +490,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 179
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.basic.dx10.vert.out b/Test/baseResults/hlsl.load.basic.dx10.vert.out
index 99f3667..99a57a7 100644
--- a/Test/baseResults/hlsl.load.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.load.basic.dx10.vert.out
@@ -452,7 +452,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 171
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.buffer.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
index 969a99f..2255cf5 100644
--- a/Test/baseResults/hlsl.load.buffer.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
@@ -166,7 +166,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
index d404b27..08a1c56 100644
--- a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
@@ -172,7 +172,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 75
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.offset.dx10.frag.out b/Test/baseResults/hlsl.load.offset.dx10.frag.out
index 089329e..ebf1bd3 100644
--- a/Test/baseResults/hlsl.load.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.offset.dx10.frag.out
@@ -562,7 +562,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 201
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
index 7df846b..297c737 100644
--- a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
@@ -436,7 +436,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 174
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
index 62009e1..7ad197c 100644
--- a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
@@ -110,7 +110,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
index f05b335..77344ac 100644
--- a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
@@ -208,7 +208,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 119
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
index c6e00ff..bf9ea2d 100644
--- a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
@@ -244,7 +244,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 132
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.logical.binary.frag.out b/Test/baseResults/hlsl.logical.binary.frag.out
index 5b23a62..1df3966 100644
--- a/Test/baseResults/hlsl.logical.binary.frag.out
+++ b/Test/baseResults/hlsl.logical.binary.frag.out
@@ -124,7 +124,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 56
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.logical.binary.vec.frag.out b/Test/baseResults/hlsl.logical.binary.vec.frag.out
index 0e4f852..bc469dc 100644
--- a/Test/baseResults/hlsl.logical.binary.vec.frag.out
+++ b/Test/baseResults/hlsl.logical.binary.vec.frag.out
@@ -254,7 +254,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 115
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.logical.unary.frag.out b/Test/baseResults/hlsl.logical.unary.frag.out
index b342c34..57247c6 100644
--- a/Test/baseResults/hlsl.logical.unary.frag.out
+++ b/Test/baseResults/hlsl.logical.unary.frag.out
@@ -184,7 +184,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.logicalConvert.frag.out b/Test/baseResults/hlsl.logicalConvert.frag.out
index 6c595f8..4757f33 100644
--- a/Test/baseResults/hlsl.logicalConvert.frag.out
+++ b/Test/baseResults/hlsl.logicalConvert.frag.out
@@ -254,7 +254,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.loopattr.frag.out b/Test/baseResults/hlsl.loopattr.frag.out
index cc0073a..c6130f7 100644
--- a/Test/baseResults/hlsl.loopattr.frag.out
+++ b/Test/baseResults/hlsl.loopattr.frag.out
@@ -136,7 +136,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matNx1.frag.out b/Test/baseResults/hlsl.matNx1.frag.out
index e8e0a7b..1d92d5f 100644
--- a/Test/baseResults/hlsl.matNx1.frag.out
+++ b/Test/baseResults/hlsl.matNx1.frag.out
@@ -153,7 +153,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 77
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matType.bool.frag.out b/Test/baseResults/hlsl.matType.bool.frag.out
index b5543d8..1362ee7 100644
--- a/Test/baseResults/hlsl.matType.bool.frag.out
+++ b/Test/baseResults/hlsl.matType.bool.frag.out
@@ -233,7 +233,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 130
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matType.frag.out b/Test/baseResults/hlsl.matType.frag.out
index 80bb216..ed08983 100644
--- a/Test/baseResults/hlsl.matType.frag.out
+++ b/Test/baseResults/hlsl.matType.frag.out
@@ -32,7 +32,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matType.int.frag.out b/Test/baseResults/hlsl.matType.int.frag.out
index a1854aa..ad0c314 100644
--- a/Test/baseResults/hlsl.matType.int.frag.out
+++ b/Test/baseResults/hlsl.matType.int.frag.out
@@ -399,7 +399,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 232
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matpack-1.frag.out b/Test/baseResults/hlsl.matpack-1.frag.out
index c022587..829d0b1 100644
--- a/Test/baseResults/hlsl.matpack-1.frag.out
+++ b/Test/baseResults/hlsl.matpack-1.frag.out
@@ -100,7 +100,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matpack-pragma.frag.out b/Test/baseResults/hlsl.matpack-pragma.frag.out
index 86e945e..a5e351e 100644
--- a/Test/baseResults/hlsl.matpack-pragma.frag.out
+++ b/Test/baseResults/hlsl.matpack-pragma.frag.out
@@ -170,7 +170,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matrixSwizzle.vert.out b/Test/baseResults/hlsl.matrixSwizzle.vert.out
index 237ce5d..7bc0c17 100644
--- a/Test/baseResults/hlsl.matrixSwizzle.vert.out
+++ b/Test/baseResults/hlsl.matrixSwizzle.vert.out
@@ -677,7 +677,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 118
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matrixindex.frag.out b/Test/baseResults/hlsl.matrixindex.frag.out
index 63ddc4d..1e5fbb9 100644
--- a/Test/baseResults/hlsl.matrixindex.frag.out
+++ b/Test/baseResults/hlsl.matrixindex.frag.out
@@ -272,7 +272,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 83
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.max.frag.out b/Test/baseResults/hlsl.max.frag.out
index db215a2..14cd8bf 100644
--- a/Test/baseResults/hlsl.max.frag.out
+++ b/Test/baseResults/hlsl.max.frag.out
@@ -66,7 +66,7 @@
 0:?     'input2' (layout( location=1) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.memberFunCall.frag.out b/Test/baseResults/hlsl.memberFunCall.frag.out
index 01cb99a..83dc86f 100644
--- a/Test/baseResults/hlsl.memberFunCall.frag.out
+++ b/Test/baseResults/hlsl.memberFunCall.frag.out
@@ -152,7 +152,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 73
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.mintypes.frag.out b/Test/baseResults/hlsl.mintypes.frag.out
index 4824bcb..2ce899b 100644
--- a/Test/baseResults/hlsl.mintypes.frag.out
+++ b/Test/baseResults/hlsl.mintypes.frag.out
@@ -98,7 +98,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.mip.operator.frag.out b/Test/baseResults/hlsl.mip.operator.frag.out
index 478e808..4123d23 100644
--- a/Test/baseResults/hlsl.mip.operator.frag.out
+++ b/Test/baseResults/hlsl.mip.operator.frag.out
@@ -128,7 +128,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 61
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.mul-truncate.frag.out b/Test/baseResults/hlsl.mul-truncate.frag.out
index a7de28c..c337ed4 100644
--- a/Test/baseResults/hlsl.mul-truncate.frag.out
+++ b/Test/baseResults/hlsl.mul-truncate.frag.out
@@ -383,7 +383,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 190
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.multiDescriptorSet.frag.out b/Test/baseResults/hlsl.multiDescriptorSet.frag.out
index 8bd1ad8..fa48092 100644
--- a/Test/baseResults/hlsl.multiDescriptorSet.frag.out
+++ b/Test/baseResults/hlsl.multiDescriptorSet.frag.out
@@ -1,6 +1,6 @@
 hlsl.multiDescriptorSet.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 92
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.multiEntry.vert.out b/Test/baseResults/hlsl.multiEntry.vert.out
index c051591..d641512 100644
--- a/Test/baseResults/hlsl.multiEntry.vert.out
+++ b/Test/baseResults/hlsl.multiEntry.vert.out
@@ -70,7 +70,7 @@
 0:?     'Index' ( in uint VertexIndex)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 41
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.multiReturn.frag.out b/Test/baseResults/hlsl.multiReturn.frag.out
index 6c41c77..54b5107 100644
--- a/Test/baseResults/hlsl.multiReturn.frag.out
+++ b/Test/baseResults/hlsl.multiReturn.frag.out
@@ -48,7 +48,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{ temp float f,  temp 3-component vector of float v,  temp 3X3 matrix of float m} s})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.namespace.frag.out b/Test/baseResults/hlsl.namespace.frag.out
index 8df43ad..9431f66 100644
--- a/Test/baseResults/hlsl.namespace.frag.out
+++ b/Test/baseResults/hlsl.namespace.frag.out
@@ -103,7 +103,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.noSemantic.functionality1.comp.out b/Test/baseResults/hlsl.noSemantic.functionality1.comp.out
index 3ede90e..fc51e9c 100644
--- a/Test/baseResults/hlsl.noSemantic.functionality1.comp.out
+++ b/Test/baseResults/hlsl.noSemantic.functionality1.comp.out
@@ -1,6 +1,6 @@
 hlsl.noSemantic.functionality1.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.nonint-index.frag.out b/Test/baseResults/hlsl.nonint-index.frag.out
index 131c1ec..0b6bdbc 100644
--- a/Test/baseResults/hlsl.nonint-index.frag.out
+++ b/Test/baseResults/hlsl.nonint-index.frag.out
@@ -88,7 +88,7 @@
 0:?     'input' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out b/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out
index 1927a4c..268e563 100644
--- a/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out
+++ b/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out
@@ -268,7 +268,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 111
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.numericsuffixes.frag.out b/Test/baseResults/hlsl.numericsuffixes.frag.out
index b1fa856..b433266 100644
--- a/Test/baseResults/hlsl.numericsuffixes.frag.out
+++ b/Test/baseResults/hlsl.numericsuffixes.frag.out
@@ -192,7 +192,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.numthreads.comp.out b/Test/baseResults/hlsl.numthreads.comp.out
index fd7de34..95cf29f 100644
--- a/Test/baseResults/hlsl.numthreads.comp.out
+++ b/Test/baseResults/hlsl.numthreads.comp.out
@@ -44,7 +44,7 @@
 0:?     'tid' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 23
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.opaque-type-bug.frag.out b/Test/baseResults/hlsl.opaque-type-bug.frag.out
index 918b462..4ac7a91 100644
--- a/Test/baseResults/hlsl.opaque-type-bug.frag.out
+++ b/Test/baseResults/hlsl.opaque-type-bug.frag.out
@@ -58,7 +58,7 @@
 0:?     'MyTexture' (layout( binding=0) uniform texture2D)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.overload.frag.out b/Test/baseResults/hlsl.overload.frag.out
index 5960d3d..d93c305 100644
--- a/Test/baseResults/hlsl.overload.frag.out
+++ b/Test/baseResults/hlsl.overload.frag.out
@@ -734,7 +734,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 520
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.params.default.frag.out b/Test/baseResults/hlsl.params.default.frag.out
index d1ecfa6..5d054bf 100644
--- a/Test/baseResults/hlsl.params.default.frag.out
+++ b/Test/baseResults/hlsl.params.default.frag.out
@@ -376,7 +376,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 178
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.partialFlattenLocal.vert.out b/Test/baseResults/hlsl.partialFlattenLocal.vert.out
index 46df206..c3ed3a2 100644
--- a/Test/baseResults/hlsl.partialFlattenLocal.vert.out
+++ b/Test/baseResults/hlsl.partialFlattenLocal.vert.out
@@ -237,7 +237,7 @@
 0:?     'pos' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 90
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.partialFlattenMixed.vert.out b/Test/baseResults/hlsl.partialFlattenMixed.vert.out
index da832b4..520a0fb 100644
--- a/Test/baseResults/hlsl.partialFlattenMixed.vert.out
+++ b/Test/baseResults/hlsl.partialFlattenMixed.vert.out
@@ -91,7 +91,7 @@
 0:?     'pos' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.partialInit.frag.out b/Test/baseResults/hlsl.partialInit.frag.out
index 6881671..551c579 100644
--- a/Test/baseResults/hlsl.partialInit.frag.out
+++ b/Test/baseResults/hlsl.partialInit.frag.out
@@ -400,7 +400,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 104
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.pp.line.frag.out b/Test/baseResults/hlsl.pp.line.frag.out
index 2c06fe9..0416cf4 100644
--- a/Test/baseResults/hlsl.pp.line.frag.out
+++ b/Test/baseResults/hlsl.pp.line.frag.out
@@ -120,7 +120,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.pp.line2.frag.out b/Test/baseResults/hlsl.pp.line2.frag.out
index 10bbf6a..338884a 100644
--- a/Test/baseResults/hlsl.pp.line2.frag.out
+++ b/Test/baseResults/hlsl.pp.line2.frag.out
@@ -1,6 +1,6 @@
 hlsl.pp.line2.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.pp.line3.frag.out b/Test/baseResults/hlsl.pp.line3.frag.out
index 33e5d55..e94547c 100644
--- a/Test/baseResults/hlsl.pp.line3.frag.out
+++ b/Test/baseResults/hlsl.pp.line3.frag.out
@@ -1,6 +1,6 @@
 hlsl.pp.line3.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 78
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.pp.line4.frag.out b/Test/baseResults/hlsl.pp.line4.frag.out
index ff92b52..1ddb98b 100644
--- a/Test/baseResults/hlsl.pp.line4.frag.out
+++ b/Test/baseResults/hlsl.pp.line4.frag.out
@@ -1,6 +1,6 @@
 hlsl.pp.line4.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 115
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.pp.vert.out b/Test/baseResults/hlsl.pp.vert.out
index 24ddfd1..5d4e943 100644
--- a/Test/baseResults/hlsl.pp.vert.out
+++ b/Test/baseResults/hlsl.pp.vert.out
@@ -26,7 +26,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{ uniform int goodGlobal1,  uniform int goodGlobal2})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 13
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.precedence.frag.out b/Test/baseResults/hlsl.precedence.frag.out
index f4c5338..b51be0d 100644
--- a/Test/baseResults/hlsl.precedence.frag.out
+++ b/Test/baseResults/hlsl.precedence.frag.out
@@ -148,7 +148,7 @@
 0:?     'a4' (layout( location=3) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.precedence2.frag.out b/Test/baseResults/hlsl.precedence2.frag.out
index 9ce674d..7dd21a6 100644
--- a/Test/baseResults/hlsl.precedence2.frag.out
+++ b/Test/baseResults/hlsl.precedence2.frag.out
@@ -114,7 +114,7 @@
 0:?     'a4' (layout( location=3) flat in int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 56
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.precise.frag.out b/Test/baseResults/hlsl.precise.frag.out
index dd45069..84b2648 100644
--- a/Test/baseResults/hlsl.precise.frag.out
+++ b/Test/baseResults/hlsl.precise.frag.out
@@ -76,7 +76,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) noContraction out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.preprocessor.frag.out b/Test/baseResults/hlsl.preprocessor.frag.out
index 3c36530..11ec1ad 100644
--- a/Test/baseResults/hlsl.preprocessor.frag.out
+++ b/Test/baseResults/hlsl.preprocessor.frag.out
@@ -94,7 +94,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.promote.atomic.frag.out b/Test/baseResults/hlsl.promote.atomic.frag.out
index bd781bd..4d56fba 100644
--- a/Test/baseResults/hlsl.promote.atomic.frag.out
+++ b/Test/baseResults/hlsl.promote.atomic.frag.out
@@ -64,7 +64,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.promote.binary.frag.out b/Test/baseResults/hlsl.promote.binary.frag.out
index 624a506..f63fc3e 100644
--- a/Test/baseResults/hlsl.promote.binary.frag.out
+++ b/Test/baseResults/hlsl.promote.binary.frag.out
@@ -172,7 +172,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 83
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.promote.vec1.frag.out b/Test/baseResults/hlsl.promote.vec1.frag.out
index b92d740..a6ad7ca 100644
--- a/Test/baseResults/hlsl.promote.vec1.frag.out
+++ b/Test/baseResults/hlsl.promote.vec1.frag.out
@@ -80,7 +80,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.promotions.frag.out b/Test/baseResults/hlsl.promotions.frag.out
index cb79983..0a17395 100644
--- a/Test/baseResults/hlsl.promotions.frag.out
+++ b/Test/baseResults/hlsl.promotions.frag.out
@@ -1582,7 +1582,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 596
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.reflection.binding.frag.out b/Test/baseResults/hlsl.reflection.binding.frag.out
index 464ce0f..a13e575 100644
--- a/Test/baseResults/hlsl.reflection.binding.frag.out
+++ b/Test/baseResults/hlsl.reflection.binding.frag.out
@@ -2,8 +2,8 @@
 Uniform reflection:
 t1: offset -1, type 8b5d, size 1, index -1, binding 15, stages 16
 s1: offset -1, type 0, size 1, index -1, binding 5, stages 16
-t1a: offset -1, type 8b5d, size 1, index -1, binding 16, stages 16
-s1a: offset -1, type 0, size 1, index -1, binding 6, stages 16
+t1a: offset -1, type 8b5d, size 1, index -1, binding 16, stages 16, arrayStride 4, topLevelArrayStride 4
+s1a: offset -1, type 0, size 1, index -1, binding 6, stages 16, arrayStride 4, topLevelArrayStride 4
 c1_a: offset 0, type 8b52, size 1, index 0, binding -1, stages 16
 c1_b: offset 16, type 1404, size 1, index 0, binding -1, stages 16
 c1_c: offset 20, type 1406, size 1, index 0, binding -1, stages 16
@@ -12,8 +12,15 @@
 c2_c: offset 20, type 1406, size 1, index 1, binding -1, stages 16
 
 Uniform block reflection:
-cbuff1: offset -1, type ffffffff, size 24, index -1, binding 2, stages 0
-cbuff2: offset -1, type ffffffff, size 24, index -1, binding 3, stages 0
+cbuff1: offset -1, type ffffffff, size 24, index -1, binding 2, stages 16, numMembers 3
+cbuff2: offset -1, type ffffffff, size 24, index -1, binding 3, stages 16, numMembers 3
 
-Vertex attribute reflection:
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+
+Pipeline output reflection:
+psout.Color: offset 0, type 8b52, size 1, index 0, binding -1, stages 16
 
diff --git a/Test/baseResults/hlsl.reflection.vert.out b/Test/baseResults/hlsl.reflection.vert.out
index ea8d869..535c7fb 100644
--- a/Test/baseResults/hlsl.reflection.vert.out
+++ b/Test/baseResults/hlsl.reflection.vert.out
@@ -7,70 +7,76 @@
 c_m23: offset 16, type 8b67, size 1, index 2, binding -1, stages 1
 c_scalarAfterm23: offset 48, type 1404, size 1, index 2, binding -1, stages 1
 scalarBeforeArray: offset 96, type 1404, size 1, index 0, binding -1, stages 1
-floatArray: offset 112, type 1406, size 5, index 0, binding -1, stages 1
+floatArray: offset 112, type 1406, size 5, index 0, binding -1, stages 1, arrayStride 16, topLevelArrayStride 16
 scalarAfterArray: offset 192, type 1404, size 1, index 0, binding -1, stages 1
-m22: offset 208, type 8b5a, size 9, index 0, binding -1, stages 1
-dm22: offset 32, type 8b5a, size 4, index 1, binding -1, stages 1
+m22: offset 208, type 8b5a, size 9, index 0, binding -1, stages 1, arrayStride 32, topLevelArrayStride 32
+dm22: offset 32, type 8b5a, size 4, index 1, binding -1, stages 1, arrayStride 32, topLevelArrayStride 32
 foo.n1.a: offset 0, type 1406, size 1, index 3, binding -1, stages 1
 foo.n2.b: offset 16, type 1406, size 1, index 3, binding -1, stages 1
 foo.n2.c: offset 20, type 1406, size 1, index 3, binding -1, stages 1
 foo.n2.d: offset 24, type 1406, size 1, index 3, binding -1, stages 1
-deepA.d2.d1[2].va: offset 376, type 8b50, size 2, index 1, binding -1, stages 1
-deepB.d2.d1.va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1
-deepB.d2.d1[0].va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1
-deepB.d2.d1[1].va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1
-deepB.d2.d1[2].va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1
-deepB.d2.d1[3].va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1
-deepC.iv4: offset 1568, type 8b52, size 1, index 1, binding -1, stages 1
-deepC.d2.i: offset 1568, type 1404, size 1, index 1, binding -1, stages 1
-deepC.d2.d1[0].va: offset 1568, type 8b50, size 3, index 1, binding -1, stages 1
-deepC.d2.d1[0].b: offset 1568, type 8b56, size 1, index 1, binding -1, stages 1
-deepC.d2.d1[1].va: offset 1568, type 8b50, size 3, index 1, binding -1, stages 1
-deepC.d2.d1[1].b: offset 1568, type 8b56, size 1, index 1, binding -1, stages 1
-deepC.d2.d1[2].va: offset 1568, type 8b50, size 3, index 1, binding -1, stages 1
-deepC.d2.d1[2].b: offset 1568, type 8b56, size 1, index 1, binding -1, stages 1
-deepC.d2.d1[3].va: offset 1568, type 8b50, size 3, index 1, binding -1, stages 1
-deepC.d2.d1[3].b: offset 1568, type 8b56, size 1, index 1, binding -1, stages 1
-deepC.v3: offset 1568, type 8b54, size 1, index 1, binding -1, stages 1
-deepD[0].iv4: offset 2480, type 8b52, size 1, index 1, binding -1, stages 1
-deepD[0].d2.i: offset 2480, type 1404, size 1, index 1, binding -1, stages 1
-deepD[0].d2.d1[0].va: offset 2480, type 8b50, size 3, index 1, binding -1, stages 1
-deepD[0].d2.d1[0].b: offset 2480, type 8b56, size 1, index 1, binding -1, stages 1
-deepD[0].d2.d1[1].va: offset 2480, type 8b50, size 3, index 1, binding -1, stages 1
-deepD[0].d2.d1[1].b: offset 2480, type 8b56, size 1, index 1, binding -1, stages 1
-deepD[0].d2.d1[2].va: offset 2480, type 8b50, size 3, index 1, binding -1, stages 1
-deepD[0].d2.d1[2].b: offset 2480, type 8b56, size 1, index 1, binding -1, stages 1
-deepD[0].d2.d1[3].va: offset 2480, type 8b50, size 3, index 1, binding -1, stages 1
-deepD[0].d2.d1[3].b: offset 2480, type 8b56, size 1, index 1, binding -1, stages 1
-deepD[0].v3: offset 2480, type 8b54, size 1, index 1, binding -1, stages 1
-deepD[1].iv4: offset 2480, type 8b52, size 1, index 1, binding -1, stages 1
-deepD[1].d2.i: offset 2480, type 1404, size 1, index 1, binding -1, stages 1
-deepD[1].d2.d1[0].va: offset 2480, type 8b50, size 3, index 1, binding -1, stages 1
-deepD[1].d2.d1[0].b: offset 2480, type 8b56, size 1, index 1, binding -1, stages 1
-deepD[1].d2.d1[1].va: offset 2480, type 8b50, size 3, index 1, binding -1, stages 1
-deepD[1].d2.d1[1].b: offset 2480, type 8b56, size 1, index 1, binding -1, stages 1
-deepD[1].d2.d1[2].va: offset 2480, type 8b50, size 3, index 1, binding -1, stages 1
-deepD[1].d2.d1[2].b: offset 2480, type 8b56, size 1, index 1, binding -1, stages 1
-deepD[1].d2.d1[3].va: offset 2480, type 8b50, size 3, index 1, binding -1, stages 1
-deepD[1].d2.d1[3].b: offset 2480, type 8b56, size 1, index 1, binding -1, stages 1
-deepD[1].v3: offset 2480, type 8b54, size 1, index 1, binding -1, stages 1
+deepA.d2.d1[2].va: offset 440, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepB.d2.d1.va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepB.d2.d1[0].va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepB.d2.d1[1].va: offset 1016, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepB.d2.d1[2].va: offset 1048, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepB.d2.d1[3].va: offset 1080, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepC.iv4: offset 1568, type 8b52, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepC.d2.i: offset 1584, type 1404, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepC.d2.d1[0].va: offset 1592, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepC.d2.d1[0].b: offset 1616, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepC.d2.d1[1].va: offset 1624, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepC.d2.d1[1].b: offset 1648, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepC.d2.d1[2].va: offset 1656, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepC.d2.d1[2].b: offset 1680, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepC.d2.d1[3].va: offset 1688, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepC.d2.d1[3].b: offset 1712, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepC.v3: offset 1728, type 8b54, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[0].iv4: offset 2480, type 8b52, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[0].d2.i: offset 2496, type 1404, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[0].d2.d1[0].va: offset 2504, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepD[0].d2.d1[0].b: offset 2528, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[0].d2.d1[1].va: offset 2536, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepD[0].d2.d1[1].b: offset 2560, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[0].d2.d1[2].va: offset 2568, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepD[0].d2.d1[2].b: offset 2592, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[0].d2.d1[3].va: offset 2600, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepD[0].d2.d1[3].b: offset 2624, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[0].v3: offset 2640, type 8b54, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[1].iv4: offset 2784, type 8b52, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[1].d2.i: offset 2800, type 1404, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[1].d2.d1[0].va: offset 2808, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepD[1].d2.d1[0].b: offset 2832, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[1].d2.d1[1].va: offset 2840, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepD[1].d2.d1[1].b: offset 2864, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[1].d2.d1[2].va: offset 2872, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepD[1].d2.d1[2].b: offset 2896, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[1].d2.d1[3].va: offset 2904, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304
+deepD[1].d2.d1[3].b: offset 2928, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
+deepD[1].v3: offset 2944, type 8b54, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304
 foo1: offset 0, type 1406, size 1, index 4, binding -1, stages 1
 foo2: offset 0, type 1406, size 1, index 5, binding -1, stages 1
 anonMember1: offset 0, type 8b51, size 1, index 0, binding -1, stages 1
 uf1: offset 16, type 1406, size 1, index 1, binding -1, stages 1
 
 Uniform block reflection:
-nameless: offset -1, type ffffffff, size 496, index -1, binding -1, stages 0
-$Global: offset -1, type ffffffff, size 3088, index -1, binding -1, stages 0
-c_nameless: offset -1, type ffffffff, size 96, index -1, binding -1, stages 0
-nested: offset -1, type ffffffff, size 32, index -1, binding -1, stages 0
-abl: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-abl2: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
+nameless: offset -1, type ffffffff, size 496, index -1, binding -1, stages 1, numMembers 9
+$Global: offset -1, type ffffffff, size 3088, index -1, binding -1, stages 1, numMembers 106
+c_nameless: offset -1, type ffffffff, size 96, index -1, binding -1, stages 1, numMembers 5
+nested: offset -1, type ffffffff, size 32, index -1, binding -1, stages 1, numMembers 4
+abl: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+abl2: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
 
-Vertex attribute reflection:
-attributeFloat: offset 0, type 1406, size 0, index 0, binding -1, stages 0
-attributeFloat2: offset 0, type 8b50, size 0, index 0, binding -1, stages 0
-attributeFloat3: offset 0, type 8b51, size 0, index 0, binding -1, stages 0
-attributeFloat4: offset 0, type 8b52, size 0, index 0, binding -1, stages 0
-attributeMat4: offset 0, type 8b5c, size 0, index 0, binding -1, stages 0
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+attributeFloat: offset 0, type 1406, size 1, index 0, binding -1, stages 1
+attributeFloat2: offset 0, type 8b50, size 1, index 0, binding -1, stages 1
+attributeFloat3: offset 0, type 8b51, size 1, index 0, binding -1, stages 1
+attributeFloat4: offset 0, type 8b52, size 1, index 0, binding -1, stages 1
+attributeMat4: offset 0, type 8b5c, size 1, index 0, binding -1, stages 1
+
+Pipeline output reflection:
 
diff --git a/Test/baseResults/hlsl.rw.atomics.frag.out b/Test/baseResults/hlsl.rw.atomics.frag.out
index 02aa00c..77b140b 100644
--- a/Test/baseResults/hlsl.rw.atomics.frag.out
+++ b/Test/baseResults/hlsl.rw.atomics.frag.out
@@ -3946,7 +3946,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 1147
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.bracket.frag.out b/Test/baseResults/hlsl.rw.bracket.frag.out
index dc60a29..70f8bbe 100644
--- a/Test/baseResults/hlsl.rw.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.bracket.frag.out
@@ -1744,7 +1744,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 607
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.register.frag.out b/Test/baseResults/hlsl.rw.register.frag.out
index 01f6c89..6004512 100644
--- a/Test/baseResults/hlsl.rw.register.frag.out
+++ b/Test/baseResults/hlsl.rw.register.frag.out
@@ -98,7 +98,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
index aabee59..a8e33dd 100644
--- a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
@@ -1690,7 +1690,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 571
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.swizzle.frag.out b/Test/baseResults/hlsl.rw.swizzle.frag.out
index 089c603..267d733 100644
--- a/Test/baseResults/hlsl.rw.swizzle.frag.out
+++ b/Test/baseResults/hlsl.rw.swizzle.frag.out
@@ -202,7 +202,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 63
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
index a3b5237..06c24e7 100644
--- a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
@@ -1708,7 +1708,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 605
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.array.dx10.frag.out b/Test/baseResults/hlsl.sample.array.dx10.frag.out
index 9066a1d..2d00531 100644
--- a/Test/baseResults/hlsl.sample.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.array.dx10.frag.out
@@ -322,7 +322,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 146
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.basic.dx10.frag.out b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
index 0940e10..1760902 100644
--- a/Test/baseResults/hlsl.sample.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
@@ -550,7 +550,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.dx9.frag.out b/Test/baseResults/hlsl.sample.dx9.frag.out
index 7b3432a..ce6d546 100644
--- a/Test/baseResults/hlsl.sample.dx9.frag.out
+++ b/Test/baseResults/hlsl.sample.dx9.frag.out
@@ -378,7 +378,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 135
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.dx9.vert.out b/Test/baseResults/hlsl.sample.dx9.vert.out
index 732b043..2b29c0c 100644
--- a/Test/baseResults/hlsl.sample.dx9.vert.out
+++ b/Test/baseResults/hlsl.sample.dx9.vert.out
@@ -154,7 +154,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 64
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.offset.dx10.frag.out b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
index 5eadb4a..b641ad2 100644
--- a/Test/baseResults/hlsl.sample.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
@@ -364,7 +364,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 161
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
index edc5d31..54dc467 100644
--- a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
@@ -274,7 +274,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 118
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
index cc44567..8aa0e7f 100644
--- a/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
@@ -154,7 +154,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
index c229502..aec493d 100644
--- a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 146
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
index c840fa4..9a29c6d 100644
--- a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
@@ -424,7 +424,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 170
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
index be4b4f8..fb78b6c 100644
--- a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
@@ -401,7 +401,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 161
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
index ae33f40..8b7bd37 100644
--- a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
@@ -299,7 +299,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 118
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
index 54cbc04..8d0ff46 100644
--- a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
@@ -399,7 +399,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 209
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
index 90e1173..c44f16b 100644
--- a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
@@ -381,7 +381,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmp.dualmode.frag.out b/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
index 7bcf085..fd5dd3e 100644
--- a/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
@@ -85,7 +85,7 @@
 0:?     'g_tTex' (layout( binding=3) uniform texture1D)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
index 29d02da..ca0fb8c 100644
--- a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
@@ -327,7 +327,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 167
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
index bf7b6f0..3d0b8fd 100644
--- a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
@@ -339,7 +339,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 178
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
index 5b21f70..ce13388 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
@@ -435,7 +435,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 210
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
index fae6899..4bf15ec 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
@@ -417,7 +417,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 199
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
index 0987ea8..b85daf0 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
@@ -351,7 +351,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 168
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
index 7434514..6f460d0 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
@@ -363,7 +363,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 179
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
index 67b5692..b2922a1 100644
--- a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
@@ -430,7 +430,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 140
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
index 7edb8da..161821e 100644
--- a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
@@ -532,7 +532,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 175
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
index 979d48f..b683d98 100644
--- a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
@@ -494,7 +494,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 166
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
index 2620a67..81fbc0b 100644
--- a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
@@ -472,7 +472,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 166
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
index 87ad78b..01ca547 100644
--- a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
@@ -340,7 +340,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 120
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
index 4f07950..a5ff45a 100644
--- a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 147
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
index ee982cc..6b91c17 100644
--- a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
@@ -426,7 +426,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 172
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
index 0a8ae49..8f395ed 100644
--- a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
@@ -386,7 +386,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 162
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
index b007ee1..10b48ec 100644
--- a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
@@ -400,7 +400,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 162
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
index 302bc81..5fb25a0 100644
--- a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
@@ -298,7 +298,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 119
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.scalar-length.frag.out b/Test/baseResults/hlsl.scalar-length.frag.out
index aa11af5..ec80897 100644
--- a/Test/baseResults/hlsl.scalar-length.frag.out
+++ b/Test/baseResults/hlsl.scalar-length.frag.out
@@ -64,7 +64,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.scalar2matrix.frag.out b/Test/baseResults/hlsl.scalar2matrix.frag.out
index 57d250e..cb996f6 100644
--- a/Test/baseResults/hlsl.scalar2matrix.frag.out
+++ b/Test/baseResults/hlsl.scalar2matrix.frag.out
@@ -374,7 +374,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 96
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.scalarCast.vert.out b/Test/baseResults/hlsl.scalarCast.vert.out
index 0e07c9f..40f0f20 100644
--- a/Test/baseResults/hlsl.scalarCast.vert.out
+++ b/Test/baseResults/hlsl.scalarCast.vert.out
@@ -322,7 +322,7 @@
 0:?     '@entryPointOutput.texCoord' (layout( location=0) out 2-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 120
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.scope.frag.out b/Test/baseResults/hlsl.scope.frag.out
index b563380..882158e 100644
--- a/Test/baseResults/hlsl.scope.frag.out
+++ b/Test/baseResults/hlsl.scope.frag.out
@@ -102,7 +102,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 49
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.self_cast.frag.out b/Test/baseResults/hlsl.self_cast.frag.out
index 9d398ed..6f0e1dd 100644
--- a/Test/baseResults/hlsl.self_cast.frag.out
+++ b/Test/baseResults/hlsl.self_cast.frag.out
@@ -68,7 +68,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.semantic-1.vert.out b/Test/baseResults/hlsl.semantic-1.vert.out
index b5e4091..96c14a9 100644
--- a/Test/baseResults/hlsl.semantic-1.vert.out
+++ b/Test/baseResults/hlsl.semantic-1.vert.out
@@ -242,7 +242,7 @@
 0:?     'v' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.semantic.geom.out b/Test/baseResults/hlsl.semantic.geom.out
index 773c8aa..29ec235 100644
--- a/Test/baseResults/hlsl.semantic.geom.out
+++ b/Test/baseResults/hlsl.semantic.geom.out
@@ -66,6 +66,58 @@
 0:13      Function Call: @main(u1[3];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
 0:?         'VertexID' ( temp 3-element array of uint)
 0:?         'OutputStream' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:21  Function Definition: notmain(u1[2];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
+0:21    Function Parameters: 
+0:21      'VertexID' ( in 2-element array of uint)
+0:21      'OutputStream' ( out structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:?     Sequence
+0:23      Sequence
+0:23        Sequence
+0:23          move second child to first child ( temp float)
+0:?             'OutputStream.clip0' ( out float Position)
+0:23            clip0: direct index for structure ( temp float)
+0:23              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23              Constant:
+0:23                0 (const int)
+0:?           Sequence
+0:23            move second child to first child ( temp float)
+0:23              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip0' ( out 1-element array of float ClipDistance)
+0:23                Constant:
+0:23                  0 (const int)
+0:23              clip0: direct index for structure ( temp float)
+0:23                's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23                Constant:
+0:23                  1 (const int)
+0:?           Sequence
+0:23            move second child to first child ( temp float)
+0:23              direct index ( out float CullDistance)
+0:?                 'OutputStream.cull0' ( out 1-element array of float CullDistance)
+0:23                Constant:
+0:23                  0 (const int)
+0:23              cull0: direct index for structure ( temp float)
+0:23                's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23                Constant:
+0:23                  2 (const int)
+0:23          move second child to first child ( temp uint)
+0:?             'OutputStream.vpai' ( out uint ViewportIndex)
+0:23            vpai: direct index for structure ( temp uint)
+0:23              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23              Constant:
+0:23                3 (const int)
+0:23          move second child to first child ( temp uint)
+0:?             'OutputStream.rtai' ( out uint Layer)
+0:23            rtai: direct index for structure ( temp uint)
+0:23              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23              Constant:
+0:23                4 (const int)
+0:23          move second child to first child ( temp int)
+0:?             'OutputStream.ii' (layout( location=0) out int)
+0:23            ii: direct index for structure ( temp int)
+0:23              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23              Constant:
+0:23                5 (const int)
+0:23        EmitVertex ( temp void)
 0:?   Linker Objects
 0:?     'VertexID' (layout( location=0) in 3-element array of uint)
 0:?     'OutputStream.clip0' ( out float Position)
@@ -146,6 +198,58 @@
 0:13      Function Call: @main(u1[3];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
 0:?         'VertexID' ( temp 3-element array of uint)
 0:?         'OutputStream' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:21  Function Definition: notmain(u1[2];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
+0:21    Function Parameters: 
+0:21      'VertexID' ( in 2-element array of uint)
+0:21      'OutputStream' ( out structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:?     Sequence
+0:23      Sequence
+0:23        Sequence
+0:23          move second child to first child ( temp float)
+0:?             'OutputStream.clip0' ( out float Position)
+0:23            clip0: direct index for structure ( temp float)
+0:23              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23              Constant:
+0:23                0 (const int)
+0:?           Sequence
+0:23            move second child to first child ( temp float)
+0:23              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip0' ( out 1-element array of float ClipDistance)
+0:23                Constant:
+0:23                  0 (const int)
+0:23              clip0: direct index for structure ( temp float)
+0:23                's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23                Constant:
+0:23                  1 (const int)
+0:?           Sequence
+0:23            move second child to first child ( temp float)
+0:23              direct index ( out float CullDistance)
+0:?                 'OutputStream.cull0' ( out 1-element array of float CullDistance)
+0:23                Constant:
+0:23                  0 (const int)
+0:23              cull0: direct index for structure ( temp float)
+0:23                's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23                Constant:
+0:23                  2 (const int)
+0:23          move second child to first child ( temp uint)
+0:?             'OutputStream.vpai' ( out uint ViewportIndex)
+0:23            vpai: direct index for structure ( temp uint)
+0:23              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23              Constant:
+0:23                3 (const int)
+0:23          move second child to first child ( temp uint)
+0:?             'OutputStream.rtai' ( out uint Layer)
+0:23            rtai: direct index for structure ( temp uint)
+0:23              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23              Constant:
+0:23                4 (const int)
+0:23          move second child to first child ( temp int)
+0:?             'OutputStream.ii' (layout( location=0) out int)
+0:23            ii: direct index for structure ( temp int)
+0:23              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23              Constant:
+0:23                5 (const int)
+0:23        EmitVertex ( temp void)
 0:?   Linker Objects
 0:?     'VertexID' (layout( location=0) in 3-element array of uint)
 0:?     'OutputStream.clip0' ( out float Position)
@@ -157,8 +261,8 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 65
+// Generated by (magic number): 80008
+// Id's are bound by 88
 
                               Capability Geometry
                               Capability ClipDistance
@@ -166,7 +270,7 @@
                               Capability MultiViewport
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Geometry 4  "main" 20 29 34 40 45 50 57
+                              EntryPoint Geometry 4  "main" 28 37 42 48 53 58 65
                               ExecutionMode 4 Triangles
                               ExecutionMode 4 Invocations 1
                               ExecutionMode 4 OutputLineStrip
@@ -183,25 +287,29 @@
                               Name 17  "@main(u1[3];struct-S-f1-f1-f1-u1-u1-i11;"
                               Name 15  "VertexID"
                               Name 16  "OutputStream"
-                              Name 20  "OutputStream.clip0"
-                              Name 21  "s"
-                              Name 29  "OutputStream.clip0"
-                              Name 34  "OutputStream.cull0"
-                              Name 40  "OutputStream.vpai"
-                              Name 45  "OutputStream.rtai"
-                              Name 50  "OutputStream.ii"
-                              Name 55  "VertexID"
-                              Name 57  "VertexID"
-                              Name 59  "OutputStream"
-                              Name 60  "param"
-                              Name 62  "param"
-                              Decorate 20(OutputStream.clip0) BuiltIn Position
-                              Decorate 29(OutputStream.clip0) BuiltIn ClipDistance
-                              Decorate 34(OutputStream.cull0) BuiltIn CullDistance
-                              Decorate 40(OutputStream.vpai) BuiltIn ViewportIndex
-                              Decorate 45(OutputStream.rtai) BuiltIn Layer
-                              Decorate 50(OutputStream.ii) Location 0
-                              Decorate 57(VertexID) Location 0
+                              Name 25  "notmain(u1[2];struct-S-f1-f1-f1-u1-u1-i11;"
+                              Name 23  "VertexID"
+                              Name 24  "OutputStream"
+                              Name 28  "OutputStream.clip0"
+                              Name 29  "s"
+                              Name 37  "OutputStream.clip0"
+                              Name 42  "OutputStream.cull0"
+                              Name 48  "OutputStream.vpai"
+                              Name 53  "OutputStream.rtai"
+                              Name 58  "OutputStream.ii"
+                              Name 63  "VertexID"
+                              Name 65  "VertexID"
+                              Name 67  "OutputStream"
+                              Name 68  "param"
+                              Name 70  "param"
+                              Name 73  "s"
+                              Decorate 28(OutputStream.clip0) BuiltIn Position
+                              Decorate 37(OutputStream.clip0) BuiltIn ClipDistance
+                              Decorate 42(OutputStream.cull0) BuiltIn CullDistance
+                              Decorate 48(OutputStream.vpai) BuiltIn ViewportIndex
+                              Decorate 53(OutputStream.rtai) BuiltIn Layer
+                              Decorate 58(OutputStream.ii) Location 0
+                              Decorate 65(VertexID) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -213,69 +321,101 @@
            12(S):             TypeStruct 10(float) 10(float) 10(float) 6(int) 6(int) 11(int)
               13:             TypePointer Function 12(S)
               14:             TypeFunction 2 9(ptr) 13(ptr)
-              19:             TypePointer Output 10(float)
-20(OutputStream.clip0):     19(ptr) Variable Output
-              22:     11(int) Constant 0
-              23:             TypePointer Function 10(float)
-              26:      6(int) Constant 1
-              27:             TypeArray 10(float) 26
-              28:             TypePointer Output 27
-29(OutputStream.clip0):     28(ptr) Variable Output
-              30:     11(int) Constant 1
-34(OutputStream.cull0):     28(ptr) Variable Output
-              35:     11(int) Constant 2
-              39:             TypePointer Output 6(int)
-40(OutputStream.vpai):     39(ptr) Variable Output
-              41:     11(int) Constant 3
-              42:             TypePointer Function 6(int)
-45(OutputStream.rtai):     39(ptr) Variable Output
-              46:     11(int) Constant 4
-              49:             TypePointer Output 11(int)
-50(OutputStream.ii):     49(ptr) Variable Output
-              51:     11(int) Constant 5
-              52:             TypePointer Function 11(int)
-              56:             TypePointer Input 8
-    57(VertexID):     56(ptr) Variable Input
+              19:      6(int) Constant 2
+              20:             TypeArray 6(int) 19
+              21:             TypePointer Function 20
+              22:             TypeFunction 2 21(ptr) 13(ptr)
+              27:             TypePointer Output 10(float)
+28(OutputStream.clip0):     27(ptr) Variable Output
+              30:     11(int) Constant 0
+              31:             TypePointer Function 10(float)
+              34:      6(int) Constant 1
+              35:             TypeArray 10(float) 34
+              36:             TypePointer Output 35
+37(OutputStream.clip0):     36(ptr) Variable Output
+              38:     11(int) Constant 1
+42(OutputStream.cull0):     36(ptr) Variable Output
+              43:     11(int) Constant 2
+              47:             TypePointer Output 6(int)
+48(OutputStream.vpai):     47(ptr) Variable Output
+              49:     11(int) Constant 3
+              50:             TypePointer Function 6(int)
+53(OutputStream.rtai):     47(ptr) Variable Output
+              54:     11(int) Constant 4
+              57:             TypePointer Output 11(int)
+58(OutputStream.ii):     57(ptr) Variable Output
+              59:     11(int) Constant 5
+              60:             TypePointer Function 11(int)
+              64:             TypePointer Input 8
+    65(VertexID):     64(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-    55(VertexID):      9(ptr) Variable Function
-59(OutputStream):     13(ptr) Variable Function
-       60(param):      9(ptr) Variable Function
-       62(param):     13(ptr) Variable Function
-              58:           8 Load 57(VertexID)
-                              Store 55(VertexID) 58
-              61:           8 Load 55(VertexID)
-                              Store 60(param) 61
-              63:           2 FunctionCall 17(@main(u1[3];struct-S-f1-f1-f1-u1-u1-i11;) 60(param) 62(param)
-              64:       12(S) Load 62(param)
-                              Store 59(OutputStream) 64
+    63(VertexID):      9(ptr) Variable Function
+67(OutputStream):     13(ptr) Variable Function
+       68(param):      9(ptr) Variable Function
+       70(param):     13(ptr) Variable Function
+              66:           8 Load 65(VertexID)
+                              Store 63(VertexID) 66
+              69:           8 Load 63(VertexID)
+                              Store 68(param) 69
+              71:           2 FunctionCall 17(@main(u1[3];struct-S-f1-f1-f1-u1-u1-i11;) 68(param) 70(param)
+              72:       12(S) Load 70(param)
+                              Store 67(OutputStream) 72
                               Return
                               FunctionEnd
 17(@main(u1[3];struct-S-f1-f1-f1-u1-u1-i11;):           2 Function None 14
     15(VertexID):      9(ptr) FunctionParameter
 16(OutputStream):     13(ptr) FunctionParameter
               18:             Label
-           21(s):     13(ptr) Variable Function
-              24:     23(ptr) AccessChain 21(s) 22
-              25:   10(float) Load 24
-                              Store 20(OutputStream.clip0) 25
-              31:     23(ptr) AccessChain 21(s) 30
-              32:   10(float) Load 31
-              33:     19(ptr) AccessChain 29(OutputStream.clip0) 22
-                              Store 33 32
-              36:     23(ptr) AccessChain 21(s) 35
-              37:   10(float) Load 36
-              38:     19(ptr) AccessChain 34(OutputStream.cull0) 22
-                              Store 38 37
-              43:     42(ptr) AccessChain 21(s) 41
-              44:      6(int) Load 43
-                              Store 40(OutputStream.vpai) 44
-              47:     42(ptr) AccessChain 21(s) 46
-              48:      6(int) Load 47
-                              Store 45(OutputStream.rtai) 48
-              53:     52(ptr) AccessChain 21(s) 51
-              54:     11(int) Load 53
-                              Store 50(OutputStream.ii) 54
+           29(s):     13(ptr) Variable Function
+              32:     31(ptr) AccessChain 29(s) 30
+              33:   10(float) Load 32
+                              Store 28(OutputStream.clip0) 33
+              39:     31(ptr) AccessChain 29(s) 38
+              40:   10(float) Load 39
+              41:     27(ptr) AccessChain 37(OutputStream.clip0) 30
+                              Store 41 40
+              44:     31(ptr) AccessChain 29(s) 43
+              45:   10(float) Load 44
+              46:     27(ptr) AccessChain 42(OutputStream.cull0) 30
+                              Store 46 45
+              51:     50(ptr) AccessChain 29(s) 49
+              52:      6(int) Load 51
+                              Store 48(OutputStream.vpai) 52
+              55:     50(ptr) AccessChain 29(s) 54
+              56:      6(int) Load 55
+                              Store 53(OutputStream.rtai) 56
+              61:     60(ptr) AccessChain 29(s) 59
+              62:     11(int) Load 61
+                              Store 58(OutputStream.ii) 62
+                              EmitVertex
+                              Return
+                              FunctionEnd
+25(notmain(u1[2];struct-S-f1-f1-f1-u1-u1-i11;):           2 Function None 22
+    23(VertexID):     21(ptr) FunctionParameter
+24(OutputStream):     13(ptr) FunctionParameter
+              26:             Label
+           73(s):     13(ptr) Variable Function
+              74:     31(ptr) AccessChain 73(s) 30
+              75:   10(float) Load 74
+                              Store 28(OutputStream.clip0) 75
+              76:     31(ptr) AccessChain 73(s) 38
+              77:   10(float) Load 76
+              78:     27(ptr) AccessChain 37(OutputStream.clip0) 30
+                              Store 78 77
+              79:     31(ptr) AccessChain 73(s) 43
+              80:   10(float) Load 79
+              81:     27(ptr) AccessChain 42(OutputStream.cull0) 30
+                              Store 81 80
+              82:     50(ptr) AccessChain 73(s) 49
+              83:      6(int) Load 82
+                              Store 48(OutputStream.vpai) 83
+              84:     50(ptr) AccessChain 73(s) 54
+              85:      6(int) Load 84
+                              Store 53(OutputStream.rtai) 85
+              86:     60(ptr) AccessChain 73(s) 59
+              87:     11(int) Load 86
+                              Store 58(OutputStream.ii) 87
                               EmitVertex
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.semantic.vert.out b/Test/baseResults/hlsl.semantic.vert.out
index 2dbcd57..144df05 100644
--- a/Test/baseResults/hlsl.semantic.vert.out
+++ b/Test/baseResults/hlsl.semantic.vert.out
@@ -210,7 +210,7 @@
 0:?     '@entryPointOutput.cull1' ( out 2-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.semicolons.frag.out b/Test/baseResults/hlsl.semicolons.frag.out
index 94307a6..b45f59d 100644
--- a/Test/baseResults/hlsl.semicolons.frag.out
+++ b/Test/baseResults/hlsl.semicolons.frag.out
@@ -74,7 +74,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.shapeConv.frag.out b/Test/baseResults/hlsl.shapeConv.frag.out
index d283809..8da8d48 100644
--- a/Test/baseResults/hlsl.shapeConv.frag.out
+++ b/Test/baseResults/hlsl.shapeConv.frag.out
@@ -319,7 +319,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 127
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.shapeConvRet.frag.out b/Test/baseResults/hlsl.shapeConvRet.frag.out
index fc12f7f..efcbe04 100644
--- a/Test/baseResults/hlsl.shapeConvRet.frag.out
+++ b/Test/baseResults/hlsl.shapeConvRet.frag.out
@@ -68,7 +68,7 @@
 0:?     'f' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.shift.per-set.frag.out b/Test/baseResults/hlsl.shift.per-set.frag.out
index 7c7d383..60e2ecc 100644
--- a/Test/baseResults/hlsl.shift.per-set.frag.out
+++ b/Test/baseResults/hlsl.shift.per-set.frag.out
@@ -203,8 +203,8 @@
 t1: offset -1, type 8b5d, size 1, index -1, binding 21, stages 16
 t2: offset -1, type 8b5e, size 1, index -1, binding 22, stages 16
 t3: offset -1, type 8b5f, size 1, index -1, binding 26, stages 16
-t4.@data: offset 0, type 8b52, size 1, index 0, binding -1, stages 16
-t5.@data: offset 0, type 1405, size 0, index 1, binding -1, stages 16
+t4.@data: offset 0, type 8b52, size 1, index 0, binding -1, stages 16, arrayStride 16, topLevelArrayStride 16
+t5.@data: offset 0, type 1405, size 0, index 1, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4
 t6: offset -1, type 8dc2, size 1, index -1, binding 23, stages 16
 s1: offset -1, type 0, size 1, index -1, binding 11, stages 16
 s2: offset -1, type 0, size 1, index -1, binding 17, stages 16
@@ -212,19 +212,26 @@
 u2: offset -1, type 904d, size 1, index -1, binding 42, stages 16
 u3: offset -1, type 904e, size 1, index -1, binding 43, stages 16
 u4: offset -1, type 9051, size 1, index -1, binding 34, stages 16
-u5.@data: offset 0, type 1405, size 0, index 2, binding -1, stages 16
-u6.@data: offset 0, type 1406, size 1, index 3, binding -1, stages 16
+u5.@data: offset 0, type 1405, size 0, index 2, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4
+u6.@data: offset 0, type 1406, size 1, index 3, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4
 cb1: offset 0, type 1404, size 1, index 4, binding -1, stages 16
 tb1: offset 0, type 1404, size 1, index 5, binding -1, stages 16
 ts6: offset -1, type 8b5f, size 1, index -1, binding 71, stages 16
 
 Uniform block reflection:
-t4: offset -1, type ffffffff, size 0, index -1, binding 21, stages 0
-t5: offset -1, type ffffffff, size 0, index -1, binding 22, stages 0
-u5: offset -1, type ffffffff, size 0, index -1, binding 44, stages 0
-u6: offset -1, type ffffffff, size 0, index -1, binding 34, stages 0
-cb: offset -1, type ffffffff, size 4, index -1, binding 51, stages 0
-tb: offset -1, type ffffffff, size 4, index -1, binding 27, stages 0
+t4: offset -1, type ffffffff, size 0, index -1, binding 21, stages 16, numMembers 1
+t5: offset -1, type ffffffff, size 0, index -1, binding 22, stages 16, numMembers 1
+u5: offset -1, type ffffffff, size 0, index -1, binding 44, stages 16, numMembers 1
+u6: offset -1, type ffffffff, size 0, index -1, binding 34, stages 16, numMembers 1
+cb: offset -1, type ffffffff, size 4, index -1, binding 51, stages 16, numMembers 1
+tb: offset -1, type ffffffff, size 4, index -1, binding 27, stages 16, numMembers 1
 
-Vertex attribute reflection:
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+
+Pipeline output reflection:
+@entryPointOutput: offset 0, type 8b52, size 1, index 0, binding -1, stages 16
 
diff --git a/Test/baseResults/hlsl.sin.frag.out b/Test/baseResults/hlsl.sin.frag.out
index b92085e..3128cec 100644
--- a/Test/baseResults/hlsl.sin.frag.out
+++ b/Test/baseResults/hlsl.sin.frag.out
@@ -52,7 +52,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.singleArgIntPromo.vert.out b/Test/baseResults/hlsl.singleArgIntPromo.vert.out
new file mode 100755
index 0000000..71c1bb2
--- /dev/null
+++ b/Test/baseResults/hlsl.singleArgIntPromo.vert.out
@@ -0,0 +1,312 @@
+hlsl.singleArgIntPromo.vert
+Shader version: 500
+0:? Sequence
+0:2  Function Definition: @main( ( temp float)
+0:2    Function Parameters: 
+0:?     Sequence
+0:3      Sequence
+0:3        move second child to first child ( temp int)
+0:3          'd' ( temp int)
+0:3          Constant:
+0:3            4 (const int)
+0:4      Sequence
+0:4        move second child to first child ( temp 2-component vector of int)
+0:4          'd2' ( temp 2-component vector of int)
+0:?           Construct ivec2 ( temp 2-component vector of int)
+0:4            Constant:
+0:4              5 (const int)
+0:4            'd' ( temp int)
+0:5      Sequence
+0:5        move second child to first child ( temp float)
+0:5          'f1' ( temp float)
+0:5          Constant:
+0:5            2.321928
+0:6      Sequence
+0:6        move second child to first child ( temp 2-component vector of float)
+0:6          'f2' ( temp 2-component vector of float)
+0:6          log ( temp 2-component vector of float)
+0:6            Convert int to float ( temp 2-component vector of float)
+0:6              'd2' ( temp 2-component vector of int)
+0:7      Sequence
+0:7        move second child to first child ( temp 3-component vector of float)
+0:7          'f3' ( temp 3-component vector of float)
+0:?           Constant:
+0:?             1.945910
+0:?             0.693147
+0:?             1.098612
+0:8      Sequence
+0:8        move second child to first child ( temp 2-component vector of float)
+0:8          'f22' ( temp 2-component vector of float)
+0:8          Constant:
+0:8            0.000000
+0:8            0.000000
+0:10      Sequence
+0:10        move second child to first child ( temp int)
+0:10          'a' ( temp int)
+0:10          Constant:
+0:10            5 (const int)
+0:11      Sequence
+0:11        move second child to first child ( temp mediump float)
+0:11          'b' ( temp mediump float)
+0:11          direct index ( temp mediump float)
+0:11            unpackHalf2x16 ( temp mediump 2-component vector of float)
+0:11              Convert int to uint ( temp mediump uint)
+0:11                'a' ( temp mediump int)
+0:11            Constant:
+0:11              0 (const int)
+0:12      multiply second child into first child ( temp mediump float)
+0:12        'b' ( temp mediump float)
+0:12        'b' ( temp mediump float)
+0:13      Sequence
+0:13        move second child to first child ( temp uint)
+0:13          'c' ( temp uint)
+0:13          packHalf2x16 ( temp uint)
+0:13            Construct vec2 ( temp 2-component vector of float)
+0:13              'b' ( temp mediump float)
+0:13              Constant:
+0:13                0.000000
+0:15      Branch: Return with expression
+0:15        add ( temp float)
+0:15          add ( temp float)
+0:15            add ( temp float)
+0:15              add ( temp float)
+0:15                'f1' ( temp float)
+0:15                direct index ( temp float)
+0:15                  'f2' ( temp 2-component vector of float)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              direct index ( temp float)
+0:15                'f3' ( temp 3-component vector of float)
+0:15                Constant:
+0:15                  2 (const int)
+0:15            direct index ( temp float)
+0:15              'f22' ( temp 2-component vector of float)
+0:15              Constant:
+0:15                1 (const int)
+0:15          Convert uint to float ( temp float)
+0:15            'c' ( temp uint)
+0:2  Function Definition: main( ( temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child ( temp float)
+0:?         '@entryPointOutput' (layout( location=0) out float)
+0:2        Function Call: @main( ( temp float)
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout( location=0) out float)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:2  Function Definition: @main( ( temp float)
+0:2    Function Parameters: 
+0:?     Sequence
+0:3      Sequence
+0:3        move second child to first child ( temp int)
+0:3          'd' ( temp int)
+0:3          Constant:
+0:3            4 (const int)
+0:4      Sequence
+0:4        move second child to first child ( temp 2-component vector of int)
+0:4          'd2' ( temp 2-component vector of int)
+0:?           Construct ivec2 ( temp 2-component vector of int)
+0:4            Constant:
+0:4              5 (const int)
+0:4            'd' ( temp int)
+0:5      Sequence
+0:5        move second child to first child ( temp float)
+0:5          'f1' ( temp float)
+0:5          Constant:
+0:5            2.321928
+0:6      Sequence
+0:6        move second child to first child ( temp 2-component vector of float)
+0:6          'f2' ( temp 2-component vector of float)
+0:6          log ( temp 2-component vector of float)
+0:6            Convert int to float ( temp 2-component vector of float)
+0:6              'd2' ( temp 2-component vector of int)
+0:7      Sequence
+0:7        move second child to first child ( temp 3-component vector of float)
+0:7          'f3' ( temp 3-component vector of float)
+0:?           Constant:
+0:?             1.945910
+0:?             0.693147
+0:?             1.098612
+0:8      Sequence
+0:8        move second child to first child ( temp 2-component vector of float)
+0:8          'f22' ( temp 2-component vector of float)
+0:8          Constant:
+0:8            0.000000
+0:8            0.000000
+0:10      Sequence
+0:10        move second child to first child ( temp int)
+0:10          'a' ( temp int)
+0:10          Constant:
+0:10            5 (const int)
+0:11      Sequence
+0:11        move second child to first child ( temp mediump float)
+0:11          'b' ( temp mediump float)
+0:11          direct index ( temp mediump float)
+0:11            unpackHalf2x16 ( temp mediump 2-component vector of float)
+0:11              Convert int to uint ( temp mediump uint)
+0:11                'a' ( temp mediump int)
+0:11            Constant:
+0:11              0 (const int)
+0:12      multiply second child into first child ( temp mediump float)
+0:12        'b' ( temp mediump float)
+0:12        'b' ( temp mediump float)
+0:13      Sequence
+0:13        move second child to first child ( temp uint)
+0:13          'c' ( temp uint)
+0:13          packHalf2x16 ( temp uint)
+0:13            Construct vec2 ( temp 2-component vector of float)
+0:13              'b' ( temp mediump float)
+0:13              Constant:
+0:13                0.000000
+0:15      Branch: Return with expression
+0:15        add ( temp float)
+0:15          add ( temp float)
+0:15            add ( temp float)
+0:15              add ( temp float)
+0:15                'f1' ( temp float)
+0:15                direct index ( temp float)
+0:15                  'f2' ( temp 2-component vector of float)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              direct index ( temp float)
+0:15                'f3' ( temp 3-component vector of float)
+0:15                Constant:
+0:15                  2 (const int)
+0:15            direct index ( temp float)
+0:15              'f22' ( temp 2-component vector of float)
+0:15              Constant:
+0:15                1 (const int)
+0:15          Convert uint to float ( temp float)
+0:15            'c' ( temp uint)
+0:2  Function Definition: main( ( temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child ( temp float)
+0:?         '@entryPointOutput' (layout( location=0) out float)
+0:2        Function Call: @main( ( temp float)
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout( location=0) out float)
+
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 75
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 73
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 8  "@main("
+                              Name 12  "d"
+                              Name 16  "d2"
+                              Name 21  "f1"
+                              Name 25  "f2"
+                              Name 31  "f3"
+                              Name 36  "f22"
+                              Name 39  "a"
+                              Name 40  "b"
+                              Name 51  "c"
+                              Name 73  "@entryPointOutput"
+                              Decorate 40(b) RelaxedPrecision
+                              Decorate 41 RelaxedPrecision
+                              Decorate 43 RelaxedPrecision
+                              Decorate 44 RelaxedPrecision
+                              Decorate 46 RelaxedPrecision
+                              Decorate 47 RelaxedPrecision
+                              Decorate 48 RelaxedPrecision
+                              Decorate 49 RelaxedPrecision
+                              Decorate 52 RelaxedPrecision
+                              Decorate 73(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeFunction 6(float)
+              10:             TypeInt 32 1
+              11:             TypePointer Function 10(int)
+              13:     10(int) Constant 4
+              14:             TypeVector 10(int) 2
+              15:             TypePointer Function 14(ivec2)
+              17:     10(int) Constant 5
+              20:             TypePointer Function 6(float)
+              22:    6(float) Constant 1075092088
+              23:             TypeVector 6(float) 2
+              24:             TypePointer Function 23(fvec2)
+              29:             TypeVector 6(float) 3
+              30:             TypePointer Function 29(fvec3)
+              32:    6(float) Constant 1073288085
+              33:    6(float) Constant 1060205080
+              34:    6(float) Constant 1066180436
+              35:   29(fvec3) ConstantComposite 32 33 34
+              37:    6(float) Constant 0
+              38:   23(fvec2) ConstantComposite 37 37
+              42:             TypeInt 32 0
+              45:     42(int) Constant 0
+              50:             TypePointer Function 42(int)
+              59:     42(int) Constant 2
+              63:     42(int) Constant 1
+              72:             TypePointer Output 6(float)
+73(@entryPointOutput):     72(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+              74:    6(float) FunctionCall 8(@main()
+                              Store 73(@entryPointOutput) 74
+                              Return
+                              FunctionEnd
+       8(@main():    6(float) Function None 7
+               9:             Label
+           12(d):     11(ptr) Variable Function
+          16(d2):     15(ptr) Variable Function
+          21(f1):     20(ptr) Variable Function
+          25(f2):     24(ptr) Variable Function
+          31(f3):     30(ptr) Variable Function
+         36(f22):     24(ptr) Variable Function
+           39(a):     11(ptr) Variable Function
+           40(b):     20(ptr) Variable Function
+           51(c):     50(ptr) Variable Function
+                              Store 12(d) 13
+              18:     10(int) Load 12(d)
+              19:   14(ivec2) CompositeConstruct 17 18
+                              Store 16(d2) 19
+                              Store 21(f1) 22
+              26:   14(ivec2) Load 16(d2)
+              27:   23(fvec2) ConvertSToF 26
+              28:   23(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 27
+                              Store 25(f2) 28
+                              Store 31(f3) 35
+                              Store 36(f22) 38
+                              Store 39(a) 17
+              41:     10(int) Load 39(a)
+              43:     42(int) Bitcast 41
+              44:   23(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 43
+              46:    6(float) CompositeExtract 44 0
+                              Store 40(b) 46
+              47:    6(float) Load 40(b)
+              48:    6(float) Load 40(b)
+              49:    6(float) FMul 48 47
+                              Store 40(b) 49
+              52:    6(float) Load 40(b)
+              53:   23(fvec2) CompositeConstruct 52 37
+              54:     42(int) ExtInst 1(GLSL.std.450) 58(PackHalf2x16) 53
+                              Store 51(c) 54
+              55:    6(float) Load 21(f1)
+              56:     20(ptr) AccessChain 25(f2) 45
+              57:    6(float) Load 56
+              58:    6(float) FAdd 55 57
+              60:     20(ptr) AccessChain 31(f3) 59
+              61:    6(float) Load 60
+              62:    6(float) FAdd 58 61
+              64:     20(ptr) AccessChain 36(f22) 63
+              65:    6(float) Load 64
+              66:    6(float) FAdd 62 65
+              67:     42(int) Load 51(c)
+              68:    6(float) ConvertUToF 67
+              69:    6(float) FAdd 66 68
+                              ReturnValue 69
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.snorm.uav.comp.out b/Test/baseResults/hlsl.snorm.uav.comp.out
index 4c5e603..739d77d 100644
--- a/Test/baseResults/hlsl.snorm.uav.comp.out
+++ b/Test/baseResults/hlsl.snorm.uav.comp.out
@@ -112,7 +112,7 @@
 0:?     'tid' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.specConstant.frag.out b/Test/baseResults/hlsl.specConstant.frag.out
new file mode 100755
index 0000000..fdcc2a0
--- /dev/null
+++ b/Test/baseResults/hlsl.specConstant.frag.out
@@ -0,0 +1,230 @@
+hlsl.specConstant.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6  Function Definition: @main( ( temp 4-component vector of float)
+0:6    Function Parameters: 
+0:?     Sequence
+0:8      Sequence
+0:8        move second child to first child ( temp uint)
+0:8          'i' ( temp uint)
+0:8          Constant:
+0:8            0 (const uint)
+0:8        Loop with condition tested first
+0:8          Loop Condition
+0:8          Compare Less Than ( temp bool)
+0:8            'i' ( temp uint)
+0:8            indirect index ( const uint)
+0:8              Constant:
+0:8                10 (const uint)
+0:8                20 (const uint)
+0:8                30 (const uint)
+0:8                40 (const uint)
+0:8              'index' ( specialization-constant const uint)
+0:8                2 (const uint)
+0:8          Loop Body
+0:9          move second child to first child ( temp 4-component vector of float)
+0:9            'r' ( temp 4-component vector of float)
+0:9            Construct vec4 ( temp 4-component vector of float)
+0:9              Convert uint to float ( temp float)
+0:9                'i' ( temp uint)
+0:8          Loop Terminal Expression
+0:8          Post-Increment ( temp uint)
+0:8            'i' ( temp uint)
+0:11      add second child into first child ( temp 4-component vector of float)
+0:11        'r' ( temp 4-component vector of float)
+0:11        Convert uint to float ( temp float)
+0:11          add ( specialization-constant const uint)
+0:11            'index' ( specialization-constant const uint)
+0:11              2 (const uint)
+0:11            'index' ( specialization-constant const uint)
+0:11              2 (const uint)
+0:12      add second child into first child ( temp 4-component vector of float)
+0:12        'r' ( temp 4-component vector of float)
+0:12        Convert uint to float ( temp float)
+0:12          component-wise multiply ( specialization-constant const uint)
+0:12            Constant:
+0:12              2 (const uint)
+0:12            'index' ( specialization-constant const uint)
+0:12              2 (const uint)
+0:14      Branch: Return with expression
+0:14        'r' ( temp 4-component vector of float)
+0:6  Function Definition: main( ( temp void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:6      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:6        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'index' ( specialization-constant const uint)
+0:?       2 (const uint)
+0:?     'array' ( const 4-element array of uint)
+0:?       10 (const uint)
+0:?       20 (const uint)
+0:?       30 (const uint)
+0:?       40 (const uint)
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6  Function Definition: @main( ( temp 4-component vector of float)
+0:6    Function Parameters: 
+0:?     Sequence
+0:8      Sequence
+0:8        move second child to first child ( temp uint)
+0:8          'i' ( temp uint)
+0:8          Constant:
+0:8            0 (const uint)
+0:8        Loop with condition tested first
+0:8          Loop Condition
+0:8          Compare Less Than ( temp bool)
+0:8            'i' ( temp uint)
+0:8            indirect index ( const uint)
+0:8              Constant:
+0:8                10 (const uint)
+0:8                20 (const uint)
+0:8                30 (const uint)
+0:8                40 (const uint)
+0:8              'index' ( specialization-constant const uint)
+0:8                2 (const uint)
+0:8          Loop Body
+0:9          move second child to first child ( temp 4-component vector of float)
+0:9            'r' ( temp 4-component vector of float)
+0:9            Construct vec4 ( temp 4-component vector of float)
+0:9              Convert uint to float ( temp float)
+0:9                'i' ( temp uint)
+0:8          Loop Terminal Expression
+0:8          Post-Increment ( temp uint)
+0:8            'i' ( temp uint)
+0:11      add second child into first child ( temp 4-component vector of float)
+0:11        'r' ( temp 4-component vector of float)
+0:11        Convert uint to float ( temp float)
+0:11          add ( specialization-constant const uint)
+0:11            'index' ( specialization-constant const uint)
+0:11              2 (const uint)
+0:11            'index' ( specialization-constant const uint)
+0:11              2 (const uint)
+0:12      add second child into first child ( temp 4-component vector of float)
+0:12        'r' ( temp 4-component vector of float)
+0:12        Convert uint to float ( temp float)
+0:12          component-wise multiply ( specialization-constant const uint)
+0:12            Constant:
+0:12              2 (const uint)
+0:12            'index' ( specialization-constant const uint)
+0:12              2 (const uint)
+0:14      Branch: Return with expression
+0:14        'r' ( temp 4-component vector of float)
+0:6  Function Definition: main( ( temp void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:6      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:6        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'index' ( specialization-constant const uint)
+0:?       2 (const uint)
+0:?     'array' ( const 4-element array of uint)
+0:?       10 (const uint)
+0:?       20 (const uint)
+0:?       30 (const uint)
+0:?       40 (const uint)
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 61
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 59
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 9  "@main("
+                              Name 13  "i"
+                              Name 28  "index"
+                              Name 30  "indexable"
+                              Name 36  "r"
+                              Name 59  "@entryPointOutput"
+                              Decorate 28(index) SpecId 0
+                              Decorate 59(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypeInt 32 0
+              12:             TypePointer Function 11(int)
+              14:     11(int) Constant 0
+              21:     11(int) Constant 4
+              22:             TypeArray 11(int) 21
+              23:     11(int) Constant 10
+              24:     11(int) Constant 20
+              25:     11(int) Constant 30
+              26:     11(int) Constant 40
+              27:          22 ConstantComposite 23 24 25 26
+       28(index):     11(int) SpecConstant 2
+              29:             TypePointer Function 22
+              33:             TypeBool
+              35:             TypePointer Function 7(fvec4)
+              41:             TypeInt 32 1
+              42:     41(int) Constant 1
+              44:     11(int) SpecConstantOp 128 28(index) 28(index)
+              49:     11(int) Constant 2
+              50:     11(int) SpecConstantOp 132 49 28(index)
+              58:             TypePointer Output 7(fvec4)
+59(@entryPointOutput):     58(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+              60:    7(fvec4) FunctionCall 9(@main()
+                              Store 59(@entryPointOutput) 60
+                              Return
+                              FunctionEnd
+       9(@main():    7(fvec4) Function None 8
+              10:             Label
+           13(i):     12(ptr) Variable Function
+   30(indexable):     29(ptr) Variable Function
+           36(r):     35(ptr) Variable Function
+                              Store 13(i) 14
+                              Branch 15
+              15:             Label
+                              LoopMerge 17 18 None
+                              Branch 19
+              19:             Label
+              20:     11(int) Load 13(i)
+                              Store 30(indexable) 27
+              31:     12(ptr) AccessChain 30(indexable) 28(index)
+              32:     11(int) Load 31
+              34:    33(bool) ULessThan 20 32
+                              BranchConditional 34 16 17
+              16:               Label
+              37:     11(int)   Load 13(i)
+              38:    6(float)   ConvertUToF 37
+              39:    7(fvec4)   CompositeConstruct 38 38 38 38
+                                Store 36(r) 39
+                                Branch 18
+              18:               Label
+              40:     11(int)   Load 13(i)
+              43:     11(int)   IAdd 40 42
+                                Store 13(i) 43
+                                Branch 15
+              17:             Label
+              45:    6(float) ConvertUToF 44
+              46:    7(fvec4) Load 36(r)
+              47:    7(fvec4) CompositeConstruct 45 45 45 45
+              48:    7(fvec4) FAdd 46 47
+                              Store 36(r) 48
+              51:    6(float) ConvertUToF 50
+              52:    7(fvec4) Load 36(r)
+              53:    7(fvec4) CompositeConstruct 51 51 51 51
+              54:    7(fvec4) FAdd 52 53
+                              Store 36(r) 54
+              55:    7(fvec4) Load 36(r)
+                              ReturnValue 55
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.staticFuncInit.frag.out b/Test/baseResults/hlsl.staticFuncInit.frag.out
index d468cec..04924ed 100644
--- a/Test/baseResults/hlsl.staticFuncInit.frag.out
+++ b/Test/baseResults/hlsl.staticFuncInit.frag.out
@@ -130,7 +130,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.staticMemberFunction.frag.out b/Test/baseResults/hlsl.staticMemberFunction.frag.out
index 2c7e418..5ae189d 100644
--- a/Test/baseResults/hlsl.staticMemberFunction.frag.out
+++ b/Test/baseResults/hlsl.staticMemberFunction.frag.out
@@ -118,7 +118,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out b/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
index 29a14c4..f5e004d 100644
--- a/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
+++ b/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
@@ -96,7 +96,7 @@
 0:?     'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.string.frag.out b/Test/baseResults/hlsl.string.frag.out
index 9181b93..6ee1945 100644
--- a/Test/baseResults/hlsl.string.frag.out
+++ b/Test/baseResults/hlsl.string.frag.out
@@ -50,7 +50,7 @@
 0:?     'f' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.stringtoken.frag.out b/Test/baseResults/hlsl.stringtoken.frag.out
index 15263c5..1b6e0a8 100644
--- a/Test/baseResults/hlsl.stringtoken.frag.out
+++ b/Test/baseResults/hlsl.stringtoken.frag.out
@@ -70,7 +70,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.frag.out b/Test/baseResults/hlsl.struct.frag.out
index 192041f..a255b36 100644
--- a/Test/baseResults/hlsl.struct.frag.out
+++ b/Test/baseResults/hlsl.struct.frag.out
@@ -213,7 +213,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 102
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.split-1.vert.out b/Test/baseResults/hlsl.struct.split-1.vert.out
index d7d6e92..8c25ca2 100644
--- a/Test/baseResults/hlsl.struct.split-1.vert.out
+++ b/Test/baseResults/hlsl.struct.split-1.vert.out
@@ -196,7 +196,7 @@
 0:?     'Pos_loose' (layout( location=3) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.split.array.geom.out b/Test/baseResults/hlsl.struct.split.array.geom.out
index 081b05c..c489ffb 100644
--- a/Test/baseResults/hlsl.struct.split.array.geom.out
+++ b/Test/baseResults/hlsl.struct.split.array.geom.out
@@ -160,7 +160,7 @@
 0:?     'OutputStream.VertexID' (layout( location=2) out uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 82
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.struct.split.assign.frag.out b/Test/baseResults/hlsl.struct.split.assign.frag.out
index 24c8879..3209ab7 100644
--- a/Test/baseResults/hlsl.struct.split.assign.frag.out
+++ b/Test/baseResults/hlsl.struct.split.assign.frag.out
@@ -209,7 +209,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.split.call.vert.out b/Test/baseResults/hlsl.struct.split.call.vert.out
index 50d1d2b..7c65c06 100644
--- a/Test/baseResults/hlsl.struct.split.call.vert.out
+++ b/Test/baseResults/hlsl.struct.split.call.vert.out
@@ -214,7 +214,7 @@
 0:?     'vsin.x1_in' (layout( location=2) in int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 77
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.split.nested.geom.out b/Test/baseResults/hlsl.struct.split.nested.geom.out
index 7a72a3f..75b5003 100644
--- a/Test/baseResults/hlsl.struct.split.nested.geom.out
+++ b/Test/baseResults/hlsl.struct.split.nested.geom.out
@@ -448,7 +448,7 @@
 0:?     'ts.contains_no_builtin_io.m1' (layout( location=3) out int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 100
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.struct.split.trivial.geom.out b/Test/baseResults/hlsl.struct.split.trivial.geom.out
index 477fbd2..ecb929e 100644
--- a/Test/baseResults/hlsl.struct.split.trivial.geom.out
+++ b/Test/baseResults/hlsl.struct.split.trivial.geom.out
@@ -192,7 +192,7 @@
 0:?     'ts.pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 67
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.struct.split.trivial.vert.out b/Test/baseResults/hlsl.struct.split.trivial.vert.out
index 8bf477e..f516ea0 100644
--- a/Test/baseResults/hlsl.struct.split.trivial.vert.out
+++ b/Test/baseResults/hlsl.struct.split.trivial.vert.out
@@ -98,7 +98,7 @@
 0:?     'Pos_loose' (layout( location=1) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 45
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structIoFourWay.frag.out b/Test/baseResults/hlsl.structIoFourWay.frag.out
index 32ac68f..ae47037 100644
--- a/Test/baseResults/hlsl.structIoFourWay.frag.out
+++ b/Test/baseResults/hlsl.structIoFourWay.frag.out
@@ -162,7 +162,7 @@
 0:?     't.normal' (layout( location=3) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 65
 
                               Capability Shader
@@ -170,8 +170,8 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 22 27 31 36 45 48 51 55
                               ExecutionMode 4 OriginUpperLeft
-                              ExecutionMode 4 DepthGreater
                               ExecutionMode 4 DepthReplacing
+                              ExecutionMode 4 DepthGreater
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "T"
diff --git a/Test/baseResults/hlsl.structStructName.frag.out b/Test/baseResults/hlsl.structStructName.frag.out
index 183dcf6..6e767e4 100644
--- a/Test/baseResults/hlsl.structStructName.frag.out
+++ b/Test/baseResults/hlsl.structStructName.frag.out
@@ -44,7 +44,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structarray.flatten.frag.out b/Test/baseResults/hlsl.structarray.flatten.frag.out
index 5d34aec..b654c32 100644
--- a/Test/baseResults/hlsl.structarray.flatten.frag.out
+++ b/Test/baseResults/hlsl.structarray.flatten.frag.out
@@ -157,7 +157,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structarray.flatten.geom.out b/Test/baseResults/hlsl.structarray.flatten.geom.out
index f88118d..426214b 100644
--- a/Test/baseResults/hlsl.structarray.flatten.geom.out
+++ b/Test/baseResults/hlsl.structarray.flatten.geom.out
@@ -170,7 +170,7 @@
 0:?     'outStream.uv' (layout( location=1) out 2-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 58
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
index 36050fb..c61b1d8 100644
--- a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
@@ -151,7 +151,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.append.frag.out b/Test/baseResults/hlsl.structbuffer.append.frag.out
index 2e5c564..e213b4b 100644
--- a/Test/baseResults/hlsl.structbuffer.append.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.append.frag.out
@@ -124,7 +124,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 56
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.atomics.frag.out b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
index e242cf6..d038fbd 100644
--- a/Test/baseResults/hlsl.structbuffer.atomics.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
@@ -475,7 +475,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 87
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.byte.frag.out b/Test/baseResults/hlsl.structbuffer.byte.frag.out
index 26c7a06..e0f1131 100644
--- a/Test/baseResults/hlsl.structbuffer.byte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.byte.frag.out
@@ -324,7 +324,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 114
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.coherent.frag.out b/Test/baseResults/hlsl.structbuffer.coherent.frag.out
index b33b44d..34b029b 100644
--- a/Test/baseResults/hlsl.structbuffer.coherent.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.coherent.frag.out
@@ -176,7 +176,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 78
 
                               Capability Shader
@@ -305,6 +305,5 @@
               66:    9(fvec4)   CompositeConstruct 65 65 65 65
                                 ReturnValue 66
               45:             Label
-              68:    9(fvec4) Undef
-                              ReturnValue 68
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.floatidx.comp.out b/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
index fbb07c2..e1c5466 100644
--- a/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
+++ b/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
@@ -180,7 +180,7 @@
 0:?     'nThreadId' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 85
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.fn.frag.out b/Test/baseResults/hlsl.structbuffer.fn.frag.out
index 085d9dd..1df5880 100644
--- a/Test/baseResults/hlsl.structbuffer.fn.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.fn.frag.out
@@ -139,7 +139,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 78
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.fn2.comp.out b/Test/baseResults/hlsl.structbuffer.fn2.comp.out
index 517b48c..d25446b 100644
--- a/Test/baseResults/hlsl.structbuffer.fn2.comp.out
+++ b/Test/baseResults/hlsl.structbuffer.fn2.comp.out
@@ -136,7 +136,7 @@
 0:?     'dispatchId' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 63
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.frag.out b/Test/baseResults/hlsl.structbuffer.frag.out
index 9a67fd7..38e915d 100644
--- a/Test/baseResults/hlsl.structbuffer.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.frag.out
@@ -188,7 +188,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 96
 
                               Capability Shader
@@ -344,6 +344,5 @@
               84:    9(fvec4)   CompositeConstruct 83 83 83 83
                                 ReturnValue 84
               53:             Label
-              86:    9(fvec4) Undef
-                              ReturnValue 86
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out b/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
index 5c73619..57f387c 100644
--- a/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
+++ b/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
@@ -1,6 +1,6 @@
 hlsl.structbuffer.incdec.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.incdec.frag.out b/Test/baseResults/hlsl.structbuffer.incdec.frag.out
index 452e9ee..b9c1630 100644
--- a/Test/baseResults/hlsl.structbuffer.incdec.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.incdec.frag.out
@@ -204,7 +204,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.rw.frag.out b/Test/baseResults/hlsl.structbuffer.rw.frag.out
index ceccd5b..fbd48a2 100644
--- a/Test/baseResults/hlsl.structbuffer.rw.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rw.frag.out
@@ -176,7 +176,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 78
 
                               Capability Shader
@@ -303,6 +303,5 @@
               66:    9(fvec4)   CompositeConstruct 65 65 65 65
                                 ReturnValue 66
               45:             Label
-              68:    9(fvec4) Undef
-                              ReturnValue 68
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
index 00a055e..a061eac 100644
--- a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
@@ -1004,7 +1004,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 239
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structin.vert.out b/Test/baseResults/hlsl.structin.vert.out
index d7f539d..ad9c0d4 100644
--- a/Test/baseResults/hlsl.structin.vert.out
+++ b/Test/baseResults/hlsl.structin.vert.out
@@ -340,7 +340,7 @@
 0:?     'e' (layout( location=5) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 94
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.subpass.frag.out b/Test/baseResults/hlsl.subpass.frag.out
index ad5a013..8d48028 100644
--- a/Test/baseResults/hlsl.subpass.frag.out
+++ b/Test/baseResults/hlsl.subpass.frag.out
@@ -430,7 +430,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 204
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.switch.frag.out b/Test/baseResults/hlsl.switch.frag.out
index b72891e..b94187d 100644
--- a/Test/baseResults/hlsl.switch.frag.out
+++ b/Test/baseResults/hlsl.switch.frag.out
@@ -296,7 +296,7 @@
 0:?     'd' (layout( location=2) flat in int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 106
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.swizzle.frag.out b/Test/baseResults/hlsl.swizzle.frag.out
index c734d50..87ccdc7 100644
--- a/Test/baseResults/hlsl.swizzle.frag.out
+++ b/Test/baseResults/hlsl.swizzle.frag.out
@@ -77,7 +77,7 @@
 0:?     'AmbientColor' ( global 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.synthesizeInput.frag.out b/Test/baseResults/hlsl.synthesizeInput.frag.out
index bbe9743..31f7b7a 100644
--- a/Test/baseResults/hlsl.synthesizeInput.frag.out
+++ b/Test/baseResults/hlsl.synthesizeInput.frag.out
@@ -98,7 +98,7 @@
 0:?     'input.no_interp' (layout( location=1) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.target.frag.out b/Test/baseResults/hlsl.target.frag.out
index 0001796..0ab23e8 100644
--- a/Test/baseResults/hlsl.target.frag.out
+++ b/Test/baseResults/hlsl.target.frag.out
@@ -114,7 +114,7 @@
 0:?     'out2' (layout( location=3) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.targetStruct1.frag.out b/Test/baseResults/hlsl.targetStruct1.frag.out
index 371ce2a..93d787c 100644
--- a/Test/baseResults/hlsl.targetStruct1.frag.out
+++ b/Test/baseResults/hlsl.targetStruct1.frag.out
@@ -184,7 +184,7 @@
 0:?     'po' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.targetStruct2.frag.out b/Test/baseResults/hlsl.targetStruct2.frag.out
index e6099c9..0fae66f 100644
--- a/Test/baseResults/hlsl.targetStruct2.frag.out
+++ b/Test/baseResults/hlsl.targetStruct2.frag.out
@@ -184,7 +184,7 @@
 0:?     'po' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.templatetypes.frag.out b/Test/baseResults/hlsl.templatetypes.frag.out
index 3fc5846..1dcfc46 100644
--- a/Test/baseResults/hlsl.templatetypes.frag.out
+++ b/Test/baseResults/hlsl.templatetypes.frag.out
@@ -508,7 +508,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 153
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.texture.struct.frag.out b/Test/baseResults/hlsl.texture.struct.frag.out
index 6fc5428..7835d32 100644
--- a/Test/baseResults/hlsl.texture.struct.frag.out
+++ b/Test/baseResults/hlsl.texture.struct.frag.out
@@ -839,7 +839,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 240
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.texture.subvec4.frag.out b/Test/baseResults/hlsl.texture.subvec4.frag.out
index 1beb027..01f32da 100644
--- a/Test/baseResults/hlsl.texture.subvec4.frag.out
+++ b/Test/baseResults/hlsl.texture.subvec4.frag.out
@@ -356,7 +356,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 130
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.texturebuffer.frag.out b/Test/baseResults/hlsl.texturebuffer.frag.out
index 0f761af..1aa9dbc 100644
--- a/Test/baseResults/hlsl.texturebuffer.frag.out
+++ b/Test/baseResults/hlsl.texturebuffer.frag.out
@@ -70,7 +70,7 @@
 0:?     'pos' ( in 4-component vector of float FragCoord)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.this.frag.out b/Test/baseResults/hlsl.this.frag.out
index ac5fde8..f32f109 100644
--- a/Test/baseResults/hlsl.this.frag.out
+++ b/Test/baseResults/hlsl.this.frag.out
@@ -240,7 +240,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 98
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.tristream-append.geom.out b/Test/baseResults/hlsl.tristream-append.geom.out
index 94344cd..514ce16 100644
--- a/Test/baseResults/hlsl.tristream-append.geom.out
+++ b/Test/baseResults/hlsl.tristream-append.geom.out
@@ -107,7 +107,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 57
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.tx.bracket.frag.out b/Test/baseResults/hlsl.tx.bracket.frag.out
index f5c8288..0e8fb5c 100644
--- a/Test/baseResults/hlsl.tx.bracket.frag.out
+++ b/Test/baseResults/hlsl.tx.bracket.frag.out
@@ -422,7 +422,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 188
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.tx.overload.frag.out b/Test/baseResults/hlsl.tx.overload.frag.out
index 3277954..8556b9e 100644
--- a/Test/baseResults/hlsl.tx.overload.frag.out
+++ b/Test/baseResults/hlsl.tx.overload.frag.out
@@ -134,7 +134,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 73
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.type.half.frag.out b/Test/baseResults/hlsl.type.half.frag.out
index 6b5a945..719b139 100644
--- a/Test/baseResults/hlsl.type.half.frag.out
+++ b/Test/baseResults/hlsl.type.half.frag.out
@@ -164,7 +164,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.type.identifier.frag.out b/Test/baseResults/hlsl.type.identifier.frag.out
index 2eaa2ae..adec4a3 100644
--- a/Test/baseResults/hlsl.type.identifier.frag.out
+++ b/Test/baseResults/hlsl.type.identifier.frag.out
@@ -266,7 +266,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 105
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.type.type.conversion.valid.frag.out b/Test/baseResults/hlsl.type.type.conversion.valid.frag.out
index fc67200..3e511ff 100644
--- a/Test/baseResults/hlsl.type.type.conversion.valid.frag.out
+++ b/Test/baseResults/hlsl.type.type.conversion.valid.frag.out
@@ -1364,7 +1364,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 122
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.typeGraphCopy.vert.out b/Test/baseResults/hlsl.typeGraphCopy.vert.out
index 8509cc4..1ca93bb 100644
--- a/Test/baseResults/hlsl.typeGraphCopy.vert.out
+++ b/Test/baseResults/hlsl.typeGraphCopy.vert.out
@@ -62,7 +62,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 28
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.typedef.frag.out b/Test/baseResults/hlsl.typedef.frag.out
index 11fd107..d4ab66e 100644
--- a/Test/baseResults/hlsl.typedef.frag.out
+++ b/Test/baseResults/hlsl.typedef.frag.out
@@ -79,7 +79,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.void.frag.out b/Test/baseResults/hlsl.void.frag.out
index 30edd63..99de9d9 100644
--- a/Test/baseResults/hlsl.void.frag.out
+++ b/Test/baseResults/hlsl.void.frag.out
@@ -54,7 +54,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.wavebroadcast.comp.out b/Test/baseResults/hlsl.wavebroadcast.comp.out
index f1c9679..a9fc9b4 100644
--- a/Test/baseResults/hlsl.wavebroadcast.comp.out
+++ b/Test/baseResults/hlsl.wavebroadcast.comp.out
@@ -2298,7 +2298,7 @@
 0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 359
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.waveprefix.comp.out b/Test/baseResults/hlsl.waveprefix.comp.out
index a9a4b75..3fc8497 100644
--- a/Test/baseResults/hlsl.waveprefix.comp.out
+++ b/Test/baseResults/hlsl.waveprefix.comp.out
@@ -2322,7 +2322,7 @@
 0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 369
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.wavequad.comp.out b/Test/baseResults/hlsl.wavequad.comp.out
index e7e10f1..e237e15 100644
--- a/Test/baseResults/hlsl.wavequad.comp.out
+++ b/Test/baseResults/hlsl.wavequad.comp.out
@@ -8026,7 +8026,7 @@
 0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 1120
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.wavequery.comp.out b/Test/baseResults/hlsl.wavequery.comp.out
index c25a537..09cba4d 100644
--- a/Test/baseResults/hlsl.wavequery.comp.out
+++ b/Test/baseResults/hlsl.wavequery.comp.out
@@ -11,12 +11,12 @@
 0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:6            Constant:
 0:6              0 (const uint)
-0:6          '@gl_SubgroupInvocationID' ( in uint unknown built-in variable)
+0:6          '@gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
 0:6        Test condition and select ( temp uint): no shortcircuit
 0:6          Condition
 0:6          subgroupElect ( temp bool)
 0:6          true case
-0:6          '@gl_SubgroupSize' ( in uint unknown built-in variable)
+0:6          '@gl_SubgroupSize' ( in uint SubgroupSize)
 0:6          false case
 0:6          Constant:
 0:6            0 (const uint)
@@ -43,12 +43,12 @@
 0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:6            Constant:
 0:6              0 (const uint)
-0:6          '@gl_SubgroupInvocationID' ( in uint unknown built-in variable)
+0:6          '@gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
 0:6        Test condition and select ( temp uint): no shortcircuit
 0:6          Condition
 0:6          subgroupElect ( temp bool)
 0:6          true case
-0:6          '@gl_SubgroupSize' ( in uint unknown built-in variable)
+0:6          '@gl_SubgroupSize' ( in uint SubgroupSize)
 0:6          false case
 0:6          Constant:
 0:6            0 (const uint)
@@ -60,7 +60,7 @@
 0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 28
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.wavequery.frag.out b/Test/baseResults/hlsl.wavequery.frag.out
index 52304a6..8848a15 100644
--- a/Test/baseResults/hlsl.wavequery.frag.out
+++ b/Test/baseResults/hlsl.wavequery.frag.out
@@ -72,7 +72,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 30
 
                               Capability Shader
@@ -118,6 +118,5 @@
               23:               Label
                                 ReturnValue 24
               16:             Label
-              26:    7(fvec4) Undef
-                              ReturnValue 26
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.wavereduction.comp.out b/Test/baseResults/hlsl.wavereduction.comp.out
index 3e0d3fb..c31f7f5 100644
--- a/Test/baseResults/hlsl.wavereduction.comp.out
+++ b/Test/baseResults/hlsl.wavereduction.comp.out
@@ -6186,7 +6186,7 @@
 0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 901
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.wavevote.comp.out b/Test/baseResults/hlsl.wavevote.comp.out
index 7b671bf..b5c095d 100644
--- a/Test/baseResults/hlsl.wavevote.comp.out
+++ b/Test/baseResults/hlsl.wavevote.comp.out
@@ -204,7 +204,7 @@
 0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 75
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.whileLoop.frag.out b/Test/baseResults/hlsl.whileLoop.frag.out
index babc77d..a63d006 100644
--- a/Test/baseResults/hlsl.whileLoop.frag.out
+++ b/Test/baseResults/hlsl.whileLoop.frag.out
@@ -96,7 +96,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 52
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.y-negate-1.vert.out b/Test/baseResults/hlsl.y-negate-1.vert.out
index c086cc0..08413d2 100644
--- a/Test/baseResults/hlsl.y-negate-1.vert.out
+++ b/Test/baseResults/hlsl.y-negate-1.vert.out
@@ -72,7 +72,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.y-negate-2.vert.out b/Test/baseResults/hlsl.y-negate-2.vert.out
index 4e6f189..9e90d3b 100644
--- a/Test/baseResults/hlsl.y-negate-2.vert.out
+++ b/Test/baseResults/hlsl.y-negate-2.vert.out
@@ -80,7 +80,7 @@
 0:?     'position' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.y-negate-3.vert.out b/Test/baseResults/hlsl.y-negate-3.vert.out
index 6374551..29f63f1 100644
--- a/Test/baseResults/hlsl.y-negate-3.vert.out
+++ b/Test/baseResults/hlsl.y-negate-3.vert.out
@@ -126,7 +126,7 @@
 0:?     '@entryPointOutput.somethingelse' (layout( location=0) out int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out b/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out
new file mode 100755
index 0000000..b8ba789
--- /dev/null
+++ b/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out
@@ -0,0 +1,177 @@
+link.multiAnonBlocksInvalid.0.0.vert
+ERROR: 0:22: 'ColorBlock' : nameless block contains a member that already has a name at global scope 
+ERROR: 0:42: 'v1' : redefinition 
+ERROR: 0:43: 'uProj' : redefinition 
+ERROR: 3 compilation errors.  No code generated.
+
+
+Shader version: 430
+ERROR: node is still EOpNull!
+0:46  Function Definition: main( ( global void)
+0:46    Function Parameters: 
+0:48    Sequence
+0:48      move second child to first child ( temp 4-component vector of float)
+0:48        'oColor' ( smooth out 4-component vector of float)
+0:48        component-wise multiply ( temp 4-component vector of float)
+0:48          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:48            'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2, layout( column_major std140 offset=32) uniform 4-component vector of float v1})
+0:48            Constant:
+0:48              0 (const uint)
+0:48          Function Call: getColor2( ( global 4-component vector of float)
+0:49      move second child to first child ( temp 4-component vector of float)
+0:49        v1: direct index for structure ( out 4-component vector of float)
+0:49          'anon@2' ( out block{ out 4-component vector of float v1})
+0:49          Constant:
+0:49            0 (const uint)
+0:49        color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:49          'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2, layout( column_major std140 offset=32) uniform 4-component vector of float v1})
+0:49          Constant:
+0:49            0 (const uint)
+0:51      move second child to first child ( temp 4-component vector of float)
+0:51        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:51          'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:51          Constant:
+0:51            0 (const uint)
+0:51        matrix-times-vector ( temp 4-component vector of float)
+0:51          uProj: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:51            'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj})
+0:51            Constant:
+0:51              0 (const uint)
+0:51          Function Call: getWorld( ( global 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj})
+0:?     'anon@1' (layout( column_major shared) buffer block{layout( column_major shared) buffer 4-component vector of float b})
+0:?     'anon@2' ( out block{ out 4-component vector of float v1})
+0:?     'myName' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m})
+0:?     'oColor' ( smooth out 4-component vector of float)
+0:?     'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+link.multiAnonBlocksInvalid.0.1.vert
+Shader version: 430
+0:? Sequence
+0:38  Function Definition: getColor2( ( global 4-component vector of float)
+0:38    Function Parameters: 
+0:40    Sequence
+0:40      Branch: Return with expression
+0:40        color2: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:40          'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2})
+0:40          Constant:
+0:40            0 (const uint)
+0:43  Function Definition: getWorld( ( global 4-component vector of float)
+0:43    Function Parameters: 
+0:45    Sequence
+0:45      Branch: Return with expression
+0:45        matrix-times-vector ( temp 4-component vector of float)
+0:45          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform 4X4 matrix of float)
+0:45            'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:45            Constant:
+0:45              1 (const uint)
+0:45          'P' ( in 4-component vector of float)
+0:46      move second child to first child ( temp 4-component vector of float)
+0:46        v2: direct index for structure ( out 4-component vector of float)
+0:46          'anon@2' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:46          Constant:
+0:46            1 (const uint)
+0:46        Constant:
+0:46          1.000000
+0:46          1.000000
+0:46          1.000000
+0:46          1.000000
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2})
+0:?     'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:?     'anon@2' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:?     'anon@3' (layout( column_major shared) buffer block{layout( column_major shared) buffer 4-component vector of float a})
+0:?     'anon@4' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m})
+0:?     'P' ( in 4-component vector of float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: Types must match:
+    anon@0: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj}" versus anon@1: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld}"
+ERROR: Linking vertex stage: Types must match:
+    anon@2: " out block{ out 4-component vector of float v1}" versus " out block{ out 4-component vector of float v1,  out 4-component vector of float v2}"
+ERROR: Linking vertex stage: Types must match:
+    anon@1: "layout( column_major shared) buffer block{layout( column_major shared) buffer 4-component vector of float b}" versus anon@3: "layout( column_major shared) buffer block{layout( column_major shared) buffer 4-component vector of float a}"
+ERROR: Linking vertex stage: Matched Uniform or Storage blocks must all be anonymous, or all be named:
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    myName: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m}" versus anon@4: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m}"
+
+Shader version: 430
+ERROR: node is still EOpNull!
+0:46  Function Definition: main( ( global void)
+0:46    Function Parameters: 
+0:48    Sequence
+0:48      move second child to first child ( temp 4-component vector of float)
+0:48        'oColor' ( smooth out 4-component vector of float)
+0:48        component-wise multiply ( temp 4-component vector of float)
+0:48          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:48            'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2, layout( column_major std140 offset=32) uniform 4-component vector of float v1})
+0:48            Constant:
+0:48              0 (const uint)
+0:48          Function Call: getColor2( ( global 4-component vector of float)
+0:49      move second child to first child ( temp 4-component vector of float)
+0:49        v1: direct index for structure ( out 4-component vector of float)
+0:49          'anon@2' ( out block{ out 4-component vector of float v1})
+0:49          Constant:
+0:49            0 (const uint)
+0:49        color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:49          'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2, layout( column_major std140 offset=32) uniform 4-component vector of float v1})
+0:49          Constant:
+0:49            0 (const uint)
+0:51      move second child to first child ( temp 4-component vector of float)
+0:51        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:51          'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:51          Constant:
+0:51            0 (const uint)
+0:51        matrix-times-vector ( temp 4-component vector of float)
+0:51          uProj: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:51            'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj})
+0:51            Constant:
+0:51              0 (const uint)
+0:51          Function Call: getWorld( ( global 4-component vector of float)
+0:38  Function Definition: getColor2( ( global 4-component vector of float)
+0:38    Function Parameters: 
+0:40    Sequence
+0:40      Branch: Return with expression
+0:40        color2: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:40          'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2})
+0:40          Constant:
+0:40            0 (const uint)
+0:43  Function Definition: getWorld( ( global 4-component vector of float)
+0:43    Function Parameters: 
+0:45    Sequence
+0:45      Branch: Return with expression
+0:45        matrix-times-vector ( temp 4-component vector of float)
+0:45          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform 4X4 matrix of float)
+0:45            'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:45            Constant:
+0:45              1 (const uint)
+0:45          'P' ( in 4-component vector of float)
+0:46      move second child to first child ( temp 4-component vector of float)
+0:46        v2: direct index for structure ( out 4-component vector of float)
+0:46          'anon@2' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:46          Constant:
+0:46            1 (const uint)
+0:46        Constant:
+0:46          1.000000
+0:46          1.000000
+0:46          1.000000
+0:46          1.000000
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj})
+0:?     'anon@1' (layout( column_major shared) buffer block{layout( column_major shared) buffer 4-component vector of float b})
+0:?     'anon@2' ( out block{ out 4-component vector of float v1})
+0:?     'myName' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m})
+0:?     'oColor' ( smooth out 4-component vector of float)
+0:?     'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2})
+0:?     'P' ( in 4-component vector of float)
+
diff --git a/Test/baseResults/link.multiAnonBlocksValid.0.0.vert.out b/Test/baseResults/link.multiAnonBlocksValid.0.0.vert.out
new file mode 100755
index 0000000..87c31b1
--- /dev/null
+++ b/Test/baseResults/link.multiAnonBlocksValid.0.0.vert.out
@@ -0,0 +1,157 @@
+link.multiAnonBlocksValid.0.0.vert
+Shader version: 430
+0:? Sequence
+0:32  Function Definition: main( ( global void)
+0:32    Function Parameters: 
+0:34    Sequence
+0:34      move second child to first child ( temp 4-component vector of float)
+0:34        'oColor' ( smooth out 4-component vector of float)
+0:34        component-wise multiply ( temp 4-component vector of float)
+0:34          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:34            'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:34            Constant:
+0:34              0 (const uint)
+0:34          Function Call: getColor2( ( global 4-component vector of float)
+0:35      move second child to first child ( temp 4-component vector of float)
+0:35        v1: direct index for structure ( out 4-component vector of float)
+0:35          'anon@1' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:35          Constant:
+0:35            0 (const uint)
+0:35        color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:35          'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:35          Constant:
+0:35            0 (const uint)
+0:37      move second child to first child ( temp 4-component vector of float)
+0:37        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:37          'anon@3' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:37          Constant:
+0:37            0 (const uint)
+0:37        matrix-times-vector ( temp 4-component vector of float)
+0:37          uProj: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:37            'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:37            Constant:
+0:37              0 (const uint)
+0:37          Function Call: getWorld( ( global 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:?     'anon@1' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:?     'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:?     'oColor' ( smooth out 4-component vector of float)
+0:?     'anon@3' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+link.multiAnonBlocksValid.0.1.vert
+Shader version: 430
+0:? Sequence
+0:24  Function Definition: getColor2( ( global 4-component vector of float)
+0:24    Function Parameters: 
+0:26    Sequence
+0:26      Branch: Return with expression
+0:26        color2: direct index for structure (layout( column_major std140 offset=16) uniform 4-component vector of float)
+0:26          'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:26          Constant:
+0:26            1 (const uint)
+0:29  Function Definition: getWorld( ( global 4-component vector of float)
+0:29    Function Parameters: 
+0:31    Sequence
+0:31      Branch: Return with expression
+0:31        matrix-times-vector ( temp 4-component vector of float)
+0:31          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform 4X4 matrix of float)
+0:31            'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:31            Constant:
+0:31              1 (const uint)
+0:31          'P' ( in 4-component vector of float)
+0:32      move second child to first child ( temp 4-component vector of float)
+0:32        v2: direct index for structure ( out 4-component vector of float)
+0:32          'anon@2' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:32          Constant:
+0:32            1 (const uint)
+0:32        Constant:
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:?     'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:?     'anon@2' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:?     'P' ( in 4-component vector of float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 430
+0:? Sequence
+0:32  Function Definition: main( ( global void)
+0:32    Function Parameters: 
+0:34    Sequence
+0:34      move second child to first child ( temp 4-component vector of float)
+0:34        'oColor' ( smooth out 4-component vector of float)
+0:34        component-wise multiply ( temp 4-component vector of float)
+0:34          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:34            'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:34            Constant:
+0:34              0 (const uint)
+0:34          Function Call: getColor2( ( global 4-component vector of float)
+0:35      move second child to first child ( temp 4-component vector of float)
+0:35        v1: direct index for structure ( out 4-component vector of float)
+0:35          'anon@1' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:35          Constant:
+0:35            0 (const uint)
+0:35        color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:35          'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:35          Constant:
+0:35            0 (const uint)
+0:37      move second child to first child ( temp 4-component vector of float)
+0:37        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:37          'anon@3' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:37          Constant:
+0:37            0 (const uint)
+0:37        matrix-times-vector ( temp 4-component vector of float)
+0:37          uProj: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:37            'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:37            Constant:
+0:37              0 (const uint)
+0:37          Function Call: getWorld( ( global 4-component vector of float)
+0:24  Function Definition: getColor2( ( global 4-component vector of float)
+0:24    Function Parameters: 
+0:26    Sequence
+0:26      Branch: Return with expression
+0:26        color2: direct index for structure (layout( column_major std140 offset=16) uniform 4-component vector of float)
+0:26          'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:26          Constant:
+0:26            1 (const uint)
+0:29  Function Definition: getWorld( ( global 4-component vector of float)
+0:29    Function Parameters: 
+0:31    Sequence
+0:31      Branch: Return with expression
+0:31        matrix-times-vector ( temp 4-component vector of float)
+0:31          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform 4X4 matrix of float)
+0:31            'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:31            Constant:
+0:31              1 (const uint)
+0:31          'P' ( in 4-component vector of float)
+0:32      move second child to first child ( temp 4-component vector of float)
+0:32        v2: direct index for structure ( out 4-component vector of float)
+0:32          'anon@2' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:32          Constant:
+0:32            1 (const uint)
+0:32        Constant:
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:?     'anon@1' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:?     'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:?     'oColor' ( smooth out 4-component vector of float)
+0:?     'anon@3' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+0:?     'P' ( in 4-component vector of float)
+
diff --git a/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out b/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out
new file mode 100755
index 0000000..12b5c43
--- /dev/null
+++ b/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out
@@ -0,0 +1,182 @@
+link.multiBlocksInvalid.0.0.vert
+Shader version: 430
+0:? Sequence
+0:34  Function Definition: main( ( global void)
+0:34    Function Parameters: 
+0:36    Sequence
+0:36      move second child to first child ( temp 4-component vector of float)
+0:36        'oColor' ( smooth out 4-component vector of float)
+0:36        component-wise multiply ( temp 4-component vector of float)
+0:36          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:36            'uC' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1})
+0:36            Constant:
+0:36              0 (const int)
+0:36          Function Call: getColor2( ( global 4-component vector of float)
+0:37      move second child to first child ( temp 4-component vector of float)
+0:37        v1: direct index for structure ( out 4-component vector of float)
+0:37          'oV' ( out block{ out 4-component vector of float v1})
+0:37          Constant:
+0:37            0 (const int)
+0:37        add ( temp 4-component vector of float)
+0:37          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:37            'uC' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1})
+0:37            Constant:
+0:37              0 (const int)
+0:37          color1: direct index for structure (layout( column_major std430 offset=0) buffer 4-component vector of float)
+0:37            'uBufC' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float color1})
+0:37            Constant:
+0:37              0 (const int)
+0:39      move second child to first child ( temp 4-component vector of float)
+0:39        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:39          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:39          Constant:
+0:39            0 (const uint)
+0:39        matrix-times-vector ( temp 4-component vector of float)
+0:39          uProj: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:39            'uD' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj})
+0:39            Constant:
+0:39              0 (const int)
+0:39          Function Call: getWorld( ( global 4-component vector of float)
+0:?   Linker Objects
+0:?     'uD' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj})
+0:?     'oV' ( out block{ out 4-component vector of float v1})
+0:?     'uC' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1})
+0:?     'uBufC' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float color1})
+0:?     'oColor' ( smooth out 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+link.multiBlocksInvalid.0.1.vert
+Shader version: 430
+0:? Sequence
+0:21  Function Definition: getColor2( ( global 4-component vector of float)
+0:21    Function Parameters: 
+0:23    Sequence
+0:23      Branch: Return with expression
+0:23        color2: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:23          'uColorB' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2})
+0:23          Constant:
+0:23            0 (const int)
+0:26  Function Definition: getWorld( ( global 4-component vector of float)
+0:26    Function Parameters: 
+0:28    Sequence
+0:28      Branch: Return with expression
+0:28        matrix-times-vector ( temp 4-component vector of float)
+0:28          uWorld: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:28            'uDefaultB' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uWorld})
+0:28            Constant:
+0:28              0 (const int)
+0:28          'P' ( in 4-component vector of float)
+0:29      move second child to first child ( temp 4-component vector of float)
+0:29        v2: direct index for structure ( out 4-component vector of float)
+0:29          'oVert' ( out block{ out 4-component vector of float v2})
+0:29          Constant:
+0:29            0 (const int)
+0:29        Constant:
+0:29          1.000000
+0:29          1.000000
+0:29          1.000000
+0:29          1.000000
+0:?   Linker Objects
+0:?     'uColorB' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2})
+0:?     'uDefaultB' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uWorld})
+0:?     'oVert' ( out block{ out 4-component vector of float v2})
+0:?     'P' ( in 4-component vector of float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: Types must match:
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    uC: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1}" versus uColorB: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2}"
+ERROR: Linking vertex stage: Types must match:
+ERROR: Linking vertex stage: Storage qualifiers must match:
+ERROR: Linking vertex stage: Layout qualification must match:
+    uBufC: "layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float color1}" versus uColorB: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2}"
+ERROR: Linking vertex stage: Types must match:
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    uD: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj}" versus uDefaultB: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uWorld}"
+ERROR: Linking vertex stage: Types must match:
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    oV: " out block{ out 4-component vector of float v1}" versus oVert: " out block{ out 4-component vector of float v2}"
+
+Shader version: 430
+0:? Sequence
+0:34  Function Definition: main( ( global void)
+0:34    Function Parameters: 
+0:36    Sequence
+0:36      move second child to first child ( temp 4-component vector of float)
+0:36        'oColor' ( smooth out 4-component vector of float)
+0:36        component-wise multiply ( temp 4-component vector of float)
+0:36          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:36            'uC' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1})
+0:36            Constant:
+0:36              0 (const int)
+0:36          Function Call: getColor2( ( global 4-component vector of float)
+0:37      move second child to first child ( temp 4-component vector of float)
+0:37        v1: direct index for structure ( out 4-component vector of float)
+0:37          'oV' ( out block{ out 4-component vector of float v1})
+0:37          Constant:
+0:37            0 (const int)
+0:37        add ( temp 4-component vector of float)
+0:37          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:37            'uC' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1})
+0:37            Constant:
+0:37              0 (const int)
+0:37          color1: direct index for structure (layout( column_major std430 offset=0) buffer 4-component vector of float)
+0:37            'uBufC' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float color1})
+0:37            Constant:
+0:37              0 (const int)
+0:39      move second child to first child ( temp 4-component vector of float)
+0:39        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:39          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:39          Constant:
+0:39            0 (const uint)
+0:39        matrix-times-vector ( temp 4-component vector of float)
+0:39          uProj: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:39            'uD' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj})
+0:39            Constant:
+0:39              0 (const int)
+0:39          Function Call: getWorld( ( global 4-component vector of float)
+0:21  Function Definition: getColor2( ( global 4-component vector of float)
+0:21    Function Parameters: 
+0:23    Sequence
+0:23      Branch: Return with expression
+0:23        color2: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:23          'uColorB' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2})
+0:23          Constant:
+0:23            0 (const int)
+0:26  Function Definition: getWorld( ( global 4-component vector of float)
+0:26    Function Parameters: 
+0:28    Sequence
+0:28      Branch: Return with expression
+0:28        matrix-times-vector ( temp 4-component vector of float)
+0:28          uWorld: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:28            'uDefaultB' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uWorld})
+0:28            Constant:
+0:28              0 (const int)
+0:28          'P' ( in 4-component vector of float)
+0:29      move second child to first child ( temp 4-component vector of float)
+0:29        v2: direct index for structure ( out 4-component vector of float)
+0:29          'oVert' ( out block{ out 4-component vector of float v2})
+0:29          Constant:
+0:29            0 (const int)
+0:29        Constant:
+0:29          1.000000
+0:29          1.000000
+0:29          1.000000
+0:29          1.000000
+0:?   Linker Objects
+0:?     'uD' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj})
+0:?     'oV' ( out block{ out 4-component vector of float v1})
+0:?     'uC' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1})
+0:?     'uBufC' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float color1})
+0:?     'oColor' ( smooth out 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+0:?     'P' ( in 4-component vector of float)
+
diff --git a/Test/baseResults/link.multiBlocksValid.1.0.vert.out b/Test/baseResults/link.multiBlocksValid.1.0.vert.out
new file mode 100755
index 0000000..2f32abd
--- /dev/null
+++ b/Test/baseResults/link.multiBlocksValid.1.0.vert.out
@@ -0,0 +1,163 @@
+link.multiBlocksValid.1.0.vert
+Shader version: 430
+0:? Sequence
+0:26  Function Definition: main( ( global void)
+0:26    Function Parameters: 
+0:28    Sequence
+0:28      move second child to first child ( temp 4-component vector of float)
+0:28        'oColor' ( smooth out 4-component vector of float)
+0:28        component-wise multiply ( temp 4-component vector of float)
+0:28          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:28            'c' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:28            Constant:
+0:28              0 (const int)
+0:28          Function Call: getColor2( ( global 4-component vector of float)
+0:29      move second child to first child ( temp 4-component vector of float)
+0:29        v1: direct index for structure ( out 4-component vector of float)
+0:29          'b' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:29          Constant:
+0:29            0 (const int)
+0:29        color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:29          'c' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:29          Constant:
+0:29            0 (const int)
+0:31      move second child to first child ( temp 4-component vector of float)
+0:31        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:31          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:31          Constant:
+0:31            0 (const uint)
+0:31        matrix-times-vector ( temp 4-component vector of float)
+0:31          uProj: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:31            'a' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:31            Constant:
+0:31              0 (const int)
+0:31          Function Call: getWorld( ( global 4-component vector of float)
+0:?   Linker Objects
+0:?     'a' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:?     'b' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:?     'c' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:?     'oColor' ( smooth out 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+link.multiBlocksValid.1.1.vert
+Shader version: 430
+0:? Sequence
+0:24  Function Definition: getColor2( ( global 4-component vector of float)
+0:24    Function Parameters: 
+0:26    Sequence
+0:26      Branch: Return with expression
+0:26        color2: direct index for structure (layout( column_major std140 offset=16) uniform 4-component vector of float)
+0:26          'a' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:26          Constant:
+0:26            1 (const int)
+0:29  Function Definition: getWorld( ( global 4-component vector of float)
+0:29    Function Parameters: 
+0:31    Sequence
+0:31      Branch: Return with expression
+0:31        matrix-times-vector ( temp 4-component vector of float)
+0:31          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform 4X4 matrix of float)
+0:31            'b' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:31            Constant:
+0:31              1 (const int)
+0:31          'P' ( in 4-component vector of float)
+0:32      move second child to first child ( temp 4-component vector of float)
+0:32        v2: direct index for structure ( out 4-component vector of float)
+0:32          'c' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:32          Constant:
+0:32            1 (const int)
+0:32        Constant:
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:?   Linker Objects
+0:?     'a' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:?     'b' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:?     'c' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:?     'P' ( in 4-component vector of float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    c: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2}" versus a: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2}"
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    a: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld}" versus b: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld}"
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    b: " out block{ out 4-component vector of float v1,  out 4-component vector of float v2}" versus c: " out block{ out 4-component vector of float v1,  out 4-component vector of float v2}"
+
+Shader version: 430
+0:? Sequence
+0:26  Function Definition: main( ( global void)
+0:26    Function Parameters: 
+0:28    Sequence
+0:28      move second child to first child ( temp 4-component vector of float)
+0:28        'oColor' ( smooth out 4-component vector of float)
+0:28        component-wise multiply ( temp 4-component vector of float)
+0:28          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:28            'c' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:28            Constant:
+0:28              0 (const int)
+0:28          Function Call: getColor2( ( global 4-component vector of float)
+0:29      move second child to first child ( temp 4-component vector of float)
+0:29        v1: direct index for structure ( out 4-component vector of float)
+0:29          'b' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:29          Constant:
+0:29            0 (const int)
+0:29        color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:29          'c' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:29          Constant:
+0:29            0 (const int)
+0:31      move second child to first child ( temp 4-component vector of float)
+0:31        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:31          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:31          Constant:
+0:31            0 (const uint)
+0:31        matrix-times-vector ( temp 4-component vector of float)
+0:31          uProj: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:31            'a' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:31            Constant:
+0:31              0 (const int)
+0:31          Function Call: getWorld( ( global 4-component vector of float)
+0:24  Function Definition: getColor2( ( global 4-component vector of float)
+0:24    Function Parameters: 
+0:26    Sequence
+0:26      Branch: Return with expression
+0:26        color2: direct index for structure (layout( column_major std140 offset=16) uniform 4-component vector of float)
+0:26          'a' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:26          Constant:
+0:26            1 (const int)
+0:29  Function Definition: getWorld( ( global 4-component vector of float)
+0:29    Function Parameters: 
+0:31    Sequence
+0:31      Branch: Return with expression
+0:31        matrix-times-vector ( temp 4-component vector of float)
+0:31          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform 4X4 matrix of float)
+0:31            'b' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:31            Constant:
+0:31              1 (const int)
+0:31          'P' ( in 4-component vector of float)
+0:32      move second child to first child ( temp 4-component vector of float)
+0:32        v2: direct index for structure ( out 4-component vector of float)
+0:32          'c' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:32          Constant:
+0:32            1 (const int)
+0:32        Constant:
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:?   Linker Objects
+0:?     'a' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:?     'b' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:?     'c' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:?     'oColor' ( smooth out 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+0:?     'P' ( in 4-component vector of float)
+
diff --git a/Test/baseResults/link.vk.differentPC.0.0.frag.out b/Test/baseResults/link.vk.differentPC.0.0.frag.out
new file mode 100755
index 0000000..d7cfd22
--- /dev/null
+++ b/Test/baseResults/link.vk.differentPC.0.0.frag.out
@@ -0,0 +1,95 @@
+link.vk.differentPC.0.0.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      move second child to first child ( temp highp 4-component vector of float)
+0:17        'color' (layout( location=0) out highp 4-component vector of float)
+0:17        add ( temp highp 4-component vector of float)
+0:17          color: direct index for structure (layout( column_major std430 offset=0) uniform highp 4-component vector of float)
+0:17            'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:17            Constant:
+0:17              0 (const int)
+0:17          vector-scale ( temp highp 4-component vector of float)
+0:17            Function Call: getColor2( ( global highp 4-component vector of float)
+0:17            Function Call: getScale( ( global highp float)
+0:?   Linker Objects
+0:?     'color' (layout( location=0) out highp 4-component vector of float)
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+link.vk.differentPC.0.1.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:11  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        color2: direct index for structure (layout( column_major std430 offset=16) uniform highp 4-component vector of float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:13          Constant:
+0:13            1 (const int)
+0:?   Linker Objects
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+link.vk.differentPC.0.2.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:11  Function Definition: getScale( ( global highp float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        scale2: direct index for structure (layout( column_major std430 offset=32) uniform highp float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale2})
+0:13          Constant:
+0:13            2 (const int)
+0:?   Linker Objects
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale2})
+
+
+Linked fragment stage:
+
+ERROR: Linking fragment stage: Types must match:
+    uPC: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale}" versus "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale2}"
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      move second child to first child ( temp highp 4-component vector of float)
+0:17        'color' (layout( location=0) out highp 4-component vector of float)
+0:17        add ( temp highp 4-component vector of float)
+0:17          color: direct index for structure (layout( column_major std430 offset=0) uniform highp 4-component vector of float)
+0:17            'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:17            Constant:
+0:17              0 (const int)
+0:17          vector-scale ( temp highp 4-component vector of float)
+0:17            Function Call: getColor2( ( global highp 4-component vector of float)
+0:17            Function Call: getScale( ( global highp float)
+0:11  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        color2: direct index for structure (layout( column_major std430 offset=16) uniform highp 4-component vector of float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:13          Constant:
+0:13            1 (const int)
+0:11  Function Definition: getScale( ( global highp float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        scale2: direct index for structure (layout( column_major std430 offset=32) uniform highp float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale2})
+0:13          Constant:
+0:13            2 (const int)
+0:?   Linker Objects
+0:?     'color' (layout( location=0) out highp 4-component vector of float)
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+Validation failed
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/link.vk.differentPC.1.0.frag.out b/Test/baseResults/link.vk.differentPC.1.0.frag.out
new file mode 100755
index 0000000..632f18b
--- /dev/null
+++ b/Test/baseResults/link.vk.differentPC.1.0.frag.out
@@ -0,0 +1,97 @@
+link.vk.differentPC.1.0.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12  Function Definition: getScale( ( global highp float)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      Branch: Return with expression
+0:14        scale: direct index for structure (layout( column_major std430 offset=32) uniform highp float)
+0:14          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2})
+0:14          Constant:
+0:14            2 (const int)
+0:?   Linker Objects
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2})
+
+link.vk.differentPC.1.1.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:11  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        color2: direct index for structure (layout( column_major std430 offset=16) uniform highp 4-component vector of float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:13          Constant:
+0:13            1 (const int)
+0:?   Linker Objects
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+link.vk.differentPC.1.2.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      move second child to first child ( temp highp 4-component vector of float)
+0:17        'color' (layout( location=0) out highp 4-component vector of float)
+0:17        add ( temp highp 4-component vector of float)
+0:17          color: direct index for structure (layout( column_major std430 offset=0) uniform highp 4-component vector of float)
+0:17            'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:17            Constant:
+0:17              0 (const int)
+0:17          vector-scale ( temp highp 4-component vector of float)
+0:17            Function Call: getColor2( ( global highp 4-component vector of float)
+0:17            Function Call: getScale( ( global highp float)
+0:?   Linker Objects
+0:?     'color' (layout( location=0) out highp 4-component vector of float)
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+
+Linked fragment stage:
+
+ERROR: Linking fragment stage: Types must match:
+    uPC: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2}" versus "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale}"
+ERROR: Linking fragment stage: Types must match:
+    uPC: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2}" versus "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale}"
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12  Function Definition: getScale( ( global highp float)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      Branch: Return with expression
+0:14        scale: direct index for structure (layout( column_major std430 offset=32) uniform highp float)
+0:14          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2})
+0:14          Constant:
+0:14            2 (const int)
+0:11  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        color2: direct index for structure (layout( column_major std430 offset=16) uniform highp 4-component vector of float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:13          Constant:
+0:13            1 (const int)
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      move second child to first child ( temp highp 4-component vector of float)
+0:17        'color' (layout( location=0) out highp 4-component vector of float)
+0:17        add ( temp highp 4-component vector of float)
+0:17          color: direct index for structure (layout( column_major std430 offset=0) uniform highp 4-component vector of float)
+0:17            'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:17            Constant:
+0:17              0 (const int)
+0:17          vector-scale ( temp highp 4-component vector of float)
+0:17            Function Call: getColor2( ( global highp 4-component vector of float)
+0:17            Function Call: getScale( ( global highp float)
+0:?   Linker Objects
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2})
+0:?     'color' (layout( location=0) out highp 4-component vector of float)
+
+Validation failed
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/link.vk.matchingPC.0.0.frag.out b/Test/baseResults/link.vk.matchingPC.0.0.frag.out
new file mode 100755
index 0000000..1d6875a
--- /dev/null
+++ b/Test/baseResults/link.vk.matchingPC.0.0.frag.out
@@ -0,0 +1,155 @@
+link.vk.matchingPC.0.0.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      move second child to first child ( temp highp 4-component vector of float)
+0:17        'color' (layout( location=0) out highp 4-component vector of float)
+0:17        add ( temp highp 4-component vector of float)
+0:17          color: direct index for structure (layout( column_major std430 offset=0) uniform highp 4-component vector of float)
+0:17            'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:17            Constant:
+0:17              0 (const int)
+0:17          vector-scale ( temp highp 4-component vector of float)
+0:17            Function Call: getColor2( ( global highp 4-component vector of float)
+0:17            Function Call: getScale( ( global highp float)
+0:?   Linker Objects
+0:?     'color' (layout( location=0) out highp 4-component vector of float)
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+link.vk.matchingPC.0.1.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:11  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        color2: direct index for structure (layout( column_major std430 offset=16) uniform highp 4-component vector of float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:13          Constant:
+0:13            1 (const int)
+0:?   Linker Objects
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+link.vk.matchingPC.0.2.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:11  Function Definition: getScale( ( global highp float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        scale: direct index for structure (layout( column_major std430 offset=32) uniform highp float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:13          Constant:
+0:13            2 (const int)
+0:?   Linker Objects
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      move second child to first child ( temp highp 4-component vector of float)
+0:17        'color' (layout( location=0) out highp 4-component vector of float)
+0:17        add ( temp highp 4-component vector of float)
+0:17          color: direct index for structure (layout( column_major std430 offset=0) uniform highp 4-component vector of float)
+0:17            'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:17            Constant:
+0:17              0 (const int)
+0:17          vector-scale ( temp highp 4-component vector of float)
+0:17            Function Call: getColor2( ( global highp 4-component vector of float)
+0:17            Function Call: getScale( ( global highp float)
+0:11  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        color2: direct index for structure (layout( column_major std430 offset=16) uniform highp 4-component vector of float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:13          Constant:
+0:13            1 (const int)
+0:11  Function Definition: getScale( ( global highp float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        scale: direct index for structure (layout( column_major std430 offset=32) uniform highp float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:13          Constant:
+0:13            2 (const int)
+0:?   Linker Objects
+0:?     'color' (layout( location=0) out highp 4-component vector of float)
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 39
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 15
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "getColor2("
+                              Name 12  "getScale("
+                              Name 15  "color"
+                              Name 16  "PushConstantBlock"
+                              MemberName 16(PushConstantBlock) 0  "color"
+                              MemberName 16(PushConstantBlock) 1  "color2"
+                              MemberName 16(PushConstantBlock) 2  "scale"
+                              Name 18  "uPC"
+                              Decorate 15(color) Location 0
+                              MemberDecorate 16(PushConstantBlock) 0 Offset 0
+                              MemberDecorate 16(PushConstantBlock) 1 Offset 16
+                              MemberDecorate 16(PushConstantBlock) 2 Offset 32
+                              Decorate 16(PushConstantBlock) Block
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypeFunction 6(float)
+              14:             TypePointer Output 7(fvec4)
+       15(color):     14(ptr) Variable Output
+16(PushConstantBlock):             TypeStruct 7(fvec4) 7(fvec4) 6(float)
+              17:             TypePointer PushConstant 16(PushConstantBlock)
+         18(uPC):     17(ptr) Variable PushConstant
+              19:             TypeInt 32 1
+              20:     19(int) Constant 0
+              21:             TypePointer PushConstant 7(fvec4)
+              28:     19(int) Constant 1
+              33:     19(int) Constant 2
+              34:             TypePointer PushConstant 6(float)
+         4(main):           2 Function None 3
+               5:             Label
+              22:     21(ptr) AccessChain 18(uPC) 20
+              23:    7(fvec4) Load 22
+              24:    7(fvec4) FunctionCall 9(getColor2()
+              25:    6(float) FunctionCall 12(getScale()
+              26:    7(fvec4) VectorTimesScalar 24 25
+              27:    7(fvec4) FAdd 23 26
+                              Store 15(color) 27
+                              Return
+                              FunctionEnd
+   9(getColor2():    7(fvec4) Function None 8
+              10:             Label
+              29:     21(ptr) AccessChain 18(uPC) 28
+              30:    7(fvec4) Load 29
+                              ReturnValue 30
+                              FunctionEnd
+   12(getScale():    6(float) Function None 11
+              13:             Label
+              35:     34(ptr) AccessChain 18(uPC) 33
+              36:    6(float) Load 35
+                              ReturnValue 36
+                              FunctionEnd
diff --git a/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out
new file mode 100755
index 0000000..6440a3b
--- /dev/null
+++ b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out
@@ -0,0 +1,321 @@
+link.vk.multiBlocksValid.0.0.vert
+Shader version: 430
+0:? Sequence
+0:43  Function Definition: main( ( global void)
+0:43    Function Parameters: 
+0:45    Sequence
+0:45      move second child to first child ( temp highp 4-component vector of float)
+0:45        'oColor' ( smooth out highp 4-component vector of float)
+0:45        component-wise multiply ( temp highp 4-component vector of float)
+0:45          component-wise multiply ( temp highp 4-component vector of float)
+0:45            color1: direct index for structure (layout( column_major std140 offset=0) uniform highp 4-component vector of float)
+0:45              'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:45              Constant:
+0:45                0 (const int)
+0:45            Function Call: getColor2( ( global highp 4-component vector of float)
+0:45          c: direct index for structure (layout( column_major std430 offset=0) buffer highp 4-component vector of float)
+0:45            'uColorBuf' (layout( binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4-component vector of float c})
+0:45            Constant:
+0:45              0 (const int)
+0:46      move second child to first child ( temp highp 4-component vector of float)
+0:46        v1: direct index for structure ( out highp 4-component vector of float)
+0:46          'oV' ( out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2})
+0:46          Constant:
+0:46            0 (const int)
+0:46        color1: direct index for structure (layout( column_major std140 offset=0) uniform highp 4-component vector of float)
+0:46          'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:46          Constant:
+0:46            0 (const int)
+0:48      move second child to first child ( temp highp 4-component vector of float)
+0:48        gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:48          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:48          Constant:
+0:48            0 (const uint)
+0:48        matrix-times-vector ( temp highp 4-component vector of float)
+0:48          uProj: direct index for structure (layout( column_major std140 offset=0) uniform highp 4X4 matrix of float)
+0:48            'uM' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:48            Constant:
+0:48              0 (const int)
+0:48          Function Call: getWorld( ( global highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'uM' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:?     'oV' ( out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2})
+0:?     'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:?     'uBuf' (layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p})
+0:?     'uColorBuf' (layout( binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4-component vector of float c})
+0:?     'oColor' ( smooth out highp 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+
+link.vk.multiBlocksValid.0.1.vert
+Shader version: 430
+0:? Sequence
+0:36  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:36    Function Parameters: 
+0:38    Sequence
+0:38      Branch: Return with expression
+0:38        color2: direct index for structure (layout( column_major std140 offset=32) uniform highp 4-component vector of float)
+0:38          'uColor' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:38          Constant:
+0:38            2 (const int)
+0:41  Function Definition: getWorld( ( global highp 4-component vector of float)
+0:41    Function Parameters: 
+0:43    Sequence
+0:43      move second child to first child ( temp highp 4-component vector of float)
+0:43        v1: direct index for structure ( out highp 4-component vector of float)
+0:43          'anon@0' ( out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2})
+0:43          Constant:
+0:43            0 (const uint)
+0:43        Constant:
+0:43          1.000000
+0:43          1.000000
+0:43          1.000000
+0:43          1.000000
+0:44      Branch: Return with expression
+0:44        matrix-times-vector ( temp highp 4-component vector of float)
+0:44          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform highp 4X4 matrix of float)
+0:44            'uMatrix' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:44            Constant:
+0:44              1 (const int)
+0:44          'P' ( in highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'uColor' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:?     'uBuffer' (layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p})
+0:?     'uMatrix' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:?     'anon@0' ( out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2})
+0:?     'P' ( in highp 4-component vector of float)
+
+
+Linked vertex stage:
+
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    uC: "layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3}" versus uColor: "layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3}"
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    uBuf: "layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p}" versus uBuffer: "layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p}"
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    uM: "layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld}" versus uMatrix: "layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld}"
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    oV: " out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2}" versus anon@0: " out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2}"
+
+Shader version: 430
+0:? Sequence
+0:43  Function Definition: main( ( global void)
+0:43    Function Parameters: 
+0:45    Sequence
+0:45      move second child to first child ( temp highp 4-component vector of float)
+0:45        'oColor' ( smooth out highp 4-component vector of float)
+0:45        component-wise multiply ( temp highp 4-component vector of float)
+0:45          component-wise multiply ( temp highp 4-component vector of float)
+0:45            color1: direct index for structure (layout( column_major std140 offset=0) uniform highp 4-component vector of float)
+0:45              'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:45              Constant:
+0:45                0 (const int)
+0:45            Function Call: getColor2( ( global highp 4-component vector of float)
+0:45          c: direct index for structure (layout( column_major std430 offset=0) buffer highp 4-component vector of float)
+0:45            'uColorBuf' (layout( binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4-component vector of float c})
+0:45            Constant:
+0:45              0 (const int)
+0:46      move second child to first child ( temp highp 4-component vector of float)
+0:46        v1: direct index for structure ( out highp 4-component vector of float)
+0:46          'oV' ( out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2})
+0:46          Constant:
+0:46            0 (const int)
+0:46        color1: direct index for structure (layout( column_major std140 offset=0) uniform highp 4-component vector of float)
+0:46          'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:46          Constant:
+0:46            0 (const int)
+0:48      move second child to first child ( temp highp 4-component vector of float)
+0:48        gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:48          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
+0:48          Constant:
+0:48            0 (const uint)
+0:48        matrix-times-vector ( temp highp 4-component vector of float)
+0:48          uProj: direct index for structure (layout( column_major std140 offset=0) uniform highp 4X4 matrix of float)
+0:48            'uM' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:48            Constant:
+0:48              0 (const int)
+0:48          Function Call: getWorld( ( global highp 4-component vector of float)
+0:36  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:36    Function Parameters: 
+0:38    Sequence
+0:38      Branch: Return with expression
+0:38        color2: direct index for structure (layout( column_major std140 offset=32) uniform highp 4-component vector of float)
+0:38          'uColor' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:38          Constant:
+0:38            2 (const int)
+0:41  Function Definition: getWorld( ( global highp 4-component vector of float)
+0:41    Function Parameters: 
+0:43    Sequence
+0:43      move second child to first child ( temp highp 4-component vector of float)
+0:43        v1: direct index for structure ( out highp 4-component vector of float)
+0:43          'anon@0' ( out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2})
+0:43          Constant:
+0:43            0 (const uint)
+0:43        Constant:
+0:43          1.000000
+0:43          1.000000
+0:43          1.000000
+0:43          1.000000
+0:44      Branch: Return with expression
+0:44        matrix-times-vector ( temp highp 4-component vector of float)
+0:44          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform highp 4X4 matrix of float)
+0:44            'uMatrix' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:44            Constant:
+0:44              1 (const int)
+0:44          'P' ( in highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'uM' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:?     'oV' ( out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2})
+0:?     'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:?     'uBuf' (layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p})
+0:?     'uColorBuf' (layout( binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4-component vector of float c})
+0:?     'oColor' ( smooth out highp 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
+0:?     'P' ( in highp 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 73
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 14 34 42 65
+                              Source GLSL 430
+                              Name 4  "main"
+                              Name 9  "getColor2("
+                              Name 11  "getWorld("
+                              Name 14  "oColor"
+                              Name 16  "ColorBlock"
+                              MemberName 16(ColorBlock) 0  "color1"
+                              MemberName 16(ColorBlock) 1  "b"
+                              MemberName 16(ColorBlock) 2  "color2"
+                              MemberName 16(ColorBlock) 3  "color3"
+                              Name 18  "uC"
+                              Name 26  "SecondaryColorBlock"
+                              MemberName 26(SecondaryColorBlock) 0  "c"
+                              Name 28  "uColorBuf"
+                              Name 32  "Vertex"
+                              MemberName 32(Vertex) 0  "v1"
+                              MemberName 32(Vertex) 1  "v2"
+                              Name 34  "oV"
+                              Name 40  "gl_PerVertex"
+                              MemberName 40(gl_PerVertex) 0  "gl_Position"
+                              MemberName 40(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 40(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 42  ""
+                              Name 44  "MatrixBlock"
+                              MemberName 44(MatrixBlock) 0  "uProj"
+                              MemberName 44(MatrixBlock) 1  "uWorld"
+                              Name 46  "uM"
+                              Name 65  "P"
+                              Name 70  "BufferBlock"
+                              MemberName 70(BufferBlock) 0  "p"
+                              Name 72  "uBuf"
+                              MemberDecorate 16(ColorBlock) 0 Offset 0
+                              MemberDecorate 16(ColorBlock) 1 Offset 16
+                              MemberDecorate 16(ColorBlock) 2 Offset 32
+                              MemberDecorate 16(ColorBlock) 3 Offset 48
+                              Decorate 16(ColorBlock) Block
+                              Decorate 18(uC) DescriptorSet 0
+                              Decorate 18(uC) Binding 1
+                              MemberDecorate 26(SecondaryColorBlock) 0 Offset 0
+                              Decorate 26(SecondaryColorBlock) BufferBlock
+                              Decorate 28(uColorBuf) DescriptorSet 0
+                              Decorate 28(uColorBuf) Binding 0
+                              Decorate 32(Vertex) Block
+                              MemberDecorate 40(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 40(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 40(gl_PerVertex) 2 BuiltIn ClipDistance
+                              Decorate 40(gl_PerVertex) Block
+                              MemberDecorate 44(MatrixBlock) 0 ColMajor
+                              MemberDecorate 44(MatrixBlock) 0 Offset 0
+                              MemberDecorate 44(MatrixBlock) 0 MatrixStride 16
+                              MemberDecorate 44(MatrixBlock) 1 ColMajor
+                              MemberDecorate 44(MatrixBlock) 1 Offset 64
+                              MemberDecorate 44(MatrixBlock) 1 MatrixStride 16
+                              Decorate 44(MatrixBlock) Block
+                              Decorate 46(uM) DescriptorSet 0
+                              Decorate 46(uM) Binding 0
+                              MemberDecorate 70(BufferBlock) 0 ColMajor
+                              MemberDecorate 70(BufferBlock) 0 Offset 0
+                              MemberDecorate 70(BufferBlock) 0 MatrixStride 16
+                              Decorate 70(BufferBlock) BufferBlock
+                              Decorate 72(uBuf) DescriptorSet 0
+                              Decorate 72(uBuf) Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              13:             TypePointer Output 7(fvec4)
+      14(oColor):     13(ptr) Variable Output
+              15:             TypeInt 32 0
+  16(ColorBlock):             TypeStruct 7(fvec4) 15(int) 7(fvec4) 7(fvec4)
+              17:             TypePointer Uniform 16(ColorBlock)
+          18(uC):     17(ptr) Variable Uniform
+              19:             TypeInt 32 1
+              20:     19(int) Constant 0
+              21:             TypePointer Uniform 7(fvec4)
+26(SecondaryColorBlock):             TypeStruct 7(fvec4)
+              27:             TypePointer Uniform 26(SecondaryColorBlock)
+   28(uColorBuf):     27(ptr) Variable Uniform
+      32(Vertex):             TypeStruct 7(fvec4) 7(fvec4)
+              33:             TypePointer Output 32(Vertex)
+          34(oV):     33(ptr) Variable Output
+              38:     15(int) Constant 1
+              39:             TypeArray 6(float) 38
+40(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 39
+              41:             TypePointer Output 40(gl_PerVertex)
+              42:     41(ptr) Variable Output
+              43:             TypeMatrix 7(fvec4) 4
+ 44(MatrixBlock):             TypeStruct 43 43
+              45:             TypePointer Uniform 44(MatrixBlock)
+          46(uM):     45(ptr) Variable Uniform
+              47:             TypePointer Uniform 43
+              53:     19(int) Constant 2
+              58:    6(float) Constant 1065353216
+              59:    7(fvec4) ConstantComposite 58 58 58 58
+              61:     19(int) Constant 1
+              64:             TypePointer Input 7(fvec4)
+           65(P):     64(ptr) Variable Input
+ 70(BufferBlock):             TypeStruct 43
+              71:             TypePointer Uniform 70(BufferBlock)
+        72(uBuf):     71(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+              22:     21(ptr) AccessChain 18(uC) 20
+              23:    7(fvec4) Load 22
+              24:    7(fvec4) FunctionCall 9(getColor2()
+              25:    7(fvec4) FMul 23 24
+              29:     21(ptr) AccessChain 28(uColorBuf) 20
+              30:    7(fvec4) Load 29
+              31:    7(fvec4) FMul 25 30
+                              Store 14(oColor) 31
+              35:     21(ptr) AccessChain 18(uC) 20
+              36:    7(fvec4) Load 35
+              37:     13(ptr) AccessChain 34(oV) 20
+                              Store 37 36
+              48:     47(ptr) AccessChain 46(uM) 20
+              49:          43 Load 48
+              50:    7(fvec4) FunctionCall 11(getWorld()
+              51:    7(fvec4) MatrixTimesVector 49 50
+              52:     13(ptr) AccessChain 42 20
+                              Store 52 51
+                              Return
+                              FunctionEnd
+   9(getColor2():    7(fvec4) Function None 8
+              10:             Label
+              54:     21(ptr) AccessChain 18(uC) 53
+              55:    7(fvec4) Load 54
+                              ReturnValue 55
+                              FunctionEnd
+   11(getWorld():    7(fvec4) Function None 8
+              12:             Label
+              60:     13(ptr) AccessChain 34(oV) 20
+                              Store 60 59
+              62:     47(ptr) AccessChain 46(uM) 61
+              63:          43 Load 62
+              66:    7(fvec4) Load 65(P)
+              67:    7(fvec4) MatrixTimesVector 63 66
+                              ReturnValue 67
+                              FunctionEnd
diff --git a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out
new file mode 100755
index 0000000..413da7e
--- /dev/null
+++ b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out
@@ -0,0 +1,451 @@
+link.vk.multiBlocksValid.1.0.geom
+Shader version: 430
+invocations = -1
+max_vertices = 3
+input primitive = triangles
+output primitive = triangle_strip
+0:? Sequence
+0:48  Function Definition: main( ( global void)
+0:48    Function Parameters: 
+0:50    Sequence
+0:50      move second child to first child ( temp highp 4-component vector of float)
+0:50        'oColor' (layout( stream=0) out highp 4-component vector of float)
+0:50        component-wise multiply ( temp highp 4-component vector of float)
+0:50          color1: direct index for structure (layout( column_major std140 offset=0) uniform highp 4-component vector of float)
+0:50            'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:50            Constant:
+0:50              0 (const int)
+0:50          Function Call: getColor2( ( global highp 4-component vector of float)
+0:52      move second child to first child ( temp highp float)
+0:52        'globalF' ( global highp float)
+0:52        Constant:
+0:52          1.000000
+0:54      Sequence
+0:54        Sequence
+0:54          move second child to first child ( temp highp int)
+0:54            'i' ( temp highp int)
+0:54            Constant:
+0:54              0 (const int)
+0:54        Loop with condition tested first
+0:54          Loop Condition
+0:54          Compare Less Than ( temp bool)
+0:54            'i' ( temp highp int)
+0:54            Constant:
+0:54              3 (const int)
+0:54          Loop Body
+0:56          Sequence
+0:56            move second child to first child ( temp highp 4-component vector of float)
+0:56              gl_Position: direct index for structure (layout( stream=0) gl_Position highp 4-component vector of float Position)
+0:56                'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:56                Constant:
+0:56                  0 (const uint)
+0:56              matrix-times-vector ( temp highp 4-component vector of float)
+0:56                uProj: direct index for structure (layout( column_major std140 offset=0) uniform highp 4X4 matrix of float)
+0:56                  'uM' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:56                  Constant:
+0:56                    0 (const int)
+0:56                Function Call: getWorld(i1; ( global highp 4-component vector of float)
+0:56                  'i' ( temp highp int)
+0:57            move second child to first child ( temp highp 4-component vector of float)
+0:57              val1: direct index for structure (layout( stream=0) out highp 4-component vector of float)
+0:57                'oV' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1})
+0:57                Constant:
+0:57                  0 (const int)
+0:57              add ( temp highp 4-component vector of float)
+0:57                color1: direct index for structure (layout( column_major std140 offset=0) uniform highp 4-component vector of float)
+0:57                  'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:57                  Constant:
+0:57                    0 (const int)
+0:57                vector-scale ( temp highp 4-component vector of float)
+0:57                  v2: direct index for structure ( in highp 4-component vector of float)
+0:57                    indirect index ( temp block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:57                      'iV' ( in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:57                      'i' ( temp highp int)
+0:57                    Constant:
+0:57                      1 (const int)
+0:57                  'globalF' ( global highp float)
+0:58            EmitVertex ( global void)
+0:54          Loop Terminal Expression
+0:54          Post-Increment ( temp highp int)
+0:54            'i' ( temp highp int)
+0:61      EndPrimitive ( global void)
+0:?   Linker Objects
+0:?     'uM' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:?     'iV' ( in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:?     'oV' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1})
+0:?     'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:?     'uBuf' (layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p})
+0:?     'oColor' (layout( stream=0) out highp 4-component vector of float)
+0:?     'globalF' ( global highp float)
+0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance})
+
+link.vk.multiBlocksValid.1.1.geom
+Shader version: 430
+invocations = -1
+max_vertices = 3
+input primitive = triangles
+output primitive = triangle_strip
+0:? Sequence
+0:44  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:44    Function Parameters: 
+0:46    Sequence
+0:46      Branch: Return with expression
+0:46        color2: direct index for structure (layout( column_major std140 offset=32) uniform highp 4-component vector of float)
+0:46          'uColor' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:46          Constant:
+0:46            2 (const int)
+0:49  Function Definition: getWorld(i1; ( global highp 4-component vector of float)
+0:49    Function Parameters: 
+0:49      'i' ( in highp int)
+0:51    Sequence
+0:51      move second child to first child ( temp highp 4-component vector of float)
+0:51        val1: direct index for structure (layout( stream=0) out highp 4-component vector of float)
+0:51          'anon@0' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1})
+0:51          Constant:
+0:51            0 (const uint)
+0:51        Constant:
+0:51          1.000000
+0:51          1.000000
+0:51          1.000000
+0:51          1.000000
+0:52      Branch: Return with expression
+0:52        matrix-times-vector ( temp highp 4-component vector of float)
+0:52          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform highp 4X4 matrix of float)
+0:52            'uMatrix' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:52            Constant:
+0:52              1 (const int)
+0:52          v1: direct index for structure ( in highp 4-component vector of float)
+0:52            indirect index ( temp block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:52              'iVV' ( in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:52              'i' ( in highp int)
+0:52            Constant:
+0:52              0 (const int)
+0:?   Linker Objects
+0:?     'uColor' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:?     'uBuffer' (layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p})
+0:?     'uMatrix' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1})
+0:?     'iVV' ( in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:?     'P' ( in 3-element array of highp 4-component vector of float)
+
+
+Linked geometry stage:
+
+WARNING: Linking geometry stage: Matched shader interfaces are using different instance names.
+    uC: "layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3}" versus uColor: "layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3}"
+WARNING: Linking geometry stage: Matched shader interfaces are using different instance names.
+    uBuf: "layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p}" versus uBuffer: "layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p}"
+WARNING: Linking geometry stage: Matched shader interfaces are using different instance names.
+    uM: "layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld}" versus uMatrix: "layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld}"
+WARNING: Linking geometry stage: Matched shader interfaces are using different instance names.
+    oV: "layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1}" versus anon@0: "layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1}"
+WARNING: Linking geometry stage: Matched shader interfaces are using different instance names.
+    iV: " in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2}" versus iVV: " in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2}"
+
+Shader version: 430
+invocations = 1
+max_vertices = 3
+input primitive = triangles
+output primitive = triangle_strip
+0:? Sequence
+0:48  Function Definition: main( ( global void)
+0:48    Function Parameters: 
+0:50    Sequence
+0:50      move second child to first child ( temp highp 4-component vector of float)
+0:50        'oColor' (layout( stream=0) out highp 4-component vector of float)
+0:50        component-wise multiply ( temp highp 4-component vector of float)
+0:50          color1: direct index for structure (layout( column_major std140 offset=0) uniform highp 4-component vector of float)
+0:50            'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:50            Constant:
+0:50              0 (const int)
+0:50          Function Call: getColor2( ( global highp 4-component vector of float)
+0:52      move second child to first child ( temp highp float)
+0:52        'globalF' ( global highp float)
+0:52        Constant:
+0:52          1.000000
+0:54      Sequence
+0:54        Sequence
+0:54          move second child to first child ( temp highp int)
+0:54            'i' ( temp highp int)
+0:54            Constant:
+0:54              0 (const int)
+0:54        Loop with condition tested first
+0:54          Loop Condition
+0:54          Compare Less Than ( temp bool)
+0:54            'i' ( temp highp int)
+0:54            Constant:
+0:54              3 (const int)
+0:54          Loop Body
+0:56          Sequence
+0:56            move second child to first child ( temp highp 4-component vector of float)
+0:56              gl_Position: direct index for structure (layout( stream=0) gl_Position highp 4-component vector of float Position)
+0:56                'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance})
+0:56                Constant:
+0:56                  0 (const uint)
+0:56              matrix-times-vector ( temp highp 4-component vector of float)
+0:56                uProj: direct index for structure (layout( column_major std140 offset=0) uniform highp 4X4 matrix of float)
+0:56                  'uM' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:56                  Constant:
+0:56                    0 (const int)
+0:56                Function Call: getWorld(i1; ( global highp 4-component vector of float)
+0:56                  'i' ( temp highp int)
+0:57            move second child to first child ( temp highp 4-component vector of float)
+0:57              val1: direct index for structure (layout( stream=0) out highp 4-component vector of float)
+0:57                'oV' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1})
+0:57                Constant:
+0:57                  0 (const int)
+0:57              add ( temp highp 4-component vector of float)
+0:57                color1: direct index for structure (layout( column_major std140 offset=0) uniform highp 4-component vector of float)
+0:57                  'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:57                  Constant:
+0:57                    0 (const int)
+0:57                vector-scale ( temp highp 4-component vector of float)
+0:57                  v2: direct index for structure ( in highp 4-component vector of float)
+0:57                    indirect index ( temp block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:57                      'iV' ( in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:57                      'i' ( temp highp int)
+0:57                    Constant:
+0:57                      1 (const int)
+0:57                  'globalF' ( global highp float)
+0:58            EmitVertex ( global void)
+0:54          Loop Terminal Expression
+0:54          Post-Increment ( temp highp int)
+0:54            'i' ( temp highp int)
+0:61      EndPrimitive ( global void)
+0:44  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:44    Function Parameters: 
+0:46    Sequence
+0:46      Branch: Return with expression
+0:46        color2: direct index for structure (layout( column_major std140 offset=32) uniform highp 4-component vector of float)
+0:46          'uColor' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:46          Constant:
+0:46            2 (const int)
+0:49  Function Definition: getWorld(i1; ( global highp 4-component vector of float)
+0:49    Function Parameters: 
+0:49      'i' ( in highp int)
+0:51    Sequence
+0:51      move second child to first child ( temp highp 4-component vector of float)
+0:51        val1: direct index for structure (layout( stream=0) out highp 4-component vector of float)
+0:51          'anon@0' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1})
+0:51          Constant:
+0:51            0 (const uint)
+0:51        Constant:
+0:51          1.000000
+0:51          1.000000
+0:51          1.000000
+0:51          1.000000
+0:52      Branch: Return with expression
+0:52        matrix-times-vector ( temp highp 4-component vector of float)
+0:52          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform highp 4X4 matrix of float)
+0:52            'uMatrix' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:52            Constant:
+0:52              1 (const int)
+0:52          v1: direct index for structure ( in highp 4-component vector of float)
+0:52            indirect index ( temp block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:52              'iVV' ( in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:52              'i' ( in highp int)
+0:52            Constant:
+0:52              0 (const int)
+0:?   Linker Objects
+0:?     'uM' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:?     'iV' ( in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:?     'oV' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1})
+0:?     'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:?     'uBuf' (layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p})
+0:?     'oColor' (layout( stream=0) out highp 4-component vector of float)
+0:?     'globalF' ( global highp float)
+0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance})
+0:?     'P' ( in 3-element array of highp 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 101
+
+                              Capability Geometry
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 4  "main" 18 46 61 68 100
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 Invocations 1
+                              ExecutionMode 4 OutputTriangleStrip
+                              ExecutionMode 4 OutputVertices 3
+                              Source GLSL 430
+                              Name 4  "main"
+                              Name 9  "getColor2("
+                              Name 15  "getWorld(i1;"
+                              Name 14  "i"
+                              Name 18  "oColor"
+                              Name 20  "ColorBlock"
+                              MemberName 20(ColorBlock) 0  "color1"
+                              MemberName 20(ColorBlock) 1  "b"
+                              MemberName 20(ColorBlock) 2  "color2"
+                              MemberName 20(ColorBlock) 3  "color3"
+                              Name 22  "uC"
+                              Name 30  "globalF"
+                              Name 32  "i"
+                              Name 44  "gl_PerVertex"
+                              MemberName 44(gl_PerVertex) 0  "gl_Position"
+                              MemberName 44(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 44(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 46  ""
+                              Name 48  "MatrixBlock"
+                              MemberName 48(MatrixBlock) 0  "uProj"
+                              MemberName 48(MatrixBlock) 1  "uWorld"
+                              Name 50  "uM"
+                              Name 54  "param"
+                              Name 59  "Vertex"
+                              MemberName 59(Vertex) 0  "val1"
+                              Name 61  "oV"
+                              Name 64  "Vertex"
+                              MemberName 64(Vertex) 0  "v1"
+                              MemberName 64(Vertex) 1  "v2"
+                              Name 68  "iV"
+                              Name 95  "BufferBlock"
+                              MemberName 95(BufferBlock) 0  "p"
+                              Name 97  "uBuf"
+                              Name 100  "P"
+                              MemberDecorate 20(ColorBlock) 0 Offset 0
+                              MemberDecorate 20(ColorBlock) 1 Offset 16
+                              MemberDecorate 20(ColorBlock) 2 Offset 32
+                              MemberDecorate 20(ColorBlock) 3 Offset 48
+                              Decorate 20(ColorBlock) Block
+                              Decorate 22(uC) DescriptorSet 0
+                              Decorate 22(uC) Binding 1
+                              MemberDecorate 44(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 44(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 44(gl_PerVertex) 2 BuiltIn ClipDistance
+                              Decorate 44(gl_PerVertex) Block
+                              MemberDecorate 48(MatrixBlock) 0 ColMajor
+                              MemberDecorate 48(MatrixBlock) 0 Offset 0
+                              MemberDecorate 48(MatrixBlock) 0 MatrixStride 16
+                              MemberDecorate 48(MatrixBlock) 1 ColMajor
+                              MemberDecorate 48(MatrixBlock) 1 Offset 64
+                              MemberDecorate 48(MatrixBlock) 1 MatrixStride 16
+                              Decorate 48(MatrixBlock) Block
+                              Decorate 50(uM) DescriptorSet 0
+                              Decorate 50(uM) Binding 0
+                              Decorate 59(Vertex) Block
+                              Decorate 64(Vertex) Block
+                              MemberDecorate 95(BufferBlock) 0 ColMajor
+                              MemberDecorate 95(BufferBlock) 0 Offset 0
+                              MemberDecorate 95(BufferBlock) 0 MatrixStride 16
+                              Decorate 95(BufferBlock) BufferBlock
+                              Decorate 97(uBuf) DescriptorSet 0
+                              Decorate 97(uBuf) Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypeInt 32 1
+              12:             TypePointer Function 11(int)
+              13:             TypeFunction 7(fvec4) 12(ptr)
+              17:             TypePointer Output 7(fvec4)
+      18(oColor):     17(ptr) Variable Output
+              19:             TypeInt 32 0
+  20(ColorBlock):             TypeStruct 7(fvec4) 19(int) 7(fvec4) 7(fvec4)
+              21:             TypePointer Uniform 20(ColorBlock)
+          22(uC):     21(ptr) Variable Uniform
+              23:     11(int) Constant 0
+              24:             TypePointer Uniform 7(fvec4)
+              29:             TypePointer Private 6(float)
+     30(globalF):     29(ptr) Variable Private
+              31:    6(float) Constant 1065353216
+              39:     11(int) Constant 3
+              40:             TypeBool
+              42:     19(int) Constant 1
+              43:             TypeArray 6(float) 42
+44(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 43
+              45:             TypePointer Output 44(gl_PerVertex)
+              46:     45(ptr) Variable Output
+              47:             TypeMatrix 7(fvec4) 4
+ 48(MatrixBlock):             TypeStruct 47 47
+              49:             TypePointer Uniform 48(MatrixBlock)
+          50(uM):     49(ptr) Variable Uniform
+              51:             TypePointer Uniform 47
+      59(Vertex):             TypeStruct 7(fvec4)
+              60:             TypePointer Output 59(Vertex)
+          61(oV):     60(ptr) Variable Output
+      64(Vertex):             TypeStruct 7(fvec4) 7(fvec4)
+              65:     19(int) Constant 3
+              66:             TypeArray 64(Vertex) 65
+              67:             TypePointer Input 66
+          68(iV):     67(ptr) Variable Input
+              70:     11(int) Constant 1
+              71:             TypePointer Input 7(fvec4)
+              80:     11(int) Constant 2
+              85:    7(fvec4) ConstantComposite 31 31 31 31
+ 95(BufferBlock):             TypeStruct 47
+              96:             TypePointer Uniform 95(BufferBlock)
+        97(uBuf):     96(ptr) Variable Uniform
+              98:             TypeArray 7(fvec4) 65
+              99:             TypePointer Input 98
+          100(P):     99(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+           32(i):     12(ptr) Variable Function
+       54(param):     12(ptr) Variable Function
+              25:     24(ptr) AccessChain 22(uC) 23
+              26:    7(fvec4) Load 25
+              27:    7(fvec4) FunctionCall 9(getColor2()
+              28:    7(fvec4) FMul 26 27
+                              Store 18(oColor) 28
+                              Store 30(globalF) 31
+                              Store 32(i) 23
+                              Branch 33
+              33:             Label
+                              LoopMerge 35 36 None
+                              Branch 37
+              37:             Label
+              38:     11(int) Load 32(i)
+              41:    40(bool) SLessThan 38 39
+                              BranchConditional 41 34 35
+              34:               Label
+              52:     51(ptr)   AccessChain 50(uM) 23
+              53:          47   Load 52
+              55:     11(int)   Load 32(i)
+                                Store 54(param) 55
+              56:    7(fvec4)   FunctionCall 15(getWorld(i1;) 54(param)
+              57:    7(fvec4)   MatrixTimesVector 53 56
+              58:     17(ptr)   AccessChain 46 23
+                                Store 58 57
+              62:     24(ptr)   AccessChain 22(uC) 23
+              63:    7(fvec4)   Load 62
+              69:     11(int)   Load 32(i)
+              72:     71(ptr)   AccessChain 68(iV) 69 70
+              73:    7(fvec4)   Load 72
+              74:    6(float)   Load 30(globalF)
+              75:    7(fvec4)   VectorTimesScalar 73 74
+              76:    7(fvec4)   FAdd 63 75
+              77:     17(ptr)   AccessChain 61(oV) 23
+                                Store 77 76
+                                EmitVertex
+                                Branch 36
+              36:               Label
+              78:     11(int)   Load 32(i)
+              79:     11(int)   IAdd 78 70
+                                Store 32(i) 79
+                                Branch 33
+              35:             Label
+                              EndPrimitive
+                              Return
+                              FunctionEnd
+   9(getColor2():    7(fvec4) Function None 8
+              10:             Label
+              81:     24(ptr) AccessChain 22(uC) 80
+              82:    7(fvec4) Load 81
+                              ReturnValue 82
+                              FunctionEnd
+15(getWorld(i1;):    7(fvec4) Function None 13
+           14(i):     12(ptr) FunctionParameter
+              16:             Label
+              86:     17(ptr) AccessChain 61(oV) 23
+                              Store 86 85
+              87:     51(ptr) AccessChain 50(uM) 70
+              88:          47 Load 87
+              89:     11(int) Load 14(i)
+              90:     71(ptr) AccessChain 68(iV) 89 23
+              91:    7(fvec4) Load 90
+              92:    7(fvec4) MatrixTimesVector 88 91
+                              ReturnValue 92
+                              FunctionEnd
diff --git a/Test/baseResults/link.vk.pcNamingInvalid.0.0.vert.out b/Test/baseResults/link.vk.pcNamingInvalid.0.0.vert.out
new file mode 100755
index 0000000..45f6a39
--- /dev/null
+++ b/Test/baseResults/link.vk.pcNamingInvalid.0.0.vert.out
@@ -0,0 +1,111 @@
+link.vk.pcNamingInvalid.0.0.vert
+Shader version: 450
+0:? Sequence
+0:16  Function Definition: main( ( global void)
+0:16    Function Parameters: 
+0:18    Sequence
+0:18      move second child to first child ( temp highp 4-component vector of float)
+0:18        'oColor' ( smooth out highp 4-component vector of float)
+0:18        component-wise multiply ( temp highp 4-component vector of float)
+0:18          color1: direct index for structure (layout( column_major std430 offset=128) uniform highp 4-component vector of float)
+0:18            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:18            Constant:
+0:18              2 (const int)
+0:18          Function Call: getColor2( ( global highp 4-component vector of float)
+0:20      move second child to first child ( temp highp 4-component vector of float)
+0:20        gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:20          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  out unsized 1-element array of float CullDistance gl_CullDistance})
+0:20          Constant:
+0:20            0 (const uint)
+0:20        matrix-times-vector ( temp highp 4-component vector of float)
+0:20          uProj: direct index for structure (layout( column_major std430 offset=64) uniform highp 4X4 matrix of float)
+0:20            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:20            Constant:
+0:20              1 (const int)
+0:20          Function Call: getWorld( ( global highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:?     'oColor' ( smooth out highp 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  out unsized 1-element array of float CullDistance gl_CullDistance})
+
+link.vk.pcNamingInvalid.0.1.vert
+Shader version: 450
+0:? Sequence
+0:13  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:13    Function Parameters: 
+0:15    Sequence
+0:15      Branch: Return with expression
+0:15        color2: direct index for structure (layout( column_major std430 offset=144) uniform highp 4-component vector of float)
+0:15          'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:15          Constant:
+0:15            3 (const int)
+0:18  Function Definition: getWorld( ( global highp 4-component vector of float)
+0:18    Function Parameters: 
+0:20    Sequence
+0:20      Branch: Return with expression
+0:20        matrix-times-vector ( temp highp 4-component vector of float)
+0:20          uWorld: direct index for structure (layout( column_major std430 offset=0) uniform highp 4X4 matrix of float)
+0:20            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:20            Constant:
+0:20              0 (const int)
+0:20          'P' ( in highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:?     'P' ( in highp 4-component vector of float)
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: Only one push_constant block is allowed per stage
+
+Shader version: 450
+0:? Sequence
+0:16  Function Definition: main( ( global void)
+0:16    Function Parameters: 
+0:18    Sequence
+0:18      move second child to first child ( temp highp 4-component vector of float)
+0:18        'oColor' ( smooth out highp 4-component vector of float)
+0:18        component-wise multiply ( temp highp 4-component vector of float)
+0:18          color1: direct index for structure (layout( column_major std430 offset=128) uniform highp 4-component vector of float)
+0:18            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:18            Constant:
+0:18              2 (const int)
+0:18          Function Call: getColor2( ( global highp 4-component vector of float)
+0:20      move second child to first child ( temp highp 4-component vector of float)
+0:20        gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:20          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  out 1-element array of float CullDistance gl_CullDistance})
+0:20          Constant:
+0:20            0 (const uint)
+0:20        matrix-times-vector ( temp highp 4-component vector of float)
+0:20          uProj: direct index for structure (layout( column_major std430 offset=64) uniform highp 4X4 matrix of float)
+0:20            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:20            Constant:
+0:20              1 (const int)
+0:20          Function Call: getWorld( ( global highp 4-component vector of float)
+0:13  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:13    Function Parameters: 
+0:15    Sequence
+0:15      Branch: Return with expression
+0:15        color2: direct index for structure (layout( column_major std430 offset=144) uniform highp 4-component vector of float)
+0:15          'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:15          Constant:
+0:15            3 (const int)
+0:18  Function Definition: getWorld( ( global highp 4-component vector of float)
+0:18    Function Parameters: 
+0:20    Sequence
+0:20      Branch: Return with expression
+0:20        matrix-times-vector ( temp highp 4-component vector of float)
+0:20          uWorld: direct index for structure (layout( column_major std430 offset=0) uniform highp 4X4 matrix of float)
+0:20            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:20            Constant:
+0:20              0 (const int)
+0:20          'P' ( in highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:?     'oColor' ( smooth out highp 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  out 1-element array of float CullDistance gl_CullDistance})
+0:?     'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:?     'P' ( in highp 4-component vector of float)
+
+Validation failed
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out b/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out
new file mode 100755
index 0000000..c9dba15
--- /dev/null
+++ b/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out
@@ -0,0 +1,206 @@
+link.vk.pcNamingValid.0.0.vert
+Shader version: 450
+0:? Sequence
+0:16  Function Definition: main( ( global void)
+0:16    Function Parameters: 
+0:18    Sequence
+0:18      move second child to first child ( temp highp 4-component vector of float)
+0:18        'oColor' (layout( location=0) smooth out highp 4-component vector of float)
+0:18        component-wise multiply ( temp highp 4-component vector of float)
+0:18          color1: direct index for structure (layout( column_major std430 offset=128) uniform highp 4-component vector of float)
+0:18            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:18            Constant:
+0:18              2 (const int)
+0:18          Function Call: getColor2( ( global highp 4-component vector of float)
+0:20      move second child to first child ( temp highp 4-component vector of float)
+0:20        gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:20          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  out unsized 1-element array of float CullDistance gl_CullDistance})
+0:20          Constant:
+0:20            0 (const uint)
+0:20        matrix-times-vector ( temp highp 4-component vector of float)
+0:20          uProj: direct index for structure (layout( column_major std430 offset=64) uniform highp 4X4 matrix of float)
+0:20            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:20            Constant:
+0:20              1 (const int)
+0:20          Function Call: getWorld( ( global highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:?     'oColor' (layout( location=0) smooth out highp 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  out unsized 1-element array of float CullDistance gl_CullDistance})
+
+link.vk.pcNamingValid.0.1.vert
+Shader version: 450
+0:? Sequence
+0:13  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:13    Function Parameters: 
+0:15    Sequence
+0:15      Branch: Return with expression
+0:15        color2: direct index for structure (layout( column_major std430 offset=144) uniform highp 4-component vector of float)
+0:15          'b' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:15          Constant:
+0:15            3 (const int)
+0:18  Function Definition: getWorld( ( global highp 4-component vector of float)
+0:18    Function Parameters: 
+0:20    Sequence
+0:20      Branch: Return with expression
+0:20        matrix-times-vector ( temp highp 4-component vector of float)
+0:20          uWorld: direct index for structure (layout( column_major std430 offset=0) uniform highp 4X4 matrix of float)
+0:20            'b' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:20            Constant:
+0:20              0 (const int)
+0:20          'P' (layout( location=0) in highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'b' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:?     'P' (layout( location=0) in highp 4-component vector of float)
+
+
+Linked vertex stage:
+
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    a: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2}" versus b: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2}"
+
+Shader version: 450
+0:? Sequence
+0:16  Function Definition: main( ( global void)
+0:16    Function Parameters: 
+0:18    Sequence
+0:18      move second child to first child ( temp highp 4-component vector of float)
+0:18        'oColor' (layout( location=0) smooth out highp 4-component vector of float)
+0:18        component-wise multiply ( temp highp 4-component vector of float)
+0:18          color1: direct index for structure (layout( column_major std430 offset=128) uniform highp 4-component vector of float)
+0:18            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:18            Constant:
+0:18              2 (const int)
+0:18          Function Call: getColor2( ( global highp 4-component vector of float)
+0:20      move second child to first child ( temp highp 4-component vector of float)
+0:20        gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:20          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  out 1-element array of float CullDistance gl_CullDistance})
+0:20          Constant:
+0:20            0 (const uint)
+0:20        matrix-times-vector ( temp highp 4-component vector of float)
+0:20          uProj: direct index for structure (layout( column_major std430 offset=64) uniform highp 4X4 matrix of float)
+0:20            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:20            Constant:
+0:20              1 (const int)
+0:20          Function Call: getWorld( ( global highp 4-component vector of float)
+0:13  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:13    Function Parameters: 
+0:15    Sequence
+0:15      Branch: Return with expression
+0:15        color2: direct index for structure (layout( column_major std430 offset=144) uniform highp 4-component vector of float)
+0:15          'b' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:15          Constant:
+0:15            3 (const int)
+0:18  Function Definition: getWorld( ( global highp 4-component vector of float)
+0:18    Function Parameters: 
+0:20    Sequence
+0:20      Branch: Return with expression
+0:20        matrix-times-vector ( temp highp 4-component vector of float)
+0:20          uWorld: direct index for structure (layout( column_major std430 offset=0) uniform highp 4X4 matrix of float)
+0:20            'b' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:20            Constant:
+0:20              0 (const int)
+0:20          'P' (layout( location=0) in highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:?     'oColor' (layout( location=0) smooth out highp 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  out 1-element array of float CullDistance gl_CullDistance})
+0:?     'P' (layout( location=0) in highp 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 53
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 14 31 48
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "getColor2("
+                              Name 11  "getWorld("
+                              Name 14  "oColor"
+                              Name 16  "PCBlock"
+                              MemberName 16(PCBlock) 0  "uWorld"
+                              MemberName 16(PCBlock) 1  "uProj"
+                              MemberName 16(PCBlock) 2  "color1"
+                              MemberName 16(PCBlock) 3  "color2"
+                              Name 18  "a"
+                              Name 29  "gl_PerVertex"
+                              MemberName 29(gl_PerVertex) 0  "gl_Position"
+                              MemberName 29(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 29(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 29(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 31  ""
+                              Name 48  "P"
+                              Decorate 14(oColor) Location 0
+                              MemberDecorate 16(PCBlock) 0 ColMajor
+                              MemberDecorate 16(PCBlock) 0 Offset 0
+                              MemberDecorate 16(PCBlock) 0 MatrixStride 16
+                              MemberDecorate 16(PCBlock) 1 ColMajor
+                              MemberDecorate 16(PCBlock) 1 Offset 64
+                              MemberDecorate 16(PCBlock) 1 MatrixStride 16
+                              MemberDecorate 16(PCBlock) 2 Offset 128
+                              MemberDecorate 16(PCBlock) 3 Offset 144
+                              Decorate 16(PCBlock) Block
+                              MemberDecorate 29(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 29(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 29(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 29(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 29(gl_PerVertex) Block
+                              Decorate 48(P) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              13:             TypePointer Output 7(fvec4)
+      14(oColor):     13(ptr) Variable Output
+              15:             TypeMatrix 7(fvec4) 4
+     16(PCBlock):             TypeStruct 15 15 7(fvec4) 7(fvec4)
+              17:             TypePointer PushConstant 16(PCBlock)
+           18(a):     17(ptr) Variable PushConstant
+              19:             TypeInt 32 1
+              20:     19(int) Constant 2
+              21:             TypePointer PushConstant 7(fvec4)
+              26:             TypeInt 32 0
+              27:     26(int) Constant 1
+              28:             TypeArray 6(float) 27
+29(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 28 28
+              30:             TypePointer Output 29(gl_PerVertex)
+              31:     30(ptr) Variable Output
+              32:     19(int) Constant 0
+              33:     19(int) Constant 1
+              34:             TypePointer PushConstant 15
+              40:     19(int) Constant 3
+              47:             TypePointer Input 7(fvec4)
+           48(P):     47(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+              22:     21(ptr) AccessChain 18(a) 20
+              23:    7(fvec4) Load 22
+              24:    7(fvec4) FunctionCall 9(getColor2()
+              25:    7(fvec4) FMul 23 24
+                              Store 14(oColor) 25
+              35:     34(ptr) AccessChain 18(a) 33
+              36:          15 Load 35
+              37:    7(fvec4) FunctionCall 11(getWorld()
+              38:    7(fvec4) MatrixTimesVector 36 37
+              39:     13(ptr) AccessChain 31 32
+                              Store 39 38
+                              Return
+                              FunctionEnd
+   9(getColor2():    7(fvec4) Function None 8
+              10:             Label
+              41:     21(ptr) AccessChain 18(a) 40
+              42:    7(fvec4) Load 41
+                              ReturnValue 42
+                              FunctionEnd
+   11(getWorld():    7(fvec4) Function None 8
+              12:             Label
+              45:     34(ptr) AccessChain 18(a) 32
+              46:          15 Load 45
+              49:    7(fvec4) Load 48(P)
+              50:    7(fvec4) MatrixTimesVector 46 49
+                              ReturnValue 50
+                              FunctionEnd
diff --git a/Test/baseResults/link1.vk.frag.out b/Test/baseResults/link1.vk.frag.out
index a24246a..94debe1 100644
--- a/Test/baseResults/link1.vk.frag.out
+++ b/Test/baseResults/link1.vk.frag.out
@@ -42,8 +42,8 @@
 0:?     'b' ( global 5-element array of highp int)
 0:?     'c' ( global unsized 4-element array of highp int)
 0:?     'i' ( global highp int)
-0:?     'anon@0' (layout( column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float r})
-0:?     'anon@1' (layout( column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float m})
+0:?     'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float r})
+0:?     'anon@1' (layout( binding=1 column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float m})
 
 link2.vk.frag
 Shader version: 450
@@ -99,8 +99,8 @@
 0:?     'b' ( global unsized 3-element array of highp int)
 0:?     'c' ( global 7-element array of highp int)
 0:?     'i' ( global highp int)
-0:?     'anon@0' (layout( column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float r})
-0:?     'anon@1' (layout( column_major std430) buffer block{layout( column_major std430) buffer 4-element array of highp float m})
+0:?     'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float r})
+0:?     'anon@1' (layout( binding=1 column_major std430) buffer block{layout( column_major std430) buffer 4-element array of highp float m})
 
 
 Linked fragment stage:
@@ -192,12 +192,12 @@
 0:?     'b' ( global 5-element array of highp int)
 0:?     'c' ( global 7-element array of highp int)
 0:?     'i' ( global highp int)
-0:?     'anon@0' (layout( column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float r})
-0:?     'anon@1' (layout( column_major std430) buffer block{layout( column_major std430) buffer 4-element array of highp float m})
+0:?     'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float r})
+0:?     'anon@1' (layout( binding=1 column_major std430) buffer block{layout( column_major std430) buffer 4-element array of highp float m})
 0:?     's2D' (layout( binding=1) uniform highp sampler2D)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 70
 
                               Capability Shader
@@ -233,7 +233,7 @@
                               MemberDecorate 67(bnameImplicit) 0 Offset 0
                               Decorate 67(bnameImplicit) BufferBlock
                               Decorate 69 DescriptorSet 0
-                              Decorate 69 Binding 0
+                              Decorate 69 Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/negativeArraySize.comp.out b/Test/baseResults/negativeArraySize.comp.out
index 0a5ba31..5ae83dc 100644
--- a/Test/baseResults/negativeArraySize.comp.out
+++ b/Test/baseResults/negativeArraySize.comp.out
@@ -1,5 +1,5 @@
 negativeArraySize.comp
-ERROR: 0:9: '' : array size must be a positive integer 
+ERROR: 0:9: '' : array size must be a positive integer
 ERROR: 1 compilation errors.  No code generated.
 
 
diff --git a/Test/baseResults/nonuniform.frag.out b/Test/baseResults/nonuniform.frag.out
index 2d4e9b0..9054c2c 100644
--- a/Test/baseResults/nonuniform.frag.out
+++ b/Test/baseResults/nonuniform.frag.out
@@ -31,13 +31,22 @@
 0:27      move second child to first child ( temp int)
 0:27        'nu_li' ( nonuniform temp int)
 0:27        add ( nonuniform temp int)
-0:27          'a' ( nonuniform temp int)
-0:27          component-wise multiply ( nonuniform temp int)
+0:27          copy object ( nonuniform temp int)
 0:27            'a' ( temp int)
-0:27            Constant:
-0:27              2 (const int)
+0:27          copy object ( nonuniform temp int)
+0:27            component-wise multiply ( temp int)
+0:27              'a' ( temp int)
+0:27              Constant:
+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)
@@ -72,13 +81,22 @@
 0:27      move second child to first child ( temp int)
 0:27        'nu_li' ( nonuniform temp int)
 0:27        add ( nonuniform temp int)
-0:27          'a' ( nonuniform temp int)
-0:27          component-wise multiply ( nonuniform temp int)
+0:27          copy object ( nonuniform temp int)
 0:27            'a' ( temp int)
-0:27            Constant:
-0:27              2 (const int)
+0:27          copy object ( nonuniform temp int)
+0:27            component-wise multiply ( temp int)
+0:27              'a' ( temp int)
+0:27              Constant:
+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/rayQuery-allOps.Error.rgen.out b/Test/baseResults/rayQuery-allOps.Error.rgen.out
new file mode 100644
index 0000000..98101c3
--- /dev/null
+++ b/Test/baseResults/rayQuery-allOps.Error.rgen.out
@@ -0,0 +1,26 @@
+rayQuery-allOps.Error.rgen
+ERROR: 0:47: '==' :  wrong operand types: no operation '==' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:49: '=' :  cannot convert from ' global uint' to ' temp highp int'
+ERROR: 0:59: '==' :  wrong operand types: no operation '==' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:64: '==' :  wrong operand types: no operation '==' exists that takes a left-hand operand of type ' global 2-component vector of float' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:69: '' : boolean expression expected 
+ERROR: 0:74: '' : boolean expression expected 
+ERROR: 0:79: '>' :  wrong operand types: no operation '>' exists that takes a left-hand operand of type ' global 3-component vector of float' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:84: '>' :  wrong operand types: no operation '>' exists that takes a left-hand operand of type ' global 3-component vector of float' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:89: '' : boolean expression expected 
+ERROR: 0:94: '' : boolean expression expected 
+ERROR: 0:99: '' : boolean expression expected 
+ERROR: 0:127: '=' :  cannot convert from ' global uint' to ' temp highp int'
+ERROR: 0:145: '==' :  wrong operand types: no operation '==' exists that takes a left-hand operand of type ' global 2-component vector of float' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:158: '' : boolean expression expected 
+ERROR: 0:163: '' : boolean expression expected 
+ERROR: 0:168: '>' :  wrong operand types: no operation '>' exists that takes a left-hand operand of type ' global 3-component vector of float' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:173: '>' :  wrong operand types: no operation '>' exists that takes a left-hand operand of type ' global 3-component vector of float' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:178: '' : boolean expression expected 
+ERROR: 0:183: '' : boolean expression expected 
+ERROR: 0:195: '' : boolean expression expected 
+ERROR: 0:200: '' : boolean expression expected 
+ERROR: 21 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/rayQuery-allOps.comp.out b/Test/baseResults/rayQuery-allOps.comp.out
new file mode 100644
index 0000000..2ac7cd3
--- /dev/null
+++ b/Test/baseResults/rayQuery-allOps.comp.out
@@ -0,0 +1,433 @@
+rayQuery-allOps.comp
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 258
+
+                              Capability Shader
+                              Capability RayQueryProvisionalKHR
+                              Capability RayTraversalPrimitiveCullingProvisionalKHR
+                              Extension  "SPV_KHR_ray_query"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_flags_primitive_culling"
+                              SourceExtension  "GL_EXT_ray_query"
+                              Name 4  "main"
+                              Name 6  "doSomething("
+                              Name 10  "Ray"
+                              MemberName 10(Ray) 0  "pos"
+                              MemberName 10(Ray) 1  "tmin"
+                              MemberName 10(Ray) 2  "dir"
+                              MemberName 10(Ray) 3  "tmax"
+                              Name 12  "makeRayDesc("
+                              Name 15  "Log"
+                              MemberName 15(Log) 0  "x"
+                              MemberName 15(Log) 1  "y"
+                              Name 17  ""
+                              Name 26  "ray"
+                              Name 43  "ray"
+                              Name 47  "rayQuery"
+                              Name 50  "rtas"
+                              Name 69  "candidateType"
+                              Name 78  "_mat4x3"
+                              Name 83  "_mat3x4"
+                              Name 143  "t"
+                              Name 156  "committedStatus"
+                              Name 241  "o"
+                              Name 243  "d"
+                              Name 253  "Ray"
+                              MemberName 253(Ray) 0  "pos"
+                              MemberName 253(Ray) 1  "tmin"
+                              MemberName 253(Ray) 2  "dir"
+                              MemberName 253(Ray) 3  "tmax"
+                              Name 255  "Rays"
+                              MemberName 255(Rays) 0  "rays"
+                              Name 257  ""
+                              MemberDecorate 15(Log) 0 Offset 0
+                              MemberDecorate 15(Log) 1 Offset 4
+                              Decorate 15(Log) BufferBlock
+                              Decorate 17 DescriptorSet 0
+                              Decorate 17 Binding 0
+                              Decorate 50(rtas) DescriptorSet 0
+                              Decorate 50(rtas) Binding 1
+                              MemberDecorate 253(Ray) 0 Offset 0
+                              MemberDecorate 253(Ray) 1 Offset 12
+                              MemberDecorate 253(Ray) 2 Offset 16
+                              MemberDecorate 253(Ray) 3 Offset 28
+                              Decorate 254 ArrayStride 32
+                              MemberDecorate 255(Rays) 0 Offset 0
+                              Decorate 255(Rays) BufferBlock
+                              Decorate 257 DescriptorSet 0
+                              Decorate 257 Binding 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 3
+         10(Ray):             TypeStruct 9(fvec3) 8(float) 9(fvec3) 8(float)
+              11:             TypeFunction 10(Ray)
+              14:             TypeInt 32 0
+         15(Log):             TypeStruct 14(int) 14(int)
+              16:             TypePointer Uniform 15(Log)
+              17:     16(ptr) Variable Uniform
+              18:             TypeInt 32 1
+              19:     18(int) Constant 0
+              20:     14(int) Constant 0
+              21:             TypePointer Uniform 14(int)
+              23:     18(int) Constant 1
+              25:             TypePointer Function 10(Ray)
+              27:    8(float) Constant 0
+              28:    9(fvec3) ConstantComposite 27 27 27
+              29:             TypePointer Function 9(fvec3)
+              31:     18(int) Constant 2
+              32:    8(float) Constant 1065353216
+              33:    9(fvec3) ConstantComposite 32 27 27
+              35:             TypePointer Function 8(float)
+              37:     18(int) Constant 3
+              38:    8(float) Constant 1176255488
+              45:             TypeRayQueryProvisionalKHR
+              46:             TypePointer Function 45
+              48:             TypeAccelerationStructureKHR
+              49:             TypePointer UniformConstant 48
+        50(rtas):     49(ptr) Variable UniformConstant
+              52:     14(int) Constant 255
+              66:             TypeBool
+              68:             TypePointer Function 14(int)
+              70:    66(bool) ConstantFalse
+              76:             TypeMatrix 9(fvec3) 4
+              77:             TypePointer Function 76
+              80:             TypeVector 8(float) 4
+              81:             TypeMatrix 80(fvec4) 3
+              82:             TypePointer Function 81
+              86:    66(bool) ConstantTrue
+              91:             TypeVector 8(float) 2
+             144:    8(float) Constant 1056964608
+             175:     14(int) Constant 1
+             198:     14(int) Constant 2
+             231:     14(int) Constant 256
+        253(Ray):             TypeStruct 9(fvec3) 8(float) 9(fvec3) 8(float)
+             254:             TypeRuntimeArray 253(Ray)
+       255(Rays):             TypeStruct 254
+             256:             TypePointer Uniform 255(Rays)
+             257:    256(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+         43(ray):     25(ptr) Variable Function
+    47(rayQuery):     46(ptr) Variable Function
+69(candidateType):     68(ptr) Variable Function
+     78(_mat4x3):     77(ptr) Variable Function
+     83(_mat3x4):     82(ptr) Variable Function
+          143(t):     35(ptr) Variable Function
+156(committedStatus):     68(ptr) Variable Function
+          241(o):     29(ptr) Variable Function
+          243(d):     29(ptr) Variable Function
+              44:     10(Ray) FunctionCall 12(makeRayDesc()
+                              Store 43(ray) 44
+              51:          48 Load 50(rtas)
+              53:     29(ptr) AccessChain 43(ray) 19
+              54:    9(fvec3) Load 53
+              55:     35(ptr) AccessChain 43(ray) 23
+              56:    8(float) Load 55
+              57:     29(ptr) AccessChain 43(ray) 31
+              58:    9(fvec3) Load 57
+              59:     35(ptr) AccessChain 43(ray) 37
+              60:    8(float) Load 59
+                              RayQueryInitializeKHR 47(rayQuery) 51 20 52 54 56 58 60
+                              Branch 61
+              61:             Label
+                              LoopMerge 63 64 None
+                              Branch 65
+              65:             Label
+              67:    66(bool) RayQueryProceedKHR 47(rayQuery)
+                              BranchConditional 67 62 63
+              62:               Label
+              71:     14(int)   RayQueryGetIntersectionTypeKHR 47(rayQuery) 19
+                                Store 69(candidateType) 71
+              72:     14(int)   Load 69(candidateType)
+                                SelectionMerge 75 None
+                                Switch 72 75 
+                                       case 0: 73
+                                       case 1: 74
+              73:                 Label
+                                  RayQueryTerminateKHR 47(rayQuery)
+              79:          76     RayQueryGetIntersectionObjectToWorldKHR 47(rayQuery) 19
+                                  Store 78(_mat4x3) 79
+              84:          76     Load 78(_mat4x3)
+              85:          81     Transpose 84
+                                  Store 83(_mat3x4) 85
+                                  RayQueryConfirmIntersectionKHR 47(rayQuery)
+              87:    66(bool)     RayQueryGetIntersectionFrontFaceKHR 47(rayQuery) 23
+                                  SelectionMerge 89 None
+                                  BranchConditional 87 88 89
+              88:                   Label
+              90:           2       FunctionCall 6(doSomething()
+                                    Branch 89
+              89:                 Label
+              92:   91(fvec2)     RayQueryGetIntersectionBarycentricsKHR 47(rayQuery) 23
+              93:    8(float)     CompositeExtract 92 0
+              94:    66(bool)     FOrdEqual 93 27
+                                  SelectionMerge 96 None
+                                  BranchConditional 94 95 96
+              95:                   Label
+              97:           2       FunctionCall 6(doSomething()
+                                    Branch 96
+              96:                 Label
+              98:     18(int)     RayQueryGetIntersectionInstanceCustomIndexKHR 47(rayQuery) 23
+              99:    66(bool)     SGreaterThan 98 19
+                                  SelectionMerge 101 None
+                                  BranchConditional 99 100 101
+             100:                   Label
+             102:           2       FunctionCall 6(doSomething()
+                                    Branch 101
+             101:                 Label
+             103:     18(int)     RayQueryGetIntersectionInstanceIdKHR 47(rayQuery) 23
+             104:    66(bool)     SGreaterThan 103 19
+                                  SelectionMerge 106 None
+                                  BranchConditional 104 105 106
+             105:                   Label
+             107:           2       FunctionCall 6(doSomething()
+                                    Branch 106
+             106:                 Label
+             108:    9(fvec3)     RayQueryGetIntersectionObjectRayDirectionKHR 47(rayQuery) 23
+             109:    8(float)     CompositeExtract 108 0
+             110:    66(bool)     FOrdGreaterThan 109 27
+                                  SelectionMerge 112 None
+                                  BranchConditional 110 111 112
+             111:                   Label
+             113:           2       FunctionCall 6(doSomething()
+                                    Branch 112
+             112:                 Label
+             114:    9(fvec3)     RayQueryGetIntersectionObjectRayOriginKHR 47(rayQuery) 23
+             115:    8(float)     CompositeExtract 114 0
+             116:    66(bool)     FOrdGreaterThan 115 27
+                                  SelectionMerge 118 None
+                                  BranchConditional 116 117 118
+             117:                   Label
+             119:           2       FunctionCall 6(doSomething()
+                                    Branch 118
+             118:                 Label
+             120:     18(int)     RayQueryGetIntersectionPrimitiveIndexKHR 47(rayQuery) 23
+             121:    66(bool)     SGreaterThan 120 19
+                                  SelectionMerge 123 None
+                                  BranchConditional 121 122 123
+             122:                   Label
+             124:           2       FunctionCall 6(doSomething()
+                                    Branch 123
+             123:                 Label
+             125:    8(float)     RayQueryGetIntersectionTKHR 47(rayQuery) 23
+             126:    66(bool)     FOrdGreaterThan 125 27
+                                  SelectionMerge 128 None
+                                  BranchConditional 126 127 128
+             127:                   Label
+             129:           2       FunctionCall 6(doSomething()
+                                    Branch 128
+             128:                 Label
+             130:     18(int)     RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23
+             131:    66(bool)     UGreaterThan 130 20
+                                  SelectionMerge 133 None
+                                  BranchConditional 131 132 133
+             132:                   Label
+             134:           2       FunctionCall 6(doSomething()
+                                    Branch 133
+             133:                 Label
+                                  Branch 75
+              74:                 Label
+             136:          76     RayQueryGetIntersectionObjectToWorldKHR 47(rayQuery) 19
+                                  Store 78(_mat4x3) 136
+             137:          76     Load 78(_mat4x3)
+             138:          81     Transpose 137
+                                  Store 83(_mat3x4) 138
+             139:    66(bool)     RayQueryGetIntersectionCandidateAABBOpaqueKHR 47(rayQuery)
+                                  SelectionMerge 141 None
+                                  BranchConditional 139 140 141
+             140:                   Label
+             142:           2       FunctionCall 6(doSomething()
+                                    Branch 141
+             141:                 Label
+                                  Store 143(t) 144
+             145:    8(float)     Load 143(t)
+                                  RayQueryGenerateIntersectionKHR 47(rayQuery) 145
+                                  RayQueryTerminateKHR 47(rayQuery)
+                                  Branch 75
+              75:               Label
+                                Branch 64
+              64:               Label
+                                Branch 61
+              63:             Label
+             148:     35(ptr) AccessChain 83(_mat3x4) 19 20
+             149:    8(float) Load 148
+             150:     35(ptr) AccessChain 78(_mat4x3) 19 20
+             151:    8(float) Load 150
+             152:    66(bool) FOrdEqual 149 151
+                              SelectionMerge 154 None
+                              BranchConditional 152 153 154
+             153:               Label
+             155:           2   FunctionCall 6(doSomething()
+                                Branch 154
+             154:             Label
+             157:     14(int) RayQueryGetIntersectionTypeKHR 47(rayQuery) 23
+                              Store 156(committedStatus) 157
+             158:     14(int) Load 156(committedStatus)
+                              SelectionMerge 162 None
+                              Switch 158 162 
+                                     case 0: 159
+                                     case 1: 160
+                                     case 2: 161
+             159:               Label
+             163:          76   RayQueryGetIntersectionWorldToObjectKHR 47(rayQuery) 19
+                                Store 78(_mat4x3) 163
+             164:          76   Load 78(_mat4x3)
+             165:          81   Transpose 164
+                                Store 83(_mat3x4) 165
+                                Branch 162
+             160:               Label
+             167:          76   RayQueryGetIntersectionWorldToObjectKHR 47(rayQuery) 23
+                                Store 78(_mat4x3) 167
+             168:          76   Load 78(_mat4x3)
+             169:          81   Transpose 168
+                                Store 83(_mat3x4) 169
+             170:    66(bool)   RayQueryGetIntersectionFrontFaceKHR 47(rayQuery) 23
+                                SelectionMerge 172 None
+                                BranchConditional 170 171 172
+             171:                 Label
+             173:           2     FunctionCall 6(doSomething()
+                                  Branch 172
+             172:               Label
+             174:   91(fvec2)   RayQueryGetIntersectionBarycentricsKHR 47(rayQuery) 23
+             176:    8(float)   CompositeExtract 174 1
+             177:    66(bool)   FOrdEqual 176 27
+                                SelectionMerge 179 None
+                                BranchConditional 177 178 179
+             178:                 Label
+             180:           2     FunctionCall 6(doSomething()
+                                  Branch 179
+             179:               Label
+                                Branch 162
+             161:               Label
+             182:     18(int)   RayQueryGetIntersectionGeometryIndexKHR 47(rayQuery) 23
+             183:    66(bool)   SGreaterThan 182 19
+                                SelectionMerge 185 None
+                                BranchConditional 183 184 185
+             184:                 Label
+             186:           2     FunctionCall 6(doSomething()
+                                  Branch 185
+             185:               Label
+             187:     18(int)   RayQueryGetIntersectionInstanceIdKHR 47(rayQuery) 23
+             188:    66(bool)   SGreaterThan 187 19
+                                SelectionMerge 190 None
+                                BranchConditional 188 189 190
+             189:                 Label
+             191:           2     FunctionCall 6(doSomething()
+                                  Branch 190
+             190:               Label
+             192:     18(int)   RayQueryGetIntersectionInstanceCustomIndexKHR 47(rayQuery) 23
+             193:    66(bool)   SGreaterThan 192 19
+                                SelectionMerge 195 None
+                                BranchConditional 193 194 195
+             194:                 Label
+             196:           2     FunctionCall 6(doSomething()
+                                  Branch 195
+             195:               Label
+             197:    9(fvec3)   RayQueryGetIntersectionObjectRayDirectionKHR 47(rayQuery) 23
+             199:    8(float)   CompositeExtract 197 2
+             200:    66(bool)   FOrdGreaterThan 199 27
+                                SelectionMerge 202 None
+                                BranchConditional 200 201 202
+             201:                 Label
+             203:           2     FunctionCall 6(doSomething()
+                                  Branch 202
+             202:               Label
+             204:    9(fvec3)   RayQueryGetIntersectionObjectRayOriginKHR 47(rayQuery) 23
+             205:    8(float)   CompositeExtract 204 0
+             206:    66(bool)   FOrdGreaterThan 205 27
+                                SelectionMerge 208 None
+                                BranchConditional 206 207 208
+             207:                 Label
+             209:           2     FunctionCall 6(doSomething()
+                                  Branch 208
+             208:               Label
+             210:     18(int)   RayQueryGetIntersectionPrimitiveIndexKHR 47(rayQuery) 23
+             211:    66(bool)   SGreaterThan 210 19
+                                SelectionMerge 213 None
+                                BranchConditional 211 212 213
+             212:                 Label
+             214:           2     FunctionCall 6(doSomething()
+                                  Branch 213
+             213:               Label
+             215:    8(float)   RayQueryGetIntersectionTKHR 47(rayQuery) 23
+             216:    66(bool)   FOrdGreaterThan 215 27
+                                SelectionMerge 218 None
+                                BranchConditional 216 217 218
+             217:                 Label
+             219:           2     FunctionCall 6(doSomething()
+                                  Branch 218
+             218:               Label
+                                Branch 162
+             162:             Label
+             222:     35(ptr) AccessChain 83(_mat3x4) 19 20
+             223:    8(float) Load 222
+             224:     35(ptr) AccessChain 78(_mat4x3) 19 20
+             225:    8(float) Load 224
+             226:    66(bool) FOrdEqual 223 225
+                              SelectionMerge 228 None
+                              BranchConditional 226 227 228
+             227:               Label
+             229:           2   FunctionCall 6(doSomething()
+                                Branch 228
+             228:             Label
+             230:     14(int) RayQueryGetRayFlagsKHR 47(rayQuery)
+             232:    66(bool) UGreaterThan 230 231
+                              SelectionMerge 234 None
+                              BranchConditional 232 233 234
+             233:               Label
+             235:           2   FunctionCall 6(doSomething()
+                                Branch 234
+             234:             Label
+             236:    8(float) RayQueryGetRayTMinKHR 47(rayQuery)
+             237:    66(bool) FOrdGreaterThan 236 27
+                              SelectionMerge 239 None
+                              BranchConditional 237 238 239
+             238:               Label
+             240:           2   FunctionCall 6(doSomething()
+                                Branch 239
+             239:             Label
+             242:    9(fvec3) RayQueryGetWorldRayOriginKHR 47(rayQuery)
+                              Store 241(o) 242
+             244:    9(fvec3) RayQueryGetWorldRayDirectionKHR 47(rayQuery)
+                              Store 243(d) 244
+             245:     35(ptr) AccessChain 241(o) 20
+             246:    8(float) Load 245
+             247:     35(ptr) AccessChain 243(d) 198
+             248:    8(float) Load 247
+             249:    66(bool) FOrdEqual 246 248
+                              SelectionMerge 251 None
+                              BranchConditional 249 250 251
+             250:               Label
+             252:           2   FunctionCall 6(doSomething()
+                                Branch 251
+             251:             Label
+                              Return
+                              FunctionEnd
+ 6(doSomething():           2 Function None 3
+               7:             Label
+              22:     21(ptr) AccessChain 17 19
+                              Store 22 20
+              24:     21(ptr) AccessChain 17 23
+                              Store 24 20
+                              Return
+                              FunctionEnd
+12(makeRayDesc():     10(Ray) Function None 11
+              13:             Label
+         26(ray):     25(ptr) Variable Function
+              30:     29(ptr) AccessChain 26(ray) 19
+                              Store 30 28
+              34:     29(ptr) AccessChain 26(ray) 31
+                              Store 34 33
+              36:     35(ptr) AccessChain 26(ray) 23
+                              Store 36 27
+              39:     35(ptr) AccessChain 26(ray) 37
+                              Store 39 38
+              40:     10(Ray) Load 26(ray)
+                              ReturnValue 40
+                              FunctionEnd
diff --git a/Test/baseResults/rayQuery-allOps.frag.out b/Test/baseResults/rayQuery-allOps.frag.out
new file mode 100644
index 0000000..3160c2b
--- /dev/null
+++ b/Test/baseResults/rayQuery-allOps.frag.out
@@ -0,0 +1,431 @@
+rayQuery-allOps.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 257
+
+                              Capability Shader
+                              Capability RayQueryProvisionalKHR
+                              Extension  "SPV_KHR_ray_query"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_query"
+                              SourceExtension  "GL_NV_ray_tracing"
+                              Name 4  "main"
+                              Name 6  "doSomething("
+                              Name 10  "Ray"
+                              MemberName 10(Ray) 0  "pos"
+                              MemberName 10(Ray) 1  "tmin"
+                              MemberName 10(Ray) 2  "dir"
+                              MemberName 10(Ray) 3  "tmax"
+                              Name 12  "makeRayDesc("
+                              Name 15  "Log"
+                              MemberName 15(Log) 0  "x"
+                              MemberName 15(Log) 1  "y"
+                              Name 17  ""
+                              Name 26  "ray"
+                              Name 43  "ray"
+                              Name 47  "rayQuery"
+                              Name 50  "rtas"
+                              Name 69  "candidateType"
+                              Name 78  "_mat4x3"
+                              Name 83  "_mat3x4"
+                              Name 143  "t"
+                              Name 156  "committedStatus"
+                              Name 240  "o"
+                              Name 242  "d"
+                              Name 252  "Ray"
+                              MemberName 252(Ray) 0  "pos"
+                              MemberName 252(Ray) 1  "tmin"
+                              MemberName 252(Ray) 2  "dir"
+                              MemberName 252(Ray) 3  "tmax"
+                              Name 254  "Rays"
+                              MemberName 254(Rays) 0  "rays"
+                              Name 256  ""
+                              MemberDecorate 15(Log) 0 Offset 0
+                              MemberDecorate 15(Log) 1 Offset 4
+                              Decorate 15(Log) BufferBlock
+                              Decorate 17 DescriptorSet 0
+                              Decorate 17 Binding 0
+                              Decorate 50(rtas) DescriptorSet 0
+                              Decorate 50(rtas) Binding 1
+                              MemberDecorate 252(Ray) 0 Offset 0
+                              MemberDecorate 252(Ray) 1 Offset 12
+                              MemberDecorate 252(Ray) 2 Offset 16
+                              MemberDecorate 252(Ray) 3 Offset 28
+                              Decorate 253 ArrayStride 32
+                              MemberDecorate 254(Rays) 0 Offset 0
+                              Decorate 254(Rays) BufferBlock
+                              Decorate 256 DescriptorSet 0
+                              Decorate 256 Binding 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 3
+         10(Ray):             TypeStruct 9(fvec3) 8(float) 9(fvec3) 8(float)
+              11:             TypeFunction 10(Ray)
+              14:             TypeInt 32 0
+         15(Log):             TypeStruct 14(int) 14(int)
+              16:             TypePointer Uniform 15(Log)
+              17:     16(ptr) Variable Uniform
+              18:             TypeInt 32 1
+              19:     18(int) Constant 0
+              20:     14(int) Constant 0
+              21:             TypePointer Uniform 14(int)
+              23:     18(int) Constant 1
+              25:             TypePointer Function 10(Ray)
+              27:    8(float) Constant 0
+              28:    9(fvec3) ConstantComposite 27 27 27
+              29:             TypePointer Function 9(fvec3)
+              31:     18(int) Constant 2
+              32:    8(float) Constant 1065353216
+              33:    9(fvec3) ConstantComposite 32 27 27
+              35:             TypePointer Function 8(float)
+              37:     18(int) Constant 3
+              38:    8(float) Constant 1176255488
+              45:             TypeRayQueryProvisionalKHR
+              46:             TypePointer Function 45
+              48:             TypeAccelerationStructureKHR
+              49:             TypePointer UniformConstant 48
+        50(rtas):     49(ptr) Variable UniformConstant
+              52:     14(int) Constant 255
+              66:             TypeBool
+              68:             TypePointer Function 14(int)
+              70:    66(bool) ConstantFalse
+              76:             TypeMatrix 9(fvec3) 4
+              77:             TypePointer Function 76
+              80:             TypeVector 8(float) 4
+              81:             TypeMatrix 80(fvec4) 3
+              82:             TypePointer Function 81
+              86:    66(bool) ConstantTrue
+              91:             TypeVector 8(float) 2
+             144:    8(float) Constant 1056964608
+             175:     14(int) Constant 1
+             198:     14(int) Constant 2
+        252(Ray):             TypeStruct 9(fvec3) 8(float) 9(fvec3) 8(float)
+             253:             TypeRuntimeArray 252(Ray)
+       254(Rays):             TypeStruct 253
+             255:             TypePointer Uniform 254(Rays)
+             256:    255(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+         43(ray):     25(ptr) Variable Function
+    47(rayQuery):     46(ptr) Variable Function
+69(candidateType):     68(ptr) Variable Function
+     78(_mat4x3):     77(ptr) Variable Function
+     83(_mat3x4):     82(ptr) Variable Function
+          143(t):     35(ptr) Variable Function
+156(committedStatus):     68(ptr) Variable Function
+          240(o):     29(ptr) Variable Function
+          242(d):     29(ptr) Variable Function
+              44:     10(Ray) FunctionCall 12(makeRayDesc()
+                              Store 43(ray) 44
+              51:          48 Load 50(rtas)
+              53:     29(ptr) AccessChain 43(ray) 19
+              54:    9(fvec3) Load 53
+              55:     35(ptr) AccessChain 43(ray) 23
+              56:    8(float) Load 55
+              57:     29(ptr) AccessChain 43(ray) 31
+              58:    9(fvec3) Load 57
+              59:     35(ptr) AccessChain 43(ray) 37
+              60:    8(float) Load 59
+                              RayQueryInitializeKHR 47(rayQuery) 51 20 52 54 56 58 60
+                              Branch 61
+              61:             Label
+                              LoopMerge 63 64 None
+                              Branch 65
+              65:             Label
+              67:    66(bool) RayQueryProceedKHR 47(rayQuery)
+                              BranchConditional 67 62 63
+              62:               Label
+              71:     14(int)   RayQueryGetIntersectionTypeKHR 47(rayQuery) 19
+                                Store 69(candidateType) 71
+              72:     14(int)   Load 69(candidateType)
+                                SelectionMerge 75 None
+                                Switch 72 75 
+                                       case 0: 73
+                                       case 1: 74
+              73:                 Label
+                                  RayQueryTerminateKHR 47(rayQuery)
+              79:          76     RayQueryGetIntersectionObjectToWorldKHR 47(rayQuery) 19
+                                  Store 78(_mat4x3) 79
+              84:          76     Load 78(_mat4x3)
+              85:          81     Transpose 84
+                                  Store 83(_mat3x4) 85
+                                  RayQueryConfirmIntersectionKHR 47(rayQuery)
+              87:    66(bool)     RayQueryGetIntersectionFrontFaceKHR 47(rayQuery) 23
+                                  SelectionMerge 89 None
+                                  BranchConditional 87 88 89
+              88:                   Label
+              90:           2       FunctionCall 6(doSomething()
+                                    Branch 89
+              89:                 Label
+              92:   91(fvec2)     RayQueryGetIntersectionBarycentricsKHR 47(rayQuery) 23
+              93:    8(float)     CompositeExtract 92 0
+              94:    66(bool)     FOrdEqual 93 27
+                                  SelectionMerge 96 None
+                                  BranchConditional 94 95 96
+              95:                   Label
+              97:           2       FunctionCall 6(doSomething()
+                                    Branch 96
+              96:                 Label
+              98:     18(int)     RayQueryGetIntersectionInstanceCustomIndexKHR 47(rayQuery) 23
+              99:    66(bool)     SGreaterThan 98 19
+                                  SelectionMerge 101 None
+                                  BranchConditional 99 100 101
+             100:                   Label
+             102:           2       FunctionCall 6(doSomething()
+                                    Branch 101
+             101:                 Label
+             103:     18(int)     RayQueryGetIntersectionInstanceIdKHR 47(rayQuery) 23
+             104:    66(bool)     SGreaterThan 103 19
+                                  SelectionMerge 106 None
+                                  BranchConditional 104 105 106
+             105:                   Label
+             107:           2       FunctionCall 6(doSomething()
+                                    Branch 106
+             106:                 Label
+             108:    9(fvec3)     RayQueryGetIntersectionObjectRayDirectionKHR 47(rayQuery) 23
+             109:    8(float)     CompositeExtract 108 0
+             110:    66(bool)     FOrdGreaterThan 109 27
+                                  SelectionMerge 112 None
+                                  BranchConditional 110 111 112
+             111:                   Label
+             113:           2       FunctionCall 6(doSomething()
+                                    Branch 112
+             112:                 Label
+             114:    9(fvec3)     RayQueryGetIntersectionObjectRayOriginKHR 47(rayQuery) 23
+             115:    8(float)     CompositeExtract 114 0
+             116:    66(bool)     FOrdGreaterThan 115 27
+                                  SelectionMerge 118 None
+                                  BranchConditional 116 117 118
+             117:                   Label
+             119:           2       FunctionCall 6(doSomething()
+                                    Branch 118
+             118:                 Label
+             120:     18(int)     RayQueryGetIntersectionPrimitiveIndexKHR 47(rayQuery) 23
+             121:    66(bool)     SGreaterThan 120 19
+                                  SelectionMerge 123 None
+                                  BranchConditional 121 122 123
+             122:                   Label
+             124:           2       FunctionCall 6(doSomething()
+                                    Branch 123
+             123:                 Label
+             125:    8(float)     RayQueryGetIntersectionTKHR 47(rayQuery) 23
+             126:    66(bool)     FOrdGreaterThan 125 27
+                                  SelectionMerge 128 None
+                                  BranchConditional 126 127 128
+             127:                   Label
+             129:           2       FunctionCall 6(doSomething()
+                                    Branch 128
+             128:                 Label
+             130:     18(int)     RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23
+             131:    66(bool)     UGreaterThan 130 20
+                                  SelectionMerge 133 None
+                                  BranchConditional 131 132 133
+             132:                   Label
+             134:           2       FunctionCall 6(doSomething()
+                                    Branch 133
+             133:                 Label
+                                  Branch 75
+              74:                 Label
+             136:          76     RayQueryGetIntersectionObjectToWorldKHR 47(rayQuery) 19
+                                  Store 78(_mat4x3) 136
+             137:          76     Load 78(_mat4x3)
+             138:          81     Transpose 137
+                                  Store 83(_mat3x4) 138
+             139:    66(bool)     RayQueryGetIntersectionCandidateAABBOpaqueKHR 47(rayQuery)
+                                  SelectionMerge 141 None
+                                  BranchConditional 139 140 141
+             140:                   Label
+             142:           2       FunctionCall 6(doSomething()
+                                    Branch 141
+             141:                 Label
+                                  Store 143(t) 144
+             145:    8(float)     Load 143(t)
+                                  RayQueryGenerateIntersectionKHR 47(rayQuery) 145
+                                  RayQueryTerminateKHR 47(rayQuery)
+                                  Branch 75
+              75:               Label
+                                Branch 64
+              64:               Label
+                                Branch 61
+              63:             Label
+             148:     35(ptr) AccessChain 83(_mat3x4) 19 20
+             149:    8(float) Load 148
+             150:     35(ptr) AccessChain 78(_mat4x3) 19 20
+             151:    8(float) Load 150
+             152:    66(bool) FOrdEqual 149 151
+                              SelectionMerge 154 None
+                              BranchConditional 152 153 154
+             153:               Label
+             155:           2   FunctionCall 6(doSomething()
+                                Branch 154
+             154:             Label
+             157:     14(int) RayQueryGetIntersectionTypeKHR 47(rayQuery) 23
+                              Store 156(committedStatus) 157
+             158:     14(int) Load 156(committedStatus)
+                              SelectionMerge 162 None
+                              Switch 158 162 
+                                     case 0: 159
+                                     case 1: 160
+                                     case 2: 161
+             159:               Label
+             163:          76   RayQueryGetIntersectionWorldToObjectKHR 47(rayQuery) 19
+                                Store 78(_mat4x3) 163
+             164:          76   Load 78(_mat4x3)
+             165:          81   Transpose 164
+                                Store 83(_mat3x4) 165
+                                Branch 162
+             160:               Label
+             167:          76   RayQueryGetIntersectionWorldToObjectKHR 47(rayQuery) 23
+                                Store 78(_mat4x3) 167
+             168:          76   Load 78(_mat4x3)
+             169:          81   Transpose 168
+                                Store 83(_mat3x4) 169
+             170:    66(bool)   RayQueryGetIntersectionFrontFaceKHR 47(rayQuery) 23
+                                SelectionMerge 172 None
+                                BranchConditional 170 171 172
+             171:                 Label
+             173:           2     FunctionCall 6(doSomething()
+                                  Branch 172
+             172:               Label
+             174:   91(fvec2)   RayQueryGetIntersectionBarycentricsKHR 47(rayQuery) 23
+             176:    8(float)   CompositeExtract 174 1
+             177:    66(bool)   FOrdEqual 176 27
+                                SelectionMerge 179 None
+                                BranchConditional 177 178 179
+             178:                 Label
+             180:           2     FunctionCall 6(doSomething()
+                                  Branch 179
+             179:               Label
+                                Branch 162
+             161:               Label
+             182:     18(int)   RayQueryGetIntersectionGeometryIndexKHR 47(rayQuery) 23
+             183:    66(bool)   SGreaterThan 182 19
+                                SelectionMerge 185 None
+                                BranchConditional 183 184 185
+             184:                 Label
+             186:           2     FunctionCall 6(doSomething()
+                                  Branch 185
+             185:               Label
+             187:     18(int)   RayQueryGetIntersectionInstanceIdKHR 47(rayQuery) 23
+             188:    66(bool)   SGreaterThan 187 19
+                                SelectionMerge 190 None
+                                BranchConditional 188 189 190
+             189:                 Label
+             191:           2     FunctionCall 6(doSomething()
+                                  Branch 190
+             190:               Label
+             192:     18(int)   RayQueryGetIntersectionInstanceCustomIndexKHR 47(rayQuery) 23
+             193:    66(bool)   SGreaterThan 192 19
+                                SelectionMerge 195 None
+                                BranchConditional 193 194 195
+             194:                 Label
+             196:           2     FunctionCall 6(doSomething()
+                                  Branch 195
+             195:               Label
+             197:    9(fvec3)   RayQueryGetIntersectionObjectRayDirectionKHR 47(rayQuery) 23
+             199:    8(float)   CompositeExtract 197 2
+             200:    66(bool)   FOrdGreaterThan 199 27
+                                SelectionMerge 202 None
+                                BranchConditional 200 201 202
+             201:                 Label
+             203:           2     FunctionCall 6(doSomething()
+                                  Branch 202
+             202:               Label
+             204:    9(fvec3)   RayQueryGetIntersectionObjectRayOriginKHR 47(rayQuery) 23
+             205:    8(float)   CompositeExtract 204 0
+             206:    66(bool)   FOrdGreaterThan 205 27
+                                SelectionMerge 208 None
+                                BranchConditional 206 207 208
+             207:                 Label
+             209:           2     FunctionCall 6(doSomething()
+                                  Branch 208
+             208:               Label
+             210:     18(int)   RayQueryGetIntersectionPrimitiveIndexKHR 47(rayQuery) 23
+             211:    66(bool)   SGreaterThan 210 19
+                                SelectionMerge 213 None
+                                BranchConditional 211 212 213
+             212:                 Label
+             214:           2     FunctionCall 6(doSomething()
+                                  Branch 213
+             213:               Label
+             215:    8(float)   RayQueryGetIntersectionTKHR 47(rayQuery) 23
+             216:    66(bool)   FOrdGreaterThan 215 27
+                                SelectionMerge 218 None
+                                BranchConditional 216 217 218
+             217:                 Label
+             219:           2     FunctionCall 6(doSomething()
+                                  Branch 218
+             218:               Label
+                                Branch 162
+             162:             Label
+             222:     35(ptr) AccessChain 83(_mat3x4) 19 20
+             223:    8(float) Load 222
+             224:     35(ptr) AccessChain 78(_mat4x3) 19 20
+             225:    8(float) Load 224
+             226:    66(bool) FOrdEqual 223 225
+                              SelectionMerge 228 None
+                              BranchConditional 226 227 228
+             227:               Label
+             229:           2   FunctionCall 6(doSomething()
+                                Branch 228
+             228:             Label
+             230:     14(int) RayQueryGetRayFlagsKHR 47(rayQuery)
+             231:    66(bool) UGreaterThan 230 20
+                              SelectionMerge 233 None
+                              BranchConditional 231 232 233
+             232:               Label
+             234:           2   FunctionCall 6(doSomething()
+                                Branch 233
+             233:             Label
+             235:    8(float) RayQueryGetRayTMinKHR 47(rayQuery)
+             236:    66(bool) FOrdGreaterThan 235 27
+                              SelectionMerge 238 None
+                              BranchConditional 236 237 238
+             237:               Label
+             239:           2   FunctionCall 6(doSomething()
+                                Branch 238
+             238:             Label
+             241:    9(fvec3) RayQueryGetWorldRayOriginKHR 47(rayQuery)
+                              Store 240(o) 241
+             243:    9(fvec3) RayQueryGetWorldRayDirectionKHR 47(rayQuery)
+                              Store 242(d) 243
+             244:     35(ptr) AccessChain 240(o) 20
+             245:    8(float) Load 244
+             246:     35(ptr) AccessChain 242(d) 198
+             247:    8(float) Load 246
+             248:    66(bool) FOrdEqual 245 247
+                              SelectionMerge 250 None
+                              BranchConditional 248 249 250
+             249:               Label
+             251:           2   FunctionCall 6(doSomething()
+                                Branch 250
+             250:             Label
+                              Return
+                              FunctionEnd
+ 6(doSomething():           2 Function None 3
+               7:             Label
+              22:     21(ptr) AccessChain 17 19
+                              Store 22 20
+              24:     21(ptr) AccessChain 17 23
+                              Store 24 20
+                              Return
+                              FunctionEnd
+12(makeRayDesc():     10(Ray) Function None 11
+              13:             Label
+         26(ray):     25(ptr) Variable Function
+              30:     29(ptr) AccessChain 26(ray) 19
+                              Store 30 28
+              34:     29(ptr) AccessChain 26(ray) 31
+                              Store 34 33
+              36:     35(ptr) AccessChain 26(ray) 23
+                              Store 36 27
+              39:     35(ptr) AccessChain 26(ray) 37
+                              Store 39 38
+              40:     10(Ray) Load 26(ray)
+                              ReturnValue 40
+                              FunctionEnd
diff --git a/Test/baseResults/rayQuery-allOps.rgen.out b/Test/baseResults/rayQuery-allOps.rgen.out
new file mode 100644
index 0000000..a61769e
--- /dev/null
+++ b/Test/baseResults/rayQuery-allOps.rgen.out
@@ -0,0 +1,431 @@
+rayQuery-allOps.rgen
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 257
+
+                              Capability RayQueryProvisionalKHR
+                              Capability RayTracingNV
+                              Extension  "SPV_KHR_ray_query"
+                              Extension  "SPV_NV_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main"
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_query"
+                              SourceExtension  "GL_NV_ray_tracing"
+                              Name 4  "main"
+                              Name 6  "doSomething("
+                              Name 10  "Ray"
+                              MemberName 10(Ray) 0  "pos"
+                              MemberName 10(Ray) 1  "tmin"
+                              MemberName 10(Ray) 2  "dir"
+                              MemberName 10(Ray) 3  "tmax"
+                              Name 12  "makeRayDesc("
+                              Name 15  "Log"
+                              MemberName 15(Log) 0  "x"
+                              MemberName 15(Log) 1  "y"
+                              Name 17  ""
+                              Name 26  "ray"
+                              Name 43  "ray"
+                              Name 47  "rayQuery"
+                              Name 50  "rtas"
+                              Name 69  "candidateType"
+                              Name 78  "_mat4x3"
+                              Name 83  "_mat3x4"
+                              Name 143  "t"
+                              Name 156  "committedStatus"
+                              Name 240  "o"
+                              Name 242  "d"
+                              Name 252  "Ray"
+                              MemberName 252(Ray) 0  "pos"
+                              MemberName 252(Ray) 1  "tmin"
+                              MemberName 252(Ray) 2  "dir"
+                              MemberName 252(Ray) 3  "tmax"
+                              Name 254  "Rays"
+                              MemberName 254(Rays) 0  "rays"
+                              Name 256  ""
+                              MemberDecorate 15(Log) 0 Offset 0
+                              MemberDecorate 15(Log) 1 Offset 4
+                              Decorate 15(Log) BufferBlock
+                              Decorate 17 DescriptorSet 0
+                              Decorate 17 Binding 0
+                              Decorate 50(rtas) DescriptorSet 0
+                              Decorate 50(rtas) Binding 1
+                              MemberDecorate 252(Ray) 0 Offset 0
+                              MemberDecorate 252(Ray) 1 Offset 12
+                              MemberDecorate 252(Ray) 2 Offset 16
+                              MemberDecorate 252(Ray) 3 Offset 28
+                              Decorate 253 ArrayStride 32
+                              MemberDecorate 254(Rays) 0 Offset 0
+                              Decorate 254(Rays) BufferBlock
+                              Decorate 256 DescriptorSet 0
+                              Decorate 256 Binding 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 3
+         10(Ray):             TypeStruct 9(fvec3) 8(float) 9(fvec3) 8(float)
+              11:             TypeFunction 10(Ray)
+              14:             TypeInt 32 0
+         15(Log):             TypeStruct 14(int) 14(int)
+              16:             TypePointer Uniform 15(Log)
+              17:     16(ptr) Variable Uniform
+              18:             TypeInt 32 1
+              19:     18(int) Constant 0
+              20:     14(int) Constant 0
+              21:             TypePointer Uniform 14(int)
+              23:     18(int) Constant 1
+              25:             TypePointer Function 10(Ray)
+              27:    8(float) Constant 0
+              28:    9(fvec3) ConstantComposite 27 27 27
+              29:             TypePointer Function 9(fvec3)
+              31:     18(int) Constant 2
+              32:    8(float) Constant 1065353216
+              33:    9(fvec3) ConstantComposite 32 27 27
+              35:             TypePointer Function 8(float)
+              37:     18(int) Constant 3
+              38:    8(float) Constant 1176255488
+              45:             TypeRayQueryProvisionalKHR
+              46:             TypePointer Function 45
+              48:             TypeAccelerationStructureKHR
+              49:             TypePointer UniformConstant 48
+        50(rtas):     49(ptr) Variable UniformConstant
+              52:     14(int) Constant 255
+              66:             TypeBool
+              68:             TypePointer Function 14(int)
+              70:    66(bool) ConstantFalse
+              76:             TypeMatrix 9(fvec3) 4
+              77:             TypePointer Function 76
+              80:             TypeVector 8(float) 4
+              81:             TypeMatrix 80(fvec4) 3
+              82:             TypePointer Function 81
+              86:    66(bool) ConstantTrue
+              91:             TypeVector 8(float) 2
+             144:    8(float) Constant 1056964608
+             175:     14(int) Constant 1
+             198:     14(int) Constant 2
+        252(Ray):             TypeStruct 9(fvec3) 8(float) 9(fvec3) 8(float)
+             253:             TypeRuntimeArray 252(Ray)
+       254(Rays):             TypeStruct 253
+             255:             TypePointer Uniform 254(Rays)
+             256:    255(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+         43(ray):     25(ptr) Variable Function
+    47(rayQuery):     46(ptr) Variable Function
+69(candidateType):     68(ptr) Variable Function
+     78(_mat4x3):     77(ptr) Variable Function
+     83(_mat3x4):     82(ptr) Variable Function
+          143(t):     35(ptr) Variable Function
+156(committedStatus):     68(ptr) Variable Function
+          240(o):     29(ptr) Variable Function
+          242(d):     29(ptr) Variable Function
+              44:     10(Ray) FunctionCall 12(makeRayDesc()
+                              Store 43(ray) 44
+              51:          48 Load 50(rtas)
+              53:     29(ptr) AccessChain 43(ray) 19
+              54:    9(fvec3) Load 53
+              55:     35(ptr) AccessChain 43(ray) 23
+              56:    8(float) Load 55
+              57:     29(ptr) AccessChain 43(ray) 31
+              58:    9(fvec3) Load 57
+              59:     35(ptr) AccessChain 43(ray) 37
+              60:    8(float) Load 59
+                              RayQueryInitializeKHR 47(rayQuery) 51 20 52 54 56 58 60
+                              Branch 61
+              61:             Label
+                              LoopMerge 63 64 None
+                              Branch 65
+              65:             Label
+              67:    66(bool) RayQueryProceedKHR 47(rayQuery)
+                              BranchConditional 67 62 63
+              62:               Label
+              71:     14(int)   RayQueryGetIntersectionTypeKHR 47(rayQuery) 19
+                                Store 69(candidateType) 71
+              72:     14(int)   Load 69(candidateType)
+                                SelectionMerge 75 None
+                                Switch 72 75 
+                                       case 0: 73
+                                       case 1: 74
+              73:                 Label
+                                  RayQueryTerminateKHR 47(rayQuery)
+              79:          76     RayQueryGetIntersectionObjectToWorldKHR 47(rayQuery) 19
+                                  Store 78(_mat4x3) 79
+              84:          76     Load 78(_mat4x3)
+              85:          81     Transpose 84
+                                  Store 83(_mat3x4) 85
+                                  RayQueryConfirmIntersectionKHR 47(rayQuery)
+              87:    66(bool)     RayQueryGetIntersectionFrontFaceKHR 47(rayQuery) 23
+                                  SelectionMerge 89 None
+                                  BranchConditional 87 88 89
+              88:                   Label
+              90:           2       FunctionCall 6(doSomething()
+                                    Branch 89
+              89:                 Label
+              92:   91(fvec2)     RayQueryGetIntersectionBarycentricsKHR 47(rayQuery) 23
+              93:    8(float)     CompositeExtract 92 0
+              94:    66(bool)     FOrdEqual 93 27
+                                  SelectionMerge 96 None
+                                  BranchConditional 94 95 96
+              95:                   Label
+              97:           2       FunctionCall 6(doSomething()
+                                    Branch 96
+              96:                 Label
+              98:     18(int)     RayQueryGetIntersectionInstanceCustomIndexKHR 47(rayQuery) 23
+              99:    66(bool)     SGreaterThan 98 19
+                                  SelectionMerge 101 None
+                                  BranchConditional 99 100 101
+             100:                   Label
+             102:           2       FunctionCall 6(doSomething()
+                                    Branch 101
+             101:                 Label
+             103:     18(int)     RayQueryGetIntersectionInstanceIdKHR 47(rayQuery) 23
+             104:    66(bool)     SGreaterThan 103 19
+                                  SelectionMerge 106 None
+                                  BranchConditional 104 105 106
+             105:                   Label
+             107:           2       FunctionCall 6(doSomething()
+                                    Branch 106
+             106:                 Label
+             108:    9(fvec3)     RayQueryGetIntersectionObjectRayDirectionKHR 47(rayQuery) 23
+             109:    8(float)     CompositeExtract 108 0
+             110:    66(bool)     FOrdGreaterThan 109 27
+                                  SelectionMerge 112 None
+                                  BranchConditional 110 111 112
+             111:                   Label
+             113:           2       FunctionCall 6(doSomething()
+                                    Branch 112
+             112:                 Label
+             114:    9(fvec3)     RayQueryGetIntersectionObjectRayOriginKHR 47(rayQuery) 23
+             115:    8(float)     CompositeExtract 114 0
+             116:    66(bool)     FOrdGreaterThan 115 27
+                                  SelectionMerge 118 None
+                                  BranchConditional 116 117 118
+             117:                   Label
+             119:           2       FunctionCall 6(doSomething()
+                                    Branch 118
+             118:                 Label
+             120:     18(int)     RayQueryGetIntersectionPrimitiveIndexKHR 47(rayQuery) 23
+             121:    66(bool)     SGreaterThan 120 19
+                                  SelectionMerge 123 None
+                                  BranchConditional 121 122 123
+             122:                   Label
+             124:           2       FunctionCall 6(doSomething()
+                                    Branch 123
+             123:                 Label
+             125:    8(float)     RayQueryGetIntersectionTKHR 47(rayQuery) 23
+             126:    66(bool)     FOrdGreaterThan 125 27
+                                  SelectionMerge 128 None
+                                  BranchConditional 126 127 128
+             127:                   Label
+             129:           2       FunctionCall 6(doSomething()
+                                    Branch 128
+             128:                 Label
+             130:     18(int)     RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23
+             131:    66(bool)     UGreaterThan 130 20
+                                  SelectionMerge 133 None
+                                  BranchConditional 131 132 133
+             132:                   Label
+             134:           2       FunctionCall 6(doSomething()
+                                    Branch 133
+             133:                 Label
+                                  Branch 75
+              74:                 Label
+             136:          76     RayQueryGetIntersectionObjectToWorldKHR 47(rayQuery) 19
+                                  Store 78(_mat4x3) 136
+             137:          76     Load 78(_mat4x3)
+             138:          81     Transpose 137
+                                  Store 83(_mat3x4) 138
+             139:    66(bool)     RayQueryGetIntersectionCandidateAABBOpaqueKHR 47(rayQuery)
+                                  SelectionMerge 141 None
+                                  BranchConditional 139 140 141
+             140:                   Label
+             142:           2       FunctionCall 6(doSomething()
+                                    Branch 141
+             141:                 Label
+                                  Store 143(t) 144
+             145:    8(float)     Load 143(t)
+                                  RayQueryGenerateIntersectionKHR 47(rayQuery) 145
+                                  RayQueryTerminateKHR 47(rayQuery)
+                                  Branch 75
+              75:               Label
+                                Branch 64
+              64:               Label
+                                Branch 61
+              63:             Label
+             148:     35(ptr) AccessChain 83(_mat3x4) 19 20
+             149:    8(float) Load 148
+             150:     35(ptr) AccessChain 78(_mat4x3) 19 20
+             151:    8(float) Load 150
+             152:    66(bool) FOrdEqual 149 151
+                              SelectionMerge 154 None
+                              BranchConditional 152 153 154
+             153:               Label
+             155:           2   FunctionCall 6(doSomething()
+                                Branch 154
+             154:             Label
+             157:     14(int) RayQueryGetIntersectionTypeKHR 47(rayQuery) 23
+                              Store 156(committedStatus) 157
+             158:     14(int) Load 156(committedStatus)
+                              SelectionMerge 162 None
+                              Switch 158 162 
+                                     case 0: 159
+                                     case 1: 160
+                                     case 2: 161
+             159:               Label
+             163:          76   RayQueryGetIntersectionWorldToObjectKHR 47(rayQuery) 19
+                                Store 78(_mat4x3) 163
+             164:          76   Load 78(_mat4x3)
+             165:          81   Transpose 164
+                                Store 83(_mat3x4) 165
+                                Branch 162
+             160:               Label
+             167:          76   RayQueryGetIntersectionWorldToObjectKHR 47(rayQuery) 23
+                                Store 78(_mat4x3) 167
+             168:          76   Load 78(_mat4x3)
+             169:          81   Transpose 168
+                                Store 83(_mat3x4) 169
+             170:    66(bool)   RayQueryGetIntersectionFrontFaceKHR 47(rayQuery) 23
+                                SelectionMerge 172 None
+                                BranchConditional 170 171 172
+             171:                 Label
+             173:           2     FunctionCall 6(doSomething()
+                                  Branch 172
+             172:               Label
+             174:   91(fvec2)   RayQueryGetIntersectionBarycentricsKHR 47(rayQuery) 23
+             176:    8(float)   CompositeExtract 174 1
+             177:    66(bool)   FOrdEqual 176 27
+                                SelectionMerge 179 None
+                                BranchConditional 177 178 179
+             178:                 Label
+             180:           2     FunctionCall 6(doSomething()
+                                  Branch 179
+             179:               Label
+                                Branch 162
+             161:               Label
+             182:     18(int)   RayQueryGetIntersectionGeometryIndexKHR 47(rayQuery) 23
+             183:    66(bool)   SGreaterThan 182 19
+                                SelectionMerge 185 None
+                                BranchConditional 183 184 185
+             184:                 Label
+             186:           2     FunctionCall 6(doSomething()
+                                  Branch 185
+             185:               Label
+             187:     18(int)   RayQueryGetIntersectionInstanceIdKHR 47(rayQuery) 23
+             188:    66(bool)   SGreaterThan 187 19
+                                SelectionMerge 190 None
+                                BranchConditional 188 189 190
+             189:                 Label
+             191:           2     FunctionCall 6(doSomething()
+                                  Branch 190
+             190:               Label
+             192:     18(int)   RayQueryGetIntersectionInstanceCustomIndexKHR 47(rayQuery) 23
+             193:    66(bool)   SGreaterThan 192 19
+                                SelectionMerge 195 None
+                                BranchConditional 193 194 195
+             194:                 Label
+             196:           2     FunctionCall 6(doSomething()
+                                  Branch 195
+             195:               Label
+             197:    9(fvec3)   RayQueryGetIntersectionObjectRayDirectionKHR 47(rayQuery) 23
+             199:    8(float)   CompositeExtract 197 2
+             200:    66(bool)   FOrdGreaterThan 199 27
+                                SelectionMerge 202 None
+                                BranchConditional 200 201 202
+             201:                 Label
+             203:           2     FunctionCall 6(doSomething()
+                                  Branch 202
+             202:               Label
+             204:    9(fvec3)   RayQueryGetIntersectionObjectRayOriginKHR 47(rayQuery) 23
+             205:    8(float)   CompositeExtract 204 0
+             206:    66(bool)   FOrdGreaterThan 205 27
+                                SelectionMerge 208 None
+                                BranchConditional 206 207 208
+             207:                 Label
+             209:           2     FunctionCall 6(doSomething()
+                                  Branch 208
+             208:               Label
+             210:     18(int)   RayQueryGetIntersectionPrimitiveIndexKHR 47(rayQuery) 23
+             211:    66(bool)   SGreaterThan 210 19
+                                SelectionMerge 213 None
+                                BranchConditional 211 212 213
+             212:                 Label
+             214:           2     FunctionCall 6(doSomething()
+                                  Branch 213
+             213:               Label
+             215:    8(float)   RayQueryGetIntersectionTKHR 47(rayQuery) 23
+             216:    66(bool)   FOrdGreaterThan 215 27
+                                SelectionMerge 218 None
+                                BranchConditional 216 217 218
+             217:                 Label
+             219:           2     FunctionCall 6(doSomething()
+                                  Branch 218
+             218:               Label
+                                Branch 162
+             162:             Label
+             222:     35(ptr) AccessChain 83(_mat3x4) 19 20
+             223:    8(float) Load 222
+             224:     35(ptr) AccessChain 78(_mat4x3) 19 20
+             225:    8(float) Load 224
+             226:    66(bool) FOrdEqual 223 225
+                              SelectionMerge 228 None
+                              BranchConditional 226 227 228
+             227:               Label
+             229:           2   FunctionCall 6(doSomething()
+                                Branch 228
+             228:             Label
+             230:     14(int) RayQueryGetRayFlagsKHR 47(rayQuery)
+             231:    66(bool) UGreaterThan 230 20
+                              SelectionMerge 233 None
+                              BranchConditional 231 232 233
+             232:               Label
+             234:           2   FunctionCall 6(doSomething()
+                                Branch 233
+             233:             Label
+             235:    8(float) RayQueryGetRayTMinKHR 47(rayQuery)
+             236:    66(bool) FOrdGreaterThan 235 27
+                              SelectionMerge 238 None
+                              BranchConditional 236 237 238
+             237:               Label
+             239:           2   FunctionCall 6(doSomething()
+                                Branch 238
+             238:             Label
+             241:    9(fvec3) RayQueryGetWorldRayOriginKHR 47(rayQuery)
+                              Store 240(o) 241
+             243:    9(fvec3) RayQueryGetWorldRayDirectionKHR 47(rayQuery)
+                              Store 242(d) 243
+             244:     35(ptr) AccessChain 240(o) 20
+             245:    8(float) Load 244
+             246:     35(ptr) AccessChain 242(d) 198
+             247:    8(float) Load 246
+             248:    66(bool) FOrdEqual 245 247
+                              SelectionMerge 250 None
+                              BranchConditional 248 249 250
+             249:               Label
+             251:           2   FunctionCall 6(doSomething()
+                                Branch 250
+             250:             Label
+                              Return
+                              FunctionEnd
+ 6(doSomething():           2 Function None 3
+               7:             Label
+              22:     21(ptr) AccessChain 17 19
+                              Store 22 20
+              24:     21(ptr) AccessChain 17 23
+                              Store 24 20
+                              Return
+                              FunctionEnd
+12(makeRayDesc():     10(Ray) Function None 11
+              13:             Label
+         26(ray):     25(ptr) Variable Function
+              30:     29(ptr) AccessChain 26(ray) 19
+                              Store 30 28
+              34:     29(ptr) AccessChain 26(ray) 31
+                              Store 34 33
+              36:     35(ptr) AccessChain 26(ray) 23
+                              Store 36 27
+              39:     35(ptr) AccessChain 26(ray) 37
+                              Store 39 38
+              40:     10(Ray) Load 26(ray)
+                              ReturnValue 40
+                              FunctionEnd
diff --git a/Test/baseResults/rayQuery-committed.Error.rgen.out b/Test/baseResults/rayQuery-committed.Error.rgen.out
new file mode 100644
index 0000000..037f692
--- /dev/null
+++ b/Test/baseResults/rayQuery-committed.Error.rgen.out
@@ -0,0 +1,19 @@
+rayQuery-committed.Error.rgen
+ERROR: 0:48: 'committed' : argument must be compile-time constant 
+ERROR: 0:53: 'committed' : argument must be compile-time constant 
+ERROR: 0:54: 'committed' : argument must be compile-time constant 
+ERROR: 0:58: 'committed' : argument must be compile-time constant 
+ERROR: 0:62: 'committed' : argument must be compile-time constant 
+ERROR: 0:66: 'committed' : argument must be compile-time constant 
+ERROR: 0:70: 'committed' : argument must be compile-time constant 
+ERROR: 0:74: 'committed' : argument must be compile-time constant 
+ERROR: 0:78: 'committed' : argument must be compile-time constant 
+ERROR: 0:82: 'committed' : argument must be compile-time constant 
+ERROR: 0:86: 'committed' : argument must be compile-time constant 
+ERROR: 0:90: 'committed' : argument must be compile-time constant 
+ERROR: 0:97: 'committed' : argument must be compile-time constant 
+ERROR: 0:100: 'committed' : argument must be compile-time constant 
+ERROR: 14 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/rayQuery-initialize.rgen.out b/Test/baseResults/rayQuery-initialize.rgen.out
new file mode 100644
index 0000000..7824930
--- /dev/null
+++ b/Test/baseResults/rayQuery-initialize.rgen.out
@@ -0,0 +1,166 @@
+rayQuery-initialize.rgen
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 103
+
+                              Capability RayQueryProvisionalKHR
+                              Capability RayTracingNV
+                              Extension  "SPV_KHR_ray_query"
+                              Extension  "SPV_NV_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main" 23 28
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_query"
+                              SourceExtension  "GL_NV_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "launchIndex("
+                              Name 14  "Ray"
+                              MemberName 14(Ray) 0  "pos"
+                              MemberName 14(Ray) 1  "tmin"
+                              MemberName 14(Ray) 2  "dir"
+                              MemberName 14(Ray) 3  "tmax"
+                              Name 19  "doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;"
+                              Name 17  "rayQuery"
+                              Name 18  "ray"
+                              Name 23  "gl_LaunchIDNV"
+                              Name 28  "gl_LaunchSizeNV"
+                              Name 50  "rtas"
+                              Name 69  "index"
+                              Name 71  "ray"
+                              Name 72  "Ray"
+                              MemberName 72(Ray) 0  "pos"
+                              MemberName 72(Ray) 1  "tmin"
+                              MemberName 72(Ray) 2  "dir"
+                              MemberName 72(Ray) 3  "tmax"
+                              Name 74  "Rays"
+                              MemberName 74(Rays) 0  "rays"
+                              Name 76  ""
+                              Name 89  "rayQuery"
+                              Name 90  "param"
+                              Decorate 23(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 28(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
+                              Decorate 50(rtas) DescriptorSet 0
+                              Decorate 50(rtas) Binding 0
+                              MemberDecorate 72(Ray) 0 Offset 0
+                              MemberDecorate 72(Ray) 1 Offset 12
+                              MemberDecorate 72(Ray) 2 Offset 16
+                              MemberDecorate 72(Ray) 3 Offset 28
+                              Decorate 73 ArrayStride 32
+                              MemberDecorate 74(Rays) 0 Offset 0
+                              Decorate 74(Rays) BufferBlock
+                              Decorate 76 DescriptorSet 0
+                              Decorate 76 Binding 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeFunction 6(int)
+              10:             TypeRayQueryProvisionalKHR
+              11:             TypePointer Function 10
+              12:             TypeFloat 32
+              13:             TypeVector 12(float) 3
+         14(Ray):             TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float)
+              15:             TypePointer Function 14(Ray)
+              16:             TypeFunction 2 11(ptr) 15(ptr)
+              21:             TypeVector 6(int) 3
+              22:             TypePointer Input 21(ivec3)
+23(gl_LaunchIDNV):     22(ptr) Variable Input
+              24:      6(int) Constant 2
+              25:             TypePointer Input 6(int)
+28(gl_LaunchSizeNV):     22(ptr) Variable Input
+              29:      6(int) Constant 0
+              33:      6(int) Constant 1
+              48:             TypeAccelerationStructureKHR
+              49:             TypePointer UniformConstant 48
+        50(rtas):     49(ptr) Variable UniformConstant
+              52:      6(int) Constant 16
+              53:             TypeInt 32 1
+              54:     53(int) Constant 0
+              55:             TypePointer Function 13(fvec3)
+              58:     53(int) Constant 1
+              59:             TypePointer Function 12(float)
+              62:     53(int) Constant 2
+              65:     53(int) Constant 3
+              68:             TypePointer Function 6(int)
+         72(Ray):             TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float)
+              73:             TypeRuntimeArray 72(Ray)
+        74(Rays):             TypeStruct 73
+              75:             TypePointer Uniform 74(Rays)
+              76:     75(ptr) Variable Uniform
+              78:             TypePointer Uniform 72(Ray)
+              94:      6(int) Constant 32
+         4(main):           2 Function None 3
+               5:             Label
+       69(index):     68(ptr) Variable Function
+         71(ray):     15(ptr) Variable Function
+    89(rayQuery):     11(ptr) Variable Function
+       90(param):     15(ptr) Variable Function
+              70:      6(int) FunctionCall 8(launchIndex()
+                              Store 69(index) 70
+              77:      6(int) Load 69(index)
+              79:     78(ptr) AccessChain 76 54 77
+              80:     72(Ray) Load 79
+              81:   13(fvec3) CompositeExtract 80 0
+              82:     55(ptr) AccessChain 71(ray) 54
+                              Store 82 81
+              83:   12(float) CompositeExtract 80 1
+              84:     59(ptr) AccessChain 71(ray) 58
+                              Store 84 83
+              85:   13(fvec3) CompositeExtract 80 2
+              86:     55(ptr) AccessChain 71(ray) 62
+                              Store 86 85
+              87:   12(float) CompositeExtract 80 3
+              88:     59(ptr) AccessChain 71(ray) 65
+                              Store 88 87
+              91:     14(Ray) Load 71(ray)
+                              Store 90(param) 91
+              92:           2 FunctionCall 19(doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;) 89(rayQuery) 90(param)
+              93:          48 Load 50(rtas)
+              95:     55(ptr) AccessChain 71(ray) 54
+              96:   13(fvec3) Load 95
+              97:     59(ptr) AccessChain 71(ray) 58
+              98:   12(float) Load 97
+              99:     55(ptr) AccessChain 71(ray) 62
+             100:   13(fvec3) Load 99
+             101:     59(ptr) AccessChain 71(ray) 65
+             102:   12(float) Load 101
+                              RayQueryInitializeKHR 89(rayQuery) 93 33 94 96 98 100 102
+                              Return
+                              FunctionEnd
+ 8(launchIndex():      6(int) Function None 7
+               9:             Label
+              26:     25(ptr) AccessChain 23(gl_LaunchIDNV) 24
+              27:      6(int) Load 26
+              30:     25(ptr) AccessChain 28(gl_LaunchSizeNV) 29
+              31:      6(int) Load 30
+              32:      6(int) IMul 27 31
+              34:     25(ptr) AccessChain 28(gl_LaunchSizeNV) 33
+              35:      6(int) Load 34
+              36:      6(int) IMul 32 35
+              37:     25(ptr) AccessChain 23(gl_LaunchIDNV) 33
+              38:      6(int) Load 37
+              39:     25(ptr) AccessChain 28(gl_LaunchSizeNV) 29
+              40:      6(int) Load 39
+              41:      6(int) IMul 38 40
+              42:      6(int) IAdd 36 41
+              43:     25(ptr) AccessChain 23(gl_LaunchIDNV) 29
+              44:      6(int) Load 43
+              45:      6(int) IAdd 42 44
+                              ReturnValue 45
+                              FunctionEnd
+19(doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;):           2 Function None 16
+    17(rayQuery):     11(ptr) FunctionParameter
+         18(ray):     15(ptr) FunctionParameter
+              20:             Label
+              51:          48 Load 50(rtas)
+              56:     55(ptr) AccessChain 18(ray) 54
+              57:   13(fvec3) Load 56
+              60:     59(ptr) AccessChain 18(ray) 58
+              61:   12(float) Load 60
+              63:     55(ptr) AccessChain 18(ray) 62
+              64:   13(fvec3) Load 63
+              66:     59(ptr) AccessChain 18(ray) 65
+              67:   12(float) Load 66
+                              RayQueryInitializeKHR 17(rayQuery) 51 29 52 57 61 64 67
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/rayQuery-no-cse.rgen.out b/Test/baseResults/rayQuery-no-cse.rgen.out
new file mode 100644
index 0000000..c09e348
--- /dev/null
+++ b/Test/baseResults/rayQuery-no-cse.rgen.out
@@ -0,0 +1,173 @@
+rayQuery-no-cse.rgen
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 107
+
+                              Capability RayQueryProvisionalKHR
+                              Capability RayTracingNV
+                              Extension  "SPV_KHR_ray_query"
+                              Extension  "SPV_NV_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main" 23 28
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_query"
+                              SourceExtension  "GL_NV_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "launchIndex("
+                              Name 14  "Ray"
+                              MemberName 14(Ray) 0  "pos"
+                              MemberName 14(Ray) 1  "tmin"
+                              MemberName 14(Ray) 2  "dir"
+                              MemberName 14(Ray) 3  "tmax"
+                              Name 19  "doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;"
+                              Name 17  "rayQuery"
+                              Name 18  "ray"
+                              Name 23  "gl_LaunchIDNV"
+                              Name 28  "gl_LaunchSizeNV"
+                              Name 50  "rtas"
+                              Name 69  "index"
+                              Name 71  "ray"
+                              Name 72  "Ray"
+                              MemberName 72(Ray) 0  "pos"
+                              MemberName 72(Ray) 1  "tmin"
+                              MemberName 72(Ray) 2  "dir"
+                              MemberName 72(Ray) 3  "tmax"
+                              Name 74  "Rays"
+                              MemberName 74(Rays) 0  "rays"
+                              Name 76  ""
+                              Name 89  "rayQuery1"
+                              Name 90  "param"
+                              Name 103  "rayQuery2"
+                              Name 104  "param"
+                              Decorate 23(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 28(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
+                              Decorate 50(rtas) DescriptorSet 0
+                              Decorate 50(rtas) Binding 0
+                              MemberDecorate 72(Ray) 0 Offset 0
+                              MemberDecorate 72(Ray) 1 Offset 12
+                              MemberDecorate 72(Ray) 2 Offset 16
+                              MemberDecorate 72(Ray) 3 Offset 28
+                              Decorate 73 ArrayStride 32
+                              MemberDecorate 74(Rays) 0 Offset 0
+                              Decorate 74(Rays) BufferBlock
+                              Decorate 76 DescriptorSet 0
+                              Decorate 76 Binding 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeFunction 6(int)
+              10:             TypeRayQueryProvisionalKHR
+              11:             TypePointer Function 10
+              12:             TypeFloat 32
+              13:             TypeVector 12(float) 3
+         14(Ray):             TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float)
+              15:             TypePointer Function 14(Ray)
+              16:             TypeFunction 2 11(ptr) 15(ptr)
+              21:             TypeVector 6(int) 3
+              22:             TypePointer Input 21(ivec3)
+23(gl_LaunchIDNV):     22(ptr) Variable Input
+              24:      6(int) Constant 2
+              25:             TypePointer Input 6(int)
+28(gl_LaunchSizeNV):     22(ptr) Variable Input
+              29:      6(int) Constant 0
+              33:      6(int) Constant 1
+              48:             TypeAccelerationStructureKHR
+              49:             TypePointer UniformConstant 48
+        50(rtas):     49(ptr) Variable UniformConstant
+              52:      6(int) Constant 16
+              53:             TypeInt 32 1
+              54:     53(int) Constant 0
+              55:             TypePointer Function 13(fvec3)
+              58:     53(int) Constant 1
+              59:             TypePointer Function 12(float)
+              62:     53(int) Constant 2
+              65:     53(int) Constant 3
+              68:             TypePointer Function 6(int)
+         72(Ray):             TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float)
+              73:             TypeRuntimeArray 72(Ray)
+        74(Rays):             TypeStruct 73
+              75:             TypePointer Uniform 74(Rays)
+              76:     75(ptr) Variable Uniform
+              78:             TypePointer Uniform 72(Ray)
+              94:      6(int) Constant 32
+         4(main):           2 Function None 3
+               5:             Label
+       69(index):     68(ptr) Variable Function
+         71(ray):     15(ptr) Variable Function
+   89(rayQuery1):     11(ptr) Variable Function
+       90(param):     15(ptr) Variable Function
+  103(rayQuery2):     11(ptr) Variable Function
+      104(param):     15(ptr) Variable Function
+              70:      6(int) FunctionCall 8(launchIndex()
+                              Store 69(index) 70
+              77:      6(int) Load 69(index)
+              79:     78(ptr) AccessChain 76 54 77
+              80:     72(Ray) Load 79
+              81:   13(fvec3) CompositeExtract 80 0
+              82:     55(ptr) AccessChain 71(ray) 54
+                              Store 82 81
+              83:   12(float) CompositeExtract 80 1
+              84:     59(ptr) AccessChain 71(ray) 58
+                              Store 84 83
+              85:   13(fvec3) CompositeExtract 80 2
+              86:     55(ptr) AccessChain 71(ray) 62
+                              Store 86 85
+              87:   12(float) CompositeExtract 80 3
+              88:     59(ptr) AccessChain 71(ray) 65
+                              Store 88 87
+              91:     14(Ray) Load 71(ray)
+                              Store 90(param) 91
+              92:           2 FunctionCall 19(doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;) 89(rayQuery1) 90(param)
+              93:          48 Load 50(rtas)
+              95:     55(ptr) AccessChain 71(ray) 54
+              96:   13(fvec3) Load 95
+              97:     59(ptr) AccessChain 71(ray) 58
+              98:   12(float) Load 97
+              99:     55(ptr) AccessChain 71(ray) 62
+             100:   13(fvec3) Load 99
+             101:     59(ptr) AccessChain 71(ray) 65
+             102:   12(float) Load 101
+                              RayQueryInitializeKHR 89(rayQuery1) 93 33 94 96 98 100 102
+             105:     14(Ray) Load 71(ray)
+                              Store 104(param) 105
+             106:           2 FunctionCall 19(doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;) 103(rayQuery2) 104(param)
+                              Return
+                              FunctionEnd
+ 8(launchIndex():      6(int) Function None 7
+               9:             Label
+              26:     25(ptr) AccessChain 23(gl_LaunchIDNV) 24
+              27:      6(int) Load 26
+              30:     25(ptr) AccessChain 28(gl_LaunchSizeNV) 29
+              31:      6(int) Load 30
+              32:      6(int) IMul 27 31
+              34:     25(ptr) AccessChain 28(gl_LaunchSizeNV) 33
+              35:      6(int) Load 34
+              36:      6(int) IMul 32 35
+              37:     25(ptr) AccessChain 23(gl_LaunchIDNV) 33
+              38:      6(int) Load 37
+              39:     25(ptr) AccessChain 28(gl_LaunchSizeNV) 29
+              40:      6(int) Load 39
+              41:      6(int) IMul 38 40
+              42:      6(int) IAdd 36 41
+              43:     25(ptr) AccessChain 23(gl_LaunchIDNV) 29
+              44:      6(int) Load 43
+              45:      6(int) IAdd 42 44
+                              ReturnValue 45
+                              FunctionEnd
+19(doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;):           2 Function None 16
+    17(rayQuery):     11(ptr) FunctionParameter
+         18(ray):     15(ptr) FunctionParameter
+              20:             Label
+              51:          48 Load 50(rtas)
+              56:     55(ptr) AccessChain 18(ray) 54
+              57:   13(fvec3) Load 56
+              60:     59(ptr) AccessChain 18(ray) 58
+              61:   12(float) Load 60
+              63:     55(ptr) AccessChain 18(ray) 62
+              64:   13(fvec3) Load 63
+              66:     59(ptr) AccessChain 18(ray) 65
+              67:   12(float) Load 66
+                              RayQueryInitializeKHR 17(rayQuery) 51 29 52 57 61 64 67
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/rayQuery.rgen.out b/Test/baseResults/rayQuery.rgen.out
new file mode 100644
index 0000000..4658338
--- /dev/null
+++ b/Test/baseResults/rayQuery.rgen.out
@@ -0,0 +1,82 @@
+rayQuery.rgen
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 44
+
+                              Capability RayQueryProvisionalKHR
+                              Capability RayTracingNV
+                              Extension  "SPV_KHR_ray_query"
+                              Extension  "SPV_NV_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main"
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_query"
+                              SourceExtension  "GL_NV_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "rayFlags"
+                              Name 12  "tMin"
+                              Name 14  "tMax"
+                              Name 18  "localRayQuery"
+                              Name 21  "acc0"
+                              Name 26  "block"
+                              MemberName 26(block) 0  "dir"
+                              MemberName 26(block) 1  "origin"
+                              Name 28  ""
+                              Decorate 21(acc0) DescriptorSet 0
+                              Decorate 21(acc0) Binding 0
+                              MemberDecorate 26(block) 0 Offset 0
+                              MemberDecorate 26(block) 1 Offset 16
+                              Decorate 26(block) BufferBlock
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 9
+              10:             TypeFloat 32
+              11:             TypePointer Function 10(float)
+              13:   10(float) Constant 0
+              15:   10(float) Constant 1148846080
+              16:             TypeRayQueryProvisionalKHR
+              17:             TypePointer Function 16
+              19:             TypeAccelerationStructureKHR
+              20:             TypePointer UniformConstant 19
+        21(acc0):     20(ptr) Variable UniformConstant
+              24:      6(int) Constant 255
+              25:             TypeVector 10(float) 3
+       26(block):             TypeStruct 25(fvec3) 25(fvec3)
+              27:             TypePointer ShaderRecordBufferKHR 26(block)
+              28:     27(ptr) Variable ShaderRecordBufferKHR
+              29:             TypeInt 32 1
+              30:     29(int) Constant 1
+              31:             TypePointer ShaderRecordBufferKHR 25(fvec3)
+              35:     29(int) Constant 0
+              39:             TypeBool
+         4(main):           2 Function None 3
+               5:             Label
+     8(rayFlags):      7(ptr) Variable Function
+        12(tMin):     11(ptr) Variable Function
+        14(tMax):     11(ptr) Variable Function
+18(localRayQuery):     17(ptr) Variable Function
+                              Store 8(rayFlags) 9
+                              Store 12(tMin) 13
+                              Store 14(tMax) 15
+              22:          19 Load 21(acc0)
+              23:      6(int) Load 8(rayFlags)
+              32:     31(ptr) AccessChain 28 30
+              33:   25(fvec3) Load 32
+              34:   10(float) Load 12(tMin)
+              36:     31(ptr) AccessChain 28 35
+              37:   25(fvec3) Load 36
+              38:   10(float) Load 14(tMax)
+                              RayQueryInitializeKHR 18(localRayQuery) 22 23 24 33 34 37 38
+              40:    39(bool) RayQueryProceedKHR 18(localRayQuery)
+              41:    39(bool) LogicalNot 40
+                              SelectionMerge 43 None
+                              BranchConditional 41 42 43
+              42:               Label
+                                RayQueryTerminateKHR 18(localRayQuery)
+                                Branch 43
+              43:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/reflection.frag.out b/Test/baseResults/reflection.frag.out
new file mode 100644
index 0000000..65a8786
--- /dev/null
+++ b/Test/baseResults/reflection.frag.out
@@ -0,0 +1,13 @@
+reflection.frag
+Uniform reflection:
+
+Uniform block reflection:
+
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+
+Pipeline output reflection:
+
diff --git a/Test/baseResults/reflection.linked.options.out b/Test/baseResults/reflection.linked.options.out
new file mode 100644
index 0000000..af07bbd
--- /dev/null
+++ b/Test/baseResults/reflection.linked.options.out
@@ -0,0 +1,21 @@
+reflection.linked.vert
+reflection.linked.frag
+Uniform reflection:
+ubo_block.unused_uniform: offset 0, type 1406, size 1, index 0, binding -1, stages 0
+ubo_block.shared_uniform: offset 4, type 1406, size 1, index 0, binding -1, stages 17
+ubo_block.vsonly_uniform: offset 8, type 1406, size 1, index 0, binding -1, stages 1
+ubo_block.fsonly_uniform: offset 12, type 1406, size 1, index 0, binding -1, stages 16
+
+Uniform block reflection:
+ubo_block: offset -1, type ffffffff, size 16, index -1, binding 0, stages 17, numMembers 4
+
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+vertin: offset 0, type 1406, size 1, index 0, binding -1, stages 1
+
+Pipeline output reflection:
+fragout: offset 0, type 1406, size 1, index 0, binding -1, stages 16
+
diff --git a/Test/baseResults/reflection.linked.out b/Test/baseResults/reflection.linked.out
new file mode 100644
index 0000000..b1b2b3c
--- /dev/null
+++ b/Test/baseResults/reflection.linked.out
@@ -0,0 +1,20 @@
+reflection.linked.vert
+reflection.linked.frag
+Uniform reflection:
+ubo_block.shared_uniform: offset 4, type 1406, size 1, index 0, binding -1, stages 17
+ubo_block.vsonly_uniform: offset 8, type 1406, size 1, index 0, binding -1, stages 17
+ubo_block.fsonly_uniform: offset 12, type 1406, size 1, index 0, binding -1, stages 16
+
+Uniform block reflection:
+ubo_block: offset -1, type ffffffff, size 16, index -1, binding 0, stages 17, numMembers 4
+
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+vertin: offset 0, type 1406, size 1, index 0, binding -1, stages 1
+
+Pipeline output reflection:
+fragout: offset 0, type 1406, size 1, index 0, binding -1, stages 16
+
diff --git a/Test/baseResults/reflection.options.frag.out b/Test/baseResults/reflection.options.frag.out
new file mode 100644
index 0000000..ec12392
--- /dev/null
+++ b/Test/baseResults/reflection.options.frag.out
@@ -0,0 +1,14 @@
+reflection.frag
+Uniform reflection:
+
+Uniform block reflection:
+
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+inval: offset 0, type 1406, size 1, index 0, binding -1, stages 16
+
+Pipeline output reflection:
+
diff --git a/Test/baseResults/reflection.options.geom.out b/Test/baseResults/reflection.options.geom.out
new file mode 100644
index 0000000..7ffe82d
--- /dev/null
+++ b/Test/baseResults/reflection.options.geom.out
@@ -0,0 +1,25 @@
+reflection.options.geom
+Uniform reflection:
+
+Uniform block reflection:
+
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+gl_PerVertex.gl_Position: offset 0, type 8b52, size 1, index 0, binding -1, stages 8
+gl_PerVertex.gl_PointSize: offset 0, type 1406, size 1, index 0, binding -1, stages 8
+gl_PerVertex.gl_ClipDistance[0]: offset 0, type 1406, size 1, index 0, binding -1, stages 8
+block.Color: offset 0, type 8b50, size 1, index 0, binding -1, stages 8
+block.Texcoord: offset 0, type 8b50, size 1, index 0, binding -1, stages 8
+block.in_a: offset 0, type 8b54, size 1, index 0, binding -1, stages 8
+
+Pipeline output reflection:
+gl_Position: offset 0, type 8b52, size 1, index 0, binding -1, stages 8
+gl_PointSize: offset 0, type 1406, size 1, index 0, binding -1, stages 8
+gl_ClipDistance[0]: offset 0, type 1406, size 1, index 0, binding -1, stages 8
+block.Color: offset 0, type 8b52, size 1, index 0, binding -1, stages 8
+block.a: offset 0, type 8b52, size 1, index 0, binding -1, stages 8
+block.b[0]: offset 0, type 8b50, size 3, index 0, binding -1, stages 8
+
diff --git a/Test/baseResults/reflection.options.vert.out b/Test/baseResults/reflection.options.vert.out
new file mode 100644
index 0000000..3f4a271
--- /dev/null
+++ b/Test/baseResults/reflection.options.vert.out
@@ -0,0 +1,73 @@
+reflection.options.vert
+Uniform reflection:
+UBO.verts[0].position[0]: offset 0, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+UBO.verts[0].normal[0]: offset 12, type 1406, size 3, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.verts[1].position[0]: offset 24, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+UBO.verts[1].normal[0]: offset 36, type 1406, size 3, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.flt[0]: offset 48, type 1406, size 8, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 4
+UBO.unused: offset 80, type 8dc8, size 1, index 0, binding -1, stages 0
+UBO.uniform_multi[0][0][0]: offset 96, type 1406, size 2, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[0][1][0]: offset 104, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[0][2][0]: offset 112, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[1][0][0]: offset 120, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[1][1][0]: offset 128, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[1][2][0]: offset 136, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[2][0][0]: offset 144, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[2][1][0]: offset 152, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[2][2][0]: offset 160, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[3][0][0]: offset 168, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[3][1][0]: offset 176, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+UBO.uniform_multi[3][2][0]: offset 184, type 1406, size 2, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+uniform_multi[0][0][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[0][1][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[0][2][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[1][0][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[1][1][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[1][2][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[2][0][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[2][1][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[2][2][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[3][0][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[3][1][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+uniform_multi[3][2][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+
+Uniform block reflection:
+UBO: offset -1, type ffffffff, size 192, index -1, binding -1, stages 1, numMembers 7
+
+Buffer variable reflection:
+t[0].v[0].position[0]: offset 0, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[0].normal[0]: offset 12, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[1].position[0]: offset 24, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[1].normal[0]: offset 36, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[2].position[0]: offset 48, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[2].normal[0]: offset 60, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+padding[0]: offset 360, type 1405, size 10, index 0, binding -1, stages 0, arrayStride 4, topLevelArrayStride 4
+MultipleArrays.tri[0].v[0].position[0]: offset 0, type 1406, size 3, index 1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+MultipleArrays.tri[0].v[0].normal[0]: offset 12, type 1406, size 3, index 1, binding -1, stages 0, arrayStride 4, topLevelArrayStride 72
+MultipleArrays.tri[0].v[1].position[0]: offset 24, type 1406, size 3, index 1, binding -1, stages 0, arrayStride 4, topLevelArrayStride 72
+MultipleArrays.tri[0].v[1].normal[0]: offset 36, type 1406, size 3, index 1, binding -1, stages 0, arrayStride 4, topLevelArrayStride 72
+MultipleArrays.tri[0].v[2].position[0]: offset 48, type 1406, size 3, index 1, binding -1, stages 0, arrayStride 4, topLevelArrayStride 72
+MultipleArrays.tri[0].v[2].normal[0]: offset 60, type 1406, size 3, index 1, binding -1, stages 0, arrayStride 4, topLevelArrayStride 72
+MultipleArrays.vert[0].position[0]: offset 360, type 1406, size 3, index 1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
+MultipleArrays.vert[0].normal[0]: offset 372, type 1406, size 3, index 1, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
+MultipleArrays.f[0]: offset 480, type 1406, size 5, index 1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 4
+ArrayedBind[0].a: offset 0, type 1406, size 1, index 4, binding -1, stages 0
+ArrayedBind[0].b: offset 4, type 1406, size 1, index 4, binding -1, stages 1
+
+Buffer block reflection:
+VertexCollection: offset -1, type ffffffff, size 400, index -1, binding -1, stages 1, numMembers 7
+MultipleArrays: offset -1, type ffffffff, size 500, index -1, binding -1, stages 1, numMembers 9
+ArrayedBind[0]: offset -1, type ffffffff, size 8, index -1, binding -1, stages 1, numMembers 2
+ArrayedBind[1]: offset -1, type ffffffff, size 8, index -1, binding -1, stages 1, numMembers 2
+ArrayedBind[2]: offset -1, type ffffffff, size 8, index -1, binding -1, stages 1, numMembers 2
+
+Pipeline input reflection:
+gl_InstanceID: offset 0, type 1404, size 1, index 0, binding -1, stages 1
+
+Pipeline output reflection:
+outval.val: offset 0, type 1406, size 1, index 0, binding -1, stages 1
+outval.a: offset 0, type 8b51, size 1, index 0, binding -1, stages 1
+outval.b[0]: offset 0, type 8b50, size 4, index 0, binding -1, stages 1
+outval.c: offset 0, type 8b5a, size 1, index 0, binding -1, stages 1
+outarr[0]: offset 0, type 1406, size 3, index 0, binding -1, stages 1
+
diff --git a/Test/baseResults/reflection.vert.out b/Test/baseResults/reflection.vert.out
index 52e16e6..330733c 100644
--- a/Test/baseResults/reflection.vert.out
+++ b/Test/baseResults/reflection.vert.out
@@ -11,97 +11,167 @@
 c_m23: offset 16, type 8b67, size 1, index 2, binding -1, stages 1
 c_scalarAfterm23: offset 64, type 1404, size 1, index 2, binding -1, stages 1
 scalarBeforeArray: offset 96, type 1404, size 1, index 0, binding -1, stages 1
-floatArray: offset 112, type 1406, size 5, index 0, binding -1, stages 1
+floatArray: offset 112, type 1406, size 5, index 0, binding -1, stages 1, arrayStride 16, topLevelArrayStride 16
 scalarAfterArray: offset 192, type 1404, size 1, index 0, binding -1, stages 1
 named.memvec2: offset 48, type 8b50, size 1, index 1, binding -1, stages 1
 named.memf1: offset 56, type 1406, size 1, index 1, binding -1, stages 1
 named.memf2: offset 60, type 8b56, size 1, index 1, binding -1, stages 1
 named.memf3: offset 64, type 1404, size 1, index 1, binding -1, stages 1
 named.memvec2a: offset 72, type 8b50, size 1, index 1, binding -1, stages 1
-named.m22: offset 80, type 8b5a, size 7, index 1, binding -1, stages 1
-dm22: offset -1, type 8b5a, size 4, index -1, binding -1, stages 1
-m22: offset 208, type 8b5a, size 3, index 0, binding -1, stages 1
+named.m22: offset 80, type 8b5a, size 7, index 1, binding -1, stages 1, arrayStride 32, topLevelArrayStride 32
+dm22: offset -1, type 8b5a, size 4, index -1, binding -1, stages 1, arrayStride 16, topLevelArrayStride 16
+m22: offset 208, type 8b5a, size 3, index 0, binding -1, stages 1, arrayStride 32, topLevelArrayStride 32
 nested.foo.n1.a: offset 0, type 1406, size 1, index 3, binding -1, stages 1
 nested.foo.n2.b: offset 16, type 1406, size 1, index 3, binding -1, stages 1
 nested.foo.n2.c: offset 20, type 1406, size 1, index 3, binding -1, stages 1
 nested.foo.n2.d: offset 24, type 1406, size 1, index 3, binding -1, stages 1
-deepA[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepA[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepB[1].d2.d1[0].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepB[1].d2.d1[1].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepB[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepB[1].d2.d1[3].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepB[0].d2.d1[0].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepB[0].d2.d1[1].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepB[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepB[0].d2.d1[3].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1
-deepC[1].iv4: offset -1, type 8b52, size 1, index -1, binding -1, stages 1
-deepC[1].d2.i: offset -1, type 1404, size 1, index -1, binding -1, stages 1
-deepC[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
-deepC[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepC[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
-deepC[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepC[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
-deepC[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepC[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
-deepC[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepC[1].v3: offset -1, type 8b54, size 1, index -1, binding -1, stages 1
+deepA[0].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepA[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepB[1].d2.d1[0].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepB[1].d2.d1[1].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepB[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepB[1].d2.d1[3].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepB[0].d2.d1[0].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepB[0].d2.d1[1].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepB[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepB[0].d2.d1[3].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepC[1].iv4: offset -1, type 8b52, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepC[1].d2.i: offset -1, type 1404, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepC[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepC[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepC[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepC[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepC[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepC[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepC[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepC[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepC[1].v3: offset -1, type 8b54, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
 deepD[0].iv4: offset -1, type 8b52, size 1, index -1, binding -1, stages 1
 deepD[0].d2.i: offset -1, type 1404, size 1, index -1, binding -1, stages 1
-deepD[0].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
+deepD[0].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8
 deepD[0].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepD[0].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
+deepD[0].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8
 deepD[0].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepD[0].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
+deepD[0].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8
 deepD[0].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepD[0].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
+deepD[0].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8
 deepD[0].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
 deepD[0].v3: offset -1, type 8b54, size 1, index -1, binding -1, stages 1
 deepD[1].iv4: offset -1, type 8b52, size 1, index -1, binding -1, stages 1
 deepD[1].d2.i: offset -1, type 1404, size 1, index -1, binding -1, stages 1
-deepD[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
+deepD[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8
 deepD[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepD[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
+deepD[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8
 deepD[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepD[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
+deepD[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8
 deepD[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
-deepD[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1
+deepD[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8
 deepD[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1
 deepD[1].v3: offset -1, type 8b54, size 1, index -1, binding -1, stages 1
+deepA[0].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepA[0].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepA[0].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepA[0].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepA[0].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepA[0].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepA[0].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepA[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepA[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepA[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepA[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepA[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
+deepA[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
+deepA[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
 abl.foo: offset 0, type 1406, size 1, index 7, binding -1, stages 1
 abl2.foo: offset 0, type 1406, size 1, index 11, binding -1, stages 1
-buf1.runtimeArray: offset 4, type 1406, size 4, index 12, binding -1, stages 1
-buf2.runtimeArray.c: offset 8, type 1406, size 1, index 13, binding -1, stages 1
-buf3.runtimeArray: offset 4, type 1406, size 0, index 14, binding -1, stages 1
-buf4.runtimeArray.c: offset 8, type 1406, size 1, index 15, binding -1, stages 1
+buf1.runtimeArray: offset 4, type 1406, size 4, index 12, binding -1, stages 1, arrayStride 4, topLevelArrayStride 4
+buf2.runtimeArray.c: offset 8, type 1406, size 1, index 13, binding -1, stages 1, topLevelArrayStride 12
+buf3.runtimeArray: offset 4, type 1406, size 0, index 14, binding -1, stages 1, arrayStride 4, topLevelArrayStride 4
+buf4.runtimeArray.c: offset 8, type 1406, size 1, index 15, binding -1, stages 1, topLevelArrayStride 12
+nested2.a.n1.a: offset 16, type 1406, size 1, index 16, binding -1, stages 1
+nested2.a.n2.b: offset 32, type 1406, size 1, index 16, binding -1, stages 1
+nested2.a.n2.c: offset 36, type 1406, size 1, index 16, binding -1, stages 1
+nested2.a.n2.d: offset 40, type 1406, size 1, index 16, binding -1, stages 1
+nested2.b[0].a: offset 48, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16
+nested2.b[1].a: offset 64, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16
+nested2.b[2].a: offset 80, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16
+nested2.b[3].a: offset 96, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16
+nested2.c.a: offset 112, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16
+nested2.d.a: offset 144, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16
+t.v.position: offset 0, type 1406, size 1, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t.v[0].position: offset 0, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t.v[1].position: offset 24, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t.v[2].position: offset 48, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t.v[0].normal: offset 12, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t.v[1].normal: offset 36, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t.v[2].normal: offset 60, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[0].position: offset 0, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[0].normal: offset 12, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[1].position: offset 24, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[1].normal: offset 36, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[2].position: offset 48, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[0].v[2].normal: offset 60, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[1].v[0].position: offset 72, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[1].v[0].normal: offset 84, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[1].v[1].position: offset 96, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[1].v[1].normal: offset 108, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[1].v[2].position: offset 120, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[1].v[2].normal: offset 132, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[2].v[0].position: offset 144, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[2].v[0].normal: offset 156, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[2].v[1].position: offset 168, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[2].v[1].normal: offset 180, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[2].v[2].position: offset 192, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[2].v[2].normal: offset 204, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[3].v[0].position: offset 216, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[3].v[0].normal: offset 228, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[3].v[1].position: offset 240, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[3].v[1].normal: offset 252, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[3].v[2].position: offset 264, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[3].v[2].normal: offset 276, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[4].v[0].position: offset 288, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[4].v[0].normal: offset 300, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[4].v[1].position: offset 312, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[4].v[1].normal: offset 324, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[4].v[2].position: offset 336, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
+t[4].v[2].normal: offset 348, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
 anonMember1: offset 0, type 8b51, size 1, index 0, binding -1, stages 1
 uf1: offset -1, type 1406, size 1, index -1, binding -1, stages 1
 uf2: offset -1, type 1406, size 1, index -1, binding -1, stages 1
 named.member3: offset 32, type 8b52, size 1, index 1, binding -1, stages 1
 
 Uniform block reflection:
-nameless: offset -1, type ffffffff, size 496, index -1, binding -1, stages 0
-named: offset -1, type ffffffff, size 304, index -1, binding -1, stages 0
-c_nameless: offset -1, type ffffffff, size 112, index -1, binding -1, stages 0
-nested: offset -1, type ffffffff, size 32, index -1, binding -1, stages 0
-abl[0]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-abl[1]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-abl[2]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-abl[3]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-abl2[0]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-abl2[1]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-abl2[2]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-abl2[3]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-buf1: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-buf2: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-buf3: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
-buf4: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0
+nameless: offset -1, type ffffffff, size 496, index -1, binding -1, stages 1, numMembers 9
+named: offset -1, type ffffffff, size 304, index -1, binding -1, stages 1, numMembers 10
+c_nameless: offset -1, type ffffffff, size 112, index -1, binding -1, stages 1, numMembers 5
+nested: offset -1, type ffffffff, size 32, index -1, binding -1, stages 1, numMembers 4
+abl[0]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+abl[1]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+abl[2]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+abl[3]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+abl2[0]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+abl2[1]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+abl2[2]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+abl2[3]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+buf1: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 2
+buf2: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 4
+buf3: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 2
+buf4: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 4
+nested2: offset -1, type ffffffff, size 208, index -1, binding -1, stages 1, numMembers 15
+VertexCollection: offset -1, type ffffffff, size 400, index -1, binding -1, stages 1, numMembers 31
 
-Vertex attribute reflection:
-attributeFloat: offset 0, type 1406, size 0, index 0, binding -1, stages 0
-attributeFloat2: offset 0, type 8b50, size 0, index 0, binding -1, stages 0
-attributeFloat3: offset 0, type 8b51, size 0, index 0, binding -1, stages 0
-attributeFloat4: offset 0, type 8b52, size 0, index 0, binding -1, stages 0
-attributeMat4: offset 0, type 8b5c, size 0, index 0, binding -1, stages 0
-gl_InstanceID: offset 0, type 1404, size 0, index 0, binding -1, stages 0
+Buffer variable reflection:
+
+Buffer block reflection:
+
+Pipeline input reflection:
+attributeFloat: offset 0, type 1406, size 1, index 0, binding -1, stages 1
+attributeFloat2: offset 0, type 8b50, size 1, index 0, binding -1, stages 1
+attributeFloat3: offset 0, type 8b51, size 1, index 0, binding -1, stages 1
+attributeFloat4: offset 0, type 8b52, size 1, index 0, binding -1, stages 1
+attributeMat4: offset 0, type 8b5c, size 1, index 0, binding -1, stages 1
+attributeFloatArray: offset 0, type 1406, size 3, index 0, binding -1, stages 1
+gl_InstanceID: offset 0, type 1404, size 1, index 0, binding -1, stages 1
+
+Pipeline output reflection:
 
diff --git a/Test/baseResults/remap.basic.dcefunc.frag.out b/Test/baseResults/remap.basic.dcefunc.frag.out
index 33ec069..e985def 100644
--- a/Test/baseResults/remap.basic.dcefunc.frag.out
+++ b/Test/baseResults/remap.basic.dcefunc.frag.out
@@ -1,6 +1,6 @@
 remap.basic.dcefunc.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/remap.basic.everything.frag.out b/Test/baseResults/remap.basic.everything.frag.out
index 858d629..0f7034a 100644
--- a/Test/baseResults/remap.basic.everything.frag.out
+++ b/Test/baseResults/remap.basic.everything.frag.out
@@ -1,6 +1,6 @@
 remap.basic.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24969
 
                               Capability Shader
diff --git a/Test/baseResults/remap.basic.none.frag.out b/Test/baseResults/remap.basic.none.frag.out
index 1ad1d74..44790dd 100644
--- a/Test/baseResults/remap.basic.none.frag.out
+++ b/Test/baseResults/remap.basic.none.frag.out
@@ -1,6 +1,6 @@
 remap.basic.none.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/remap.basic.strip.frag.out b/Test/baseResults/remap.basic.strip.frag.out
index 3d876d0..05f16ba 100644
--- a/Test/baseResults/remap.basic.strip.frag.out
+++ b/Test/baseResults/remap.basic.strip.frag.out
@@ -1,6 +1,6 @@
 remap.basic.strip.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out b/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
index 7f180a9..b9ce55e 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
@@ -2,7 +2,7 @@
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24878
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
index 577a135..71b7de0 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
@@ -2,7 +2,7 @@
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
index d7aea9f..c65d237 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
@@ -2,7 +2,7 @@
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out b/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
index aff0998..ea390b5 100644
--- a/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
+++ b/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
@@ -1,6 +1,6 @@
 remap.hlsl.templatetypes.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24954
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.templatetypes.none.frag.out b/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
index 282fd2a..32b4e7b 100644
--- a/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
+++ b/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
@@ -1,6 +1,6 @@
 remap.hlsl.templatetypes.none.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 160
 
                               Capability Shader
diff --git a/Test/baseResults/remap.if.everything.frag.out b/Test/baseResults/remap.if.everything.frag.out
index cdb007b..26cc3dc 100644
--- a/Test/baseResults/remap.if.everything.frag.out
+++ b/Test/baseResults/remap.if.everything.frag.out
@@ -1,6 +1,6 @@
 remap.if.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22855
 
                               Capability Shader
diff --git a/Test/baseResults/remap.if.none.frag.out b/Test/baseResults/remap.if.none.frag.out
index 0c8d278..48e8587 100644
--- a/Test/baseResults/remap.if.none.frag.out
+++ b/Test/baseResults/remap.if.none.frag.out
@@ -1,6 +1,6 @@
 remap.if.none.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/remap.similar_1a.everything.frag.out b/Test/baseResults/remap.similar_1a.everything.frag.out
index 2f8f1c7..6d5ce1c 100644
--- a/Test/baseResults/remap.similar_1a.everything.frag.out
+++ b/Test/baseResults/remap.similar_1a.everything.frag.out
@@ -1,6 +1,6 @@
 remap.similar_1a.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24916
 
                               Capability Shader
@@ -88,7 +88,7 @@
            22102:    649(ptr) Variable Function
            24151:     12(int) Load 4408
            13868:     9(bool) SGreaterThan 24151 2577
-                              SelectionMerge 22309 None
+                              SelectionMerge 14966 None
                               BranchConditional 13868 9492 17416
             9492:               Label
            15624:     12(int)   Load 4408
@@ -109,7 +109,6 @@
            10505:     12(int)   IAdd 11462 21176
            14626:   13(float)   ConvertSToF 10505
                                 ReturnValue 14626
-           22309:             Label
-            6429:   13(float) Undef
-                              ReturnValue 6429
+           14966:             Label
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/remap.similar_1a.none.frag.out b/Test/baseResults/remap.similar_1a.none.frag.out
index 80d35c3..457f1be 100644
--- a/Test/baseResults/remap.similar_1a.none.frag.out
+++ b/Test/baseResults/remap.similar_1a.none.frag.out
@@ -1,6 +1,6 @@
 remap.similar_1a.none.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 86
 
                               Capability Shader
@@ -124,6 +124,5 @@
               68:    8(float)   ConvertSToF 67
                                 ReturnValue 68
               43:             Label
-              70:    8(float) Undef
-                              ReturnValue 70
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/remap.similar_1b.everything.frag.out b/Test/baseResults/remap.similar_1b.everything.frag.out
index c76c4bf..67425c6 100644
--- a/Test/baseResults/remap.similar_1b.everything.frag.out
+++ b/Test/baseResults/remap.similar_1b.everything.frag.out
@@ -1,6 +1,6 @@
 remap.similar_1b.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24916
 
                               Capability Shader
@@ -93,7 +93,7 @@
            22102:    649(ptr) Variable Function
            24151:     12(int) Load 4408
            13868:     9(bool) SGreaterThan 24151 2577
-                              SelectionMerge 22309 None
+                              SelectionMerge 14966 None
                               BranchConditional 13868 10822 17416
            10822:               Label
            22680:     12(int)   Load 4408
@@ -115,7 +115,6 @@
            10505:     12(int)   IAdd 11462 21176
            14626:   13(float)   ConvertSToF 10505
                                 ReturnValue 14626
-           22309:             Label
-            6429:   13(float) Undef
-                              ReturnValue 6429
+           14966:             Label
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/remap.similar_1b.none.frag.out b/Test/baseResults/remap.similar_1b.none.frag.out
index 0a854d6..fe021e0 100644
--- a/Test/baseResults/remap.similar_1b.none.frag.out
+++ b/Test/baseResults/remap.similar_1b.none.frag.out
@@ -1,6 +1,6 @@
 remap.similar_1b.none.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 91
 
                               Capability Shader
@@ -130,6 +130,5 @@
               73:    8(float)   ConvertSToF 72
                                 ReturnValue 73
               46:             Label
-              75:    8(float) Undef
-                              ReturnValue 75
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/remap.specconst.comp.out b/Test/baseResults/remap.specconst.comp.out
index ee049f4..80d13b2 100644
--- a/Test/baseResults/remap.specconst.comp.out
+++ b/Test/baseResults/remap.specconst.comp.out
@@ -1,6 +1,6 @@
 remap.specconst.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 16104
 
                               Capability Shader
diff --git a/Test/baseResults/remap.switch.everything.frag.out b/Test/baseResults/remap.switch.everything.frag.out
index ffd64d4..2362f67 100644
--- a/Test/baseResults/remap.switch.everything.frag.out
+++ b/Test/baseResults/remap.switch.everything.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 23990
 
                               Capability Shader
diff --git a/Test/baseResults/remap.switch.none.frag.out b/Test/baseResults/remap.switch.none.frag.out
index 4dd7897..f8737b9 100644
--- a/Test/baseResults/remap.switch.none.frag.out
+++ b/Test/baseResults/remap.switch.none.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 48
 
                               Capability Shader
diff --git a/Test/baseResults/remap.uniformarray.everything.frag.out b/Test/baseResults/remap.uniformarray.everything.frag.out
index c1f306e..40429f2 100644
--- a/Test/baseResults/remap.uniformarray.everything.frag.out
+++ b/Test/baseResults/remap.uniformarray.everything.frag.out
@@ -1,6 +1,6 @@
 remap.uniformarray.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 25030
 
                               Capability Shader
diff --git a/Test/baseResults/remap.uniformarray.none.frag.out b/Test/baseResults/remap.uniformarray.none.frag.out
index 1087e5e..42d55b9 100644
--- a/Test/baseResults/remap.uniformarray.none.frag.out
+++ b/Test/baseResults/remap.uniformarray.none.frag.out
@@ -1,6 +1,6 @@
 remap.uniformarray.none.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/size b/Test/baseResults/size
new file mode 100644
index 0000000..47364a5
--- /dev/null
+++ b/Test/baseResults/size
@@ -0,0 +1 @@
+396288 ../build/install/bin/glslangValidator.exe
diff --git a/Test/baseResults/specExamples.vert.out b/Test/baseResults/specExamples.vert.out
index 5c8ca39..1dbf9a2 100644
--- a/Test/baseResults/specExamples.vert.out
+++ b/Test/baseResults/specExamples.vert.out
@@ -30,8 +30,10 @@
 ERROR: 0:134: '' : function does not return a value: funcA
 ERROR: 0:136: '' : function does not return a value: funcB
 ERROR: 0:153: '' : function does not return a value: func3
+ERROR: 0:169: 'format' : image formats must match 
 ERROR: 0:170: 'coherent' : argument cannot drop memory qualifier when passed to formal parameter 
-ERROR: 32 compilation errors.  No code generated.
+ERROR: 0:170: 'format' : image formats must match 
+ERROR: 34 compilation errors.  No code generated.
 
 
 Shader version: 430
@@ -305,7 +307,7 @@
 0:?     'c' ( in 4-component vector of float)
 0:?     'd' ( in 4-component vector of float)
 0:?     'v' ( noContraction smooth out 4-component vector of float)
-0:?     'anon@6' (layout( column_major shared) coherent buffer block{layout( column_major shared) readonly buffer 4-component vector of float member1, layout( column_major shared) buffer 4-component vector of float member2})
+0:?     'anon@6' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent readonly buffer 4-component vector of float member1, layout( column_major shared) coherent buffer 4-component vector of float member2})
 0:?     'anon@7' (layout( column_major shared) buffer block{layout( column_major shared) coherent readonly buffer 4-component vector of float member1A, layout( column_major shared) coherent buffer 4-component vector of float member2A})
 0:?     'shv' ( shared 4-component vector of float)
 0:?     'img1' (layout( rgba32f) uniform image2D)
@@ -588,7 +590,7 @@
 0:?     'c' ( in 4-component vector of float)
 0:?     'd' ( in 4-component vector of float)
 0:?     'v' ( noContraction smooth out 4-component vector of float)
-0:?     'anon@6' (layout( column_major shared) coherent buffer block{layout( column_major shared) readonly buffer 4-component vector of float member1, layout( column_major shared) buffer 4-component vector of float member2})
+0:?     'anon@6' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent readonly buffer 4-component vector of float member1, layout( column_major shared) coherent buffer 4-component vector of float member2})
 0:?     'anon@7' (layout( column_major shared) buffer block{layout( column_major shared) coherent readonly buffer 4-component vector of float member1A, layout( column_major shared) coherent buffer 4-component vector of float member2A})
 0:?     'shv' ( shared 4-component vector of float)
 0:?     'img1' (layout( rgba32f) uniform image2D)
diff --git a/Test/baseResults/specExamplesConf.vert.out b/Test/baseResults/specExamplesConf.vert.out
index e721781..94f48a5 100644
--- a/Test/baseResults/specExamplesConf.vert.out
+++ b/Test/baseResults/specExamplesConf.vert.out
@@ -31,8 +31,10 @@
 ERROR: 0:134: '' : function does not return a value: funcA
 ERROR: 0:136: '' : function does not return a value: funcB
 ERROR: 0:153: '' : function does not return a value: func3
+ERROR: 0:169: 'format' : image formats must match 
 ERROR: 0:170: 'coherent' : argument cannot drop memory qualifier when passed to formal parameter 
-ERROR: 33 compilation errors.  No code generated.
+ERROR: 0:170: 'format' : image formats must match 
+ERROR: 35 compilation errors.  No code generated.
 
 
 Shader version: 430
@@ -306,7 +308,7 @@
 0:?     'c' ( in 4-component vector of float)
 0:?     'd' ( in 4-component vector of float)
 0:?     'v' ( noContraction smooth out 4-component vector of float)
-0:?     'anon@6' (layout( column_major shared) coherent buffer block{layout( column_major shared) readonly buffer 4-component vector of float member1, layout( column_major shared) buffer 4-component vector of float member2})
+0:?     'anon@6' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent readonly buffer 4-component vector of float member1, layout( column_major shared) coherent buffer 4-component vector of float member2})
 0:?     'anon@7' (layout( column_major shared) buffer block{layout( column_major shared) coherent readonly buffer 4-component vector of float member1A, layout( column_major shared) coherent buffer 4-component vector of float member2A})
 0:?     'shv' ( shared 4-component vector of float)
 0:?     'img1' (layout( rgba32f) uniform image2D)
@@ -589,7 +591,7 @@
 0:?     'c' ( in 4-component vector of float)
 0:?     'd' ( in 4-component vector of float)
 0:?     'v' ( noContraction smooth out 4-component vector of float)
-0:?     'anon@6' (layout( column_major shared) coherent buffer block{layout( column_major shared) readonly buffer 4-component vector of float member1, layout( column_major shared) buffer 4-component vector of float member2})
+0:?     'anon@6' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent readonly buffer 4-component vector of float member1, layout( column_major shared) coherent buffer 4-component vector of float member2})
 0:?     'anon@7' (layout( column_major shared) buffer block{layout( column_major shared) coherent readonly buffer 4-component vector of float member1A, layout( column_major shared) coherent buffer 4-component vector of float member2A})
 0:?     'shv' ( shared 4-component vector of float)
 0:?     'img1' (layout( rgba32f) uniform image2D)
diff --git a/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out b/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out
index 878aa1a..105bbdb 100644
--- a/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out
+++ b/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out
@@ -1,10 +1,10 @@
 spv.1.3.8bitstorage-ssbo.vert
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 28
 
                               Capability Shader
-                              Capability CapabilityStorageBuffer8BitAccess
+                              Capability StorageBuffer8BitAccess
                               Extension  "SPV_KHR_8bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
diff --git a/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out b/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out
index 54b497f..77c1565 100644
--- a/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out
+++ b/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out
@@ -1,10 +1,10 @@
 spv.1.3.8bitstorage-ubo.vert
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 29
 
                               Capability Shader
-                              Capability CapabilityUniformAndStorageBuffer8BitAccess
+                              Capability UniformAndStorageBuffer8BitAccess
                               Extension  "SPV_KHR_8bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
diff --git a/Test/baseResults/spv.1.3.coopmat.comp.out b/Test/baseResults/spv.1.3.coopmat.comp.out
new file mode 100644
index 0000000..29d914f
--- /dev/null
+++ b/Test/baseResults/spv.1.3.coopmat.comp.out
@@ -0,0 +1,95 @@
+spv.1.3.coopmat.comp
+// Module Version 10300
+// Generated by (magic number): 80008
+// Id's are bound by 52
+
+                              Capability Shader
+                              Capability VariablePointers
+                              Capability VulkanMemoryModelKHR
+                              Capability CooperativeMatrixNV
+                              Extension  "SPV_KHR_vulkan_memory_model"
+                              Extension  "SPV_NV_cooperative_matrix"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical VulkanKHR
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 64 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_KHR_memory_scope_semantics"
+                              SourceExtension  "GL_NV_cooperative_matrix"
+                              Name 4  "main"
+                              Name 13  "m"
+                              Name 29  "tempArg"
+                              Name 33  "Block"
+                              MemberName 33(Block) 0  "y"
+                              MemberName 33(Block) 1  "x"
+                              Name 35  "block"
+                              Decorate 31 ArrayStride 4
+                              Decorate 32 ArrayStride 4
+                              MemberDecorate 33(Block) 0 Offset 0
+                              MemberDecorate 33(Block) 1 Offset 4194304
+                              Decorate 33(Block) Block
+                              Decorate 35(block) DescriptorSet 0
+                              Decorate 35(block) Binding 0
+                              Decorate 51 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeInt 32 0
+               8:      7(int) Constant 3
+               9:      7(int) Constant 16
+              10:      7(int) Constant 8
+              11:             TypeCooperativeMatrixNV 6(float) 8 9 10
+              12:             TypePointer Function 11
+              14:    6(float) Constant 0
+              15:          11 ConstantComposite 14
+              24:    6(float) Constant 1073741824
+              30:      7(int) Constant 1048576
+              31:             TypeArray 6(float) 30
+              32:             TypeRuntimeArray 6(float)
+       33(Block):             TypeStruct 31 32
+              34:             TypePointer StorageBuffer 33(Block)
+       35(block):     34(ptr) Variable StorageBuffer
+              36:             TypeInt 32 1
+              37:     36(int) Constant 1
+              38:      7(int) Constant 5
+              39:             TypePointer StorageBuffer 6(float)
+              41:      7(int) Constant 128
+              42:             TypeBool
+              43:    42(bool) ConstantFalse
+              48:             TypeVector 7(int) 3
+              49:      7(int) Constant 64
+              50:      7(int) Constant 1
+              51:   48(ivec3) ConstantComposite 49 50 50
+         4(main):           2 Function None 3
+               5:             Label
+           13(m):     12(ptr) Variable Function
+     29(tempArg):     12(ptr) Variable Function
+                              Store 13(m) 15
+              16:          11 Load 13(m)
+              17:          11 Load 13(m)
+              18:          11 FAdd 16 17
+                              Store 13(m) 18
+              19:          11 Load 13(m)
+              20:          11 Load 13(m)
+              21:          11 FSub 19 20
+                              Store 13(m) 21
+              22:          11 Load 13(m)
+              23:          11 FNegate 22
+                              Store 13(m) 23
+              25:          11 Load 13(m)
+              26:          11 MatrixTimesScalar 25 24
+                              Store 13(m) 26
+              27:          11 Load 13(m)
+              28:          11 MatrixTimesScalar 27 24
+                              Store 13(m) 28
+              40:     39(ptr) AccessChain 35(block) 37 9
+              44:          11 CooperativeMatrixLoadNV 40 41 43 MakePointerVisibleKHR NonPrivatePointerKHR 38
+                              Store 29(tempArg) 44
+              45:          11 Load 29(tempArg)
+                              Store 13(m) 45
+              46:          11 Load 13(m)
+              47:     39(ptr) AccessChain 35(block) 37 9
+                              CooperativeMatrixStoreNV 47 46 41 43 MakePointerAvailableKHR NonPrivatePointerKHR 38
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.1.4.LoopControl.frag.out b/Test/baseResults/spv.1.4.LoopControl.frag.out
new file mode 100644
index 0000000..008ef47
--- /dev/null
+++ b/Test/baseResults/spv.1.4.LoopControl.frag.out
@@ -0,0 +1,109 @@
+spv.1.4.LoopControl.frag
+WARNING: 0:15: 'min_iterations' : expected a single integer argument 
+WARNING: 0:15: 'max_iterations' : expected a single integer argument 
+
+// Module Version 10400
+// Generated by (magic number): 80008
+// Id's are bound by 54
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 53
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_control_flow_attributes"
+                              Name 4  "main"
+                              Name 8  "i"
+                              Name 32  "i"
+                              Name 42  "i"
+                              Name 53  "cond"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 0
+              16:      6(int) Constant 8
+              17:             TypeBool
+              20:      6(int) Constant 1
+              27:    17(bool) ConstantTrue
+              52:             TypePointer Private 17(bool)
+        53(cond):     52(ptr) Variable Private
+         4(main):           2 Function None 3
+               5:             Label
+            8(i):      7(ptr) Variable Function
+           32(i):      7(ptr) Variable Function
+           42(i):      7(ptr) Variable Function
+                              Store 8(i) 9
+                              Branch 10
+              10:             Label
+                              LoopMerge 12 13 MinIterations MaxIterations  3 7
+                              Branch 14
+              14:             Label
+              15:      6(int) Load 8(i)
+              18:    17(bool) SLessThan 15 16
+                              BranchConditional 18 11 12
+              11:               Label
+                                Branch 13
+              13:               Label
+              19:      6(int)   Load 8(i)
+              21:      6(int)   IAdd 19 20
+                                Store 8(i) 21
+                                Branch 10
+              12:             Label
+                              Branch 22
+              22:             Label
+                              LoopMerge 24 25 IterationMultiple  2
+                              Branch 26
+              26:             Label
+                              BranchConditional 27 23 24
+              23:               Label
+                                Branch 25
+              25:               Label
+                                Branch 22
+              24:             Label
+                              Branch 28
+              28:             Label
+                              LoopMerge 30 31 PeelCount  5
+                              Branch 29
+              29:             Label
+                              Branch 31
+              31:             Label
+                              BranchConditional 27 28 30
+              30:             Label
+                              Store 32(i) 9
+                              Branch 33
+              33:             Label
+                              LoopMerge 35 36 PartialCount  4
+                              Branch 37
+              37:             Label
+              38:      6(int) Load 32(i)
+              39:    17(bool) SLessThan 38 16
+                              BranchConditional 39 34 35
+              34:               Label
+                                Branch 36
+              36:               Label
+              40:      6(int)   Load 32(i)
+              41:      6(int)   IAdd 40 20
+                                Store 32(i) 41
+                                Branch 33
+              35:             Label
+                              Store 42(i) 9
+                              Branch 43
+              43:             Label
+                              LoopMerge 45 46 None
+                              Branch 47
+              47:             Label
+              48:      6(int) Load 42(i)
+              49:    17(bool) SLessThan 48 16
+                              BranchConditional 49 44 45
+              44:               Label
+                                Branch 46
+              46:               Label
+              50:      6(int)   Load 42(i)
+              51:      6(int)   IAdd 50 20
+                                Store 42(i) 51
+                                Branch 43
+              45:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.1.4.NonWritable.frag.out b/Test/baseResults/spv.1.4.NonWritable.frag.out
new file mode 100755
index 0000000..0207ed2
--- /dev/null
+++ b/Test/baseResults/spv.1.4.NonWritable.frag.out
@@ -0,0 +1,58 @@
+spv.1.4.NonWritable.frag
+// Module Version 10400
+// Generated by (magic number): 80008
+// Id's are bound by 38
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 8 31
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "color"
+                              Name 31  "index"
+                              Name 34  "indexable"
+                              Decorate 8(color) Location 0
+                              Decorate 31(index) Flat
+                              Decorate 31(index) Location 0
+                              Decorate 34(indexable) NonWritable
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Output 6(float)
+        8(color):      7(ptr) Variable Output
+               9:             TypeInt 32 0
+              10:      9(int) Constant 16
+              11:             TypeArray 6(float) 10
+              12:    6(float) Constant 1065353216
+              13:    6(float) Constant 1073741824
+              14:    6(float) Constant 1077936128
+              15:    6(float) Constant 1082130432
+              16:    6(float) Constant 1084227584
+              17:    6(float) Constant 1086324736
+              18:    6(float) Constant 1088421888
+              19:    6(float) Constant 1090519040
+              20:    6(float) Constant 1091567616
+              21:    6(float) Constant 1092616192
+              22:    6(float) Constant 1093664768
+              23:    6(float) Constant 1094713344
+              24:    6(float) Constant 1095761920
+              25:    6(float) Constant 1096810496
+              26:    6(float) Constant 1097859072
+              27:    6(float) Constant 1098907648
+              28:          11 ConstantComposite 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
+              29:             TypeInt 32 1
+              30:             TypePointer Input 29(int)
+       31(index):     30(ptr) Variable Input
+              33:             TypePointer Function 11
+              35:             TypePointer Function 6(float)
+         4(main):           2 Function None 3
+               5:             Label
+   34(indexable):     33(ptr) Variable Function 28
+              32:     29(int) Load 31(index)
+              36:     35(ptr) AccessChain 34(indexable) 32
+              37:    6(float) Load 36
+                              Store 8(color) 37
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.1.4.OpCopyLogical.comp.out b/Test/baseResults/spv.1.4.OpCopyLogical.comp.out
new file mode 100644
index 0000000..53e672f
--- /dev/null
+++ b/Test/baseResults/spv.1.4.OpCopyLogical.comp.out
@@ -0,0 +1,150 @@
+spv.1.4.OpCopyLogical.comp
+// Module Version 10400
+// Generated by (magic number): 80008
+// Id's are bound by 65
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 19 27 35 51 60
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 12  "MyStruct"
+                              MemberName 12(MyStruct) 0  "foo"
+                              MemberName 12(MyStruct) 1  "sb"
+                              Name 14  "t"
+                              Name 16  "MyStruct"
+                              MemberName 16(MyStruct) 0  "foo"
+                              MemberName 16(MyStruct) 1  "sb"
+                              Name 17  "SSBO0"
+                              MemberName 17(SSBO0) 0  "a"
+                              Name 19  "inBuf"
+                              Name 25  "SSBO1"
+                              MemberName 25(SSBO1) 0  "b"
+                              Name 27  "outBuf"
+                              Name 32  "MyStruct"
+                              MemberName 32(MyStruct) 0  "foo"
+                              MemberName 32(MyStruct) 1  "sb"
+                              Name 33  "UBO"
+                              MemberName 33(UBO) 0  "c"
+                              Name 35  "uBuf"
+                              Name 44  "Nested"
+                              MemberName 44(Nested) 0  "f"
+                              MemberName 44(Nested) 1  "S"
+                              Name 46  "n"
+                              Name 48  "Nested"
+                              MemberName 48(Nested) 0  "f"
+                              MemberName 48(Nested) 1  "S"
+                              Name 49  "UBON"
+                              MemberName 49(UBON) 0  "N1"
+                              Name 51  "uBufN"
+                              Name 57  "Nested"
+                              MemberName 57(Nested) 0  "f"
+                              MemberName 57(Nested) 1  "S"
+                              Name 58  "SSBO1N"
+                              MemberName 58(SSBO1N) 0  "N2"
+                              Name 60  "outBufN"
+                              Decorate 15 ArrayStride 8
+                              MemberDecorate 16(MyStruct) 0 Offset 0
+                              MemberDecorate 16(MyStruct) 1 Offset 16
+                              MemberDecorate 17(SSBO0) 0 Offset 0
+                              Decorate 17(SSBO0) Block
+                              Decorate 19(inBuf) DescriptorSet 0
+                              Decorate 19(inBuf) Binding 0
+                              MemberDecorate 25(SSBO1) 0 Offset 0
+                              Decorate 25(SSBO1) Block
+                              Decorate 27(outBuf) DescriptorSet 0
+                              Decorate 27(outBuf) Binding 1
+                              Decorate 31 ArrayStride 16
+                              MemberDecorate 32(MyStruct) 0 Offset 0
+                              MemberDecorate 32(MyStruct) 1 Offset 32
+                              MemberDecorate 33(UBO) 0 Offset 0
+                              Decorate 33(UBO) Block
+                              Decorate 35(uBuf) DescriptorSet 0
+                              Decorate 35(uBuf) Binding 2
+                              Decorate 47 ArrayStride 48
+                              MemberDecorate 48(Nested) 0 Offset 0
+                              MemberDecorate 48(Nested) 1 Offset 16
+                              MemberDecorate 49(UBON) 0 Offset 0
+                              Decorate 49(UBON) Block
+                              Decorate 51(uBufN) DescriptorSet 0
+                              Decorate 51(uBufN) Binding 2
+                              Decorate 56 ArrayStride 24
+                              MemberDecorate 57(Nested) 0 Offset 0
+                              MemberDecorate 57(Nested) 1 Offset 8
+                              MemberDecorate 58(SSBO1N) 0 Offset 0
+                              Decorate 58(SSBO1N) Block
+                              Decorate 60(outBufN) DescriptorSet 0
+                              Decorate 60(outBufN) Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 2
+               8:             TypeInt 32 0
+               9:      8(int) Constant 2
+              10:             TypeArray 7(fvec2) 9
+              11:             TypeInt 32 1
+    12(MyStruct):             TypeStruct 10 11(int)
+              13:             TypePointer Function 12(MyStruct)
+              15:             TypeArray 7(fvec2) 9
+    16(MyStruct):             TypeStruct 15 11(int)
+       17(SSBO0):             TypeStruct 16(MyStruct)
+              18:             TypePointer StorageBuffer 17(SSBO0)
+       19(inBuf):     18(ptr) Variable StorageBuffer
+              20:     11(int) Constant 0
+              21:             TypePointer StorageBuffer 16(MyStruct)
+       25(SSBO1):             TypeStruct 16(MyStruct)
+              26:             TypePointer StorageBuffer 25(SSBO1)
+      27(outBuf):     26(ptr) Variable StorageBuffer
+              31:             TypeArray 7(fvec2) 9
+    32(MyStruct):             TypeStruct 31 11(int)
+         33(UBO):             TypeStruct 32(MyStruct)
+              34:             TypePointer Uniform 33(UBO)
+        35(uBuf):     34(ptr) Variable Uniform
+              36:             TypePointer Uniform 32(MyStruct)
+              43:             TypeArray 12(MyStruct) 9
+      44(Nested):             TypeStruct 6(float) 43
+              45:             TypePointer Function 44(Nested)
+              47:             TypeArray 32(MyStruct) 9
+      48(Nested):             TypeStruct 6(float) 47
+        49(UBON):             TypeStruct 48(Nested)
+              50:             TypePointer Uniform 49(UBON)
+       51(uBufN):     50(ptr) Variable Uniform
+              52:             TypePointer Uniform 48(Nested)
+              56:             TypeArray 16(MyStruct) 9
+      57(Nested):             TypeStruct 6(float) 56
+      58(SSBO1N):             TypeStruct 57(Nested)
+              59:             TypePointer StorageBuffer 58(SSBO1N)
+     60(outBufN):     59(ptr) Variable StorageBuffer
+              62:             TypePointer StorageBuffer 57(Nested)
+         4(main):           2 Function None 3
+               5:             Label
+           14(t):     13(ptr) Variable Function
+           46(n):     45(ptr) Variable Function
+              22:     21(ptr) AccessChain 19(inBuf) 20
+              23:16(MyStruct) Load 22
+              24:12(MyStruct) CopyLogical 23
+                              Store 14(t) 24
+              28:12(MyStruct) Load 14(t)
+              29:     21(ptr) AccessChain 27(outBuf) 20
+              30:16(MyStruct) CopyLogical 28
+                              Store 29 30
+              37:     36(ptr) AccessChain 35(uBuf) 20
+              38:32(MyStruct) Load 37
+              39:12(MyStruct) CopyLogical 38
+                              Store 14(t) 39
+              40:12(MyStruct) Load 14(t)
+              41:     21(ptr) AccessChain 27(outBuf) 20
+              42:16(MyStruct) CopyLogical 40
+                              Store 41 42
+              53:     52(ptr) AccessChain 51(uBufN) 20
+              54:  48(Nested) Load 53
+              55:  44(Nested) CopyLogical 54
+                              Store 46(n) 55
+              61:  44(Nested) Load 46(n)
+              63:     62(ptr) AccessChain 60(outBufN) 20
+              64:  57(Nested) CopyLogical 61
+                              Store 63 64
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out b/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out
new file mode 100644
index 0000000..d7509b1
--- /dev/null
+++ b/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out
@@ -0,0 +1,114 @@
+spv.1.4.OpCopyLogical.funcall.frag
+// Module Version 10400
+// Generated by (magic number): 80008
+// Id's are bound by 60
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 25 37
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "S"
+                              MemberName 9(S) 0  "m"
+                              Name 12  "fooConst(struct-S-mf441;"
+                              Name 11  "s"
+                              Name 17  "foo(struct-S-mf441;"
+                              Name 16  "s"
+                              Name 20  "fooOut(struct-S-mf441;"
+                              Name 19  "s"
+                              Name 22  "S"
+                              MemberName 22(S) 0  "m"
+                              Name 23  "blockName"
+                              MemberName 23(blockName) 0  "s1"
+                              Name 25  ""
+                              Name 31  "S"
+                              MemberName 31(S) 0  "m"
+                              Name 32  "arg"
+                              Name 37  "s2"
+                              Name 40  "param"
+                              Name 45  "param"
+                              Name 48  "param"
+                              Name 56  "param"
+                              MemberDecorate 22(S) 0 ColMajor
+                              MemberDecorate 22(S) 0 Offset 0
+                              MemberDecorate 22(S) 0 MatrixStride 16
+                              MemberDecorate 23(blockName) 0 Offset 0
+                              Decorate 23(blockName) Block
+                              Decorate 25 DescriptorSet 0
+                              Decorate 25 Binding 0
+                              MemberDecorate 31(S) 0 ColMajor
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeMatrix 7(fvec4) 4
+            9(S):             TypeStruct 8
+              10:             TypeFunction 2 9(S)
+              14:             TypePointer Function 9(S)
+              15:             TypeFunction 2 14(ptr)
+           22(S):             TypeStruct 8
+   23(blockName):             TypeStruct 22(S)
+              24:             TypePointer StorageBuffer 23(blockName)
+              25:     24(ptr) Variable StorageBuffer
+              26:             TypeInt 32 1
+              27:     26(int) Constant 0
+              28:             TypePointer StorageBuffer 22(S)
+           31(S):             TypeStruct 8
+              36:             TypePointer Private 9(S)
+          37(s2):     36(ptr) Variable Private
+         4(main):           2 Function None 3
+               5:             Label
+         32(arg):     14(ptr) Variable Function
+       40(param):     14(ptr) Variable Function
+       45(param):     14(ptr) Variable Function
+       48(param):     14(ptr) Variable Function
+       56(param):     14(ptr) Variable Function
+              29:     28(ptr) AccessChain 25 27
+              30:       22(S) Load 29
+              33:        9(S) CopyLogical 30
+                              Store 32(arg) 33
+              34:        9(S) Load 32(arg)
+              35:           2 FunctionCall 12(fooConst(struct-S-mf441;) 34
+              38:        9(S) Load 37(s2)
+              39:           2 FunctionCall 12(fooConst(struct-S-mf441;) 38
+              41:     28(ptr) AccessChain 25 27
+              42:       22(S) Load 41
+              43:        9(S) CopyLogical 42
+                              Store 40(param) 43
+              44:           2 FunctionCall 17(foo(struct-S-mf441;) 40(param)
+              46:        9(S) Load 37(s2)
+                              Store 45(param) 46
+              47:           2 FunctionCall 17(foo(struct-S-mf441;) 45(param)
+              49:     28(ptr) AccessChain 25 27
+              50:       22(S) Load 49
+              51:        9(S) CopyLogical 50
+                              Store 48(param) 51
+              52:           2 FunctionCall 20(fooOut(struct-S-mf441;) 48(param)
+              53:        9(S) Load 48(param)
+              54:     28(ptr) AccessChain 25 27
+              55:       22(S) CopyLogical 53
+                              Store 54 55
+              57:        9(S) Load 37(s2)
+                              Store 56(param) 57
+              58:           2 FunctionCall 20(fooOut(struct-S-mf441;) 56(param)
+              59:        9(S) Load 56(param)
+                              Store 37(s2) 59
+                              Return
+                              FunctionEnd
+12(fooConst(struct-S-mf441;):           2 Function None 10
+           11(s):        9(S) FunctionParameter
+              13:             Label
+                              Return
+                              FunctionEnd
+17(foo(struct-S-mf441;):           2 Function None 15
+           16(s):     14(ptr) FunctionParameter
+              18:             Label
+                              Return
+                              FunctionEnd
+20(fooOut(struct-S-mf441;):           2 Function None 15
+           19(s):     14(ptr) FunctionParameter
+              21:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out b/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out
new file mode 100644
index 0000000..2b60625
--- /dev/null
+++ b/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out
@@ -0,0 +1,232 @@
+spv.1.4.OpCopyLogicalBool.comp
+// Module Version 10400
+// Generated by (magic number): 80008
+// Id's are bound by 135
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 19 37 53 79 109
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 12  "MyStruct"
+                              MemberName 12(MyStruct) 0  "foo"
+                              MemberName 12(MyStruct) 1  "sb"
+                              Name 14  "t"
+                              Name 16  "MyStruct"
+                              MemberName 16(MyStruct) 0  "foo"
+                              MemberName 16(MyStruct) 1  "sb"
+                              Name 17  "SSBO0"
+                              MemberName 17(SSBO0) 0  "a"
+                              Name 19  "inBuf"
+                              Name 35  "SSBO1"
+                              MemberName 35(SSBO1) 0  "b"
+                              Name 37  "outBuf"
+                              Name 50  "MyStruct"
+                              MemberName 50(MyStruct) 0  "foo"
+                              MemberName 50(MyStruct) 1  "sb"
+                              Name 51  "UBO"
+                              MemberName 51(UBO) 0  "c"
+                              Name 53  "uBuf"
+                              Name 72  "Nested"
+                              MemberName 72(Nested) 0  "b"
+                              MemberName 72(Nested) 1  "S"
+                              Name 74  "n"
+                              Name 76  "Nested"
+                              MemberName 76(Nested) 0  "b"
+                              MemberName 76(Nested) 1  "S"
+                              Name 77  "UBON"
+                              MemberName 77(UBON) 0  "N1"
+                              Name 79  "uBufN"
+                              Name 106  "Nested"
+                              MemberName 106(Nested) 0  "b"
+                              MemberName 106(Nested) 1  "S"
+                              Name 107  "SSBO1N"
+                              MemberName 107(SSBO1N) 0  "N2"
+                              Name 109  "outBufN"
+                              Decorate 15 ArrayStride 8
+                              MemberDecorate 16(MyStruct) 0 Offset 0
+                              MemberDecorate 16(MyStruct) 1 Offset 16
+                              MemberDecorate 17(SSBO0) 0 Offset 0
+                              Decorate 17(SSBO0) Block
+                              Decorate 19(inBuf) DescriptorSet 0
+                              Decorate 19(inBuf) Binding 0
+                              MemberDecorate 35(SSBO1) 0 Offset 0
+                              Decorate 35(SSBO1) Block
+                              Decorate 37(outBuf) DescriptorSet 0
+                              Decorate 37(outBuf) Binding 1
+                              Decorate 49 ArrayStride 16
+                              MemberDecorate 50(MyStruct) 0 Offset 0
+                              MemberDecorate 50(MyStruct) 1 Offset 32
+                              MemberDecorate 51(UBO) 0 Offset 0
+                              Decorate 51(UBO) Block
+                              Decorate 53(uBuf) DescriptorSet 0
+                              Decorate 53(uBuf) Binding 2
+                              Decorate 75 ArrayStride 48
+                              MemberDecorate 76(Nested) 0 Offset 0
+                              MemberDecorate 76(Nested) 1 Offset 16
+                              MemberDecorate 77(UBON) 0 Offset 0
+                              Decorate 77(UBON) Block
+                              Decorate 79(uBufN) DescriptorSet 0
+                              Decorate 79(uBufN) Binding 2
+                              Decorate 105 ArrayStride 24
+                              MemberDecorate 106(Nested) 0 Offset 0
+                              MemberDecorate 106(Nested) 1 Offset 8
+                              MemberDecorate 107(SSBO1N) 0 Offset 0
+                              Decorate 107(SSBO1N) Block
+                              Decorate 109(outBufN) DescriptorSet 0
+                              Decorate 109(outBufN) Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 2
+               8:             TypeInt 32 0
+               9:      8(int) Constant 2
+              10:             TypeArray 7(fvec2) 9
+              11:             TypeBool
+    12(MyStruct):             TypeStruct 10 11(bool)
+              13:             TypePointer Function 12(MyStruct)
+              15:             TypeArray 7(fvec2) 9
+    16(MyStruct):             TypeStruct 15 8(int)
+       17(SSBO0):             TypeStruct 16(MyStruct)
+              18:             TypePointer StorageBuffer 17(SSBO0)
+       19(inBuf):     18(ptr) Variable StorageBuffer
+              20:             TypeInt 32 1
+              21:     20(int) Constant 0
+              22:             TypePointer StorageBuffer 16(MyStruct)
+              26:             TypePointer Function 10
+              30:     20(int) Constant 1
+              31:      8(int) Constant 0
+              33:             TypePointer Function 11(bool)
+       35(SSBO1):             TypeStruct 16(MyStruct)
+              36:             TypePointer StorageBuffer 35(SSBO1)
+      37(outBuf):     36(ptr) Variable StorageBuffer
+              41:             TypePointer StorageBuffer 15
+              45:      8(int) Constant 1
+              47:             TypePointer StorageBuffer 8(int)
+              49:             TypeArray 7(fvec2) 9
+    50(MyStruct):             TypeStruct 49 8(int)
+         51(UBO):             TypeStruct 50(MyStruct)
+              52:             TypePointer Uniform 51(UBO)
+        53(uBuf):     52(ptr) Variable Uniform
+              54:             TypePointer Uniform 50(MyStruct)
+              71:             TypeArray 12(MyStruct) 9
+      72(Nested):             TypeStruct 11(bool) 71
+              73:             TypePointer Function 72(Nested)
+              75:             TypeArray 50(MyStruct) 9
+      76(Nested):             TypeStruct 8(int) 75
+        77(UBON):             TypeStruct 76(Nested)
+              78:             TypePointer Uniform 77(UBON)
+       79(uBufN):     78(ptr) Variable Uniform
+              80:             TypePointer Uniform 76(Nested)
+              87:             TypePointer Function 71
+             105:             TypeArray 16(MyStruct) 9
+     106(Nested):             TypeStruct 8(int) 105
+     107(SSBO1N):             TypeStruct 106(Nested)
+             108:             TypePointer StorageBuffer 107(SSBO1N)
+    109(outBufN):    108(ptr) Variable StorageBuffer
+             111:             TypePointer StorageBuffer 106(Nested)
+             117:             TypePointer StorageBuffer 105
+         4(main):           2 Function None 3
+               5:             Label
+           14(t):     13(ptr) Variable Function
+           74(n):     73(ptr) Variable Function
+              23:     22(ptr) AccessChain 19(inBuf) 21
+              24:16(MyStruct) Load 23
+              25:          15 CompositeExtract 24 0
+              27:     26(ptr) AccessChain 14(t) 21
+              28:          10 CopyLogical 25
+                              Store 27 28
+              29:      8(int) CompositeExtract 24 1
+              32:    11(bool) INotEqual 29 31
+              34:     33(ptr) AccessChain 14(t) 30
+                              Store 34 32
+              38:12(MyStruct) Load 14(t)
+              39:     22(ptr) AccessChain 37(outBuf) 21
+              40:          10 CompositeExtract 38 0
+              42:     41(ptr) AccessChain 39 21
+              43:          15 CopyLogical 40
+                              Store 42 43
+              44:    11(bool) CompositeExtract 38 1
+              46:      8(int) Select 44 45 31
+              48:     47(ptr) AccessChain 39 30
+                              Store 48 46
+              55:     54(ptr) AccessChain 53(uBuf) 21
+              56:50(MyStruct) Load 55
+              57:          49 CompositeExtract 56 0
+              58:     26(ptr) AccessChain 14(t) 21
+              59:          10 CopyLogical 57
+                              Store 58 59
+              60:      8(int) CompositeExtract 56 1
+              61:    11(bool) INotEqual 60 31
+              62:     33(ptr) AccessChain 14(t) 30
+                              Store 62 61
+              63:12(MyStruct) Load 14(t)
+              64:     22(ptr) AccessChain 37(outBuf) 21
+              65:          10 CompositeExtract 63 0
+              66:     41(ptr) AccessChain 64 21
+              67:          15 CopyLogical 65
+                              Store 66 67
+              68:    11(bool) CompositeExtract 63 1
+              69:      8(int) Select 68 45 31
+              70:     47(ptr) AccessChain 64 30
+                              Store 70 69
+              81:     80(ptr) AccessChain 79(uBufN) 21
+              82:  76(Nested) Load 81
+              83:      8(int) CompositeExtract 82 0
+              84:    11(bool) INotEqual 83 31
+              85:     33(ptr) AccessChain 74(n) 21
+                              Store 85 84
+              86:          75 CompositeExtract 82 1
+              88:     87(ptr) AccessChain 74(n) 30
+              89:50(MyStruct) CompositeExtract 86 0
+              90:     13(ptr) AccessChain 88 21
+              91:          49 CompositeExtract 89 0
+              92:     26(ptr) AccessChain 90 21
+              93:          10 CopyLogical 91
+                              Store 92 93
+              94:      8(int) CompositeExtract 89 1
+              95:    11(bool) INotEqual 94 31
+              96:     33(ptr) AccessChain 90 30
+                              Store 96 95
+              97:50(MyStruct) CompositeExtract 86 1
+              98:     13(ptr) AccessChain 88 30
+              99:          49 CompositeExtract 97 0
+             100:     26(ptr) AccessChain 98 21
+             101:          10 CopyLogical 99
+                              Store 100 101
+             102:      8(int) CompositeExtract 97 1
+             103:    11(bool) INotEqual 102 31
+             104:     33(ptr) AccessChain 98 30
+                              Store 104 103
+             110:  72(Nested) Load 74(n)
+             112:    111(ptr) AccessChain 109(outBufN) 21
+             113:    11(bool) CompositeExtract 110 0
+             114:      8(int) Select 113 45 31
+             115:     47(ptr) AccessChain 112 21
+                              Store 115 114
+             116:          71 CompositeExtract 110 1
+             118:    117(ptr) AccessChain 112 30
+             119:12(MyStruct) CompositeExtract 116 0
+             120:     22(ptr) AccessChain 118 21
+             121:          10 CompositeExtract 119 0
+             122:     41(ptr) AccessChain 120 21
+             123:          15 CopyLogical 121
+                              Store 122 123
+             124:    11(bool) CompositeExtract 119 1
+             125:      8(int) Select 124 45 31
+             126:     47(ptr) AccessChain 120 30
+                              Store 126 125
+             127:12(MyStruct) CompositeExtract 116 1
+             128:     22(ptr) AccessChain 118 30
+             129:          10 CompositeExtract 127 0
+             130:     41(ptr) AccessChain 128 21
+             131:          15 CopyLogical 129
+                              Store 130 131
+             132:    11(bool) CompositeExtract 127 1
+             133:      8(int) Select 132 45 31
+             134:     47(ptr) AccessChain 128 30
+                              Store 134 133
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.1.4.OpEntryPoint.frag.out b/Test/baseResults/spv.1.4.OpEntryPoint.frag.out
new file mode 100644
index 0000000..f06960c
--- /dev/null
+++ b/Test/baseResults/spv.1.4.OpEntryPoint.frag.out
@@ -0,0 +1,106 @@
+spv.1.4.OpEntryPoint.frag
+// Module Version 10400
+// Generated by (magic number): 80008
+// Id's are bound by 64
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 11 14 17 25 33 41
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "functionv"
+                              Name 11  "inv"
+                              Name 14  "globalv"
+                              Name 17  "outv"
+                              Name 23  "ubt"
+                              MemberName 23(ubt) 0  "v"
+                              Name 25  "uniformv"
+                              Name 31  "pushB"
+                              MemberName 31(pushB) 0  "a"
+                              Name 33  "pushv"
+                              Name 39  "bbt"
+                              MemberName 39(bbt) 0  "f"
+                              Name 41  "bufferv"
+                              Decorate 11(inv) Location 0
+                              Decorate 17(outv) Location 0
+                              MemberDecorate 23(ubt) 0 Offset 0
+                              Decorate 23(ubt) Block
+                              Decorate 25(uniformv) DescriptorSet 0
+                              Decorate 25(uniformv) Binding 0
+                              MemberDecorate 31(pushB) 0 Offset 0
+                              Decorate 31(pushB) Block
+                              Decorate 33(pushv) Binding 2
+                              MemberDecorate 39(bbt) 0 Offset 0
+                              Decorate 39(bbt) Block
+                              Decorate 41(bufferv) DescriptorSet 0
+                              Decorate 41(bufferv) Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypePointer Input 7(fvec4)
+         11(inv):     10(ptr) Variable Input
+              13:             TypePointer Private 7(fvec4)
+     14(globalv):     13(ptr) Variable Private
+              16:             TypePointer Output 7(fvec4)
+        17(outv):     16(ptr) Variable Output
+         23(ubt):             TypeStruct 7(fvec4)
+              24:             TypePointer Uniform 23(ubt)
+    25(uniformv):     24(ptr) Variable Uniform
+              26:             TypeInt 32 1
+              27:     26(int) Constant 0
+              28:             TypePointer Uniform 7(fvec4)
+       31(pushB):             TypeStruct 26(int)
+              32:             TypePointer PushConstant 31(pushB)
+       33(pushv):     32(ptr) Variable PushConstant
+              34:             TypePointer PushConstant 26(int)
+         39(bbt):             TypeStruct 6(float)
+              40:             TypePointer StorageBuffer 39(bbt)
+     41(bufferv):     40(ptr) Variable StorageBuffer
+              42:             TypePointer StorageBuffer 6(float)
+         4(main):           2 Function None 3
+               5:             Label
+    9(functionv):      8(ptr) Variable Function
+              12:    7(fvec4) Load 11(inv)
+                              Store 9(functionv) 12
+              15:    7(fvec4) Load 11(inv)
+                              Store 14(globalv) 15
+              18:    7(fvec4) Load 9(functionv)
+              19:    7(fvec4) Load 11(inv)
+              20:    7(fvec4) FAdd 18 19
+              21:    7(fvec4) Load 14(globalv)
+              22:    7(fvec4) FAdd 20 21
+              29:     28(ptr) AccessChain 25(uniformv) 27
+              30:    7(fvec4) Load 29
+              35:     34(ptr) AccessChain 33(pushv) 27
+              36:     26(int) Load 35
+              37:    6(float) ConvertSToF 36
+              38:    7(fvec4) VectorTimesScalar 30 37
+              43:     42(ptr) AccessChain 41(bufferv) 27
+              44:    6(float) Load 43
+              45:    7(fvec4) VectorTimesScalar 38 44
+              46:    7(fvec4) FAdd 22 45
+                              Store 17(outv) 46
+              47:    7(fvec4) Load 9(functionv)
+              48:    7(fvec4) Load 11(inv)
+              49:    7(fvec4) FAdd 47 48
+              50:    7(fvec4) Load 14(globalv)
+              51:    7(fvec4) FAdd 49 50
+              52:     28(ptr) AccessChain 25(uniformv) 27
+              53:    7(fvec4) Load 52
+              54:     34(ptr) AccessChain 33(pushv) 27
+              55:     26(int) Load 54
+              56:    6(float) ConvertSToF 55
+              57:    7(fvec4) VectorTimesScalar 53 56
+              58:     42(ptr) AccessChain 41(bufferv) 27
+              59:    6(float) Load 58
+              60:    7(fvec4) VectorTimesScalar 57 59
+              61:    7(fvec4) FAdd 51 60
+              62:    7(fvec4) Load 17(outv)
+              63:    7(fvec4) FAdd 62 61
+                              Store 17(outv) 63
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.1.4.OpSelect.frag.out b/Test/baseResults/spv.1.4.OpSelect.frag.out
new file mode 100755
index 0000000..6ba00a4
--- /dev/null
+++ b/Test/baseResults/spv.1.4.OpSelect.frag.out
@@ -0,0 +1,152 @@
+spv.1.4.OpSelect.frag
+// Module Version 10400
+// Generated by (magic number): 80008
+// Id's are bound by 98
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 17 20 82 84
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 6  "fun1("
+                              Name 8  "fun2("
+                              Name 12  "f1"
+                              Name 14  "f2"
+                              Name 17  "outv"
+                              Name 20  "cond"
+                              Name 30  "iv1"
+                              Name 34  "iv2"
+                              Name 53  "m1"
+                              Name 59  "m2"
+                              Name 75  "S1"
+                              MemberName 75(S1) 0  "a"
+                              MemberName 75(S1) 1  "b"
+                              Name 77  "fv"
+                              Name 82  "in1"
+                              Name 84  "in2"
+                              Decorate 17(outv) Location 0
+                              Decorate 20(cond) Flat
+                              Decorate 20(cond) Location 4
+                              Decorate 82(in1) Flat
+                              Decorate 82(in1) Location 0
+                              Decorate 84(in2) Flat
+                              Decorate 84(in2) Location 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+              10:             TypeFloat 32
+              11:             TypePointer Function 10(float)
+              13:   10(float) Constant 1065353216
+              15:   10(float) Constant 1073741824
+              16:             TypePointer Output 10(float)
+        17(outv):     16(ptr) Variable Output
+              18:             TypeInt 32 1
+              19:             TypePointer Input 18(int)
+        20(cond):     19(ptr) Variable Input
+              22:     18(int) Constant 8
+              23:             TypeBool
+              28:             TypeVector 18(int) 4
+              29:             TypePointer Function 28(ivec4)
+              39:     18(int) Constant 0
+              44:             TypeInt 32 0
+              45:     44(int) Constant 2
+              50:             TypeVector 10(float) 3
+              51:             TypeMatrix 50(fvec3) 3
+              52:             TypePointer Function 51
+              54:   10(float) Constant 0
+              55:   50(fvec3) ConstantComposite 13 54 54
+              56:   50(fvec3) ConstantComposite 54 13 54
+              57:   50(fvec3) ConstantComposite 54 54 13
+              58:          51 ConstantComposite 55 56 57
+              60:   50(fvec3) ConstantComposite 15 54 54
+              61:   50(fvec3) ConstantComposite 54 15 54
+              62:   50(fvec3) ConstantComposite 54 54 15
+              63:          51 ConstantComposite 60 61 62
+              65:     18(int) Constant 20
+              70:     18(int) Constant 2
+              71:     44(int) Constant 1
+          75(S1):             TypeStruct 10(float) 18(int)
+              76:             TypePointer Function 75(S1)
+              79:     18(int) Constant 5
+              81:             TypePointer Input 75(S1)
+         82(in1):     81(ptr) Variable Input
+         84(in2):     81(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+          12(f1):     11(ptr) Variable Function
+          14(f2):     11(ptr) Variable Function
+         30(iv1):     29(ptr) Variable Function
+         34(iv2):     29(ptr) Variable Function
+          53(m1):     52(ptr) Variable Function
+          59(m2):     52(ptr) Variable Function
+          77(fv):     76(ptr) Variable Function
+                              Store 12(f1) 13
+                              Store 14(f2) 15
+              21:     18(int) Load 20(cond)
+              24:    23(bool) SLessThan 21 22
+              25:   10(float) Load 12(f1)
+              26:   10(float) Load 14(f2)
+              27:   10(float) Select 24 25 26
+                              Store 17(outv) 27
+              31:   10(float) Load 12(f1)
+              32:     18(int) ConvertFToS 31
+              33:   28(ivec4) CompositeConstruct 32 32 32 32
+                              Store 30(iv1) 33
+              35:   10(float) Load 14(f2)
+              36:     18(int) ConvertFToS 35
+              37:   28(ivec4) CompositeConstruct 36 36 36 36
+                              Store 34(iv2) 37
+              38:     18(int) Load 20(cond)
+              40:    23(bool) SGreaterThan 38 39
+              41:   28(ivec4) Load 30(iv1)
+              42:   28(ivec4) Load 34(iv2)
+              43:   28(ivec4) Select 40 41 42
+              46:     18(int) CompositeExtract 43 2
+              47:   10(float) ConvertSToF 46
+              48:   10(float) Load 17(outv)
+              49:   10(float) FMul 48 47
+                              Store 17(outv) 49
+                              Store 53(m1) 58
+                              Store 59(m2) 63
+              64:     18(int) Load 20(cond)
+              66:    23(bool) SLessThan 64 65
+              67:          51 Load 53(m1)
+              68:          51 Load 59(m2)
+              69:          51 Select 66 67 68
+              72:   10(float) CompositeExtract 69 2 1
+              73:   10(float) Load 17(outv)
+              74:   10(float) FMul 73 72
+                              Store 17(outv) 74
+              78:     18(int) Load 20(cond)
+              80:    23(bool) SGreaterThan 78 79
+              83:      75(S1) Load 82(in1)
+              85:      75(S1) Load 84(in2)
+              86:      75(S1) Select 80 83 85
+                              Store 77(fv) 86
+              87:     11(ptr) AccessChain 77(fv) 39
+              88:   10(float) Load 87
+              89:   10(float) Load 17(outv)
+              90:   10(float) FMul 89 88
+                              Store 17(outv) 90
+              91:     18(int) Load 20(cond)
+              92:    23(bool) SGreaterThan 91 39
+                              SelectionMerge 94 None
+                              BranchConditional 92 93 96
+              93:               Label
+              95:           2   FunctionCall 6(fun1()
+                                Branch 94
+              96:               Label
+              97:           2   FunctionCall 8(fun2()
+                                Branch 94
+              94:             Label
+                              Return
+                              FunctionEnd
+        6(fun1():           2 Function None 3
+               7:             Label
+                              Return
+                              FunctionEnd
+        8(fun2():           2 Function None 3
+               9:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.1.4.constructComposite.comp.out b/Test/baseResults/spv.1.4.constructComposite.comp.out
new file mode 100644
index 0000000..e514286
--- /dev/null
+++ b/Test/baseResults/spv.1.4.constructComposite.comp.out
@@ -0,0 +1,62 @@
+spv.1.4.constructComposite.comp
+// Module Version 10400
+// Generated by (magic number): 80008
+// Id's are bound by 27
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 15
+                              ExecutionMode 4 LocalSize 64 1 1
+                              Source GLSL 460
+                              Name 4  "main"
+                              Name 7  "sA"
+                              MemberName 7(sA) 0  "x"
+                              MemberName 7(sA) 1  "y"
+                              Name 8  "sC"
+                              MemberName 8(sC) 0  "state"
+                              Name 10  "c"
+                              Name 11  "sA"
+                              MemberName 11(sA) 0  "x"
+                              MemberName 11(sA) 1  "y"
+                              Name 12  "sB"
+                              MemberName 12(sB) 0  "a"
+                              Name 13  "ubo"
+                              MemberName 13(ubo) 0  "b"
+                              Name 15  ""
+                              MemberDecorate 11(sA) 0 Offset 0
+                              MemberDecorate 11(sA) 1 Offset 4
+                              MemberDecorate 12(sB) 0 Offset 0
+                              MemberDecorate 13(ubo) 0 Offset 0
+                              Decorate 13(ubo) Block
+                              Decorate 15 DescriptorSet 0
+                              Decorate 15 Binding 0
+                              Decorate 26 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+           7(sA):             TypeStruct 6(int) 6(int)
+           8(sC):             TypeStruct 7(sA)
+               9:             TypePointer Private 8(sC)
+           10(c):      9(ptr) Variable Private
+          11(sA):             TypeStruct 6(int) 6(int)
+          12(sB):             TypeStruct 11(sA)
+         13(ubo):             TypeStruct 12(sB)
+              14:             TypePointer Uniform 13(ubo)
+              15:     14(ptr) Variable Uniform
+              16:      6(int) Constant 0
+              17:             TypePointer Uniform 11(sA)
+              22:             TypeInt 32 0
+              23:             TypeVector 22(int) 3
+              24:     22(int) Constant 64
+              25:     22(int) Constant 1
+              26:   23(ivec3) ConstantComposite 24 25 25
+         4(main):           2 Function None 3
+               5:             Label
+              18:     17(ptr) AccessChain 15 16 16
+              19:      11(sA) Load 18
+              20:       7(sA) CopyLogical 19
+              21:       8(sC) CompositeConstruct 20
+                              Store 10(c) 21
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.1.4.image.frag.out b/Test/baseResults/spv.1.4.image.frag.out
new file mode 100755
index 0000000..98ffdcb
--- /dev/null
+++ b/Test/baseResults/spv.1.4.image.frag.out
@@ -0,0 +1,159 @@
+spv.1.4.image.frag
+// Module Version 10400
+// Generated by (magic number): 80008
+// Id's are bound by 104
+
+                              Capability Shader
+                              Capability StorageImageMultisample
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 26 30 40 52 64 77 89 100 103
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "v"
+                              Name 15  "iv"
+                              Name 21  "uv"
+                              Name 26  "i2D"
+                              Name 30  "ic2D"
+                              Name 40  "ii2D"
+                              Name 52  "ui2D"
+                              Name 64  "i2DMS"
+                              Name 77  "ii2DMS"
+                              Name 89  "ui2DMS"
+                              Name 100  "fragData"
+                              Name 103  "value"
+                              Decorate 26(i2D) DescriptorSet 0
+                              Decorate 26(i2D) Binding 1
+                              Decorate 30(ic2D) Flat
+                              Decorate 40(ii2D) DescriptorSet 0
+                              Decorate 40(ii2D) Binding 12
+                              Decorate 52(ui2D) DescriptorSet 0
+                              Decorate 52(ui2D) Binding 12
+                              Decorate 64(i2DMS) DescriptorSet 0
+                              Decorate 64(i2DMS) Binding 9
+                              Decorate 77(ii2DMS) DescriptorSet 0
+                              Decorate 77(ii2DMS) Binding 13
+                              Decorate 89(ui2DMS) DescriptorSet 0
+                              Decorate 89(ui2DMS) Binding 13
+                              Decorate 103(value) Flat
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:    6(float) Constant 0
+              11:    7(fvec4) ConstantComposite 10 10 10 10
+              12:             TypeInt 32 1
+              13:             TypeVector 12(int) 4
+              14:             TypePointer Function 13(ivec4)
+              16:     12(int) Constant 0
+              17:   13(ivec4) ConstantComposite 16 16 16 16
+              18:             TypeInt 32 0
+              19:             TypeVector 18(int) 4
+              20:             TypePointer Function 19(ivec4)
+              22:     18(int) Constant 0
+              23:   19(ivec4) ConstantComposite 22 22 22 22
+              24:             TypeImage 6(float) 2D nonsampled format:Rgba32f
+              25:             TypePointer UniformConstant 24
+         26(i2D):     25(ptr) Variable UniformConstant
+              28:             TypeVector 12(int) 2
+              29:             TypePointer Input 28(ivec2)
+        30(ic2D):     29(ptr) Variable Input
+              38:             TypeImage 12(int) 2D nonsampled format:R32i
+              39:             TypePointer UniformConstant 38
+        40(ii2D):     39(ptr) Variable UniformConstant
+              50:             TypeImage 18(int) 2D nonsampled format:R32ui
+              51:             TypePointer UniformConstant 50
+        52(ui2D):     51(ptr) Variable UniformConstant
+              62:             TypeImage 6(float) 2D multi-sampled nonsampled format:Rgba32f
+              63:             TypePointer UniformConstant 62
+       64(i2DMS):     63(ptr) Variable UniformConstant
+              67:     12(int) Constant 1
+              73:     12(int) Constant 2
+              75:             TypeImage 12(int) 2D multi-sampled nonsampled format:R32i
+              76:             TypePointer UniformConstant 75
+      77(ii2DMS):     76(ptr) Variable UniformConstant
+              87:             TypeImage 18(int) 2D multi-sampled nonsampled format:R32ui
+              88:             TypePointer UniformConstant 87
+      89(ui2DMS):     88(ptr) Variable UniformConstant
+              99:             TypePointer Output 7(fvec4)
+   100(fragData):     99(ptr) Variable Output
+             102:             TypePointer Input 18(int)
+      103(value):    102(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+            9(v):      8(ptr) Variable Function
+          15(iv):     14(ptr) Variable Function
+          21(uv):     20(ptr) Variable Function
+                              Store 9(v) 11
+                              Store 15(iv) 17
+                              Store 21(uv) 23
+              27:          24 Load 26(i2D)
+              31:   28(ivec2) Load 30(ic2D)
+              32:    7(fvec4) ImageRead 27 31
+              33:    7(fvec4) Load 9(v)
+              34:    7(fvec4) FAdd 33 32
+                              Store 9(v) 34
+              35:          24 Load 26(i2D)
+              36:   28(ivec2) Load 30(ic2D)
+              37:    7(fvec4) Load 9(v)
+                              ImageWrite 35 36 37
+              41:          38 Load 40(ii2D)
+              42:   28(ivec2) Load 30(ic2D)
+              43:   13(ivec4) ImageRead 41 42 SignExtend 
+              44:    7(fvec4) ConvertSToF 43
+              45:    7(fvec4) Load 9(v)
+              46:    7(fvec4) FAdd 45 44
+                              Store 9(v) 46
+              47:          38 Load 40(ii2D)
+              48:   28(ivec2) Load 30(ic2D)
+              49:   13(ivec4) Load 15(iv)
+                              ImageWrite 47 48 49 SignExtend 
+              53:          50 Load 52(ui2D)
+              54:   28(ivec2) Load 30(ic2D)
+              55:   19(ivec4) ImageRead 53 54 ZeroExtend 
+              56:    7(fvec4) ConvertUToF 55
+              57:    7(fvec4) Load 9(v)
+              58:    7(fvec4) FAdd 57 56
+                              Store 9(v) 58
+              59:          50 Load 52(ui2D)
+              60:   28(ivec2) Load 30(ic2D)
+              61:   19(ivec4) Load 21(uv)
+                              ImageWrite 59 60 61 ZeroExtend 
+              65:          62 Load 64(i2DMS)
+              66:   28(ivec2) Load 30(ic2D)
+              68:    7(fvec4) ImageRead 65 66 Sample 67
+              69:    7(fvec4) Load 9(v)
+              70:    7(fvec4) FAdd 69 68
+                              Store 9(v) 70
+              71:          62 Load 64(i2DMS)
+              72:   28(ivec2) Load 30(ic2D)
+              74:    7(fvec4) Load 9(v)
+                              ImageWrite 71 72 74 Sample 73
+              78:          75 Load 77(ii2DMS)
+              79:   28(ivec2) Load 30(ic2D)
+              80:   13(ivec4) ImageRead 78 79 Sample SignExtend 67
+              81:    7(fvec4) ConvertSToF 80
+              82:    7(fvec4) Load 9(v)
+              83:    7(fvec4) FAdd 82 81
+                              Store 9(v) 83
+              84:          75 Load 77(ii2DMS)
+              85:   28(ivec2) Load 30(ic2D)
+              86:   13(ivec4) Load 15(iv)
+                              ImageWrite 84 85 86 Sample SignExtend 73
+              90:          87 Load 89(ui2DMS)
+              91:   28(ivec2) Load 30(ic2D)
+              92:   19(ivec4) ImageRead 90 91 Sample ZeroExtend 67
+              93:    7(fvec4) ConvertUToF 92
+              94:    7(fvec4) Load 9(v)
+              95:    7(fvec4) FAdd 94 93
+                              Store 9(v) 95
+              96:          87 Load 89(ui2DMS)
+              97:   28(ivec2) Load 30(ic2D)
+              98:   19(ivec4) Load 21(uv)
+                              ImageWrite 96 97 98 Sample ZeroExtend 73
+             101:    7(fvec4) Load 9(v)
+                              Store 100(fragData) 101
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.1.4.sparseTexture.frag.out b/Test/baseResults/spv.1.4.sparseTexture.frag.out
new file mode 100755
index 0000000..3b566c7
--- /dev/null
+++ b/Test/baseResults/spv.1.4.sparseTexture.frag.out
@@ -0,0 +1,326 @@
+spv.1.4.sparseTexture.frag
+// Module Version 10400
+// Generated by (magic number): 80008
+// Id's are bound by 213
+
+                              Capability Shader
+                              Capability StorageImageMultisample
+                              Capability SparseResidency
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 29 33 42 46 59 63 84 96 119 133 149 152 159 162 177 181 189 206 208 212
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_ARB_sparse_texture2"
+                              Name 4  "main"
+                              Name 8  "resident"
+                              Name 13  "texel"
+                              Name 18  "itexel"
+                              Name 23  "utexel"
+                              Name 29  "s2D"
+                              Name 33  "c2"
+                              Name 35  "ResType"
+                              Name 42  "tempReturn"
+                              Name 46  "is2D"
+                              Name 49  "tempArg"
+                              Name 50  "ResType"
+                              Name 59  "tempReturn"
+                              Name 63  "us2D"
+                              Name 66  "tempArg"
+                              Name 67  "ResType"
+                              Name 84  "tempReturn"
+                              Name 87  "tempArg"
+                              Name 96  "tempReturn"
+                              Name 99  "tempArg"
+                              Name 119  "tempReturn"
+                              Name 123  "tempArg"
+                              Name 133  "tempReturn"
+                              Name 137  "tempArg"
+                              Name 149  "i2D"
+                              Name 152  "ic2"
+                              Name 159  "tempReturn"
+                              Name 162  "ii2DMS"
+                              Name 166  "tempArg"
+                              Name 177  "ui3D"
+                              Name 181  "ic3"
+                              Name 189  "outColor"
+                              Name 206  "c3"
+                              Name 208  "c4"
+                              Name 212  "offsets"
+                              Decorate 29(s2D) DescriptorSet 0
+                              Decorate 29(s2D) Binding 0
+                              Decorate 46(is2D) DescriptorSet 0
+                              Decorate 46(is2D) Binding 0
+                              Decorate 63(us2D) DescriptorSet 0
+                              Decorate 63(us2D) Binding 0
+                              Decorate 149(i2D) DescriptorSet 0
+                              Decorate 149(i2D) Binding 0
+                              Decorate 152(ic2) Flat
+                              Decorate 162(ii2DMS) DescriptorSet 0
+                              Decorate 162(ii2DMS) Binding 0
+                              Decorate 177(ui3D) DescriptorSet 0
+                              Decorate 177(ui3D) Binding 0
+                              Decorate 181(ic3) Flat
+                              Decorate 212(offsets) Flat
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 0
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 4
+              12:             TypePointer Function 11(fvec4)
+              14:   10(float) Constant 0
+              15:   11(fvec4) ConstantComposite 14 14 14 14
+              16:             TypeVector 6(int) 4
+              17:             TypePointer Function 16(ivec4)
+              19:   16(ivec4) ConstantComposite 9 9 9 9
+              20:             TypeInt 32 0
+              21:             TypeVector 20(int) 4
+              22:             TypePointer Function 21(ivec4)
+              24:     20(int) Constant 0
+              25:   21(ivec4) ConstantComposite 24 24 24 24
+              26:             TypeImage 10(float) 2D sampled format:Unknown
+              27:             TypeSampledImage 26
+              28:             TypePointer UniformConstant 27
+         29(s2D):     28(ptr) Variable UniformConstant
+              31:             TypeVector 10(float) 2
+              32:             TypePointer Input 31(fvec2)
+          33(c2):     32(ptr) Variable Input
+     35(ResType):             TypeStruct 6(int) 11(fvec4)
+              41:             TypePointer Private 6(int)
+  42(tempReturn):     41(ptr) Variable Private
+              43:             TypeImage 6(int) 2D sampled format:Unknown
+              44:             TypeSampledImage 43
+              45:             TypePointer UniformConstant 44
+        46(is2D):     45(ptr) Variable UniformConstant
+     50(ResType):             TypeStruct 6(int) 16(ivec4)
+  59(tempReturn):     41(ptr) Variable Private
+              60:             TypeImage 20(int) 2D sampled format:Unknown
+              61:             TypeSampledImage 60
+              62:             TypePointer UniformConstant 61
+        63(us2D):     62(ptr) Variable UniformConstant
+     67(ResType):             TypeStruct 6(int) 21(ivec4)
+              78:   10(float) Constant 1073741824
+  84(tempReturn):     41(ptr) Variable Private
+  96(tempReturn):     41(ptr) Variable Private
+             110:             TypeVector 6(int) 2
+             112:      6(int) Constant 2
+ 119(tempReturn):     41(ptr) Variable Private
+ 133(tempReturn):     41(ptr) Variable Private
+             147:             TypeImage 10(float) 2D nonsampled format:Rgba32f
+             148:             TypePointer UniformConstant 147
+        149(i2D):    148(ptr) Variable UniformConstant
+             151:             TypePointer Input 110(ivec2)
+        152(ic2):    151(ptr) Variable Input
+ 159(tempReturn):     41(ptr) Variable Private
+             160:             TypeImage 6(int) 2D multi-sampled nonsampled format:Rgba32i
+             161:             TypePointer UniformConstant 160
+     162(ii2DMS):    161(ptr) Variable UniformConstant
+             165:      6(int) Constant 3
+             175:             TypeImage 20(int) 3D nonsampled format:Rgba32ui
+             176:             TypePointer UniformConstant 175
+       177(ui3D):    176(ptr) Variable UniformConstant
+             179:             TypeVector 6(int) 3
+             180:             TypePointer Input 179(ivec3)
+        181(ic3):    180(ptr) Variable Input
+             188:             TypePointer Output 11(fvec4)
+   189(outColor):    188(ptr) Variable Output
+             191:             TypeBool
+             204:             TypeVector 10(float) 3
+             205:             TypePointer Input 204(fvec3)
+         206(c3):    205(ptr) Variable Input
+             207:             TypePointer Input 11(fvec4)
+         208(c4):    207(ptr) Variable Input
+             209:     20(int) Constant 4
+             210:             TypeArray 110(ivec2) 209
+             211:             TypePointer Input 210
+    212(offsets):    211(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+     8(resident):      7(ptr) Variable Function
+       13(texel):     12(ptr) Variable Function
+      18(itexel):     17(ptr) Variable Function
+      23(utexel):     22(ptr) Variable Function
+     49(tempArg):     17(ptr) Variable Function
+     66(tempArg):     22(ptr) Variable Function
+     87(tempArg):     17(ptr) Variable Function
+     99(tempArg):     22(ptr) Variable Function
+    123(tempArg):     17(ptr) Variable Function
+    137(tempArg):     22(ptr) Variable Function
+    166(tempArg):     17(ptr) Variable Function
+             193:     12(ptr) Variable Function
+                              Store 8(resident) 9
+                              Store 13(texel) 15
+                              Store 18(itexel) 19
+                              Store 23(utexel) 25
+              30:          27 Load 29(s2D)
+              34:   31(fvec2) Load 33(c2)
+              36: 35(ResType) ImageSparseSampleImplicitLod 30 34
+              37:   11(fvec4) CompositeExtract 36 1
+                              Store 13(texel) 37
+              38:      6(int) CompositeExtract 36 0
+              39:      6(int) Load 8(resident)
+              40:      6(int) BitwiseOr 39 38
+                              Store 8(resident) 40
+              47:          44 Load 46(is2D)
+              48:   31(fvec2) Load 33(c2)
+              51: 50(ResType) ImageSparseSampleImplicitLod 47 48 SignExtend 
+              52:   16(ivec4) CompositeExtract 51 1
+                              Store 49(tempArg) 52
+              53:      6(int) CompositeExtract 51 0
+                              Store 42(tempReturn) 53
+              54:   16(ivec4) Load 49(tempArg)
+              55:   11(fvec4) ConvertSToF 54
+                              Store 13(texel) 55
+              56:      6(int) Load 42(tempReturn)
+              57:      6(int) Load 8(resident)
+              58:      6(int) BitwiseOr 57 56
+                              Store 8(resident) 58
+              64:          61 Load 63(us2D)
+              65:   31(fvec2) Load 33(c2)
+              68: 67(ResType) ImageSparseSampleImplicitLod 64 65 ZeroExtend 
+              69:   21(ivec4) CompositeExtract 68 1
+                              Store 66(tempArg) 69
+              70:      6(int) CompositeExtract 68 0
+                              Store 59(tempReturn) 70
+              71:   21(ivec4) Load 66(tempArg)
+              72:   11(fvec4) ConvertUToF 71
+                              Store 13(texel) 72
+              73:      6(int) Load 59(tempReturn)
+              74:      6(int) Load 8(resident)
+              75:      6(int) BitwiseOr 74 73
+                              Store 8(resident) 75
+              76:          27 Load 29(s2D)
+              77:   31(fvec2) Load 33(c2)
+              79: 35(ResType) ImageSparseSampleExplicitLod 76 77 Lod 78
+              80:   11(fvec4) CompositeExtract 79 1
+                              Store 13(texel) 80
+              81:      6(int) CompositeExtract 79 0
+              82:      6(int) Load 8(resident)
+              83:      6(int) BitwiseOr 82 81
+                              Store 8(resident) 83
+              85:          44 Load 46(is2D)
+              86:   31(fvec2) Load 33(c2)
+              88: 50(ResType) ImageSparseSampleExplicitLod 85 86 Lod SignExtend 78
+              89:   16(ivec4) CompositeExtract 88 1
+                              Store 87(tempArg) 89
+              90:      6(int) CompositeExtract 88 0
+                              Store 84(tempReturn) 90
+              91:   16(ivec4) Load 87(tempArg)
+              92:   11(fvec4) ConvertSToF 91
+                              Store 13(texel) 92
+              93:      6(int) Load 84(tempReturn)
+              94:      6(int) Load 8(resident)
+              95:      6(int) BitwiseOr 94 93
+                              Store 8(resident) 95
+              97:          61 Load 63(us2D)
+              98:   31(fvec2) Load 33(c2)
+             100: 67(ResType) ImageSparseSampleExplicitLod 97 98 Lod ZeroExtend 78
+             101:   21(ivec4) CompositeExtract 100 1
+                              Store 99(tempArg) 101
+             102:      6(int) CompositeExtract 100 0
+                              Store 96(tempReturn) 102
+             103:   21(ivec4) Load 99(tempArg)
+             104:   11(fvec4) ConvertUToF 103
+                              Store 13(texel) 104
+             105:      6(int) Load 96(tempReturn)
+             106:      6(int) Load 8(resident)
+             107:      6(int) BitwiseOr 106 105
+                              Store 8(resident) 107
+             108:          27 Load 29(s2D)
+             109:   31(fvec2) Load 33(c2)
+             111:  110(ivec2) ConvertFToS 109
+             113:          26 Image 108
+             114: 35(ResType) ImageSparseFetch 113 111 Lod 112
+             115:   11(fvec4) CompositeExtract 114 1
+                              Store 13(texel) 115
+             116:      6(int) CompositeExtract 114 0
+             117:      6(int) Load 8(resident)
+             118:      6(int) BitwiseOr 117 116
+                              Store 8(resident) 118
+             120:          44 Load 46(is2D)
+             121:   31(fvec2) Load 33(c2)
+             122:  110(ivec2) ConvertFToS 121
+             124:          43 Image 120
+             125: 50(ResType) ImageSparseFetch 124 122 Lod SignExtend 112
+             126:   16(ivec4) CompositeExtract 125 1
+                              Store 123(tempArg) 126
+             127:      6(int) CompositeExtract 125 0
+                              Store 119(tempReturn) 127
+             128:   16(ivec4) Load 123(tempArg)
+             129:   11(fvec4) ConvertSToF 128
+                              Store 13(texel) 129
+             130:      6(int) Load 119(tempReturn)
+             131:      6(int) Load 8(resident)
+             132:      6(int) BitwiseOr 131 130
+                              Store 8(resident) 132
+             134:          61 Load 63(us2D)
+             135:   31(fvec2) Load 33(c2)
+             136:  110(ivec2) ConvertFToS 135
+             138:          60 Image 134
+             139: 67(ResType) ImageSparseFetch 138 136 Lod ZeroExtend 112
+             140:   21(ivec4) CompositeExtract 139 1
+                              Store 137(tempArg) 140
+             141:      6(int) CompositeExtract 139 0
+                              Store 133(tempReturn) 141
+             142:   21(ivec4) Load 137(tempArg)
+             143:   11(fvec4) ConvertUToF 142
+                              Store 13(texel) 143
+             144:      6(int) Load 133(tempReturn)
+             145:      6(int) Load 8(resident)
+             146:      6(int) BitwiseOr 145 144
+                              Store 8(resident) 146
+             150:         147 Load 149(i2D)
+             153:  110(ivec2) Load 152(ic2)
+             154: 35(ResType) ImageSparseRead 150 153
+             155:   11(fvec4) CompositeExtract 154 1
+                              Store 13(texel) 155
+             156:      6(int) CompositeExtract 154 0
+             157:      6(int) Load 8(resident)
+             158:      6(int) BitwiseOr 157 156
+                              Store 8(resident) 158
+             163:         160 Load 162(ii2DMS)
+             164:  110(ivec2) Load 152(ic2)
+             167: 50(ResType) ImageSparseRead 163 164 Sample SignExtend 165
+             168:   16(ivec4) CompositeExtract 167 1
+                              Store 166(tempArg) 168
+             169:      6(int) CompositeExtract 167 0
+                              Store 159(tempReturn) 169
+             170:   16(ivec4) Load 166(tempArg)
+             171:   11(fvec4) ConvertSToF 170
+                              Store 13(texel) 171
+             172:      6(int) Load 159(tempReturn)
+             173:      6(int) Load 8(resident)
+             174:      6(int) BitwiseOr 173 172
+                              Store 8(resident) 174
+             178:         175 Load 177(ui3D)
+             182:  179(ivec3) Load 181(ic3)
+             183: 67(ResType) ImageSparseRead 178 182 ZeroExtend 
+             184:   21(ivec4) CompositeExtract 183 1
+                              Store 23(utexel) 184
+             185:      6(int) CompositeExtract 183 0
+             186:      6(int) Load 8(resident)
+             187:      6(int) BitwiseOr 186 185
+                              Store 8(resident) 187
+             190:      6(int) Load 8(resident)
+             192:   191(bool) ImageSparseTexelsResident 190
+                              SelectionMerge 195 None
+                              BranchConditional 192 194 197
+             194:               Label
+             196:   11(fvec4)   Load 13(texel)
+                                Store 193 196
+                                Branch 195
+             197:               Label
+             198:   16(ivec4)   Load 18(itexel)
+             199:   11(fvec4)   ConvertSToF 198
+             200:   21(ivec4)   Load 23(utexel)
+             201:   11(fvec4)   ConvertUToF 200
+             202:   11(fvec4)   FAdd 199 201
+                                Store 193 202
+                                Branch 195
+             195:             Label
+             203:   11(fvec4) Load 193
+                              Store 189(outColor) 203
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.1.4.texture.frag.out b/Test/baseResults/spv.1.4.texture.frag.out
new file mode 100755
index 0000000..da3a24f
--- /dev/null
+++ b/Test/baseResults/spv.1.4.texture.frag.out
@@ -0,0 +1,115 @@
+spv.1.4.texture.frag
+// Module Version 10400
+// Generated by (magic number): 80008
+// Id's are bound by 79
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 15 19 28 40 51 54 76 78
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "color"
+                              Name 15  "texSampler2D"
+                              Name 19  "coords2D"
+                              Name 28  "itexSampler2D"
+                              Name 40  "utexSampler2D"
+                              Name 51  "iCoords2D"
+                              Name 54  "iLod"
+                              Name 76  "t"
+                              Name 78  "color"
+                              Decorate 15(texSampler2D) DescriptorSet 0
+                              Decorate 15(texSampler2D) Binding 0
+                              Decorate 28(itexSampler2D) DescriptorSet 0
+                              Decorate 28(itexSampler2D) Binding 0
+                              Decorate 40(utexSampler2D) DescriptorSet 0
+                              Decorate 40(utexSampler2D) Binding 0
+                              Decorate 51(iCoords2D) Flat
+                              Decorate 54(iLod) Flat
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:    6(float) Constant 0
+              11:    7(fvec4) ConstantComposite 10 10 10 10
+              12:             TypeImage 6(float) 2D sampled format:Unknown
+              13:             TypeSampledImage 12
+              14:             TypePointer UniformConstant 13
+15(texSampler2D):     14(ptr) Variable UniformConstant
+              17:             TypeVector 6(float) 2
+              18:             TypePointer Input 17(fvec2)
+    19(coords2D):     18(ptr) Variable Input
+              24:             TypeInt 32 1
+              25:             TypeImage 24(int) 2D sampled format:Unknown
+              26:             TypeSampledImage 25
+              27:             TypePointer UniformConstant 26
+28(itexSampler2D):     27(ptr) Variable UniformConstant
+              31:             TypeVector 24(int) 4
+              36:             TypeInt 32 0
+              37:             TypeImage 36(int) 2D sampled format:Unknown
+              38:             TypeSampledImage 37
+              39:             TypePointer UniformConstant 38
+40(utexSampler2D):     39(ptr) Variable UniformConstant
+              43:             TypeVector 36(int) 4
+              49:             TypeVector 24(int) 2
+              50:             TypePointer Input 49(ivec2)
+   51(iCoords2D):     50(ptr) Variable Input
+              53:             TypePointer Input 24(int)
+        54(iLod):     53(ptr) Variable Input
+           76(t):     18(ptr) Variable Input
+              77:             TypePointer Output 7(fvec4)
+       78(color):     77(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+        9(color):      8(ptr) Variable Function
+                              Store 9(color) 11
+              16:          13 Load 15(texSampler2D)
+              20:   17(fvec2) Load 19(coords2D)
+              21:    7(fvec4) ImageSampleImplicitLod 16 20
+              22:    7(fvec4) Load 9(color)
+              23:    7(fvec4) FAdd 22 21
+                              Store 9(color) 23
+              29:          26 Load 28(itexSampler2D)
+              30:   17(fvec2) Load 19(coords2D)
+              32:   31(ivec4) ImageSampleImplicitLod 29 30 SignExtend 
+              33:    7(fvec4) ConvertSToF 32
+              34:    7(fvec4) Load 9(color)
+              35:    7(fvec4) FAdd 34 33
+                              Store 9(color) 35
+              41:          38 Load 40(utexSampler2D)
+              42:   17(fvec2) Load 19(coords2D)
+              44:   43(ivec4) ImageSampleImplicitLod 41 42 ZeroExtend 
+              45:    7(fvec4) ConvertUToF 44
+              46:    7(fvec4) Load 9(color)
+              47:    7(fvec4) FAdd 46 45
+                              Store 9(color) 47
+              48:          13 Load 15(texSampler2D)
+              52:   49(ivec2) Load 51(iCoords2D)
+              55:     24(int) Load 54(iLod)
+              56:          12 Image 48
+              57:    7(fvec4) ImageFetch 56 52 Lod 55
+              58:    7(fvec4) Load 9(color)
+              59:    7(fvec4) FAdd 58 57
+                              Store 9(color) 59
+              60:          26 Load 28(itexSampler2D)
+              61:   49(ivec2) Load 51(iCoords2D)
+              62:     24(int) Load 54(iLod)
+              63:          25 Image 60
+              64:   31(ivec4) ImageFetch 63 61 Lod SignExtend 62
+              65:    7(fvec4) ConvertSToF 64
+              66:    7(fvec4) Load 9(color)
+              67:    7(fvec4) FAdd 66 65
+                              Store 9(color) 67
+              68:          38 Load 40(utexSampler2D)
+              69:   49(ivec2) Load 51(iCoords2D)
+              70:     24(int) Load 54(iLod)
+              71:          37 Image 68
+              72:   43(ivec4) ImageFetch 71 69 Lod ZeroExtend 70
+              73:    7(fvec4) ConvertUToF 72
+              74:    7(fvec4) Load 9(color)
+              75:    7(fvec4) FAdd 74 73
+                              Store 9(color) 75
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.100ops.frag.out b/Test/baseResults/spv.100ops.frag.out
index 8f656eb..d2b8f3e 100644
--- a/Test/baseResults/spv.100ops.frag.out
+++ b/Test/baseResults/spv.100ops.frag.out
@@ -1,6 +1,6 @@
 spv.100ops.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 49
 
                               Capability Shader
diff --git a/Test/baseResults/spv.130.frag.out b/Test/baseResults/spv.130.frag.out
index 67e2b82..ca1f9e3 100644
--- a/Test/baseResults/spv.130.frag.out
+++ b/Test/baseResults/spv.130.frag.out
@@ -3,7 +3,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 205
 
                               Capability Shader
diff --git a/Test/baseResults/spv.140.frag.out b/Test/baseResults/spv.140.frag.out
index abfd13a..45b7510 100644
--- a/Test/baseResults/spv.140.frag.out
+++ b/Test/baseResults/spv.140.frag.out
@@ -1,7 +1,7 @@
 spv.140.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 96
 
                               Capability Shader
diff --git a/Test/baseResults/spv.150.geom.out b/Test/baseResults/spv.150.geom.out
index 19bd725..ab05846 100644
--- a/Test/baseResults/spv.150.geom.out
+++ b/Test/baseResults/spv.150.geom.out
@@ -1,6 +1,6 @@
 spv.150.geom
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 71
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.150.vert.out b/Test/baseResults/spv.150.vert.out
index db058fa..9e1c9f4 100644
--- a/Test/baseResults/spv.150.vert.out
+++ b/Test/baseResults/spv.150.vert.out
@@ -1,6 +1,6 @@
 spv.150.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 63
 
                               Capability Shader
diff --git a/Test/baseResults/spv.16bitstorage-int.frag.out b/Test/baseResults/spv.16bitstorage-int.frag.out
index a09cd87..80733ce 100644
--- a/Test/baseResults/spv.16bitstorage-int.frag.out
+++ b/Test/baseResults/spv.16bitstorage-int.frag.out
@@ -1,7 +1,7 @@
 spv.16bitstorage-int.frag
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 172
+// Generated by (magic number): 80008
+// Id's are bound by 171
 
                               Capability Shader
                               Capability StorageUniformBufferBlock16
@@ -209,10 +209,7 @@
              114:     20(int) Constant 7
              115:     20(int) Constant 6
              116:             TypePointer Uniform 20(int)
-             166:  6(int16_t) Constant 1
-             167:  6(int16_t) Constant 2
-             168:  7(i16vec2) ConstantComposite 166 167
-             170:  6(int16_t) Constant 3
+             166:   39(ivec2) ConstantComposite 32 33
          4(main):           2 Function None 3
                5:             Label
           69(x0):     68(ptr) Variable Function
@@ -332,9 +329,11 @@
              164:  6(int16_t) Load 163
              165:     28(ptr) AccessChain 19(b2) 21
                               Store 165 164
-             169:     42(ptr) AccessChain 19(b2) 32
-                              Store 169 168
-             171:     28(ptr) AccessChain 19(b2) 21
-                              Store 171 170
+             167:  7(i16vec2) SConvert 166
+             168:     42(ptr) AccessChain 19(b2) 32
+                              Store 168 167
+             169:  6(int16_t) SConvert 58
+             170:     28(ptr) AccessChain 19(b2) 21
+                              Store 170 169
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.16bitstorage-uint.frag.out b/Test/baseResults/spv.16bitstorage-uint.frag.out
index 915dfcb..d4b1b75 100644
--- a/Test/baseResults/spv.16bitstorage-uint.frag.out
+++ b/Test/baseResults/spv.16bitstorage-uint.frag.out
@@ -1,6 +1,6 @@
 spv.16bitstorage-uint.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 173
 
                               Capability Shader
@@ -210,10 +210,8 @@
              115:     20(int) Constant 7
              116:     20(int) Constant 6
              117:             TypePointer Uniform 9(int)
-             167:  6(int16_t) Constant 1
-             168:  6(int16_t) Constant 2
-             169:  7(i16vec2) ConstantComposite 167 168
-             171:  6(int16_t) Constant 3
+             167:   39(ivec2) ConstantComposite 82 10
+             170:      9(int) Constant 3
          4(main):           2 Function None 3
                5:             Label
           69(x0):     68(ptr) Variable Function
@@ -333,8 +331,10 @@
              165:  6(int16_t) Load 164
              166:     28(ptr) AccessChain 19(b2) 21
                               Store 166 165
-             170:     42(ptr) AccessChain 19(b2) 32
-                              Store 170 169
+             168:  7(i16vec2) UConvert 167
+             169:     42(ptr) AccessChain 19(b2) 32
+                              Store 169 168
+             171:  6(int16_t) UConvert 170
              172:     28(ptr) AccessChain 19(b2) 21
                               Store 172 171
                               Return
diff --git a/Test/baseResults/spv.16bitstorage.frag.out b/Test/baseResults/spv.16bitstorage.frag.out
index 3fb08a3..c73eb59 100644
--- a/Test/baseResults/spv.16bitstorage.frag.out
+++ b/Test/baseResults/spv.16bitstorage.frag.out
@@ -1,7 +1,7 @@
 spv.16bitstorage.frag
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 172
+// Generated by (magic number): 80008
+// Id's are bound by 173
 
                               Capability Shader
                               Capability StorageUniformBufferBlock16
@@ -209,10 +209,9 @@
              114:     20(int) Constant 7
              115:     20(int) Constant 6
              116:             TypePointer Uniform 20(int)
-             166:6(float16_t) Constant 15360
-             167:6(float16_t) Constant 16384
-             168:  7(f16vec2) ConstantComposite 166 167
-             170:6(float16_t) Constant 16896
+             166:   37(float) Constant 1073741824
+             167:   40(fvec2) ConstantComposite 83 166
+             170:   37(float) Constant 1077936128
          4(main):           2 Function None 3
                5:             Label
           70(x0):     69(ptr) Variable Function
@@ -332,9 +331,11 @@
              164:6(float16_t) Load 163
              165:     28(ptr) AccessChain 19(b2) 21
                               Store 165 164
+             168:  7(f16vec2) FConvert 167
              169:     43(ptr) AccessChain 19(b2) 32
                               Store 169 168
-             171:     28(ptr) AccessChain 19(b2) 21
-                              Store 171 170
+             171:6(float16_t) FConvert 170
+             172:     28(ptr) AccessChain 19(b2) 21
+                              Store 172 171
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.16bitxfb.vert.out b/Test/baseResults/spv.16bitxfb.vert.out
new file mode 100644
index 0000000..96cff79
--- /dev/null
+++ b/Test/baseResults/spv.16bitxfb.vert.out
@@ -0,0 +1,120 @@
+spv.16bitxfb.vert
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 59
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Int16
+                              Capability TransformFeedback
+                              Capability StorageInputOutput16
+                              Extension  "SPV_KHR_16bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 9 12 18 36 39 46 49
+                              ExecutionMode 4 Xfb
+                              Source GLSL 450
+                              SourceExtension  "GL_AMD_gpu_shader_half_float"
+                              SourceExtension  "GL_AMD_gpu_shader_int16"
+                              Name 4  "main"
+                              Name 9  "of16v3"
+                              Name 12  "if16v4"
+                              Name 16  "F16Out"
+                              MemberName 16(F16Out) 0  "of16"
+                              MemberName 16(F16Out) 1  "of16v2"
+                              Name 18  ""
+                              Name 36  "oi16v3"
+                              Name 39  "ii16v4"
+                              Name 44  "I16Out"
+                              MemberName 44(I16Out) 0  "ou16"
+                              MemberName 44(I16Out) 1  "ou16v2"
+                              Name 46  ""
+                              Name 49  "iu16v4"
+                              Decorate 9(of16v3) Location 0
+                              Decorate 9(of16v3) XfbBuffer 0
+                              Decorate 9(of16v3) XfbStride 6
+                              Decorate 9(of16v3) Offset 0
+                              Decorate 12(if16v4) Location 0
+                              MemberDecorate 16(F16Out) 0 Offset 0
+                              MemberDecorate 16(F16Out) 1 Offset 2
+                              Decorate 16(F16Out) Block
+                              Decorate 18 Location 1
+                              Decorate 18 XfbBuffer 1
+                              Decorate 18 XfbStride 6
+                              Decorate 36(oi16v3) Location 5
+                              Decorate 36(oi16v3) XfbBuffer 2
+                              Decorate 36(oi16v3) XfbStride 6
+                              Decorate 36(oi16v3) Offset 0
+                              Decorate 39(ii16v4) Location 1
+                              MemberDecorate 44(I16Out) 0 Offset 0
+                              MemberDecorate 44(I16Out) 1 Offset 2
+                              Decorate 44(I16Out) Block
+                              Decorate 46 Location 6
+                              Decorate 46 XfbBuffer 3
+                              Decorate 46 XfbStride 6
+                              Decorate 49(iu16v4) Location 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 16
+               7:             TypeVector 6(float16_t) 3
+               8:             TypePointer Output 7(f16vec3)
+       9(of16v3):      8(ptr) Variable Output
+              10:             TypeVector 6(float16_t) 4
+              11:             TypePointer Input 10(f16vec4)
+      12(if16v4):     11(ptr) Variable Input
+              15:             TypeVector 6(float16_t) 2
+      16(F16Out):             TypeStruct 6(float16_t) 15(f16vec2)
+              17:             TypePointer Output 16(F16Out)
+              18:     17(ptr) Variable Output
+              19:             TypeInt 32 1
+              20:     19(int) Constant 0
+              21:             TypeInt 32 0
+              22:     21(int) Constant 0
+              23:             TypePointer Input 6(float16_t)
+              26:             TypePointer Output 6(float16_t)
+              28:     19(int) Constant 1
+              31:             TypePointer Output 15(f16vec2)
+              33:             TypeInt 16 1
+              34:             TypeVector 33(int16_t) 3
+              35:             TypePointer Output 34(i16vec3)
+      36(oi16v3):     35(ptr) Variable Output
+              37:             TypeVector 33(int16_t) 4
+              38:             TypePointer Input 37(i16vec4)
+      39(ii16v4):     38(ptr) Variable Input
+              42:             TypeInt 16 0
+              43:             TypeVector 42(int16_t) 2
+      44(I16Out):             TypeStruct 42(int16_t) 43(i16vec2)
+              45:             TypePointer Output 44(I16Out)
+              46:     45(ptr) Variable Output
+              47:             TypeVector 42(int16_t) 4
+              48:             TypePointer Input 47(i16vec4)
+      49(iu16v4):     48(ptr) Variable Input
+              50:             TypePointer Input 42(int16_t)
+              53:             TypePointer Output 42(int16_t)
+              57:             TypePointer Output 43(i16vec2)
+         4(main):           2 Function None 3
+               5:             Label
+              13: 10(f16vec4) Load 12(if16v4)
+              14:  7(f16vec3) VectorShuffle 13 13 0 1 2
+                              Store 9(of16v3) 14
+              24:     23(ptr) AccessChain 12(if16v4) 22
+              25:6(float16_t) Load 24
+              27:     26(ptr) AccessChain 18 20
+                              Store 27 25
+              29: 10(f16vec4) Load 12(if16v4)
+              30: 15(f16vec2) VectorShuffle 29 29 0 1
+              32:     31(ptr) AccessChain 18 28
+                              Store 32 30
+              40: 37(i16vec4) Load 39(ii16v4)
+              41: 34(i16vec3) VectorShuffle 40 40 0 1 2
+                              Store 36(oi16v3) 41
+              51:     50(ptr) AccessChain 49(iu16v4) 22
+              52: 42(int16_t) Load 51
+              54:     53(ptr) AccessChain 46 20
+                              Store 54 52
+              55: 47(i16vec4) Load 49(iu16v4)
+              56: 43(i16vec2) VectorShuffle 55 55 0 1
+              58:     57(ptr) AccessChain 46 28
+                              Store 58 56
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.300BuiltIns.vert.out b/Test/baseResults/spv.300BuiltIns.vert.out
index ee2c236..2633645 100644
--- a/Test/baseResults/spv.300BuiltIns.vert.out
+++ b/Test/baseResults/spv.300BuiltIns.vert.out
@@ -1,6 +1,6 @@
 spv.300BuiltIns.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/spv.300layout.frag.out b/Test/baseResults/spv.300layout.frag.out
index 10a6d00..db06955 100644
--- a/Test/baseResults/spv.300layout.frag.out
+++ b/Test/baseResults/spv.300layout.frag.out
@@ -1,6 +1,6 @@
 spv.300layout.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/spv.300layout.vert.out b/Test/baseResults/spv.300layout.vert.out
index 4d4d7ea..c97d217 100644
--- a/Test/baseResults/spv.300layout.vert.out
+++ b/Test/baseResults/spv.300layout.vert.out
@@ -1,6 +1,6 @@
 spv.300layout.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 163
 
                               Capability Shader
diff --git a/Test/baseResults/spv.300layoutp.vert.out b/Test/baseResults/spv.300layoutp.vert.out
index e12041f..2b1ef83 100644
--- a/Test/baseResults/spv.300layoutp.vert.out
+++ b/Test/baseResults/spv.300layoutp.vert.out
@@ -1,6 +1,6 @@
 spv.300layoutp.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 115
 
                               Capability Shader
diff --git a/Test/baseResults/spv.310.bitcast.frag.out b/Test/baseResults/spv.310.bitcast.frag.out
index d7a244f..e4f62b4 100644
--- a/Test/baseResults/spv.310.bitcast.frag.out
+++ b/Test/baseResults/spv.310.bitcast.frag.out
@@ -1,6 +1,6 @@
 spv.310.bitcast.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 153
 
                               Capability Shader
diff --git a/Test/baseResults/spv.310.comp.out b/Test/baseResults/spv.310.comp.out
index bb8e6a7..3b90d41 100644
--- a/Test/baseResults/spv.310.comp.out
+++ b/Test/baseResults/spv.310.comp.out
@@ -1,6 +1,6 @@
 spv.310.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out
index 20b6fa2..6881084 100644
--- a/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out
+++ b/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out
@@ -1,6 +1,6 @@
 spv.320.meshShaderUserDefined.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 140
 
                               Capability MeshShadingNV
diff --git a/Test/baseResults/spv.330.geom.out b/Test/baseResults/spv.330.geom.out
index 1ccbfb6..79e03b6 100644
--- a/Test/baseResults/spv.330.geom.out
+++ b/Test/baseResults/spv.330.geom.out
@@ -1,6 +1,6 @@
 spv.330.geom
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 32
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.400.frag.nanclamp.out b/Test/baseResults/spv.400.frag.nanclamp.out
new file mode 100644
index 0000000..448aa5e
--- /dev/null
+++ b/Test/baseResults/spv.400.frag.nanclamp.out
@@ -0,0 +1,1402 @@
+spv.400.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 1118
+
+                              Capability Shader
+                              Capability Geometry
+                              Capability Float64
+                              Capability ImageGatherExtended
+                              Capability ClipDistance
+                              Capability SampledRect
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 13 1027 1033 1038 1050 1076 1097 1099 1105 1107 1116
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 400
+                              SourceExtension  "GL_ARB_separate_shader_objects"
+                              Name 4  "main"
+                              Name 6  "foo23("
+                              Name 8  "doubles("
+                              Name 13  "outp"
+                              Name 17  "u2drs"
+                              Name 41  "doublev"
+                              Name 45  "dvec2v"
+                              Name 50  "dvec3v"
+                              Name 55  "dvec4v"
+                              Name 430  "boolv"
+                              Name 439  "bvec2v"
+                              Name 448  "bvec3v"
+                              Name 457  "bvec4v"
+                              Name 739  "dmat2v"
+                              Name 745  "dmat3v"
+                              Name 751  "dmat4v"
+                              Name 757  "dmat2x3v"
+                              Name 763  "dmat3x2v"
+                              Name 769  "dmat2x4v"
+                              Name 775  "dmat4x2v"
+                              Name 781  "dmat3x4v"
+                              Name 787  "dmat4x3v"
+                              Name 1019  "v"
+                              Name 1025  "arrayedSampler"
+                              Name 1027  "i"
+                              Name 1033  "c2D"
+                              Name 1038  "gl_ClipDistance"
+                              Name 1050  "uoutp"
+                              Name 1054  "samp2dr"
+                              Name 1076  "ioutp"
+                              Name 1080  "isamp2DA"
+                              Name 1097  "gl_FragCoord"
+                              Name 1099  "vl2"
+                              Name 1105  "uo"
+                              Name 1107  "u"
+                              Name 1115  "id"
+                              Name 1116  "gl_PrimitiveID"
+                              Decorate 13(outp) Location 1
+                              Decorate 17(u2drs) DescriptorSet 0
+                              Decorate 17(u2drs) Binding 3
+                              Decorate 1025(arrayedSampler) DescriptorSet 0
+                              Decorate 1025(arrayedSampler) Binding 0
+                              Decorate 1027(i) Flat
+                              Decorate 1027(i) Location 1
+                              Decorate 1033(c2D) Location 0
+                              Decorate 1038(gl_ClipDistance) BuiltIn ClipDistance
+                              Decorate 1050(uoutp) Location 3
+                              Decorate 1054(samp2dr) DescriptorSet 0
+                              Decorate 1054(samp2dr) Binding 1
+                              Decorate 1076(ioutp) Location 2
+                              Decorate 1080(isamp2DA) DescriptorSet 0
+                              Decorate 1080(isamp2DA) Binding 2
+                              Decorate 1097(gl_FragCoord) BuiltIn FragCoord
+                              Decorate 1099(vl2) Location 6
+                              Decorate 1105(uo) Location 0
+                              Decorate 1107(u) Flat
+                              Decorate 1107(u) Location 2
+                              Decorate 1116(gl_PrimitiveID) Flat
+                              Decorate 1116(gl_PrimitiveID) BuiltIn PrimitiveId
+               2:             TypeVoid
+               3:             TypeFunction 2
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 4
+              12:             TypePointer Output 11(fvec4)
+        13(outp):     12(ptr) Variable Output
+              14:             TypeImage 10(float) Rect depth sampled format:Unknown
+              15:             TypeSampledImage 14
+              16:             TypePointer UniformConstant 15
+       17(u2drs):     16(ptr) Variable UniformConstant
+              20:             TypeVector 10(float) 2
+              21:   10(float) Constant 0
+              22:   20(fvec2) ConstantComposite 21 21
+              23:             TypeInt 32 1
+              24:             TypeVector 23(int) 2
+              25:     23(int) Constant 3
+              26:     23(int) Constant 4
+              27:   24(ivec2) ConstantComposite 25 26
+              32:             TypeInt 32 0
+              33:     32(int) Constant 0
+              34:             TypePointer Output 10(float)
+              39:             TypeFloat 64
+              40:             TypePointer Function 39(float64_t)
+              42:39(float64_t) Constant 2507418074 1073430332
+              43:             TypeVector 39(float64_t) 2
+              44:             TypePointer Function 43(f64vec2)
+              46:39(float64_t) Constant 796182188 1073367658
+              47: 43(f64vec2) ConstantComposite 46 46
+              48:             TypeVector 39(float64_t) 3
+              49:             TypePointer Function 48(f64vec3)
+              51:39(float64_t) Constant 1719614413 1073127582
+              52: 48(f64vec3) ConstantComposite 51 51 51
+              53:             TypeVector 39(float64_t) 4
+              54:             TypePointer Function 53(f64vec4)
+             428:             TypeBool
+             429:             TypePointer Function 428(bool)
+             437:             TypeVector 428(bool) 2
+             438:             TypePointer Function 437(bvec2)
+             446:             TypeVector 428(bool) 3
+             447:             TypePointer Function 446(bvec3)
+             455:             TypeVector 428(bool) 4
+             456:             TypePointer Function 455(bvec4)
+             563:   428(bool) ConstantFalse
+             572:  437(bvec2) ConstantComposite 563 563
+             581:  446(bvec3) ConstantComposite 563 563 563
+             590:  455(bvec4) ConstantComposite 563 563 563 563
+             737:             TypeMatrix 43(f64vec2) 2
+             738:             TypePointer Function 737
+             743:             TypeMatrix 48(f64vec3) 3
+             744:             TypePointer Function 743
+             749:             TypeMatrix 53(f64vec4) 4
+             750:             TypePointer Function 749
+             755:             TypeMatrix 48(f64vec3) 2
+             756:             TypePointer Function 755
+             761:             TypeMatrix 43(f64vec2) 3
+             762:             TypePointer Function 761
+             767:             TypeMatrix 53(f64vec4) 2
+             768:             TypePointer Function 767
+             773:             TypeMatrix 43(f64vec2) 4
+             774:             TypePointer Function 773
+             779:             TypeMatrix 53(f64vec4) 3
+             780:             TypePointer Function 779
+             785:             TypeMatrix 48(f64vec3) 4
+             786:             TypePointer Function 785
+             954:     32(int) Constant 1
+             958:     32(int) Constant 2
+             962:     32(int) Constant 3
+             966:     23(int) Constant 1
+             970:     23(int) Constant 2
+             996:   10(float) Constant 1065353216
+            1018:             TypePointer Function 11(fvec4)
+            1020:             TypeImage 10(float) 2D sampled format:Unknown
+            1021:             TypeSampledImage 1020
+            1022:     32(int) Constant 5
+            1023:             TypeArray 1021 1022
+            1024:             TypePointer UniformConstant 1023
+1025(arrayedSampler):   1024(ptr) Variable UniformConstant
+            1026:             TypePointer Input 23(int)
+         1027(i):   1026(ptr) Variable Input
+            1029:             TypePointer UniformConstant 1021
+            1032:             TypePointer Input 20(fvec2)
+       1033(c2D):   1032(ptr) Variable Input
+            1036:             TypeArray 10(float) 958
+            1037:             TypePointer Input 1036
+1038(gl_ClipDistance):   1037(ptr) Variable Input
+            1039:             TypePointer Input 10(float)
+            1043:             TypeVector 10(float) 3
+            1048:             TypeVector 32(int) 4
+            1049:             TypePointer Output 1048(ivec4)
+     1050(uoutp):   1049(ptr) Variable Output
+            1051:             TypeImage 32(int) Rect sampled format:Unknown
+            1052:             TypeSampledImage 1051
+            1053:             TypePointer UniformConstant 1052
+   1054(samp2dr):   1053(ptr) Variable UniformConstant
+            1057:     32(int) Constant 4
+            1058:             TypeArray 24(ivec2) 1057
+            1059:   24(ivec2) ConstantComposite 966 970
+            1060:     23(int) Constant 15
+            1061:     23(int) Constant 16
+            1062:   24(ivec2) ConstantComposite 1060 1061
+            1063:     23(int) Constant 4294967294
+            1064:     23(int) Constant 0
+            1065:   24(ivec2) ConstantComposite 1063 1064
+            1066:        1058 ConstantComposite 1059 27 1062 1065
+            1074:             TypeVector 23(int) 4
+            1075:             TypePointer Output 1074(ivec4)
+     1076(ioutp):   1075(ptr) Variable Output
+            1077:             TypeImage 23(int) 2D array sampled format:Unknown
+            1078:             TypeSampledImage 1077
+            1079:             TypePointer UniformConstant 1078
+  1080(isamp2DA):   1079(ptr) Variable UniformConstant
+            1082:   10(float) Constant 1036831949
+            1083: 1043(fvec3) ConstantComposite 1082 1082 1082
+            1084:   24(ivec2) ConstantComposite 966 966
+            1096:             TypePointer Input 11(fvec4)
+1097(gl_FragCoord):   1096(ptr) Variable Input
+       1099(vl2):   1096(ptr) Variable Input
+            1104:             TypePointer Output 32(int)
+        1105(uo):   1104(ptr) Variable Output
+            1106:             TypePointer Input 32(int)
+         1107(u):   1106(ptr) Variable Input
+            1114:             TypePointer Function 23(int)
+1116(gl_PrimitiveID):   1026(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+         1019(v):   1018(ptr) Variable Function
+        1115(id):   1114(ptr) Variable Function
+            1028:     23(int) Load 1027(i)
+            1030:   1029(ptr) AccessChain 1025(arrayedSampler) 1028
+            1031:        1021 Load 1030
+            1034:   20(fvec2) Load 1033(c2D)
+            1035:   11(fvec4) ImageSampleImplicitLod 1031 1034
+                              Store 1019(v) 1035
+            1040:   1039(ptr) AccessChain 1038(gl_ClipDistance) 966
+            1041:   10(float) Load 1040
+            1042:     34(ptr) AccessChain 13(outp) 33
+                              Store 1042 1041
+            1044:   11(fvec4) Load 1019(v)
+            1045: 1043(fvec3) VectorShuffle 1044 1044 1 2 3
+            1046:   11(fvec4) Load 13(outp)
+            1047:   11(fvec4) VectorShuffle 1046 1045 0 4 5 6
+                              Store 13(outp) 1047
+            1055:        1052 Load 1054(samp2dr)
+            1056:   20(fvec2) Load 1033(c2D)
+            1067: 1048(ivec4) ImageGather 1055 1056 970 ConstOffsets 1066
+                              Store 1050(uoutp) 1067
+            1068:   1029(ptr) AccessChain 1025(arrayedSampler) 1064
+            1069:        1021 Load 1068
+            1070:   20(fvec2) Load 1033(c2D)
+            1071:   11(fvec4) ImageGather 1069 1070 1064
+            1072:   11(fvec4) Load 13(outp)
+            1073:   11(fvec4) FAdd 1072 1071
+                              Store 13(outp) 1073
+            1081:        1078 Load 1080(isamp2DA)
+            1085: 1074(ivec4) ImageGather 1081 1083 25 ConstOffset 1084
+                              Store 1076(ioutp) 1085
+            1086:        1078 Load 1080(isamp2DA)
+            1087: 1074(ivec4) ImageGather 1086 1083 25 ConstOffset 1084
+            1088: 1074(ivec4) Load 1076(ioutp)
+            1089: 1074(ivec4) IAdd 1088 1087
+                              Store 1076(ioutp) 1089
+            1090:        1078 Load 1080(isamp2DA)
+            1091:     23(int) Load 1027(i)
+            1092:   24(ivec2) CompositeConstruct 1091 1091
+            1093: 1074(ivec4) ImageGather 1090 1083 1064 Offset 1092
+            1094: 1074(ivec4) Load 1076(ioutp)
+            1095: 1074(ivec4) IAdd 1094 1093
+                              Store 1076(ioutp) 1095
+            1098:   11(fvec4) Load 1097(gl_FragCoord)
+            1100:   11(fvec4) Load 1099(vl2)
+            1101:   11(fvec4) FAdd 1098 1100
+            1102:   11(fvec4) Load 13(outp)
+            1103:   11(fvec4) FAdd 1102 1101
+                              Store 13(outp) 1103
+            1108:     32(int) Load 1107(u)
+            1109:     23(int) Load 1027(i)
+            1110:     32(int) Bitcast 1109
+            1111:     32(int) UMod 1108 1110
+                              Store 1105(uo) 1111
+            1112:           2 FunctionCall 6(foo23()
+            1113:           2 FunctionCall 8(doubles()
+            1117:     23(int) Load 1116(gl_PrimitiveID)
+                              Store 1115(id) 1117
+                              Return
+                              FunctionEnd
+       6(foo23():           2 Function None 3
+               7:             Label
+              18:          15 Load 17(u2drs)
+              19:   11(fvec4) Load 13(outp)
+              28:   10(float) CompositeExtract 19 2
+              29:   10(float) CompositeExtract 19 3
+              30:   11(fvec4) CompositeInsert 29 19 2
+              31:   10(float) ImageSampleProjDrefExplicitLod 18 30 28 Grad ConstOffset 22 22 27
+              35:     34(ptr) AccessChain 13(outp) 33
+              36:   10(float) Load 35
+              37:   10(float) FAdd 36 31
+              38:     34(ptr) AccessChain 13(outp) 33
+                              Store 38 37
+                              Return
+                              FunctionEnd
+     8(doubles():           2 Function None 3
+               9:             Label
+     41(doublev):     40(ptr) Variable Function
+      45(dvec2v):     44(ptr) Variable Function
+      50(dvec3v):     49(ptr) Variable Function
+      55(dvec4v):     54(ptr) Variable Function
+      430(boolv):    429(ptr) Variable Function
+     439(bvec2v):    438(ptr) Variable Function
+     448(bvec3v):    447(ptr) Variable Function
+     457(bvec4v):    456(ptr) Variable Function
+             557:    429(ptr) Variable Function
+             566:    438(ptr) Variable Function
+             575:    447(ptr) Variable Function
+             584:    456(ptr) Variable Function
+     739(dmat2v):    738(ptr) Variable Function
+     745(dmat3v):    744(ptr) Variable Function
+     751(dmat4v):    750(ptr) Variable Function
+   757(dmat2x3v):    756(ptr) Variable Function
+   763(dmat3x2v):    762(ptr) Variable Function
+   769(dmat2x4v):    768(ptr) Variable Function
+   775(dmat4x2v):    774(ptr) Variable Function
+   781(dmat3x4v):    780(ptr) Variable Function
+   787(dmat4x3v):    786(ptr) Variable Function
+                              Store 41(doublev) 42
+                              Store 45(dvec2v) 47
+                              Store 50(dvec3v) 52
+              56:39(float64_t) Load 41(doublev)
+              57: 53(f64vec4) CompositeConstruct 56 56 56 56
+              58: 53(f64vec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 57
+                              Store 55(dvec4v) 58
+              59:39(float64_t) Load 41(doublev)
+              60:39(float64_t) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 59
+              61:39(float64_t) Load 41(doublev)
+              62:39(float64_t) FAdd 61 60
+                              Store 41(doublev) 62
+              63: 43(f64vec2) Load 45(dvec2v)
+              64: 43(f64vec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 63
+              65: 43(f64vec2) Load 45(dvec2v)
+              66: 43(f64vec2) FAdd 65 64
+                              Store 45(dvec2v) 66
+              67: 48(f64vec3) Load 50(dvec3v)
+              68: 48(f64vec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 67
+              69: 48(f64vec3) Load 50(dvec3v)
+              70: 48(f64vec3) FAdd 69 68
+                              Store 50(dvec3v) 70
+              71: 53(f64vec4) Load 55(dvec4v)
+              72: 53(f64vec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 71
+              73: 53(f64vec4) Load 55(dvec4v)
+              74: 53(f64vec4) FAdd 73 72
+                              Store 55(dvec4v) 74
+              75:39(float64_t) Load 41(doublev)
+              76:39(float64_t) ExtInst 1(GLSL.std.450) 4(FAbs) 75
+              77:39(float64_t) Load 41(doublev)
+              78:39(float64_t) FAdd 77 76
+                              Store 41(doublev) 78
+              79: 43(f64vec2) Load 45(dvec2v)
+              80: 43(f64vec2) ExtInst 1(GLSL.std.450) 4(FAbs) 79
+              81: 43(f64vec2) Load 45(dvec2v)
+              82: 43(f64vec2) FAdd 81 80
+                              Store 45(dvec2v) 82
+              83: 48(f64vec3) Load 50(dvec3v)
+              84: 48(f64vec3) ExtInst 1(GLSL.std.450) 4(FAbs) 83
+              85: 48(f64vec3) Load 50(dvec3v)
+              86: 48(f64vec3) FAdd 85 84
+                              Store 50(dvec3v) 86
+              87: 53(f64vec4) Load 55(dvec4v)
+              88: 53(f64vec4) ExtInst 1(GLSL.std.450) 4(FAbs) 87
+              89: 53(f64vec4) Load 55(dvec4v)
+              90: 53(f64vec4) FAdd 89 88
+                              Store 55(dvec4v) 90
+              91:39(float64_t) Load 41(doublev)
+              92:39(float64_t) ExtInst 1(GLSL.std.450) 6(FSign) 91
+              93:39(float64_t) Load 41(doublev)
+              94:39(float64_t) FAdd 93 92
+                              Store 41(doublev) 94
+              95: 43(f64vec2) Load 45(dvec2v)
+              96: 43(f64vec2) ExtInst 1(GLSL.std.450) 6(FSign) 95
+              97: 43(f64vec2) Load 45(dvec2v)
+              98: 43(f64vec2) FAdd 97 96
+                              Store 45(dvec2v) 98
+              99: 48(f64vec3) Load 50(dvec3v)
+             100: 48(f64vec3) ExtInst 1(GLSL.std.450) 6(FSign) 99
+             101: 48(f64vec3) Load 50(dvec3v)
+             102: 48(f64vec3) FAdd 101 100
+                              Store 50(dvec3v) 102
+             103: 53(f64vec4) Load 55(dvec4v)
+             104: 53(f64vec4) ExtInst 1(GLSL.std.450) 6(FSign) 103
+             105: 53(f64vec4) Load 55(dvec4v)
+             106: 53(f64vec4) FAdd 105 104
+                              Store 55(dvec4v) 106
+             107:39(float64_t) Load 41(doublev)
+             108:39(float64_t) ExtInst 1(GLSL.std.450) 8(Floor) 107
+             109:39(float64_t) Load 41(doublev)
+             110:39(float64_t) FAdd 109 108
+                              Store 41(doublev) 110
+             111: 43(f64vec2) Load 45(dvec2v)
+             112: 43(f64vec2) ExtInst 1(GLSL.std.450) 8(Floor) 111
+             113: 43(f64vec2) Load 45(dvec2v)
+             114: 43(f64vec2) FAdd 113 112
+                              Store 45(dvec2v) 114
+             115: 48(f64vec3) Load 50(dvec3v)
+             116: 48(f64vec3) ExtInst 1(GLSL.std.450) 8(Floor) 115
+             117: 48(f64vec3) Load 50(dvec3v)
+             118: 48(f64vec3) FAdd 117 116
+                              Store 50(dvec3v) 118
+             119: 53(f64vec4) Load 55(dvec4v)
+             120: 53(f64vec4) ExtInst 1(GLSL.std.450) 8(Floor) 119
+             121: 53(f64vec4) Load 55(dvec4v)
+             122: 53(f64vec4) FAdd 121 120
+                              Store 55(dvec4v) 122
+             123:39(float64_t) Load 41(doublev)
+             124:39(float64_t) ExtInst 1(GLSL.std.450) 3(Trunc) 123
+             125:39(float64_t) Load 41(doublev)
+             126:39(float64_t) FAdd 125 124
+                              Store 41(doublev) 126
+             127: 43(f64vec2) Load 45(dvec2v)
+             128: 43(f64vec2) ExtInst 1(GLSL.std.450) 3(Trunc) 127
+             129: 43(f64vec2) Load 45(dvec2v)
+             130: 43(f64vec2) FAdd 129 128
+                              Store 45(dvec2v) 130
+             131: 48(f64vec3) Load 50(dvec3v)
+             132: 48(f64vec3) ExtInst 1(GLSL.std.450) 3(Trunc) 131
+             133: 48(f64vec3) Load 50(dvec3v)
+             134: 48(f64vec3) FAdd 133 132
+                              Store 50(dvec3v) 134
+             135: 53(f64vec4) Load 55(dvec4v)
+             136: 53(f64vec4) ExtInst 1(GLSL.std.450) 3(Trunc) 135
+             137: 53(f64vec4) Load 55(dvec4v)
+             138: 53(f64vec4) FAdd 137 136
+                              Store 55(dvec4v) 138
+             139:39(float64_t) Load 41(doublev)
+             140:39(float64_t) ExtInst 1(GLSL.std.450) 1(Round) 139
+             141:39(float64_t) Load 41(doublev)
+             142:39(float64_t) FAdd 141 140
+                              Store 41(doublev) 142
+             143: 43(f64vec2) Load 45(dvec2v)
+             144: 43(f64vec2) ExtInst 1(GLSL.std.450) 1(Round) 143
+             145: 43(f64vec2) Load 45(dvec2v)
+             146: 43(f64vec2) FAdd 145 144
+                              Store 45(dvec2v) 146
+             147: 48(f64vec3) Load 50(dvec3v)
+             148: 48(f64vec3) ExtInst 1(GLSL.std.450) 1(Round) 147
+             149: 48(f64vec3) Load 50(dvec3v)
+             150: 48(f64vec3) FAdd 149 148
+                              Store 50(dvec3v) 150
+             151: 53(f64vec4) Load 55(dvec4v)
+             152: 53(f64vec4) ExtInst 1(GLSL.std.450) 1(Round) 151
+             153: 53(f64vec4) Load 55(dvec4v)
+             154: 53(f64vec4) FAdd 153 152
+                              Store 55(dvec4v) 154
+             155:39(float64_t) Load 41(doublev)
+             156:39(float64_t) ExtInst 1(GLSL.std.450) 2(RoundEven) 155
+             157:39(float64_t) Load 41(doublev)
+             158:39(float64_t) FAdd 157 156
+                              Store 41(doublev) 158
+             159: 43(f64vec2) Load 45(dvec2v)
+             160: 43(f64vec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 159
+             161: 43(f64vec2) Load 45(dvec2v)
+             162: 43(f64vec2) FAdd 161 160
+                              Store 45(dvec2v) 162
+             163: 48(f64vec3) Load 50(dvec3v)
+             164: 48(f64vec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 163
+             165: 48(f64vec3) Load 50(dvec3v)
+             166: 48(f64vec3) FAdd 165 164
+                              Store 50(dvec3v) 166
+             167: 53(f64vec4) Load 55(dvec4v)
+             168: 53(f64vec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 167
+             169: 53(f64vec4) Load 55(dvec4v)
+             170: 53(f64vec4) FAdd 169 168
+                              Store 55(dvec4v) 170
+             171:39(float64_t) Load 41(doublev)
+             172:39(float64_t) ExtInst 1(GLSL.std.450) 9(Ceil) 171
+             173:39(float64_t) Load 41(doublev)
+             174:39(float64_t) FAdd 173 172
+                              Store 41(doublev) 174
+             175: 43(f64vec2) Load 45(dvec2v)
+             176: 43(f64vec2) ExtInst 1(GLSL.std.450) 9(Ceil) 175
+             177: 43(f64vec2) Load 45(dvec2v)
+             178: 43(f64vec2) FAdd 177 176
+                              Store 45(dvec2v) 178
+             179: 48(f64vec3) Load 50(dvec3v)
+             180: 48(f64vec3) ExtInst 1(GLSL.std.450) 9(Ceil) 179
+             181: 48(f64vec3) Load 50(dvec3v)
+             182: 48(f64vec3) FAdd 181 180
+                              Store 50(dvec3v) 182
+             183: 53(f64vec4) Load 55(dvec4v)
+             184: 53(f64vec4) ExtInst 1(GLSL.std.450) 9(Ceil) 183
+             185: 53(f64vec4) Load 55(dvec4v)
+             186: 53(f64vec4) FAdd 185 184
+                              Store 55(dvec4v) 186
+             187:39(float64_t) Load 41(doublev)
+             188:39(float64_t) ExtInst 1(GLSL.std.450) 10(Fract) 187
+             189:39(float64_t) Load 41(doublev)
+             190:39(float64_t) FAdd 189 188
+                              Store 41(doublev) 190
+             191: 43(f64vec2) Load 45(dvec2v)
+             192: 43(f64vec2) ExtInst 1(GLSL.std.450) 10(Fract) 191
+             193: 43(f64vec2) Load 45(dvec2v)
+             194: 43(f64vec2) FAdd 193 192
+                              Store 45(dvec2v) 194
+             195: 48(f64vec3) Load 50(dvec3v)
+             196: 48(f64vec3) ExtInst 1(GLSL.std.450) 10(Fract) 195
+             197: 48(f64vec3) Load 50(dvec3v)
+             198: 48(f64vec3) FAdd 197 196
+                              Store 50(dvec3v) 198
+             199: 53(f64vec4) Load 55(dvec4v)
+             200: 53(f64vec4) ExtInst 1(GLSL.std.450) 10(Fract) 199
+             201: 53(f64vec4) Load 55(dvec4v)
+             202: 53(f64vec4) FAdd 201 200
+                              Store 55(dvec4v) 202
+             203:39(float64_t) Load 41(doublev)
+             204:39(float64_t) Load 41(doublev)
+             205:39(float64_t) FMod 203 204
+             206:39(float64_t) Load 41(doublev)
+             207:39(float64_t) FAdd 206 205
+                              Store 41(doublev) 207
+             208: 43(f64vec2) Load 45(dvec2v)
+             209:39(float64_t) Load 41(doublev)
+             210: 43(f64vec2) CompositeConstruct 209 209
+             211: 43(f64vec2) FMod 208 210
+             212: 43(f64vec2) Load 45(dvec2v)
+             213: 43(f64vec2) FAdd 212 211
+                              Store 45(dvec2v) 213
+             214: 48(f64vec3) Load 50(dvec3v)
+             215:39(float64_t) Load 41(doublev)
+             216: 48(f64vec3) CompositeConstruct 215 215 215
+             217: 48(f64vec3) FMod 214 216
+             218: 48(f64vec3) Load 50(dvec3v)
+             219: 48(f64vec3) FAdd 218 217
+                              Store 50(dvec3v) 219
+             220: 53(f64vec4) Load 55(dvec4v)
+             221:39(float64_t) Load 41(doublev)
+             222: 53(f64vec4) CompositeConstruct 221 221 221 221
+             223: 53(f64vec4) FMod 220 222
+             224: 53(f64vec4) Load 55(dvec4v)
+             225: 53(f64vec4) FAdd 224 223
+                              Store 55(dvec4v) 225
+             226: 43(f64vec2) Load 45(dvec2v)
+             227: 43(f64vec2) Load 45(dvec2v)
+             228: 43(f64vec2) FMod 226 227
+             229: 43(f64vec2) Load 45(dvec2v)
+             230: 43(f64vec2) FAdd 229 228
+                              Store 45(dvec2v) 230
+             231: 48(f64vec3) Load 50(dvec3v)
+             232: 48(f64vec3) Load 50(dvec3v)
+             233: 48(f64vec3) FMod 231 232
+             234: 48(f64vec3) Load 50(dvec3v)
+             235: 48(f64vec3) FAdd 234 233
+                              Store 50(dvec3v) 235
+             236: 53(f64vec4) Load 55(dvec4v)
+             237: 53(f64vec4) Load 55(dvec4v)
+             238: 53(f64vec4) FMod 236 237
+             239: 53(f64vec4) Load 55(dvec4v)
+             240: 53(f64vec4) FAdd 239 238
+                              Store 55(dvec4v) 240
+             241:39(float64_t) Load 41(doublev)
+             242:39(float64_t) ExtInst 1(GLSL.std.450) 35(Modf) 241 41(doublev)
+             243:39(float64_t) Load 41(doublev)
+             244:39(float64_t) FAdd 243 242
+                              Store 41(doublev) 244
+             245: 43(f64vec2) Load 45(dvec2v)
+             246: 43(f64vec2) ExtInst 1(GLSL.std.450) 35(Modf) 245 45(dvec2v)
+             247: 43(f64vec2) Load 45(dvec2v)
+             248: 43(f64vec2) FAdd 247 246
+                              Store 45(dvec2v) 248
+             249: 48(f64vec3) Load 50(dvec3v)
+             250: 48(f64vec3) ExtInst 1(GLSL.std.450) 35(Modf) 249 50(dvec3v)
+             251: 48(f64vec3) Load 50(dvec3v)
+             252: 48(f64vec3) FAdd 251 250
+                              Store 50(dvec3v) 252
+             253: 53(f64vec4) Load 55(dvec4v)
+             254: 53(f64vec4) ExtInst 1(GLSL.std.450) 35(Modf) 253 55(dvec4v)
+             255: 53(f64vec4) Load 55(dvec4v)
+             256: 53(f64vec4) FAdd 255 254
+                              Store 55(dvec4v) 256
+             257:39(float64_t) Load 41(doublev)
+             258:39(float64_t) Load 41(doublev)
+             259:39(float64_t) ExtInst 1(GLSL.std.450) 79(NMin) 257 258
+             260:39(float64_t) Load 41(doublev)
+             261:39(float64_t) FAdd 260 259
+                              Store 41(doublev) 261
+             262: 43(f64vec2) Load 45(dvec2v)
+             263:39(float64_t) Load 41(doublev)
+             264: 43(f64vec2) CompositeConstruct 263 263
+             265: 43(f64vec2) ExtInst 1(GLSL.std.450) 79(NMin) 262 264
+             266: 43(f64vec2) Load 45(dvec2v)
+             267: 43(f64vec2) FAdd 266 265
+                              Store 45(dvec2v) 267
+             268: 48(f64vec3) Load 50(dvec3v)
+             269:39(float64_t) Load 41(doublev)
+             270: 48(f64vec3) CompositeConstruct 269 269 269
+             271: 48(f64vec3) ExtInst 1(GLSL.std.450) 79(NMin) 268 270
+             272: 48(f64vec3) Load 50(dvec3v)
+             273: 48(f64vec3) FAdd 272 271
+                              Store 50(dvec3v) 273
+             274: 53(f64vec4) Load 55(dvec4v)
+             275:39(float64_t) Load 41(doublev)
+             276: 53(f64vec4) CompositeConstruct 275 275 275 275
+             277: 53(f64vec4) ExtInst 1(GLSL.std.450) 79(NMin) 274 276
+             278: 53(f64vec4) Load 55(dvec4v)
+             279: 53(f64vec4) FAdd 278 277
+                              Store 55(dvec4v) 279
+             280: 43(f64vec2) Load 45(dvec2v)
+             281: 43(f64vec2) Load 45(dvec2v)
+             282: 43(f64vec2) ExtInst 1(GLSL.std.450) 79(NMin) 280 281
+             283: 43(f64vec2) Load 45(dvec2v)
+             284: 43(f64vec2) FAdd 283 282
+                              Store 45(dvec2v) 284
+             285: 48(f64vec3) Load 50(dvec3v)
+             286: 48(f64vec3) Load 50(dvec3v)
+             287: 48(f64vec3) ExtInst 1(GLSL.std.450) 79(NMin) 285 286
+             288: 48(f64vec3) Load 50(dvec3v)
+             289: 48(f64vec3) FAdd 288 287
+                              Store 50(dvec3v) 289
+             290: 53(f64vec4) Load 55(dvec4v)
+             291: 53(f64vec4) Load 55(dvec4v)
+             292: 53(f64vec4) ExtInst 1(GLSL.std.450) 79(NMin) 290 291
+             293: 53(f64vec4) Load 55(dvec4v)
+             294: 53(f64vec4) FAdd 293 292
+                              Store 55(dvec4v) 294
+             295:39(float64_t) Load 41(doublev)
+             296:39(float64_t) Load 41(doublev)
+             297:39(float64_t) ExtInst 1(GLSL.std.450) 80(NMax) 295 296
+             298:39(float64_t) Load 41(doublev)
+             299:39(float64_t) FAdd 298 297
+                              Store 41(doublev) 299
+             300: 43(f64vec2) Load 45(dvec2v)
+             301:39(float64_t) Load 41(doublev)
+             302: 43(f64vec2) CompositeConstruct 301 301
+             303: 43(f64vec2) ExtInst 1(GLSL.std.450) 80(NMax) 300 302
+             304: 43(f64vec2) Load 45(dvec2v)
+             305: 43(f64vec2) FAdd 304 303
+                              Store 45(dvec2v) 305
+             306: 48(f64vec3) Load 50(dvec3v)
+             307:39(float64_t) Load 41(doublev)
+             308: 48(f64vec3) CompositeConstruct 307 307 307
+             309: 48(f64vec3) ExtInst 1(GLSL.std.450) 80(NMax) 306 308
+             310: 48(f64vec3) Load 50(dvec3v)
+             311: 48(f64vec3) FAdd 310 309
+                              Store 50(dvec3v) 311
+             312: 53(f64vec4) Load 55(dvec4v)
+             313:39(float64_t) Load 41(doublev)
+             314: 53(f64vec4) CompositeConstruct 313 313 313 313
+             315: 53(f64vec4) ExtInst 1(GLSL.std.450) 80(NMax) 312 314
+             316: 53(f64vec4) Load 55(dvec4v)
+             317: 53(f64vec4) FAdd 316 315
+                              Store 55(dvec4v) 317
+             318: 43(f64vec2) Load 45(dvec2v)
+             319: 43(f64vec2) Load 45(dvec2v)
+             320: 43(f64vec2) ExtInst 1(GLSL.std.450) 80(NMax) 318 319
+             321: 43(f64vec2) Load 45(dvec2v)
+             322: 43(f64vec2) FAdd 321 320
+                              Store 45(dvec2v) 322
+             323: 48(f64vec3) Load 50(dvec3v)
+             324: 48(f64vec3) Load 50(dvec3v)
+             325: 48(f64vec3) ExtInst 1(GLSL.std.450) 80(NMax) 323 324
+             326: 48(f64vec3) Load 50(dvec3v)
+             327: 48(f64vec3) FAdd 326 325
+                              Store 50(dvec3v) 327
+             328: 53(f64vec4) Load 55(dvec4v)
+             329: 53(f64vec4) Load 55(dvec4v)
+             330: 53(f64vec4) ExtInst 1(GLSL.std.450) 80(NMax) 328 329
+             331: 53(f64vec4) Load 55(dvec4v)
+             332: 53(f64vec4) FAdd 331 330
+                              Store 55(dvec4v) 332
+             333:39(float64_t) Load 41(doublev)
+             334:39(float64_t) Load 41(doublev)
+             335:39(float64_t) Load 41(doublev)
+             336:39(float64_t) ExtInst 1(GLSL.std.450) 81(NClamp) 333 334 335
+             337:39(float64_t) Load 41(doublev)
+             338:39(float64_t) FAdd 337 336
+                              Store 41(doublev) 338
+             339: 43(f64vec2) Load 45(dvec2v)
+             340:39(float64_t) Load 41(doublev)
+             341:39(float64_t) Load 41(doublev)
+             342: 43(f64vec2) CompositeConstruct 340 340
+             343: 43(f64vec2) CompositeConstruct 341 341
+             344: 43(f64vec2) ExtInst 1(GLSL.std.450) 81(NClamp) 339 342 343
+             345: 43(f64vec2) Load 45(dvec2v)
+             346: 43(f64vec2) FAdd 345 344
+                              Store 45(dvec2v) 346
+             347: 48(f64vec3) Load 50(dvec3v)
+             348:39(float64_t) Load 41(doublev)
+             349:39(float64_t) Load 41(doublev)
+             350: 48(f64vec3) CompositeConstruct 348 348 348
+             351: 48(f64vec3) CompositeConstruct 349 349 349
+             352: 48(f64vec3) ExtInst 1(GLSL.std.450) 81(NClamp) 347 350 351
+             353: 48(f64vec3) Load 50(dvec3v)
+             354: 48(f64vec3) FAdd 353 352
+                              Store 50(dvec3v) 354
+             355: 53(f64vec4) Load 55(dvec4v)
+             356:39(float64_t) Load 41(doublev)
+             357:39(float64_t) Load 41(doublev)
+             358: 53(f64vec4) CompositeConstruct 356 356 356 356
+             359: 53(f64vec4) CompositeConstruct 357 357 357 357
+             360: 53(f64vec4) ExtInst 1(GLSL.std.450) 81(NClamp) 355 358 359
+             361: 53(f64vec4) Load 55(dvec4v)
+             362: 53(f64vec4) FAdd 361 360
+                              Store 55(dvec4v) 362
+             363: 43(f64vec2) Load 45(dvec2v)
+             364: 43(f64vec2) Load 45(dvec2v)
+             365: 43(f64vec2) Load 45(dvec2v)
+             366: 43(f64vec2) ExtInst 1(GLSL.std.450) 81(NClamp) 363 364 365
+             367: 43(f64vec2) Load 45(dvec2v)
+             368: 43(f64vec2) FAdd 367 366
+                              Store 45(dvec2v) 368
+             369: 48(f64vec3) Load 50(dvec3v)
+             370: 48(f64vec3) Load 50(dvec3v)
+             371: 48(f64vec3) Load 50(dvec3v)
+             372: 48(f64vec3) ExtInst 1(GLSL.std.450) 81(NClamp) 369 370 371
+             373: 48(f64vec3) Load 50(dvec3v)
+             374: 48(f64vec3) FAdd 373 372
+                              Store 50(dvec3v) 374
+             375: 53(f64vec4) Load 55(dvec4v)
+             376: 53(f64vec4) Load 55(dvec4v)
+             377: 53(f64vec4) Load 55(dvec4v)
+             378: 53(f64vec4) ExtInst 1(GLSL.std.450) 81(NClamp) 375 376 377
+             379: 53(f64vec4) Load 55(dvec4v)
+             380: 53(f64vec4) FAdd 379 378
+                              Store 55(dvec4v) 380
+             381:39(float64_t) Load 41(doublev)
+             382:39(float64_t) Load 41(doublev)
+             383:39(float64_t) Load 41(doublev)
+             384:39(float64_t) ExtInst 1(GLSL.std.450) 46(FMix) 381 382 383
+             385:39(float64_t) Load 41(doublev)
+             386:39(float64_t) FAdd 385 384
+                              Store 41(doublev) 386
+             387: 43(f64vec2) Load 45(dvec2v)
+             388: 43(f64vec2) Load 45(dvec2v)
+             389:39(float64_t) Load 41(doublev)
+             390: 43(f64vec2) CompositeConstruct 389 389
+             391: 43(f64vec2) ExtInst 1(GLSL.std.450) 46(FMix) 387 388 390
+             392: 43(f64vec2) Load 45(dvec2v)
+             393: 43(f64vec2) FAdd 392 391
+                              Store 45(dvec2v) 393
+             394: 48(f64vec3) Load 50(dvec3v)
+             395: 48(f64vec3) Load 50(dvec3v)
+             396:39(float64_t) Load 41(doublev)
+             397: 48(f64vec3) CompositeConstruct 396 396 396
+             398: 48(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 394 395 397
+             399: 48(f64vec3) Load 50(dvec3v)
+             400: 48(f64vec3) FAdd 399 398
+                              Store 50(dvec3v) 400
+             401: 53(f64vec4) Load 55(dvec4v)
+             402: 53(f64vec4) Load 55(dvec4v)
+             403:39(float64_t) Load 41(doublev)
+             404: 53(f64vec4) CompositeConstruct 403 403 403 403
+             405: 53(f64vec4) ExtInst 1(GLSL.std.450) 46(FMix) 401 402 404
+             406: 53(f64vec4) Load 55(dvec4v)
+             407: 53(f64vec4) FAdd 406 405
+                              Store 55(dvec4v) 407
+             408: 43(f64vec2) Load 45(dvec2v)
+             409: 43(f64vec2) Load 45(dvec2v)
+             410: 43(f64vec2) Load 45(dvec2v)
+             411: 43(f64vec2) ExtInst 1(GLSL.std.450) 46(FMix) 408 409 410
+             412: 43(f64vec2) Load 45(dvec2v)
+             413: 43(f64vec2) FAdd 412 411
+                              Store 45(dvec2v) 413
+             414: 48(f64vec3) Load 50(dvec3v)
+             415: 48(f64vec3) Load 50(dvec3v)
+             416: 48(f64vec3) Load 50(dvec3v)
+             417: 48(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 414 415 416
+             418: 48(f64vec3) Load 50(dvec3v)
+             419: 48(f64vec3) FAdd 418 417
+                              Store 50(dvec3v) 419
+             420: 53(f64vec4) Load 55(dvec4v)
+             421: 53(f64vec4) Load 55(dvec4v)
+             422: 53(f64vec4) Load 55(dvec4v)
+             423: 53(f64vec4) ExtInst 1(GLSL.std.450) 46(FMix) 420 421 422
+             424: 53(f64vec4) Load 55(dvec4v)
+             425: 53(f64vec4) FAdd 424 423
+                              Store 55(dvec4v) 425
+             426:39(float64_t) Load 41(doublev)
+             427:39(float64_t) Load 41(doublev)
+             431:   428(bool) Load 430(boolv)
+             432:39(float64_t) Select 431 427 426
+             433:39(float64_t) Load 41(doublev)
+             434:39(float64_t) FAdd 433 432
+                              Store 41(doublev) 434
+             435: 43(f64vec2) Load 45(dvec2v)
+             436: 43(f64vec2) Load 45(dvec2v)
+             440:  437(bvec2) Load 439(bvec2v)
+             441: 43(f64vec2) Select 440 436 435
+             442: 43(f64vec2) Load 45(dvec2v)
+             443: 43(f64vec2) FAdd 442 441
+                              Store 45(dvec2v) 443
+             444: 48(f64vec3) Load 50(dvec3v)
+             445: 48(f64vec3) Load 50(dvec3v)
+             449:  446(bvec3) Load 448(bvec3v)
+             450: 48(f64vec3) Select 449 445 444
+             451: 48(f64vec3) Load 50(dvec3v)
+             452: 48(f64vec3) FAdd 451 450
+                              Store 50(dvec3v) 452
+             453: 53(f64vec4) Load 55(dvec4v)
+             454: 53(f64vec4) Load 55(dvec4v)
+             458:  455(bvec4) Load 457(bvec4v)
+             459: 53(f64vec4) Select 458 454 453
+             460: 53(f64vec4) Load 55(dvec4v)
+             461: 53(f64vec4) FAdd 460 459
+                              Store 55(dvec4v) 461
+             462:39(float64_t) Load 41(doublev)
+             463:39(float64_t) Load 41(doublev)
+             464:39(float64_t) ExtInst 1(GLSL.std.450) 48(Step) 462 463
+             465:39(float64_t) Load 41(doublev)
+             466:39(float64_t) FAdd 465 464
+                              Store 41(doublev) 466
+             467: 43(f64vec2) Load 45(dvec2v)
+             468: 43(f64vec2) Load 45(dvec2v)
+             469: 43(f64vec2) ExtInst 1(GLSL.std.450) 48(Step) 467 468
+             470: 43(f64vec2) Load 45(dvec2v)
+             471: 43(f64vec2) FAdd 470 469
+                              Store 45(dvec2v) 471
+             472: 48(f64vec3) Load 50(dvec3v)
+             473: 48(f64vec3) Load 50(dvec3v)
+             474: 48(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 472 473
+             475: 48(f64vec3) Load 50(dvec3v)
+             476: 48(f64vec3) FAdd 475 474
+                              Store 50(dvec3v) 476
+             477: 53(f64vec4) Load 55(dvec4v)
+             478: 53(f64vec4) Load 55(dvec4v)
+             479: 53(f64vec4) ExtInst 1(GLSL.std.450) 48(Step) 477 478
+             480: 53(f64vec4) Load 55(dvec4v)
+             481: 53(f64vec4) FAdd 480 479
+                              Store 55(dvec4v) 481
+             482:39(float64_t) Load 41(doublev)
+             483: 43(f64vec2) Load 45(dvec2v)
+             484: 43(f64vec2) CompositeConstruct 482 482
+             485: 43(f64vec2) ExtInst 1(GLSL.std.450) 48(Step) 484 483
+             486: 43(f64vec2) Load 45(dvec2v)
+             487: 43(f64vec2) FAdd 486 485
+                              Store 45(dvec2v) 487
+             488:39(float64_t) Load 41(doublev)
+             489: 48(f64vec3) Load 50(dvec3v)
+             490: 48(f64vec3) CompositeConstruct 488 488 488
+             491: 48(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 490 489
+             492: 48(f64vec3) Load 50(dvec3v)
+             493: 48(f64vec3) FAdd 492 491
+                              Store 50(dvec3v) 493
+             494:39(float64_t) Load 41(doublev)
+             495: 53(f64vec4) Load 55(dvec4v)
+             496: 53(f64vec4) CompositeConstruct 494 494 494 494
+             497: 53(f64vec4) ExtInst 1(GLSL.std.450) 48(Step) 496 495
+             498: 53(f64vec4) Load 55(dvec4v)
+             499: 53(f64vec4) FAdd 498 497
+                              Store 55(dvec4v) 499
+             500:39(float64_t) Load 41(doublev)
+             501:39(float64_t) Load 41(doublev)
+             502:39(float64_t) Load 41(doublev)
+             503:39(float64_t) ExtInst 1(GLSL.std.450) 49(SmoothStep) 500 501 502
+             504:39(float64_t) Load 41(doublev)
+             505:39(float64_t) FAdd 504 503
+                              Store 41(doublev) 505
+             506: 43(f64vec2) Load 45(dvec2v)
+             507: 43(f64vec2) Load 45(dvec2v)
+             508: 43(f64vec2) Load 45(dvec2v)
+             509: 43(f64vec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 506 507 508
+             510: 43(f64vec2) Load 45(dvec2v)
+             511: 43(f64vec2) FAdd 510 509
+                              Store 45(dvec2v) 511
+             512: 48(f64vec3) Load 50(dvec3v)
+             513: 48(f64vec3) Load 50(dvec3v)
+             514: 48(f64vec3) Load 50(dvec3v)
+             515: 48(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 512 513 514
+             516: 48(f64vec3) Load 50(dvec3v)
+             517: 48(f64vec3) FAdd 516 515
+                              Store 50(dvec3v) 517
+             518: 53(f64vec4) Load 55(dvec4v)
+             519: 53(f64vec4) Load 55(dvec4v)
+             520: 53(f64vec4) Load 55(dvec4v)
+             521: 53(f64vec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 518 519 520
+             522: 53(f64vec4) Load 55(dvec4v)
+             523: 53(f64vec4) FAdd 522 521
+                              Store 55(dvec4v) 523
+             524:39(float64_t) Load 41(doublev)
+             525:39(float64_t) Load 41(doublev)
+             526: 43(f64vec2) Load 45(dvec2v)
+             527: 43(f64vec2) CompositeConstruct 524 524
+             528: 43(f64vec2) CompositeConstruct 525 525
+             529: 43(f64vec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 527 528 526
+             530: 43(f64vec2) Load 45(dvec2v)
+             531: 43(f64vec2) FAdd 530 529
+                              Store 45(dvec2v) 531
+             532:39(float64_t) Load 41(doublev)
+             533:39(float64_t) Load 41(doublev)
+             534: 48(f64vec3) Load 50(dvec3v)
+             535: 48(f64vec3) CompositeConstruct 532 532 532
+             536: 48(f64vec3) CompositeConstruct 533 533 533
+             537: 48(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 535 536 534
+             538: 48(f64vec3) Load 50(dvec3v)
+             539: 48(f64vec3) FAdd 538 537
+                              Store 50(dvec3v) 539
+             540:39(float64_t) Load 41(doublev)
+             541:39(float64_t) Load 41(doublev)
+             542: 53(f64vec4) Load 55(dvec4v)
+             543: 53(f64vec4) CompositeConstruct 540 540 540 540
+             544: 53(f64vec4) CompositeConstruct 541 541 541 541
+             545: 53(f64vec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 543 544 542
+             546: 53(f64vec4) Load 55(dvec4v)
+             547: 53(f64vec4) FAdd 546 545
+                              Store 55(dvec4v) 547
+             548:39(float64_t) Load 41(doublev)
+             549:   428(bool) IsNan 548
+                              Store 430(boolv) 549
+             550: 43(f64vec2) Load 45(dvec2v)
+             551:  437(bvec2) IsNan 550
+                              Store 439(bvec2v) 551
+             552: 48(f64vec3) Load 50(dvec3v)
+             553:  446(bvec3) IsNan 552
+                              Store 448(bvec3v) 553
+             554: 53(f64vec4) Load 55(dvec4v)
+             555:  455(bvec4) IsNan 554
+                              Store 457(bvec4v) 555
+             556:   428(bool) Load 430(boolv)
+                              SelectionMerge 559 None
+                              BranchConditional 556 558 562
+             558:               Label
+             560:39(float64_t)   Load 41(doublev)
+             561:   428(bool)   IsInf 560
+                                Store 557 561
+                                Branch 559
+             562:               Label
+                                Store 557 563
+                                Branch 559
+             559:             Label
+             564:   428(bool) Load 557
+                              Store 430(boolv) 564
+             565:   428(bool) Load 430(boolv)
+                              SelectionMerge 568 None
+                              BranchConditional 565 567 571
+             567:               Label
+             569: 43(f64vec2)   Load 45(dvec2v)
+             570:  437(bvec2)   IsInf 569
+                                Store 566 570
+                                Branch 568
+             571:               Label
+                                Store 566 572
+                                Branch 568
+             568:             Label
+             573:  437(bvec2) Load 566
+                              Store 439(bvec2v) 573
+             574:   428(bool) Load 430(boolv)
+                              SelectionMerge 577 None
+                              BranchConditional 574 576 580
+             576:               Label
+             578: 48(f64vec3)   Load 50(dvec3v)
+             579:  446(bvec3)   IsInf 578
+                                Store 575 579
+                                Branch 577
+             580:               Label
+                                Store 575 581
+                                Branch 577
+             577:             Label
+             582:  446(bvec3) Load 575
+                              Store 448(bvec3v) 582
+             583:   428(bool) Load 430(boolv)
+                              SelectionMerge 586 None
+                              BranchConditional 583 585 589
+             585:               Label
+             587: 53(f64vec4)   Load 55(dvec4v)
+             588:  455(bvec4)   IsInf 587
+                                Store 584 588
+                                Branch 586
+             589:               Label
+                                Store 584 590
+                                Branch 586
+             586:             Label
+             591:  455(bvec4) Load 584
+                              Store 457(bvec4v) 591
+             592:39(float64_t) Load 41(doublev)
+             593:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 592
+             594:39(float64_t) Load 41(doublev)
+             595:39(float64_t) FAdd 594 593
+                              Store 41(doublev) 595
+             596: 43(f64vec2) Load 45(dvec2v)
+             597:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 596
+             598:39(float64_t) Load 41(doublev)
+             599:39(float64_t) FAdd 598 597
+                              Store 41(doublev) 599
+             600: 48(f64vec3) Load 50(dvec3v)
+             601:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 600
+             602:39(float64_t) Load 41(doublev)
+             603:39(float64_t) FAdd 602 601
+                              Store 41(doublev) 603
+             604: 53(f64vec4) Load 55(dvec4v)
+             605:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 604
+             606:39(float64_t) Load 41(doublev)
+             607:39(float64_t) FAdd 606 605
+                              Store 41(doublev) 607
+             608:39(float64_t) Load 41(doublev)
+             609:39(float64_t) Load 41(doublev)
+             610:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 608 609
+             611:39(float64_t) Load 41(doublev)
+             612:39(float64_t) FAdd 611 610
+                              Store 41(doublev) 612
+             613: 43(f64vec2) Load 45(dvec2v)
+             614: 43(f64vec2) Load 45(dvec2v)
+             615:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 613 614
+             616:39(float64_t) Load 41(doublev)
+             617:39(float64_t) FAdd 616 615
+                              Store 41(doublev) 617
+             618: 48(f64vec3) Load 50(dvec3v)
+             619: 48(f64vec3) Load 50(dvec3v)
+             620:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 618 619
+             621:39(float64_t) Load 41(doublev)
+             622:39(float64_t) FAdd 621 620
+                              Store 41(doublev) 622
+             623: 53(f64vec4) Load 55(dvec4v)
+             624: 53(f64vec4) Load 55(dvec4v)
+             625:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 623 624
+             626:39(float64_t) Load 41(doublev)
+             627:39(float64_t) FAdd 626 625
+                              Store 41(doublev) 627
+             628:39(float64_t) Load 41(doublev)
+             629:39(float64_t) Load 41(doublev)
+             630:39(float64_t) FMul 628 629
+             631:39(float64_t) Load 41(doublev)
+             632:39(float64_t) FAdd 631 630
+                              Store 41(doublev) 632
+             633: 43(f64vec2) Load 45(dvec2v)
+             634: 43(f64vec2) Load 45(dvec2v)
+             635:39(float64_t) Dot 633 634
+             636:39(float64_t) Load 41(doublev)
+             637:39(float64_t) FAdd 636 635
+                              Store 41(doublev) 637
+             638: 48(f64vec3) Load 50(dvec3v)
+             639: 48(f64vec3) Load 50(dvec3v)
+             640:39(float64_t) Dot 638 639
+             641:39(float64_t) Load 41(doublev)
+             642:39(float64_t) FAdd 641 640
+                              Store 41(doublev) 642
+             643: 53(f64vec4) Load 55(dvec4v)
+             644: 53(f64vec4) Load 55(dvec4v)
+             645:39(float64_t) Dot 643 644
+             646:39(float64_t) Load 41(doublev)
+             647:39(float64_t) FAdd 646 645
+                              Store 41(doublev) 647
+             648: 48(f64vec3) Load 50(dvec3v)
+             649: 48(f64vec3) Load 50(dvec3v)
+             650: 48(f64vec3) ExtInst 1(GLSL.std.450) 68(Cross) 648 649
+             651: 48(f64vec3) Load 50(dvec3v)
+             652: 48(f64vec3) FAdd 651 650
+                              Store 50(dvec3v) 652
+             653:39(float64_t) Load 41(doublev)
+             654:39(float64_t) ExtInst 1(GLSL.std.450) 69(Normalize) 653
+             655:39(float64_t) Load 41(doublev)
+             656:39(float64_t) FAdd 655 654
+                              Store 41(doublev) 656
+             657: 43(f64vec2) Load 45(dvec2v)
+             658: 43(f64vec2) ExtInst 1(GLSL.std.450) 69(Normalize) 657
+             659: 43(f64vec2) Load 45(dvec2v)
+             660: 43(f64vec2) FAdd 659 658
+                              Store 45(dvec2v) 660
+             661: 48(f64vec3) Load 50(dvec3v)
+             662: 48(f64vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 661
+             663: 48(f64vec3) Load 50(dvec3v)
+             664: 48(f64vec3) FAdd 663 662
+                              Store 50(dvec3v) 664
+             665: 53(f64vec4) Load 55(dvec4v)
+             666: 53(f64vec4) ExtInst 1(GLSL.std.450) 69(Normalize) 665
+             667: 53(f64vec4) Load 55(dvec4v)
+             668: 53(f64vec4) FAdd 667 666
+                              Store 55(dvec4v) 668
+             669:39(float64_t) Load 41(doublev)
+             670:39(float64_t) Load 41(doublev)
+             671:39(float64_t) Load 41(doublev)
+             672:39(float64_t) ExtInst 1(GLSL.std.450) 70(FaceForward) 669 670 671
+             673:39(float64_t) Load 41(doublev)
+             674:39(float64_t) FAdd 673 672
+                              Store 41(doublev) 674
+             675: 43(f64vec2) Load 45(dvec2v)
+             676: 43(f64vec2) Load 45(dvec2v)
+             677: 43(f64vec2) Load 45(dvec2v)
+             678: 43(f64vec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 675 676 677
+             679: 43(f64vec2) Load 45(dvec2v)
+             680: 43(f64vec2) FAdd 679 678
+                              Store 45(dvec2v) 680
+             681: 48(f64vec3) Load 50(dvec3v)
+             682: 48(f64vec3) Load 50(dvec3v)
+             683: 48(f64vec3) Load 50(dvec3v)
+             684: 48(f64vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 681 682 683
+             685: 48(f64vec3) Load 50(dvec3v)
+             686: 48(f64vec3) FAdd 685 684
+                              Store 50(dvec3v) 686
+             687: 53(f64vec4) Load 55(dvec4v)
+             688: 53(f64vec4) Load 55(dvec4v)
+             689: 53(f64vec4) Load 55(dvec4v)
+             690: 53(f64vec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 687 688 689
+             691: 53(f64vec4) Load 55(dvec4v)
+             692: 53(f64vec4) FAdd 691 690
+                              Store 55(dvec4v) 692
+             693:39(float64_t) Load 41(doublev)
+             694:39(float64_t) Load 41(doublev)
+             695:39(float64_t) ExtInst 1(GLSL.std.450) 71(Reflect) 693 694
+             696:39(float64_t) Load 41(doublev)
+             697:39(float64_t) FAdd 696 695
+                              Store 41(doublev) 697
+             698: 43(f64vec2) Load 45(dvec2v)
+             699: 43(f64vec2) Load 45(dvec2v)
+             700: 43(f64vec2) ExtInst 1(GLSL.std.450) 71(Reflect) 698 699
+             701: 43(f64vec2) Load 45(dvec2v)
+             702: 43(f64vec2) FAdd 701 700
+                              Store 45(dvec2v) 702
+             703: 48(f64vec3) Load 50(dvec3v)
+             704: 48(f64vec3) Load 50(dvec3v)
+             705: 48(f64vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 703 704
+             706: 48(f64vec3) Load 50(dvec3v)
+             707: 48(f64vec3) FAdd 706 705
+                              Store 50(dvec3v) 707
+             708: 53(f64vec4) Load 55(dvec4v)
+             709: 53(f64vec4) Load 55(dvec4v)
+             710: 53(f64vec4) ExtInst 1(GLSL.std.450) 71(Reflect) 708 709
+             711: 53(f64vec4) Load 55(dvec4v)
+             712: 53(f64vec4) FAdd 711 710
+                              Store 55(dvec4v) 712
+             713:39(float64_t) Load 41(doublev)
+             714:39(float64_t) Load 41(doublev)
+             715:39(float64_t) Load 41(doublev)
+             716:39(float64_t) ExtInst 1(GLSL.std.450) 72(Refract) 713 714 715
+             717:39(float64_t) Load 41(doublev)
+             718:39(float64_t) FAdd 717 716
+                              Store 41(doublev) 718
+             719: 43(f64vec2) Load 45(dvec2v)
+             720: 43(f64vec2) Load 45(dvec2v)
+             721:39(float64_t) Load 41(doublev)
+             722: 43(f64vec2) ExtInst 1(GLSL.std.450) 72(Refract) 719 720 721
+             723: 43(f64vec2) Load 45(dvec2v)
+             724: 43(f64vec2) FAdd 723 722
+                              Store 45(dvec2v) 724
+             725: 48(f64vec3) Load 50(dvec3v)
+             726: 48(f64vec3) Load 50(dvec3v)
+             727:39(float64_t) Load 41(doublev)
+             728: 48(f64vec3) ExtInst 1(GLSL.std.450) 72(Refract) 725 726 727
+             729: 48(f64vec3) Load 50(dvec3v)
+             730: 48(f64vec3) FAdd 729 728
+                              Store 50(dvec3v) 730
+             731: 53(f64vec4) Load 55(dvec4v)
+             732: 53(f64vec4) Load 55(dvec4v)
+             733:39(float64_t) Load 41(doublev)
+             734: 53(f64vec4) ExtInst 1(GLSL.std.450) 72(Refract) 731 732 733
+             735: 53(f64vec4) Load 55(dvec4v)
+             736: 53(f64vec4) FAdd 735 734
+                              Store 55(dvec4v) 736
+             740: 43(f64vec2) Load 45(dvec2v)
+             741: 43(f64vec2) Load 45(dvec2v)
+             742:         737 OuterProduct 740 741
+                              Store 739(dmat2v) 742
+             746: 48(f64vec3) Load 50(dvec3v)
+             747: 48(f64vec3) Load 50(dvec3v)
+             748:         743 OuterProduct 746 747
+                              Store 745(dmat3v) 748
+             752: 53(f64vec4) Load 55(dvec4v)
+             753: 53(f64vec4) Load 55(dvec4v)
+             754:         749 OuterProduct 752 753
+                              Store 751(dmat4v) 754
+             758: 48(f64vec3) Load 50(dvec3v)
+             759: 43(f64vec2) Load 45(dvec2v)
+             760:         755 OuterProduct 758 759
+                              Store 757(dmat2x3v) 760
+             764: 43(f64vec2) Load 45(dvec2v)
+             765: 48(f64vec3) Load 50(dvec3v)
+             766:         761 OuterProduct 764 765
+                              Store 763(dmat3x2v) 766
+             770: 53(f64vec4) Load 55(dvec4v)
+             771: 43(f64vec2) Load 45(dvec2v)
+             772:         767 OuterProduct 770 771
+                              Store 769(dmat2x4v) 772
+             776: 43(f64vec2) Load 45(dvec2v)
+             777: 53(f64vec4) Load 55(dvec4v)
+             778:         773 OuterProduct 776 777
+                              Store 775(dmat4x2v) 778
+             782: 53(f64vec4) Load 55(dvec4v)
+             783: 48(f64vec3) Load 50(dvec3v)
+             784:         779 OuterProduct 782 783
+                              Store 781(dmat3x4v) 784
+             788: 48(f64vec3) Load 50(dvec3v)
+             789: 53(f64vec4) Load 55(dvec4v)
+             790:         785 OuterProduct 788 789
+                              Store 787(dmat4x3v) 790
+             791:         737 Load 739(dmat2v)
+             792:         737 Load 739(dmat2v)
+             793: 43(f64vec2) CompositeExtract 791 0
+             794: 43(f64vec2) CompositeExtract 792 0
+             795: 43(f64vec2) FMul 793 794
+             796: 43(f64vec2) CompositeExtract 791 1
+             797: 43(f64vec2) CompositeExtract 792 1
+             798: 43(f64vec2) FMul 796 797
+             799:         737 CompositeConstruct 795 798
+             800:         737 Load 739(dmat2v)
+             801:         737 MatrixTimesMatrix 800 799
+                              Store 739(dmat2v) 801
+             802:         743 Load 745(dmat3v)
+             803:         743 Load 745(dmat3v)
+             804: 48(f64vec3) CompositeExtract 802 0
+             805: 48(f64vec3) CompositeExtract 803 0
+             806: 48(f64vec3) FMul 804 805
+             807: 48(f64vec3) CompositeExtract 802 1
+             808: 48(f64vec3) CompositeExtract 803 1
+             809: 48(f64vec3) FMul 807 808
+             810: 48(f64vec3) CompositeExtract 802 2
+             811: 48(f64vec3) CompositeExtract 803 2
+             812: 48(f64vec3) FMul 810 811
+             813:         743 CompositeConstruct 806 809 812
+             814:         743 Load 745(dmat3v)
+             815:         743 MatrixTimesMatrix 814 813
+                              Store 745(dmat3v) 815
+             816:         749 Load 751(dmat4v)
+             817:         749 Load 751(dmat4v)
+             818: 53(f64vec4) CompositeExtract 816 0
+             819: 53(f64vec4) CompositeExtract 817 0
+             820: 53(f64vec4) FMul 818 819
+             821: 53(f64vec4) CompositeExtract 816 1
+             822: 53(f64vec4) CompositeExtract 817 1
+             823: 53(f64vec4) FMul 821 822
+             824: 53(f64vec4) CompositeExtract 816 2
+             825: 53(f64vec4) CompositeExtract 817 2
+             826: 53(f64vec4) FMul 824 825
+             827: 53(f64vec4) CompositeExtract 816 3
+             828: 53(f64vec4) CompositeExtract 817 3
+             829: 53(f64vec4) FMul 827 828
+             830:         749 CompositeConstruct 820 823 826 829
+             831:         749 Load 751(dmat4v)
+             832:         749 MatrixTimesMatrix 831 830
+                              Store 751(dmat4v) 832
+             833:         755 Load 757(dmat2x3v)
+             834:         755 Load 757(dmat2x3v)
+             835: 48(f64vec3) CompositeExtract 833 0
+             836: 48(f64vec3) CompositeExtract 834 0
+             837: 48(f64vec3) FMul 835 836
+             838: 48(f64vec3) CompositeExtract 833 1
+             839: 48(f64vec3) CompositeExtract 834 1
+             840: 48(f64vec3) FMul 838 839
+             841:         755 CompositeConstruct 837 840
+                              Store 757(dmat2x3v) 841
+             842:         767 Load 769(dmat2x4v)
+             843:         767 Load 769(dmat2x4v)
+             844: 53(f64vec4) CompositeExtract 842 0
+             845: 53(f64vec4) CompositeExtract 843 0
+             846: 53(f64vec4) FMul 844 845
+             847: 53(f64vec4) CompositeExtract 842 1
+             848: 53(f64vec4) CompositeExtract 843 1
+             849: 53(f64vec4) FMul 847 848
+             850:         767 CompositeConstruct 846 849
+                              Store 769(dmat2x4v) 850
+             851:         761 Load 763(dmat3x2v)
+             852:         761 Load 763(dmat3x2v)
+             853: 43(f64vec2) CompositeExtract 851 0
+             854: 43(f64vec2) CompositeExtract 852 0
+             855: 43(f64vec2) FMul 853 854
+             856: 43(f64vec2) CompositeExtract 851 1
+             857: 43(f64vec2) CompositeExtract 852 1
+             858: 43(f64vec2) FMul 856 857
+             859: 43(f64vec2) CompositeExtract 851 2
+             860: 43(f64vec2) CompositeExtract 852 2
+             861: 43(f64vec2) FMul 859 860
+             862:         761 CompositeConstruct 855 858 861
+                              Store 763(dmat3x2v) 862
+             863:         779 Load 781(dmat3x4v)
+             864:         779 Load 781(dmat3x4v)
+             865: 53(f64vec4) CompositeExtract 863 0
+             866: 53(f64vec4) CompositeExtract 864 0
+             867: 53(f64vec4) FMul 865 866
+             868: 53(f64vec4) CompositeExtract 863 1
+             869: 53(f64vec4) CompositeExtract 864 1
+             870: 53(f64vec4) FMul 868 869
+             871: 53(f64vec4) CompositeExtract 863 2
+             872: 53(f64vec4) CompositeExtract 864 2
+             873: 53(f64vec4) FMul 871 872
+             874:         779 CompositeConstruct 867 870 873
+                              Store 781(dmat3x4v) 874
+             875:         773 Load 775(dmat4x2v)
+             876:         773 Load 775(dmat4x2v)
+             877: 43(f64vec2) CompositeExtract 875 0
+             878: 43(f64vec2) CompositeExtract 876 0
+             879: 43(f64vec2) FMul 877 878
+             880: 43(f64vec2) CompositeExtract 875 1
+             881: 43(f64vec2) CompositeExtract 876 1
+             882: 43(f64vec2) FMul 880 881
+             883: 43(f64vec2) CompositeExtract 875 2
+             884: 43(f64vec2) CompositeExtract 876 2
+             885: 43(f64vec2) FMul 883 884
+             886: 43(f64vec2) CompositeExtract 875 3
+             887: 43(f64vec2) CompositeExtract 876 3
+             888: 43(f64vec2) FMul 886 887
+             889:         773 CompositeConstruct 879 882 885 888
+                              Store 775(dmat4x2v) 889
+             890:         785 Load 787(dmat4x3v)
+             891:         785 Load 787(dmat4x3v)
+             892: 48(f64vec3) CompositeExtract 890 0
+             893: 48(f64vec3) CompositeExtract 891 0
+             894: 48(f64vec3) FMul 892 893
+             895: 48(f64vec3) CompositeExtract 890 1
+             896: 48(f64vec3) CompositeExtract 891 1
+             897: 48(f64vec3) FMul 895 896
+             898: 48(f64vec3) CompositeExtract 890 2
+             899: 48(f64vec3) CompositeExtract 891 2
+             900: 48(f64vec3) FMul 898 899
+             901: 48(f64vec3) CompositeExtract 890 3
+             902: 48(f64vec3) CompositeExtract 891 3
+             903: 48(f64vec3) FMul 901 902
+             904:         785 CompositeConstruct 894 897 900 903
+                              Store 787(dmat4x3v) 904
+             905:         737 Load 739(dmat2v)
+             906:         737 Transpose 905
+             907:         737 Load 739(dmat2v)
+             908:         737 MatrixTimesMatrix 907 906
+                              Store 739(dmat2v) 908
+             909:         743 Load 745(dmat3v)
+             910:         743 Transpose 909
+             911:         743 Load 745(dmat3v)
+             912:         743 MatrixTimesMatrix 911 910
+                              Store 745(dmat3v) 912
+             913:         749 Load 751(dmat4v)
+             914:         749 Transpose 913
+             915:         749 Load 751(dmat4v)
+             916:         749 MatrixTimesMatrix 915 914
+                              Store 751(dmat4v) 916
+             917:         761 Load 763(dmat3x2v)
+             918:         755 Transpose 917
+                              Store 757(dmat2x3v) 918
+             919:         755 Load 757(dmat2x3v)
+             920:         761 Transpose 919
+                              Store 763(dmat3x2v) 920
+             921:         773 Load 775(dmat4x2v)
+             922:         767 Transpose 921
+                              Store 769(dmat2x4v) 922
+             923:         767 Load 769(dmat2x4v)
+             924:         773 Transpose 923
+                              Store 775(dmat4x2v) 924
+             925:         785 Load 787(dmat4x3v)
+             926:         779 Transpose 925
+                              Store 781(dmat3x4v) 926
+             927:         779 Load 781(dmat3x4v)
+             928:         785 Transpose 927
+                              Store 787(dmat4x3v) 928
+             929:         737 Load 739(dmat2v)
+             930:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 929
+             931:39(float64_t) Load 41(doublev)
+             932:39(float64_t) FAdd 931 930
+                              Store 41(doublev) 932
+             933:         743 Load 745(dmat3v)
+             934:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 933
+             935:39(float64_t) Load 41(doublev)
+             936:39(float64_t) FAdd 935 934
+                              Store 41(doublev) 936
+             937:         749 Load 751(dmat4v)
+             938:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 937
+             939:39(float64_t) Load 41(doublev)
+             940:39(float64_t) FAdd 939 938
+                              Store 41(doublev) 940
+             941:         737 Load 739(dmat2v)
+             942:         737 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 941
+             943:         737 Load 739(dmat2v)
+             944:         737 MatrixTimesMatrix 943 942
+                              Store 739(dmat2v) 944
+             945:         743 Load 745(dmat3v)
+             946:         743 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 945
+             947:         743 Load 745(dmat3v)
+             948:         743 MatrixTimesMatrix 947 946
+                              Store 745(dmat3v) 948
+             949:         749 Load 751(dmat4v)
+             950:         749 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 949
+             951:         749 Load 751(dmat4v)
+             952:         749 MatrixTimesMatrix 951 950
+                              Store 751(dmat4v) 952
+             953:39(float64_t) Load 41(doublev)
+             955:     40(ptr) AccessChain 45(dvec2v) 954
+             956:39(float64_t) Load 955
+             957:39(float64_t) FAdd 953 956
+             959:     40(ptr) AccessChain 50(dvec3v) 958
+             960:39(float64_t) Load 959
+             961:39(float64_t) FAdd 957 960
+             963:     40(ptr) AccessChain 55(dvec4v) 962
+             964:39(float64_t) Load 963
+             965:39(float64_t) FAdd 961 964
+             967:     40(ptr) AccessChain 739(dmat2v) 966 954
+             968:39(float64_t) Load 967
+             969:39(float64_t) FAdd 965 968
+             971:     40(ptr) AccessChain 745(dmat3v) 970 958
+             972:39(float64_t) Load 971
+             973:39(float64_t) FAdd 969 972
+             974:     40(ptr) AccessChain 751(dmat4v) 25 962
+             975:39(float64_t) Load 974
+             976:39(float64_t) FAdd 973 975
+             977:     40(ptr) AccessChain 757(dmat2x3v) 966 954
+             978:39(float64_t) Load 977
+             979:39(float64_t) FAdd 976 978
+             980:     40(ptr) AccessChain 763(dmat3x2v) 966 954
+             981:39(float64_t) Load 980
+             982:39(float64_t) FAdd 979 981
+             983:     40(ptr) AccessChain 781(dmat3x4v) 970 958
+             984:39(float64_t) Load 983
+             985:39(float64_t) FAdd 982 984
+             986:     40(ptr) AccessChain 787(dmat4x3v) 970 958
+             987:39(float64_t) Load 986
+             988:39(float64_t) FAdd 985 987
+             989:     40(ptr) AccessChain 769(dmat2x4v) 966 954
+             990:39(float64_t) Load 989
+             991:39(float64_t) FAdd 988 990
+             992:     40(ptr) AccessChain 775(dmat4x2v) 966 954
+             993:39(float64_t) Load 992
+             994:39(float64_t) FAdd 991 993
+             995:   428(bool) Load 430(boolv)
+             997:   10(float) Select 995 996 21
+             998:39(float64_t) FConvert 997
+             999:39(float64_t) FAdd 994 998
+            1000:    429(ptr) AccessChain 439(bvec2v) 33
+            1001:   428(bool) Load 1000
+            1002:   10(float) Select 1001 996 21
+            1003:39(float64_t) FConvert 1002
+            1004:39(float64_t) FAdd 999 1003
+            1005:    429(ptr) AccessChain 448(bvec3v) 33
+            1006:   428(bool) Load 1005
+            1007:   10(float) Select 1006 996 21
+            1008:39(float64_t) FConvert 1007
+            1009:39(float64_t) FAdd 1004 1008
+            1010:    429(ptr) AccessChain 457(bvec4v) 33
+            1011:   428(bool) Load 1010
+            1012:   10(float) Select 1011 996 21
+            1013:39(float64_t) FConvert 1012
+            1014:39(float64_t) FAdd 1009 1013
+            1015:   10(float) FConvert 1014
+            1016:   11(fvec4) Load 13(outp)
+            1017:   11(fvec4) VectorTimesScalar 1016 1015
+                              Store 13(outp) 1017
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.400.frag.out b/Test/baseResults/spv.400.frag.out
index 5433e4d..b2f4a16 100644
--- a/Test/baseResults/spv.400.frag.out
+++ b/Test/baseResults/spv.400.frag.out
@@ -1,7 +1,7 @@
 spv.400.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 1118
 
                               Capability Shader
diff --git a/Test/baseResults/spv.400.tesc.out b/Test/baseResults/spv.400.tesc.out
index ce7c3af..e84b420 100644
--- a/Test/baseResults/spv.400.tesc.out
+++ b/Test/baseResults/spv.400.tesc.out
@@ -1,6 +1,6 @@
 spv.400.tesc
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 92
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.400.tese.out b/Test/baseResults/spv.400.tese.out
index 43b6a91..5705fbd 100644
--- a/Test/baseResults/spv.400.tese.out
+++ b/Test/baseResults/spv.400.tese.out
@@ -1,6 +1,6 @@
 spv.400.tese
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 96
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.420.geom.out b/Test/baseResults/spv.420.geom.out
index fa91dd8..c75ae5d 100644
--- a/Test/baseResults/spv.420.geom.out
+++ b/Test/baseResults/spv.420.geom.out
@@ -1,6 +1,6 @@
 spv.420.geom
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 72
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.430.frag.out b/Test/baseResults/spv.430.frag.out
index 330489f..96ab1e9 100644
--- a/Test/baseResults/spv.430.frag.out
+++ b/Test/baseResults/spv.430.frag.out
@@ -1,6 +1,6 @@
 spv.430.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.430.vert.out b/Test/baseResults/spv.430.vert.out
index 1cd9e61..89e5b16 100644
--- a/Test/baseResults/spv.430.vert.out
+++ b/Test/baseResults/spv.430.vert.out
@@ -1,6 +1,6 @@
 spv.430.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/spv.450.geom.out b/Test/baseResults/spv.450.geom.out
index 7713e54..1e7e8c5 100644
--- a/Test/baseResults/spv.450.geom.out
+++ b/Test/baseResults/spv.450.geom.out
@@ -1,6 +1,6 @@
 spv.450.geom
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.450.noRedecl.tesc.out b/Test/baseResults/spv.450.noRedecl.tesc.out
index b23061d..31c7b4d 100644
--- a/Test/baseResults/spv.450.noRedecl.tesc.out
+++ b/Test/baseResults/spv.450.noRedecl.tesc.out
@@ -1,6 +1,6 @@
 spv.450.noRedecl.tesc
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 21
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.450.tesc.out b/Test/baseResults/spv.450.tesc.out
index 35653fd..0c22d9a 100644
--- a/Test/baseResults/spv.450.tesc.out
+++ b/Test/baseResults/spv.450.tesc.out
@@ -1,6 +1,6 @@
 spv.450.tesc
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 45
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.460.comp.out b/Test/baseResults/spv.460.comp.out
index 6ebf49f..0925674 100644
--- a/Test/baseResults/spv.460.comp.out
+++ b/Test/baseResults/spv.460.comp.out
@@ -1,6 +1,6 @@
 spv.460.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 15
 
                               Capability Shader
diff --git a/Test/baseResults/spv.460.frag.out b/Test/baseResults/spv.460.frag.out
index 04393fb..067bd43 100644
--- a/Test/baseResults/spv.460.frag.out
+++ b/Test/baseResults/spv.460.frag.out
@@ -1,6 +1,6 @@
 spv.460.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/spv.460.vert.out b/Test/baseResults/spv.460.vert.out
index c2ef302..a73b7e1 100644
--- a/Test/baseResults/spv.460.vert.out
+++ b/Test/baseResults/spv.460.vert.out
@@ -1,6 +1,6 @@
 spv.460.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.8bit-16bit-construction.frag.out b/Test/baseResults/spv.8bit-16bit-construction.frag.out
new file mode 100644
index 0000000..6cb9dc1
--- /dev/null
+++ b/Test/baseResults/spv.8bit-16bit-construction.frag.out
@@ -0,0 +1,82 @@
+spv.8bit-16bit-construction.frag
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 43
+
+                              Capability Shader
+                              Capability StorageUniformBufferBlock16
+                              Capability UniformAndStorageBuffer8BitAccess
+                              Extension  "SPV_KHR_16bit_storage"
+                              Extension  "SPV_KHR_8bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_16bit_storage"
+                              SourceExtension  "GL_EXT_shader_8bit_storage"
+                              Name 4  "main"
+                              Name 11  "B"
+                              MemberName 11(B) 0  "i8_from_i16"
+                              MemberName 11(B) 1  "i16_from_i8"
+                              MemberName 11(B) 2  "u8_from_u16"
+                              MemberName 11(B) 3  "u16_from_u8"
+                              MemberName 11(B) 4  "f16_from_i8"
+                              Name 13  ""
+                              MemberDecorate 11(B) 0 Offset 0
+                              MemberDecorate 11(B) 1 Offset 2
+                              MemberDecorate 11(B) 2 Offset 4
+                              MemberDecorate 11(B) 3 Offset 6
+                              MemberDecorate 11(B) 4 Offset 8
+                              Decorate 11(B) BufferBlock
+                              Decorate 13 DescriptorSet 0
+                              Decorate 13 Binding 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 8 1
+               7:             TypeInt 16 1
+               8:             TypeInt 8 0
+               9:             TypeInt 16 0
+              10:             TypeFloat 16
+           11(B):             TypeStruct 6(int8_t) 7(int16_t) 8(int8_t) 9(int16_t) 10(float16_t)
+              12:             TypePointer Uniform 11(B)
+              13:     12(ptr) Variable Uniform
+              14:             TypeInt 32 1
+              15:     14(int) Constant 0
+              16:     14(int) Constant 1
+              19:             TypePointer Uniform 6(int8_t)
+              23:             TypePointer Uniform 7(int16_t)
+              25:     14(int) Constant 2
+              26:             TypeInt 32 0
+              27:     26(int) Constant 1
+              30:             TypePointer Uniform 8(int8_t)
+              32:     14(int) Constant 3
+              35:             TypePointer Uniform 9(int16_t)
+              37:     14(int) Constant 4
+              39:             TypeFloat 32
+              41:             TypePointer Uniform 10(float16_t)
+         4(main):           2 Function None 3
+               5:             Label
+              17:  7(int16_t) SConvert 16
+              18:   6(int8_t) SConvert 17
+              20:     19(ptr) AccessChain 13 15
+                              Store 20 18
+              21:   6(int8_t) SConvert 16
+              22:  7(int16_t) SConvert 21
+              24:     23(ptr) AccessChain 13 16
+                              Store 24 22
+              28:  9(int16_t) UConvert 27
+              29:   8(int8_t) UConvert 28
+              31:     30(ptr) AccessChain 13 25
+                              Store 31 29
+              33:   8(int8_t) UConvert 27
+              34:  9(int16_t) UConvert 33
+              36:     35(ptr) AccessChain 13 32
+                              Store 36 34
+              38:   6(int8_t) SConvert 16
+              40:10(float16_t) FConvert 38
+              42:     41(ptr) AccessChain 13 37
+                              Store 42 40
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.8bitstorage-int.frag.out b/Test/baseResults/spv.8bitstorage-int.frag.out
index 12bf2ae..54a47af 100644
--- a/Test/baseResults/spv.8bitstorage-int.frag.out
+++ b/Test/baseResults/spv.8bitstorage-int.frag.out
@@ -1,10 +1,10 @@
 spv.8bitstorage-int.frag
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 172
+// Generated by (magic number): 80008
+// Id's are bound by 171
 
                               Capability Shader
-                              Capability CapabilityUniformAndStorageBuffer8BitAccess
+                              Capability UniformAndStorageBuffer8BitAccess
                               Extension  "SPV_KHR_8bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
@@ -208,10 +208,7 @@
              114:     20(int) Constant 7
              115:     20(int) Constant 6
              116:             TypePointer Uniform 20(int)
-             166:   6(int8_t) Constant 1
-             167:   6(int8_t) Constant 2
-             168:   7(i8vec2) ConstantComposite 166 167
-             170:   6(int8_t) Constant 3
+             166:   39(ivec2) ConstantComposite 32 33
          4(main):           2 Function None 3
                5:             Label
           69(x0):     68(ptr) Variable Function
@@ -331,9 +328,11 @@
              164:   6(int8_t) Load 163
              165:     28(ptr) AccessChain 19(b2) 21
                               Store 165 164
-             169:     42(ptr) AccessChain 19(b2) 32
-                              Store 169 168
-             171:     28(ptr) AccessChain 19(b2) 21
-                              Store 171 170
+             167:   7(i8vec2) SConvert 166
+             168:     42(ptr) AccessChain 19(b2) 32
+                              Store 168 167
+             169:   6(int8_t) SConvert 58
+             170:     28(ptr) AccessChain 19(b2) 21
+                              Store 170 169
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.8bitstorage-ssbo.vert.out b/Test/baseResults/spv.8bitstorage-ssbo.vert.out
index 1e23378..274639b 100644
--- a/Test/baseResults/spv.8bitstorage-ssbo.vert.out
+++ b/Test/baseResults/spv.8bitstorage-ssbo.vert.out
@@ -1,10 +1,10 @@
 spv.8bitstorage-ssbo.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 28
 
                               Capability Shader
-                              Capability CapabilityUniformAndStorageBuffer8BitAccess
+                              Capability UniformAndStorageBuffer8BitAccess
                               Extension  "SPV_KHR_8bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
diff --git a/Test/baseResults/spv.8bitstorage-ubo.vert.out b/Test/baseResults/spv.8bitstorage-ubo.vert.out
index a6a05cf..af95a76 100644
--- a/Test/baseResults/spv.8bitstorage-ubo.vert.out
+++ b/Test/baseResults/spv.8bitstorage-ubo.vert.out
@@ -1,10 +1,10 @@
 spv.8bitstorage-ubo.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 29
 
                               Capability Shader
-                              Capability CapabilityUniformAndStorageBuffer8BitAccess
+                              Capability UniformAndStorageBuffer8BitAccess
                               Extension  "SPV_KHR_8bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
diff --git a/Test/baseResults/spv.8bitstorage-uint.frag.out b/Test/baseResults/spv.8bitstorage-uint.frag.out
index 595558d..6565882 100644
--- a/Test/baseResults/spv.8bitstorage-uint.frag.out
+++ b/Test/baseResults/spv.8bitstorage-uint.frag.out
@@ -1,10 +1,10 @@
 spv.8bitstorage-uint.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 173
 
                               Capability Shader
-                              Capability CapabilityUniformAndStorageBuffer8BitAccess
+                              Capability UniformAndStorageBuffer8BitAccess
                               Extension  "SPV_KHR_8bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
@@ -209,10 +209,8 @@
              115:     20(int) Constant 7
              116:     20(int) Constant 6
              117:             TypePointer Uniform 9(int)
-             167:   6(int8_t) Constant 1
-             168:   6(int8_t) Constant 2
-             169:   7(i8vec2) ConstantComposite 167 168
-             171:   6(int8_t) Constant 3
+             167:   39(ivec2) ConstantComposite 82 10
+             170:      9(int) Constant 3
          4(main):           2 Function None 3
                5:             Label
           69(x0):     68(ptr) Variable Function
@@ -332,8 +330,10 @@
              165:   6(int8_t) Load 164
              166:     28(ptr) AccessChain 19(b2) 21
                               Store 166 165
-             170:     42(ptr) AccessChain 19(b2) 32
-                              Store 170 169
+             168:   7(i8vec2) UConvert 167
+             169:     42(ptr) AccessChain 19(b2) 32
+                              Store 169 168
+             171:   6(int8_t) UConvert 170
              172:     28(ptr) AccessChain 19(b2) 21
                               Store 172 171
                               Return
diff --git a/Test/baseResults/spv.AnyHitShader.rahit.out b/Test/baseResults/spv.AnyHitShader.rahit.out
index 92b31d0..6bef52d 100644
--- a/Test/baseResults/spv.AnyHitShader.rahit.out
+++ b/Test/baseResults/spv.AnyHitShader.rahit.out
@@ -1,13 +1,13 @@
 spv.AnyHitShader.rahit
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 81
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint AnyHitNV 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67
+                              EntryPoint AnyHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -42,21 +42,21 @@
                               Name 66  "v14"
                               Name 67  "gl_WorldToObjectNV"
                               Name 71  "incomingPayload"
-                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
-                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
+                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
                               Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
                               Decorate 23(gl_InstanceID) BuiltIn InstanceId
-                              Decorate 26(gl_InstanceCustomIndexNV) BuiltIn InstanceCustomIndexNV
-                              Decorate 33(gl_WorldRayOriginNV) BuiltIn WorldRayOriginNV
-                              Decorate 36(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionNV
-                              Decorate 39(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginNV
-                              Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionNV
-                              Decorate 47(gl_RayTminNV) BuiltIn RayTminNV
-                              Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxNV
-                              Decorate 53(gl_HitTNV) BuiltIn HitTNV
-                              Decorate 58(gl_HitKindNV) BuiltIn HitKindNV
-                              Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldNV
-                              Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectNV
+                              Decorate 26(gl_InstanceCustomIndexNV) BuiltIn InstanceCustomIndexKHR
+                              Decorate 33(gl_WorldRayOriginNV) BuiltIn WorldRayOriginKHR
+                              Decorate 36(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionKHR
+                              Decorate 39(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginKHR
+                              Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR
+                              Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR
+                              Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR
+                              Decorate 53(gl_HitTNV) BuiltIn HitTKHR
+                              Decorate 58(gl_HitKindNV) BuiltIn HitKindKHR
+                              Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR
+                              Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR
                               Decorate 71(incomingPayload) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
@@ -94,8 +94,8 @@
 64(gl_ObjectToWorldNV):     63(ptr) Variable Input
 67(gl_WorldToObjectNV):     63(ptr) Variable Input
               69:             TypeVector 28(float) 4
-              70:             TypePointer IncomingRayPayloadNV 69(fvec4)
-71(incomingPayload):     70(ptr) Variable IncomingRayPayloadNV
+              70:             TypePointer IncomingRayPayloadKHR 69(fvec4)
+71(incomingPayload):     70(ptr) Variable IncomingRayPayloadKHR
               72:   28(float) Constant 1056964608
               73:   69(fvec4) ConstantComposite 72 72 72 72
               75:     16(int) Constant 1
@@ -153,10 +153,10 @@
                               SelectionMerge 79 None
                               BranchConditional 77 78 80
               78:               Label
-                                IgnoreIntersectionNV
+                                IgnoreIntersectionKHR
                                 Branch 79
               80:               Label
-                                TerminateRayNV
+                                TerminateRayKHR
                                 Branch 79
               79:             Label
                               Return
diff --git a/Test/baseResults/spv.AofA.frag.out b/Test/baseResults/spv.AofA.frag.out
index 7433f17..c9f8b46 100644
--- a/Test/baseResults/spv.AofA.frag.out
+++ b/Test/baseResults/spv.AofA.frag.out
@@ -3,7 +3,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 104
 
                               Capability Shader
diff --git a/Test/baseResults/spv.ClosestHitShader.rchit.out b/Test/baseResults/spv.ClosestHitShader.rchit.out
index b461462..cefdc50 100644
--- a/Test/baseResults/spv.ClosestHitShader.rchit.out
+++ b/Test/baseResults/spv.ClosestHitShader.rchit.out
@@ -1,13 +1,13 @@
 spv.ClosestHitShader.rchit
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 88
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint ClosestHitNV 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67
+                              EntryPoint ClosestHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -44,21 +44,21 @@
                               Name 71  "accNV"
                               Name 85  "localPayload"
                               Name 87  "incomingPayload"
-                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
-                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
+                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
                               Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
                               Decorate 23(gl_InstanceID) BuiltIn InstanceId
-                              Decorate 26(gl_InstanceCustomIndexNV) BuiltIn InstanceCustomIndexNV
-                              Decorate 33(gl_WorldRayOriginNV) BuiltIn WorldRayOriginNV
-                              Decorate 36(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionNV
-                              Decorate 39(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginNV
-                              Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionNV
-                              Decorate 47(gl_RayTminNV) BuiltIn RayTminNV
-                              Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxNV
-                              Decorate 53(gl_HitTNV) BuiltIn HitTNV
-                              Decorate 58(gl_HitKindNV) BuiltIn HitKindNV
-                              Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldNV
-                              Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectNV
+                              Decorate 26(gl_InstanceCustomIndexNV) BuiltIn InstanceCustomIndexKHR
+                              Decorate 33(gl_WorldRayOriginNV) BuiltIn WorldRayOriginKHR
+                              Decorate 36(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionKHR
+                              Decorate 39(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginKHR
+                              Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR
+                              Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR
+                              Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR
+                              Decorate 53(gl_HitTNV) BuiltIn HitTKHR
+                              Decorate 58(gl_HitKindNV) BuiltIn HitKindKHR
+                              Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR
+                              Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR
                               Decorate 71(accNV) DescriptorSet 0
                               Decorate 71(accNV) Binding 0
                               Decorate 85(localPayload) Location 0
@@ -98,7 +98,7 @@
               63:             TypePointer Input 60
 64(gl_ObjectToWorldNV):     63(ptr) Variable Input
 67(gl_WorldToObjectNV):     63(ptr) Variable Input
-              69:             TypeAccelerationStructureNV
+              69:             TypeAccelerationStructureKHR
               70:             TypePointer UniformConstant 69
        71(accNV):     70(ptr) Variable UniformConstant
               73:      6(int) Constant 0
@@ -112,10 +112,10 @@
               81:   28(float) Constant 1061158912
               82:     16(int) Constant 1
               83:             TypeVector 28(float) 4
-              84:             TypePointer RayPayloadNV 83(fvec4)
-85(localPayload):     84(ptr) Variable RayPayloadNV
-              86:             TypePointer IncomingRayPayloadNV 83(fvec4)
-87(incomingPayload):     86(ptr) Variable IncomingRayPayloadNV
+              84:             TypePointer RayPayloadKHR 83(fvec4)
+85(localPayload):     84(ptr) Variable RayPayloadKHR
+              86:             TypePointer IncomingRayPayloadKHR 83(fvec4)
+87(incomingPayload):     86(ptr) Variable IncomingRayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -164,6 +164,6 @@
               68:          60 Load 67(gl_WorldToObjectNV)
                               Store 66(v14) 68
               72:          69 Load 71(accNV)
-                              TraceNV 72 73 74 75 76 73 78 77 80 81 82
+                              TraceRayKHR 72 73 74 75 76 73 78 77 80 81 82
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.GeometryShaderPassthrough.geom.out b/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
index 5db845e..7e62c57 100644
--- a/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
+++ b/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
@@ -1,6 +1,6 @@
 spv.GeometryShaderPassthrough.geom
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 15
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.IntersectShader.rint.out b/Test/baseResults/spv.IntersectShader.rint.out
index cbb70cd..bf99241 100644
--- a/Test/baseResults/spv.IntersectShader.rint.out
+++ b/Test/baseResults/spv.IntersectShader.rint.out
@@ -1,13 +1,13 @@
 spv.IntersectShader.rint
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 71
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint IntersectionNV 4  "main" 11 14 20 23 26 33 36 39 42 47 50 56 59
+                              EntryPoint IntersectionKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 56 59
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -38,19 +38,19 @@
                               Name 58  "v12"
                               Name 59  "gl_WorldToObjectNV"
                               Name 63  "iAttr"
-                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
-                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
+                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
                               Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
                               Decorate 23(gl_InstanceID) BuiltIn InstanceId
-                              Decorate 26(gl_InstanceCustomIndexNV) BuiltIn InstanceCustomIndexNV
-                              Decorate 33(gl_WorldRayOriginNV) BuiltIn WorldRayOriginNV
-                              Decorate 36(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionNV
-                              Decorate 39(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginNV
-                              Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionNV
-                              Decorate 47(gl_RayTminNV) BuiltIn RayTminNV
-                              Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxNV
-                              Decorate 56(gl_ObjectToWorldNV) BuiltIn ObjectToWorldNV
-                              Decorate 59(gl_WorldToObjectNV) BuiltIn WorldToObjectNV
+                              Decorate 26(gl_InstanceCustomIndexNV) BuiltIn InstanceCustomIndexKHR
+                              Decorate 33(gl_WorldRayOriginNV) BuiltIn WorldRayOriginKHR
+                              Decorate 36(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionKHR
+                              Decorate 39(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginKHR
+                              Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR
+                              Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR
+                              Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR
+                              Decorate 56(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR
+                              Decorate 59(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -83,8 +83,8 @@
 56(gl_ObjectToWorldNV):     55(ptr) Variable Input
 59(gl_WorldToObjectNV):     55(ptr) Variable Input
               61:             TypeVector 28(float) 4
-              62:             TypePointer HitAttributeNV 61(fvec4)
-       63(iAttr):     62(ptr) Variable HitAttributeNV
+              62:             TypePointer HitAttributeKHR 61(fvec4)
+       63(iAttr):     62(ptr) Variable HitAttributeKHR
               64:   28(float) Constant 1056964608
               65:   28(float) Constant 0
               66:   28(float) Constant 1065353216
@@ -133,6 +133,6 @@
               60:          52 Load 59(gl_WorldToObjectNV)
                               Store 58(v12) 60
                               Store 63(iAttr) 67
-              70:    69(bool) ReportIntersectionNV 64 68
+              70:    69(bool) ReportIntersectionKHR 64 68
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.MissShader.rmiss.out b/Test/baseResults/spv.MissShader.rmiss.out
index 0ad3341..b811044 100644
--- a/Test/baseResults/spv.MissShader.rmiss.out
+++ b/Test/baseResults/spv.MissShader.rmiss.out
@@ -1,13 +1,13 @@
 spv.MissShader.rmiss
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 60
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint MissNV 4  "main" 11 14 21 24 27 30 35 38
+                              EntryPoint MissKHR 4  "main" 11 14 21 24 27 30 35 38
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -30,14 +30,14 @@
                               Name 42  "accNV"
                               Name 57  "localPayload"
                               Name 59  "incomingPayload"
-                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
-                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
-                              Decorate 21(gl_WorldRayOriginNV) BuiltIn WorldRayOriginNV
-                              Decorate 24(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionNV
-                              Decorate 27(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginNV
-                              Decorate 30(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionNV
-                              Decorate 35(gl_RayTminNV) BuiltIn RayTminNV
-                              Decorate 38(gl_RayTmaxNV) BuiltIn RayTmaxNV
+                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
+                              Decorate 21(gl_WorldRayOriginNV) BuiltIn WorldRayOriginKHR
+                              Decorate 24(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionKHR
+                              Decorate 27(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginKHR
+                              Decorate 30(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR
+                              Decorate 35(gl_RayTminNV) BuiltIn RayTminKHR
+                              Decorate 38(gl_RayTmaxNV) BuiltIn RayTmaxKHR
                               Decorate 42(accNV) DescriptorSet 0
                               Decorate 42(accNV) Binding 0
                               Decorate 57(localPayload) Location 0
@@ -62,7 +62,7 @@
               34:             TypePointer Input 16(float)
 35(gl_RayTminNV):     34(ptr) Variable Input
 38(gl_RayTmaxNV):     34(ptr) Variable Input
-              40:             TypeAccelerationStructureNV
+              40:             TypeAccelerationStructureKHR
               41:             TypePointer UniformConstant 40
        42(accNV):     41(ptr) Variable UniformConstant
               44:      6(int) Constant 0
@@ -77,10 +77,10 @@
               53:             TypeInt 32 1
               54:     53(int) Constant 1
               55:             TypeVector 16(float) 4
-              56:             TypePointer RayPayloadNV 55(fvec4)
-57(localPayload):     56(ptr) Variable RayPayloadNV
-              58:             TypePointer IncomingRayPayloadNV 55(fvec4)
-59(incomingPayload):     58(ptr) Variable IncomingRayPayloadNV
+              56:             TypePointer RayPayloadKHR 55(fvec4)
+57(localPayload):     56(ptr) Variable RayPayloadKHR
+              58:             TypePointer IncomingRayPayloadKHR 55(fvec4)
+59(incomingPayload):     58(ptr) Variable IncomingRayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -108,6 +108,6 @@
               39:   16(float) Load 38(gl_RayTmaxNV)
                               Store 37(v7) 39
               43:          40 Load 42(accNV)
-                              TraceNV 43 44 45 46 47 44 49 48 51 52 54
+                              TraceRayKHR 43 44 45 46 47 44 49 48 51 52 54
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.OVR_multiview.vert.out b/Test/baseResults/spv.OVR_multiview.vert.out
index 7013ced..66168dc 100644
--- a/Test/baseResults/spv.OVR_multiview.vert.out
+++ b/Test/baseResults/spv.OVR_multiview.vert.out
@@ -1,6 +1,6 @@
 spv.OVR_multiview.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.Operations.frag.out b/Test/baseResults/spv.Operations.frag.out
index 4113ddf..ad54f6c 100644
--- a/Test/baseResults/spv.Operations.frag.out
+++ b/Test/baseResults/spv.Operations.frag.out
@@ -1,12 +1,12 @@
 spv.Operations.frag
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 532
+// Generated by (magic number): 80008
+// Id's are bound by 583
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 11 22 212 288 485 526 531
+                              EntryPoint Fragment 4  "main" 11 22 220 296 314 539 580
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               Name 4  "main"
@@ -14,23 +14,29 @@
                               Name 11  "uv4"
                               Name 20  "i"
                               Name 22  "ui"
-                              Name 181  "ub41"
-                              Name 188  "f"
-                              Name 212  "uf"
-                              Name 285  "u"
-                              Name 288  "uui"
-                              Name 305  "b"
-                              Name 342  "ub42"
-                              Name 485  "FragColor"
-                              Name 503  "m1"
-                              Name 510  "m2"
-                              Name 526  "uiv4"
-                              Name 528  "ub"
-                              Name 531  "uuv4"
+                              Name 155  "swizzleTemp"
+                              Name 189  "ub41"
+                              Name 196  "f"
+                              Name 220  "uf"
+                              Name 293  "u"
+                              Name 296  "uui"
+                              Name 314  "uuv4"
+                              Name 321  "msb"
+                              Name 323  "swizzleTemp"
+                              Name 324  "lsb"
+                              Name 325  "swizzleTemp"
+                              Name 326  "ResType"
+                              Name 359  "b"
+                              Name 396  "ub42"
+                              Name 539  "FragColor"
+                              Name 557  "m1"
+                              Name 564  "m2"
+                              Name 580  "uiv4"
+                              Name 582  "ub"
                               Decorate 22(ui) Flat
-                              Decorate 288(uui) Flat
-                              Decorate 526(uiv4) Flat
-                              Decorate 531(uuv4) Flat
+                              Decorate 296(uui) Flat
+                              Decorate 314(uuv4) Flat
+                              Decorate 580(uiv4) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -45,55 +51,66 @@
              141:             TypeInt 32 0
              142:    141(int) Constant 0
              143:             TypePointer Function 6(float)
-             178:             TypeBool
-             179:             TypeVector 178(bool) 4
-             180:             TypePointer Private 179(bvec4)
-       181(ub41):    180(ptr) Variable Private
-             211:             TypePointer Input 6(float)
-         212(uf):    211(ptr) Variable Input
-             284:             TypePointer Function 141(int)
-             287:             TypePointer Input 141(int)
-        288(uui):    287(ptr) Variable Input
-             304:             TypePointer Function 178(bool)
-       342(ub42):    180(ptr) Variable Private
-             398:     18(int) Constant 2
-             405:     18(int) Constant 1
-             435:             TypeVector 6(float) 3
-             454:    6(float) Constant 1073741824
-             461:    6(float) Constant 1065353216
-             466:     18(int) Constant 66
-             472:     18(int) Constant 17
-             484:             TypePointer Output 7(fvec4)
-  485(FragColor):    484(ptr) Variable Output
-             501:             TypeMatrix 7(fvec4) 4
-             502:             TypePointer Function 501
-             504:    6(float) Constant 0
-             505:    7(fvec4) ConstantComposite 461 504 504 504
-             506:    7(fvec4) ConstantComposite 504 461 504 504
-             507:    7(fvec4) ConstantComposite 504 504 461 504
-             508:    7(fvec4) ConstantComposite 504 504 504 461
-             509:         501 ConstantComposite 505 506 507 508
-             511:    7(fvec4) ConstantComposite 504 504 504 504
-             512:         501 ConstantComposite 511 511 511 511
-             524:             TypeVector 18(int) 4
-             525:             TypePointer Input 524(ivec4)
-       526(uiv4):    525(ptr) Variable Input
-             527:             TypePointer Private 178(bool)
-         528(ub):    527(ptr) Variable Private
-             529:             TypeVector 141(int) 4
-             530:             TypePointer Input 529(ivec4)
-       531(uuv4):    530(ptr) Variable Input
+             186:             TypeBool
+             187:             TypeVector 186(bool) 4
+             188:             TypePointer Private 187(bvec4)
+       189(ub41):    188(ptr) Variable Private
+             219:             TypePointer Input 6(float)
+         220(uf):    219(ptr) Variable Input
+             292:             TypePointer Function 141(int)
+             295:             TypePointer Input 141(int)
+        296(uui):    295(ptr) Variable Input
+             312:             TypeVector 141(int) 4
+             313:             TypePointer Input 312(ivec4)
+       314(uuv4):    313(ptr) Variable Input
+             315:             TypeVector 141(int) 3
+             320:             TypePointer Function 312(ivec4)
+             322:             TypePointer Function 315(ivec3)
+    326(ResType):             TypeStruct 315(ivec3) 315(ivec3)
+             338:    141(int) Constant 1
+             342:    141(int) Constant 2
+             358:             TypePointer Function 186(bool)
+       396(ub42):    188(ptr) Variable Private
+             452:     18(int) Constant 2
+             459:     18(int) Constant 1
+             489:             TypeVector 6(float) 3
+             508:    6(float) Constant 1073741824
+             515:    6(float) Constant 1065353216
+             520:     18(int) Constant 66
+             526:     18(int) Constant 17
+             538:             TypePointer Output 7(fvec4)
+  539(FragColor):    538(ptr) Variable Output
+             555:             TypeMatrix 7(fvec4) 4
+             556:             TypePointer Function 555
+             558:    6(float) Constant 0
+             559:    7(fvec4) ConstantComposite 515 558 558 558
+             560:    7(fvec4) ConstantComposite 558 515 558 558
+             561:    7(fvec4) ConstantComposite 558 558 515 558
+             562:    7(fvec4) ConstantComposite 558 558 558 515
+             563:         555 ConstantComposite 559 560 561 562
+             565:    7(fvec4) ConstantComposite 558 558 558 558
+             566:         555 ConstantComposite 565 565 565 565
+             578:             TypeVector 18(int) 4
+             579:             TypePointer Input 578(ivec4)
+       580(uiv4):    579(ptr) Variable Input
+             581:             TypePointer Private 186(bool)
+         582(ub):    581(ptr) Variable Private
          4(main):           2 Function None 3
                5:             Label
             9(v):      8(ptr) Variable Function
            20(i):     19(ptr) Variable Function
-          188(f):    143(ptr) Variable Function
-          285(u):    284(ptr) Variable Function
-          305(b):    304(ptr) Variable Function
-             487:      8(ptr) Variable Function
-         503(m1):    502(ptr) Variable Function
-         510(m2):    502(ptr) Variable Function
-             514:    502(ptr) Variable Function
+155(swizzleTemp):      8(ptr) Variable Function
+          196(f):    143(ptr) Variable Function
+          293(u):    292(ptr) Variable Function
+        321(msb):    320(ptr) Variable Function
+323(swizzleTemp):    322(ptr) Variable Function
+        324(lsb):    320(ptr) Variable Function
+325(swizzleTemp):    322(ptr) Variable Function
+          359(b):    358(ptr) Variable Function
+             541:      8(ptr) Variable Function
+         557(m1):    556(ptr) Variable Function
+         564(m2):    556(ptr) Variable Function
+             568:    556(ptr) Variable Function
               12:    7(fvec4) Load 11(uv4)
               13:    7(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 12
                               Store 9(v) 13
@@ -262,441 +279,489 @@
              153:    7(fvec4) FAdd 152 151
                               Store 9(v) 153
              154:    7(fvec4) Load 9(v)
-             155:    7(fvec4) Load 11(uv4)
-             156:    7(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 154 155
-             157:    7(fvec4) Load 9(v)
-             158:    7(fvec4) FAdd 157 156
-                              Store 9(v) 158
-             159:    7(fvec4) Load 9(v)
-             160:    7(fvec4) Load 11(uv4)
-             161:    7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 159 160
+             156:    7(fvec4) ExtInst 1(GLSL.std.450) 35(Modf) 154 155(swizzleTemp)
+             157:    7(fvec4) Load 155(swizzleTemp)
+             158:    7(fvec4) Load 9(v)
+             159:    7(fvec4) VectorShuffle 158 157 6 4 5 7
+                              Store 9(v) 159
+             160:    7(fvec4) Load 9(v)
+             161:    7(fvec4) FAdd 160 156
+                              Store 9(v) 161
              162:    7(fvec4) Load 9(v)
-             163:    7(fvec4) FAdd 162 161
-                              Store 9(v) 163
-             164:    7(fvec4) Load 9(v)
-             165:    7(fvec4) Load 11(uv4)
-             166:    7(fvec4) Load 11(uv4)
-             167:    7(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 164 165 166
-             168:    7(fvec4) Load 9(v)
-             169:    7(fvec4) FAdd 168 167
-                              Store 9(v) 169
+             163:    7(fvec4) Load 11(uv4)
+             164:    7(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 162 163
+             165:    7(fvec4) Load 9(v)
+             166:    7(fvec4) FAdd 165 164
+                              Store 9(v) 166
+             167:    7(fvec4) Load 9(v)
+             168:    7(fvec4) Load 11(uv4)
+             169:    7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 167 168
              170:    7(fvec4) Load 9(v)
-             171:    7(fvec4) Load 9(v)
+             171:    7(fvec4) FAdd 170 169
+                              Store 9(v) 171
              172:    7(fvec4) Load 9(v)
-             173:    7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 170 171 172
-             174:    7(fvec4) Load 9(v)
-             175:    7(fvec4) FAdd 174 173
-                              Store 9(v) 175
+             173:    7(fvec4) Load 11(uv4)
+             174:    7(fvec4) Load 11(uv4)
+             175:    7(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 172 173 174
              176:    7(fvec4) Load 9(v)
-             177:    7(fvec4) Load 9(v)
-             182:  179(bvec4) Load 181(ub41)
-             183:    7(fvec4) Select 182 177 176
+             177:    7(fvec4) FAdd 176 175
+                              Store 9(v) 177
+             178:    7(fvec4) Load 9(v)
+             179:    7(fvec4) Load 9(v)
+             180:    7(fvec4) Load 9(v)
+             181:    7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 178 179 180
+             182:    7(fvec4) Load 9(v)
+             183:    7(fvec4) FAdd 182 181
+                              Store 9(v) 183
              184:    7(fvec4) Load 9(v)
-             185:    7(fvec4) FAdd 184 183
-                              Store 9(v) 185
-             186:    7(fvec4) Load 9(v)
-             187:    7(fvec4) Load 9(v)
-             189:    6(float) Load 188(f)
-             190:    7(fvec4) CompositeConstruct 189 189 189 189
-             191:    7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 186 187 190
+             185:    7(fvec4) Load 9(v)
+             190:  187(bvec4) Load 189(ub41)
+             191:    7(fvec4) Select 190 185 184
              192:    7(fvec4) Load 9(v)
              193:    7(fvec4) FAdd 192 191
                               Store 9(v) 193
              194:    7(fvec4) Load 9(v)
-             195:    7(fvec4) Load 11(uv4)
-             196:    7(fvec4) Load 9(v)
-             197:    7(fvec4) ExtInst 1(GLSL.std.450) 50(Fma) 194 195 196
-             198:    7(fvec4) Load 9(v)
-             199:    7(fvec4) FAdd 198 197
-                              Store 9(v) 199
+             195:    7(fvec4) Load 9(v)
+             197:    6(float) Load 196(f)
+             198:    7(fvec4) CompositeConstruct 197 197 197 197
+             199:    7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 194 195 198
              200:    7(fvec4) Load 9(v)
-             201:    7(fvec4) Load 9(v)
-             202:    7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 200 201
-             203:    7(fvec4) Load 9(v)
-             204:    7(fvec4) FAdd 203 202
-                              Store 9(v) 204
-             205:    7(fvec4) Load 9(v)
+             201:    7(fvec4) FAdd 200 199
+                              Store 9(v) 201
+             202:    7(fvec4) Load 9(v)
+             203:    7(fvec4) Load 11(uv4)
+             204:    7(fvec4) Load 9(v)
+             205:    7(fvec4) ExtInst 1(GLSL.std.450) 50(Fma) 202 203 204
              206:    7(fvec4) Load 9(v)
-             207:    7(fvec4) Load 9(v)
-             208:    7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 205 206 207
+             207:    7(fvec4) FAdd 206 205
+                              Store 9(v) 207
+             208:    7(fvec4) Load 9(v)
              209:    7(fvec4) Load 9(v)
-             210:    7(fvec4) FAdd 209 208
-                              Store 9(v) 210
-             213:    6(float) Load 212(uf)
+             210:    7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 208 209
+             211:    7(fvec4) Load 9(v)
+             212:    7(fvec4) FAdd 211 210
+                              Store 9(v) 212
+             213:    7(fvec4) Load 9(v)
              214:    7(fvec4) Load 9(v)
-             215:    7(fvec4) CompositeConstruct 213 213 213 213
-             216:    7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 215 214
+             215:    7(fvec4) Load 9(v)
+             216:    7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 213 214 215
              217:    7(fvec4) Load 9(v)
              218:    7(fvec4) FAdd 217 216
                               Store 9(v) 218
-             219:    6(float) Load 212(uf)
-             220:    6(float) Load 212(uf)
-             221:    7(fvec4) Load 9(v)
-             222:    7(fvec4) CompositeConstruct 219 219 219 219
-             223:    7(fvec4) CompositeConstruct 220 220 220 220
-             224:    7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 222 223 221
+             221:    6(float) Load 220(uf)
+             222:    7(fvec4) Load 9(v)
+             223:    7(fvec4) CompositeConstruct 221 221 221 221
+             224:    7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 223 222
              225:    7(fvec4) Load 9(v)
              226:    7(fvec4) FAdd 225 224
                               Store 9(v) 226
-             227:    7(fvec4) Load 9(v)
-             228:    7(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 227
+             227:    6(float) Load 220(uf)
+             228:    6(float) Load 220(uf)
              229:    7(fvec4) Load 9(v)
-             230:    7(fvec4) FAdd 229 228
-                              Store 9(v) 230
-             231:    7(fvec4) Load 9(v)
-             232:    7(fvec4) Load 9(v)
+             230:    7(fvec4) CompositeConstruct 227 227 227 227
+             231:    7(fvec4) CompositeConstruct 228 228 228 228
+             232:    7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 230 231 229
              233:    7(fvec4) Load 9(v)
-             234:    7(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 231 232 233
+             234:    7(fvec4) FAdd 233 232
+                              Store 9(v) 234
              235:    7(fvec4) Load 9(v)
-             236:    7(fvec4) FAdd 235 234
-                              Store 9(v) 236
+             236:    7(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 235
              237:    7(fvec4) Load 9(v)
-             238:    7(fvec4) Load 9(v)
-             239:    7(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 237 238
+             238:    7(fvec4) FAdd 237 236
+                              Store 9(v) 238
+             239:    7(fvec4) Load 9(v)
              240:    7(fvec4) Load 9(v)
-             241:    7(fvec4) FAdd 240 239
-                              Store 9(v) 241
-             242:    7(fvec4) Load 9(v)
+             241:    7(fvec4) Load 9(v)
+             242:    7(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 239 240 241
              243:    7(fvec4) Load 9(v)
-             244:    6(float) Load 212(uf)
-             245:    7(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 242 243 244
+             244:    7(fvec4) FAdd 243 242
+                              Store 9(v) 244
+             245:    7(fvec4) Load 9(v)
              246:    7(fvec4) Load 9(v)
-             247:    7(fvec4) FAdd 246 245
-                              Store 9(v) 247
+             247:    7(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 245 246
              248:    7(fvec4) Load 9(v)
-             249:    7(fvec4) DPdx 248
+             249:    7(fvec4) FAdd 248 247
+                              Store 9(v) 249
              250:    7(fvec4) Load 9(v)
-             251:    7(fvec4) FAdd 250 249
-                              Store 9(v) 251
-             252:    7(fvec4) Load 9(v)
-             253:    7(fvec4) DPdy 252
+             251:    7(fvec4) Load 9(v)
+             252:    6(float) Load 220(uf)
+             253:    7(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 250 251 252
              254:    7(fvec4) Load 9(v)
              255:    7(fvec4) FAdd 254 253
                               Store 9(v) 255
              256:    7(fvec4) Load 9(v)
-             257:    7(fvec4) Fwidth 256
+             257:    7(fvec4) DPdx 256
              258:    7(fvec4) Load 9(v)
              259:    7(fvec4) FAdd 258 257
                               Store 9(v) 259
-             260:     18(int) Load 22(ui)
-             261:     18(int) ExtInst 1(GLSL.std.450) 5(SAbs) 260
-             262:     18(int) Load 20(i)
-             263:     18(int) IAdd 262 261
-                              Store 20(i) 263
-             264:     18(int) Load 20(i)
-             265:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 264
-             266:     18(int) Load 20(i)
-             267:     18(int) IAdd 266 265
-                              Store 20(i) 267
-             268:     18(int) Load 20(i)
-             269:     18(int) Load 22(ui)
-             270:     18(int) ExtInst 1(GLSL.std.450) 39(SMin) 268 269
-             271:     18(int) Load 20(i)
-             272:     18(int) IAdd 271 270
-                              Store 20(i) 272
-             273:     18(int) Load 20(i)
-             274:     18(int) Load 22(ui)
-             275:     18(int) ExtInst 1(GLSL.std.450) 42(SMax) 273 274
+             260:    7(fvec4) Load 9(v)
+             261:    7(fvec4) DPdy 260
+             262:    7(fvec4) Load 9(v)
+             263:    7(fvec4) FAdd 262 261
+                              Store 9(v) 263
+             264:    7(fvec4) Load 9(v)
+             265:    7(fvec4) Fwidth 264
+             266:    7(fvec4) Load 9(v)
+             267:    7(fvec4) FAdd 266 265
+                              Store 9(v) 267
+             268:     18(int) Load 22(ui)
+             269:     18(int) ExtInst 1(GLSL.std.450) 5(SAbs) 268
+             270:     18(int) Load 20(i)
+             271:     18(int) IAdd 270 269
+                              Store 20(i) 271
+             272:     18(int) Load 20(i)
+             273:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 272
+             274:     18(int) Load 20(i)
+             275:     18(int) IAdd 274 273
+                              Store 20(i) 275
              276:     18(int) Load 20(i)
-             277:     18(int) IAdd 276 275
-                              Store 20(i) 277
-             278:     18(int) Load 20(i)
-             279:     18(int) Load 22(ui)
-             280:     18(int) Load 22(ui)
-             281:     18(int) ExtInst 1(GLSL.std.450) 45(SClamp) 278 279 280
-             282:     18(int) Load 20(i)
-             283:     18(int) IAdd 282 281
-                              Store 20(i) 283
-             286:    141(int) Load 285(u)
-             289:    141(int) Load 288(uui)
-             290:    141(int) ExtInst 1(GLSL.std.450) 38(UMin) 286 289
-             291:    141(int) Load 285(u)
-             292:    141(int) IAdd 291 290
-                              Store 285(u) 292
-             293:    141(int) Load 285(u)
-             294:    141(int) Load 288(uui)
-             295:    141(int) ExtInst 1(GLSL.std.450) 41(UMax) 293 294
-             296:    141(int) Load 285(u)
-             297:    141(int) IAdd 296 295
-                              Store 285(u) 297
-             298:    141(int) Load 285(u)
-             299:    141(int) Load 288(uui)
-             300:    141(int) Load 288(uui)
-             301:    141(int) ExtInst 1(GLSL.std.450) 44(UClamp) 298 299 300
-             302:    141(int) Load 285(u)
-             303:    141(int) IAdd 302 301
-                              Store 285(u) 303
-             306:    6(float) Load 212(uf)
-             307:   178(bool) IsNan 306
-                              Store 305(b) 307
-             308:    6(float) Load 188(f)
-             309:   178(bool) IsInf 308
-                              Store 305(b) 309
-             310:    7(fvec4) Load 9(v)
-             311:    7(fvec4) Load 11(uv4)
-             312:  179(bvec4) FOrdLessThan 310 311
-             313:   178(bool) Any 312
-                              Store 305(b) 313
-             314:   178(bool) Load 305(b)
-                              SelectionMerge 316 None
-                              BranchConditional 314 315 316
-             315:               Label
-             317:    7(fvec4)   Load 9(v)
-             318:    7(fvec4)   Load 11(uv4)
-             319:  179(bvec4)   FOrdLessThanEqual 317 318
-             320:   178(bool)   Any 319
-                                Branch 316
-             316:             Label
-             321:   178(bool) Phi 314 5 320 315
-                              Store 305(b) 321
-             322:   178(bool) Load 305(b)
-                              SelectionMerge 324 None
-                              BranchConditional 322 323 324
-             323:               Label
-             325:    7(fvec4)   Load 9(v)
-             326:    7(fvec4)   Load 11(uv4)
-             327:  179(bvec4)   FOrdGreaterThan 325 326
-             328:   178(bool)   Any 327
-                                Branch 324
-             324:             Label
-             329:   178(bool) Phi 322 316 328 323
-                              Store 305(b) 329
-             330:   178(bool) Load 305(b)
-                              SelectionMerge 332 None
-                              BranchConditional 330 331 332
-             331:               Label
-             333:    7(fvec4)   Load 9(v)
-             334:    7(fvec4)   Load 11(uv4)
-             335:  179(bvec4)   FOrdGreaterThanEqual 333 334
-             336:   178(bool)   Any 335
-                                Branch 332
-             332:             Label
-             337:   178(bool) Phi 330 324 336 331
-                              Store 305(b) 337
-             338:   178(bool) Load 305(b)
-                              SelectionMerge 340 None
-                              BranchConditional 338 339 340
-             339:               Label
-             341:  179(bvec4)   Load 181(ub41)
-             343:  179(bvec4)   Load 342(ub42)
-             344:  179(bvec4)   LogicalEqual 341 343
-             345:   178(bool)   Any 344
-                                Branch 340
-             340:             Label
-             346:   178(bool) Phi 338 332 345 339
-                              Store 305(b) 346
-             347:   178(bool) Load 305(b)
-                              SelectionMerge 349 None
-                              BranchConditional 347 348 349
-             348:               Label
-             350:  179(bvec4)   Load 181(ub41)
-             351:  179(bvec4)   Load 342(ub42)
-             352:  179(bvec4)   LogicalNotEqual 350 351
-             353:   178(bool)   Any 352
-                                Branch 349
-             349:             Label
-             354:   178(bool) Phi 347 340 353 348
-                              Store 305(b) 354
-             355:   178(bool) Load 305(b)
-             356:  179(bvec4) Load 181(ub41)
-             357:   178(bool) Any 356
-             358:   178(bool) LogicalAnd 355 357
-                              Store 305(b) 358
-             359:   178(bool) Load 305(b)
-             360:  179(bvec4) Load 181(ub41)
-             361:   178(bool) All 360
-             362:   178(bool) LogicalAnd 359 361
-                              Store 305(b) 362
-             363:   178(bool) Load 305(b)
-                              SelectionMerge 365 None
-                              BranchConditional 363 364 365
-             364:               Label
-             366:  179(bvec4)   Load 181(ub41)
-             367:  179(bvec4)   LogicalNot 366
-             368:   178(bool)   Any 367
-                                Branch 365
-             365:             Label
-             369:   178(bool) Phi 363 349 368 364
-                              Store 305(b) 369
-             370:     18(int) Load 20(i)
-             371:     18(int) Load 22(ui)
-             372:     18(int) IAdd 370 371
-             373:     18(int) Load 20(i)
-             374:     18(int) IMul 372 373
-             375:     18(int) Load 22(ui)
-             376:     18(int) ISub 374 375
-             377:     18(int) Load 20(i)
-             378:     18(int) SDiv 376 377
-                              Store 20(i) 378
-             379:     18(int) Load 20(i)
-             380:     18(int) Load 22(ui)
-             381:     18(int) SMod 379 380
-                              Store 20(i) 381
-             382:     18(int) Load 20(i)
-             383:     18(int) Load 22(ui)
-             384:   178(bool) IEqual 382 383
-             385:   178(bool) LogicalNot 384
-                              SelectionMerge 387 None
-                              BranchConditional 385 386 387
-             386:               Label
-             388:     18(int)   Load 20(i)
-             389:     18(int)   Load 22(ui)
-             390:   178(bool)   INotEqual 388 389
-                                SelectionMerge 392 None
-                                BranchConditional 390 391 392
-             391:                 Label
-             393:     18(int)     Load 20(i)
-             394:     18(int)     Load 22(ui)
-             395:   178(bool)     IEqual 393 394
-                                  Branch 392
-             392:               Label
-             396:   178(bool)   Phi 390 386 395 391
-             397:     18(int)   Load 20(i)
-             399:   178(bool)   INotEqual 397 398
-             400:   178(bool)   LogicalNotEqual 396 399
-                                Branch 387
-             387:             Label
-             401:   178(bool) Phi 384 365 400 392
+             277:     18(int) Load 22(ui)
+             278:     18(int) ExtInst 1(GLSL.std.450) 39(SMin) 276 277
+             279:     18(int) Load 20(i)
+             280:     18(int) IAdd 279 278
+                              Store 20(i) 280
+             281:     18(int) Load 20(i)
+             282:     18(int) Load 22(ui)
+             283:     18(int) ExtInst 1(GLSL.std.450) 42(SMax) 281 282
+             284:     18(int) Load 20(i)
+             285:     18(int) IAdd 284 283
+                              Store 20(i) 285
+             286:     18(int) Load 20(i)
+             287:     18(int) Load 22(ui)
+             288:     18(int) Load 22(ui)
+             289:     18(int) ExtInst 1(GLSL.std.450) 45(SClamp) 286 287 288
+             290:     18(int) Load 20(i)
+             291:     18(int) IAdd 290 289
+                              Store 20(i) 291
+             294:    141(int) Load 293(u)
+             297:    141(int) Load 296(uui)
+             298:    141(int) ExtInst 1(GLSL.std.450) 38(UMin) 294 297
+             299:    141(int) Load 293(u)
+             300:    141(int) IAdd 299 298
+                              Store 293(u) 300
+             301:    141(int) Load 293(u)
+             302:    141(int) Load 296(uui)
+             303:    141(int) ExtInst 1(GLSL.std.450) 41(UMax) 301 302
+             304:    141(int) Load 293(u)
+             305:    141(int) IAdd 304 303
+                              Store 293(u) 305
+             306:    141(int) Load 293(u)
+             307:    141(int) Load 296(uui)
+             308:    141(int) Load 296(uui)
+             309:    141(int) ExtInst 1(GLSL.std.450) 44(UClamp) 306 307 308
+             310:    141(int) Load 293(u)
+             311:    141(int) IAdd 310 309
+                              Store 293(u) 311
+             316:  312(ivec4) Load 314(uuv4)
+             317:  315(ivec3) VectorShuffle 316 316 0 1 2
+             318:  312(ivec4) Load 314(uuv4)
+             319:  315(ivec3) VectorShuffle 318 318 0 1 2
+             327:326(ResType) UMulExtended 317 319
+             328:  315(ivec3) CompositeExtract 327 0
+                              Store 325(swizzleTemp) 328
+             329:  315(ivec3) CompositeExtract 327 1
+                              Store 323(swizzleTemp) 329
+             330:  315(ivec3) Load 323(swizzleTemp)
+             331:  312(ivec4) Load 321(msb)
+             332:  312(ivec4) VectorShuffle 331 330 4 5 6 3
+                              Store 321(msb) 332
+             333:  315(ivec3) Load 325(swizzleTemp)
+             334:  312(ivec4) Load 324(lsb)
+             335:  312(ivec4) VectorShuffle 334 333 4 5 6 3
+                              Store 324(lsb) 335
+             336:    292(ptr) AccessChain 321(msb) 142
+             337:    141(int) Load 336
+             339:    292(ptr) AccessChain 321(msb) 338
+             340:    141(int) Load 339
+             341:    141(int) IAdd 337 340
+             343:    292(ptr) AccessChain 321(msb) 342
+             344:    141(int) Load 343
+             345:    141(int) IAdd 341 344
+             346:    141(int) Load 293(u)
+             347:    141(int) IAdd 346 345
+                              Store 293(u) 347
+             348:    292(ptr) AccessChain 324(lsb) 142
+             349:    141(int) Load 348
+             350:    292(ptr) AccessChain 324(lsb) 338
+             351:    141(int) Load 350
+             352:    141(int) IAdd 349 351
+             353:    292(ptr) AccessChain 324(lsb) 342
+             354:    141(int) Load 353
+             355:    141(int) IAdd 352 354
+             356:    141(int) Load 293(u)
+             357:    141(int) IAdd 356 355
+                              Store 293(u) 357
+             360:    6(float) Load 220(uf)
+             361:   186(bool) IsNan 360
+                              Store 359(b) 361
+             362:    6(float) Load 196(f)
+             363:   186(bool) IsInf 362
+                              Store 359(b) 363
+             364:    7(fvec4) Load 9(v)
+             365:    7(fvec4) Load 11(uv4)
+             366:  187(bvec4) FOrdLessThan 364 365
+             367:   186(bool) Any 366
+                              Store 359(b) 367
+             368:   186(bool) Load 359(b)
+                              SelectionMerge 370 None
+                              BranchConditional 368 369 370
+             369:               Label
+             371:    7(fvec4)   Load 9(v)
+             372:    7(fvec4)   Load 11(uv4)
+             373:  187(bvec4)   FOrdLessThanEqual 371 372
+             374:   186(bool)   Any 373
+                                Branch 370
+             370:             Label
+             375:   186(bool) Phi 368 5 374 369
+                              Store 359(b) 375
+             376:   186(bool) Load 359(b)
+                              SelectionMerge 378 None
+                              BranchConditional 376 377 378
+             377:               Label
+             379:    7(fvec4)   Load 9(v)
+             380:    7(fvec4)   Load 11(uv4)
+             381:  187(bvec4)   FOrdGreaterThan 379 380
+             382:   186(bool)   Any 381
+                                Branch 378
+             378:             Label
+             383:   186(bool) Phi 376 370 382 377
+                              Store 359(b) 383
+             384:   186(bool) Load 359(b)
+                              SelectionMerge 386 None
+                              BranchConditional 384 385 386
+             385:               Label
+             387:    7(fvec4)   Load 9(v)
+             388:    7(fvec4)   Load 11(uv4)
+             389:  187(bvec4)   FOrdGreaterThanEqual 387 388
+             390:   186(bool)   Any 389
+                                Branch 386
+             386:             Label
+             391:   186(bool) Phi 384 378 390 385
+                              Store 359(b) 391
+             392:   186(bool) Load 359(b)
+                              SelectionMerge 394 None
+                              BranchConditional 392 393 394
+             393:               Label
+             395:  187(bvec4)   Load 189(ub41)
+             397:  187(bvec4)   Load 396(ub42)
+             398:  187(bvec4)   LogicalEqual 395 397
+             399:   186(bool)   Any 398
+                                Branch 394
+             394:             Label
+             400:   186(bool) Phi 392 386 399 393
+                              Store 359(b) 400
+             401:   186(bool) Load 359(b)
                               SelectionMerge 403 None
                               BranchConditional 401 402 403
              402:               Label
-             404:     18(int)   Load 20(i)
-             406:     18(int)   IAdd 404 405
-                                Store 20(i) 406
+             404:  187(bvec4)   Load 189(ub41)
+             405:  187(bvec4)   Load 396(ub42)
+             406:  187(bvec4)   LogicalNotEqual 404 405
+             407:   186(bool)   Any 406
                                 Branch 403
              403:             Label
-             407:    6(float) Load 212(uf)
-             408:    6(float) Load 212(uf)
-             409:    6(float) FAdd 407 408
-             410:    6(float) Load 212(uf)
-             411:    6(float) FMul 409 410
-             412:    6(float) Load 212(uf)
-             413:    6(float) FSub 411 412
-             414:    6(float) Load 212(uf)
-             415:    6(float) FDiv 413 414
-                              Store 188(f) 415
-             416:    7(fvec4) Load 9(v)
-             417:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 416
-             418:    6(float) Load 188(f)
-             419:    6(float) FAdd 418 417
-                              Store 188(f) 419
-             420:    7(fvec4) Load 9(v)
-             421:    7(fvec4) Load 9(v)
-             422:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 420 421
-             423:    6(float) Load 188(f)
-             424:    6(float) FAdd 423 422
-                              Store 188(f) 424
-             425:    7(fvec4) Load 9(v)
-             426:    7(fvec4) Load 9(v)
-             427:    6(float) Dot 425 426
-             428:    6(float) Load 188(f)
-             429:    6(float) FAdd 428 427
-                              Store 188(f) 429
-             430:    6(float) Load 188(f)
-             431:    6(float) Load 212(uf)
-             432:    6(float) FMul 430 431
-             433:    6(float) Load 188(f)
-             434:    6(float) FAdd 433 432
-                              Store 188(f) 434
-             436:    7(fvec4) Load 9(v)
-             437:  435(fvec3) VectorShuffle 436 436 0 1 2
-             438:    7(fvec4) Load 9(v)
-             439:  435(fvec3) VectorShuffle 438 438 0 1 2
-             440:  435(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 437 439
-             441:    6(float) CompositeExtract 440 0
-             442:    6(float) Load 188(f)
-             443:    6(float) FAdd 442 441
-                              Store 188(f) 443
-             444:    6(float) Load 188(f)
-             445:    6(float) Load 212(uf)
-             446:   178(bool) FOrdEqual 444 445
-             447:   178(bool) LogicalNot 446
-                              SelectionMerge 449 None
-                              BranchConditional 447 448 449
-             448:               Label
-             450:    6(float)   Load 188(f)
-             451:    6(float)   Load 212(uf)
-             452:   178(bool)   FOrdNotEqual 450 451
-             453:    6(float)   Load 188(f)
-             455:   178(bool)   FOrdNotEqual 453 454
-             456:   178(bool)   LogicalAnd 452 455
-                                Branch 449
-             449:             Label
-             457:   178(bool) Phi 446 403 456 448
-                              SelectionMerge 459 None
-                              BranchConditional 457 458 459
-             458:               Label
-             460:    6(float)   Load 188(f)
-             462:    6(float)   FAdd 460 461
-                                Store 188(f) 462
-                                Branch 459
-             459:             Label
-             463:     18(int) Load 22(ui)
-             464:     18(int) Load 20(i)
-             465:     18(int) BitwiseAnd 464 463
-                              Store 20(i) 465
-             467:     18(int) Load 20(i)
-             468:     18(int) BitwiseOr 467 466
-                              Store 20(i) 468
-             469:     18(int) Load 22(ui)
-             470:     18(int) Load 20(i)
-             471:     18(int) BitwiseXor 470 469
-                              Store 20(i) 471
-             473:     18(int) Load 20(i)
-             474:     18(int) SMod 473 472
-                              Store 20(i) 474
-             475:     18(int) Load 20(i)
-             476:     18(int) ShiftRightArithmetic 475 398
-                              Store 20(i) 476
-             477:     18(int) Load 22(ui)
-             478:     18(int) Load 20(i)
-             479:     18(int) ShiftLeftLogical 478 477
-                              Store 20(i) 479
-             480:     18(int) Load 20(i)
-             481:     18(int) Not 480
-                              Store 20(i) 481
-             482:   178(bool) Load 305(b)
-             483:   178(bool) LogicalNot 482
-                              Store 305(b) 483
-             486:   178(bool) Load 305(b)
-                              SelectionMerge 489 None
-                              BranchConditional 486 488 498
-             488:               Label
-             490:     18(int)   Load 20(i)
-             491:    6(float)   ConvertSToF 490
-             492:    7(fvec4)   CompositeConstruct 491 491 491 491
-             493:    6(float)   Load 188(f)
-             494:    7(fvec4)   CompositeConstruct 493 493 493 493
-             495:    7(fvec4)   FAdd 492 494
-             496:    7(fvec4)   Load 9(v)
-             497:    7(fvec4)   FAdd 495 496
-                                Store 487 497
-                                Branch 489
-             498:               Label
-             499:    7(fvec4)   Load 9(v)
-                                Store 487 499
-                                Branch 489
-             489:             Label
-             500:    7(fvec4) Load 487
-                              Store 485(FragColor) 500
-                              Store 503(m1) 509
-                              Store 510(m2) 512
-             513:   178(bool) Load 305(b)
-                              SelectionMerge 516 None
-                              BranchConditional 513 515 518
-             515:               Label
-             517:         501   Load 503(m1)
-                                Store 514 517
-                                Branch 516
-             518:               Label
-             519:         501   Load 510(m2)
-                                Store 514 519
-                                Branch 516
-             516:             Label
-             520:      8(ptr) AccessChain 514 405
-             521:    7(fvec4) Load 520
-             522:    7(fvec4) Load 485(FragColor)
-             523:    7(fvec4) FAdd 522 521
-                              Store 485(FragColor) 523
+             408:   186(bool) Phi 401 394 407 402
+                              Store 359(b) 408
+             409:   186(bool) Load 359(b)
+             410:  187(bvec4) Load 189(ub41)
+             411:   186(bool) Any 410
+             412:   186(bool) LogicalAnd 409 411
+                              Store 359(b) 412
+             413:   186(bool) Load 359(b)
+             414:  187(bvec4) Load 189(ub41)
+             415:   186(bool) All 414
+             416:   186(bool) LogicalAnd 413 415
+                              Store 359(b) 416
+             417:   186(bool) Load 359(b)
+                              SelectionMerge 419 None
+                              BranchConditional 417 418 419
+             418:               Label
+             420:  187(bvec4)   Load 189(ub41)
+             421:  187(bvec4)   LogicalNot 420
+             422:   186(bool)   Any 421
+                                Branch 419
+             419:             Label
+             423:   186(bool) Phi 417 403 422 418
+                              Store 359(b) 423
+             424:     18(int) Load 20(i)
+             425:     18(int) Load 22(ui)
+             426:     18(int) IAdd 424 425
+             427:     18(int) Load 20(i)
+             428:     18(int) IMul 426 427
+             429:     18(int) Load 22(ui)
+             430:     18(int) ISub 428 429
+             431:     18(int) Load 20(i)
+             432:     18(int) SDiv 430 431
+                              Store 20(i) 432
+             433:     18(int) Load 20(i)
+             434:     18(int) Load 22(ui)
+             435:     18(int) SMod 433 434
+                              Store 20(i) 435
+             436:     18(int) Load 20(i)
+             437:     18(int) Load 22(ui)
+             438:   186(bool) IEqual 436 437
+             439:   186(bool) LogicalNot 438
+                              SelectionMerge 441 None
+                              BranchConditional 439 440 441
+             440:               Label
+             442:     18(int)   Load 20(i)
+             443:     18(int)   Load 22(ui)
+             444:   186(bool)   INotEqual 442 443
+                                SelectionMerge 446 None
+                                BranchConditional 444 445 446
+             445:                 Label
+             447:     18(int)     Load 20(i)
+             448:     18(int)     Load 22(ui)
+             449:   186(bool)     IEqual 447 448
+                                  Branch 446
+             446:               Label
+             450:   186(bool)   Phi 444 440 449 445
+             451:     18(int)   Load 20(i)
+             453:   186(bool)   INotEqual 451 452
+             454:   186(bool)   LogicalNotEqual 450 453
+                                Branch 441
+             441:             Label
+             455:   186(bool) Phi 438 419 454 446
+                              SelectionMerge 457 None
+                              BranchConditional 455 456 457
+             456:               Label
+             458:     18(int)   Load 20(i)
+             460:     18(int)   IAdd 458 459
+                                Store 20(i) 460
+                                Branch 457
+             457:             Label
+             461:    6(float) Load 220(uf)
+             462:    6(float) Load 220(uf)
+             463:    6(float) FAdd 461 462
+             464:    6(float) Load 220(uf)
+             465:    6(float) FMul 463 464
+             466:    6(float) Load 220(uf)
+             467:    6(float) FSub 465 466
+             468:    6(float) Load 220(uf)
+             469:    6(float) FDiv 467 468
+                              Store 196(f) 469
+             470:    7(fvec4) Load 9(v)
+             471:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 470
+             472:    6(float) Load 196(f)
+             473:    6(float) FAdd 472 471
+                              Store 196(f) 473
+             474:    7(fvec4) Load 9(v)
+             475:    7(fvec4) Load 9(v)
+             476:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 474 475
+             477:    6(float) Load 196(f)
+             478:    6(float) FAdd 477 476
+                              Store 196(f) 478
+             479:    7(fvec4) Load 9(v)
+             480:    7(fvec4) Load 9(v)
+             481:    6(float) Dot 479 480
+             482:    6(float) Load 196(f)
+             483:    6(float) FAdd 482 481
+                              Store 196(f) 483
+             484:    6(float) Load 196(f)
+             485:    6(float) Load 220(uf)
+             486:    6(float) FMul 484 485
+             487:    6(float) Load 196(f)
+             488:    6(float) FAdd 487 486
+                              Store 196(f) 488
+             490:    7(fvec4) Load 9(v)
+             491:  489(fvec3) VectorShuffle 490 490 0 1 2
+             492:    7(fvec4) Load 9(v)
+             493:  489(fvec3) VectorShuffle 492 492 0 1 2
+             494:  489(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 491 493
+             495:    6(float) CompositeExtract 494 0
+             496:    6(float) Load 196(f)
+             497:    6(float) FAdd 496 495
+                              Store 196(f) 497
+             498:    6(float) Load 196(f)
+             499:    6(float) Load 220(uf)
+             500:   186(bool) FOrdEqual 498 499
+             501:   186(bool) LogicalNot 500
+                              SelectionMerge 503 None
+                              BranchConditional 501 502 503
+             502:               Label
+             504:    6(float)   Load 196(f)
+             505:    6(float)   Load 220(uf)
+             506:   186(bool)   FOrdNotEqual 504 505
+             507:    6(float)   Load 196(f)
+             509:   186(bool)   FOrdNotEqual 507 508
+             510:   186(bool)   LogicalAnd 506 509
+                                Branch 503
+             503:             Label
+             511:   186(bool) Phi 500 457 510 502
+                              SelectionMerge 513 None
+                              BranchConditional 511 512 513
+             512:               Label
+             514:    6(float)   Load 196(f)
+             516:    6(float)   FAdd 514 515
+                                Store 196(f) 516
+                                Branch 513
+             513:             Label
+             517:     18(int) Load 22(ui)
+             518:     18(int) Load 20(i)
+             519:     18(int) BitwiseAnd 518 517
+                              Store 20(i) 519
+             521:     18(int) Load 20(i)
+             522:     18(int) BitwiseOr 521 520
+                              Store 20(i) 522
+             523:     18(int) Load 22(ui)
+             524:     18(int) Load 20(i)
+             525:     18(int) BitwiseXor 524 523
+                              Store 20(i) 525
+             527:     18(int) Load 20(i)
+             528:     18(int) SMod 527 526
+                              Store 20(i) 528
+             529:     18(int) Load 20(i)
+             530:     18(int) ShiftRightArithmetic 529 452
+                              Store 20(i) 530
+             531:     18(int) Load 22(ui)
+             532:     18(int) Load 20(i)
+             533:     18(int) ShiftLeftLogical 532 531
+                              Store 20(i) 533
+             534:     18(int) Load 20(i)
+             535:     18(int) Not 534
+                              Store 20(i) 535
+             536:   186(bool) Load 359(b)
+             537:   186(bool) LogicalNot 536
+                              Store 359(b) 537
+             540:   186(bool) Load 359(b)
+                              SelectionMerge 543 None
+                              BranchConditional 540 542 552
+             542:               Label
+             544:     18(int)   Load 20(i)
+             545:    6(float)   ConvertSToF 544
+             546:    7(fvec4)   CompositeConstruct 545 545 545 545
+             547:    6(float)   Load 196(f)
+             548:    7(fvec4)   CompositeConstruct 547 547 547 547
+             549:    7(fvec4)   FAdd 546 548
+             550:    7(fvec4)   Load 9(v)
+             551:    7(fvec4)   FAdd 549 550
+                                Store 541 551
+                                Branch 543
+             552:               Label
+             553:    7(fvec4)   Load 9(v)
+                                Store 541 553
+                                Branch 543
+             543:             Label
+             554:    7(fvec4) Load 541
+                              Store 539(FragColor) 554
+                              Store 557(m1) 563
+                              Store 564(m2) 566
+             567:   186(bool) Load 359(b)
+                              SelectionMerge 570 None
+                              BranchConditional 567 569 572
+             569:               Label
+             571:         555   Load 557(m1)
+                                Store 568 571
+                                Branch 570
+             572:               Label
+             573:         555   Load 564(m2)
+                                Store 568 573
+                                Branch 570
+             570:             Label
+             574:      8(ptr) AccessChain 568 459
+             575:    7(fvec4) Load 574
+             576:    7(fvec4) Load 539(FragColor)
+             577:    7(fvec4) FAdd 576 575
+                              Store 539(FragColor) 577
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.RayCallable.rcall.out b/Test/baseResults/spv.RayCallable.rcall.out
index 198d686..b5e25be 100644
--- a/Test/baseResults/spv.RayCallable.rcall.out
+++ b/Test/baseResults/spv.RayCallable.rcall.out
@@ -1,13 +1,13 @@
 spv.RayCallable.rcall
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 38
+// Generated by (magic number): 80008
+// Id's are bound by 30
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint CallableNV 4  "main" 11 14 19
+                              EntryPoint CallableKHR 4  "main" 11 14
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -15,18 +15,15 @@
                               Name 11  "gl_LaunchIDNV"
                               Name 13  "size"
                               Name 14  "gl_LaunchSizeNV"
-                              Name 17  "curFlags"
-                              Name 19  "gl_IncomingRayFlagsNV"
-                              Name 24  "dataBlock"
-                              MemberName 24(dataBlock) 0  "data1"
-                              Name 26  ""
-                              Name 37  "data0"
-                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
-                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
-                              Decorate 19(gl_IncomingRayFlagsNV) BuiltIn IncomingRayFlagsNV
-                              Decorate 24(dataBlock) Block
-                              Decorate 26 Location 1
-                              Decorate 37(data0) Location 0
+                              Name 16  "dataBlock"
+                              MemberName 16(dataBlock) 0  "data1"
+                              Name 18  ""
+                              Name 29  "data0"
+                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
+                              Decorate 16(dataBlock) Block
+                              Decorate 18 Location 1
+                              Decorate 29(data0) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -35,39 +32,29 @@
               10:             TypePointer Input 7(ivec3)
 11(gl_LaunchIDNV):     10(ptr) Variable Input
 14(gl_LaunchSizeNV):     10(ptr) Variable Input
-              16:             TypePointer Function 6(int)
-              18:             TypePointer Input 6(int)
-19(gl_IncomingRayFlagsNV):     18(ptr) Variable Input
-              22:      6(int) Constant 1
-   24(dataBlock):             TypeStruct 6(int)
-              25:             TypePointer IncomingCallableDataNV 24(dataBlock)
-              26:     25(ptr) Variable IncomingCallableDataNV
-              27:             TypeInt 32 1
-              28:     27(int) Constant 0
-              29:      6(int) Constant 256
-              30:             TypePointer IncomingCallableDataNV 6(int)
-              32:      6(int) Constant 2
-              33:     27(int) Constant 1
-              34:             TypeFloat 32
-              35:             TypeVector 34(float) 4
-              36:             TypePointer CallableDataNV 35(fvec4)
-       37(data0):     36(ptr) Variable CallableDataNV
+   16(dataBlock):             TypeStruct 6(int)
+              17:             TypePointer IncomingCallableDataKHR 16(dataBlock)
+              18:     17(ptr) Variable IncomingCallableDataKHR
+              19:             TypeInt 32 1
+              20:     19(int) Constant 0
+              21:      6(int) Constant 256
+              22:             TypePointer IncomingCallableDataKHR 6(int)
+              24:      6(int) Constant 2
+              25:     19(int) Constant 1
+              26:             TypeFloat 32
+              27:             TypeVector 26(float) 4
+              28:             TypePointer CallableDataKHR 27(fvec4)
+       29(data0):     28(ptr) Variable CallableDataKHR
          4(main):           2 Function None 3
                5:             Label
            9(id):      8(ptr) Variable Function
         13(size):      8(ptr) Variable Function
-    17(curFlags):     16(ptr) Variable Function
               12:    7(ivec3) Load 11(gl_LaunchIDNV)
                               Store 9(id) 12
               15:    7(ivec3) Load 14(gl_LaunchSizeNV)
                               Store 13(size) 15
-              20:      6(int) Load 19(gl_IncomingRayFlagsNV)
-                              Store 17(curFlags) 20
-              21:      6(int) Load 17(curFlags)
-              23:      6(int) BitwiseAnd 21 22
-                              Store 17(curFlags) 23
-              31:     30(ptr) AccessChain 26 28
-                              Store 31 29
-                              ExecuteCallableNV 32 33
+              23:     22(ptr) AccessChain 18 20
+                              Store 23 21
+                              ExecuteCallableKHR 24 25
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.RayCallable_Errors.rcall.out b/Test/baseResults/spv.RayCallable_Errors.rcall.out
index a807a57..e7f45cb 100644
--- a/Test/baseResults/spv.RayCallable_Errors.rcall.out
+++ b/Test/baseResults/spv.RayCallable_Errors.rcall.out
@@ -24,10 +24,12 @@
 ERROR: 0:19: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
 ERROR: 0:20: 'gl_HitTNV' : undeclared identifier 
 ERROR: 0:21: 'gl_HitKindNV' : undeclared identifier 
-ERROR: 0:22: 'reportIntersectionNV' : no matching overloaded function found 
-ERROR: 0:23: 'ignoreIntersectionNV' : no matching overloaded function found 
-ERROR: 0:24: 'terminateRayNV' : no matching overloaded function found 
-ERROR: 28 compilation errors.  No code generated.
+ERROR: 0:22: 'gl_IncomingRayFlagsNV' : undeclared identifier 
+ERROR: 0:22: '=' :  cannot convert from ' temp float' to ' temp highp uint'
+ERROR: 0:23: 'reportIntersectionNV' : no matching overloaded function found 
+ERROR: 0:24: 'ignoreIntersectionNV' : no matching overloaded function found 
+ERROR: 0:25: 'terminateRayNV' : no matching overloaded function found 
+ERROR: 30 compilation errors.  No code generated.
 
 
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.RayConstants.rgen.out b/Test/baseResults/spv.RayConstants.rgen.out
index d939acf..97b47b7 100644
--- a/Test/baseResults/spv.RayConstants.rgen.out
+++ b/Test/baseResults/spv.RayConstants.rgen.out
@@ -1,13 +1,13 @@
 spv.RayConstants.rgen
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint RayGenerationNV 4  "main"
+                              EntryPoint RayGenerationKHR 4  "main"
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -18,7 +18,7 @@
                               Decorate 26(payload) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeAccelerationStructureNV
+               6:             TypeAccelerationStructureKHR
                7:             TypePointer UniformConstant 6
         8(accNV):      7(ptr) Variable UniformConstant
               10:             TypeInt 32 0
@@ -36,11 +36,11 @@
               22:             TypeInt 32 1
               23:     22(int) Constant 1
               24:             TypeVector 14(float) 4
-              25:             TypePointer RayPayloadNV 24(fvec4)
-     26(payload):     25(ptr) Variable RayPayloadNV
+              25:             TypePointer RayPayloadKHR 24(fvec4)
+     26(payload):     25(ptr) Variable RayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
                9:           6 Load 8(accNV)
-                              TraceNV 9 11 12 13 13 12 17 18 20 21 23
+                              TraceRayKHR 9 11 12 13 13 12 17 18 20 21 23
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.RayGenShader.rgen.out b/Test/baseResults/spv.RayGenShader.rgen.out
index 7e15f26..47b7c92 100644
--- a/Test/baseResults/spv.RayGenShader.rgen.out
+++ b/Test/baseResults/spv.RayGenShader.rgen.out
@@ -1,13 +1,13 @@
 spv.RayGenShader.rgen
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 61
+// Generated by (magic number): 80008
+// Id's are bound by 54
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint RayGenerationNV 4  "main" 11 21
+                              EntryPoint RayGenerationKHR 4  "main" 11 21
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -18,23 +18,22 @@
                               Name 21  "gl_LaunchSizeNV"
                               Name 24  "sy"
                               Name 29  "accNV0"
-                              Name 48  "block"
-                              MemberName 48(block) 0  "arr"
-                              MemberName 48(block) 1  "pad"
-                              Name 50  ""
-                              Name 56  "payload"
-                              Name 60  "accNV1"
-                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
-                              Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
+                              Name 37  "block"
+                              MemberName 37(block) 0  "dir"
+                              MemberName 37(block) 1  "origin"
+                              Name 39  ""
+                              Name 50  "accNV1"
+                              Name 53  "payload"
+                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
                               Decorate 29(accNV0) DescriptorSet 0
                               Decorate 29(accNV0) Binding 0
-                              Decorate 46 ArrayStride 4
-                              MemberDecorate 48(block) 0 Offset 0
-                              MemberDecorate 48(block) 1 Offset 16
-                              Decorate 48(block) BufferBlock
-                              Decorate 56(payload) Location 0
-                              Decorate 60(accNV1) DescriptorSet 0
-                              Decorate 60(accNV1) Binding 1
+                              MemberDecorate 37(block) 0 Offset 0
+                              MemberDecorate 37(block) 1 Offset 16
+                              Decorate 37(block) BufferBlock
+                              Decorate 50(accNV1) DescriptorSet 0
+                              Decorate 50(accNV1) Binding 1
+                              Decorate 53(payload) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -46,32 +45,24 @@
               13:             TypePointer Input 6(int)
               17:      6(int) Constant 1
 21(gl_LaunchSizeNV):     10(ptr) Variable Input
-              27:             TypeAccelerationStructureNV
+              27:             TypeAccelerationStructureKHR
               28:             TypePointer UniformConstant 27
       29(accNV0):     28(ptr) Variable UniformConstant
               35:             TypeFloat 32
               36:             TypeVector 35(float) 3
-              37:   35(float) Constant 0
-              38:   36(fvec3) ConstantComposite 37 37 37
-              39:   35(float) Constant 1056964608
-              40:   35(float) Constant 1065353216
-              41:   36(fvec3) ConstantComposite 40 40 40
-              42:   35(float) Constant 1061158912
-              43:             TypeInt 32 1
-              44:     43(int) Constant 1
-              45:      6(int) Constant 4
-              46:             TypeArray 35(float) 45
-              47:             TypeVector 35(float) 4
-       48(block):             TypeStruct 46 47(fvec4)
-              49:             TypePointer ShaderRecordBufferNV 48(block)
-              50:     49(ptr) Variable ShaderRecordBufferNV
-              51:     43(int) Constant 0
-              52:     43(int) Constant 3
-              53:             TypePointer ShaderRecordBufferNV 35(float)
-              55:             TypePointer RayPayloadNV 47(fvec4)
-     56(payload):     55(ptr) Variable RayPayloadNV
-              58:             TypePointer ShaderRecordBufferNV 47(fvec4)
-      60(accNV1):     28(ptr) Variable UniformConstant
+       37(block):             TypeStruct 36(fvec3) 36(fvec3)
+              38:             TypePointer ShaderRecordBufferKHR 37(block)
+              39:     38(ptr) Variable ShaderRecordBufferKHR
+              40:             TypeInt 32 1
+              41:     40(int) Constant 1
+              42:             TypePointer ShaderRecordBufferKHR 36(fvec3)
+              45:   35(float) Constant 1056964608
+              46:     40(int) Constant 0
+              49:   35(float) Constant 1061158912
+      50(accNV1):     28(ptr) Variable UniformConstant
+              51:             TypeVector 35(float) 4
+              52:             TypePointer RayPayloadKHR 51(fvec4)
+     53(payload):     52(ptr) Variable RayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
            8(lx):      7(ptr) Variable Function
@@ -95,11 +86,10 @@
               32:      6(int) Load 16(ly)
               33:      6(int) Load 20(sx)
               34:      6(int) Load 24(sy)
-                              TraceNV 30 31 32 33 34 12 38 39 41 42 44
-              54:     53(ptr) AccessChain 50 51 52
-                              Store 54 40
-              57:   47(fvec4) Load 56(payload)
-              59:     58(ptr) AccessChain 50 44
-                              Store 59 57
+              43:     42(ptr) AccessChain 39 41
+              44:   36(fvec3) Load 43
+              47:     42(ptr) AccessChain 39 46
+              48:   36(fvec3) Load 47
+                              TraceRayKHR 30 31 32 33 34 12 44 45 48 49 41
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.RayGenShader11.rgen.out b/Test/baseResults/spv.RayGenShader11.rgen.out
index b099581..0bbcab9 100755
--- a/Test/baseResults/spv.RayGenShader11.rgen.out
+++ b/Test/baseResults/spv.RayGenShader11.rgen.out
@@ -1,13 +1,13 @@
 spv.RayGenShader11.rgen
 // Module Version 10300
-// Generated by (magic number): 80007
-// Id's are bound by 60
+// Generated by (magic number): 80008
+// Id's are bound by 53
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint RayGenerationNV 4  "main" 11 21
+                              EntryPoint RayGenerationKHR 4  "main" 11 21
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -18,20 +18,19 @@
                               Name 21  "gl_LaunchSizeNV"
                               Name 24  "sy"
                               Name 29  "accNV"
-                              Name 48  "block"
-                              MemberName 48(block) 0  "arr"
-                              MemberName 48(block) 1  "pad"
-                              Name 50  ""
-                              Name 56  "payload"
-                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
-                              Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
+                              Name 37  "block"
+                              MemberName 37(block) 0  "dir"
+                              MemberName 37(block) 1  "origin"
+                              Name 39  ""
+                              Name 52  "payload"
+                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
                               Decorate 29(accNV) DescriptorSet 0
                               Decorate 29(accNV) Binding 0
-                              Decorate 46 ArrayStride 4
-                              MemberDecorate 48(block) 0 Offset 0
-                              MemberDecorate 48(block) 1 Offset 16
-                              Decorate 48(block) Block
-                              Decorate 56(payload) Location 0
+                              MemberDecorate 37(block) 0 Offset 0
+                              MemberDecorate 37(block) 1 Offset 16
+                              Decorate 37(block) Block
+                              Decorate 52(payload) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -43,31 +42,23 @@
               13:             TypePointer Input 6(int)
               17:      6(int) Constant 1
 21(gl_LaunchSizeNV):     10(ptr) Variable Input
-              27:             TypeAccelerationStructureNV
+              27:             TypeAccelerationStructureKHR
               28:             TypePointer UniformConstant 27
        29(accNV):     28(ptr) Variable UniformConstant
               35:             TypeFloat 32
               36:             TypeVector 35(float) 3
-              37:   35(float) Constant 0
-              38:   36(fvec3) ConstantComposite 37 37 37
-              39:   35(float) Constant 1056964608
-              40:   35(float) Constant 1065353216
-              41:   36(fvec3) ConstantComposite 40 40 40
-              42:   35(float) Constant 1061158912
-              43:             TypeInt 32 1
-              44:     43(int) Constant 1
-              45:      6(int) Constant 4
-              46:             TypeArray 35(float) 45
-              47:             TypeVector 35(float) 4
-       48(block):             TypeStruct 46 47(fvec4)
-              49:             TypePointer ShaderRecordBufferNV 48(block)
-              50:     49(ptr) Variable ShaderRecordBufferNV
-              51:     43(int) Constant 0
-              52:     43(int) Constant 3
-              53:             TypePointer ShaderRecordBufferNV 35(float)
-              55:             TypePointer RayPayloadNV 47(fvec4)
-     56(payload):     55(ptr) Variable RayPayloadNV
-              58:             TypePointer ShaderRecordBufferNV 47(fvec4)
+       37(block):             TypeStruct 36(fvec3) 36(fvec3)
+              38:             TypePointer ShaderRecordBufferKHR 37(block)
+              39:     38(ptr) Variable ShaderRecordBufferKHR
+              40:             TypeInt 32 1
+              41:     40(int) Constant 1
+              42:             TypePointer ShaderRecordBufferKHR 36(fvec3)
+              45:   35(float) Constant 1056964608
+              46:     40(int) Constant 0
+              49:   35(float) Constant 1061158912
+              50:             TypeVector 35(float) 4
+              51:             TypePointer RayPayloadKHR 50(fvec4)
+     52(payload):     51(ptr) Variable RayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
            8(lx):      7(ptr) Variable Function
@@ -91,11 +82,10 @@
               32:      6(int) Load 16(ly)
               33:      6(int) Load 20(sx)
               34:      6(int) Load 24(sy)
-                              TraceNV 30 31 32 33 34 12 38 39 41 42 44
-              54:     53(ptr) AccessChain 50 51 52
-                              Store 54 40
-              57:   47(fvec4) Load 56(payload)
-              59:     58(ptr) AccessChain 50 44
-                              Store 59 57
+              43:     42(ptr) AccessChain 39 41
+              44:   36(fvec3) Load 43
+              47:     42(ptr) AccessChain 39 46
+              48:   36(fvec3) Load 47
+                              TraceRayKHR 30 31 32 33 34 12 44 45 48 49 41
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.RayGenShaderArray.rgen.out b/Test/baseResults/spv.RayGenShaderArray.rgen.out
new file mode 100644
index 0000000..ce5f016
--- /dev/null
+++ b/Test/baseResults/spv.RayGenShaderArray.rgen.out
@@ -0,0 +1,141 @@
+spv.RayGenShaderArray.rgen
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 89
+
+                              Capability ShaderNonUniformEXT
+                              Capability RuntimeDescriptorArrayEXT
+                              Capability RayTracingNV
+                              Extension  "SPV_EXT_descriptor_indexing"
+                              Extension  "SPV_NV_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main" 11 21
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_nonuniform_qualifier"
+                              SourceExtension  "GL_NV_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "lx"
+                              Name 11  "gl_LaunchIDNV"
+                              Name 16  "ly"
+                              Name 20  "sx"
+                              Name 21  "gl_LaunchSizeNV"
+                              Name 24  "sy"
+                              Name 30  "accNV0"
+                              Name 34  "block"
+                              MemberName 34(block) 0  "dir"
+                              MemberName 34(block) 1  "origin"
+                              MemberName 34(block) 2  "i"
+                              Name 36  ""
+                              Name 60  "accNV1"
+                              Name 88  "payload"
+                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
+                              Decorate 30(accNV0) DescriptorSet 0
+                              Decorate 30(accNV0) Binding 0
+                              MemberDecorate 34(block) 0 Offset 0
+                              MemberDecorate 34(block) 1 Offset 16
+                              MemberDecorate 34(block) 2 Offset 28
+                              Decorate 34(block) BufferBlock
+                              Decorate 60(accNV1) DescriptorSet 0
+                              Decorate 60(accNV1) Binding 1
+                              Decorate 75 DecorationNonUniformEXT
+                              Decorate 76 DecorationNonUniformEXT
+                              Decorate 77 DecorationNonUniformEXT
+                              Decorate 88(payload) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LaunchIDNV):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              17:      6(int) Constant 1
+21(gl_LaunchSizeNV):     10(ptr) Variable Input
+              27:             TypeAccelerationStructureKHR
+              28:             TypeRuntimeArray 27
+              29:             TypePointer UniformConstant 28
+      30(accNV0):     29(ptr) Variable UniformConstant
+              31:             TypeFloat 32
+              32:             TypeVector 31(float) 3
+              33:             TypeInt 32 1
+       34(block):             TypeStruct 32(fvec3) 32(fvec3) 33(int)
+              35:             TypePointer ShaderRecordBufferKHR 34(block)
+              36:     35(ptr) Variable ShaderRecordBufferKHR
+              37:     33(int) Constant 2
+              38:             TypePointer ShaderRecordBufferKHR 33(int)
+              41:             TypePointer UniformConstant 27
+              48:     33(int) Constant 1
+              49:             TypePointer ShaderRecordBufferKHR 32(fvec3)
+              52:   31(float) Constant 1056964608
+              53:     33(int) Constant 0
+              56:   31(float) Constant 1061158912
+              57:      6(int) Constant 2
+              58:             TypeArray 27 57
+              59:             TypePointer UniformConstant 58
+      60(accNV1):     59(ptr) Variable UniformConstant
+              86:             TypeVector 31(float) 4
+              87:             TypePointer RayPayloadKHR 86(fvec4)
+     88(payload):     87(ptr) Variable RayPayloadKHR
+         4(main):           2 Function None 3
+               5:             Label
+           8(lx):      7(ptr) Variable Function
+          16(ly):      7(ptr) Variable Function
+          20(sx):      7(ptr) Variable Function
+          24(sy):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LaunchIDNV) 12
+              15:      6(int) Load 14
+                              Store 8(lx) 15
+              18:     13(ptr) AccessChain 11(gl_LaunchIDNV) 17
+              19:      6(int) Load 18
+                              Store 16(ly) 19
+              22:     13(ptr) AccessChain 21(gl_LaunchSizeNV) 12
+              23:      6(int) Load 22
+                              Store 20(sx) 23
+              25:     13(ptr) AccessChain 21(gl_LaunchSizeNV) 17
+              26:      6(int) Load 25
+                              Store 24(sy) 26
+              39:     38(ptr) AccessChain 36 37
+              40:     33(int) Load 39
+              42:     41(ptr) AccessChain 30(accNV0) 40
+              43:          27 Load 42
+              44:      6(int) Load 8(lx)
+              45:      6(int) Load 16(ly)
+              46:      6(int) Load 20(sx)
+              47:      6(int) Load 24(sy)
+              50:     49(ptr) AccessChain 36 48
+              51:   32(fvec3) Load 50
+              54:     49(ptr) AccessChain 36 53
+              55:   32(fvec3) Load 54
+                              TraceRayKHR 43 44 45 46 47 12 51 52 55 56 48
+              61:     38(ptr) AccessChain 36 37
+              62:     33(int) Load 61
+              63:     41(ptr) AccessChain 60(accNV1) 62
+              64:          27 Load 63
+              65:      6(int) Load 8(lx)
+              66:      6(int) Load 16(ly)
+              67:      6(int) Load 20(sx)
+              68:      6(int) Load 24(sy)
+              69:     49(ptr) AccessChain 36 48
+              70:   32(fvec3) Load 69
+              71:     49(ptr) AccessChain 36 53
+              72:   32(fvec3) Load 71
+                              TraceRayKHR 64 65 66 67 68 12 70 52 72 56 48
+              73:     38(ptr) AccessChain 36 37
+              74:     33(int) Load 73
+              75:     33(int) CopyObject 74
+              76:     41(ptr) AccessChain 30(accNV0) 75
+              77:          27 Load 76
+              78:      6(int) Load 8(lx)
+              79:      6(int) Load 16(ly)
+              80:      6(int) Load 20(sx)
+              81:      6(int) Load 24(sy)
+              82:     49(ptr) AccessChain 36 48
+              83:   32(fvec3) Load 82
+              84:     49(ptr) AccessChain 36 53
+              85:   32(fvec3) Load 84
+                              TraceRayKHR 77 78 79 80 81 12 83 52 85 56 48
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.RayGenShader_Errors.rgen.out b/Test/baseResults/spv.RayGenShader_Errors.rgen.out
index 27d51c2..a264eda 100644
--- a/Test/baseResults/spv.RayGenShader_Errors.rgen.out
+++ b/Test/baseResults/spv.RayGenShader_Errors.rgen.out
@@ -31,7 +31,8 @@
 ERROR: 0:37: 'reportIntersectionNV' : no matching overloaded function found 
 ERROR: 0:38: 'ignoreIntersectionNV' : no matching overloaded function found 
 ERROR: 0:39: 'terminateRayNV' : no matching overloaded function found 
-ERROR: 32 compilation errors.  No code generated.
+ERROR: 0:40: 'assign' :  l-value required "anon@3" (can't modify a shaderrecordnv qualified buffer)
+ERROR: 33 compilation errors.  No code generated.
 
 
 ERROR: Linking ray-generation stage: Only one shaderRecordNV buffer block is allowed per stage
diff --git a/Test/baseResults/spv.accessChain.frag.out b/Test/baseResults/spv.accessChain.frag.out
index bf87829..c5c71a5 100644
--- a/Test/baseResults/spv.accessChain.frag.out
+++ b/Test/baseResults/spv.accessChain.frag.out
@@ -1,6 +1,6 @@
 spv.accessChain.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 222
 
                               Capability Shader
diff --git a/Test/baseResults/spv.aggOps.frag.out b/Test/baseResults/spv.aggOps.frag.out
index f388e8e..976c747 100644
--- a/Test/baseResults/spv.aggOps.frag.out
+++ b/Test/baseResults/spv.aggOps.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 215
 
                               Capability Shader
diff --git a/Test/baseResults/spv.always-discard.frag.out b/Test/baseResults/spv.always-discard.frag.out
index 8074cf8..fb4529e 100644
--- a/Test/baseResults/spv.always-discard.frag.out
+++ b/Test/baseResults/spv.always-discard.frag.out
@@ -1,6 +1,6 @@
 spv.always-discard.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/spv.always-discard2.frag.out b/Test/baseResults/spv.always-discard2.frag.out
index e3fa43a..2d8f66e 100644
--- a/Test/baseResults/spv.always-discard2.frag.out
+++ b/Test/baseResults/spv.always-discard2.frag.out
@@ -1,6 +1,6 @@
 spv.always-discard2.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/spv.arbPostDepthCoverage.frag.out b/Test/baseResults/spv.arbPostDepthCoverage.frag.out
index f41c012..d62c677 100644
--- a/Test/baseResults/spv.arbPostDepthCoverage.frag.out
+++ b/Test/baseResults/spv.arbPostDepthCoverage.frag.out
@@ -1,6 +1,6 @@
 spv.arbPostDepthCoverage.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.atomic.comp.out b/Test/baseResults/spv.atomic.comp.out
index 3dd88f3..08bd830 100644
--- a/Test/baseResults/spv.atomic.comp.out
+++ b/Test/baseResults/spv.atomic.comp.out
@@ -1,6 +1,6 @@
 spv.atomic.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 74
 
                               Capability Shader
diff --git a/Test/baseResults/spv.atomicCounter.comp.out b/Test/baseResults/spv.atomicCounter.comp.out
new file mode 100644
index 0000000..46cccc0
--- /dev/null
+++ b/Test/baseResults/spv.atomicCounter.comp.out
@@ -0,0 +1,15 @@
+spv.atomicCounter.comp
+ERROR: 0:5: 'atomic counter types' : not allowed when using GLSL for Vulkan 
+ERROR: 0:7: 'atomic counter types' : not allowed when using GLSL for Vulkan 
+ERROR: 0:14: 'atomic counter types' : not allowed when using GLSL for Vulkan 
+ERROR: 0:16: 'atomicCounterIncrement' : no matching overloaded function found 
+ERROR: 0:16: 'return' : type does not match, or is not convertible to, the function's return type 
+ERROR: 0:21: 'memoryBarrierAtomicCounter' : no matching overloaded function found 
+ERROR: 0:23: 'atomicCounter' : no matching overloaded function found 
+ERROR: 0:23: '=' :  cannot convert from ' const float' to ' temp highp uint'
+ERROR: 0:24: 'atomicCounterDecrement' : no matching overloaded function found 
+ERROR: 0:25: 'atomicCounterIncrement' : no matching overloaded function found 
+ERROR: 10 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.atomicInt64.comp.out b/Test/baseResults/spv.atomicInt64.comp.out
index 9c66aec..5ac910e 100644
--- a/Test/baseResults/spv.atomicInt64.comp.out
+++ b/Test/baseResults/spv.atomicInt64.comp.out
@@ -1,6 +1,6 @@
 spv.atomicInt64.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 149
 
                               Capability Shader
diff --git a/Test/baseResults/spv.barrier.vert.out b/Test/baseResults/spv.barrier.vert.out
index b9369f2..ffc2eaa 100644
--- a/Test/baseResults/spv.barrier.vert.out
+++ b/Test/baseResults/spv.barrier.vert.out
@@ -1,6 +1,6 @@
 spv.barrier.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bitCast.frag.out b/Test/baseResults/spv.bitCast.frag.out
index a687b8d..f590ec7 100644
--- a/Test/baseResults/spv.bitCast.frag.out
+++ b/Test/baseResults/spv.bitCast.frag.out
@@ -1,6 +1,6 @@
 spv.bitCast.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 172
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bool.vert.out b/Test/baseResults/spv.bool.vert.out
index 31eb54c..3e5a190 100644
--- a/Test/baseResults/spv.bool.vert.out
+++ b/Test/baseResults/spv.bool.vert.out
@@ -1,6 +1,6 @@
 spv.bool.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 46
 
                               Capability Shader
diff --git a/Test/baseResults/spv.boolInBlock.frag.out b/Test/baseResults/spv.boolInBlock.frag.out
index e86ca6b..b0a4023 100644
--- a/Test/baseResults/spv.boolInBlock.frag.out
+++ b/Test/baseResults/spv.boolInBlock.frag.out
@@ -1,6 +1,6 @@
 spv.boolInBlock.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 102
 
                               Capability Shader
diff --git a/Test/baseResults/spv.branch-return.vert.out b/Test/baseResults/spv.branch-return.vert.out
index ca44724..3aacca7 100644
--- a/Test/baseResults/spv.branch-return.vert.out
+++ b/Test/baseResults/spv.branch-return.vert.out
@@ -1,6 +1,6 @@
 spv.branch-return.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.buffer.autoassign.frag.out b/Test/baseResults/spv.buffer.autoassign.frag.out
index 507318f..e526ada 100644
--- a/Test/baseResults/spv.buffer.autoassign.frag.out
+++ b/Test/baseResults/spv.buffer.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.buffer.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle1.frag.out b/Test/baseResults/spv.bufferhandle1.frag.out
index 906cb51..9d18188 100644
--- a/Test/baseResults/spv.bufferhandle1.frag.out
+++ b/Test/baseResults/spv.bufferhandle1.frag.out
@@ -1,11 +1,11 @@
 spv.bufferhandle1.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 52
 
                               Capability Shader
-                              Capability CapabilityVulkanMemoryModelKHR
-                              Capability CapabilityPhysicalStorageBufferAddressesEXT
+                              Capability VulkanMemoryModelKHR
+                              Capability PhysicalStorageBufferAddressesEXT
                               Extension  "SPV_EXT_physical_storage_buffer"
                               Extension  "SPV_KHR_storage_buffer_storage_class"
                               Extension  "SPV_KHR_vulkan_memory_model"
diff --git a/Test/baseResults/spv.bufferhandle10.frag.out b/Test/baseResults/spv.bufferhandle10.frag.out
index bfaa2d8..5064c7e 100644
--- a/Test/baseResults/spv.bufferhandle10.frag.out
+++ b/Test/baseResults/spv.bufferhandle10.frag.out
@@ -1,11 +1,11 @@
 spv.bufferhandle10.frag
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 34
+// Generated by (magic number): 80008
+// Id's are bound by 40
 
                               Capability Shader
-                              Capability CapabilityVulkanMemoryModelKHR
-                              Capability CapabilityPhysicalStorageBufferAddressesEXT
+                              Capability VulkanMemoryModelKHR
+                              Capability PhysicalStorageBufferAddressesEXT
                               Extension  "SPV_EXT_physical_storage_buffer"
                               Extension  "SPV_KHR_storage_buffer_storage_class"
                               Extension  "SPV_KHR_vulkan_memory_model"
@@ -24,6 +24,7 @@
                               Name 12  "t"
                               Name 19  "i"
                               Name 28  "b"
+                              Name 34  "b2"
                               MemberDecorate 7(t2) 0 Offset 0
                               Decorate 7(t2) Block
                               Decorate 9 ArrayStride 4
@@ -34,6 +35,7 @@
                               Decorate 19(i) Flat
                               Decorate 19(i) Location 0
                               Decorate 28(b) DecorationAliasedPointerEXT
+                              Decorate 34(b2) DecorationAliasedPointerEXT
                2:             TypeVoid
                3:             TypeFunction 2
                               TypeForwardPointer 6 PhysicalStorageBufferEXT
@@ -55,9 +57,11 @@
               25:      8(int) Constant 0
               27:             TypePointer Function 6(ptr)
               32:      8(int) Constant 2
+              38:      8(int) Constant 3
          4(main):           2 Function None 3
                5:             Label
            28(b):     27(ptr) Variable Function
+          34(b2):     27(ptr) Variable Function
               16:     15(ptr) AccessChain 12(t) 14
               17:      6(ptr) Load 16
               20:      8(int) Load 19(i)
@@ -69,5 +73,11 @@
               31:      6(ptr) Load 28(b)
               33:     21(ptr) AccessChain 31 14 14
                               Store 33 32 Aligned MakePointerAvailableKHR NonPrivatePointerKHR 4 24
+              35:     15(ptr) AccessChain 12(t) 14
+              36:      6(ptr) Load 35
+                              Store 34(b2) 36 Volatile 
+              37:      6(ptr) Load 34(b2) Volatile 
+              39:     21(ptr) AccessChain 37 14 14
+                              Store 39 38 Volatile Aligned MakePointerAvailableKHR NonPrivatePointerKHR 4 24
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.bufferhandle11.frag.out b/Test/baseResults/spv.bufferhandle11.frag.out
index 0764a00..783577c 100644
--- a/Test/baseResults/spv.bufferhandle11.frag.out
+++ b/Test/baseResults/spv.bufferhandle11.frag.out
@@ -3,12 +3,12 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 60
+// Generated by (magic number): 80008
+// Id's are bound by 61
 
                               Capability Shader
-                              Capability CapabilityStorageBuffer8BitAccess
-                              Capability CapabilityPhysicalStorageBufferAddressesEXT
+                              Capability StorageBuffer8BitAccess
+                              Capability PhysicalStorageBufferAddressesEXT
                               Extension  "SPV_EXT_physical_storage_buffer"
                               Extension  "SPV_KHR_8bit_storage"
                               Extension  "SPV_KHR_storage_buffer_storage_class"
@@ -68,7 +68,7 @@
               50:     49(ptr) Variable StorageBuffer
               51:             TypePointer StorageBuffer 6(int)
               54:     31(int) Constant 1
-              58:  27(int8_t) Constant 9
+              58:      6(int) Constant 9
          4(main):           2 Function None 3
                5:             Label
        20(allOk):     19(ptr) Variable Function
@@ -103,8 +103,9 @@
               47:             Label
               56:     33(ptr) AccessChain 30 32
               57:     25(ptr) Load 56
-              59:     36(ptr) AccessChain 57 32
-                              Store 59 58 Aligned 16
+              59:  27(int8_t) UConvert 58
+              60:     36(ptr) AccessChain 57 32
+                              Store 60 59 Aligned 16
                               Return
                               FunctionEnd
 12(compare_uint8_t(u1;u1;):     8(bool) Function None 9
diff --git a/Test/baseResults/spv.bufferhandle12.frag.out b/Test/baseResults/spv.bufferhandle12.frag.out
index 38b390f..9f0f4fb 100644
--- a/Test/baseResults/spv.bufferhandle12.frag.out
+++ b/Test/baseResults/spv.bufferhandle12.frag.out
@@ -3,12 +3,12 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 183
 
                               Capability Shader
                               Capability StorageUniformBufferBlock16
-                              Capability CapabilityPhysicalStorageBufferAddressesEXT
+                              Capability PhysicalStorageBufferAddressesEXT
                               Extension  "SPV_EXT_physical_storage_buffer"
                               Extension  "SPV_KHR_16bit_storage"
                               Extension  "SPV_KHR_storage_buffer_storage_class"
diff --git a/Test/baseResults/spv.bufferhandle13.frag.out b/Test/baseResults/spv.bufferhandle13.frag.out
index 1438086..516b9fc 100644
--- a/Test/baseResults/spv.bufferhandle13.frag.out
+++ b/Test/baseResults/spv.bufferhandle13.frag.out
@@ -1,16 +1,14 @@
 spv.bufferhandle13.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 58
 
                               Capability Shader
-                              Capability CapabilityVulkanMemoryModelKHR
-                              Capability CapabilityPhysicalStorageBufferAddressesEXT
+                              Capability PhysicalStorageBufferAddressesEXT
                               Extension  "SPV_EXT_physical_storage_buffer"
                               Extension  "SPV_KHR_storage_buffer_storage_class"
-                              Extension  "SPV_KHR_vulkan_memory_model"
                1:             ExtInstImport  "GLSL.std.450"
-                              MemoryModel PhysicalStorageBuffer64EXT VulkanKHR
+                              MemoryModel PhysicalStorageBuffer64EXT GLSL450
                               EntryPoint Fragment 4  "main"
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
diff --git a/Test/baseResults/spv.bufferhandle14.frag.out b/Test/baseResults/spv.bufferhandle14.frag.out
index d8c2726..440a032 100644
--- a/Test/baseResults/spv.bufferhandle14.frag.out
+++ b/Test/baseResults/spv.bufferhandle14.frag.out
@@ -1,10 +1,10 @@
 spv.bufferhandle14.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 46
 
                               Capability Shader
-                              Capability CapabilityPhysicalStorageBufferAddressesEXT
+                              Capability PhysicalStorageBufferAddressesEXT
                               Extension  "SPV_EXT_physical_storage_buffer"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel PhysicalStorageBuffer64EXT GLSL450
diff --git a/Test/baseResults/spv.bufferhandle15.frag.out b/Test/baseResults/spv.bufferhandle15.frag.out
index a4a434d..f018e21 100644
--- a/Test/baseResults/spv.bufferhandle15.frag.out
+++ b/Test/baseResults/spv.bufferhandle15.frag.out
@@ -3,11 +3,11 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 60
 
                               Capability Shader
-                              Capability CapabilityPhysicalStorageBufferAddressesEXT
+                              Capability PhysicalStorageBufferAddressesEXT
                               Extension  "SPV_EXT_physical_storage_buffer"
                               Extension  "SPV_KHR_storage_buffer_storage_class"
                1:             ExtInstImport  "GLSL.std.450"
diff --git a/Test/baseResults/spv.bufferhandle16.frag.out b/Test/baseResults/spv.bufferhandle16.frag.out
new file mode 100644
index 0000000..cfc6f05
--- /dev/null
+++ b/Test/baseResults/spv.bufferhandle16.frag.out
@@ -0,0 +1,92 @@
+spv.bufferhandle16.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 48
+
+                              Capability Shader
+                              Capability Int64
+                              Capability PhysicalStorageBufferAddressesEXT
+                              Extension  "SPV_EXT_physical_storage_buffer"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel PhysicalStorageBuffer64EXT GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_buffer_reference"
+                              SourceExtension  "GL_EXT_scalar_block_layout"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int64"
+                              Name 4  "main"
+                              Name 9  "T1"
+                              MemberName 9(T1) 0  "x"
+                              MemberName 9(T1) 1  "y"
+                              Name 11  "a"
+                              Name 15  "b"
+                              Name 18  "c"
+                              Name 24  "d"
+                              Name 26  "e"
+                              Name 29  "f"
+                              Name 46  "x"
+                              MemberDecorate 9(T1) 0 Offset 0
+                              MemberDecorate 9(T1) 1 Offset 4
+                              Decorate 9(T1) Block
+                              Decorate 11(a) DecorationAliasedPointerEXT
+                              Decorate 15(b) DecorationAliasedPointerEXT
+                              Decorate 18(c) DecorationAliasedPointerEXT
+                              Decorate 24(d) DecorationAliasedPointerEXT
+                              Decorate 26(e) DecorationAliasedPointerEXT
+                              Decorate 29(f) DecorationAliasedPointerEXT
+               2:             TypeVoid
+               3:             TypeFunction 2
+                              TypeForwardPointer 6 PhysicalStorageBufferEXT
+               7:             TypeInt 32 1
+               8:             TypeInt 32 0
+           9(T1):             TypeStruct 7(int) 8(int)
+               6:             TypePointer PhysicalStorageBufferEXT 9(T1)
+              10:             TypePointer Function 6(ptr)
+              12:             TypeInt 64 0
+              13: 12(int64_t) Constant 4 0
+              16: 12(int64_t) Constant 5 0
+              19:             TypeBool
+              20:    19(bool) ConstantTrue
+              27: 12(int64_t) Constant 6 0
+              31:      7(int) Constant 1
+              32:             TypePointer PhysicalStorageBufferEXT 8(int)
+              35:      8(int) Constant 0
+              37: 12(int64_t) Constant 8 0
+              39: 12(int64_t) Constant 9 0
+              42:      7(int) Constant 3
+              43:      8(int) Constant 3
+              44:             TypeArray 7(int) 43
+              45:             TypePointer Private 44
+           46(x):     45(ptr) Variable Private
+              47: 12(int64_t) Constant 10 0
+         4(main):           2 Function None 3
+               5:             Label
+           11(a):     10(ptr) Variable Function
+           15(b):     10(ptr) Variable Function
+           18(c):     10(ptr) Variable Function
+           24(d):     10(ptr) Variable Function
+           26(e):     10(ptr) Variable Function
+           29(f):     10(ptr) Variable Function
+              14:      6(ptr) Bitcast 13
+                              Store 11(a) 14
+              17:      6(ptr) Bitcast 16
+                              Store 15(b) 17
+              21:      6(ptr) Load 11(a)
+              22:      6(ptr) Load 15(b)
+              23:      6(ptr) Select 20 21 22
+                              Store 18(c) 23
+              25:      6(ptr) Load 15(b)
+                              Store 24(d) 25
+              28:      6(ptr) Bitcast 27
+                              Store 26(e) 28
+              30:      6(ptr) Load 11(a)
+              33:     32(ptr) AccessChain 30 31
+              34:      8(int) Load 33 Aligned 4
+              36:    19(bool) INotEqual 34 35
+              38:      6(ptr) Bitcast 37
+              40:      6(ptr) Bitcast 39
+              41:      6(ptr) Select 36 38 40
+                              Store 29(f) 41
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.bufferhandle17_Errors.frag.out b/Test/baseResults/spv.bufferhandle17_Errors.frag.out
new file mode 100644
index 0000000..cdcfb9c
--- /dev/null
+++ b/Test/baseResults/spv.bufferhandle17_Errors.frag.out
@@ -0,0 +1,9 @@
+spv.bufferhandle17_Errors.frag
+ERROR: 0:11: 'qualifier' : variables with reference type can't have qualifier 'const' 
+ERROR: 0:16: 'qualifier' : variables with reference type can't have qualifier 'const' 
+ERROR: 0:18: '==' : can't use with reference types 
+ERROR: 0:19: '!=' : can't use with reference types 
+ERROR: 4 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.bufferhandle18.frag.out b/Test/baseResults/spv.bufferhandle18.frag.out
new file mode 100644
index 0000000..0a5f6fb
--- /dev/null
+++ b/Test/baseResults/spv.bufferhandle18.frag.out
@@ -0,0 +1,274 @@
+spv.bufferhandle18.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 196
+
+                              Capability Shader
+                              Capability Int64
+                              Capability PhysicalStorageBufferAddressesEXT
+                              Extension  "SPV_EXT_physical_storage_buffer"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel PhysicalStorageBuffer64EXT GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_buffer_reference"
+                              SourceExtension  "GL_EXT_buffer_reference2"
+                              SourceExtension  "GL_EXT_scalar_block_layout"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int64"
+                              Name 4  "main"
+                              Name 9  "T1"
+                              MemberName 9(T1) 0  "x"
+                              MemberName 9(T1) 1  "y"
+                              Name 11  "a"
+                              Name 15  "b"
+                              Name 18  "c"
+                              Name 24  "d"
+                              Name 26  "e"
+                              Name 29  "f"
+                              Name 59  "arr"
+                              Name 71  "i"
+                              Name 130  "j"
+                              Name 153  "k"
+                              Name 160  "x"
+                              Name 171  "y"
+                              Name 178  "T2"
+                              MemberName 178(T2) 0  "x"
+                              Name 180  "m"
+                              Name 190  "x"
+                              Name 195  "buf"
+                              MemberDecorate 9(T1) 0 Offset 0
+                              MemberDecorate 9(T1) 1 Offset 4
+                              Decorate 9(T1) Block
+                              Decorate 11(a) DecorationAliasedPointerEXT
+                              Decorate 15(b) DecorationAliasedPointerEXT
+                              Decorate 18(c) DecorationAliasedPointerEXT
+                              Decorate 24(d) DecorationAliasedPointerEXT
+                              Decorate 26(e) DecorationAliasedPointerEXT
+                              Decorate 29(f) DecorationAliasedPointerEXT
+                              Decorate 59(arr) DecorationAliasedPointerEXT
+                              Decorate 130(j) DecorationAliasedPointerEXT
+                              Decorate 153(k) DecorationAliasedPointerEXT
+                              MemberDecorate 178(T2) 0 Offset 0
+                              Decorate 178(T2) Block
+                              Decorate 180(m) DecorationAliasedPointerEXT
+               2:             TypeVoid
+               3:             TypeFunction 2
+                              TypeForwardPointer 6 PhysicalStorageBufferEXT
+               7:             TypeInt 32 1
+               8:             TypeInt 32 0
+           9(T1):             TypeStruct 7(int) 8(int)
+               6:             TypePointer PhysicalStorageBufferEXT 9(T1)
+              10:             TypePointer Function 6(ptr)
+              12:             TypeInt 64 0
+              13: 12(int64_t) Constant 4 0
+              16: 12(int64_t) Constant 5 0
+              19:             TypeBool
+              20:    19(bool) ConstantTrue
+              27: 12(int64_t) Constant 6 0
+              31:      7(int) Constant 1
+              32:             TypePointer PhysicalStorageBufferEXT 8(int)
+              35:      8(int) Constant 0
+              37: 12(int64_t) Constant 8 0
+              39: 12(int64_t) Constant 9 0
+              44: 12(int64_t) Constant 24 0
+              47:      7(int) Constant 0
+              48:             TypePointer PhysicalStorageBufferEXT 7(int)
+              52: 12(int64_t) Constant 40 0
+              56:      8(int) Constant 2
+              57:             TypeArray 6(ptr) 56
+              58:             TypePointer Function 57
+              66: 12(int64_t) Constant 56 0
+              70:             TypePointer Function 7(int)
+              77:             TypeInt 64 1
+             137: 12(int64_t) Constant 16 0
+             146: 12(int64_t) Constant 32 0
+             156: 12(int64_t) Constant 48 0
+             159:             TypePointer Function 77(int64_t)
+             168: 77(int64_t) Constant 8 0
+             170:             TypePointer Function 12(int64_t)
+             174: 12(int64_t) Constant 4294967288 4294967295
+                              TypeForwardPointer 177 PhysicalStorageBufferEXT
+         178(T2):             TypeStruct 7(int)
+             177:             TypePointer PhysicalStorageBufferEXT 178(T2)
+             179:             TypePointer Function 177(ptr)
+             183: 12(int64_t) Constant 64 0
+             186:      7(int) Constant 3
+             187:      8(int) Constant 3
+             188:             TypeArray 7(int) 187
+             189:             TypePointer Private 188
+          190(x):    189(ptr) Variable Private
+             191: 12(int64_t) Constant 10 0
+             192:      8(int) Constant 8
+             193:             TypeArray 8(int) 192
+             194:             TypePointer Private 193
+        195(buf):    194(ptr) Variable Private
+         4(main):           2 Function None 3
+               5:             Label
+           11(a):     10(ptr) Variable Function
+           15(b):     10(ptr) Variable Function
+           18(c):     10(ptr) Variable Function
+           24(d):     10(ptr) Variable Function
+           26(e):     10(ptr) Variable Function
+           29(f):     10(ptr) Variable Function
+         59(arr):     58(ptr) Variable Function
+           71(i):     70(ptr) Variable Function
+          130(j):     10(ptr) Variable Function
+          153(k):     10(ptr) Variable Function
+          160(x):    159(ptr) Variable Function
+          171(y):    170(ptr) Variable Function
+          180(m):    179(ptr) Variable Function
+              14:      6(ptr) Bitcast 13
+                              Store 11(a) 14
+              17:      6(ptr) Bitcast 16
+                              Store 15(b) 17
+              21:      6(ptr) Load 11(a)
+              22:      6(ptr) Load 15(b)
+              23:      6(ptr) Select 20 21 22
+                              Store 18(c) 23
+              25:      6(ptr) Load 15(b)
+                              Store 24(d) 25
+              28:      6(ptr) Bitcast 27
+                              Store 26(e) 28
+              30:      6(ptr) Load 11(a)
+              33:     32(ptr) AccessChain 30 31
+              34:      8(int) Load 33 Aligned 4
+              36:    19(bool) INotEqual 34 35
+              38:      6(ptr) Bitcast 37
+              40:      6(ptr) Bitcast 39
+              41:      6(ptr) Select 36 38 40
+                              Store 29(f) 41
+              42:      6(ptr) Load 29(f)
+              43: 12(int64_t) ConvertPtrToU 42
+              45: 12(int64_t) IAdd 43 44
+              46:      6(ptr) ConvertUToPtr 45
+              49:     48(ptr) AccessChain 46 47
+                              Store 49 31 Aligned 8
+              50:      6(ptr) Load 29(f)
+              51: 12(int64_t) ConvertPtrToU 50
+              53: 12(int64_t) IAdd 51 52
+              54:      6(ptr) ConvertUToPtr 53
+              55:     48(ptr) AccessChain 54 47
+                              Store 55 31 Aligned 8
+              60:      6(ptr) Load 11(a)
+              61:      6(ptr) Load 29(f)
+              62:          57 CompositeConstruct 60 61
+                              Store 59(arr) 62
+              63:     10(ptr) AccessChain 59(arr) 31
+              64:      6(ptr) Load 63
+              65: 12(int64_t) ConvertPtrToU 64
+              67: 12(int64_t) IAdd 65 66
+              68:      6(ptr) ConvertUToPtr 67
+              69:     48(ptr) AccessChain 68 47
+                              Store 69 31 Aligned 8
+              72:      7(int) Load 71(i)
+              73:     10(ptr) AccessChain 59(arr) 72
+              74:      6(ptr) Load 73
+              75: 12(int64_t) ConvertPtrToU 74
+              76:      7(int) Load 71(i)
+              78: 77(int64_t) SConvert 76
+              79: 12(int64_t) Bitcast 78
+              80: 12(int64_t) IMul 79 37
+              81: 12(int64_t) IAdd 75 80
+              82:      6(ptr) ConvertUToPtr 81
+              83:     48(ptr) AccessChain 82 47
+                              Store 83 31 Aligned 8
+              84:      7(int) Load 71(i)
+              85:     10(ptr) AccessChain 59(arr) 84
+              86:      6(ptr) Load 85
+              87: 12(int64_t) ConvertPtrToU 86
+              88:      7(int) Load 71(i)
+              89: 77(int64_t) SConvert 88
+              90: 12(int64_t) Bitcast 89
+              91: 12(int64_t) IMul 90 37
+              92: 12(int64_t) IAdd 87 91
+              93:      6(ptr) ConvertUToPtr 92
+              94: 12(int64_t) ConvertPtrToU 93
+              95:      7(int) Load 71(i)
+              96: 77(int64_t) SConvert 95
+              97: 12(int64_t) Bitcast 96
+              98: 12(int64_t) IMul 97 37
+              99: 12(int64_t) IAdd 94 98
+             100:      6(ptr) ConvertUToPtr 99
+             101: 12(int64_t) ConvertPtrToU 100
+             102:      7(int) Load 71(i)
+             103: 77(int64_t) SConvert 102
+             104: 12(int64_t) Bitcast 103
+             105: 12(int64_t) IMul 104 37
+             106: 12(int64_t) IAdd 101 105
+             107:      6(ptr) ConvertUToPtr 106
+             108: 12(int64_t) ConvertPtrToU 107
+             109:      7(int) Load 71(i)
+             110: 77(int64_t) SConvert 109
+             111: 12(int64_t) Bitcast 110
+             112: 12(int64_t) IMul 111 37
+             113: 12(int64_t) IAdd 108 112
+             114:      6(ptr) ConvertUToPtr 113
+             115: 12(int64_t) ConvertPtrToU 114
+             116:      7(int) Load 71(i)
+             117: 77(int64_t) SConvert 116
+             118: 12(int64_t) Bitcast 117
+             119: 12(int64_t) IMul 118 37
+             120: 12(int64_t) IAdd 115 119
+             121:      6(ptr) ConvertUToPtr 120
+             122: 12(int64_t) ConvertPtrToU 121
+             123:      7(int) Load 71(i)
+             124: 77(int64_t) SConvert 123
+             125: 12(int64_t) Bitcast 124
+             126: 12(int64_t) IMul 125 37
+             127: 12(int64_t) IAdd 122 126
+             128:      6(ptr) ConvertUToPtr 127
+             129:     48(ptr) AccessChain 128 47
+                              Store 129 31 Aligned 8
+             131:      6(ptr) Load 130(j)
+             132: 12(int64_t) ConvertPtrToU 131
+             133: 12(int64_t) IAdd 132 37
+             134:      6(ptr) ConvertUToPtr 133
+                              Store 130(j) 134
+             135:      6(ptr) Load 130(j)
+             136: 12(int64_t) ConvertPtrToU 135
+             138: 12(int64_t) ISub 136 137
+             139:      6(ptr) ConvertUToPtr 138
+                              Store 130(j) 139
+             140:      6(ptr) Load 130(j)
+             141: 12(int64_t) ConvertPtrToU 140
+             142: 12(int64_t) IAdd 141 44
+             143:      6(ptr) ConvertUToPtr 142
+                              Store 130(j) 143
+             144:      6(ptr) Load 130(j)
+             145: 12(int64_t) ConvertPtrToU 144
+             147: 12(int64_t) ISub 145 146
+             148:      6(ptr) ConvertUToPtr 147
+                              Store 130(j) 148
+             149:      6(ptr) Load 130(j)
+             150: 12(int64_t) ConvertPtrToU 149
+             151: 12(int64_t) IAdd 52 150
+             152:      6(ptr) ConvertUToPtr 151
+                              Store 130(j) 152
+             154:      6(ptr) Load 130(j)
+             155: 12(int64_t) ConvertPtrToU 154
+             157: 12(int64_t) IAdd 155 156
+             158:      6(ptr) ConvertUToPtr 157
+                              Store 153(k) 158
+             161:      6(ptr) Load 153(k)
+             162: 12(int64_t) ConvertPtrToU 161
+             163: 77(int64_t) Bitcast 162
+             164:      6(ptr) Load 130(j)
+             165: 12(int64_t) ConvertPtrToU 164
+             166: 77(int64_t) Bitcast 165
+             167: 77(int64_t) ISub 163 166
+             169: 77(int64_t) SDiv 167 168
+                              Store 160(x) 169
+                              Store 171(y) 37
+             172:      6(ptr) Load 153(k)
+             173: 12(int64_t) ConvertPtrToU 172
+             175: 12(int64_t) IAdd 173 174
+             176:      6(ptr) ConvertUToPtr 175
+                              Store 153(k) 176
+             181:    177(ptr) Load 180(m)
+             182: 12(int64_t) ConvertPtrToU 181
+             184: 12(int64_t) IAdd 182 183
+             185:    177(ptr) ConvertUToPtr 184
+                              Store 180(m) 185
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.bufferhandle19_Errors.frag.out b/Test/baseResults/spv.bufferhandle19_Errors.frag.out
new file mode 100644
index 0000000..930e5a4
--- /dev/null
+++ b/Test/baseResults/spv.bufferhandle19_Errors.frag.out
@@ -0,0 +1,17 @@
+spv.bufferhandle19_Errors.frag
+ERROR: 0:18: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp reference' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:19: '-' :  wrong operand types: no operation '-' exists that takes a left-hand operand of type ' temp reference' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:20: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type ' const int' and a right operand of type ' temp reference' (or there is no acceptable conversion)
+ERROR: 0:21: '-' :  wrong operand types: no operation '-' exists that takes a left-hand operand of type ' temp reference' and a right operand of type ' temp reference' (or there is no acceptable conversion)
+ERROR: 0:22: 'assign' :  cannot convert from ' const int' to ' temp reference'
+ERROR: 0:23: 'assign' :  cannot convert from ' const int' to ' temp reference'
+ERROR: 0:24: 'assign' :  cannot convert from ' temp reference' to ' temp reference'
+ERROR: 0:25: 'assign' :  cannot convert from ' temp reference' to ' temp reference'
+ERROR: 0:28: 'assign' :  cannot convert from ' temp reference' to ' temp reference'
+ERROR: 0:29: 'assign' :  cannot convert from ' temp reference' to ' temp reference'
+ERROR: 0:30: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp reference' and a right operand of type ' temp reference' (or there is no acceptable conversion)
+ERROR: 0:31: '-' :  wrong operand types: no operation '-' exists that takes a left-hand operand of type ' const int' and a right operand of type ' temp reference' (or there is no acceptable conversion)
+ERROR: 12 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.bufferhandle2.frag.out b/Test/baseResults/spv.bufferhandle2.frag.out
index fbcf16c..6c43fbe 100644
--- a/Test/baseResults/spv.bufferhandle2.frag.out
+++ b/Test/baseResults/spv.bufferhandle2.frag.out
@@ -1,10 +1,10 @@
 spv.bufferhandle2.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 45
 
                               Capability Shader
-                              Capability CapabilityPhysicalStorageBufferAddressesEXT
+                              Capability PhysicalStorageBufferAddressesEXT
                               Extension  "SPV_EXT_physical_storage_buffer"
                               Extension  "SPV_KHR_storage_buffer_storage_class"
                1:             ExtInstImport  "GLSL.std.450"
diff --git a/Test/baseResults/spv.bufferhandle3.frag.out b/Test/baseResults/spv.bufferhandle3.frag.out
index a2cb85f..ba50eb1 100644
--- a/Test/baseResults/spv.bufferhandle3.frag.out
+++ b/Test/baseResults/spv.bufferhandle3.frag.out
@@ -1,10 +1,10 @@
 spv.bufferhandle3.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
-                              Capability CapabilityPhysicalStorageBufferAddressesEXT
+                              Capability PhysicalStorageBufferAddressesEXT
                               Extension  "SPV_EXT_physical_storage_buffer"
                               Extension  "SPV_KHR_storage_buffer_storage_class"
                1:             ExtInstImport  "GLSL.std.450"
diff --git a/Test/baseResults/spv.bufferhandle4.frag.out b/Test/baseResults/spv.bufferhandle4.frag.out
index 08de871..7dff09c 100644
--- a/Test/baseResults/spv.bufferhandle4.frag.out
+++ b/Test/baseResults/spv.bufferhandle4.frag.out
@@ -1,10 +1,10 @@
 spv.bufferhandle4.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 61
 
                               Capability Shader
-                              Capability CapabilityPhysicalStorageBufferAddressesEXT
+                              Capability PhysicalStorageBufferAddressesEXT
                               Extension  "SPV_EXT_physical_storage_buffer"
                               Extension  "SPV_KHR_storage_buffer_storage_class"
                1:             ExtInstImport  "GLSL.std.450"
diff --git a/Test/baseResults/spv.bufferhandle5.frag.out b/Test/baseResults/spv.bufferhandle5.frag.out
index 3656408..209459b 100644
--- a/Test/baseResults/spv.bufferhandle5.frag.out
+++ b/Test/baseResults/spv.bufferhandle5.frag.out
@@ -1,10 +1,10 @@
 spv.bufferhandle5.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
-                              Capability CapabilityPhysicalStorageBufferAddressesEXT
+                              Capability PhysicalStorageBufferAddressesEXT
                               Extension  "SPV_EXT_physical_storage_buffer"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel PhysicalStorageBuffer64EXT GLSL450
diff --git a/Test/baseResults/spv.bufferhandle6.frag.out b/Test/baseResults/spv.bufferhandle6.frag.out
index 54db3cf..b373a2f 100644
--- a/Test/baseResults/spv.bufferhandle6.frag.out
+++ b/Test/baseResults/spv.bufferhandle6.frag.out
@@ -1,10 +1,10 @@
 spv.bufferhandle6.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 165
 
                               Capability Shader
-                              Capability CapabilityPhysicalStorageBufferAddressesEXT
+                              Capability PhysicalStorageBufferAddressesEXT
                               Extension  "SPV_EXT_physical_storage_buffer"
                               Extension  "SPV_KHR_storage_buffer_storage_class"
                1:             ExtInstImport  "GLSL.std.450"
diff --git a/Test/baseResults/spv.bufferhandle7.frag.out b/Test/baseResults/spv.bufferhandle7.frag.out
index 4a52596..9beaee1 100644
--- a/Test/baseResults/spv.bufferhandle7.frag.out
+++ b/Test/baseResults/spv.bufferhandle7.frag.out
@@ -1,10 +1,10 @@
 spv.bufferhandle7.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24
 
                               Capability Shader
-                              Capability CapabilityPhysicalStorageBufferAddressesEXT
+                              Capability PhysicalStorageBufferAddressesEXT
                               Extension  "SPV_EXT_physical_storage_buffer"
                               Extension  "SPV_KHR_storage_buffer_storage_class"
                1:             ExtInstImport  "GLSL.std.450"
diff --git a/Test/baseResults/spv.bufferhandle8.frag.out b/Test/baseResults/spv.bufferhandle8.frag.out
index 168da81..95abfd9 100644
--- a/Test/baseResults/spv.bufferhandle8.frag.out
+++ b/Test/baseResults/spv.bufferhandle8.frag.out
@@ -1,10 +1,10 @@
 spv.bufferhandle8.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
-                              Capability CapabilityPhysicalStorageBufferAddressesEXT
+                              Capability PhysicalStorageBufferAddressesEXT
                               Extension  "SPV_EXT_physical_storage_buffer"
                               Extension  "SPV_KHR_storage_buffer_storage_class"
                1:             ExtInstImport  "GLSL.std.450"
diff --git a/Test/baseResults/spv.bufferhandle9.frag.out b/Test/baseResults/spv.bufferhandle9.frag.out
index e74be8a..b452acc 100644
--- a/Test/baseResults/spv.bufferhandle9.frag.out
+++ b/Test/baseResults/spv.bufferhandle9.frag.out
@@ -1,11 +1,11 @@
 spv.bufferhandle9.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 56
 
                               Capability Shader
                               Capability Int64
-                              Capability CapabilityPhysicalStorageBufferAddressesEXT
+                              Capability PhysicalStorageBufferAddressesEXT
                               Extension  "SPV_EXT_physical_storage_buffer"
                               Extension  "SPV_KHR_storage_buffer_storage_class"
                1:             ExtInstImport  "GLSL.std.450"
diff --git a/Test/baseResults/spv.bufferhandleUvec2.frag.out b/Test/baseResults/spv.bufferhandleUvec2.frag.out
new file mode 100755
index 0000000..b1944cf
--- /dev/null
+++ b/Test/baseResults/spv.bufferhandleUvec2.frag.out
@@ -0,0 +1,133 @@
+spv.bufferhandleUvec2.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// 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.builtInXFB.vert.out b/Test/baseResults/spv.builtInXFB.vert.out
index 556a698..7a8b17a 100644
--- a/Test/baseResults/spv.builtInXFB.vert.out
+++ b/Test/baseResults/spv.builtInXFB.vert.out
@@ -1,6 +1,6 @@
 spv.builtInXFB.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.computeShaderDerivatives.comp.out b/Test/baseResults/spv.computeShaderDerivatives.comp.out
index d332f35..052ac06 100644
--- a/Test/baseResults/spv.computeShaderDerivatives.comp.out
+++ b/Test/baseResults/spv.computeShaderDerivatives.comp.out
@@ -1,6 +1,6 @@
 spv.computeShaderDerivatives.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 212
 
                               Capability Shader
diff --git a/Test/baseResults/spv.computeShaderDerivatives2.comp.out b/Test/baseResults/spv.computeShaderDerivatives2.comp.out
index be1919b..3ef5ee4 100644
--- a/Test/baseResults/spv.computeShaderDerivatives2.comp.out
+++ b/Test/baseResults/spv.computeShaderDerivatives2.comp.out
@@ -1,6 +1,6 @@
 spv.computeShaderDerivatives2.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 212
 
                               Capability Shader
diff --git a/Test/baseResults/spv.conditionalDemote.frag.out b/Test/baseResults/spv.conditionalDemote.frag.out
new file mode 100644
index 0000000..f255176
--- /dev/null
+++ b/Test/baseResults/spv.conditionalDemote.frag.out
@@ -0,0 +1,69 @@
+spv.conditionalDemote.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 38
+
+                              Capability Shader
+                              Capability DemoteToHelperInvocationEXT
+                              Extension  "SPV_EXT_demote_to_helper_invocation"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 17 36
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_demote_to_helper_invocation"
+                              Name 4  "main"
+                              Name 9  "v"
+                              Name 13  "tex"
+                              Name 17  "coord"
+                              Name 33  "x"
+                              Name 36  "o"
+                              Decorate 13(tex) DescriptorSet 0
+                              Decorate 13(tex) Binding 0
+                              Decorate 17(coord) Location 0
+                              Decorate 36(o) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypeImage 6(float) 2D sampled format:Unknown
+              11:             TypeSampledImage 10
+              12:             TypePointer UniformConstant 11
+         13(tex):     12(ptr) Variable UniformConstant
+              15:             TypeVector 6(float) 2
+              16:             TypePointer Input 15(fvec2)
+       17(coord):     16(ptr) Variable Input
+              21:    6(float) Constant 1036831949
+              22:    6(float) Constant 1045220557
+              23:    6(float) Constant 1050253722
+              24:    6(float) Constant 1053609165
+              25:    7(fvec4) ConstantComposite 21 22 23 24
+              26:             TypeBool
+              27:             TypeVector 26(bool) 4
+              32:             TypePointer Function 26(bool)
+              35:             TypePointer Output 7(fvec4)
+           36(o):     35(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+            9(v):      8(ptr) Variable Function
+           33(x):     32(ptr) Variable Function
+              14:          11 Load 13(tex)
+              18:   15(fvec2) Load 17(coord)
+              19:    7(fvec4) ImageSampleImplicitLod 14 18
+                              Store 9(v) 19
+              20:    7(fvec4) Load 9(v)
+              28:   27(bvec4) FOrdEqual 20 25
+              29:    26(bool) All 28
+                              SelectionMerge 31 None
+                              BranchConditional 29 30 31
+              30:               Label
+                                DemoteToHelperInvocationEXT
+                                Branch 31
+              31:             Label
+              34:    26(bool) IsHelperInvocationEXT
+                              Store 33(x) 34
+              37:    7(fvec4) Load 9(v)
+                              Store 36(o) 37
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.conditionalDiscard.frag.out b/Test/baseResults/spv.conditionalDiscard.frag.out
index 2f2dcf2..a05afb9 100644
--- a/Test/baseResults/spv.conditionalDiscard.frag.out
+++ b/Test/baseResults/spv.conditionalDiscard.frag.out
@@ -1,6 +1,6 @@
 spv.conditionalDiscard.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/spv.constConstruct.vert.out b/Test/baseResults/spv.constConstruct.vert.out
new file mode 100644
index 0000000..d3250a1
--- /dev/null
+++ b/Test/baseResults/spv.constConstruct.vert.out
@@ -0,0 +1,171 @@
+spv.constConstruct.vert
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 150
+
+                              Capability Shader
+                              Capability Float64
+                              Capability Int64
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main"
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float32"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float64"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int32"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int8"
+                              Name 4  "main"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 16
+               7:6(float16_t) Constant 15360
+               8:6(float16_t) Constant 16384
+               9:6(float16_t) Constant 16896
+              10:6(float16_t) Constant 17408
+              11:6(float16_t) Constant 17664
+              12:6(float16_t) Constant 17920
+              13:6(float16_t) Constant 18176
+              14:6(float16_t) Constant 18432
+              15:6(float16_t) Constant 18560
+              16:6(float16_t) Constant 18688
+              17:6(float16_t) Constant 18816
+              18:             TypeFloat 32
+              19:   18(float) Constant 1099431936
+              20:   18(float) Constant 1099956224
+              21:   18(float) Constant 1100480512
+              22:   18(float) Constant 1101004800
+              23:   18(float) Constant 1101529088
+              24:   18(float) Constant 1102053376
+              25:   18(float) Constant 1102577664
+              26:   18(float) Constant 1103101952
+              27:   18(float) Constant 1103626240
+              28:   18(float) Constant 1104150528
+              29:   18(float) Constant 1104674816
+              30:   18(float) Constant 1065353216
+              31:             TypeFloat 64
+              32:31(float64_t) Constant 0 1077968896
+              33:31(float64_t) Constant 0 1078001664
+              34:31(float64_t) Constant 0 1078034432
+              35:31(float64_t) Constant 0 1078067200
+              36:31(float64_t) Constant 0 1078099968
+              37:31(float64_t) Constant 0 1078132736
+              38:31(float64_t) Constant 0 1078165504
+              39:31(float64_t) Constant 0 1078198272
+              40:31(float64_t) Constant 0 1078231040
+              41:31(float64_t) Constant 0 1078263808
+              42:31(float64_t) Constant 0 1078296576
+              43:31(float64_t) Constant 0 1072693248
+              44:             TypeInt 8 1
+              45:  44(int8_t) Constant 49
+              46:  44(int8_t) Constant 50
+              47:  44(int8_t) Constant 51
+              48:  44(int8_t) Constant 52
+              49:  44(int8_t) Constant 53
+              50:  44(int8_t) Constant 54
+              51:  44(int8_t) Constant 55
+              52:  44(int8_t) Constant 56
+              53:  44(int8_t) Constant 57
+              54:  44(int8_t) Constant 58
+              55:  44(int8_t) Constant 59
+              56:  44(int8_t) Constant 1
+              57:             TypeInt 16 1
+              58: 57(int16_t) Constant 65
+              59: 57(int16_t) Constant 66
+              60: 57(int16_t) Constant 67
+              61: 57(int16_t) Constant 68
+              62: 57(int16_t) Constant 69
+              63: 57(int16_t) Constant 70
+              64: 57(int16_t) Constant 71
+              65: 57(int16_t) Constant 72
+              66: 57(int16_t) Constant 73
+              67: 57(int16_t) Constant 74
+              68: 57(int16_t) Constant 75
+              69: 57(int16_t) Constant 1
+              70:             TypeInt 32 1
+              71:     70(int) Constant 81
+              72:     70(int) Constant 82
+              73:     70(int) Constant 83
+              74:     70(int) Constant 84
+              75:     70(int) Constant 85
+              76:     70(int) Constant 86
+              77:     70(int) Constant 87
+              78:     70(int) Constant 88
+              79:     70(int) Constant 89
+              80:     70(int) Constant 90
+              81:     70(int) Constant 91
+              82:     70(int) Constant 1
+              83:             TypeInt 64 1
+              84: 83(int64_t) Constant 97 0
+              85: 83(int64_t) Constant 98 0
+              86: 83(int64_t) Constant 99 0
+              87: 83(int64_t) Constant 100 0
+              88: 83(int64_t) Constant 101 0
+              89: 83(int64_t) Constant 102 0
+              90: 83(int64_t) Constant 103 0
+              91: 83(int64_t) Constant 104 0
+              92: 83(int64_t) Constant 105 0
+              93: 83(int64_t) Constant 106 0
+              94: 83(int64_t) Constant 107 0
+              95: 83(int64_t) Constant 1 0
+              96:             TypeInt 8 0
+              97:  96(int8_t) Constant 113
+              98:  96(int8_t) Constant 114
+              99:  96(int8_t) Constant 115
+             100:  96(int8_t) Constant 116
+             101:  96(int8_t) Constant 117
+             102:  96(int8_t) Constant 118
+             103:  96(int8_t) Constant 119
+             104:  96(int8_t) Constant 120
+             105:  96(int8_t) Constant 121
+             106:  96(int8_t) Constant 122
+             107:  96(int8_t) Constant 123
+             108:  96(int8_t) Constant 1
+             109:             TypeInt 16 0
+             110:109(int16_t) Constant 129
+             111:109(int16_t) Constant 130
+             112:109(int16_t) Constant 131
+             113:109(int16_t) Constant 65412
+             114:109(int16_t) Constant 133
+             115:109(int16_t) Constant 134
+             116:109(int16_t) Constant 135
+             117:109(int16_t) Constant 136
+             118:109(int16_t) Constant 137
+             119:109(int16_t) Constant 138
+             120:109(int16_t) Constant 139
+             121:109(int16_t) Constant 1
+             122:             TypeInt 32 0
+             123:    122(int) Constant 145
+             124:    122(int) Constant 146
+             125:    122(int) Constant 147
+             126:    122(int) Constant 4294967188
+             127:    122(int) Constant 149
+             128:    122(int) Constant 150
+             129:    122(int) Constant 151
+             130:    122(int) Constant 152
+             131:    122(int) Constant 153
+             132:    122(int) Constant 154
+             133:    122(int) Constant 155
+             134:    122(int) Constant 1
+             135:             TypeInt 64 0
+             136:135(int64_t) Constant 161 0
+             137:135(int64_t) Constant 162 0
+             138:135(int64_t) Constant 163 0
+             139:135(int64_t) Constant 4294967204 4294967295
+             140:135(int64_t) Constant 165 0
+             141:135(int64_t) Constant 166 0
+             142:135(int64_t) Constant 167 0
+             143:135(int64_t) Constant 168 0
+             144:135(int64_t) Constant 169 0
+             145:135(int64_t) Constant 170 0
+             146:135(int64_t) Constant 171 0
+             147:135(int64_t) Constant 1 0
+             148:             TypeBool
+             149:   148(bool) ConstantTrue
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.constStruct.vert.out b/Test/baseResults/spv.constStruct.vert.out
index d04f33d..1fce728 100644
--- a/Test/baseResults/spv.constStruct.vert.out
+++ b/Test/baseResults/spv.constStruct.vert.out
@@ -1,6 +1,6 @@
 spv.constStruct.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 23
 
                               Capability Shader
diff --git a/Test/baseResults/spv.constructComposite.comp.out b/Test/baseResults/spv.constructComposite.comp.out
new file mode 100644
index 0000000..f1179d4
--- /dev/null
+++ b/Test/baseResults/spv.constructComposite.comp.out
@@ -0,0 +1,64 @@
+spv.constructComposite.comp
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 29
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 64 1 1
+                              Source GLSL 460
+                              Name 4  "main"
+                              Name 7  "sA"
+                              MemberName 7(sA) 0  "x"
+                              MemberName 7(sA) 1  "y"
+                              Name 8  "sC"
+                              MemberName 8(sC) 0  "state"
+                              Name 10  "c"
+                              Name 11  "sA"
+                              MemberName 11(sA) 0  "x"
+                              MemberName 11(sA) 1  "y"
+                              Name 12  "sB"
+                              MemberName 12(sB) 0  "a"
+                              Name 13  "ubo"
+                              MemberName 13(ubo) 0  "b"
+                              Name 15  ""
+                              MemberDecorate 11(sA) 0 Offset 0
+                              MemberDecorate 11(sA) 1 Offset 4
+                              MemberDecorate 12(sB) 0 Offset 0
+                              MemberDecorate 13(ubo) 0 Offset 0
+                              Decorate 13(ubo) Block
+                              Decorate 15 DescriptorSet 0
+                              Decorate 15 Binding 0
+                              Decorate 28 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+           7(sA):             TypeStruct 6(int) 6(int)
+           8(sC):             TypeStruct 7(sA)
+               9:             TypePointer Private 8(sC)
+           10(c):      9(ptr) Variable Private
+          11(sA):             TypeStruct 6(int) 6(int)
+          12(sB):             TypeStruct 11(sA)
+         13(ubo):             TypeStruct 12(sB)
+              14:             TypePointer Uniform 13(ubo)
+              15:     14(ptr) Variable Uniform
+              16:      6(int) Constant 0
+              17:             TypePointer Uniform 11(sA)
+              24:             TypeInt 32 0
+              25:             TypeVector 24(int) 3
+              26:     24(int) Constant 64
+              27:     24(int) Constant 1
+              28:   25(ivec3) ConstantComposite 26 27 27
+         4(main):           2 Function None 3
+               5:             Label
+              18:     17(ptr) AccessChain 15 16 16
+              19:      11(sA) Load 18
+              20:      6(int) CompositeExtract 19 0
+              21:      6(int) CompositeExtract 19 1
+              22:       7(sA) CompositeConstruct 20 21
+              23:       8(sC) CompositeConstruct 22
+                              Store 10(c) 23
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.controlFlowAttributes.frag.out b/Test/baseResults/spv.controlFlowAttributes.frag.out
index 489522b..c222f25 100644
--- a/Test/baseResults/spv.controlFlowAttributes.frag.out
+++ b/Test/baseResults/spv.controlFlowAttributes.frag.out
@@ -1,16 +1,16 @@
 spv.controlFlowAttributes.frag
-WARNING: 0:20: '' : attribute with arguments not recognized, skipping 
-WARNING: 0:21: '' : attribute with arguments not recognized, skipping 
-WARNING: 0:22: '' : attribute with arguments not recognized, skipping 
-WARNING: 0:23: 'dependency_length' : expected a single integer argument 
-WARNING: 0:24: '' : attribute with arguments not recognized, skipping 
-WARNING: 0:25: '' : attribute with arguments not recognized, skipping 
-WARNING: 0:26: '' : attribute with arguments not recognized, skipping 
+WARNING: 0:27: 'unroll' : expected no arguments 
+WARNING: 0:28: 'dont_unroll' : expected no arguments 
+WARNING: 0:29: 'dependency_infinite' : expected no arguments 
+WARNING: 0:30: 'dependency_length' : expected a single integer argument 
+WARNING: 0:31: '' : attribute with arguments not recognized, skipping 
+WARNING: 0:32: '' : attribute with arguments not recognized, skipping 
+WARNING: 0:33: '' : attribute with arguments not recognized, skipping 
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 118
+// Generated by (magic number): 80008
+// Id's are bound by 123
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -20,220 +20,231 @@
                               Source GLSL 450
                               SourceExtension  "GL_EXT_control_flow_attributes"
                               Name 4  "main"
-                              Name 8  "i"
-                              Name 36  "i"
-                              Name 47  "cond"
-                              Name 60  "i"
-                              Name 79  "i"
+                              Name 6  "f0("
+                              Name 8  "f1("
+                              Name 23  "i"
+                              Name 41  "i"
+                              Name 52  "cond"
+                              Name 65  "i"
+                              Name 84  "i"
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeInt 32 1
-               7:             TypePointer Function 6(int)
-               9:      6(int) Constant 0
-              16:      6(int) Constant 8
-              17:             TypeBool
-              20:      6(int) Constant 1
-              31:    17(bool) ConstantTrue
-              46:             TypePointer Private 17(bool)
-        47(cond):     46(ptr) Variable Private
-              54:    17(bool) ConstantFalse
-              55:      6(int) Constant 3
+              19:             TypeBool
+              20:    19(bool) ConstantTrue
+              21:             TypeInt 32 1
+              22:             TypePointer Function 21(int)
+              24:     21(int) Constant 0
+              31:     21(int) Constant 8
+              34:     21(int) Constant 1
+              51:             TypePointer Private 19(bool)
+        52(cond):     51(ptr) Variable Private
+              59:    19(bool) ConstantFalse
+              60:     21(int) Constant 3
          4(main):           2 Function None 3
                5:             Label
-            8(i):      7(ptr) Variable Function
-           36(i):      7(ptr) Variable Function
-           60(i):      7(ptr) Variable Function
-           79(i):      7(ptr) Variable Function
-                              Store 8(i) 9
-                              Branch 10
-              10:             Label
-                              LoopMerge 12 13 Unroll 
-                              Branch 14
-              14:             Label
-              15:      6(int) Load 8(i)
-              18:    17(bool) SLessThan 15 16
-                              BranchConditional 18 11 12
-              11:               Label
-                                Branch 13
-              13:               Label
-              19:      6(int)   Load 8(i)
-              21:      6(int)   IAdd 19 20
-                                Store 8(i) 21
-                                Branch 10
-              12:             Label
-                              Branch 22
-              22:             Label
-                              LoopMerge 24 25 DontUnroll 
-                              Branch 23
-              23:             Label
+           23(i):     22(ptr) Variable Function
+           41(i):     22(ptr) Variable Function
+           65(i):     22(ptr) Variable Function
+           84(i):     22(ptr) Variable Function
+                              Store 23(i) 24
                               Branch 25
               25:             Label
-                              Branch 22
-              24:             Label
-                              Branch 26
-              26:             Label
-                              LoopMerge 28 29 DontUnroll 
-                              Branch 30
-              30:             Label
-                              BranchConditional 31 27 28
-              27:               Label
-                                Branch 29
-              29:               Label
-                                Branch 26
-              28:             Label
-                              Branch 32
-              32:             Label
-                              LoopMerge 34 35 DependencyInfinite 
-                              Branch 33
-              33:             Label
-                              Branch 35
-              35:             Label
-                              BranchConditional 31 32 34
-              34:             Label
-                              Store 36(i) 9
+                              LoopMerge 27 28 Unroll 
+                              Branch 29
+              29:             Label
+              30:     21(int) Load 23(i)
+              32:    19(bool) SLessThan 30 31
+                              BranchConditional 32 26 27
+              26:               Label
+                                Branch 28
+              28:               Label
+              33:     21(int)   Load 23(i)
+              35:     21(int)   IAdd 33 34
+                                Store 23(i) 35
+                                Branch 25
+              27:             Label
+              36:           2 FunctionCall 6(f0()
                               Branch 37
               37:             Label
-                              LoopMerge 39 40 DependencyLength  4
-                              Branch 41
-              41:             Label
-              42:      6(int) Load 36(i)
-              43:    17(bool) SLessThan 42 16
-                              BranchConditional 43 38 39
-              38:               Label
-                                Branch 40
-              40:               Label
-              44:      6(int)   Load 36(i)
-              45:      6(int)   IAdd 44 20
-                                Store 36(i) 45
-                                Branch 37
+                              LoopMerge 39 40 DependencyInfinite 
+                              Branch 38
+              38:             Label
+                              Branch 40
+              40:             Label
+                              BranchConditional 20 37 39
               39:             Label
-              48:    17(bool) Load 47(cond)
-                              SelectionMerge 50 Flatten 
-                              BranchConditional 48 49 50
-              49:               Label
-                                Branch 50
-              50:             Label
-              51:    17(bool) Load 47(cond)
-                              SelectionMerge 53 DontFlatten 
-                              BranchConditional 51 52 53
-              52:               Label
-                                Store 47(cond) 54
-                                Branch 53
-              53:             Label
-                              SelectionMerge 57 DontFlatten 
-                              Switch 55 57 
-                                     case 3: 56
-              56:               Label
-                                Branch 57
-              57:             Label
-                              Store 60(i) 9
-                              Branch 61
-              61:             Label
-                              LoopMerge 63 64 None
-                              Branch 65
-              65:             Label
-              66:      6(int) Load 60(i)
-              67:    17(bool) SLessThan 66 16
-                              BranchConditional 67 62 63
-              62:               Label
-                                Branch 64
-              64:               Label
-              68:      6(int)   Load 60(i)
-              69:      6(int)   IAdd 68 20
-                                Store 60(i) 69
-                                Branch 61
-              63:             Label
+                              Store 41(i) 24
+                              Branch 42
+              42:             Label
+                              LoopMerge 44 45 DependencyLength  4
+                              Branch 46
+              46:             Label
+              47:     21(int) Load 41(i)
+              48:    19(bool) SLessThan 47 31
+                              BranchConditional 48 43 44
+              43:               Label
+                                Branch 45
+              45:               Label
+              49:     21(int)   Load 41(i)
+              50:     21(int)   IAdd 49 34
+                                Store 41(i) 50
+                                Branch 42
+              44:             Label
+              53:    19(bool) Load 52(cond)
+                              SelectionMerge 55 Flatten 
+                              BranchConditional 53 54 55
+              54:               Label
+                                Branch 55
+              55:             Label
+              56:    19(bool) Load 52(cond)
+                              SelectionMerge 58 DontFlatten 
+                              BranchConditional 56 57 58
+              57:               Label
+                                Store 52(cond) 59
+                                Branch 58
+              58:             Label
+                              SelectionMerge 62 DontFlatten 
+                              Switch 60 62 
+                                     case 3: 61
+              61:               Label
+                                Branch 62
+              62:             Label
+                              Store 65(i) 24
+                              Branch 66
+              66:             Label
+                              LoopMerge 68 69 None
                               Branch 70
               70:             Label
-                              LoopMerge 72 73 None
-                              Branch 74
-              74:             Label
-                              BranchConditional 31 71 72
-              71:               Label
-                                Branch 73
-              73:               Label
-                                Branch 70
-              72:             Label
+              71:     21(int) Load 65(i)
+              72:    19(bool) SLessThan 71 31
+                              BranchConditional 72 67 68
+              67:               Label
+                                Branch 69
+              69:               Label
+              73:     21(int)   Load 65(i)
+              74:     21(int)   IAdd 73 34
+                                Store 65(i) 74
+                                Branch 66
+              68:             Label
                               Branch 75
               75:             Label
                               LoopMerge 77 78 None
-                              Branch 76
-              76:             Label
-                              Branch 78
-              78:             Label
-                              BranchConditional 31 75 77
+                              Branch 79
+              79:             Label
+                              BranchConditional 20 76 77
+              76:               Label
+                                Branch 78
+              78:               Label
+                                Branch 75
               77:             Label
-                              Store 79(i) 9
                               Branch 80
               80:             Label
                               LoopMerge 82 83 None
-                              Branch 84
-              84:             Label
-              85:      6(int) Load 79(i)
-              86:    17(bool) SLessThan 85 16
-                              BranchConditional 86 81 82
-              81:               Label
-                                Branch 83
-              83:               Label
-              87:      6(int)   Load 79(i)
-              88:      6(int)   IAdd 87 20
-                                Store 79(i) 88
-                                Branch 80
+                              Branch 81
+              81:             Label
+                              Branch 83
+              83:             Label
+                              BranchConditional 20 80 82
               82:             Label
-              89:    17(bool) Load 47(cond)
-                              SelectionMerge 91 None
-                              BranchConditional 89 90 91
-              90:               Label
-                                Branch 91
-              91:             Label
-              92:    17(bool) Load 47(cond)
-                              SelectionMerge 94 None
-                              BranchConditional 92 93 94
-              93:               Label
-                                Store 47(cond) 54
-                                Branch 94
-              94:             Label
+                              Store 84(i) 24
+                              Branch 85
+              85:             Label
+                              LoopMerge 87 88 None
+                              Branch 89
+              89:             Label
+              90:     21(int) Load 84(i)
+              91:    19(bool) SLessThan 90 31
+                              BranchConditional 91 86 87
+              86:               Label
+                                Branch 88
+              88:               Label
+              92:     21(int)   Load 84(i)
+              93:     21(int)   IAdd 92 34
+                                Store 84(i) 93
+                                Branch 85
+              87:             Label
+              94:    19(bool) Load 52(cond)
                               SelectionMerge 96 None
-                              Switch 55 96 
-                                     case 3: 95
+                              BranchConditional 94 95 96
               95:               Label
                                 Branch 96
               96:             Label
-                              Branch 99
-              99:             Label
-                              LoopMerge 101 102 Unroll DontUnroll DependencyLength  2
-                              Branch 103
-             103:             Label
-             104:    17(bool) Load 47(cond)
-                              BranchConditional 104 100 101
-             100:               Label
-                                Branch 102
-             102:               Label
+              97:    19(bool) Load 52(cond)
+                              SelectionMerge 99 None
+                              BranchConditional 97 98 99
+              98:               Label
+                                Store 52(cond) 59
                                 Branch 99
+              99:             Label
+                              SelectionMerge 101 None
+                              Switch 60 101 
+                                     case 3: 100
+             100:               Label
+                                Branch 101
              101:             Label
-                              SelectionMerge 106 DontFlatten 
-                              Switch 55 106 
-                                     case 3: 105
+                              Branch 104
+             104:             Label
+                              LoopMerge 106 107 Unroll DontUnroll DependencyLength  2
+                              Branch 108
+             108:             Label
+             109:    19(bool) Load 52(cond)
+                              BranchConditional 109 105 106
              105:               Label
-                                Branch 106
+                                Branch 107
+             107:               Label
+                                Branch 104
              106:             Label
-             109:    17(bool) Load 47(cond)
-                              SelectionMerge 111 Flatten 
-                              BranchConditional 109 110 111
+                              SelectionMerge 111 DontFlatten 
+                              Switch 60 111 
+                                     case 3: 110
              110:               Label
                                 Branch 111
              111:             Label
-                              Branch 112
-             112:             Label
-                              LoopMerge 114 115 DependencyInfinite 
-                              Branch 116
-             116:             Label
-             117:    17(bool) Load 47(cond)
-                              BranchConditional 117 113 114
-             113:               Label
-                                Branch 115
+             114:    19(bool) Load 52(cond)
+                              SelectionMerge 116 Flatten 
+                              BranchConditional 114 115 116
              115:               Label
-                                Branch 112
-             114:             Label
+                                Branch 116
+             116:             Label
+                              Branch 117
+             117:             Label
+                              LoopMerge 119 120 DependencyInfinite 
+                              Branch 121
+             121:             Label
+             122:    19(bool) Load 52(cond)
+                              BranchConditional 122 118 119
+             118:               Label
+                                Branch 120
+             120:               Label
+                                Branch 117
+             119:             Label
+                              Return
+                              FunctionEnd
+          6(f0():           2 Function None 3
+               7:             Label
+                              Branch 10
+              10:             Label
+                              LoopMerge 12 13 DontUnroll 
+                              Branch 11
+              11:             Label
+                              Branch 13
+              13:             Label
+                              Branch 10
+              12:             Label
+                              Unreachable
+                              FunctionEnd
+          8(f1():           2 Function None 3
+               9:             Label
+                              Branch 14
+              14:             Label
+                              LoopMerge 16 17 DontUnroll 
+                              Branch 18
+              18:             Label
+                              BranchConditional 20 15 16
+              15:               Label
+                                Branch 17
+              17:               Label
+                                Branch 14
+              16:             Label
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.conversion.frag.out b/Test/baseResults/spv.conversion.frag.out
index a321532..60129dd 100644
--- a/Test/baseResults/spv.conversion.frag.out
+++ b/Test/baseResults/spv.conversion.frag.out
@@ -1,6 +1,6 @@
 spv.conversion.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 455
 
                               Capability Shader
diff --git a/Test/baseResults/spv.coopmat.comp.out b/Test/baseResults/spv.coopmat.comp.out
new file mode 100644
index 0000000..4ef7028
--- /dev/null
+++ b/Test/baseResults/spv.coopmat.comp.out
@@ -0,0 +1,375 @@
+spv.coopmat.comp
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 228
+
+                              Capability Shader
+                              Capability Float16
+                              Capability StorageUniformBufferBlock16
+                              Capability VulkanMemoryModelKHR
+                              Capability PhysicalStorageBufferAddressesEXT
+                              Capability CooperativeMatrixNV
+                              Extension  "SPV_EXT_physical_storage_buffer"
+                              Extension  "SPV_KHR_16bit_storage"
+                              Extension  "SPV_KHR_storage_buffer_storage_class"
+                              Extension  "SPV_KHR_vulkan_memory_model"
+                              Extension  "SPV_NV_cooperative_matrix"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel PhysicalStorageBuffer64EXT VulkanKHR
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 64 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_buffer_reference"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_KHR_memory_scope_semantics"
+                              SourceExtension  "GL_NV_cooperative_matrix"
+                              Name 4  "main"
+                              Name 14  "f16(f161;"
+                              Name 13  "m"
+                              Name 21  "f32(f1;"
+                              Name 20  "m"
+                              Name 34  "m"
+                              Name 52  "m2"
+                              Name 56  "x"
+                              Name 64  "tempArg"
+                              Name 68  "Block"
+                              MemberName 68(Block) 0  "y"
+                              MemberName 68(Block) 1  "x"
+                              Name 70  "block"
+                              Name 81  "tempArg"
+                              Name 86  "Block16"
+                              MemberName 86(Block16) 0  "y"
+                              MemberName 86(Block16) 1  "x"
+                              MemberName 86(Block16) 2  "b"
+                              Name 89  "Block"
+                              MemberName 89(Block) 0  "y"
+                              MemberName 89(Block) 1  "x"
+                              Name 91  "block16"
+                              Name 98  "tempArg"
+                              Name 111  "D"
+                              Name 112  "A"
+                              Name 114  "B"
+                              Name 116  "C"
+                              Name 120  "l"
+                              Name 124  "Y"
+                              Name 125  "Z"
+                              Name 128  "F"
+                              Name 133  "a"
+                              Name 137  "md1"
+                              Name 148  "mC2"
+                              Name 153  "tempArg"
+                              Name 159  "tempArg"
+                              Name 165  "p1"
+                              Name 166  "param"
+                              Name 169  "p2"
+                              Name 170  "param"
+                              Name 184  "tempArg"
+                              Name 189  "shmatrix"
+                              Name 194  "ms"
+                              Name 201  "mC"
+                              Name 206  "arr"
+                              Name 211  "arr2"
+                              Name 212  "F"
+                              Name 217  "S"
+                              MemberName 217(S) 0  "a"
+                              MemberName 217(S) 1  "b"
+                              MemberName 217(S) 2  "c"
+                              Name 222  "SC"
+                              Name 227  "scm"
+                              Decorate 66 ArrayStride 4
+                              Decorate 67 ArrayStride 4
+                              MemberDecorate 68(Block) 0 Offset 0
+                              MemberDecorate 68(Block) 1 Offset 4194304
+                              Decorate 68(Block) Block
+                              Decorate 70(block) DescriptorSet 0
+                              Decorate 70(block) Binding 0
+                              Decorate 82 ArrayStride 2
+                              Decorate 84 ArrayStride 2
+                              MemberDecorate 86(Block16) 0 Offset 0
+                              MemberDecorate 86(Block16) 1 Offset 2097152
+                              MemberDecorate 86(Block16) 2 Offset 2097160
+                              Decorate 86(Block16) Block
+                              Decorate 87 ArrayStride 4
+                              Decorate 88 ArrayStride 4
+                              MemberDecorate 89(Block) 0 Offset 0
+                              MemberDecorate 89(Block) 1 Offset 4194304
+                              Decorate 89(Block) Block
+                              Decorate 91(block16) DescriptorSet 0
+                              Decorate 91(block16) Binding 0
+                              Decorate 124(Y) SpecId 0
+                              Decorate 200 BuiltIn WorkgroupSize
+                              Decorate 212(F) SpecId 1
+                              Decorate 222(SC) SpecId 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 16
+               7:             TypeInt 32 0
+               8:      7(int) Constant 3
+               9:      7(int) Constant 8
+              10:             TypeCooperativeMatrixNV 6(float16_t) 8 9 9
+              11:             TypePointer Function 10
+              12:             TypeFunction 10 11(ptr)
+              16:             TypeFloat 32
+              17:             TypeCooperativeMatrixNV 16(float) 8 9 9
+              18:             TypePointer Function 17
+              19:             TypeFunction 17 18(ptr)
+              31:      7(int) Constant 16
+              32:             TypeCooperativeMatrixNV 16(float) 8 31 9
+              33:             TypePointer Function 32
+              35:   16(float) Constant 0
+              36:          32 ConstantComposite 35
+              45:   16(float) Constant 1073741824
+              50:             TypeCooperativeMatrixNV 6(float16_t) 8 31 9
+              51:             TypePointer Function 50
+              55:             TypePointer Function 16(float)
+              57:             TypeInt 32 1
+              58:     57(int) Constant 1
+              61:     57(int) Constant 0
+              65:      7(int) Constant 1048576
+              66:             TypeArray 16(float) 65
+              67:             TypeRuntimeArray 16(float)
+       68(Block):             TypeStruct 66 67
+              69:             TypePointer StorageBuffer 68(Block)
+       70(block):     69(ptr) Variable StorageBuffer
+              71:      7(int) Constant 5
+              72:             TypePointer StorageBuffer 16(float)
+              74:      7(int) Constant 128
+              75:             TypeBool
+              76:    75(bool) ConstantFalse
+              82:             TypeArray 6(float16_t) 65
+              83:      7(int) Constant 1
+              84:             TypeArray 6(float16_t) 83
+                              TypeForwardPointer 85 PhysicalStorageBufferEXT
+     86(Block16):             TypeStruct 82 84 85
+              87:             TypeArray 16(float) 65
+              88:             TypeRuntimeArray 16(float)
+       89(Block):             TypeStruct 87 88
+              85:             TypePointer PhysicalStorageBufferEXT 89(Block)
+              90:             TypePointer StorageBuffer 86(Block16)
+     91(block16):     90(ptr) Variable StorageBuffer
+              92:             TypePointer StorageBuffer 6(float16_t)
+              99:     57(int) Constant 2
+             100:             TypePointer StorageBuffer 85(ptr)
+             103:             TypePointer PhysicalStorageBufferEXT 16(float)
+             119:             TypePointer Function 57(int)
+             121:      7(int) SpecConstantOp 5362 32
+             122:     57(int) SpecConstantOp 128 121 61
+             123:     57(int) Constant 8
+          124(Y):     57(int) SpecConstant 2
+          125(Z):     57(int) SpecConstantOp 132 123 124(Y)
+             126:             TypeCooperativeMatrixNV 6(float16_t) 8 125(Z) 125(Z)
+             127:             TypePointer Function 126
+             129:6(float16_t) Constant 0
+             130:         126 ConstantComposite 129
+             131:             TypeArray 32 71
+             132:             TypePointer Function 131
+             134:     57(int) Constant 3
+             135:   16(float) Constant 1065353216
+             141:     57(int) Constant 1234
+             145:             TypeCooperativeMatrixNV 6(float16_t) 8 125(Z) 9
+             146:             TypeArray 145 8
+             147:             TypePointer Private 146
+        148(mC2):    147(ptr) Variable Private
+             149:             TypePointer Private 145
+             173:          10 ConstantComposite 129
+             174:          17 ConstantComposite 35
+             178:6(float16_t) Constant 16384
+             181:   16(float) Constant 1082130432
+             185:             TypeVector 7(int) 4
+             186:      7(int) Constant 32
+             187:             TypeArray 185(ivec4) 186
+             188:             TypePointer Workgroup 187
+   189(shmatrix):    188(ptr) Variable Workgroup
+             190:      7(int) Constant 2
+             191:             TypePointer Workgroup 185(ivec4)
+             198:             TypeVector 7(int) 3
+             199:      7(int) Constant 64
+             200:  198(ivec3) ConstantComposite 199 83 83
+         201(mC):    149(ptr) Variable Private
+             202:      7(int) SpecConstantOp 5362 145
+             203:     57(int) SpecConstantOp 128 202 61
+             204:             TypeArray 57(int) 203
+             205:             TypePointer Private 204
+        206(arr):    205(ptr) Variable Private
+             207:      7(int) SpecConstantOp 5362 145
+             208:     57(int) SpecConstantOp 128 207 61
+             209:             TypeArray 57(int) 208
+             210:             TypePointer Private 209
+       211(arr2):    210(ptr) Variable Private
+          212(F):   16(float) SpecConstant 1077936128
+             213:             TypeCooperativeMatrixNV 16(float) 8 125(Z) 9
+             214:         213 ConstantComposite 35
+             215:6(float16_t) Constant 15360
+             216:          10 ConstantComposite 215
+          217(S):             TypeStruct 57(int) 57(int) 57(int)
+             218:     57(int) Constant 12
+             219:     57(int) Constant 23
+             220:     57(int) Constant 34
+             221:      217(S) ConstantComposite 218 219 220
+         222(SC):     57(int) SpecConstant 1
+             223:             TypeCooperativeMatrixNV 6(float16_t) 8 222(SC) 222(SC)
+             224:             TypeArray 223 222(SC)
+             225:             TypeArray 224 222(SC)
+             226:             TypePointer Private 225
+        227(scm):    226(ptr) Variable Private
+         4(main):           2 Function None 3
+               5:             Label
+           34(m):     33(ptr) Variable Function
+          52(m2):     51(ptr) Variable Function
+           56(x):     55(ptr) Variable Function
+     64(tempArg):     33(ptr) Variable Function
+     81(tempArg):     51(ptr) Variable Function
+     98(tempArg):     33(ptr) Variable Function
+          111(D):     33(ptr) Variable Function
+          112(A):     51(ptr) Variable Function
+          114(B):     11(ptr) Variable Function
+          116(C):     33(ptr) Variable Function
+          120(l):    119(ptr) Variable Function
+          128(F):    127(ptr) Variable Function
+          133(a):    132(ptr) Variable Function
+        137(md1):     55(ptr) Variable Function
+    153(tempArg):     33(ptr) Variable Function
+    159(tempArg):     51(ptr) Variable Function
+         165(p1):     11(ptr) Variable Function
+      166(param):     11(ptr) Variable Function
+         169(p2):     18(ptr) Variable Function
+      170(param):     18(ptr) Variable Function
+    184(tempArg):     51(ptr) Variable Function
+         194(ms):     51(ptr) Variable Function
+                              Store 34(m) 36
+              37:          32 Load 34(m)
+              38:          32 Load 34(m)
+              39:          32 FAdd 37 38
+                              Store 34(m) 39
+              40:          32 Load 34(m)
+              41:          32 Load 34(m)
+              42:          32 FSub 40 41
+                              Store 34(m) 42
+              43:          32 Load 34(m)
+              44:          32 FNegate 43
+                              Store 34(m) 44
+              46:          32 Load 34(m)
+              47:          32 MatrixTimesScalar 46 45
+                              Store 34(m) 47
+              48:          32 Load 34(m)
+              49:          32 MatrixTimesScalar 48 45
+                              Store 34(m) 49
+              53:          32 Load 34(m)
+              54:          50 FConvert 53
+                              Store 52(m2) 54
+              59:     55(ptr) AccessChain 34(m) 58
+              60:   16(float) Load 59
+                              Store 56(x) 60
+              62:   16(float) Load 56(x)
+              63:     55(ptr) AccessChain 34(m) 61
+                              Store 63 62
+              73:     72(ptr) AccessChain 70(block) 58 31
+              77:          32 CooperativeMatrixLoadNV 73 74 76 MakePointerVisibleKHR NonPrivatePointerKHR 71
+                              Store 64(tempArg) 77
+              78:          32 Load 64(tempArg)
+                              Store 34(m) 78
+              79:          32 Load 34(m)
+              80:     72(ptr) AccessChain 70(block) 58 31
+                              CooperativeMatrixStoreNV 80 79 74 76 MakePointerAvailableKHR NonPrivatePointerKHR 71
+              93:     92(ptr) AccessChain 91(block16) 58 31
+              94:          50 CooperativeMatrixLoadNV 93 74 76 MakePointerVisibleKHR NonPrivatePointerKHR 71
+                              Store 81(tempArg) 94
+              95:          50 Load 81(tempArg)
+                              Store 52(m2) 95
+              96:          50 Load 52(m2)
+              97:     92(ptr) AccessChain 91(block16) 58 31
+                              CooperativeMatrixStoreNV 97 96 74 76 MakePointerAvailableKHR NonPrivatePointerKHR 71
+             101:    100(ptr) AccessChain 91(block16) 99
+             102:     85(ptr) Load 101 MakePointerVisibleKHR NonPrivatePointerKHR 71
+             104:    103(ptr) AccessChain 102 58 31
+             105:          32 CooperativeMatrixLoadNV 104 74 76 Aligned MakePointerVisibleKHR NonPrivatePointerKHR 16 71
+                              Store 98(tempArg) 105
+             106:          32 Load 98(tempArg)
+                              Store 34(m) 106
+             107:          32 Load 34(m)
+             108:    100(ptr) AccessChain 91(block16) 99
+             109:     85(ptr) Load 108 MakePointerVisibleKHR NonPrivatePointerKHR 71
+             110:    103(ptr) AccessChain 109 58 31
+                              CooperativeMatrixStoreNV 110 107 74 76 Aligned MakePointerAvailableKHR NonPrivatePointerKHR 16 71
+             113:          50 Load 112(A)
+             115:          10 Load 114(B)
+             117:          32 Load 116(C)
+             118:          32 CooperativeMatrixMulAddNV 113 115 117
+                              Store 111(D) 118
+                              Store 120(l) 122
+                              Store 128(F) 130
+             136:     55(ptr) AccessChain 133(a) 134 61
+                              Store 136 135
+                              Store 137(md1) 35
+             138:          32 Load 34(m)
+             139:          32 Load 34(m)
+             140:          32 FAdd 139 138
+                              Store 34(m) 140
+             142:   16(float) CompositeExtract 140 1234
+             143:   16(float) Load 137(md1)
+             144:   16(float) FAdd 143 142
+                              Store 137(md1) 144
+             150:    149(ptr) AccessChain 148(mC2) 99
+             151:         145 Load 150
+             152:    149(ptr) AccessChain 148(mC2) 58
+                              Store 152 151
+             154:     72(ptr) AccessChain 70(block) 61 31
+             155:          32 CooperativeMatrixLoadNV 154 74 76 MakePointerVisibleKHR NonPrivatePointerKHR 71
+                              Store 153(tempArg) 155
+             156:          32 Load 153(tempArg)
+                              Store 34(m) 156
+             157:          32 Load 34(m)
+             158:     72(ptr) AccessChain 70(block) 61 31
+                              CooperativeMatrixStoreNV 158 157 74 76 MakePointerAvailableKHR NonPrivatePointerKHR 71
+             160:     92(ptr) AccessChain 91(block16) 61 31
+             161:          50 CooperativeMatrixLoadNV 160 74 76 MakePointerVisibleKHR NonPrivatePointerKHR 71
+                              Store 159(tempArg) 161
+             162:          50 Load 159(tempArg)
+                              Store 52(m2) 162
+             163:          50 Load 52(m2)
+             164:     92(ptr) AccessChain 91(block16) 61 31
+                              CooperativeMatrixStoreNV 164 163 74 76 MakePointerAvailableKHR NonPrivatePointerKHR 71
+             167:          10 Load 165(p1)
+                              Store 166(param) 167
+             168:          10 FunctionCall 14(f16(f161;) 166(param)
+                              Store 165(p1) 168
+             171:          17 Load 169(p2)
+                              Store 170(param) 171
+             172:          17 FunctionCall 21(f32(f1;) 170(param)
+                              Store 169(p2) 172
+                              Store 165(p1) 173
+                              Store 169(p2) 174
+             175:          10 Load 165(p1)
+             176:          10 Load 165(p1)
+             177:          10 FDiv 176 175
+                              Store 165(p1) 177
+             179:          10 Load 165(p1)
+             180:          10 MatrixTimesScalar 179 178
+                              Store 165(p1) 180
+             182:          17 Load 169(p2)
+             183:          17 MatrixTimesScalar 182 181
+                              Store 169(p2) 183
+             192:    191(ptr) AccessChain 189(shmatrix) 83
+             193:          50 CooperativeMatrixLoadNV 192 190 76 MakePointerVisibleKHR NonPrivatePointerKHR 190
+                              Store 184(tempArg) 193
+             195:          50 Load 184(tempArg)
+                              Store 194(ms) 195
+             196:          50 Load 194(ms)
+             197:    191(ptr) AccessChain 189(shmatrix) 83
+                              CooperativeMatrixStoreNV 197 196 190 76 MakePointerAvailableKHR NonPrivatePointerKHR 190
+                              Return
+                              FunctionEnd
+   14(f16(f161;):          10 Function None 12
+           13(m):     11(ptr) FunctionParameter
+              15:             Label
+              23:          10 Load 13(m)
+              24:          10 FNegate 23
+                              ReturnValue 24
+                              FunctionEnd
+     21(f32(f1;):          17 Function None 19
+           20(m):     18(ptr) FunctionParameter
+              22:             Label
+              27:          17 Load 20(m)
+              28:          17 FNegate 27
+                              ReturnValue 28
+                              FunctionEnd
diff --git a/Test/baseResults/spv.coopmat_Error.comp.out b/Test/baseResults/spv.coopmat_Error.comp.out
new file mode 100644
index 0000000..49223b0
--- /dev/null
+++ b/Test/baseResults/spv.coopmat_Error.comp.out
@@ -0,0 +1,35 @@
+spv.coopmat_Error.comp
+ERROR: 0:8: 'ftemplate16' : unexpected type parameters 
+ERROR: 0:10: 'fnoparams' : expected four type parameters 
+ERROR: 0:12: 'fbadbits' : expected 16, 32, or 64 bits for first type parameter 
+ERROR: 0:14: 'fbadnumparams' : expected four type parameters 
+ERROR: 0:18: '' : type parameter must be a constant integer expression
+ERROR: 0:20: 'constant_id' : can only be applied to 'const'-qualified scalar 
+ERROR: 0:22: 'Cooperative matrix types must not be used in shared memory' : qualifier 
+ERROR: 0:25: 'bufmat' : member of block cannot be or contain a cooperative matrix type 
+ERROR: 0:34: 'assign' :  cannot convert from ' temp<16, 3, 16, 8> float16_t' to ' temp<32, 3, 16, 8> highp float'
+ERROR: 0:35: 'assign' :  cannot convert from ' temp<16, 3, 16, 8> float16_t' to ' temp<32, 3, 16, 8> highp float'
+ERROR: 0:40: 'assign' :  cannot convert from ' temp<16, 3, 8, 8> float16_t' to ' temp<16, 3, 16, 8> float16_t'
+ERROR: 0:46: 'assign' :  cannot convert from ' temp<16, 3, 8, 1> float16_t' to ' temp<16, 3, 8, 1> float16_t'
+ERROR: 0:49: 'constructor' : too many arguments 
+ERROR: 0:49: 'assign' :  cannot convert from ' const float' to ' temp<16, 3, 8, 8> float16_t'
+ERROR: 0:53: 'constructor' : Cooperative matrix constructor argument must be scalar or cooperative matrix 
+ERROR: 0:53: '=' :  cannot convert from ' const float' to ' temp<32, 3, 4, 4> highp float'
+ERROR: 0:56: 'expression' :  left of '[' is not of type array, matrix, or vector  
+ERROR: 0:59: '.' : cannot apply to a cooperative matrix type: x
+ERROR: 0:61: '*' :  wrong operand types: no operation '*' exists that takes a left-hand operand of type ' temp<16, 3, 16, 8> float16_t' and a right operand of type ' temp<16, 3, 16, 8> float16_t' (or there is no acceptable conversion)
+ERROR: 0:63: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type ' temp<16, 3, 16, 8> float16_t' and a right operand of type ' const float' (or there is no acceptable conversion)
+ERROR: 0:64: '-' :  wrong operand types: no operation '-' exists that takes a left-hand operand of type ' temp<16, 3, 16, 8> float16_t' and a right operand of type ' const float' (or there is no acceptable conversion)
+ERROR: 0:65: '/' :  wrong operand types: no operation '/' exists that takes a left-hand operand of type ' temp<16, 3, 16, 8> float16_t' and a right operand of type ' const float' (or there is no acceptable conversion)
+ERROR: 0:66: 'assign' :  cannot convert from ' const float' to ' temp<16, 3, 16, 8> float16_t'
+ERROR: 0:67: 'assign' :  cannot convert from ' const float' to ' temp<16, 3, 16, 8> float16_t'
+ERROR: 0:68: 'assign' :  cannot convert from ' const float' to ' temp<16, 3, 16, 8> float16_t'
+ERROR: 0:70: '*' :  wrong operand types: no operation '*' exists that takes a left-hand operand of type ' temp<16, 3, 16, 8> float16_t' and a right operand of type ' const float' (or there is no acceptable conversion)
+ERROR: 0:71: '*' :  wrong operand types: no operation '*' exists that takes a left-hand operand of type ' const float' and a right operand of type ' temp<16, 3, 16, 8> float16_t' (or there is no acceptable conversion)
+ERROR: 0:72: '*' :  wrong operand types: no operation '*' exists that takes a left-hand operand of type ' temp<32, 3, 16, 8> highp float' and a right operand of type ' const float16_t' (or there is no acceptable conversion)
+ERROR: 0:73: '*' :  wrong operand types: no operation '*' exists that takes a left-hand operand of type ' const float16_t' and a right operand of type ' temp<32, 3, 16, 8> highp float' (or there is no acceptable conversion)
+ERROR: 0:75: 'transpose' : no matching overloaded function found 
+ERROR: 30 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.dataOut.frag.out b/Test/baseResults/spv.dataOut.frag.out
index f384721..5dc14ce 100644
--- a/Test/baseResults/spv.dataOut.frag.out
+++ b/Test/baseResults/spv.dataOut.frag.out
@@ -1,6 +1,6 @@
 spv.dataOut.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dataOutIndirect.frag.out b/Test/baseResults/spv.dataOutIndirect.frag.out
index f371601..fa6a0da 100644
--- a/Test/baseResults/spv.dataOutIndirect.frag.out
+++ b/Test/baseResults/spv.dataOutIndirect.frag.out
@@ -1,6 +1,6 @@
 spv.dataOutIndirect.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dataOutIndirect.vert.out b/Test/baseResults/spv.dataOutIndirect.vert.out
index 9ba988c..fab5e58 100644
--- a/Test/baseResults/spv.dataOutIndirect.vert.out
+++ b/Test/baseResults/spv.dataOutIndirect.vert.out
@@ -2,7 +2,7 @@
 WARNING: 0:3: attribute deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dead-after-continue.vert.out b/Test/baseResults/spv.dead-after-continue.vert.out
new file mode 100644
index 0000000..f3b8792
--- /dev/null
+++ b/Test/baseResults/spv.dead-after-continue.vert.out
@@ -0,0 +1,54 @@
+spv.dead-after-continue.vert
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 29
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 20 28
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "i"
+                              Name 20  "o"
+                              Name 28  "c"
+                              Decorate 20(o) Location 0
+                              Decorate 28(c) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 0
+              16:      6(int) Constant 5
+              17:             TypeBool
+              19:             TypePointer Output 6(int)
+           20(o):     19(ptr) Variable Output
+              21:      6(int) Constant 1
+              23:      6(int) Constant 2
+              26:      6(int) Constant 3
+              27:             TypePointer Input 6(int)
+           28(c):     27(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+            8(i):      7(ptr) Variable Function
+                              Store 8(i) 9
+                              Branch 10
+              10:             Label
+                              LoopMerge 12 13 None
+                              Branch 14
+              14:             Label
+              15:      6(int) Load 8(i)
+              18:    17(bool) SLessThan 15 16
+                              BranchConditional 18 11 12
+              11:               Label
+                                Store 20(o) 21
+                                Branch 13
+              13:               Label
+              24:      6(int)   Load 8(i)
+              25:      6(int)   IAdd 24 21
+                                Store 8(i) 25
+                                Branch 10
+              12:             Label
+                              Store 20(o) 26
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.dead-after-discard.frag.out b/Test/baseResults/spv.dead-after-discard.frag.out
new file mode 100644
index 0000000..f378d04
--- /dev/null
+++ b/Test/baseResults/spv.dead-after-discard.frag.out
@@ -0,0 +1,31 @@
+spv.dead-after-discard.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 15
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 8 14
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "o"
+                              Name 14  "c"
+                              Decorate 8(o) Location 0
+                              Decorate 14(c) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Output 6(int)
+            8(o):      7(ptr) Variable Output
+               9:      6(int) Constant 1
+              11:      6(int) Constant 3
+              12:             TypeFloat 32
+              13:             TypePointer Input 12(float)
+           14(c):     13(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 8(o) 9
+                              Kill
+                              FunctionEnd
diff --git a/Test/baseResults/spv.dead-after-loop-break.vert.out b/Test/baseResults/spv.dead-after-loop-break.vert.out
new file mode 100644
index 0000000..b653e39
--- /dev/null
+++ b/Test/baseResults/spv.dead-after-loop-break.vert.out
@@ -0,0 +1,67 @@
+spv.dead-after-loop-break.vert
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 36
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 8 25
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "o"
+                              Name 11  "i"
+                              Name 25  "c"
+                              Decorate 8(o) Location 0
+                              Decorate 25(c) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Output 6(int)
+            8(o):      7(ptr) Variable Output
+               9:      6(int) Constant 1
+              10:             TypePointer Function 6(int)
+              12:      6(int) Constant 0
+              19:      6(int) Constant 5
+              20:             TypeBool
+              22:      6(int) Constant 2
+              24:             TypePointer Input 6(int)
+           25(c):     24(ptr) Variable Input
+              30:      6(int) Constant 3
+              32:      6(int) Constant 4
+              35:      6(int) Constant 6
+         4(main):           2 Function None 3
+               5:             Label
+           11(i):     10(ptr) Variable Function
+                              Store 8(o) 9
+                              Store 11(i) 12
+                              Branch 13
+              13:             Label
+                              LoopMerge 15 16 None
+                              Branch 17
+              17:             Label
+              18:      6(int) Load 11(i)
+              21:    20(bool) SLessThan 18 19
+                              BranchConditional 21 14 15
+              14:               Label
+                                Store 8(o) 22
+              23:      6(int)   Load 11(i)
+              26:      6(int)   Load 25(c)
+              27:    20(bool)   IEqual 23 26
+                                SelectionMerge 29 None
+                                BranchConditional 27 28 29
+              28:                 Label
+                                  Store 8(o) 30
+                                  Branch 15
+              29:               Label
+                                Store 8(o) 19
+                                Branch 16
+              16:               Label
+              33:      6(int)   Load 11(i)
+              34:      6(int)   IAdd 33 9
+                                Store 11(i) 34
+                                Branch 13
+              15:             Label
+                              Store 8(o) 35
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.dead-after-return.vert.out b/Test/baseResults/spv.dead-after-return.vert.out
new file mode 100644
index 0000000..d963f9f
--- /dev/null
+++ b/Test/baseResults/spv.dead-after-return.vert.out
@@ -0,0 +1,29 @@
+spv.dead-after-return.vert
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 14
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 8 13
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "o"
+                              Name 13  "c"
+                              Decorate 8(o) Location 0
+                              Decorate 13(c) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Output 6(int)
+            8(o):      7(ptr) Variable Output
+               9:      6(int) Constant 1
+              11:      6(int) Constant 3
+              12:             TypePointer Input 6(int)
+           13(c):     12(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 8(o) 9
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.dead-after-switch-break.vert.out b/Test/baseResults/spv.dead-after-switch-break.vert.out
new file mode 100644
index 0000000..a506012
--- /dev/null
+++ b/Test/baseResults/spv.dead-after-switch-break.vert.out
@@ -0,0 +1,40 @@
+spv.dead-after-switch-break.vert
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 21
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 8 14
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "c"
+                              Name 14  "o"
+                              Decorate 8(c) Location 0
+                              Decorate 14(o) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Input 6(int)
+            8(c):      7(ptr) Variable Input
+              13:             TypePointer Output 6(int)
+           14(o):     13(ptr) Variable Output
+              15:      6(int) Constant 1
+              17:      6(int) Constant 2
+              20:      6(int) Constant 3
+         4(main):           2 Function None 3
+               5:             Label
+               9:      6(int) Load 8(c)
+                              SelectionMerge 12 None
+                              Switch 9 11 
+                                     case 0: 10
+              11:               Label
+                                Branch 12
+              10:               Label
+                                Store 14(o) 15
+                                Branch 12
+              12:             Label
+                              Store 14(o) 20
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.dead-complex-continue-after-return.vert.out b/Test/baseResults/spv.dead-complex-continue-after-return.vert.out
new file mode 100644
index 0000000..60e81bd
--- /dev/null
+++ b/Test/baseResults/spv.dead-complex-continue-after-return.vert.out
@@ -0,0 +1,55 @@
+spv.dead-complex-continue-after-return.vert
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 31
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 11 30
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "i"
+                              Name 11  "o"
+                              Name 30  "c"
+                              Decorate 11(o) Location 0
+                              Decorate 30(c) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 0
+              10:             TypePointer Output 6(int)
+           11(o):     10(ptr) Variable Output
+              12:      6(int) Constant 1
+              19:      6(int) Constant 5
+              20:             TypeBool
+              22:      6(int) Constant 2
+              24:      6(int) Constant 3
+              27:      6(int) Constant 99
+              28:      6(int) Constant 4
+              29:             TypePointer Input 6(int)
+           30(c):     29(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+            8(i):      7(ptr) Variable Function
+                              Store 8(i) 9
+                              Store 11(o) 12
+                              Store 8(i) 9
+                              Branch 13
+              13:             Label
+                              LoopMerge 15 16 None
+                              Branch 17
+              17:             Label
+              18:      6(int) Load 8(i)
+              21:    20(bool) SLessThan 18 19
+                              BranchConditional 21 14 15
+              14:               Label
+                                Store 11(o) 22
+                                Return
+              16:               Label
+                                Branch 13
+              15:             Label
+                              Store 11(o) 28
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.dead-complex-merge-after-return.vert.out b/Test/baseResults/spv.dead-complex-merge-after-return.vert.out
new file mode 100644
index 0000000..609a3ce
--- /dev/null
+++ b/Test/baseResults/spv.dead-complex-merge-after-return.vert.out
@@ -0,0 +1,51 @@
+spv.dead-complex-merge-after-return.vert
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 36
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 11 27
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "i"
+                              Name 11  "o"
+                              Name 27  "c"
+                              Decorate 11(o) Location 0
+                              Decorate 27(c) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 0
+              10:             TypePointer Output 6(int)
+           11(o):     10(ptr) Variable Output
+              12:      6(int) Constant 1
+              17:      6(int) Constant 2
+              19:      6(int) Constant 3
+              22:      6(int) Constant 5
+              23:             TypeBool
+              25:      6(int) Constant 4
+              26:             TypePointer Input 6(int)
+           27(c):     26(ptr) Variable Input
+              32:      6(int) Constant 100
+              34:      6(int) Constant 200
+              35:      6(int) Constant 300
+         4(main):           2 Function None 3
+               5:             Label
+            8(i):      7(ptr) Variable Function
+                              Store 8(i) 9
+                              Store 11(o) 12
+                              Branch 13
+              13:             Label
+                              LoopMerge 15 16 None
+                              Branch 14
+              14:             Label
+                              Store 11(o) 17
+                              Return
+              16:             Label
+                              Branch 13
+              15:             Label
+                              Unreachable
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debugInfo.1.1.frag.out b/Test/baseResults/spv.debugInfo.1.1.frag.out
index eb3bcb4..b68de49 100644
--- a/Test/baseResults/spv.debugInfo.1.1.frag.out
+++ b/Test/baseResults/spv.debugInfo.1.1.frag.out
@@ -2,7 +2,7 @@
 error: SPIRV-Tools Validation Errors
 error: Invalid SPIR-V binary version 1.3 for target environment SPIR-V 1.0 (under OpenGL 4.5 semantics).
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 124
 
                               Capability Shader
@@ -81,8 +81,10 @@
                               Name 97  "i"
                               ModuleProcessed  "no-storage-format"
                               ModuleProcessed  "resource-set-binding 3"
+                              ModuleProcessed  "auto-map-bindings"
                               ModuleProcessed  "auto-map-locations"
                               ModuleProcessed  "client opengl100"
+                              ModuleProcessed  "target-env spirv1.3"
                               ModuleProcessed  "target-env opengl"
                               ModuleProcessed  "relaxed-errors"
                               ModuleProcessed  "suppress-warnings"
@@ -98,7 +100,7 @@
                               Decorate 56 Binding 0
                               Decorate 67(s2d) Location 0
                               Decorate 67(s2d) DescriptorSet 3
-                              Decorate 67(s2d) Binding 0
+                              Decorate 67(s2d) Binding 1
                3:             TypeVoid
                4:             TypeFunction 3
                7:             TypeInt 32 1
diff --git a/Test/baseResults/spv.debugInfo.frag.out b/Test/baseResults/spv.debugInfo.frag.out
index aaa988d..f27aac0 100644
--- a/Test/baseResults/spv.debugInfo.frag.out
+++ b/Test/baseResults/spv.debugInfo.frag.out
@@ -1,6 +1,6 @@
 spv.debugInfo.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 124
 
                               Capability Shader
diff --git a/Test/baseResults/spv.debugPrintf.frag.out b/Test/baseResults/spv.debugPrintf.frag.out
new file mode 100644
index 0000000..dbd0b4e
--- /dev/null
+++ b/Test/baseResults/spv.debugPrintf.frag.out
@@ -0,0 +1,31 @@
+spv.debugPrintf.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 17
+
+                              Capability Shader
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "GLSL.std.450"
+              11:             ExtInstImport  "NonSemantic.DebugPrintf"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+               6:             String  "ASDF \ ? \ %d %d %d"
+              13:             String  "ABAZ"
+              15:             String  "B#$B1Z"
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_debug_printf"
+                              Name 4  "main"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               7:             TypeInt 32 1
+               8:      7(int) Constant 1
+               9:      7(int) Constant 2
+              10:      7(int) Constant 3
+         4(main):           2 Function None 3
+               5:             Label
+              12:           2 ExtInst 11(NonSemantic.DebugPrintf) 1(DebugPrintf) 6 8 9 10
+              14:           2 ExtInst 11(NonSemantic.DebugPrintf) 1(DebugPrintf) 13
+              16:           2 ExtInst 11(NonSemantic.DebugPrintf) 1(DebugPrintf) 15
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debugPrintf_Error.frag.out b/Test/baseResults/spv.debugPrintf_Error.frag.out
new file mode 100644
index 0000000..31ddd9d
--- /dev/null
+++ b/Test/baseResults/spv.debugPrintf_Error.frag.out
@@ -0,0 +1,7 @@
+spv.debugPrintf_Error.frag
+ERROR: 0:7: 'string' : Expected hex value in escape sequence 
+ERROR: 0:10: 'string' : Invalid escape sequence 
+ERROR: 2 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.deepRvalue.frag.out b/Test/baseResults/spv.deepRvalue.frag.out
index 1869d76..776fdf8 100644
--- a/Test/baseResults/spv.deepRvalue.frag.out
+++ b/Test/baseResults/spv.deepRvalue.frag.out
@@ -1,6 +1,6 @@
 spv.deepRvalue.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 152
 
                               Capability Shader
diff --git a/Test/baseResults/spv.demoteDisabled.frag.out b/Test/baseResults/spv.demoteDisabled.frag.out
new file mode 100644
index 0000000..382fa56
--- /dev/null
+++ b/Test/baseResults/spv.demoteDisabled.frag.out
@@ -0,0 +1,6 @@
+spv.demoteDisabled.frag
+ERROR: 0:9: 'demote' : undeclared identifier 
+ERROR: 1 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.depthOut.frag.out b/Test/baseResults/spv.depthOut.frag.out
index 5da0df0..d212c89 100644
--- a/Test/baseResults/spv.depthOut.frag.out
+++ b/Test/baseResults/spv.depthOut.frag.out
@@ -1,6 +1,6 @@
 spv.depthOut.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 15
 
                               Capability Shader
@@ -8,8 +8,8 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 8 10 14
                               ExecutionMode 4 OriginUpperLeft
-                              ExecutionMode 4 DepthGreater
                               ExecutionMode 4 DepthReplacing
+                              ExecutionMode 4 DepthGreater
                               Source GLSL 450
                               Name 4  "main"
                               Name 8  "gl_FragDepth"
diff --git a/Test/baseResults/spv.deviceGroup.frag.out b/Test/baseResults/spv.deviceGroup.frag.out
index 6710b77..2d16272 100644
--- a/Test/baseResults/spv.deviceGroup.frag.out
+++ b/Test/baseResults/spv.deviceGroup.frag.out
@@ -1,6 +1,6 @@
 spv.deviceGroup.frag
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 17
 
                               Capability Shader
diff --git a/Test/baseResults/spv.discard-dce.frag.out b/Test/baseResults/spv.discard-dce.frag.out
index 9d138f2..c4a5cb2 100644
--- a/Test/baseResults/spv.discard-dce.frag.out
+++ b/Test/baseResults/spv.discard-dce.frag.out
@@ -1,6 +1,6 @@
 spv.discard-dce.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/spv.do-simple.vert.out b/Test/baseResults/spv.do-simple.vert.out
index 6014dfe..826cc1c 100644
--- a/Test/baseResults/spv.do-simple.vert.out
+++ b/Test/baseResults/spv.do-simple.vert.out
@@ -1,6 +1,6 @@
 spv.do-simple.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.do-while-continue-break.vert.out b/Test/baseResults/spv.do-while-continue-break.vert.out
index 2838880..36315a2 100644
--- a/Test/baseResults/spv.do-while-continue-break.vert.out
+++ b/Test/baseResults/spv.do-while-continue-break.vert.out
@@ -1,6 +1,6 @@
 spv.do-while-continue-break.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/spv.doWhileLoop.frag.out b/Test/baseResults/spv.doWhileLoop.frag.out
index 808466e..945f0d7 100644
--- a/Test/baseResults/spv.doWhileLoop.frag.out
+++ b/Test/baseResults/spv.doWhileLoop.frag.out
@@ -1,6 +1,6 @@
 spv.doWhileLoop.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/spv.double.comp.out b/Test/baseResults/spv.double.comp.out
index e9470ac..7961fc6 100644
--- a/Test/baseResults/spv.double.comp.out
+++ b/Test/baseResults/spv.double.comp.out
@@ -1,6 +1,6 @@
 spv.double.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.drawParams.vert.out b/Test/baseResults/spv.drawParams.vert.out
index 8f3e2c0..e9d4970 100644
--- a/Test/baseResults/spv.drawParams.vert.out
+++ b/Test/baseResults/spv.drawParams.vert.out
@@ -1,6 +1,6 @@
 spv.drawParams.vert
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.earlyReturnDiscard.frag.out b/Test/baseResults/spv.earlyReturnDiscard.frag.out
index c44b722..a4eb8ca 100644
--- a/Test/baseResults/spv.earlyReturnDiscard.frag.out
+++ b/Test/baseResults/spv.earlyReturnDiscard.frag.out
@@ -1,6 +1,6 @@
 spv.earlyReturnDiscard.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 110
 
                               Capability Shader
@@ -160,7 +160,7 @@
              102:                 Label
                                   Return
              100:               Label
-                                Branch 67
+                                Unreachable
               67:             Label
              106:    7(fvec4) Load 9(color)
              107:    7(fvec4) Load 13(color2)
diff --git a/Test/baseResults/spv.explicittypes.frag.out b/Test/baseResults/spv.explicittypes.frag.out
index c07f66d..9318913 100644
--- a/Test/baseResults/spv.explicittypes.frag.out
+++ b/Test/baseResults/spv.explicittypes.frag.out
@@ -1,6 +1,6 @@
 spv.explicittypes.frag
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 576
 
                               Capability Shader
diff --git a/Test/baseResults/spv.ext.AnyHitShader.rahit.out b/Test/baseResults/spv.ext.AnyHitShader.rahit.out
new file mode 100644
index 0000000..3cd60c7
--- /dev/null
+++ b/Test/baseResults/spv.ext.AnyHitShader.rahit.out
@@ -0,0 +1,188 @@
+spv.ext.AnyHitShader.rahit
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 94
+
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint AnyHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 9  "v0"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 13  "v1"
+                              Name 14  "gl_LaunchSizeEXT"
+                              Name 18  "v2"
+                              Name 20  "gl_PrimitiveID"
+                              Name 22  "v3"
+                              Name 23  "gl_InstanceID"
+                              Name 25  "v4"
+                              Name 26  "gl_InstanceCustomIndexEXT"
+                              Name 31  "v5"
+                              Name 33  "gl_WorldRayOriginEXT"
+                              Name 35  "v6"
+                              Name 36  "gl_WorldRayDirectionEXT"
+                              Name 38  "v7"
+                              Name 39  "gl_ObjectRayOriginEXT"
+                              Name 41  "v8"
+                              Name 42  "gl_ObjectRayDirectionEXT"
+                              Name 45  "v9"
+                              Name 47  "gl_RayTminEXT"
+                              Name 49  "v10"
+                              Name 50  "gl_RayTmaxEXT"
+                              Name 52  "v11"
+                              Name 53  "gl_HitTEXT"
+                              Name 56  "v12"
+                              Name 58  "gl_HitKindEXT"
+                              Name 62  "v13"
+                              Name 64  "gl_ObjectToWorldEXT"
+                              Name 66  "v14"
+                              Name 67  "gl_WorldToObjectEXT"
+                              Name 69  "v15"
+                              Name 70  "gl_GeometryIndexEXT"
+                              Name 75  "v16"
+                              Name 76  "gl_ObjectToWorld3x4EXT"
+                              Name 79  "v17"
+                              Name 80  "gl_WorldToObject3x4EXT"
+                              Name 84  "incomingPayload"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 23(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 26(gl_InstanceCustomIndexEXT) BuiltIn InstanceCustomIndexKHR
+                              Decorate 33(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR
+                              Decorate 36(gl_WorldRayDirectionEXT) BuiltIn WorldRayDirectionKHR
+                              Decorate 39(gl_ObjectRayOriginEXT) BuiltIn ObjectRayOriginKHR
+                              Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR
+                              Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR
+                              Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
+                              Decorate 53(gl_HitTEXT) BuiltIn HitTKHR
+                              Decorate 58(gl_HitKindEXT) BuiltIn HitKindKHR
+                              Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
+                              Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
+                              Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR
+                              Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR
+                              Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
+                              Decorate 84(incomingPayload) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+              10:             TypePointer Input 7(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+14(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              16:             TypeInt 32 1
+              17:             TypePointer Function 16(int)
+              19:             TypePointer Input 16(int)
+20(gl_PrimitiveID):     19(ptr) Variable Input
+23(gl_InstanceID):     19(ptr) Variable Input
+26(gl_InstanceCustomIndexEXT):     19(ptr) Variable Input
+              28:             TypeFloat 32
+              29:             TypeVector 28(float) 3
+              30:             TypePointer Function 29(fvec3)
+              32:             TypePointer Input 29(fvec3)
+33(gl_WorldRayOriginEXT):     32(ptr) Variable Input
+36(gl_WorldRayDirectionEXT):     32(ptr) Variable Input
+39(gl_ObjectRayOriginEXT):     32(ptr) Variable Input
+42(gl_ObjectRayDirectionEXT):     32(ptr) Variable Input
+              44:             TypePointer Function 28(float)
+              46:             TypePointer Input 28(float)
+47(gl_RayTminEXT):     46(ptr) Variable Input
+50(gl_RayTmaxEXT):     46(ptr) Variable Input
+  53(gl_HitTEXT):     46(ptr) Variable Input
+              55:             TypePointer Function 6(int)
+              57:             TypePointer Input 6(int)
+58(gl_HitKindEXT):     57(ptr) Variable Input
+              60:             TypeMatrix 29(fvec3) 4
+              61:             TypePointer Function 60
+              63:             TypePointer Input 60
+64(gl_ObjectToWorldEXT):     63(ptr) Variable Input
+67(gl_WorldToObjectEXT):     63(ptr) Variable Input
+70(gl_GeometryIndexEXT):     19(ptr) Variable Input
+              72:             TypeVector 28(float) 4
+              73:             TypeMatrix 72(fvec4) 3
+              74:             TypePointer Function 73
+76(gl_ObjectToWorld3x4EXT):     63(ptr) Variable Input
+80(gl_WorldToObject3x4EXT):     63(ptr) Variable Input
+              83:             TypePointer IncomingRayPayloadKHR 72(fvec4)
+84(incomingPayload):     83(ptr) Variable IncomingRayPayloadKHR
+              85:   28(float) Constant 1056964608
+              86:   72(fvec4) ConstantComposite 85 85 85 85
+              88:     16(int) Constant 1
+              89:             TypeBool
+         4(main):           2 Function None 3
+               5:             Label
+           9(v0):      8(ptr) Variable Function
+          13(v1):      8(ptr) Variable Function
+          18(v2):     17(ptr) Variable Function
+          22(v3):     17(ptr) Variable Function
+          25(v4):     17(ptr) Variable Function
+          31(v5):     30(ptr) Variable Function
+          35(v6):     30(ptr) Variable Function
+          38(v7):     30(ptr) Variable Function
+          41(v8):     30(ptr) Variable Function
+          45(v9):     44(ptr) Variable Function
+         49(v10):     44(ptr) Variable Function
+         52(v11):     44(ptr) Variable Function
+         56(v12):     55(ptr) Variable Function
+         62(v13):     61(ptr) Variable Function
+         66(v14):     61(ptr) Variable Function
+         69(v15):     17(ptr) Variable Function
+         75(v16):     74(ptr) Variable Function
+         79(v17):     74(ptr) Variable Function
+              12:    7(ivec3) Load 11(gl_LaunchIDEXT)
+                              Store 9(v0) 12
+              15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
+                              Store 13(v1) 15
+              21:     16(int) Load 20(gl_PrimitiveID)
+                              Store 18(v2) 21
+              24:     16(int) Load 23(gl_InstanceID)
+                              Store 22(v3) 24
+              27:     16(int) Load 26(gl_InstanceCustomIndexEXT)
+                              Store 25(v4) 27
+              34:   29(fvec3) Load 33(gl_WorldRayOriginEXT)
+                              Store 31(v5) 34
+              37:   29(fvec3) Load 36(gl_WorldRayDirectionEXT)
+                              Store 35(v6) 37
+              40:   29(fvec3) Load 39(gl_ObjectRayOriginEXT)
+                              Store 38(v7) 40
+              43:   29(fvec3) Load 42(gl_ObjectRayDirectionEXT)
+                              Store 41(v8) 43
+              48:   28(float) Load 47(gl_RayTminEXT)
+                              Store 45(v9) 48
+              51:   28(float) Load 50(gl_RayTmaxEXT)
+                              Store 49(v10) 51
+              54:   28(float) Load 53(gl_HitTEXT)
+                              Store 52(v11) 54
+              59:      6(int) Load 58(gl_HitKindEXT)
+                              Store 56(v12) 59
+              65:          60 Load 64(gl_ObjectToWorldEXT)
+                              Store 62(v13) 65
+              68:          60 Load 67(gl_WorldToObjectEXT)
+                              Store 66(v14) 68
+              71:     16(int) Load 70(gl_GeometryIndexEXT)
+                              Store 69(v15) 71
+              77:          60 Load 76(gl_ObjectToWorld3x4EXT)
+              78:          73 Transpose 77
+                              Store 75(v16) 78
+              81:          60 Load 80(gl_WorldToObject3x4EXT)
+              82:          73 Transpose 81
+                              Store 79(v17) 82
+                              Store 84(incomingPayload) 86
+              87:     16(int) Load 18(v2)
+              90:    89(bool) IEqual 87 88
+                              SelectionMerge 92 None
+                              BranchConditional 90 91 93
+              91:               Label
+                                IgnoreIntersectionKHR
+                                Branch 92
+              93:               Label
+                                TerminateRayKHR
+                                Branch 92
+              92:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.AnyHitShader_Errors.rahit.out b/Test/baseResults/spv.ext.AnyHitShader_Errors.rahit.out
new file mode 100644
index 0000000..8c47429
--- /dev/null
+++ b/Test/baseResults/spv.ext.AnyHitShader_Errors.rahit.out
@@ -0,0 +1,8 @@
+spv.ext.AnyHitShader_Errors.rahit
+ERROR: 0:8: 'assign' :  l-value required "payload" (cannot modify hitAttributeNV in this stage)
+ERROR: 0:9: 'reportIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:10: 'traceRayEXT' : no matching overloaded function found 
+ERROR: 3 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
new file mode 100644
index 0000000..278b5c1
--- /dev/null
+++ b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
@@ -0,0 +1,194 @@
+spv.ext.ClosestHitShader.rchit
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 101
+
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint ClosestHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 9  "v0"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 13  "v1"
+                              Name 14  "gl_LaunchSizeEXT"
+                              Name 18  "v2"
+                              Name 20  "gl_PrimitiveID"
+                              Name 22  "v3"
+                              Name 23  "gl_InstanceID"
+                              Name 25  "v4"
+                              Name 26  "gl_InstanceCustomIndexEXT"
+                              Name 31  "v5"
+                              Name 33  "gl_WorldRayOriginEXT"
+                              Name 35  "v6"
+                              Name 36  "gl_WorldRayDirectionEXT"
+                              Name 38  "v7"
+                              Name 39  "gl_ObjectRayOriginEXT"
+                              Name 41  "v8"
+                              Name 42  "gl_ObjectRayDirectionEXT"
+                              Name 45  "v9"
+                              Name 47  "gl_RayTminEXT"
+                              Name 49  "v10"
+                              Name 50  "gl_RayTmaxEXT"
+                              Name 52  "v11"
+                              Name 53  "gl_HitTEXT"
+                              Name 56  "v12"
+                              Name 58  "gl_HitKindEXT"
+                              Name 62  "v13"
+                              Name 64  "gl_ObjectToWorldEXT"
+                              Name 66  "v14"
+                              Name 67  "gl_WorldToObjectEXT"
+                              Name 69  "v15"
+                              Name 70  "gl_GeometryIndexEXT"
+                              Name 75  "v16"
+                              Name 76  "gl_ObjectToWorld3x4EXT"
+                              Name 79  "v17"
+                              Name 80  "gl_WorldToObject3x4EXT"
+                              Name 85  "accEXT"
+                              Name 98  "localPayload"
+                              Name 100  "incomingPayload"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 23(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 26(gl_InstanceCustomIndexEXT) BuiltIn InstanceCustomIndexKHR
+                              Decorate 33(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR
+                              Decorate 36(gl_WorldRayDirectionEXT) BuiltIn WorldRayDirectionKHR
+                              Decorate 39(gl_ObjectRayOriginEXT) BuiltIn ObjectRayOriginKHR
+                              Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR
+                              Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR
+                              Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
+                              Decorate 53(gl_HitTEXT) BuiltIn HitTKHR
+                              Decorate 58(gl_HitKindEXT) BuiltIn HitKindKHR
+                              Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
+                              Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
+                              Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR
+                              Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR
+                              Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
+                              Decorate 85(accEXT) DescriptorSet 0
+                              Decorate 85(accEXT) Binding 0
+                              Decorate 98(localPayload) Location 0
+                              Decorate 100(incomingPayload) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+              10:             TypePointer Input 7(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+14(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              16:             TypeInt 32 1
+              17:             TypePointer Function 16(int)
+              19:             TypePointer Input 16(int)
+20(gl_PrimitiveID):     19(ptr) Variable Input
+23(gl_InstanceID):     19(ptr) Variable Input
+26(gl_InstanceCustomIndexEXT):     19(ptr) Variable Input
+              28:             TypeFloat 32
+              29:             TypeVector 28(float) 3
+              30:             TypePointer Function 29(fvec3)
+              32:             TypePointer Input 29(fvec3)
+33(gl_WorldRayOriginEXT):     32(ptr) Variable Input
+36(gl_WorldRayDirectionEXT):     32(ptr) Variable Input
+39(gl_ObjectRayOriginEXT):     32(ptr) Variable Input
+42(gl_ObjectRayDirectionEXT):     32(ptr) Variable Input
+              44:             TypePointer Function 28(float)
+              46:             TypePointer Input 28(float)
+47(gl_RayTminEXT):     46(ptr) Variable Input
+50(gl_RayTmaxEXT):     46(ptr) Variable Input
+  53(gl_HitTEXT):     46(ptr) Variable Input
+              55:             TypePointer Function 6(int)
+              57:             TypePointer Input 6(int)
+58(gl_HitKindEXT):     57(ptr) Variable Input
+              60:             TypeMatrix 29(fvec3) 4
+              61:             TypePointer Function 60
+              63:             TypePointer Input 60
+64(gl_ObjectToWorldEXT):     63(ptr) Variable Input
+67(gl_WorldToObjectEXT):     63(ptr) Variable Input
+70(gl_GeometryIndexEXT):     19(ptr) Variable Input
+              72:             TypeVector 28(float) 4
+              73:             TypeMatrix 72(fvec4) 3
+              74:             TypePointer Function 73
+76(gl_ObjectToWorld3x4EXT):     63(ptr) Variable Input
+80(gl_WorldToObject3x4EXT):     63(ptr) Variable Input
+              83:             TypeAccelerationStructureKHR
+              84:             TypePointer UniformConstant 83
+      85(accEXT):     84(ptr) Variable UniformConstant
+              87:      6(int) Constant 0
+              88:      6(int) Constant 1
+              89:      6(int) Constant 2
+              90:      6(int) Constant 3
+              91:   28(float) Constant 1056964608
+              92:   29(fvec3) ConstantComposite 91 91 91
+              93:   28(float) Constant 1065353216
+              94:   29(fvec3) ConstantComposite 93 93 93
+              95:   28(float) Constant 1061158912
+              96:     16(int) Constant 1
+              97:             TypePointer RayPayloadKHR 72(fvec4)
+98(localPayload):     97(ptr) Variable RayPayloadKHR
+              99:             TypePointer IncomingRayPayloadKHR 72(fvec4)
+100(incomingPayload):     99(ptr) Variable IncomingRayPayloadKHR
+         4(main):           2 Function None 3
+               5:             Label
+           9(v0):      8(ptr) Variable Function
+          13(v1):      8(ptr) Variable Function
+          18(v2):     17(ptr) Variable Function
+          22(v3):     17(ptr) Variable Function
+          25(v4):     17(ptr) Variable Function
+          31(v5):     30(ptr) Variable Function
+          35(v6):     30(ptr) Variable Function
+          38(v7):     30(ptr) Variable Function
+          41(v8):     30(ptr) Variable Function
+          45(v9):     44(ptr) Variable Function
+         49(v10):     44(ptr) Variable Function
+         52(v11):     44(ptr) Variable Function
+         56(v12):     55(ptr) Variable Function
+         62(v13):     61(ptr) Variable Function
+         66(v14):     61(ptr) Variable Function
+         69(v15):     17(ptr) Variable Function
+         75(v16):     74(ptr) Variable Function
+         79(v17):     74(ptr) Variable Function
+              12:    7(ivec3) Load 11(gl_LaunchIDEXT)
+                              Store 9(v0) 12
+              15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
+                              Store 13(v1) 15
+              21:     16(int) Load 20(gl_PrimitiveID)
+                              Store 18(v2) 21
+              24:     16(int) Load 23(gl_InstanceID)
+                              Store 22(v3) 24
+              27:     16(int) Load 26(gl_InstanceCustomIndexEXT)
+                              Store 25(v4) 27
+              34:   29(fvec3) Load 33(gl_WorldRayOriginEXT)
+                              Store 31(v5) 34
+              37:   29(fvec3) Load 36(gl_WorldRayDirectionEXT)
+                              Store 35(v6) 37
+              40:   29(fvec3) Load 39(gl_ObjectRayOriginEXT)
+                              Store 38(v7) 40
+              43:   29(fvec3) Load 42(gl_ObjectRayDirectionEXT)
+                              Store 41(v8) 43
+              48:   28(float) Load 47(gl_RayTminEXT)
+                              Store 45(v9) 48
+              51:   28(float) Load 50(gl_RayTmaxEXT)
+                              Store 49(v10) 51
+              54:   28(float) Load 53(gl_HitTEXT)
+                              Store 52(v11) 54
+              59:      6(int) Load 58(gl_HitKindEXT)
+                              Store 56(v12) 59
+              65:          60 Load 64(gl_ObjectToWorldEXT)
+                              Store 62(v13) 65
+              68:          60 Load 67(gl_WorldToObjectEXT)
+                              Store 66(v14) 68
+              71:     16(int) Load 70(gl_GeometryIndexEXT)
+                              Store 69(v15) 71
+              77:          60 Load 76(gl_ObjectToWorld3x4EXT)
+              78:          73 Transpose 77
+                              Store 75(v16) 78
+              81:          60 Load 80(gl_WorldToObject3x4EXT)
+              82:          73 Transpose 81
+                              Store 79(v17) 82
+              86:          83 Load 85(accEXT)
+                              TraceRayKHR 86 87 88 89 90 87 92 91 94 95 96
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.ClosestHitShader_Errors.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader_Errors.rchit.out
new file mode 100644
index 0000000..6c87d1c
--- /dev/null
+++ b/Test/baseResults/spv.ext.ClosestHitShader_Errors.rchit.out
@@ -0,0 +1,10 @@
+spv.ext.ClosestHitShader_Errors.rchit
+ERROR: 0:8: 'assign' :  l-value required "payload" (cannot modify hitAttributeNV in this stage)
+ERROR: 0:9: 'reportIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:10: 'terminateRayEXT' : no matching overloaded function found 
+ERROR: 0:11: 'ignoreIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:12: 'gl_RayFlagsSkipAABBEXT' : required extension not requested: GL_EXT_ray_flags_primitive_culling
+ERROR: 5 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.ext.IntersectShader.rint.out b/Test/baseResults/spv.ext.IntersectShader.rint.out
new file mode 100644
index 0000000..b8b8de2
--- /dev/null
+++ b/Test/baseResults/spv.ext.IntersectShader.rint.out
@@ -0,0 +1,156 @@
+spv.ext.IntersectShader.rint
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 81
+
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint IntersectionKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 56 59 65 69
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 9  "v0"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 13  "v1"
+                              Name 14  "gl_LaunchSizeEXT"
+                              Name 18  "v2"
+                              Name 20  "gl_PrimitiveID"
+                              Name 22  "v3"
+                              Name 23  "gl_InstanceID"
+                              Name 25  "v4"
+                              Name 26  "gl_InstanceCustomIndexEXT"
+                              Name 31  "v5"
+                              Name 33  "gl_WorldRayOriginEXT"
+                              Name 35  "v6"
+                              Name 36  "gl_WorldRayDirectionEXT"
+                              Name 38  "v7"
+                              Name 39  "gl_ObjectRayOriginEXT"
+                              Name 41  "v8"
+                              Name 42  "gl_ObjectRayDirectionEXT"
+                              Name 45  "v9"
+                              Name 47  "gl_RayTminEXT"
+                              Name 49  "v10"
+                              Name 50  "gl_RayTmaxEXT"
+                              Name 54  "v11"
+                              Name 56  "gl_ObjectToWorldEXT"
+                              Name 58  "v12"
+                              Name 59  "gl_WorldToObjectEXT"
+                              Name 64  "v13"
+                              Name 65  "gl_ObjectToWorld3x4EXT"
+                              Name 68  "v14"
+                              Name 69  "gl_WorldToObject3x4EXT"
+                              Name 73  "iAttr"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 23(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 26(gl_InstanceCustomIndexEXT) BuiltIn InstanceCustomIndexKHR
+                              Decorate 33(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR
+                              Decorate 36(gl_WorldRayDirectionEXT) BuiltIn WorldRayDirectionKHR
+                              Decorate 39(gl_ObjectRayOriginEXT) BuiltIn ObjectRayOriginKHR
+                              Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR
+                              Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR
+                              Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
+                              Decorate 56(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
+                              Decorate 59(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
+                              Decorate 65(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR
+                              Decorate 69(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+              10:             TypePointer Input 7(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+14(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              16:             TypeInt 32 1
+              17:             TypePointer Function 16(int)
+              19:             TypePointer Input 16(int)
+20(gl_PrimitiveID):     19(ptr) Variable Input
+23(gl_InstanceID):     19(ptr) Variable Input
+26(gl_InstanceCustomIndexEXT):     19(ptr) Variable Input
+              28:             TypeFloat 32
+              29:             TypeVector 28(float) 3
+              30:             TypePointer Function 29(fvec3)
+              32:             TypePointer Input 29(fvec3)
+33(gl_WorldRayOriginEXT):     32(ptr) Variable Input
+36(gl_WorldRayDirectionEXT):     32(ptr) Variable Input
+39(gl_ObjectRayOriginEXT):     32(ptr) Variable Input
+42(gl_ObjectRayDirectionEXT):     32(ptr) Variable Input
+              44:             TypePointer Function 28(float)
+              46:             TypePointer Input 28(float)
+47(gl_RayTminEXT):     46(ptr) Variable Input
+50(gl_RayTmaxEXT):     46(ptr) Variable Input
+              52:             TypeMatrix 29(fvec3) 4
+              53:             TypePointer Function 52
+              55:             TypePointer Input 52
+56(gl_ObjectToWorldEXT):     55(ptr) Variable Input
+59(gl_WorldToObjectEXT):     55(ptr) Variable Input
+              61:             TypeVector 28(float) 4
+              62:             TypeMatrix 61(fvec4) 3
+              63:             TypePointer Function 62
+65(gl_ObjectToWorld3x4EXT):     55(ptr) Variable Input
+69(gl_WorldToObject3x4EXT):     55(ptr) Variable Input
+              72:             TypePointer HitAttributeKHR 61(fvec4)
+       73(iAttr):     72(ptr) Variable HitAttributeKHR
+              74:   28(float) Constant 1056964608
+              75:   28(float) Constant 0
+              76:   28(float) Constant 1065353216
+              77:   61(fvec4) ConstantComposite 74 74 75 76
+              78:      6(int) Constant 1
+              79:             TypeBool
+         4(main):           2 Function None 3
+               5:             Label
+           9(v0):      8(ptr) Variable Function
+          13(v1):      8(ptr) Variable Function
+          18(v2):     17(ptr) Variable Function
+          22(v3):     17(ptr) Variable Function
+          25(v4):     17(ptr) Variable Function
+          31(v5):     30(ptr) Variable Function
+          35(v6):     30(ptr) Variable Function
+          38(v7):     30(ptr) Variable Function
+          41(v8):     30(ptr) Variable Function
+          45(v9):     44(ptr) Variable Function
+         49(v10):     44(ptr) Variable Function
+         54(v11):     53(ptr) Variable Function
+         58(v12):     53(ptr) Variable Function
+         64(v13):     63(ptr) Variable Function
+         68(v14):     63(ptr) Variable Function
+              12:    7(ivec3) Load 11(gl_LaunchIDEXT)
+                              Store 9(v0) 12
+              15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
+                              Store 13(v1) 15
+              21:     16(int) Load 20(gl_PrimitiveID)
+                              Store 18(v2) 21
+              24:     16(int) Load 23(gl_InstanceID)
+                              Store 22(v3) 24
+              27:     16(int) Load 26(gl_InstanceCustomIndexEXT)
+                              Store 25(v4) 27
+              34:   29(fvec3) Load 33(gl_WorldRayOriginEXT)
+                              Store 31(v5) 34
+              37:   29(fvec3) Load 36(gl_WorldRayDirectionEXT)
+                              Store 35(v6) 37
+              40:   29(fvec3) Load 39(gl_ObjectRayOriginEXT)
+                              Store 38(v7) 40
+              43:   29(fvec3) Load 42(gl_ObjectRayDirectionEXT)
+                              Store 41(v8) 43
+              48:   28(float) Load 47(gl_RayTminEXT)
+                              Store 45(v9) 48
+              51:   28(float) Load 50(gl_RayTmaxEXT)
+                              Store 49(v10) 51
+              57:          52 Load 56(gl_ObjectToWorldEXT)
+                              Store 54(v11) 57
+              60:          52 Load 59(gl_WorldToObjectEXT)
+                              Store 58(v12) 60
+              66:          52 Load 65(gl_ObjectToWorld3x4EXT)
+              67:          62 Transpose 66
+                              Store 64(v13) 67
+              70:          52 Load 69(gl_WorldToObject3x4EXT)
+              71:          62 Transpose 70
+                              Store 68(v14) 71
+                              Store 73(iAttr) 77
+              80:    79(bool) ReportIntersectionKHR 74 78
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.IntersectShader_Errors.rint.out b/Test/baseResults/spv.ext.IntersectShader_Errors.rint.out
new file mode 100644
index 0000000..03f9b27
--- /dev/null
+++ b/Test/baseResults/spv.ext.IntersectShader_Errors.rint.out
@@ -0,0 +1,10 @@
+spv.ext.IntersectShader_Errors.rint
+ERROR: 0:3: 'rayPayloadInEXT' : not supported in this stage: intersection
+ERROR: 0:4: 'rayPayloadEXT' : not supported in this stage: intersection
+ERROR: 0:8: 'gl_HitTEXT' : undeclared identifier 
+ERROR: 0:9: 'gl_HitKindEXT' : undeclared identifier 
+ERROR: 0:10: 'traceRayEXT' : no matching overloaded function found 
+ERROR: 5 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.ext.MissShader.rmiss.out b/Test/baseResults/spv.ext.MissShader.rmiss.out
new file mode 100644
index 0000000..dd3f15f
--- /dev/null
+++ b/Test/baseResults/spv.ext.MissShader.rmiss.out
@@ -0,0 +1,99 @@
+spv.ext.MissShader.rmiss
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 54
+
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MissKHR 4  "main" 11 14 21 24 29 32
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 9  "v0"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 13  "v1"
+                              Name 14  "gl_LaunchSizeEXT"
+                              Name 19  "v2"
+                              Name 21  "gl_WorldRayOriginEXT"
+                              Name 23  "v3"
+                              Name 24  "gl_WorldRayDirectionEXT"
+                              Name 27  "v4"
+                              Name 29  "gl_RayTminEXT"
+                              Name 31  "v5"
+                              Name 32  "gl_RayTmaxEXT"
+                              Name 36  "accEXT"
+                              Name 51  "localPayload"
+                              Name 53  "incomingPayload"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 21(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR
+                              Decorate 24(gl_WorldRayDirectionEXT) BuiltIn WorldRayDirectionKHR
+                              Decorate 29(gl_RayTminEXT) BuiltIn RayTminKHR
+                              Decorate 32(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
+                              Decorate 36(accEXT) DescriptorSet 0
+                              Decorate 36(accEXT) Binding 0
+                              Decorate 51(localPayload) Location 0
+                              Decorate 53(incomingPayload) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+              10:             TypePointer Input 7(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+14(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              16:             TypeFloat 32
+              17:             TypeVector 16(float) 3
+              18:             TypePointer Function 17(fvec3)
+              20:             TypePointer Input 17(fvec3)
+21(gl_WorldRayOriginEXT):     20(ptr) Variable Input
+24(gl_WorldRayDirectionEXT):     20(ptr) Variable Input
+              26:             TypePointer Function 16(float)
+              28:             TypePointer Input 16(float)
+29(gl_RayTminEXT):     28(ptr) Variable Input
+32(gl_RayTmaxEXT):     28(ptr) Variable Input
+              34:             TypeAccelerationStructureKHR
+              35:             TypePointer UniformConstant 34
+      36(accEXT):     35(ptr) Variable UniformConstant
+              38:      6(int) Constant 0
+              39:      6(int) Constant 1
+              40:      6(int) Constant 2
+              41:      6(int) Constant 3
+              42:   16(float) Constant 1056964608
+              43:   17(fvec3) ConstantComposite 42 42 42
+              44:   16(float) Constant 1065353216
+              45:   17(fvec3) ConstantComposite 44 44 44
+              46:   16(float) Constant 1061158912
+              47:             TypeInt 32 1
+              48:     47(int) Constant 1
+              49:             TypeVector 16(float) 4
+              50:             TypePointer RayPayloadKHR 49(fvec4)
+51(localPayload):     50(ptr) Variable RayPayloadKHR
+              52:             TypePointer IncomingRayPayloadKHR 49(fvec4)
+53(incomingPayload):     52(ptr) Variable IncomingRayPayloadKHR
+         4(main):           2 Function None 3
+               5:             Label
+           9(v0):      8(ptr) Variable Function
+          13(v1):      8(ptr) Variable Function
+          19(v2):     18(ptr) Variable Function
+          23(v3):     18(ptr) Variable Function
+          27(v4):     26(ptr) Variable Function
+          31(v5):     26(ptr) Variable Function
+              12:    7(ivec3) Load 11(gl_LaunchIDEXT)
+                              Store 9(v0) 12
+              15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
+                              Store 13(v1) 15
+              22:   17(fvec3) Load 21(gl_WorldRayOriginEXT)
+                              Store 19(v2) 22
+              25:   17(fvec3) Load 24(gl_WorldRayDirectionEXT)
+                              Store 23(v3) 25
+              30:   16(float) Load 29(gl_RayTminEXT)
+                              Store 27(v4) 30
+              33:   16(float) Load 32(gl_RayTmaxEXT)
+                              Store 31(v5) 33
+              37:          34 Load 36(accEXT)
+                              TraceRayKHR 37 38 39 40 41 38 43 42 45 46 48
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.MissShader_Errors.rmiss.out b/Test/baseResults/spv.ext.MissShader_Errors.rmiss.out
new file mode 100644
index 0000000..929a2a7
--- /dev/null
+++ b/Test/baseResults/spv.ext.MissShader_Errors.rmiss.out
@@ -0,0 +1,21 @@
+spv.ext.MissShader_Errors.rmiss
+ERROR: 0:3: 'hitAttributeEXT' : not supported in this stage: miss
+ERROR: 0:6: 'gl_PrimitiveID' : undeclared identifier 
+ERROR: 0:6: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:7: 'gl_InstanceID' : undeclared identifier (Did you mean gl_InstanceIndex?)
+ERROR: 0:7: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:8: 'gl_InstanceCustomIndexEXT' : undeclared identifier 
+ERROR: 0:8: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:9: 'gl_ObjectToWorldEXT' : undeclared identifier 
+ERROR: 0:9: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:10: 'gl_WorldToObjectEXT' : undeclared identifier 
+ERROR: 0:10: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:11: 'gl_HitTEXT' : undeclared identifier 
+ERROR: 0:12: 'gl_HitKindEXT' : undeclared identifier 
+ERROR: 0:13: 'reportIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:14: 'ignoreIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:15: 'terminateRayEXT' : no matching overloaded function found 
+ERROR: 16 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.ext.RayCallable.rcall.out b/Test/baseResults/spv.ext.RayCallable.rcall.out
new file mode 100644
index 0000000..ac3b2b5
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayCallable.rcall.out
@@ -0,0 +1,60 @@
+spv.ext.RayCallable.rcall
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 30
+
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint CallableKHR 4  "main" 11 14
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 9  "id"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 13  "size"
+                              Name 14  "gl_LaunchSizeEXT"
+                              Name 16  "dataBlock"
+                              MemberName 16(dataBlock) 0  "data1"
+                              Name 18  ""
+                              Name 29  "data0"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 16(dataBlock) Block
+                              Decorate 18 Location 1
+                              Decorate 29(data0) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+              10:             TypePointer Input 7(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+14(gl_LaunchSizeEXT):     10(ptr) Variable Input
+   16(dataBlock):             TypeStruct 6(int)
+              17:             TypePointer IncomingCallableDataKHR 16(dataBlock)
+              18:     17(ptr) Variable IncomingCallableDataKHR
+              19:             TypeInt 32 1
+              20:     19(int) Constant 0
+              21:      6(int) Constant 256
+              22:             TypePointer IncomingCallableDataKHR 6(int)
+              24:      6(int) Constant 2
+              25:     19(int) Constant 1
+              26:             TypeFloat 32
+              27:             TypeVector 26(float) 4
+              28:             TypePointer CallableDataKHR 27(fvec4)
+       29(data0):     28(ptr) Variable CallableDataKHR
+         4(main):           2 Function None 3
+               5:             Label
+           9(id):      8(ptr) Variable Function
+        13(size):      8(ptr) Variable Function
+              12:    7(ivec3) Load 11(gl_LaunchIDEXT)
+                              Store 9(id) 12
+              15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
+                              Store 13(size) 15
+              23:     22(ptr) AccessChain 18 20
+                              Store 23 21
+                              ExecuteCallableKHR 24 25
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayCallable_Errors.rcall.out b/Test/baseResults/spv.ext.RayCallable_Errors.rcall.out
new file mode 100644
index 0000000..4699342
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayCallable_Errors.rcall.out
@@ -0,0 +1,35 @@
+spv.ext.RayCallable_Errors.rcall
+ERROR: 0:3: 'hitAttributeEXT' : not supported in this stage: callable
+ERROR: 0:4: 'rayPayloadEXT' : not supported in this stage: callable
+ERROR: 0:5: 'rayPayloadInEXT' : not supported in this stage: callable
+ERROR: 0:9: 'gl_PrimitiveID' : undeclared identifier 
+ERROR: 0:9: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:10: 'gl_InstanceID' : undeclared identifier (Did you mean gl_InstanceIndex?)
+ERROR: 0:10: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:11: 'gl_InstanceCustomIndexEXT' : undeclared identifier 
+ERROR: 0:11: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:12: 'gl_WorldRayOriginEXT' : undeclared identifier 
+ERROR: 0:12: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:13: 'gl_WorldRayDirectionEXT' : undeclared identifier 
+ERROR: 0:13: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:14: 'gl_ObjectRayOriginEXT' : undeclared identifier 
+ERROR: 0:14: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:15: 'gl_ObjectRayDirectionEXT' : undeclared identifier 
+ERROR: 0:15: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:16: 'gl_RayTminEXT' : undeclared identifier 
+ERROR: 0:17: 'gl_RayTmaxEXT' : undeclared identifier 
+ERROR: 0:18: 'gl_ObjectToWorldEXT' : undeclared identifier 
+ERROR: 0:18: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:19: 'gl_WorldToObjectEXT' : undeclared identifier 
+ERROR: 0:19: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:20: 'gl_HitTEXT' : undeclared identifier 
+ERROR: 0:21: 'gl_HitKindEXT' : undeclared identifier 
+ERROR: 0:22: 'gl_IncomingRayFlagsEXT' : undeclared identifier 
+ERROR: 0:22: '=' :  cannot convert from ' temp float' to ' temp highp uint'
+ERROR: 0:23: 'reportIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:24: 'ignoreIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:25: 'terminateRayEXT' : no matching overloaded function found 
+ERROR: 30 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.ext.RayConstants.rgen.out b/Test/baseResults/spv.ext.RayConstants.rgen.out
new file mode 100644
index 0000000..5903ec9
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayConstants.rgen.out
@@ -0,0 +1,46 @@
+spv.ext.RayConstants.rgen
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 27
+
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main"
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "accEXT"
+                              Name 26  "payload"
+                              Decorate 8(accEXT) DescriptorSet 0
+                              Decorate 8(accEXT) Binding 0
+                              Decorate 26(payload) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeAccelerationStructureKHR
+               7:             TypePointer UniformConstant 6
+       8(accEXT):      7(ptr) Variable UniformConstant
+              10:             TypeInt 32 0
+              11:     10(int) Constant 255
+              12:     10(int) Constant 0
+              13:     10(int) Constant 1
+              14:             TypeFloat 32
+              15:             TypeVector 14(float) 3
+              16:   14(float) Constant 0
+              17:   15(fvec3) ConstantComposite 16 16 16
+              18:   14(float) Constant 1056964608
+              19:   14(float) Constant 1065353216
+              20:   15(fvec3) ConstantComposite 19 19 19
+              21:   14(float) Constant 1061158912
+              22:             TypeInt 32 1
+              23:     22(int) Constant 1
+              24:             TypeVector 14(float) 4
+              25:             TypePointer RayPayloadKHR 24(fvec4)
+     26(payload):     25(ptr) Variable RayPayloadKHR
+         4(main):           2 Function None 3
+               5:             Label
+               9:           6 Load 8(accEXT)
+                              TraceRayKHR 9 11 12 13 13 12 17 18 20 21 23
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayGenShader.rgen.out b/Test/baseResults/spv.ext.RayGenShader.rgen.out
new file mode 100644
index 0000000..da16fa4
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayGenShader.rgen.out
@@ -0,0 +1,104 @@
+spv.ext.RayGenShader.rgen
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 58
+
+                              Capability RayTraversalPrimitiveCullingProvisionalKHR
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main" 11 21
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_flags_primitive_culling"
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "lx"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 16  "ly"
+                              Name 20  "sx"
+                              Name 21  "gl_LaunchSizeEXT"
+                              Name 24  "sy"
+                              Name 29  "accEXT0"
+                              Name 38  "block"
+                              MemberName 38(block) 0  "dir"
+                              MemberName 38(block) 1  "origin"
+                              Name 40  ""
+                              Name 51  "accEXT1"
+                              Name 54  "imageu"
+                              Name 57  "payload"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 29(accEXT0) DescriptorSet 0
+                              Decorate 29(accEXT0) Binding 0
+                              MemberDecorate 38(block) 0 Offset 0
+                              MemberDecorate 38(block) 1 Offset 16
+                              Decorate 38(block) BufferBlock
+                              Decorate 51(accEXT1) DescriptorSet 0
+                              Decorate 51(accEXT1) Binding 1
+                              Decorate 54(imageu) DescriptorSet 0
+                              Decorate 54(imageu) Binding 2
+                              Decorate 57(payload) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              17:      6(int) Constant 1
+21(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              27:             TypeAccelerationStructureKHR
+              28:             TypePointer UniformConstant 27
+     29(accEXT0):     28(ptr) Variable UniformConstant
+              35:      6(int) Constant 768
+              36:             TypeFloat 32
+              37:             TypeVector 36(float) 3
+       38(block):             TypeStruct 37(fvec3) 37(fvec3)
+              39:             TypePointer ShaderRecordBufferKHR 38(block)
+              40:     39(ptr) Variable ShaderRecordBufferKHR
+              41:             TypeInt 32 1
+              42:     41(int) Constant 1
+              43:             TypePointer ShaderRecordBufferKHR 37(fvec3)
+              46:   36(float) Constant 1056964608
+              47:     41(int) Constant 0
+              50:   36(float) Constant 1061158912
+     51(accEXT1):     28(ptr) Variable UniformConstant
+              52:             TypeImage 6(int) 2D nonsampled format:R32ui
+              53:             TypePointer UniformConstant 52
+      54(imageu):     53(ptr) Variable UniformConstant
+              55:             TypeVector 36(float) 4
+              56:             TypePointer RayPayloadKHR 55(fvec4)
+     57(payload):     56(ptr) Variable RayPayloadKHR
+         4(main):           2 Function None 3
+               5:             Label
+           8(lx):      7(ptr) Variable Function
+          16(ly):      7(ptr) Variable Function
+          20(sx):      7(ptr) Variable Function
+          24(sy):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 12
+              15:      6(int) Load 14
+                              Store 8(lx) 15
+              18:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 17
+              19:      6(int) Load 18
+                              Store 16(ly) 19
+              22:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 12
+              23:      6(int) Load 22
+                              Store 20(sx) 23
+              25:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 17
+              26:      6(int) Load 25
+                              Store 24(sy) 26
+              30:          27 Load 29(accEXT0)
+              31:      6(int) Load 8(lx)
+              32:      6(int) Load 16(ly)
+              33:      6(int) Load 20(sx)
+              34:      6(int) Load 24(sy)
+              44:     43(ptr) AccessChain 40 42
+              45:   37(fvec3) Load 44
+              48:     43(ptr) AccessChain 40 47
+              49:   37(fvec3) Load 48
+                              TraceRayKHR 30 31 32 33 34 35 45 46 49 50 42
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayGenShader11.rgen.out b/Test/baseResults/spv.ext.RayGenShader11.rgen.out
new file mode 100644
index 0000000..30ed902
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayGenShader11.rgen.out
@@ -0,0 +1,91 @@
+spv.ext.RayGenShader11.rgen
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 53
+
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main" 11 21
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "lx"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 16  "ly"
+                              Name 20  "sx"
+                              Name 21  "gl_LaunchSizeEXT"
+                              Name 24  "sy"
+                              Name 29  "accEXT"
+                              Name 37  "block"
+                              MemberName 37(block) 0  "dir"
+                              MemberName 37(block) 1  "origin"
+                              Name 39  ""
+                              Name 52  "payload"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 29(accEXT) DescriptorSet 0
+                              Decorate 29(accEXT) Binding 0
+                              MemberDecorate 37(block) 0 Offset 0
+                              MemberDecorate 37(block) 1 Offset 16
+                              Decorate 37(block) BufferBlock
+                              Decorate 52(payload) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              17:      6(int) Constant 1
+21(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              27:             TypeAccelerationStructureKHR
+              28:             TypePointer UniformConstant 27
+      29(accEXT):     28(ptr) Variable UniformConstant
+              35:             TypeFloat 32
+              36:             TypeVector 35(float) 3
+       37(block):             TypeStruct 36(fvec3) 36(fvec3)
+              38:             TypePointer ShaderRecordBufferKHR 37(block)
+              39:     38(ptr) Variable ShaderRecordBufferKHR
+              40:             TypeInt 32 1
+              41:     40(int) Constant 1
+              42:             TypePointer ShaderRecordBufferKHR 36(fvec3)
+              45:   35(float) Constant 1056964608
+              46:     40(int) Constant 0
+              49:   35(float) Constant 1061158912
+              50:             TypeVector 35(float) 4
+              51:             TypePointer RayPayloadKHR 50(fvec4)
+     52(payload):     51(ptr) Variable RayPayloadKHR
+         4(main):           2 Function None 3
+               5:             Label
+           8(lx):      7(ptr) Variable Function
+          16(ly):      7(ptr) Variable Function
+          20(sx):      7(ptr) Variable Function
+          24(sy):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 12
+              15:      6(int) Load 14
+                              Store 8(lx) 15
+              18:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 17
+              19:      6(int) Load 18
+                              Store 16(ly) 19
+              22:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 12
+              23:      6(int) Load 22
+                              Store 20(sx) 23
+              25:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 17
+              26:      6(int) Load 25
+                              Store 24(sy) 26
+              30:          27 Load 29(accEXT)
+              31:      6(int) Load 8(lx)
+              32:      6(int) Load 16(ly)
+              33:      6(int) Load 20(sx)
+              34:      6(int) Load 24(sy)
+              43:     42(ptr) AccessChain 39 41
+              44:   36(fvec3) Load 43
+              47:     42(ptr) AccessChain 39 46
+              48:   36(fvec3) Load 47
+                              TraceRayKHR 30 31 32 33 34 12 44 45 48 49 41
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
new file mode 100644
index 0000000..3962bcb
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
@@ -0,0 +1,141 @@
+spv.ext.RayGenShaderArray.rgen
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 89
+
+                              Capability ShaderNonUniformEXT
+                              Capability RuntimeDescriptorArrayEXT
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_EXT_descriptor_indexing"
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main" 11 21
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_nonuniform_qualifier"
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "lx"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 16  "ly"
+                              Name 20  "sx"
+                              Name 21  "gl_LaunchSizeEXT"
+                              Name 24  "sy"
+                              Name 30  "accEXT0"
+                              Name 34  "block"
+                              MemberName 34(block) 0  "dir"
+                              MemberName 34(block) 1  "origin"
+                              MemberName 34(block) 2  "i"
+                              Name 36  ""
+                              Name 60  "accEXT1"
+                              Name 88  "payload"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 30(accEXT0) DescriptorSet 0
+                              Decorate 30(accEXT0) Binding 0
+                              MemberDecorate 34(block) 0 Offset 0
+                              MemberDecorate 34(block) 1 Offset 16
+                              MemberDecorate 34(block) 2 Offset 28
+                              Decorate 34(block) BufferBlock
+                              Decorate 60(accEXT1) DescriptorSet 0
+                              Decorate 60(accEXT1) Binding 1
+                              Decorate 75 DecorationNonUniformEXT
+                              Decorate 76 DecorationNonUniformEXT
+                              Decorate 77 DecorationNonUniformEXT
+                              Decorate 88(payload) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              17:      6(int) Constant 1
+21(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              27:             TypeAccelerationStructureKHR
+              28:             TypeRuntimeArray 27
+              29:             TypePointer UniformConstant 28
+     30(accEXT0):     29(ptr) Variable UniformConstant
+              31:             TypeFloat 32
+              32:             TypeVector 31(float) 3
+              33:             TypeInt 32 1
+       34(block):             TypeStruct 32(fvec3) 32(fvec3) 33(int)
+              35:             TypePointer ShaderRecordBufferKHR 34(block)
+              36:     35(ptr) Variable ShaderRecordBufferKHR
+              37:     33(int) Constant 2
+              38:             TypePointer ShaderRecordBufferKHR 33(int)
+              41:             TypePointer UniformConstant 27
+              48:     33(int) Constant 1
+              49:             TypePointer ShaderRecordBufferKHR 32(fvec3)
+              52:   31(float) Constant 1056964608
+              53:     33(int) Constant 0
+              56:   31(float) Constant 1061158912
+              57:      6(int) Constant 2
+              58:             TypeArray 27 57
+              59:             TypePointer UniformConstant 58
+     60(accEXT1):     59(ptr) Variable UniformConstant
+              86:             TypeVector 31(float) 4
+              87:             TypePointer RayPayloadKHR 86(fvec4)
+     88(payload):     87(ptr) Variable RayPayloadKHR
+         4(main):           2 Function None 3
+               5:             Label
+           8(lx):      7(ptr) Variable Function
+          16(ly):      7(ptr) Variable Function
+          20(sx):      7(ptr) Variable Function
+          24(sy):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 12
+              15:      6(int) Load 14
+                              Store 8(lx) 15
+              18:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 17
+              19:      6(int) Load 18
+                              Store 16(ly) 19
+              22:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 12
+              23:      6(int) Load 22
+                              Store 20(sx) 23
+              25:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 17
+              26:      6(int) Load 25
+                              Store 24(sy) 26
+              39:     38(ptr) AccessChain 36 37
+              40:     33(int) Load 39
+              42:     41(ptr) AccessChain 30(accEXT0) 40
+              43:          27 Load 42
+              44:      6(int) Load 8(lx)
+              45:      6(int) Load 16(ly)
+              46:      6(int) Load 20(sx)
+              47:      6(int) Load 24(sy)
+              50:     49(ptr) AccessChain 36 48
+              51:   32(fvec3) Load 50
+              54:     49(ptr) AccessChain 36 53
+              55:   32(fvec3) Load 54
+                              TraceRayKHR 43 44 45 46 47 12 51 52 55 56 48
+              61:     38(ptr) AccessChain 36 37
+              62:     33(int) Load 61
+              63:     41(ptr) AccessChain 60(accEXT1) 62
+              64:          27 Load 63
+              65:      6(int) Load 8(lx)
+              66:      6(int) Load 16(ly)
+              67:      6(int) Load 20(sx)
+              68:      6(int) Load 24(sy)
+              69:     49(ptr) AccessChain 36 48
+              70:   32(fvec3) Load 69
+              71:     49(ptr) AccessChain 36 53
+              72:   32(fvec3) Load 71
+                              TraceRayKHR 64 65 66 67 68 12 70 52 72 56 48
+              73:     38(ptr) AccessChain 36 37
+              74:     33(int) Load 73
+              75:     33(int) CopyObject 74
+              76:     41(ptr) AccessChain 30(accEXT0) 75
+              77:          27 Load 76
+              78:      6(int) Load 8(lx)
+              79:      6(int) Load 16(ly)
+              80:      6(int) Load 20(sx)
+              81:      6(int) Load 24(sy)
+              82:     49(ptr) AccessChain 36 48
+              83:   32(fvec3) Load 82
+              84:     49(ptr) AccessChain 36 53
+              85:   32(fvec3) Load 84
+                              TraceRayKHR 77 78 79 80 81 12 83 52 85 56 48
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayGenShader_Errors.rgen.out b/Test/baseResults/spv.ext.RayGenShader_Errors.rgen.out
new file mode 100644
index 0000000..6dc7480
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayGenShader_Errors.rgen.out
@@ -0,0 +1,40 @@
+spv.ext.RayGenShader_Errors.rgen
+ERROR: 0:3: 'hitAttributeEXT' : not supported in this stage: ray-generation
+ERROR: 0:4: 'rayPayloadInEXT' : not supported in this stage: ray-generation
+ERROR: 0:5: 'shaderRecordNV' : can only be used with a buffer 
+ERROR: 0:9: 'binding' : cannot be used with shaderRecordNV 
+ERROR: 0:12: 'set' : cannot be used with shaderRecordNV 
+ERROR: 0:23: 'accelerationStructureNV' : accelerationStructureNV can only be used in uniform variables or function parameters: a
+ERROR: 0:23: '=' :  cannot convert from ' const int' to ' temp accelerationStructureNV'
+ERROR: 0:24: 'gl_PrimitiveID' : undeclared identifier 
+ERROR: 0:24: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:25: 'gl_InstanceID' : undeclared identifier (Did you mean gl_InstanceIndex?)
+ERROR: 0:25: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:26: 'gl_InstanceCustomIndexEXT' : undeclared identifier 
+ERROR: 0:26: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:27: 'gl_WorldRayOriginEXT' : undeclared identifier 
+ERROR: 0:27: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:28: 'gl_WorldRayDirectionEXT' : undeclared identifier 
+ERROR: 0:28: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:29: 'gl_ObjectRayOriginEXT' : undeclared identifier 
+ERROR: 0:29: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:30: 'gl_ObjectRayDirectionEXT' : undeclared identifier 
+ERROR: 0:30: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:31: 'gl_RayTminEXT' : undeclared identifier 
+ERROR: 0:32: 'gl_RayTmaxEXT' : undeclared identifier 
+ERROR: 0:33: 'gl_ObjectToWorldEXT' : undeclared identifier 
+ERROR: 0:33: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:34: 'gl_WorldToObjectEXT' : undeclared identifier 
+ERROR: 0:34: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:35: 'gl_HitTEXT' : undeclared identifier 
+ERROR: 0:36: 'gl_HitKindEXT' : undeclared identifier 
+ERROR: 0:37: 'reportIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:38: 'ignoreIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:39: 'terminateRayEXT' : no matching overloaded function found 
+ERROR: 0:40: 'assign' :  l-value required "anon@3" (can't modify a shaderrecordnv qualified buffer)
+ERROR: 33 compilation errors.  No code generated.
+
+
+ERROR: Linking ray-generation stage: Only one shaderRecordNV buffer block is allowed per stage
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.extPostDepthCoverage.frag.out b/Test/baseResults/spv.extPostDepthCoverage.frag.out
index 85a2359..28d207b 100644
--- a/Test/baseResults/spv.extPostDepthCoverage.frag.out
+++ b/Test/baseResults/spv.extPostDepthCoverage.frag.out
@@ -1,6 +1,6 @@
 spv.extPostDepthCoverage.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 6
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float16.frag.out b/Test/baseResults/spv.float16.frag.out
index 1f955c2..ca1bca1 100644
--- a/Test/baseResults/spv.float16.frag.out
+++ b/Test/baseResults/spv.float16.frag.out
@@ -1,7 +1,7 @@
 spv.float16.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 534
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float16Fetch.frag.out b/Test/baseResults/spv.float16Fetch.frag.out
index 45c80fe..92ff631 100644
--- a/Test/baseResults/spv.float16Fetch.frag.out
+++ b/Test/baseResults/spv.float16Fetch.frag.out
@@ -1,7 +1,7 @@
 spv.float16Fetch.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 5923
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float16convertonlyarith.comp.out b/Test/baseResults/spv.float16convertonlyarith.comp.out
new file mode 100644
index 0000000..5c8c292
--- /dev/null
+++ b/Test/baseResults/spv.float16convertonlyarith.comp.out
@@ -0,0 +1,39 @@
+spv.float16convertonlyarith.comp
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 22
+
+                              Capability Shader
+                              Capability Float16
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 16 16 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              Name 4  "main"
+                              Name 9  "v"
+                              Decorate 21 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:    6(float) Constant 0
+              11:    7(fvec4) ConstantComposite 10 10 10 10
+              13:             TypeFloat 16
+              14:             TypeVector 13(float16_t) 4
+              17:             TypeInt 32 0
+              18:             TypeVector 17(int) 3
+              19:     17(int) Constant 16
+              20:     17(int) Constant 1
+              21:   18(ivec3) ConstantComposite 19 19 20
+         4(main):           2 Function None 3
+               5:             Label
+            9(v):      8(ptr) Variable Function
+                              Store 9(v) 11
+              12:    7(fvec4) Load 9(v)
+              15: 14(f16vec4) FConvert 12
+              16:    7(fvec4) FConvert 15
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.float16convertonlystorage.comp.out b/Test/baseResults/spv.float16convertonlystorage.comp.out
new file mode 100644
index 0000000..b37bb6b
--- /dev/null
+++ b/Test/baseResults/spv.float16convertonlystorage.comp.out
@@ -0,0 +1,39 @@
+spv.float16convertonlystorage.comp
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 22
+
+                              Capability Shader
+                              Capability Float16
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 16 16 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_16bit_storage"
+                              Name 4  "main"
+                              Name 9  "v"
+                              Decorate 21 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:    6(float) Constant 0
+              11:    7(fvec4) ConstantComposite 10 10 10 10
+              13:             TypeFloat 16
+              14:             TypeVector 13(float16_t) 4
+              17:             TypeInt 32 0
+              18:             TypeVector 17(int) 3
+              19:     17(int) Constant 16
+              20:     17(int) Constant 1
+              21:   18(ivec3) ConstantComposite 19 19 20
+         4(main):           2 Function None 3
+               5:             Label
+            9(v):      8(ptr) Variable Function
+                              Store 9(v) 11
+              12:    7(fvec4) Load 9(v)
+              15: 14(f16vec4) FConvert 12
+              16:    7(fvec4) FConvert 15
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.float32.frag.out b/Test/baseResults/spv.float32.frag.out
index f1b0d02..db413c4 100644
--- a/Test/baseResults/spv.float32.frag.out
+++ b/Test/baseResults/spv.float32.frag.out
@@ -1,6 +1,6 @@
 spv.float32.frag
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 533
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float64.frag.out b/Test/baseResults/spv.float64.frag.out
index 231f070..b98c870 100644
--- a/Test/baseResults/spv.float64.frag.out
+++ b/Test/baseResults/spv.float64.frag.out
@@ -1,7 +1,7 @@
 spv.float64.frag
 Validation failed
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 524
 
                               Capability Shader
diff --git a/Test/baseResults/spv.flowControl.frag.out b/Test/baseResults/spv.flowControl.frag.out
index 30c2a4b..fc68306 100644
--- a/Test/baseResults/spv.flowControl.frag.out
+++ b/Test/baseResults/spv.flowControl.frag.out
@@ -1,6 +1,6 @@
 spv.flowControl.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-complex-condition.vert.out b/Test/baseResults/spv.for-complex-condition.vert.out
index 41275a4..78252ee 100644
--- a/Test/baseResults/spv.for-complex-condition.vert.out
+++ b/Test/baseResults/spv.for-complex-condition.vert.out
@@ -1,6 +1,6 @@
 spv.for-complex-condition.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-continue-break.vert.out b/Test/baseResults/spv.for-continue-break.vert.out
index ff94a93..50c034e 100644
--- a/Test/baseResults/spv.for-continue-break.vert.out
+++ b/Test/baseResults/spv.for-continue-break.vert.out
@@ -1,6 +1,6 @@
 spv.for-continue-break.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 45
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-nobody.vert.out b/Test/baseResults/spv.for-nobody.vert.out
index 2a3bcf4..26844c2 100644
--- a/Test/baseResults/spv.for-nobody.vert.out
+++ b/Test/baseResults/spv.for-nobody.vert.out
@@ -1,6 +1,6 @@
 spv.for-nobody.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-notest.vert.out b/Test/baseResults/spv.for-notest.vert.out
index 36c4a96..ff85cb4 100644
--- a/Test/baseResults/spv.for-notest.vert.out
+++ b/Test/baseResults/spv.for-notest.vert.out
@@ -1,6 +1,6 @@
 spv.for-notest.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
@@ -38,5 +38,5 @@
                               Store 8(i) 19
                               Branch 10
               12:             Label
-                              Return
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/spv.for-simple.vert.out b/Test/baseResults/spv.for-simple.vert.out
index ecb539f..a3e5d86 100644
--- a/Test/baseResults/spv.for-simple.vert.out
+++ b/Test/baseResults/spv.for-simple.vert.out
@@ -1,6 +1,6 @@
 spv.for-simple.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.forLoop.frag.out b/Test/baseResults/spv.forLoop.frag.out
index a07921c..b4b0f5d 100644
--- a/Test/baseResults/spv.forLoop.frag.out
+++ b/Test/baseResults/spv.forLoop.frag.out
@@ -1,6 +1,6 @@
 spv.forLoop.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 131
 
                               Capability Shader
diff --git a/Test/baseResults/spv.forwardFun.frag.out b/Test/baseResults/spv.forwardFun.frag.out
index 32875b2..26140af 100644
--- a/Test/baseResults/spv.forwardFun.frag.out
+++ b/Test/baseResults/spv.forwardFun.frag.out
@@ -1,6 +1,6 @@
 spv.forwardFun.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 60
 
                               Capability Shader
@@ -99,8 +99,7 @@
               45:               Label
                                 ReturnValue 46
               42:             Label
-              48:    8(float) Undef
-                              ReturnValue 48
+                              Unreachable
                               FunctionEnd
     16(foo(vf4;):    8(float) Function None 14
          15(bar):     13(ptr) FunctionParameter
diff --git a/Test/baseResults/spv.fragmentDensity-es.frag.out b/Test/baseResults/spv.fragmentDensity-es.frag.out
index 01ac383..69f92c8 100644
--- a/Test/baseResults/spv.fragmentDensity-es.frag.out
+++ b/Test/baseResults/spv.fragmentDensity-es.frag.out
@@ -1,6 +1,6 @@
 spv.fragmentDensity-es.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.fragmentDensity.frag.out b/Test/baseResults/spv.fragmentDensity.frag.out
index 8bbc37c..5bdb43a 100644
--- a/Test/baseResults/spv.fragmentDensity.frag.out
+++ b/Test/baseResults/spv.fragmentDensity.frag.out
@@ -1,6 +1,6 @@
 spv.fragmentDensity.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.fragmentShaderBarycentric.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric.frag.out
index ffb3527..fbded6e 100644
--- a/Test/baseResults/spv.fragmentShaderBarycentric.frag.out
+++ b/Test/baseResults/spv.fragmentShaderBarycentric.frag.out
@@ -1,6 +1,6 @@
 spv.fragmentShaderBarycentric.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out
index 05dce7a..22b84ba 100644
--- a/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out
+++ b/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out
@@ -1,6 +1,6 @@
 spv.fragmentShaderBarycentric2.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/spv.fsi.frag.out b/Test/baseResults/spv.fsi.frag.out
new file mode 100644
index 0000000..b0c9713
--- /dev/null
+++ b/Test/baseResults/spv.fsi.frag.out
@@ -0,0 +1,56 @@
+spv.fsi.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 24
+
+                              Capability Shader
+                              Capability CapabilityFragmentShaderSampleInterlockEXT
+                              Extension  "SPV_EXT_fragment_shader_interlock"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 SampleInterlockOrderedEXT
+                              Source GLSL 450
+                              SourceExtension  "GL_ARB_fragment_shader_interlock"
+                              Name 4  "main"
+                              Name 7  "B1"
+                              MemberName 7(B1) 0  "x"
+                              Name 9  "b1"
+                              Name 17  "im"
+                              MemberDecorate 7(B1) 0 Coherent
+                              MemberDecorate 7(B1) 0 Offset 0
+                              Decorate 7(B1) BufferBlock
+                              Decorate 9(b1) DescriptorSet 0
+                              Decorate 9(b1) Binding 0
+                              Decorate 17(im) DescriptorSet 0
+                              Decorate 17(im) Binding 1
+                              Decorate 17(im) Coherent
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+           7(B1):             TypeStruct 6(int)
+               8:             TypePointer Uniform 7(B1)
+           9(b1):      8(ptr) Variable Uniform
+              10:      6(int) Constant 0
+              11:      6(int) Constant 1
+              12:             TypePointer Uniform 6(int)
+              14:             TypeFloat 32
+              15:             TypeImage 14(float) 2D nonsampled format:Rgba32f
+              16:             TypePointer UniformConstant 15
+          17(im):     16(ptr) Variable UniformConstant
+              19:             TypeVector 6(int) 2
+              20:   19(ivec2) ConstantComposite 10 10
+              21:             TypeVector 14(float) 4
+              22:   14(float) Constant 0
+              23:   21(fvec4) ConstantComposite 22 22 22 22
+         4(main):           2 Function None 3
+               5:             Label
+                              BeginInvocationInterlockEXT
+              13:     12(ptr) AccessChain 9(b1) 10
+                              Store 13 11
+              18:          15 Load 17(im)
+                              ImageWrite 18 20 23
+                              EndInvocationInterlockEXT
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.fsi_Error.frag.out b/Test/baseResults/spv.fsi_Error.frag.out
new file mode 100644
index 0000000..4a03436
--- /dev/null
+++ b/Test/baseResults/spv.fsi_Error.frag.out
@@ -0,0 +1,14 @@
+spv.fsi_Error.frag
+ERROR: 0:4: 'pixel_interlock_ordered' : can only apply to 'in' 
+ERROR: 0:7: 'pixel_interlock_unordered' : cannot change previously set fragment shader interlock ordering 
+ERROR: 0:11: '' : beginInvocationInterlockARB() must be in main() 
+ERROR: 0:12: '' : endInvocationInterlockARB() must be in main() 
+ERROR: 0:17: '' : endInvocationInterlockARB() must only be called once 
+ERROR: 0:18: '' : beginInvocationInterlockARB() must only be called once 
+ERROR: 0:18: '' : beginInvocationInterlockARB() must be called before endInvocationInterlockARB() 
+ERROR: 0:22: '' : endInvocationInterlockARB() cannot be placed after a return from main() 
+ERROR: 0:22: '' : endInvocationInterlockARB() must only be called once 
+ERROR: 9 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.fullyCovered.frag.out b/Test/baseResults/spv.fullyCovered.frag.out
index 76c8e44..4dbea15 100644
--- a/Test/baseResults/spv.fullyCovered.frag.out
+++ b/Test/baseResults/spv.fullyCovered.frag.out
@@ -1,6 +1,6 @@
 spv.fullyCovered.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.functionCall.frag.out b/Test/baseResults/spv.functionCall.frag.out
index 269b74e..4fa7863 100644
--- a/Test/baseResults/spv.functionCall.frag.out
+++ b/Test/baseResults/spv.functionCall.frag.out
@@ -4,7 +4,7 @@
 WARNING: 0:5: varying deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 76
 
                               Capability Shader
@@ -105,8 +105,7 @@
               44:               Label
                                 ReturnValue 45
               41:             Label
-              47:    6(float) Undef
-                              ReturnValue 47
+                              Unreachable
                               FunctionEnd
 18(missingReturn():    6(float) Function None 15
               19:             Label
diff --git a/Test/baseResults/spv.functionNestedOpaque.vert.out b/Test/baseResults/spv.functionNestedOpaque.vert.out
index df590c1..4543895 100644
--- a/Test/baseResults/spv.functionNestedOpaque.vert.out
+++ b/Test/baseResults/spv.functionNestedOpaque.vert.out
@@ -1,7 +1,7 @@
 spv.functionNestedOpaque.vert
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/spv.functionParameterTypes.frag.out b/Test/baseResults/spv.functionParameterTypes.frag.out
new file mode 100644
index 0000000..decc190
--- /dev/null
+++ b/Test/baseResults/spv.functionParameterTypes.frag.out
@@ -0,0 +1,62 @@
+spv.functionParameterTypes.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 34
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 460
+                              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"
+                              Name 4  "main"
+                              Name 29  "f(i81;u81;i161;u161;i641;u641;f161;"
+                              Name 22  "i8"
+                              Name 23  "u8"
+                              Name 24  "i16"
+                              Name 25  "u16"
+                              Name 26  "i64"
+                              Name 27  "u64"
+                              Name 28  "f16"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 8 1
+               7:             TypePointer Function 6(int8_t)
+               8:             TypeInt 8 0
+               9:             TypePointer Function 8(int8_t)
+              10:             TypeInt 16 1
+              11:             TypePointer Function 10(int16_t)
+              12:             TypeInt 16 0
+              13:             TypePointer Function 12(int16_t)
+              14:             TypeInt 64 1
+              15:             TypePointer Function 14(int64_t)
+              16:             TypeInt 64 0
+              17:             TypePointer Function 16(int64_t)
+              18:             TypeFloat 16
+              19:             TypePointer Function 18(float16_t)
+              20:             TypeInt 32 1
+              21:             TypeFunction 20(int) 7(ptr) 9(ptr) 11(ptr) 13(ptr) 15(ptr) 17(ptr) 19(ptr)
+              31:     20(int) Constant 0
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
+29(f(i81;u81;i161;u161;i641;u641;f161;):     20(int) Function None 21
+          22(i8):      7(ptr) FunctionParameter
+          23(u8):      9(ptr) FunctionParameter
+         24(i16):     11(ptr) FunctionParameter
+         25(u16):     13(ptr) FunctionParameter
+         26(i64):     15(ptr) FunctionParameter
+         27(u64):     17(ptr) FunctionParameter
+         28(f16):     19(ptr) FunctionParameter
+              30:             Label
+                              ReturnValue 31
+                              FunctionEnd
diff --git a/Test/baseResults/spv.functionSemantics.frag.out b/Test/baseResults/spv.functionSemantics.frag.out
index 49bdf7c..000a7bc 100644
--- a/Test/baseResults/spv.functionSemantics.frag.out
+++ b/Test/baseResults/spv.functionSemantics.frag.out
@@ -1,6 +1,6 @@
 spv.functionSemantics.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 156
 
                               Capability Shader
diff --git a/Test/baseResults/spv.glFragColor.frag.out b/Test/baseResults/spv.glFragColor.frag.out
index 55fb24f..af25280 100644
--- a/Test/baseResults/spv.glFragColor.frag.out
+++ b/Test/baseResults/spv.glFragColor.frag.out
@@ -1,6 +1,6 @@
 spv.glFragColor.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 12
 
                               Capability Shader
diff --git a/Test/baseResults/spv.glsl.register.autoassign.frag.out b/Test/baseResults/spv.glsl.register.autoassign.frag.out
index 9c8ccb5..9872f4a 100644
--- a/Test/baseResults/spv.glsl.register.autoassign.frag.out
+++ b/Test/baseResults/spv.glsl.register.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.glsl.register.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 142
 
                               Capability Shader
diff --git a/Test/baseResults/spv.glsl.register.noautoassign.frag.out b/Test/baseResults/spv.glsl.register.noautoassign.frag.out
index 44d63ed..b52e220 100644
--- a/Test/baseResults/spv.glsl.register.noautoassign.frag.out
+++ b/Test/baseResults/spv.glsl.register.noautoassign.frag.out
@@ -1,6 +1,6 @@
 spv.glsl.register.noautoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 142
 
                               Capability Shader
diff --git a/Test/baseResults/spv.hlslDebugInfo.frag.out b/Test/baseResults/spv.hlslDebugInfo.frag.out
index 9912d4e..1d2e6b4 100644
--- a/Test/baseResults/spv.hlslDebugInfo.frag.out
+++ b/Test/baseResults/spv.hlslDebugInfo.frag.out
@@ -1,6 +1,6 @@
 spv.hlslDebugInfo.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 19
 
                               Capability Shader
@@ -15,12 +15,12 @@
 // OpModuleProcessed shift-UBO-binding 6
 // OpModuleProcessed shift-ssbo-binding 3
 // OpModuleProcessed shift-uav-binding 5
-// OpModuleProcessed flatten-uniform-arrays
 // OpModuleProcessed no-storage-format
 // OpModuleProcessed resource-set-binding t0 0 0
-// OpModuleProcessed hlsl-iomap
 // OpModuleProcessed auto-map-bindings
 // OpModuleProcessed auto-map-locations
+// OpModuleProcessed flatten-uniform-arrays
+// OpModuleProcessed hlsl-iomap
 // OpModuleProcessed client vulkan100
 // OpModuleProcessed target-env vulkan1.0
 // OpModuleProcessed source-entrypoint origMain
diff --git a/Test/baseResults/spv.hlslOffsets.vert.out b/Test/baseResults/spv.hlslOffsets.vert.out
index 84dc47b..b1cdb6b 100644
--- a/Test/baseResults/spv.hlslOffsets.vert.out
+++ b/Test/baseResults/spv.hlslOffsets.vert.out
@@ -4,7 +4,7 @@
 0:27  Function Definition: main( ( global void)
 0:27    Function Parameters: 
 0:?   Linker Objects
-0:?     'anon@0' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float m0, layout( column_major std430) buffer highp 3-component vector of float m4, layout( column_major std430) buffer highp float m16, layout( column_major std430 offset=20) buffer highp 3-component vector of float m20, layout( column_major std430) buffer highp 3-component vector of float m32, layout( column_major std430) buffer highp 2-component vector of float m48, layout( column_major std430) buffer highp 2-component vector of float m56, layout( column_major std430) buffer highp float m64, layout( column_major std430) buffer highp 2-component vector of float m68, layout( column_major std430) buffer highp float m76, layout( column_major std430) buffer highp float m80, layout( column_major std430 offset=88) buffer highp 2-component vector of float m88, layout( column_major std430) buffer highp 2-component vector of float m96, layout( column_major std430) buffer 2-component vector of double m112})
+0:?     'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430) buffer highp float m0, layout( column_major std430) buffer highp 3-component vector of float m4, layout( column_major std430) buffer highp float m16, layout( column_major std430 offset=20) buffer highp 3-component vector of float m20, layout( column_major std430) buffer highp 3-component vector of float m32, layout( column_major std430) buffer highp 2-component vector of float m48, layout( column_major std430) buffer highp 2-component vector of float m56, layout( column_major std430) buffer highp float m64, layout( column_major std430) buffer highp 2-component vector of float m68, layout( column_major std430) buffer highp float m76, layout( column_major std430) buffer highp float m80, layout( column_major std430 offset=88) buffer highp 2-component vector of float m88, layout( column_major std430) buffer highp 2-component vector of float m96, layout( column_major std430) buffer 2-component vector of double m112})
 
 
 Linked vertex stage:
@@ -15,10 +15,10 @@
 0:27  Function Definition: main( ( global void)
 0:27    Function Parameters: 
 0:?   Linker Objects
-0:?     'anon@0' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float m0, layout( column_major std430) buffer highp 3-component vector of float m4, layout( column_major std430) buffer highp float m16, layout( column_major std430 offset=20) buffer highp 3-component vector of float m20, layout( column_major std430) buffer highp 3-component vector of float m32, layout( column_major std430) buffer highp 2-component vector of float m48, layout( column_major std430) buffer highp 2-component vector of float m56, layout( column_major std430) buffer highp float m64, layout( column_major std430) buffer highp 2-component vector of float m68, layout( column_major std430) buffer highp float m76, layout( column_major std430) buffer highp float m80, layout( column_major std430 offset=88) buffer highp 2-component vector of float m88, layout( column_major std430) buffer highp 2-component vector of float m96, layout( column_major std430) buffer 2-component vector of double m112})
+0:?     'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430) buffer highp float m0, layout( column_major std430) buffer highp 3-component vector of float m4, layout( column_major std430) buffer highp float m16, layout( column_major std430 offset=20) buffer highp 3-component vector of float m20, layout( column_major std430) buffer highp 3-component vector of float m32, layout( column_major std430) buffer highp 2-component vector of float m48, layout( column_major std430) buffer highp 2-component vector of float m56, layout( column_major std430) buffer highp float m64, layout( column_major std430) buffer highp 2-component vector of float m68, layout( column_major std430) buffer highp float m76, layout( column_major std430) buffer highp float m80, layout( column_major std430 offset=88) buffer highp 2-component vector of float m88, layout( column_major std430) buffer highp 2-component vector of float m96, layout( column_major std430) buffer 2-component vector of double m112})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 14
 
                               Capability Shader
diff --git a/Test/baseResults/spv.image.frag.out b/Test/baseResults/spv.image.frag.out
index 0fefd01..63d26d8 100644
--- a/Test/baseResults/spv.image.frag.out
+++ b/Test/baseResults/spv.image.frag.out
@@ -1,7 +1,7 @@
 spv.image.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 395
 
                               Capability Shader
diff --git a/Test/baseResults/spv.imageLoadStoreLod.frag.out b/Test/baseResults/spv.imageLoadStoreLod.frag.out
index 28cd4f9..ec16d90 100644
--- a/Test/baseResults/spv.imageLoadStoreLod.frag.out
+++ b/Test/baseResults/spv.imageLoadStoreLod.frag.out
@@ -1,7 +1,6 @@
 spv.imageLoadStoreLod.frag
-Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 82
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int16.amd.frag.out b/Test/baseResults/spv.int16.amd.frag.out
index 26c701d..3f6179b 100644
--- a/Test/baseResults/spv.int16.amd.frag.out
+++ b/Test/baseResults/spv.int16.amd.frag.out
@@ -1,6 +1,6 @@
 spv.int16.amd.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 560
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int16.frag.out b/Test/baseResults/spv.int16.frag.out
index a7b9bfe..ff8a446 100644
--- a/Test/baseResults/spv.int16.frag.out
+++ b/Test/baseResults/spv.int16.frag.out
@@ -1,6 +1,6 @@
 spv.int16.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 523
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int32.frag.out b/Test/baseResults/spv.int32.frag.out
index e5c7889..1e8cd70 100644
--- a/Test/baseResults/spv.int32.frag.out
+++ b/Test/baseResults/spv.int32.frag.out
@@ -1,6 +1,6 @@
 spv.int32.frag
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 493
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int64.frag.out b/Test/baseResults/spv.int64.frag.out
index b1375a6..4510134 100644
--- a/Test/baseResults/spv.int64.frag.out
+++ b/Test/baseResults/spv.int64.frag.out
@@ -1,7 +1,7 @@
 spv.int64.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 489
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int8.frag.out b/Test/baseResults/spv.int8.frag.out
index 71307d8..c84ca7e 100644
--- a/Test/baseResults/spv.int8.frag.out
+++ b/Test/baseResults/spv.int8.frag.out
@@ -1,6 +1,6 @@
 spv.int8.frag
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 518
 
                               Capability Shader
@@ -9,7 +9,7 @@
                               Capability Int64
                               Capability Int16
                               Capability Int8
-                              Capability CapabilityUniformAndStorageBuffer8BitAccess
+                              Capability UniformAndStorageBuffer8BitAccess
                               Extension  "SPV_KHR_8bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
diff --git a/Test/baseResults/spv.intOps.vert.out b/Test/baseResults/spv.intOps.vert.out
index 2a63783..272233e 100644
--- a/Test/baseResults/spv.intOps.vert.out
+++ b/Test/baseResults/spv.intOps.vert.out
@@ -1,6 +1,6 @@
 spv.intOps.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 268
 
                               Capability Shader
diff --git a/Test/baseResults/spv.intcoopmat.comp.out b/Test/baseResults/spv.intcoopmat.comp.out
new file mode 100644
index 0000000..940ba33
--- /dev/null
+++ b/Test/baseResults/spv.intcoopmat.comp.out
@@ -0,0 +1,418 @@
+spv.intcoopmat.comp
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 262
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Int8
+                              Capability StorageBuffer8BitAccess
+                              Capability VulkanMemoryModelKHR
+                              Capability PhysicalStorageBufferAddressesEXT
+                              Capability CooperativeMatrixNV
+                              Extension  "SPV_EXT_physical_storage_buffer"
+                              Extension  "SPV_KHR_8bit_storage"
+                              Extension  "SPV_KHR_storage_buffer_storage_class"
+                              Extension  "SPV_KHR_vulkan_memory_model"
+                              Extension  "SPV_NV_cooperative_matrix"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel PhysicalStorageBuffer64EXT VulkanKHR
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 64 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_buffer_reference"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHR_memory_scope_semantics"
+                              SourceExtension  "GL_NV_cooperative_matrix"
+                              SourceExtension  "GL_NV_integer_cooperative_matrix"
+                              Name 4  "main"
+                              Name 14  "ineg(i81;"
+                              Name 13  "m"
+                              Name 21  "umul(u81;"
+                              Name 20  "m"
+                              Name 35  "mu"
+                              Name 39  "mi"
+                              Name 55  "mf16_0"
+                              Name 61  "mf32_0"
+                              Name 64  "mf16_1"
+                              Name 67  "mf32_1"
+                              Name 71  "x"
+                              Name 81  "tempArg"
+                              Name 85  "Block"
+                              MemberName 85(Block) 0  "y"
+                              MemberName 85(Block) 1  "x"
+                              Name 87  "block"
+                              Name 98  "tempArg"
+                              Name 103  "Block16"
+                              MemberName 103(Block16) 0  "y"
+                              MemberName 103(Block16) 1  "x"
+                              MemberName 103(Block16) 2  "b"
+                              Name 106  "Block"
+                              MemberName 106(Block) 0  "y"
+                              MemberName 106(Block) 1  "x"
+                              Name 108  "block8"
+                              Name 115  "tempArg"
+                              Name 128  "D"
+                              Name 129  "A"
+                              Name 131  "B"
+                              Name 133  "C"
+                              Name 137  "l"
+                              Name 142  "a"
+                              Name 146  "md1"
+                              Name 156  "Y"
+                              Name 157  "Z"
+                              Name 161  "muC2"
+                              Name 169  "miC2"
+                              Name 176  "tempArg"
+                              Name 182  "tempArg"
+                              Name 188  "p1"
+                              Name 189  "param"
+                              Name 192  "p2"
+                              Name 193  "param"
+                              Name 207  "tempArg"
+                              Name 212  "shmatrix"
+                              Name 217  "ms"
+                              Name 225  "miC"
+                              Name 226  "muC"
+                              Name 231  "iarr"
+                              Name 236  "iarr2"
+                              Name 241  "uarr"
+                              Name 246  "uarr2"
+                              Name 251  "S"
+                              MemberName 251(S) 0  "a"
+                              MemberName 251(S) 1  "b"
+                              MemberName 251(S) 2  "c"
+                              Name 256  "SC"
+                              Name 261  "scm"
+                              Decorate 83 ArrayStride 4
+                              Decorate 84 ArrayStride 4
+                              MemberDecorate 85(Block) 0 Offset 0
+                              MemberDecorate 85(Block) 1 Offset 4194304
+                              Decorate 85(Block) Block
+                              Decorate 87(block) DescriptorSet 0
+                              Decorate 87(block) Binding 0
+                              Decorate 99 ArrayStride 1
+                              Decorate 101 ArrayStride 1
+                              MemberDecorate 103(Block16) 0 Offset 0
+                              MemberDecorate 103(Block16) 1 Offset 1048576
+                              MemberDecorate 103(Block16) 2 Offset 1048584
+                              Decorate 103(Block16) Block
+                              Decorate 104 ArrayStride 4
+                              Decorate 105 ArrayStride 4
+                              MemberDecorate 106(Block) 0 Offset 0
+                              MemberDecorate 106(Block) 1 Offset 4194304
+                              Decorate 106(Block) Block
+                              Decorate 108(block8) DescriptorSet 0
+                              Decorate 108(block8) Binding 0
+                              Decorate 156(Y) SpecId 0
+                              Decorate 223 BuiltIn WorkgroupSize
+                              Decorate 256(SC) SpecId 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 8 1
+               7:             TypeInt 32 0
+               8:      7(int) Constant 3
+               9:      7(int) Constant 8
+              10:             TypeCooperativeMatrixNV 6(int8_t) 8 9 9
+              11:             TypePointer Function 10
+              12:             TypeFunction 10 11(ptr)
+              16:             TypeInt 8 0
+              17:             TypeCooperativeMatrixNV 16(int8_t) 8 9 9
+              18:             TypePointer Function 17
+              19:             TypeFunction 17 18(ptr)
+              28:  16(int8_t) Constant 2
+              32:      7(int) Constant 16
+              33:             TypeCooperativeMatrixNV 16(int8_t) 8 32 9
+              34:             TypePointer Function 33
+              36:          33 ConstantComposite 28
+              37:             TypeCooperativeMatrixNV 6(int8_t) 8 32 9
+              38:             TypePointer Function 37
+              40:   6(int8_t) Constant 2
+              41:          37 ConstantComposite 40
+              52:             TypeFloat 16
+              53:             TypeCooperativeMatrixNV 52(float16_t) 8 32 9
+              54:             TypePointer Function 53
+              58:             TypeFloat 32
+              59:             TypeCooperativeMatrixNV 58(float) 8 32 9
+              60:             TypePointer Function 59
+              70:             TypePointer Function 16(int8_t)
+              72:             TypeInt 32 1
+              73:     72(int) Constant 1
+              76:     72(int) Constant 0
+              79:             TypePointer Function 6(int8_t)
+              82:      7(int) Constant 1048576
+              83:             TypeArray 7(int) 82
+              84:             TypeRuntimeArray 7(int)
+       85(Block):             TypeStruct 83 84
+              86:             TypePointer StorageBuffer 85(Block)
+       87(block):     86(ptr) Variable StorageBuffer
+              88:      7(int) Constant 5
+              89:             TypePointer StorageBuffer 7(int)
+              91:      7(int) Constant 128
+              92:             TypeBool
+              93:    92(bool) ConstantFalse
+              99:             TypeArray 6(int8_t) 82
+             100:      7(int) Constant 1
+             101:             TypeArray 6(int8_t) 100
+                              TypeForwardPointer 102 PhysicalStorageBufferEXT
+    103(Block16):             TypeStruct 99 101 102
+             104:             TypeArray 7(int) 82
+             105:             TypeRuntimeArray 7(int)
+      106(Block):             TypeStruct 104 105
+             102:             TypePointer PhysicalStorageBufferEXT 106(Block)
+             107:             TypePointer StorageBuffer 103(Block16)
+     108(block8):    107(ptr) Variable StorageBuffer
+             109:             TypePointer StorageBuffer 6(int8_t)
+             116:     72(int) Constant 2
+             117:             TypePointer StorageBuffer 102(ptr)
+             120:             TypePointer PhysicalStorageBufferEXT 7(int)
+             136:             TypePointer Function 72(int)
+             138:      7(int) SpecConstantOp 5362 33
+             139:     72(int) SpecConstantOp 128 138 76
+             140:             TypeArray 37 88
+             141:             TypePointer Function 140
+             143:     72(int) Constant 3
+             144:   6(int8_t) Constant 1
+             150:     72(int) Constant 1234
+             155:     72(int) Constant 8
+          156(Y):     72(int) SpecConstant 2
+          157(Z):     72(int) SpecConstantOp 132 155 156(Y)
+             158:             TypeCooperativeMatrixNV 16(int8_t) 8 157(Z) 9
+             159:             TypeArray 158 8
+             160:             TypePointer Private 159
+       161(muC2):    160(ptr) Variable Private
+             162:             TypePointer Private 158
+             166:             TypeCooperativeMatrixNV 6(int8_t) 8 157(Z) 9
+             167:             TypeArray 166 8
+             168:             TypePointer Private 167
+       169(miC2):    168(ptr) Variable Private
+             170:             TypePointer Private 6(int8_t)
+             174:             TypePointer Private 16(int8_t)
+             204:  16(int8_t) Constant 4
+             208:             TypeVector 7(int) 4
+             209:      7(int) Constant 32
+             210:             TypeArray 208(ivec4) 209
+             211:             TypePointer Workgroup 210
+   212(shmatrix):    211(ptr) Variable Workgroup
+             213:      7(int) Constant 2
+             214:             TypePointer Workgroup 208(ivec4)
+             221:             TypeVector 7(int) 3
+             222:      7(int) Constant 64
+             223:  221(ivec3) ConstantComposite 222 100 100
+             224:             TypePointer Private 166
+        225(miC):    224(ptr) Variable Private
+        226(muC):    162(ptr) Variable Private
+             227:      7(int) SpecConstantOp 5362 166
+             228:     72(int) SpecConstantOp 128 227 76
+             229:             TypeArray 72(int) 228
+             230:             TypePointer Private 229
+       231(iarr):    230(ptr) Variable Private
+             232:      7(int) SpecConstantOp 5362 166
+             233:     72(int) SpecConstantOp 128 232 76
+             234:             TypeArray 72(int) 233
+             235:             TypePointer Private 234
+      236(iarr2):    235(ptr) Variable Private
+             237:      7(int) SpecConstantOp 5362 158
+             238:     72(int) SpecConstantOp 128 237 76
+             239:             TypeArray 72(int) 238
+             240:             TypePointer Private 239
+       241(uarr):    240(ptr) Variable Private
+             242:      7(int) SpecConstantOp 5362 158
+             243:     72(int) SpecConstantOp 128 242 76
+             244:             TypeArray 72(int) 243
+             245:             TypePointer Private 244
+      246(uarr2):    245(ptr) Variable Private
+             247:             TypeCooperativeMatrixNV 72(int) 8 157(Z) 9
+             248:         247 ConstantComposite 73
+             249:  16(int8_t) Constant 1
+             250:          17 ConstantComposite 249
+          251(S):             TypeStruct 72(int) 72(int) 72(int)
+             252:     72(int) Constant 12
+             253:     72(int) Constant 23
+             254:     72(int) Constant 34
+             255:      251(S) ConstantComposite 252 253 254
+         256(SC):     72(int) SpecConstant 1
+             257:             TypeCooperativeMatrixNV 7(int) 8 256(SC) 256(SC)
+             258:             TypeArray 257 256(SC)
+             259:             TypeArray 258 256(SC)
+             260:             TypePointer Private 259
+        261(scm):    260(ptr) Variable Private
+         4(main):           2 Function None 3
+               5:             Label
+          35(mu):     34(ptr) Variable Function
+          39(mi):     38(ptr) Variable Function
+      55(mf16_0):     54(ptr) Variable Function
+      61(mf32_0):     60(ptr) Variable Function
+      64(mf16_1):     54(ptr) Variable Function
+      67(mf32_1):     60(ptr) Variable Function
+           71(x):     70(ptr) Variable Function
+     81(tempArg):     38(ptr) Variable Function
+     98(tempArg):     34(ptr) Variable Function
+    115(tempArg):     38(ptr) Variable Function
+          128(D):     34(ptr) Variable Function
+          129(A):     34(ptr) Variable Function
+          131(B):     18(ptr) Variable Function
+          133(C):     34(ptr) Variable Function
+          137(l):    136(ptr) Variable Function
+          142(a):    141(ptr) Variable Function
+        146(md1):    136(ptr) Variable Function
+    176(tempArg):     38(ptr) Variable Function
+    182(tempArg):     34(ptr) Variable Function
+         188(p1):     11(ptr) Variable Function
+      189(param):     11(ptr) Variable Function
+         192(p2):     18(ptr) Variable Function
+      193(param):     18(ptr) Variable Function
+    207(tempArg):     38(ptr) Variable Function
+         217(ms):     38(ptr) Variable Function
+                              Store 35(mu) 36
+                              Store 39(mi) 41
+              42:          33 Load 35(mu)
+              43:          33 Load 35(mu)
+              44:          33 IAdd 42 43
+                              Store 35(mu) 44
+              45:          33 Load 35(mu)
+              46:          33 Load 35(mu)
+              47:          33 ISub 45 46
+                              Store 35(mu) 47
+              48:          37 Load 39(mi)
+              49:          37 SNegate 48
+                              Store 39(mi) 49
+              50:          37 Load 39(mi)
+              51:          37 MatrixTimesScalar 50 40
+                              Store 39(mi) 51
+              56:          33 Load 35(mu)
+              57:          53 ConvertUToF 56
+                              Store 55(mf16_0) 57
+              62:          33 Load 35(mu)
+              63:          59 ConvertUToF 62
+                              Store 61(mf32_0) 63
+              65:          37 Load 39(mi)
+              66:          53 ConvertSToF 65
+                              Store 64(mf16_1) 66
+              68:          37 Load 39(mi)
+              69:          59 ConvertSToF 68
+                              Store 67(mf32_1) 69
+              74:     70(ptr) AccessChain 35(mu) 73
+              75:  16(int8_t) Load 74
+                              Store 71(x) 75
+              77:  16(int8_t) Load 71(x)
+              78:   6(int8_t) Bitcast 77
+              80:     79(ptr) AccessChain 39(mi) 76
+                              Store 80 78
+              90:     89(ptr) AccessChain 87(block) 73 32
+              94:          37 CooperativeMatrixLoadNV 90 91 93 MakePointerVisibleKHR NonPrivatePointerKHR 88
+                              Store 81(tempArg) 94
+              95:          37 Load 81(tempArg)
+                              Store 39(mi) 95
+              96:          37 Load 39(mi)
+              97:     89(ptr) AccessChain 87(block) 73 32
+                              CooperativeMatrixStoreNV 97 96 91 93 MakePointerAvailableKHR NonPrivatePointerKHR 88
+             110:    109(ptr) AccessChain 108(block8) 73 32
+             111:          33 CooperativeMatrixLoadNV 110 91 93 MakePointerVisibleKHR NonPrivatePointerKHR 88
+                              Store 98(tempArg) 111
+             112:          33 Load 98(tempArg)
+                              Store 35(mu) 112
+             113:          33 Load 35(mu)
+             114:    109(ptr) AccessChain 108(block8) 73 32
+                              CooperativeMatrixStoreNV 114 113 91 93 MakePointerAvailableKHR NonPrivatePointerKHR 88
+             118:    117(ptr) AccessChain 108(block8) 116
+             119:    102(ptr) Load 118 MakePointerVisibleKHR NonPrivatePointerKHR 88
+             121:    120(ptr) AccessChain 119 73 32
+             122:          37 CooperativeMatrixLoadNV 121 91 93 Aligned MakePointerVisibleKHR NonPrivatePointerKHR 16 88
+                              Store 115(tempArg) 122
+             123:          37 Load 115(tempArg)
+                              Store 39(mi) 123
+             124:          37 Load 39(mi)
+             125:    117(ptr) AccessChain 108(block8) 116
+             126:    102(ptr) Load 125 MakePointerVisibleKHR NonPrivatePointerKHR 88
+             127:    120(ptr) AccessChain 126 73 32
+                              CooperativeMatrixStoreNV 127 124 91 93 Aligned MakePointerAvailableKHR NonPrivatePointerKHR 16 88
+             130:          33 Load 129(A)
+             132:          17 Load 131(B)
+             134:          33 Load 133(C)
+             135:          33 CooperativeMatrixMulAddNV 130 132 134
+                              Store 128(D) 135
+                              Store 137(l) 139
+             145:     79(ptr) AccessChain 142(a) 143 76
+                              Store 145 144
+                              Store 146(md1) 73
+             147:          37 Load 39(mi)
+             148:          37 Load 39(mi)
+             149:          37 IAdd 148 147
+                              Store 39(mi) 149
+             151:   6(int8_t) CompositeExtract 149 1234
+             152:     72(int) SConvert 151
+             153:     72(int) Load 146(md1)
+             154:     72(int) IAdd 153 152
+                              Store 146(md1) 154
+             163:    162(ptr) AccessChain 161(muC2) 73
+             164:         158 Load 163
+             165:    162(ptr) AccessChain 161(muC2) 76
+                              Store 165 164
+             171:    170(ptr) AccessChain 169(miC2) 116 76
+             172:   6(int8_t) Load 171
+             173:  16(int8_t) Bitcast 172
+             175:    174(ptr) AccessChain 161(muC2) 73 76
+                              Store 175 173
+             177:     89(ptr) AccessChain 87(block) 76 32
+             178:          37 CooperativeMatrixLoadNV 177 91 93 MakePointerVisibleKHR NonPrivatePointerKHR 88
+                              Store 176(tempArg) 178
+             179:          37 Load 176(tempArg)
+                              Store 39(mi) 179
+             180:          37 Load 39(mi)
+             181:     89(ptr) AccessChain 87(block) 76 32
+                              CooperativeMatrixStoreNV 181 180 91 93 MakePointerAvailableKHR NonPrivatePointerKHR 88
+             183:    109(ptr) AccessChain 108(block8) 76 32
+             184:          33 CooperativeMatrixLoadNV 183 91 93 MakePointerVisibleKHR NonPrivatePointerKHR 88
+                              Store 182(tempArg) 184
+             185:          33 Load 182(tempArg)
+                              Store 35(mu) 185
+             186:          33 Load 35(mu)
+             187:    109(ptr) AccessChain 108(block8) 76 32
+                              CooperativeMatrixStoreNV 187 186 91 93 MakePointerAvailableKHR NonPrivatePointerKHR 88
+             190:          10 Load 188(p1)
+                              Store 189(param) 190
+             191:          10 FunctionCall 14(ineg(i81;) 189(param)
+                              Store 188(p1) 191
+             194:          17 Load 192(p2)
+                              Store 193(param) 194
+             195:          17 FunctionCall 21(umul(u81;) 193(param)
+                              Store 192(p2) 195
+             196:          10 Load 188(p1)
+             197:          10 Load 188(p1)
+             198:          10 SDiv 197 196
+                              Store 188(p1) 198
+             199:          17 Load 192(p2)
+             200:          17 Load 192(p2)
+             201:          17 UDiv 200 199
+                              Store 192(p2) 201
+             202:          10 Load 188(p1)
+             203:          10 MatrixTimesScalar 202 40
+                              Store 188(p1) 203
+             205:          17 Load 192(p2)
+             206:          17 MatrixTimesScalar 205 204
+                              Store 192(p2) 206
+             215:    214(ptr) AccessChain 212(shmatrix) 100
+             216:          37 CooperativeMatrixLoadNV 215 213 93 MakePointerVisibleKHR NonPrivatePointerKHR 213
+                              Store 207(tempArg) 216
+             218:          37 Load 207(tempArg)
+                              Store 217(ms) 218
+             219:          37 Load 217(ms)
+             220:    214(ptr) AccessChain 212(shmatrix) 100
+                              CooperativeMatrixStoreNV 220 219 213 93 MakePointerAvailableKHR NonPrivatePointerKHR 213
+                              Return
+                              FunctionEnd
+   14(ineg(i81;):          10 Function None 12
+           13(m):     11(ptr) FunctionParameter
+              15:             Label
+              23:          10 Load 13(m)
+              24:          10 SNegate 23
+                              ReturnValue 24
+                              FunctionEnd
+   21(umul(u81;):          17 Function None 19
+           20(m):     18(ptr) FunctionParameter
+              22:             Label
+              27:          17 Load 20(m)
+              29:          17 MatrixTimesScalar 27 28
+                              ReturnValue 29
+                              FunctionEnd
diff --git a/Test/baseResults/spv.interpOps.frag.out b/Test/baseResults/spv.interpOps.frag.out
index 699524d..7ec4f9f 100644
--- a/Test/baseResults/spv.interpOps.frag.out
+++ b/Test/baseResults/spv.interpOps.frag.out
@@ -1,6 +1,6 @@
 spv.interpOps.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 100
 
                               Capability Shader
diff --git a/Test/baseResults/spv.layoutNested.vert.out b/Test/baseResults/spv.layoutNested.vert.out
index b5ef883..44d58ab 100644
--- a/Test/baseResults/spv.layoutNested.vert.out
+++ b/Test/baseResults/spv.layoutNested.vert.out
@@ -1,6 +1,6 @@
 spv.layoutNested.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/spv.length.frag.out b/Test/baseResults/spv.length.frag.out
index 8e799fb..de391bc 100644
--- a/Test/baseResults/spv.length.frag.out
+++ b/Test/baseResults/spv.length.frag.out
@@ -1,6 +1,6 @@
 spv.length.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/spv.localAggregates.frag.out b/Test/baseResults/spv.localAggregates.frag.out
index f5fad54..adfa0fd 100644
--- a/Test/baseResults/spv.localAggregates.frag.out
+++ b/Test/baseResults/spv.localAggregates.frag.out
@@ -1,6 +1,6 @@
 spv.localAggregates.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 136
 
                               Capability Shader
diff --git a/Test/baseResults/spv.loops.frag.out b/Test/baseResults/spv.loops.frag.out
index 046360f..a3a3423 100644
--- a/Test/baseResults/spv.loops.frag.out
+++ b/Test/baseResults/spv.loops.frag.out
@@ -1,6 +1,6 @@
 spv.loops.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 725
 
                               Capability Shader
diff --git a/Test/baseResults/spv.loopsArtificial.frag.out b/Test/baseResults/spv.loopsArtificial.frag.out
index d0d6054..65329d4 100644
--- a/Test/baseResults/spv.loopsArtificial.frag.out
+++ b/Test/baseResults/spv.loopsArtificial.frag.out
@@ -1,6 +1,6 @@
 spv.loopsArtificial.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 158
 
                               Capability Shader
diff --git a/Test/baseResults/spv.matFun.vert.out b/Test/baseResults/spv.matFun.vert.out
index 8ed378f..d39160d 100644
--- a/Test/baseResults/spv.matFun.vert.out
+++ b/Test/baseResults/spv.matFun.vert.out
@@ -1,6 +1,6 @@
 spv.matFun.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 103
 
                               Capability Shader
diff --git a/Test/baseResults/spv.matrix.frag.out b/Test/baseResults/spv.matrix.frag.out
index c2b4a1f..f7b6ce3 100644
--- a/Test/baseResults/spv.matrix.frag.out
+++ b/Test/baseResults/spv.matrix.frag.out
@@ -1,6 +1,6 @@
 spv.matrix.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 286
 
                               Capability Shader
diff --git a/Test/baseResults/spv.matrix2.frag.out b/Test/baseResults/spv.matrix2.frag.out
index dc574a4..77a098a 100644
--- a/Test/baseResults/spv.matrix2.frag.out
+++ b/Test/baseResults/spv.matrix2.frag.out
@@ -1,6 +1,6 @@
 spv.matrix2.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 221
 
                               Capability Shader
diff --git a/Test/baseResults/spv.memoryQualifier.frag.out b/Test/baseResults/spv.memoryQualifier.frag.out
index 93c6b2d..737e862 100644
--- a/Test/baseResults/spv.memoryQualifier.frag.out
+++ b/Test/baseResults/spv.memoryQualifier.frag.out
@@ -1,7 +1,7 @@
 spv.memoryQualifier.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 97
 
                               Capability Shader
diff --git a/Test/baseResults/spv.memoryScopeSemantics.comp.out b/Test/baseResults/spv.memoryScopeSemantics.comp.out
index 4c79a10..b8721f2 100644
--- a/Test/baseResults/spv.memoryScopeSemantics.comp.out
+++ b/Test/baseResults/spv.memoryScopeSemantics.comp.out
@@ -1,13 +1,14 @@
 spv.memoryScopeSemantics.comp
 // Module Version 10300
-// Generated by (magic number): 80007
-// Id's are bound by 143
+// Generated by (magic number): 80008
+// Id's are bound by 169
 
                               Capability Shader
                               Capability Int64
                               Capability Int64Atomics
-                              Capability CapabilityVulkanMemoryModelKHR
-                              Capability CapabilityVulkanMemoryModelDeviceScopeKHR
+                              Capability StorageImageMultisample
+                              Capability VulkanMemoryModelKHR
+                              Capability VulkanMemoryModelDeviceScopeKHR
                               Extension  "SPV_KHR_vulkan_memory_model"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical VulkanKHR
@@ -23,52 +24,69 @@
                               Name 23  "atomu"
                               Name 24  "value"
                               Name 36  "imagei"
-                              Name 45  "imageu"
-                              Name 65  "BufferU"
-                              MemberName 65(BufferU) 0  "x"
-                              Name 67  "bufferu"
-                              Name 72  "y"
-                              Name 77  "BufferI"
-                              MemberName 77(BufferI) 0  "x"
-                              Name 79  "bufferi"
-                              Name 83  "A"
-                              MemberName 83(A) 0  "x"
-                              Name 84  "BufferJ"
-                              MemberName 84(BufferJ) 0  "a"
-                              Name 87  "bufferj"
-                              Name 98  "BufferK"
-                              MemberName 98(BufferK) 0  "x"
-                              Name 100  "bufferk"
-                              Name 110  "imagej"
-                              Name 122  "samp"
-                              Name 133  "atomu64"
-                              Name 138  "atomi64"
+                              Name 46  "imageu"
+                              Name 66  "BufferU"
+                              MemberName 66(BufferU) 0  "x"
+                              Name 68  "bufferu"
+                              Name 73  "y"
+                              Name 78  "BufferI"
+                              MemberName 78(BufferI) 0  "x"
+                              Name 80  "bufferi"
+                              Name 84  "A"
+                              MemberName 84(A) 0  "x"
+                              Name 85  "BufferJ"
+                              MemberName 85(BufferJ) 0  "a"
+                              Name 88  "bufferj"
+                              Name 99  "BufferK"
+                              MemberName 99(BufferK) 0  "x"
+                              Name 101  "bufferk"
+                              Name 111  "imagej"
+                              Name 123  "samp"
+                              Name 134  "atomu64"
+                              Name 139  "atomi64"
+                              Name 144  "BufferL"
+                              MemberName 144(BufferL) 0  "x"
+                              Name 146  "bufferl"
+                              Name 151  "BufferM"
+                              MemberName 151(BufferM) 0  "x"
+                              Name 153  "bufferm"
+                              Name 165  "imageMS"
                               Decorate 36(imagei) DescriptorSet 0
                               Decorate 36(imagei) Binding 1
-                              Decorate 45(imageu) DescriptorSet 0
-                              Decorate 45(imageu) Binding 0
-                              MemberDecorate 65(BufferU) 0 Offset 0
-                              Decorate 65(BufferU) Block
-                              Decorate 67(bufferu) DescriptorSet 0
-                              Decorate 67(bufferu) Binding 2
-                              MemberDecorate 77(BufferI) 0 Offset 0
-                              Decorate 77(BufferI) Block
-                              Decorate 79(bufferi) DescriptorSet 0
-                              Decorate 79(bufferi) Binding 3
-                              Decorate 82 ArrayStride 4
-                              MemberDecorate 83(A) 0 Offset 0
-                              MemberDecorate 84(BufferJ) 0 Offset 0
-                              Decorate 84(BufferJ) Block
-                              Decorate 87(bufferj) DescriptorSet 0
-                              Decorate 87(bufferj) Binding 4
-                              MemberDecorate 98(BufferK) 0 Offset 0
-                              Decorate 98(BufferK) Block
-                              Decorate 100(bufferk) DescriptorSet 0
-                              Decorate 100(bufferk) Binding 7
-                              Decorate 110(imagej) DescriptorSet 0
-                              Decorate 110(imagej) Binding 5
-                              Decorate 122(samp) DescriptorSet 0
-                              Decorate 122(samp) Binding 6
+                              Decorate 46(imageu) DescriptorSet 0
+                              Decorate 46(imageu) Binding 0
+                              MemberDecorate 66(BufferU) 0 Offset 0
+                              Decorate 66(BufferU) Block
+                              Decorate 68(bufferu) DescriptorSet 0
+                              Decorate 68(bufferu) Binding 2
+                              MemberDecorate 78(BufferI) 0 Offset 0
+                              Decorate 78(BufferI) Block
+                              Decorate 80(bufferi) DescriptorSet 0
+                              Decorate 80(bufferi) Binding 3
+                              Decorate 83 ArrayStride 4
+                              MemberDecorate 84(A) 0 Offset 0
+                              MemberDecorate 85(BufferJ) 0 Offset 0
+                              Decorate 85(BufferJ) Block
+                              Decorate 88(bufferj) DescriptorSet 0
+                              Decorate 88(bufferj) Binding 4
+                              MemberDecorate 99(BufferK) 0 Offset 0
+                              Decorate 99(BufferK) Block
+                              Decorate 101(bufferk) DescriptorSet 0
+                              Decorate 101(bufferk) Binding 7
+                              Decorate 111(imagej) DescriptorSet 0
+                              Decorate 111(imagej) Binding 5
+                              Decorate 123(samp) DescriptorSet 0
+                              Decorate 123(samp) Binding 6
+                              MemberDecorate 144(BufferL) 0 Offset 0
+                              Decorate 144(BufferL) Block
+                              Decorate 146(bufferl) DescriptorSet 0
+                              Decorate 146(bufferl) Binding 8
+                              MemberDecorate 151(BufferM) 0 Offset 0
+                              Decorate 151(BufferM) Block
+                              Decorate 153(bufferm) DescriptorSet 0
+                              Decorate 153(bufferm) Binding 9
+                              Decorate 165(imageMS) DescriptorSet 0
+                              Decorate 165(imageMS) Binding 10
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -99,64 +117,76 @@
               38:      6(int) Constant 0
               39:   37(ivec2) ConstantComposite 38 38
               40:             TypePointer Image 6(int)
-              43:             TypeImage 15(int) 2D nonsampled format:R32ui
-              44:             TypePointer UniformConstant 43
-      45(imageu):     44(ptr) Variable UniformConstant
-              46:     15(int) Constant 3
-              47:             TypePointer Image 15(int)
-              50:     15(int) Constant 4
-              52:     15(int) Constant 7
-              57:      6(int) Constant 7
-              61:     15(int) Constant 10
-              63:     15(int) Constant 322
-     65(BufferU):             TypeStruct 15(int)
-              66:             TypePointer StorageBuffer 65(BufferU)
-     67(bufferu):     66(ptr) Variable StorageBuffer
-              68:             TypePointer StorageBuffer 15(int)
-              70:     15(int) Constant 1
-     77(BufferI):             TypeStruct 15(int)
-              78:             TypePointer StorageBuffer 77(BufferI)
-     79(bufferi):     78(ptr) Variable StorageBuffer
-              82:             TypeArray 15(int) 26
-           83(A):             TypeStruct 82
-     84(BufferJ):             TypeStruct 83(A)
-              85:             TypeArray 84(BufferJ) 26
-              86:             TypePointer StorageBuffer 85
-     87(bufferj):     86(ptr) Variable StorageBuffer
-              94:             TypePointer StorageBuffer 83(A)
-     98(BufferK):             TypeStruct 15(int)
-              99:             TypePointer Uniform 98(BufferK)
-    100(bufferk):     99(ptr) Variable Uniform
-             101:             TypePointer Uniform 15(int)
-             106:             TypeVector 6(int) 4
-             108:             TypeArray 34 26
-             109:             TypePointer UniformConstant 108
-     110(imagej):    109(ptr) Variable UniformConstant
-             116:  106(ivec4) ConstantComposite 38 38 38 38
-             117:             TypeFloat 32
-             118:             TypeImage 117(float) 2D sampled format:Unknown
-             119:             TypeSampledImage 118
-             120:             TypeArray 119 26
-             121:             TypePointer UniformConstant 120
-       122(samp):    121(ptr) Variable UniformConstant
-             123:             TypePointer UniformConstant 119
-             126:             TypeVector 117(float) 2
-             127:  117(float) Constant 0
-             128:  126(fvec2) ConstantComposite 127 127
-             129:             TypeVector 117(float) 4
-             131:             TypeInt 64 0
-             132:             TypePointer Workgroup 131(int64_t)
-    133(atomu64):    132(ptr) Variable Workgroup
-             134:131(int64_t) Constant 7 0
-             136:             TypeInt 64 1
-             137:             TypePointer Workgroup 136(int64_t)
-    138(atomi64):    137(ptr) Variable Workgroup
-             139:136(int64_t) Constant 10 0
+              42:     15(int) Constant 32768
+              44:             TypeImage 15(int) 2D nonsampled format:R32ui
+              45:             TypePointer UniformConstant 44
+      46(imageu):     45(ptr) Variable UniformConstant
+              47:     15(int) Constant 3
+              48:             TypePointer Image 15(int)
+              51:     15(int) Constant 4
+              53:     15(int) Constant 7
+              58:      6(int) Constant 7
+              62:     15(int) Constant 10
+              64:     15(int) Constant 322
+     66(BufferU):             TypeStruct 15(int)
+              67:             TypePointer StorageBuffer 66(BufferU)
+     68(bufferu):     67(ptr) Variable StorageBuffer
+              69:             TypePointer StorageBuffer 15(int)
+              71:     15(int) Constant 1
+     78(BufferI):             TypeStruct 15(int)
+              79:             TypePointer StorageBuffer 78(BufferI)
+     80(bufferi):     79(ptr) Variable StorageBuffer
+              83:             TypeArray 15(int) 26
+           84(A):             TypeStruct 83
+     85(BufferJ):             TypeStruct 84(A)
+              86:             TypeArray 85(BufferJ) 26
+              87:             TypePointer StorageBuffer 86
+     88(bufferj):     87(ptr) Variable StorageBuffer
+              95:             TypePointer StorageBuffer 84(A)
+     99(BufferK):             TypeStruct 15(int)
+             100:             TypePointer Uniform 99(BufferK)
+    101(bufferk):    100(ptr) Variable Uniform
+             102:             TypePointer Uniform 15(int)
+             107:             TypeVector 6(int) 4
+             109:             TypeArray 34 26
+             110:             TypePointer UniformConstant 109
+     111(imagej):    110(ptr) Variable UniformConstant
+             117:  107(ivec4) ConstantComposite 38 38 38 38
+             118:             TypeFloat 32
+             119:             TypeImage 118(float) 2D sampled format:Unknown
+             120:             TypeSampledImage 119
+             121:             TypeArray 120 26
+             122:             TypePointer UniformConstant 121
+       123(samp):    122(ptr) Variable UniformConstant
+             124:             TypePointer UniformConstant 120
+             127:             TypeVector 118(float) 2
+             128:  118(float) Constant 0
+             129:  127(fvec2) ConstantComposite 128 128
+             130:             TypeVector 118(float) 4
+             132:             TypeInt 64 0
+             133:             TypePointer Workgroup 132(int64_t)
+    134(atomu64):    133(ptr) Variable Workgroup
+             135:132(int64_t) Constant 7 0
+             137:             TypeInt 64 1
+             138:             TypePointer Workgroup 137(int64_t)
+    139(atomi64):    138(ptr) Variable Workgroup
+             140:137(int64_t) Constant 10 0
+    144(BufferL):             TypeStruct 15(int)
+             145:             TypePointer StorageBuffer 144(BufferL)
+    146(bufferl):    145(ptr) Variable StorageBuffer
+    151(BufferM):             TypeStruct 15(int)
+             152:             TypePointer StorageBuffer 151(BufferM)
+    153(bufferm):    152(ptr) Variable StorageBuffer
+             161:      6(int) Constant 32768
+             163:             TypeImage 6(int) 2D multi-sampled nonsampled format:R32i
+             164:             TypePointer UniformConstant 163
+    165(imageMS):    164(ptr) Variable UniformConstant
+             167:      6(int) Constant 4294967289
          4(main):           2 Function None 3
                5:             Label
         8(origi):      7(ptr) Variable Function
        21(origu):     20(ptr) Variable Function
-           72(y):     20(ptr) Variable Function
+           73(y):     20(ptr) Variable Function
               19:      6(int) AtomicIAdd 10(atomi) 12 18 11
                               Store 8(origi) 19
               25:     15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26
@@ -167,74 +197,91 @@
               32:     15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26
                               AtomicStore 23(atomu) 12 33 32
               41:     40(ptr) ImageTexelPointer 36(imagei) 39 17
-              42:      6(int) AtomicLoad 41 12 30
-                              Store 8(origi) 42
-              48:     47(ptr) ImageTexelPointer 45(imageu) 39 17
-              49:     15(int) AtomicIAdd 48 12 30 46
-                              Store 21(origu) 49
-              51:     47(ptr) ImageTexelPointer 45(imageu) 39 17
-                              AtomicStore 51 12 33 50
-              53:     15(int) AtomicOr 23(atomu) 12 17 52
-                              Store 21(origu) 53
-              54:     15(int) AtomicXor 23(atomu) 12 17 52
+              43:      6(int) AtomicLoad 41 12 30
+                              Store 8(origi) 43
+              49:     48(ptr) ImageTexelPointer 46(imageu) 39 17
+              50:     15(int) AtomicIAdd 49 12 30 47
+                              Store 21(origu) 50
+              52:     48(ptr) ImageTexelPointer 46(imageu) 39 17
+                              AtomicStore 52 12 33 51
+              54:     15(int) AtomicOr 23(atomu) 12 17 53
                               Store 21(origu) 54
-              55:     15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26
-              56:     15(int) AtomicUMin 23(atomu) 12 17 55
-                              Store 21(origu) 56
-              58:      6(int) AtomicSMax 10(atomi) 12 17 57
-                              Store 8(origi) 58
-              59:      6(int) Load 8(origi)
-              60:      6(int) AtomicExchange 10(atomi) 12 17 59
-                              Store 8(origi) 60
-              62:     15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26
-              64:     15(int) AtomicCompareExchange 23(atomu) 12 63 63 62 61
-                              Store 21(origu) 64
-              69:     68(ptr) AccessChain 67(bufferu) 38
-              71:     15(int) AtomicIAdd 69 12 18 70
+              55:     15(int) AtomicXor 23(atomu) 12 17 53
+                              Store 21(origu) 55
+              56:     15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26
+              57:     15(int) AtomicUMin 23(atomu) 12 17 56
+                              Store 21(origu) 57
+              59:      6(int) AtomicSMax 10(atomi) 12 17 58
+                              Store 8(origi) 59
+              60:      6(int) Load 8(origi)
+              61:      6(int) AtomicExchange 10(atomi) 12 17 60
+                              Store 8(origi) 61
+              63:     15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26
+              65:     15(int) AtomicCompareExchange 23(atomu) 12 64 64 63 62
+                              Store 21(origu) 65
+              70:     69(ptr) AccessChain 68(bufferu) 38
+              72:     15(int) AtomicIAdd 70 12 18 71
                               MemoryBarrier 26 18
-                              ControlBarrier 26 26 63
+                              ControlBarrier 26 26 64
                               ControlBarrier 26 26 17
-              73:     68(ptr) AccessChain 67(bufferu) 38
-              74:     15(int) Load 73 MakePointerVisibleKHR NonPrivatePointerKHR 26
-                              Store 72(y) 74
-              75:     15(int) Load 72(y)
-              76:     68(ptr) AccessChain 67(bufferu) 38
-                              Store 76 75 MakePointerAvailableKHR NonPrivatePointerKHR 26
-              80:     68(ptr) AccessChain 79(bufferi) 38
-              81:     15(int) Load 80 MakePointerVisibleKHR NonPrivatePointerKHR 16
-                              Store 72(y) 81
-              88:     68(ptr) AccessChain 87(bufferj) 38 38 38 12
-              89:     15(int) Load 88 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 46
-                              Store 72(y) 89
-              90:     15(int) Load 72(y)
-              91:     68(ptr) AccessChain 79(bufferi) 38
-                              Store 91 90 MakePointerAvailableKHR NonPrivatePointerKHR 16
-              92:     15(int) Load 72(y)
-              93:     68(ptr) AccessChain 87(bufferj) 38 38 38 12
-                              Store 93 92 Volatile MakePointerAvailableKHR NonPrivatePointerKHR 46
-              95:     94(ptr) AccessChain 87(bufferj) 12 38
-              96:       83(A) Load 95 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 46
-              97:     94(ptr) AccessChain 87(bufferj) 38 38
-                              Store 97 96 Volatile MakePointerAvailableKHR NonPrivatePointerKHR 46
-             102:    101(ptr) AccessChain 100(bufferk) 38
-             103:     15(int) Load 102 NonPrivatePointerKHR 
-             104:     68(ptr) AccessChain 79(bufferi) 38
-                              Store 104 103 MakePointerAvailableKHR NonPrivatePointerKHR 16
-             105:          34 Load 36(imagei)
-             107:  106(ivec4) ImageRead 105 39 MakeTexelVisibleKHR NonPrivateTexelKHR VolatileTexelKHR 16
-             111:     35(ptr) AccessChain 110(imagej) 38
-             112:          34 Load 111
-             113:  106(ivec4) ImageRead 112 39 NonPrivateTexelKHR 
-             114:     35(ptr) AccessChain 110(imagej) 12
-             115:          34 Load 114
-                              ImageWrite 115 39 116 NonPrivateTexelKHR 
-             124:    123(ptr) AccessChain 122(samp) 38
-             125:         119 Load 124
-             130:  129(fvec4) ImageSampleExplicitLod 125 128 Lod NonPrivateTexelKHR 127
-             135:131(int64_t) AtomicUMax 133(atomu64) 12 17 134
-                              Store 133(atomu64) 135 MakePointerAvailableKHR NonPrivatePointerKHR 26
-             140:131(int64_t) Load 133(atomu64) MakePointerVisibleKHR NonPrivatePointerKHR 26
-             141:136(int64_t) Bitcast 140
-             142:136(int64_t) AtomicCompareExchange 138(atomi64) 12 63 63 141 139
+              74:     69(ptr) AccessChain 68(bufferu) 38
+              75:     15(int) Load 74 MakePointerVisibleKHR NonPrivatePointerKHR 26
+                              Store 73(y) 75
+              76:     15(int) Load 73(y)
+              77:     69(ptr) AccessChain 68(bufferu) 38
+                              Store 77 76 MakePointerAvailableKHR NonPrivatePointerKHR 26
+              81:     69(ptr) AccessChain 80(bufferi) 38
+              82:     15(int) Load 81 MakePointerVisibleKHR NonPrivatePointerKHR 16
+                              Store 73(y) 82
+              89:     69(ptr) AccessChain 88(bufferj) 38 38 38 12
+              90:     15(int) Load 89 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 16
+                              Store 73(y) 90
+              91:     15(int) Load 73(y)
+              92:     69(ptr) AccessChain 80(bufferi) 38
+                              Store 92 91 MakePointerAvailableKHR NonPrivatePointerKHR 16
+              93:     15(int) Load 73(y)
+              94:     69(ptr) AccessChain 88(bufferj) 38 38 38 12
+                              Store 94 93 Volatile MakePointerAvailableKHR NonPrivatePointerKHR 16
+              96:     95(ptr) AccessChain 88(bufferj) 12 38
+              97:       84(A) Load 96 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 16
+              98:     95(ptr) AccessChain 88(bufferj) 38 38
+                              Store 98 97 Volatile MakePointerAvailableKHR NonPrivatePointerKHR 16
+             103:    102(ptr) AccessChain 101(bufferk) 38
+             104:     15(int) Load 103 NonPrivatePointerKHR 
+             105:     69(ptr) AccessChain 80(bufferi) 38
+                              Store 105 104 MakePointerAvailableKHR NonPrivatePointerKHR 16
+             106:          34 Load 36(imagei)
+             108:  107(ivec4) ImageRead 106 39 MakeTexelVisibleKHR NonPrivateTexelKHR VolatileTexelKHR 16
+             112:     35(ptr) AccessChain 111(imagej) 38
+             113:          34 Load 112
+             114:  107(ivec4) ImageRead 113 39 NonPrivateTexelKHR 
+             115:     35(ptr) AccessChain 111(imagej) 12
+             116:          34 Load 115
+                              ImageWrite 116 39 117 NonPrivateTexelKHR 
+             125:    124(ptr) AccessChain 123(samp) 38
+             126:         120 Load 125
+             131:  130(fvec4) ImageSampleExplicitLod 126 129 Lod NonPrivateTexelKHR 128
+             136:132(int64_t) AtomicUMax 134(atomu64) 12 17 135
+                              Store 134(atomu64) 136 MakePointerAvailableKHR NonPrivatePointerKHR 26
+             141:132(int64_t) Load 134(atomu64) MakePointerVisibleKHR NonPrivatePointerKHR 26
+             142:137(int64_t) Bitcast 141
+             143:137(int64_t) AtomicCompareExchange 139(atomi64) 12 64 64 142 140
+             147:     69(ptr) AccessChain 146(bufferl) 38
+             148:     15(int) Load 147 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 16
+                              Store 73(y) 148
+             149:     69(ptr) AccessChain 146(bufferl) 38
+             150:     15(int) AtomicIAdd 149 16 42 71
+             154:     69(ptr) AccessChain 153(bufferm) 38
+             155:     15(int) AtomicOr 154 16 42 26
+             156:     40(ptr) ImageTexelPointer 36(imagei) 39 17
+             157:      6(int) AtomicIAdd 156 16 42 11
+             158:     69(ptr) AccessChain 68(bufferu) 38
+             159:     15(int) AtomicIAdd 158 12 17 51
+             160:     69(ptr) AccessChain 68(bufferu) 38
+             162:     15(int) AtomicIAdd 160 12 42 16
+             166:     40(ptr) ImageTexelPointer 165(imageMS) 39 12
+                              AtomicStore 166 12 33 14
+             168:     40(ptr) ImageTexelPointer 36(imagei) 39 17
+                              AtomicStore 168 12 33 167
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.memoryScopeSemantics_Error.comp.out b/Test/baseResults/spv.memoryScopeSemantics_Error.comp.out
index c4149d8..6de93fd 100644
--- a/Test/baseResults/spv.memoryScopeSemantics_Error.comp.out
+++ b/Test/baseResults/spv.memoryScopeSemantics_Error.comp.out
@@ -11,7 +11,9 @@
 ERROR: 0:24: 'atomicCompSwap' : semUnequal must not be gl_SemanticsRelease or gl_SemanticsAcquireRelease 
 ERROR: 0:25: 'memoryBarrier' : gl_SemanticsMakeVisible requires gl_SemanticsAcquire or gl_SemanticsAcquireRelease 
 ERROR: 0:26: 'memoryBarrier' : gl_SemanticsMakeAvailable requires gl_SemanticsRelease or gl_SemanticsAcquireRelease 
-ERROR: 12 compilation errors.  No code generated.
+ERROR: 0:27: 'memoryBarrier' : gl_SemanticsVolatile must not be used with memoryBarrier or controlBarrier 
+ERROR: 0:28: 'atomicCompSwap' : semEqual and semUnequal must either both include gl_SemanticsVolatile or neither 
+ERROR: 14 compilation errors.  No code generated.
 
 
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.merge-unreachable.frag.out b/Test/baseResults/spv.merge-unreachable.frag.out
index 7ec0f33..3eab4ec 100644
--- a/Test/baseResults/spv.merge-unreachable.frag.out
+++ b/Test/baseResults/spv.merge-unreachable.frag.out
@@ -1,6 +1,6 @@
 spv.merge-unreachable.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 25
 
                               Capability Shader
@@ -37,5 +37,5 @@
               23:               Label
                                 Return
               21:             Label
-                              Return
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/spv.meshShaderBuiltins.mesh.out b/Test/baseResults/spv.meshShaderBuiltins.mesh.out
index 8090f7b..cea7e4d 100644
--- a/Test/baseResults/spv.meshShaderBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderBuiltins.mesh.out
@@ -1,7 +1,7 @@
 spv.meshShaderBuiltins.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 146
+// Generated by (magic number): 80008
+// Id's are bound by 148
 
                               Capability ClipDistance
                               Capability CullDistance
@@ -14,7 +14,7 @@
                               Extension  "SPV_NV_viewport_array2"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint MeshNV 4  "main" 11 17 34 88 128 139 143
+                              EntryPoint MeshNV 4  "main" 11 17 34 88 129 142 146
                               ExecutionMode 4 LocalSize 32 1 1
                               ExecutionMode 4 OutputVertices 81
                               ExecutionMode 4 OutputPrimitivesNV 32
@@ -43,9 +43,9 @@
                               MemberName 84(gl_MeshPerPrimitiveNV) 4  "gl_LayerPerViewNV"
                               MemberName 84(gl_MeshPerPrimitiveNV) 5  "gl_ViewportMaskPerViewNV"
                               Name 88  "gl_MeshPrimitivesNV"
-                              Name 128  "gl_PrimitiveIndicesNV"
-                              Name 139  "gl_DrawID"
-                              Name 143  "gl_PrimitiveCountNV"
+                              Name 129  "gl_PrimitiveIndicesNV"
+                              Name 142  "gl_DrawID"
+                              Name 146  "gl_PrimitiveCountNV"
                               Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
                               MemberDecorate 30(gl_MeshPerVertexNV) 0 BuiltIn Position
@@ -74,10 +74,10 @@
                               MemberDecorate 84(gl_MeshPerPrimitiveNV) 5 PerViewNV
                               MemberDecorate 84(gl_MeshPerPrimitiveNV) 5 BuiltIn ViewportMaskPerViewNV
                               Decorate 84(gl_MeshPerPrimitiveNV) Block
-                              Decorate 128(gl_PrimitiveIndicesNV) BuiltIn PrimitiveIndicesNV
-                              Decorate 139(gl_DrawID) BuiltIn DrawIndex
-                              Decorate 143(gl_PrimitiveCountNV) BuiltIn PrimitiveCountNV
-                              Decorate 145 BuiltIn WorkgroupSize
+                              Decorate 129(gl_PrimitiveIndicesNV) BuiltIn PrimitiveIndicesNV
+                              Decorate 142(gl_DrawID) BuiltIn DrawIndex
+                              Decorate 146(gl_PrimitiveCountNV) BuiltIn PrimitiveCountNV
+                              Decorate 147 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -130,17 +130,18 @@
               94:     36(int) Constant 7
               97:     36(int) Constant 8
              100:     36(int) Constant 9
-             126:             TypeArray 6(int) 31
-             127:             TypePointer Output 126
-128(gl_PrimitiveIndicesNV):    127(ptr) Variable Output
-             129:      6(int) Constant 257
-             130:             TypePointer Output 6(int)
-             138:             TypePointer Input 36(int)
-  139(gl_DrawID):    138(ptr) Variable Input
-             142:      6(int) Constant 16909060
-143(gl_PrimitiveCountNV):    130(ptr) Variable Output
-             144:      6(int) Constant 96
-             145:    9(ivec3) ConstantComposite 85 27 27
+             126:      6(int) Constant 96
+             127:             TypeArray 6(int) 126
+             128:             TypePointer Output 127
+129(gl_PrimitiveIndicesNV):    128(ptr) Variable Output
+             130:      6(int) Constant 257
+             131:             TypePointer Output 6(int)
+             133:     36(int) Constant 95
+             141:             TypePointer Input 36(int)
+  142(gl_DrawID):    141(ptr) Variable Input
+             145:      6(int) Constant 16909060
+146(gl_PrimitiveCountNV):    131(ptr) Variable Output
+             147:    9(ivec3) ConstantComposite 85 27 27
          4(main):           2 Function None 3
                5:             Label
           8(iid):      7(ptr) Variable Function
@@ -239,19 +240,21 @@
                               Store 125 124
                               MemoryBarrier 27 55
                               ControlBarrier 56 56 55
-             131:    130(ptr) AccessChain 128(gl_PrimitiveIndicesNV) 37
-                              Store 131 129
-             132:      6(int) Load 16(gid)
-             133:      6(int) Load 16(gid)
-             134:      6(int) ISub 133 27
-             135:    130(ptr) AccessChain 128(gl_PrimitiveIndicesNV) 134
-             136:      6(int) Load 135
-             137:    130(ptr) AccessChain 128(gl_PrimitiveIndicesNV) 132
-                              Store 137 136
-             140:     36(int) Load 139(gl_DrawID)
-             141:      6(int) Bitcast 140
-             142:         141 WritePackedPrimitiveIndices4x8NV
-                              Store 143(gl_PrimitiveCountNV) 144
+             132:    131(ptr) AccessChain 129(gl_PrimitiveIndicesNV) 37
+                              Store 132 130
+             134:    131(ptr) AccessChain 129(gl_PrimitiveIndicesNV) 133
+                              Store 134 56
+             135:      6(int) Load 16(gid)
+             136:      6(int) Load 16(gid)
+             137:      6(int) ISub 136 27
+             138:    131(ptr) AccessChain 129(gl_PrimitiveIndicesNV) 137
+             139:      6(int) Load 138
+             140:    131(ptr) AccessChain 129(gl_PrimitiveIndicesNV) 135
+                              Store 140 139
+             143:     36(int) Load 142(gl_DrawID)
+             144:      6(int) Bitcast 143
+             145:         144 WritePackedPrimitiveIndices4x8NV
+                              Store 146(gl_PrimitiveCountNV) 126
                               MemoryBarrier 27 55
                               ControlBarrier 56 56 55
                               Return
diff --git a/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out
index b912aca..75f8c63 100644
--- a/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderPerViewBuiltins.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 126
 
                               Capability MultiViewport
diff --git a/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out b/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
index 7e7a37d..de019a2 100644
--- a/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
+++ b/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
@@ -1,13 +1,13 @@
 spv.meshShaderPerViewUserDefined.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 90
+// Generated by (magic number): 80008
+// Id's are bound by 108
 
                               Capability MeshShadingNV
                               Extension  "SPV_NV_mesh_shader"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint MeshNV 4  "main" 11 20 21 35 67
+                              EntryPoint MeshNV 4  "main" 11 20 21 35 67 92 95 96 97 102 105 106 107
                               ExecutionMode 4 LocalSize 32 1 1
                               ExecutionMode 4 OutputVertices 81
                               ExecutionMode 4 OutputPrimitivesNV 32
@@ -32,6 +32,14 @@
                               MemberName 64(perviewBlock) 2  "color7"
                               MemberName 64(perviewBlock) 3  "color8"
                               Name 67  "b2"
+                              Name 92  "nonBlk1"
+                              Name 95  "nonBlk2"
+                              Name 96  "nonBlk3"
+                              Name 97  "nonBlk4"
+                              Name 102  "nonBlkArr1"
+                              Name 105  "nonBlkArr2"
+                              Name 106  "nonBlkArr3"
+                              Name 107  "nonBlkArr4"
                               Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 20(gl_MeshViewIndicesNV) BuiltIn MeshViewIndicesNV
                               Decorate 21(gl_MeshViewCountNV) BuiltIn MeshViewCountNV
@@ -50,6 +58,26 @@
                               Decorate 64(perviewBlock) Block
                               Decorate 67(b2) Location 10
                               Decorate 89 BuiltIn WorkgroupSize
+                              Decorate 92(nonBlk1) PerViewNV
+                              Decorate 92(nonBlk1) Location 18
+                              Decorate 95(nonBlk2) PerPrimitiveNV
+                              Decorate 95(nonBlk2) PerViewNV
+                              Decorate 95(nonBlk2) Location 19
+                              Decorate 96(nonBlk3) PerViewNV
+                              Decorate 96(nonBlk3) Location 20
+                              Decorate 97(nonBlk4) PerPrimitiveNV
+                              Decorate 97(nonBlk4) PerViewNV
+                              Decorate 97(nonBlk4) Location 21
+                              Decorate 102(nonBlkArr1) PerViewNV
+                              Decorate 102(nonBlkArr1) Location 22
+                              Decorate 105(nonBlkArr2) PerPrimitiveNV
+                              Decorate 105(nonBlkArr2) PerViewNV
+                              Decorate 105(nonBlkArr2) Location 24
+                              Decorate 106(nonBlkArr3) PerViewNV
+                              Decorate 106(nonBlkArr3) Location 26
+                              Decorate 107(nonBlkArr4) PerPrimitiveNV
+                              Decorate 107(nonBlkArr4) PerViewNV
+                              Decorate 107(nonBlkArr4) Location 28
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -106,6 +134,24 @@
               86:   27(fvec4) ConstantComposite 85 85 85 85
               88:      6(int) Constant 32
               89:    9(ivec3) ConstantComposite 88 60 60
+              90:             TypeArray 63 32
+              91:             TypePointer Output 90
+     92(nonBlk1):     91(ptr) Variable Output
+              93:             TypeArray 63 88
+              94:             TypePointer Output 93
+     95(nonBlk2):     94(ptr) Variable Output
+     96(nonBlk3):     91(ptr) Variable Output
+     97(nonBlk4):     94(ptr) Variable Output
+              98:             TypeArray 27(fvec4) 62
+              99:             TypeArray 98 17
+             100:             TypeArray 99 32
+             101:             TypePointer Output 100
+ 102(nonBlkArr1):    101(ptr) Variable Output
+             103:             TypeArray 99 88
+             104:             TypePointer Output 103
+ 105(nonBlkArr2):    104(ptr) Variable Output
+ 106(nonBlkArr3):    101(ptr) Variable Output
+ 107(nonBlkArr4):    104(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
           8(iid):      7(ptr) Variable Function
diff --git a/Test/baseResults/spv.meshShaderPerView_Errors.mesh.out b/Test/baseResults/spv.meshShaderPerView_Errors.mesh.out
new file mode 100644
index 0000000..aa0b99e
--- /dev/null
+++ b/Test/baseResults/spv.meshShaderPerView_Errors.mesh.out
@@ -0,0 +1,11 @@
+spv.meshShaderPerView_Errors.mesh
+ERROR: 0:19: '[]' : only outermost dimension of an array of arrays can be implicitly sized 
+ERROR: 0:20: '[]' : mesh view output array size must be gl_MaxMeshViewCountNV or implicitly sized 
+ERROR: 0:21: 'perviewNV' : requires a view array dimension 
+ERROR: 0:25: '[]' : only outermost dimension of an array of arrays can be implicitly sized 
+ERROR: 0:26: '[]' : mesh view output array size must be gl_MaxMeshViewCountNV or implicitly sized 
+ERROR: 0:27: 'perviewNV' : requires a view array dimension 
+ERROR: 6 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out b/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
index f4491c0..e9ebd44 100644
--- a/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
@@ -1,7 +1,7 @@
 spv.meshShaderRedeclBuiltins.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 120
+// Generated by (magic number): 80008
+// Id's are bound by 129
 
                               Capability ClipDistance
                               Capability CullDistance
@@ -12,7 +12,7 @@
                               Extension  "SPV_NV_viewport_array2"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint MeshNV 4  "main" 11 17 28 81
+                              EntryPoint MeshNV 4  "main" 11 17 28 81 122 127
                               ExecutionMode 4 LocalSize 32 1 1
                               ExecutionMode 4 OutputVertices 81
                               ExecutionMode 4 OutputPrimitivesNV 32
@@ -36,6 +36,8 @@
                               MemberName 77(gl_MeshPerPrimitiveNV) 2  "gl_ViewportIndex"
                               MemberName 77(gl_MeshPerPrimitiveNV) 3  "gl_ViewportMask"
                               Name 81  "gl_MeshPrimitivesNV"
+                              Name 122  "gl_PrimitiveIndicesNV"
+                              Name 127  "gl_PrimitiveCountNV"
                               Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
                               MemberDecorate 24(gl_MeshPerVertexNV) 0 BuiltIn Position
@@ -52,7 +54,9 @@
                               MemberDecorate 77(gl_MeshPerPrimitiveNV) 3 PerPrimitiveNV
                               MemberDecorate 77(gl_MeshPerPrimitiveNV) 3 BuiltIn ViewportMaskNV
                               Decorate 77(gl_MeshPerPrimitiveNV) Block
-                              Decorate 119 BuiltIn WorkgroupSize
+                              Decorate 122(gl_PrimitiveIndicesNV) BuiltIn PrimitiveIndicesNV
+                              Decorate 127(gl_PrimitiveCountNV) BuiltIn PrimitiveCountNV
+                              Decorate 128 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -98,7 +102,14 @@
               87:     30(int) Constant 7
               90:     30(int) Constant 8
               93:     30(int) Constant 9
-             119:    9(ivec3) ConstantComposite 78 49 49
+             119:      6(int) Constant 96
+             120:             TypeArray 6(int) 119
+             121:             TypePointer Output 120
+122(gl_PrimitiveIndicesNV):    121(ptr) Variable Output
+             123:             TypePointer Output 6(int)
+             125:     30(int) Constant 95
+127(gl_PrimitiveCountNV):    123(ptr) Variable Output
+             128:    9(ivec3) ConstantComposite 78 49 49
          4(main):           2 Function None 3
                5:             Label
           8(iid):      7(ptr) Variable Function
@@ -197,5 +208,10 @@
                               Store 118 117
                               MemoryBarrier 49 50
                               ControlBarrier 51 51 50
+             124:    123(ptr) AccessChain 122(gl_PrimitiveIndicesNV) 31
+                              Store 124 49
+             126:    123(ptr) AccessChain 122(gl_PrimitiveIndicesNV) 125
+                              Store 126 51
+                              Store 127(gl_PrimitiveCountNV) 119
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out b/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out
index 6672dc2..38542d5 100644
--- a/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderRedeclPerViewBuiltins.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 120
 
                               Capability PerViewAttributesNV
diff --git a/Test/baseResults/spv.meshShaderSharedMem.mesh.out b/Test/baseResults/spv.meshShaderSharedMem.mesh.out
index dd0003d..adac07f 100644
--- a/Test/baseResults/spv.meshShaderSharedMem.mesh.out
+++ b/Test/baseResults/spv.meshShaderSharedMem.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderSharedMem.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 77
 
                               Capability StorageImageWriteWithoutFormat
diff --git a/Test/baseResults/spv.meshShaderTaskMem.mesh.out b/Test/baseResults/spv.meshShaderTaskMem.mesh.out
index e14f7a8..057e0fd 100644
--- a/Test/baseResults/spv.meshShaderTaskMem.mesh.out
+++ b/Test/baseResults/spv.meshShaderTaskMem.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderTaskMem.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 58
 
                               Capability MeshShadingNV
diff --git a/Test/baseResults/spv.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.meshShaderUserDefined.mesh.out
index c3ec915..43579bb 100644
--- a/Test/baseResults/spv.meshShaderUserDefined.mesh.out
+++ b/Test/baseResults/spv.meshShaderUserDefined.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderUserDefined.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 138
 
                               Capability MeshShadingNV
diff --git a/Test/baseResults/spv.meshTaskShader.task.out b/Test/baseResults/spv.meshTaskShader.task.out
index 517cbea..96d37c4 100644
--- a/Test/baseResults/spv.meshTaskShader.task.out
+++ b/Test/baseResults/spv.meshTaskShader.task.out
@@ -1,14 +1,14 @@
 spv.meshTaskShader.task
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 104
+// Generated by (magic number): 80008
+// Id's are bound by 116
 
                               Capability StorageImageWriteWithoutFormat
                               Capability MeshShadingNV
                               Extension  "SPV_NV_mesh_shader"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TaskNV 4  "main" 11 17 80 101
+                              EntryPoint TaskNV 4  "main" 11 17 24 25 90 113
                               ExecutionMode 4 LocalSize 32 1 1
                               Source GLSL 450
                               SourceExtension  "GL_NV_mesh_shader"
@@ -17,34 +17,42 @@
                               Name 11  "gl_LocalInvocationID"
                               Name 16  "gid"
                               Name 17  "gl_WorkGroupID"
-                              Name 20  "i"
-                              Name 34  "mem"
-                              Name 37  "block0"
-                              MemberName 37(block0) 0  "uni_value"
-                              Name 39  ""
-                              Name 55  "uni_image"
-                              Name 78  "Task"
-                              MemberName 78(Task) 0  "dummy"
-                              MemberName 78(Task) 1  "submesh"
-                              Name 80  "mytask"
-                              Name 101  "gl_TaskCountNV"
+                              Name 20  "viewID"
+                              Name 24  "gl_MeshViewIndicesNV"
+                              Name 25  "gl_MeshViewCountNV"
+                              Name 30  "i"
+                              Name 44  "mem"
+                              Name 47  "block0"
+                              MemberName 47(block0) 0  "uni_value"
+                              Name 49  ""
+                              Name 65  "uni_image"
+                              Name 88  "Task"
+                              MemberName 88(Task) 0  "dummy"
+                              MemberName 88(Task) 1  "submesh"
+                              MemberName 88(Task) 2  "viewID"
+                              Name 90  "mytask"
+                              Name 113  "gl_TaskCountNV"
                               Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
-                              MemberDecorate 37(block0) 0 Offset 0
-                              Decorate 37(block0) Block
-                              Decorate 39 DescriptorSet 0
-                              Decorate 39 Binding 0
-                              Decorate 55(uni_image) DescriptorSet 0
-                              Decorate 55(uni_image) Binding 0
-                              Decorate 55(uni_image) NonReadable
-                              Decorate 77 ArrayStride 8
-                              MemberDecorate 78(Task) 0 PerTaskNV
-                              MemberDecorate 78(Task) 0 Offset 0
-                              MemberDecorate 78(Task) 1 PerTaskNV
-                              MemberDecorate 78(Task) 1 Offset 8
-                              Decorate 78(Task) Block
-                              Decorate 101(gl_TaskCountNV) BuiltIn TaskCountNV
-                              Decorate 103 BuiltIn WorkgroupSize
+                              Decorate 24(gl_MeshViewIndicesNV) BuiltIn MeshViewIndicesNV
+                              Decorate 25(gl_MeshViewCountNV) BuiltIn MeshViewCountNV
+                              MemberDecorate 47(block0) 0 Offset 0
+                              Decorate 47(block0) Block
+                              Decorate 49 DescriptorSet 0
+                              Decorate 49 Binding 0
+                              Decorate 65(uni_image) DescriptorSet 0
+                              Decorate 65(uni_image) Binding 0
+                              Decorate 65(uni_image) NonReadable
+                              Decorate 87 ArrayStride 8
+                              MemberDecorate 88(Task) 0 PerTaskNV
+                              MemberDecorate 88(Task) 0 Offset 0
+                              MemberDecorate 88(Task) 1 PerTaskNV
+                              MemberDecorate 88(Task) 1 Offset 8
+                              MemberDecorate 88(Task) 2 PerTaskNV
+                              MemberDecorate 88(Task) 2 Offset 32
+                              Decorate 88(Task) Block
+                              Decorate 113(gl_TaskCountNV) BuiltIn TaskCountNV
+                              Decorate 115 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -55,119 +63,133 @@
               12:      6(int) Constant 0
               13:             TypePointer Input 6(int)
 17(gl_WorkGroupID):     10(ptr) Variable Input
-              27:      6(int) Constant 10
-              28:             TypeBool
-              30:             TypeFloat 32
-              31:             TypeVector 30(float) 4
-              32:             TypeArray 31(fvec4) 27
-              33:             TypePointer Workgroup 32
-         34(mem):     33(ptr) Variable Workgroup
-      37(block0):             TypeStruct 6(int)
-              38:             TypePointer Uniform 37(block0)
-              39:     38(ptr) Variable Uniform
-              40:             TypeInt 32 1
-              41:     40(int) Constant 0
-              42:             TypePointer Uniform 6(int)
-              48:             TypePointer Workgroup 31(fvec4)
-              51:     40(int) Constant 1
-              53:             TypeImage 30(float) 2D nonsampled format:Unknown
-              54:             TypePointer UniformConstant 53
-   55(uni_image):     54(ptr) Variable UniformConstant
-              59:             TypeVector 40(int) 2
-              69:      6(int) Constant 1
-              73:      6(int) Constant 264
-              74:      6(int) Constant 2
-              75:             TypeVector 30(float) 2
-              76:      6(int) Constant 3
-              77:             TypeArray 75(fvec2) 76
-        78(Task):             TypeStruct 75(fvec2) 77
-              79:             TypePointer Output 78(Task)
-      80(mytask):     79(ptr) Variable Output
-              81:   30(float) Constant 1106247680
-              82:   30(float) Constant 1106771968
-              83:   75(fvec2) ConstantComposite 81 82
-              84:             TypePointer Output 75(fvec2)
-              86:   30(float) Constant 1107296256
-              87:   30(float) Constant 1107558400
-              88:   75(fvec2) ConstantComposite 86 87
-              90:   30(float) Constant 1107820544
-              91:   30(float) Constant 1108082688
-              92:   75(fvec2) ConstantComposite 90 91
-              94:     40(int) Constant 2
-             100:             TypePointer Output 6(int)
-101(gl_TaskCountNV):    100(ptr) Variable Output
-             102:      6(int) Constant 32
-             103:    9(ivec3) ConstantComposite 102 69 69
+              21:      6(int) Constant 4
+              22:             TypeArray 6(int) 21
+              23:             TypePointer Input 22
+24(gl_MeshViewIndicesNV):     23(ptr) Variable Input
+25(gl_MeshViewCountNV):     13(ptr) Variable Input
+              37:      6(int) Constant 10
+              38:             TypeBool
+              40:             TypeFloat 32
+              41:             TypeVector 40(float) 4
+              42:             TypeArray 41(fvec4) 37
+              43:             TypePointer Workgroup 42
+         44(mem):     43(ptr) Variable Workgroup
+      47(block0):             TypeStruct 6(int)
+              48:             TypePointer Uniform 47(block0)
+              49:     48(ptr) Variable Uniform
+              50:             TypeInt 32 1
+              51:     50(int) Constant 0
+              52:             TypePointer Uniform 6(int)
+              58:             TypePointer Workgroup 41(fvec4)
+              61:     50(int) Constant 1
+              63:             TypeImage 40(float) 2D nonsampled format:Unknown
+              64:             TypePointer UniformConstant 63
+   65(uni_image):     64(ptr) Variable UniformConstant
+              69:             TypeVector 50(int) 2
+              79:      6(int) Constant 1
+              83:      6(int) Constant 264
+              84:      6(int) Constant 2
+              85:             TypeVector 40(float) 2
+              86:      6(int) Constant 3
+              87:             TypeArray 85(fvec2) 86
+        88(Task):             TypeStruct 85(fvec2) 87 6(int)
+              89:             TypePointer Output 88(Task)
+      90(mytask):     89(ptr) Variable Output
+              91:   40(float) Constant 1106247680
+              92:   40(float) Constant 1106771968
+              93:   85(fvec2) ConstantComposite 91 92
+              94:             TypePointer Output 85(fvec2)
+              96:   40(float) Constant 1107296256
+              97:   40(float) Constant 1107558400
+              98:   85(fvec2) ConstantComposite 96 97
+             100:   40(float) Constant 1107820544
+             101:   40(float) Constant 1108082688
+             102:   85(fvec2) ConstantComposite 100 101
+             104:     50(int) Constant 2
+             111:             TypePointer Output 6(int)
+113(gl_TaskCountNV):    111(ptr) Variable Output
+             114:      6(int) Constant 32
+             115:    9(ivec3) ConstantComposite 114 79 79
          4(main):           2 Function None 3
                5:             Label
           8(iid):      7(ptr) Variable Function
          16(gid):      7(ptr) Variable Function
-           20(i):      7(ptr) Variable Function
+      20(viewID):      7(ptr) Variable Function
+           30(i):      7(ptr) Variable Function
               14:     13(ptr) AccessChain 11(gl_LocalInvocationID) 12
               15:      6(int) Load 14
                               Store 8(iid) 15
               18:     13(ptr) AccessChain 17(gl_WorkGroupID) 12
               19:      6(int) Load 18
                               Store 16(gid) 19
-                              Store 20(i) 12
-                              Branch 21
-              21:             Label
-                              LoopMerge 23 24 None
-                              Branch 25
-              25:             Label
-              26:      6(int) Load 20(i)
-              29:    28(bool) ULessThan 26 27
-                              BranchConditional 29 22 23
-              22:               Label
-              35:      6(int)   Load 20(i)
-              36:      6(int)   Load 20(i)
-              43:     42(ptr)   AccessChain 39 41
-              44:      6(int)   Load 43
-              45:      6(int)   IAdd 36 44
-              46:   30(float)   ConvertUToF 45
-              47:   31(fvec4)   CompositeConstruct 46 46 46 46
-              49:     48(ptr)   AccessChain 34(mem) 35
-                                Store 49 47
-                                Branch 24
-              24:               Label
-              50:      6(int)   Load 20(i)
-              52:      6(int)   IAdd 50 51
-                                Store 20(i) 52
-                                Branch 21
-              23:             Label
-              56:          53 Load 55(uni_image)
-              57:      6(int) Load 8(iid)
-              58:     40(int) Bitcast 57
-              60:   59(ivec2) CompositeConstruct 58 58
-              61:      6(int) Load 16(gid)
-              62:     48(ptr) AccessChain 34(mem) 61
-              63:   31(fvec4) Load 62
-                              ImageWrite 56 60 63
-              64:          53 Load 55(uni_image)
-              65:      6(int) Load 8(iid)
-              66:     40(int) Bitcast 65
-              67:   59(ivec2) CompositeConstruct 66 66
-              68:      6(int) Load 16(gid)
-              70:      6(int) IAdd 68 69
-              71:     48(ptr) AccessChain 34(mem) 70
-              72:   31(fvec4) Load 71
-                              ImageWrite 64 67 72
-                              MemoryBarrier 69 73
-                              ControlBarrier 74 74 73
-              85:     84(ptr) AccessChain 80(mytask) 41
-                              Store 85 83
-              89:     84(ptr) AccessChain 80(mytask) 51 41
-                              Store 89 88
-              93:     84(ptr) AccessChain 80(mytask) 51 51
-                              Store 93 92
-              95:      6(int) Load 16(gid)
-              96:      6(int) UMod 95 74
-              97:     84(ptr) AccessChain 80(mytask) 51 96
-              98:   75(fvec2) Load 97
-              99:     84(ptr) AccessChain 80(mytask) 51 94
+              26:      6(int) Load 25(gl_MeshViewCountNV)
+              27:      6(int) UMod 26 21
+              28:     13(ptr) AccessChain 24(gl_MeshViewIndicesNV) 27
+              29:      6(int) Load 28
+                              Store 20(viewID) 29
+                              Store 30(i) 12
+                              Branch 31
+              31:             Label
+                              LoopMerge 33 34 None
+                              Branch 35
+              35:             Label
+              36:      6(int) Load 30(i)
+              39:    38(bool) ULessThan 36 37
+                              BranchConditional 39 32 33
+              32:               Label
+              45:      6(int)   Load 30(i)
+              46:      6(int)   Load 30(i)
+              53:     52(ptr)   AccessChain 49 51
+              54:      6(int)   Load 53
+              55:      6(int)   IAdd 46 54
+              56:   40(float)   ConvertUToF 55
+              57:   41(fvec4)   CompositeConstruct 56 56 56 56
+              59:     58(ptr)   AccessChain 44(mem) 45
+                                Store 59 57
+                                Branch 34
+              34:               Label
+              60:      6(int)   Load 30(i)
+              62:      6(int)   IAdd 60 61
+                                Store 30(i) 62
+                                Branch 31
+              33:             Label
+              66:          63 Load 65(uni_image)
+              67:      6(int) Load 8(iid)
+              68:     50(int) Bitcast 67
+              70:   69(ivec2) CompositeConstruct 68 68
+              71:      6(int) Load 16(gid)
+              72:     58(ptr) AccessChain 44(mem) 71
+              73:   41(fvec4) Load 72
+                              ImageWrite 66 70 73
+              74:          63 Load 65(uni_image)
+              75:      6(int) Load 8(iid)
+              76:     50(int) Bitcast 75
+              77:   69(ivec2) CompositeConstruct 76 76
+              78:      6(int) Load 16(gid)
+              80:      6(int) IAdd 78 79
+              81:     58(ptr) AccessChain 44(mem) 80
+              82:   41(fvec4) Load 81
+                              ImageWrite 74 77 82
+                              MemoryBarrier 79 83
+                              ControlBarrier 84 84 83
+              95:     94(ptr) AccessChain 90(mytask) 51
+                              Store 95 93
+              99:     94(ptr) AccessChain 90(mytask) 61 51
                               Store 99 98
-                              MemoryBarrier 69 73
-                              ControlBarrier 74 74 73
-                              Store 101(gl_TaskCountNV) 76
+             103:     94(ptr) AccessChain 90(mytask) 61 61
+                              Store 103 102
+             105:      6(int) Load 16(gid)
+             106:      6(int) UMod 105 84
+             107:     94(ptr) AccessChain 90(mytask) 61 106
+             108:   85(fvec2) Load 107
+             109:     94(ptr) AccessChain 90(mytask) 61 104
+                              Store 109 108
+             110:      6(int) Load 20(viewID)
+             112:    111(ptr) AccessChain 90(mytask) 104
+                              Store 112 110
+                              MemoryBarrier 79 83
+                              ControlBarrier 84 84 83
+                              Store 113(gl_TaskCountNV) 86
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.multiStruct.comp.out b/Test/baseResults/spv.multiStruct.comp.out
index 7e88a59..679a4bd 100644
--- a/Test/baseResults/spv.multiStruct.comp.out
+++ b/Test/baseResults/spv.multiStruct.comp.out
@@ -1,6 +1,6 @@
 spv.multiStruct.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 161
 
                               Capability Shader
diff --git a/Test/baseResults/spv.multiStructFuncall.frag.out b/Test/baseResults/spv.multiStructFuncall.frag.out
index a3a4480..9312fe9 100644
--- a/Test/baseResults/spv.multiStructFuncall.frag.out
+++ b/Test/baseResults/spv.multiStructFuncall.frag.out
@@ -1,6 +1,6 @@
 spv.multiStructFuncall.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/spv.multiView.frag.out b/Test/baseResults/spv.multiView.frag.out
index 9dbd36b..5363352 100644
--- a/Test/baseResults/spv.multiView.frag.out
+++ b/Test/baseResults/spv.multiView.frag.out
@@ -1,6 +1,6 @@
 spv.multiView.frag
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 17
 
                               Capability Shader
diff --git a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
index 16bea3d..16e81a1 100644
--- a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
+++ b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
@@ -1,8 +1,7 @@
 spv.multiviewPerViewAttributes.tesc
-Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 37
+// Generated by (magic number): 80008
+// Id's are bound by 41
 
                               Capability Tessellation
                               Capability PerViewAttributesNV
@@ -24,7 +23,7 @@
                               MemberName 27(gl_PerVertex) 1  "gl_PointSize"
                               MemberName 27(gl_PerVertex) 2  "gl_ClipDistance"
                               MemberName 27(gl_PerVertex) 3  "gl_CullDistance"
-                              MemberName 27(gl_PerVertex) 5  "gl_PositionPerViewNV"
+                              MemberName 27(gl_PerVertex) 4  "gl_PositionPerViewNV"
                               Name 31  "gl_in"
                               MemberDecorate 13(gl_PerVertex) 0 BuiltIn PositionPerViewNV
                               MemberDecorate 13(gl_PerVertex) 1 BuiltIn ViewportMaskPerViewNV
@@ -34,6 +33,7 @@
                               MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance
+                              MemberDecorate 27(gl_PerVertex) 4 BuiltIn PositionPerViewNV
                               Decorate 27(gl_PerVertex) Block
                2:             TypeVoid
                3:             TypeFunction 2
@@ -61,7 +61,8 @@
               30:             TypePointer Input 29
        31(gl_in):     30(ptr) Variable Input
               32:             TypePointer Input 7(fvec4)
-              35:             TypePointer Output 7(fvec4)
+              35:     11(int) Constant 4
+              39:             TypePointer Output 7(fvec4)
          4(main):           2 Function None 3
                5:             Label
               20:     11(int) Load 19(gl_InvocationID)
@@ -70,7 +71,10 @@
               25:     11(int) Load 19(gl_InvocationID)
               33:     32(ptr) AccessChain 31(gl_in) 21 22
               34:    7(fvec4) Load 33
-              36:     35(ptr) AccessChain 17(gl_out) 25 22 22
-                              Store 36 34
+              36:     32(ptr) AccessChain 31(gl_in) 21 35 22
+              37:    7(fvec4) Load 36
+              38:    7(fvec4) FAdd 34 37
+              40:     39(ptr) AccessChain 17(gl_out) 25 22 22
+                              Store 40 38
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.multiviewPerViewAttributes.vert.out b/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
index c8377cf..acca44e 100644
--- a/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
+++ b/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
@@ -1,6 +1,6 @@
 spv.multiviewPerViewAttributes.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.newTexture.frag.out b/Test/baseResults/spv.newTexture.frag.out
index 1bad3fa..6bbb032 100644
--- a/Test/baseResults/spv.newTexture.frag.out
+++ b/Test/baseResults/spv.newTexture.frag.out
@@ -1,7 +1,7 @@
 spv.newTexture.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 284
 
                               Capability Shader
diff --git a/Test/baseResults/spv.noBuiltInLoc.vert.out b/Test/baseResults/spv.noBuiltInLoc.vert.out
index 066f81f..7a45e72 100644
--- a/Test/baseResults/spv.noBuiltInLoc.vert.out
+++ b/Test/baseResults/spv.noBuiltInLoc.vert.out
@@ -1,6 +1,6 @@
 spv.noBuiltInLoc.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/spv.noDeadDecorations.vert.out b/Test/baseResults/spv.noDeadDecorations.vert.out
index d7e3702..a555ba2 100644
--- a/Test/baseResults/spv.noDeadDecorations.vert.out
+++ b/Test/baseResults/spv.noDeadDecorations.vert.out
@@ -1,6 +1,6 @@
 spv.noDeadDecorations.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/spv.noWorkgroup.comp.out b/Test/baseResults/spv.noWorkgroup.comp.out
index 2624fdc..92ae670 100644
--- a/Test/baseResults/spv.noWorkgroup.comp.out
+++ b/Test/baseResults/spv.noWorkgroup.comp.out
@@ -1,6 +1,6 @@
 spv.noWorkgroup.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 12
 
                               Capability Shader
diff --git a/Test/baseResults/spv.nonSquare.vert.out b/Test/baseResults/spv.nonSquare.vert.out
index 679a5f0..9746fe0 100644
--- a/Test/baseResults/spv.nonSquare.vert.out
+++ b/Test/baseResults/spv.nonSquare.vert.out
@@ -1,6 +1,6 @@
 spv.nonSquare.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 90
 
                               Capability Shader
diff --git a/Test/baseResults/spv.nonuniform.frag.out b/Test/baseResults/spv.nonuniform.frag.out
index 972276a..6b7d407 100644
--- a/Test/baseResults/spv.nonuniform.frag.out
+++ b/Test/baseResults/spv.nonuniform.frag.out
@@ -1,28 +1,28 @@
 spv.nonuniform.frag
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 210
+// Generated by (magic number): 80008
+// Id's are bound by 212
 
                               Capability Shader
                               Capability InputAttachment
                               Capability SampledBuffer
                               Capability ImageBuffer
-                              Capability CapabilityShaderNonUniformEXT
-                              Capability CapabilityRuntimeDescriptorArrayEXT
-                              Capability CapabilityInputAttachmentArrayDynamicIndexingEXT
-                              Capability CapabilityUniformTexelBufferArrayDynamicIndexingEXT
-                              Capability CapabilityStorageTexelBufferArrayDynamicIndexingEXT
-                              Capability CapabilityUniformBufferArrayNonUniformIndexingEXT
-                              Capability CapabilitySampledImageArrayNonUniformIndexingEXT
-                              Capability CapabilityStorageBufferArrayNonUniformIndexingEXT
-                              Capability CapabilityStorageImageArrayNonUniformIndexingEXT
-                              Capability CapabilityInputAttachmentArrayNonUniformIndexingEXT
-                              Capability CapabilityUniformTexelBufferArrayNonUniformIndexingEXT
-                              Capability CapabilityStorageTexelBufferArrayNonUniformIndexingEXT
+                              Capability ShaderNonUniformEXT
+                              Capability RuntimeDescriptorArrayEXT
+                              Capability InputAttachmentArrayDynamicIndexingEXT
+                              Capability UniformTexelBufferArrayDynamicIndexingEXT
+                              Capability StorageTexelBufferArrayDynamicIndexingEXT
+                              Capability UniformBufferArrayNonUniformIndexingEXT
+                              Capability SampledImageArrayNonUniformIndexingEXT
+                              Capability StorageBufferArrayNonUniformIndexingEXT
+                              Capability StorageImageArrayNonUniformIndexingEXT
+                              Capability InputAttachmentArrayNonUniformIndexingEXT
+                              Capability UniformTexelBufferArrayNonUniformIndexingEXT
+                              Capability StorageTexelBufferArrayNonUniformIndexingEXT
                               Extension  "SPV_EXT_descriptor_indexing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 33 90
+                              EntryPoint Fragment 4  "main" 35 92
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               SourceExtension  "GL_EXT_nonuniform_qualifier"
@@ -34,189 +34,217 @@
                               Name 17  "nu_li"
                               Name 18  "param"
                               Name 20  "param"
-                              Name 30  "b"
-                              Name 33  "nu_inv4"
-                              Name 39  "nu_gf"
-                              Name 45  "inputAttachmentDyn"
-                              Name 46  "dyn_i"
-                              Name 62  "uniformTexelBufferDyn"
-                              Name 76  "storageTexelBufferDyn"
-                              Name 85  "uname"
-                              MemberName 85(uname) 0  "a"
-                              Name 88  "uniformBuffer"
-                              Name 90  "nu_ii"
-                              Name 97  "bname"
-                              MemberName 97(bname) 0  "b"
-                              Name 100  "storageBuffer"
-                              Name 110  "sampledImage"
-                              Name 125  "storageImage"
-                              Name 137  "inputAttachment"
-                              Name 147  "uniformTexelBuffer"
-                              Name 158  "storageTexelBuffer"
-                              Name 168  "v"
-                              Name 183  "uv"
-                              Name 193  "m"
-                              Name 201  "S"
-                              MemberName 201(S) 0  "a"
-                              Name 203  "s"
+                              Name 32  "b"
+                              Name 35  "nu_inv4"
+                              Name 41  "nu_gf"
+                              Name 47  "inputAttachmentDyn"
+                              Name 48  "dyn_i"
+                              Name 64  "uniformTexelBufferDyn"
+                              Name 78  "storageTexelBufferDyn"
+                              Name 87  "uname"
+                              MemberName 87(uname) 0  "a"
+                              Name 90  "uniformBuffer"
+                              Name 92  "nu_ii"
+                              Name 99  "bname"
+                              MemberName 99(bname) 0  "b"
+                              Name 102  "storageBuffer"
+                              Name 112  "sampledImage"
+                              Name 127  "storageImage"
+                              Name 139  "inputAttachment"
+                              Name 149  "uniformTexelBuffer"
+                              Name 160  "storageTexelBuffer"
+                              Name 170  "v"
+                              Name 185  "uv"
+                              Name 195  "m"
+                              Name 203  "S"
+                              MemberName 203(S) 0  "a"
+                              Name 205  "s"
+                              Decorate 9(nupi) DecorationNonUniformEXT
                               Decorate 13 DecorationNonUniformEXT
                               Decorate 17(nu_li) DecorationNonUniformEXT
+                              Decorate 17(nu_li) DecorationNonUniformEXT
                               Decorate 19 DecorationNonUniformEXT
-                              Decorate 23 DecorationNonUniformEXT
-                              Decorate 26 DecorationNonUniformEXT
-                              Decorate 27 DecorationNonUniformEXT
-                              Decorate 33(nu_inv4) Location 0
-                              Decorate 33(nu_inv4) DecorationNonUniformEXT
-                              Decorate 38 DecorationNonUniformEXT
-                              Decorate 39(nu_gf) DecorationNonUniformEXT
+                              Decorate 24 DecorationNonUniformEXT
+                              Decorate 28 DecorationNonUniformEXT
+                              Decorate 29 DecorationNonUniformEXT
+                              Decorate 35(nu_inv4) Location 0
+                              Decorate 35(nu_inv4) DecorationNonUniformEXT
+                              Decorate 39 DecorationNonUniformEXT
                               Decorate 40 DecorationNonUniformEXT
-                              Decorate 41 DecorationNonUniformEXT
-                              Decorate 45(inputAttachmentDyn) DescriptorSet 0
-                              Decorate 45(inputAttachmentDyn) Binding 0
-                              Decorate 45(inputAttachmentDyn) InputAttachmentIndex 0
-                              Decorate 62(uniformTexelBufferDyn) DescriptorSet 0
-                              Decorate 62(uniformTexelBufferDyn) Binding 1
-                              Decorate 76(storageTexelBufferDyn) DescriptorSet 0
-                              Decorate 76(storageTexelBufferDyn) Binding 2
-                              MemberDecorate 85(uname) 0 Offset 0
-                              Decorate 85(uname) Block
-                              Decorate 88(uniformBuffer) DescriptorSet 0
-                              Decorate 88(uniformBuffer) Binding 3
-                              Decorate 90(nu_ii) Flat
-                              Decorate 90(nu_ii) Location 1
-                              Decorate 90(nu_ii) DecorationNonUniformEXT
-                              Decorate 91 DecorationNonUniformEXT
-                              Decorate 94 DecorationNonUniformEXT
-                              MemberDecorate 97(bname) 0 Offset 0
-                              Decorate 97(bname) BufferBlock
-                              Decorate 100(storageBuffer) DescriptorSet 0
-                              Decorate 100(storageBuffer) Binding 4
-                              Decorate 101 DecorationNonUniformEXT
+                              Decorate 41(nu_gf) DecorationNonUniformEXT
+                              Decorate 41(nu_gf) DecorationNonUniformEXT
+                              Decorate 42 DecorationNonUniformEXT
+                              Decorate 43 DecorationNonUniformEXT
+                              Decorate 47(inputAttachmentDyn) DescriptorSet 0
+                              Decorate 47(inputAttachmentDyn) Binding 0
+                              Decorate 47(inputAttachmentDyn) InputAttachmentIndex 0
+                              Decorate 64(uniformTexelBufferDyn) DescriptorSet 0
+                              Decorate 64(uniformTexelBufferDyn) Binding 1
+                              Decorate 78(storageTexelBufferDyn) DescriptorSet 0
+                              Decorate 78(storageTexelBufferDyn) Binding 2
+                              MemberDecorate 87(uname) 0 Offset 0
+                              Decorate 87(uname) Block
+                              Decorate 90(uniformBuffer) DescriptorSet 0
+                              Decorate 90(uniformBuffer) Binding 3
+                              Decorate 92(nu_ii) Flat
+                              Decorate 92(nu_ii) Location 1
+                              Decorate 92(nu_ii) DecorationNonUniformEXT
+                              Decorate 92(nu_ii) DecorationNonUniformEXT
+                              Decorate 93 DecorationNonUniformEXT
+                              Decorate 95 DecorationNonUniformEXT
+                              Decorate 96 DecorationNonUniformEXT
+                              MemberDecorate 99(bname) 0 Offset 0
+                              Decorate 99(bname) BufferBlock
+                              Decorate 102(storageBuffer) DescriptorSet 0
+                              Decorate 102(storageBuffer) Binding 4
+                              Decorate 92(nu_ii) DecorationNonUniformEXT
                               Decorate 103 DecorationNonUniformEXT
-                              Decorate 110(sampledImage) DescriptorSet 0
-                              Decorate 110(sampledImage) Binding 5
-                              Decorate 111 DecorationNonUniformEXT
-                              Decorate 114 DecorationNonUniformEXT
-                              Decorate 125(storageImage) DescriptorSet 0
-                              Decorate 125(storageImage) Binding 6
-                              Decorate 126 DecorationNonUniformEXT
-                              Decorate 129 DecorationNonUniformEXT
-                              Decorate 137(inputAttachment) DescriptorSet 0
-                              Decorate 137(inputAttachment) Binding 7
-                              Decorate 137(inputAttachment) InputAttachmentIndex 1
-                              Decorate 138 DecorationNonUniformEXT
+                              Decorate 104 DecorationNonUniformEXT
+                              Decorate 105 DecorationNonUniformEXT
+                              Decorate 112(sampledImage) DescriptorSet 0
+                              Decorate 112(sampledImage) Binding 5
+                              Decorate 92(nu_ii) DecorationNonUniformEXT
+                              Decorate 113 DecorationNonUniformEXT
+                              Decorate 115 DecorationNonUniformEXT
+                              Decorate 116 DecorationNonUniformEXT
+                              Decorate 127(storageImage) DescriptorSet 0
+                              Decorate 127(storageImage) Binding 6
+                              Decorate 92(nu_ii) DecorationNonUniformEXT
+                              Decorate 128 DecorationNonUniformEXT
+                              Decorate 130 DecorationNonUniformEXT
+                              Decorate 131 DecorationNonUniformEXT
+                              Decorate 139(inputAttachment) DescriptorSet 0
+                              Decorate 139(inputAttachment) Binding 7
+                              Decorate 139(inputAttachment) InputAttachmentIndex 1
+                              Decorate 92(nu_ii) DecorationNonUniformEXT
                               Decorate 140 DecorationNonUniformEXT
-                              Decorate 147(uniformTexelBuffer) DescriptorSet 0
-                              Decorate 147(uniformTexelBuffer) Binding 8
-                              Decorate 148 DecorationNonUniformEXT
+                              Decorate 141 DecorationNonUniformEXT
+                              Decorate 142 DecorationNonUniformEXT
+                              Decorate 149(uniformTexelBuffer) DescriptorSet 0
+                              Decorate 149(uniformTexelBuffer) Binding 8
+                              Decorate 92(nu_ii) DecorationNonUniformEXT
                               Decorate 150 DecorationNonUniformEXT
-                              Decorate 158(storageTexelBuffer) DescriptorSet 0
-                              Decorate 158(storageTexelBuffer) Binding 9
-                              Decorate 159 DecorationNonUniformEXT
+                              Decorate 151 DecorationNonUniformEXT
+                              Decorate 152 DecorationNonUniformEXT
+                              Decorate 160(storageTexelBuffer) DescriptorSet 0
+                              Decorate 160(storageTexelBuffer) Binding 9
+                              Decorate 92(nu_ii) DecorationNonUniformEXT
                               Decorate 161 DecorationNonUniformEXT
-                              Decorate 168(v) DecorationNonUniformEXT
-                              Decorate 171 DecorationNonUniformEXT
+                              Decorate 162 DecorationNonUniformEXT
+                              Decorate 163 DecorationNonUniformEXT
+                              Decorate 170(v) DecorationNonUniformEXT
+                              Decorate 172 DecorationNonUniformEXT
                               Decorate 173 DecorationNonUniformEXT
-                              Decorate 178 DecorationNonUniformEXT
+                              Decorate 174 DecorationNonUniformEXT
+                              Decorate 175 DecorationNonUniformEXT
+                              Decorate 179 DecorationNonUniformEXT
                               Decorate 180 DecorationNonUniformEXT
-                              Decorate 184 DecorationNonUniformEXT
+                              Decorate 181 DecorationNonUniformEXT
+                              Decorate 182 DecorationNonUniformEXT
+                              Decorate 92(nu_ii) DecorationNonUniformEXT
                               Decorate 186 DecorationNonUniformEXT
+                              Decorate 187 DecorationNonUniformEXT
                               Decorate 188 DecorationNonUniformEXT
-                              Decorate 193(m) DecorationNonUniformEXT
-                              Decorate 195 DecorationNonUniformEXT
-                              Decorate 203(s) DecorationNonUniformEXT
-                              Decorate 205 DecorationNonUniformEXT
+                              Decorate 189 DecorationNonUniformEXT
+                              Decorate 190 DecorationNonUniformEXT
+                              Decorate 195(m) DecorationNonUniformEXT
+                              Decorate 196 DecorationNonUniformEXT
+                              Decorate 197 DecorationNonUniformEXT
+                              Decorate 205(s) DecorationNonUniformEXT
+                              Decorate 206 DecorationNonUniformEXT
                               Decorate 207 DecorationNonUniformEXT
+                              Decorate 208 DecorationNonUniformEXT
+                              Decorate 209 DecorationNonUniformEXT
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
                7:             TypePointer Function 6(int)
                8:             TypeFunction 6(int) 7(ptr) 7(ptr)
-              25:      6(int) Constant 2
-              28:             TypeFloat 32
-              29:             TypePointer Function 28(float)
-              31:             TypeVector 28(float) 4
-              32:             TypePointer Input 31(fvec4)
-     33(nu_inv4):     32(ptr) Variable Input
-              34:             TypeInt 32 0
-              35:     34(int) Constant 0
-              36:             TypePointer Input 28(float)
-              42:             TypeImage 28(float) SubpassData nonsampled format:Unknown
-              43:             TypeRuntimeArray 42
-              44:             TypePointer UniformConstant 43
-45(inputAttachmentDyn):     44(ptr) Variable UniformConstant
-              48:             TypePointer UniformConstant 42
-              51:      6(int) Constant 0
-              52:             TypeVector 6(int) 2
-              53:   52(ivec2) ConstantComposite 51 51
-              58:             TypeImage 28(float) Buffer sampled format:Unknown
-              59:             TypeSampledImage 58
-              60:             TypeRuntimeArray 59
-              61:             TypePointer UniformConstant 60
-62(uniformTexelBufferDyn):     61(ptr) Variable UniformConstant
-              64:             TypePointer UniformConstant 59
-              67:      6(int) Constant 1
-              73:             TypeImage 28(float) Buffer nonsampled format:R32f
-              74:             TypeRuntimeArray 73
-              75:             TypePointer UniformConstant 74
-76(storageTexelBufferDyn):     75(ptr) Variable UniformConstant
-              78:             TypePointer UniformConstant 73
-       85(uname):             TypeStruct 28(float)
-              86:             TypeRuntimeArray 85(uname)
-              87:             TypePointer Uniform 86
-88(uniformBuffer):     87(ptr) Variable Uniform
-              89:             TypePointer Input 6(int)
-       90(nu_ii):     89(ptr) Variable Input
-              92:             TypePointer Uniform 28(float)
-       97(bname):             TypeStruct 28(float)
-              98:             TypeRuntimeArray 97(bname)
-              99:             TypePointer Uniform 98
-100(storageBuffer):     99(ptr) Variable Uniform
-             106:             TypeImage 28(float) 2D sampled format:Unknown
-             107:             TypeSampledImage 106
-             108:             TypeRuntimeArray 107
-             109:             TypePointer UniformConstant 108
-110(sampledImage):    109(ptr) Variable UniformConstant
-             112:             TypePointer UniformConstant 107
-             115:             TypeVector 28(float) 2
-             116:   28(float) Constant 1056964608
-             117:  115(fvec2) ConstantComposite 116 116
-             122:             TypeImage 28(float) 2D nonsampled format:R32f
-             123:             TypeRuntimeArray 122
-             124:             TypePointer UniformConstant 123
-125(storageImage):    124(ptr) Variable UniformConstant
-             127:             TypePointer UniformConstant 122
-             130:   52(ivec2) ConstantComposite 67 67
-             135:             TypeRuntimeArray 42
-             136:             TypePointer UniformConstant 135
-137(inputAttachment):    136(ptr) Variable UniformConstant
-             145:             TypeRuntimeArray 59
-             146:             TypePointer UniformConstant 145
-147(uniformTexelBuffer):    146(ptr) Variable UniformConstant
-             156:             TypeRuntimeArray 73
-             157:             TypePointer UniformConstant 156
-158(storageTexelBuffer):    157(ptr) Variable UniformConstant
-             166:             TypeVector 6(int) 4
-             167:             TypePointer Function 166(ivec4)
-             169:     34(int) Constant 1
-             176:     34(int) Constant 2
-             191:             TypeMatrix 31(fvec4) 4
-             192:             TypePointer Function 191
-          201(S):             TypeStruct 6(int)
-             202:             TypePointer Function 201(S)
+              26:      6(int) Constant 2
+              30:             TypeFloat 32
+              31:             TypePointer Function 30(float)
+              33:             TypeVector 30(float) 4
+              34:             TypePointer Input 33(fvec4)
+     35(nu_inv4):     34(ptr) Variable Input
+              36:             TypeInt 32 0
+              37:     36(int) Constant 0
+              38:             TypePointer Input 30(float)
+              44:             TypeImage 30(float) SubpassData nonsampled format:Unknown
+              45:             TypeRuntimeArray 44
+              46:             TypePointer UniformConstant 45
+47(inputAttachmentDyn):     46(ptr) Variable UniformConstant
+              50:             TypePointer UniformConstant 44
+              53:      6(int) Constant 0
+              54:             TypeVector 6(int) 2
+              55:   54(ivec2) ConstantComposite 53 53
+              60:             TypeImage 30(float) Buffer sampled format:Unknown
+              61:             TypeSampledImage 60
+              62:             TypeRuntimeArray 61
+              63:             TypePointer UniformConstant 62
+64(uniformTexelBufferDyn):     63(ptr) Variable UniformConstant
+              66:             TypePointer UniformConstant 61
+              69:      6(int) Constant 1
+              75:             TypeImage 30(float) Buffer nonsampled format:R32f
+              76:             TypeRuntimeArray 75
+              77:             TypePointer UniformConstant 76
+78(storageTexelBufferDyn):     77(ptr) Variable UniformConstant
+              80:             TypePointer UniformConstant 75
+       87(uname):             TypeStruct 30(float)
+              88:             TypeRuntimeArray 87(uname)
+              89:             TypePointer Uniform 88
+90(uniformBuffer):     89(ptr) Variable Uniform
+              91:             TypePointer Input 6(int)
+       92(nu_ii):     91(ptr) Variable Input
+              94:             TypePointer Uniform 30(float)
+       99(bname):             TypeStruct 30(float)
+             100:             TypeRuntimeArray 99(bname)
+             101:             TypePointer Uniform 100
+102(storageBuffer):    101(ptr) Variable Uniform
+             108:             TypeImage 30(float) 2D sampled format:Unknown
+             109:             TypeSampledImage 108
+             110:             TypeRuntimeArray 109
+             111:             TypePointer UniformConstant 110
+112(sampledImage):    111(ptr) Variable UniformConstant
+             114:             TypePointer UniformConstant 109
+             117:             TypeVector 30(float) 2
+             118:   30(float) Constant 1056964608
+             119:  117(fvec2) ConstantComposite 118 118
+             124:             TypeImage 30(float) 2D nonsampled format:R32f
+             125:             TypeRuntimeArray 124
+             126:             TypePointer UniformConstant 125
+127(storageImage):    126(ptr) Variable UniformConstant
+             129:             TypePointer UniformConstant 124
+             132:   54(ivec2) ConstantComposite 69 69
+             137:             TypeRuntimeArray 44
+             138:             TypePointer UniformConstant 137
+139(inputAttachment):    138(ptr) Variable UniformConstant
+             147:             TypeRuntimeArray 61
+             148:             TypePointer UniformConstant 147
+149(uniformTexelBuffer):    148(ptr) Variable UniformConstant
+             158:             TypeRuntimeArray 75
+             159:             TypePointer UniformConstant 158
+160(storageTexelBuffer):    159(ptr) Variable UniformConstant
+             168:             TypeVector 6(int) 4
+             169:             TypePointer Function 168(ivec4)
+             171:     36(int) Constant 1
+             178:     36(int) Constant 2
+             193:             TypeMatrix 33(fvec4) 4
+             194:             TypePointer Function 193
+          203(S):             TypeStruct 6(int)
+             204:             TypePointer Function 203(S)
          4(main):           2 Function None 3
                5:             Label
            16(a):      7(ptr) Variable Function
        17(nu_li):      7(ptr) Variable Function
        18(param):      7(ptr) Variable Function
        20(param):      7(ptr) Variable Function
-           30(b):     29(ptr) Variable Function
-       39(nu_gf):     29(ptr) Variable Function
-       46(dyn_i):      7(ptr) Variable Function
-          168(v):    167(ptr) Variable Function
-         183(uv):    167(ptr) Variable Function
-          193(m):    192(ptr) Variable Function
-          203(s):    202(ptr) Variable Function
+           32(b):     31(ptr) Variable Function
+       41(nu_gf):     31(ptr) Variable Function
+       48(dyn_i):      7(ptr) Variable Function
+          170(v):    169(ptr) Variable Function
+         185(uv):    169(ptr) Variable Function
+          195(m):    194(ptr) Variable Function
+          205(s):    204(ptr) Variable Function
               19:      6(int) Load 17(nu_li)
                               Store 18(param) 19
               21:      6(int) FunctionCall 11(foo(i1;i1;) 18(param) 20(param)
@@ -224,130 +252,132 @@
                               Store 17(nu_li) 22
                               Store 16(a) 21
               23:      6(int) Load 16(a)
-              24:      6(int) Load 16(a)
-              26:      6(int) IMul 24 25
-              27:      6(int) IAdd 23 26
-                              Store 17(nu_li) 27
-              37:     36(ptr) AccessChain 33(nu_inv4) 35
-              38:   28(float) Load 37
-              40:   28(float) Load 39(nu_gf)
-              41:   28(float) FMul 38 40
-                              Store 30(b) 41
-              47:      6(int) Load 46(dyn_i)
-              49:     48(ptr) AccessChain 45(inputAttachmentDyn) 47
-              50:          42 Load 49
-              54:   31(fvec4) ImageRead 50 53
-              55:   28(float) CompositeExtract 54 0
-              56:   28(float) Load 30(b)
-              57:   28(float) FAdd 56 55
-                              Store 30(b) 57
-              63:      6(int) Load 46(dyn_i)
-              65:     64(ptr) AccessChain 62(uniformTexelBufferDyn) 63
-              66:          59 Load 65
-              68:          58 Image 66
-              69:   31(fvec4) ImageFetch 68 67
-              70:   28(float) CompositeExtract 69 0
-              71:   28(float) Load 30(b)
-              72:   28(float) FAdd 71 70
-                              Store 30(b) 72
-              77:      6(int) Load 46(dyn_i)
-              79:     78(ptr) AccessChain 76(storageTexelBufferDyn) 77
-              80:          73 Load 79
-              81:   31(fvec4) ImageRead 80 67
-              82:   28(float) CompositeExtract 81 0
-              83:   28(float) Load 30(b)
-              84:   28(float) FAdd 83 82
-                              Store 30(b) 84
-              91:      6(int) Load 90(nu_ii)
-              93:     92(ptr) AccessChain 88(uniformBuffer) 91 51
-              94:   28(float) Load 93
-              95:   28(float) Load 30(b)
-              96:   28(float) FAdd 95 94
-                              Store 30(b) 96
-             101:      6(int) Load 90(nu_ii)
-             102:     92(ptr) AccessChain 100(storageBuffer) 101 51
-             103:   28(float) Load 102
-             104:   28(float) Load 30(b)
-             105:   28(float) FAdd 104 103
-                              Store 30(b) 105
-             111:      6(int) Load 90(nu_ii)
-             113:    112(ptr) AccessChain 110(sampledImage) 111
-             114:         107 Load 113
-             118:   31(fvec4) ImageSampleImplicitLod 114 117
-             119:   28(float) CompositeExtract 118 0
-             120:   28(float) Load 30(b)
-             121:   28(float) FAdd 120 119
-                              Store 30(b) 121
-             126:      6(int) Load 90(nu_ii)
-             128:    127(ptr) AccessChain 125(storageImage) 126
-             129:         122 Load 128
-             131:   31(fvec4) ImageRead 129 130
-             132:   28(float) CompositeExtract 131 0
-             133:   28(float) Load 30(b)
-             134:   28(float) FAdd 133 132
-                              Store 30(b) 134
-             138:      6(int) Load 90(nu_ii)
-             139:     48(ptr) AccessChain 137(inputAttachment) 138
-             140:          42 Load 139
-             141:   31(fvec4) ImageRead 140 53
-             142:   28(float) CompositeExtract 141 0
-             143:   28(float) Load 30(b)
-             144:   28(float) FAdd 143 142
-                              Store 30(b) 144
-             148:      6(int) Load 90(nu_ii)
-             149:     64(ptr) AccessChain 147(uniformTexelBuffer) 148
-             150:          59 Load 149
-             151:          58 Image 150
-             152:   31(fvec4) ImageFetch 151 67
-             153:   28(float) CompositeExtract 152 0
-             154:   28(float) Load 30(b)
-             155:   28(float) FAdd 154 153
-                              Store 30(b) 155
-             159:      6(int) Load 90(nu_ii)
-             160:     78(ptr) AccessChain 158(storageTexelBuffer) 159
-             161:          73 Load 160
-             162:   31(fvec4) ImageRead 161 67
-             163:   28(float) CompositeExtract 162 0
-             164:   28(float) Load 30(b)
-             165:   28(float) FAdd 164 163
-                              Store 30(b) 165
-             170:      7(ptr) AccessChain 168(v) 169
-             171:      6(int) Load 170
-             172:     92(ptr) AccessChain 88(uniformBuffer) 171 51
-             173:   28(float) Load 172
-             174:   28(float) Load 30(b)
-             175:   28(float) FAdd 174 173
-                              Store 30(b) 175
-             177:      7(ptr) AccessChain 168(v) 176
-             178:      6(int) Load 177
-             179:     92(ptr) AccessChain 88(uniformBuffer) 178 51
-             180:   28(float) Load 179
-             181:   28(float) Load 30(b)
-             182:   28(float) FAdd 181 180
-                              Store 30(b) 182
-             184:      6(int) Load 90(nu_ii)
-             185:      7(ptr) AccessChain 183(uv) 184
-             186:      6(int) Load 185
-             187:     92(ptr) AccessChain 88(uniformBuffer) 186 51
-             188:   28(float) Load 187
-             189:   28(float) Load 30(b)
-             190:   28(float) FAdd 189 188
-                              Store 30(b) 190
-             194:     29(ptr) AccessChain 193(m) 25 176
-             195:   28(float) Load 194
-             196:      6(int) ConvertFToS 195
-             197:     92(ptr) AccessChain 88(uniformBuffer) 196 51
-             198:   28(float) Load 197
-             199:   28(float) Load 30(b)
-             200:   28(float) FAdd 199 198
-                              Store 30(b) 200
-             204:      7(ptr) AccessChain 203(s) 51
-             205:      6(int) Load 204
-             206:     92(ptr) AccessChain 88(uniformBuffer) 205 51
-             207:   28(float) Load 206
-             208:   28(float) Load 30(b)
-             209:   28(float) FAdd 208 207
-                              Store 30(b) 209
+              24:      6(int) CopyObject 23
+              25:      6(int) Load 16(a)
+              27:      6(int) IMul 25 26
+              28:      6(int) CopyObject 27
+              29:      6(int) IAdd 24 28
+                              Store 17(nu_li) 29
+              39:     38(ptr) AccessChain 35(nu_inv4) 37
+              40:   30(float) Load 39
+              42:   30(float) Load 41(nu_gf)
+              43:   30(float) FMul 40 42
+                              Store 32(b) 43
+              49:      6(int) Load 48(dyn_i)
+              51:     50(ptr) AccessChain 47(inputAttachmentDyn) 49
+              52:          44 Load 51
+              56:   33(fvec4) ImageRead 52 55
+              57:   30(float) CompositeExtract 56 0
+              58:   30(float) Load 32(b)
+              59:   30(float) FAdd 58 57
+                              Store 32(b) 59
+              65:      6(int) Load 48(dyn_i)
+              67:     66(ptr) AccessChain 64(uniformTexelBufferDyn) 65
+              68:          61 Load 67
+              70:          60 Image 68
+              71:   33(fvec4) ImageFetch 70 69
+              72:   30(float) CompositeExtract 71 0
+              73:   30(float) Load 32(b)
+              74:   30(float) FAdd 73 72
+                              Store 32(b) 74
+              79:      6(int) Load 48(dyn_i)
+              81:     80(ptr) AccessChain 78(storageTexelBufferDyn) 79
+              82:          75 Load 81
+              83:   33(fvec4) ImageRead 82 69
+              84:   30(float) CompositeExtract 83 0
+              85:   30(float) Load 32(b)
+              86:   30(float) FAdd 85 84
+                              Store 32(b) 86
+              93:      6(int) Load 92(nu_ii)
+              95:     94(ptr) AccessChain 90(uniformBuffer) 93 53
+              96:   30(float) Load 95
+              97:   30(float) Load 32(b)
+              98:   30(float) FAdd 97 96
+                              Store 32(b) 98
+             103:      6(int) Load 92(nu_ii)
+             104:     94(ptr) AccessChain 102(storageBuffer) 103 53
+             105:   30(float) Load 104
+             106:   30(float) Load 32(b)
+             107:   30(float) FAdd 106 105
+                              Store 32(b) 107
+             113:      6(int) Load 92(nu_ii)
+             115:    114(ptr) AccessChain 112(sampledImage) 113
+             116:         109 Load 115
+             120:   33(fvec4) ImageSampleImplicitLod 116 119
+             121:   30(float) CompositeExtract 120 0
+             122:   30(float) Load 32(b)
+             123:   30(float) FAdd 122 121
+                              Store 32(b) 123
+             128:      6(int) Load 92(nu_ii)
+             130:    129(ptr) AccessChain 127(storageImage) 128
+             131:         124 Load 130
+             133:   33(fvec4) ImageRead 131 132
+             134:   30(float) CompositeExtract 133 0
+             135:   30(float) Load 32(b)
+             136:   30(float) FAdd 135 134
+                              Store 32(b) 136
+             140:      6(int) Load 92(nu_ii)
+             141:     50(ptr) AccessChain 139(inputAttachment) 140
+             142:          44 Load 141
+             143:   33(fvec4) ImageRead 142 55
+             144:   30(float) CompositeExtract 143 0
+             145:   30(float) Load 32(b)
+             146:   30(float) FAdd 145 144
+                              Store 32(b) 146
+             150:      6(int) Load 92(nu_ii)
+             151:     66(ptr) AccessChain 149(uniformTexelBuffer) 150
+             152:          61 Load 151
+             153:          60 Image 152
+             154:   33(fvec4) ImageFetch 153 69
+             155:   30(float) CompositeExtract 154 0
+             156:   30(float) Load 32(b)
+             157:   30(float) FAdd 156 155
+                              Store 32(b) 157
+             161:      6(int) Load 92(nu_ii)
+             162:     80(ptr) AccessChain 160(storageTexelBuffer) 161
+             163:          75 Load 162
+             164:   33(fvec4) ImageRead 163 69
+             165:   30(float) CompositeExtract 164 0
+             166:   30(float) Load 32(b)
+             167:   30(float) FAdd 166 165
+                              Store 32(b) 167
+             172:      7(ptr) AccessChain 170(v) 171
+             173:      6(int) Load 172
+             174:     94(ptr) AccessChain 90(uniformBuffer) 173 53
+             175:   30(float) Load 174
+             176:   30(float) Load 32(b)
+             177:   30(float) FAdd 176 175
+                              Store 32(b) 177
+             179:      7(ptr) AccessChain 170(v) 178
+             180:      6(int) Load 179
+             181:     94(ptr) AccessChain 90(uniformBuffer) 180 53
+             182:   30(float) Load 181
+             183:   30(float) Load 32(b)
+             184:   30(float) FAdd 183 182
+                              Store 32(b) 184
+             186:      6(int) Load 92(nu_ii)
+             187:      7(ptr) AccessChain 185(uv) 186
+             188:      6(int) Load 187
+             189:     94(ptr) AccessChain 90(uniformBuffer) 188 53
+             190:   30(float) Load 189
+             191:   30(float) Load 32(b)
+             192:   30(float) FAdd 191 190
+                              Store 32(b) 192
+             196:     31(ptr) AccessChain 195(m) 26 178
+             197:   30(float) Load 196
+             198:      6(int) ConvertFToS 197
+             199:     94(ptr) AccessChain 90(uniformBuffer) 198 53
+             200:   30(float) Load 199
+             201:   30(float) Load 32(b)
+             202:   30(float) FAdd 201 200
+                              Store 32(b) 202
+             206:      7(ptr) AccessChain 205(s) 53
+             207:      6(int) Load 206
+             208:     94(ptr) AccessChain 90(uniformBuffer) 207 53
+             209:   30(float) Load 208
+             210:   30(float) Load 32(b)
+             211:   30(float) FAdd 210 209
+                              Store 32(b) 211
                               Return
                               FunctionEnd
   11(foo(i1;i1;):      6(int) Function None 8
diff --git a/Test/baseResults/spv.nonuniform2.frag.out b/Test/baseResults/spv.nonuniform2.frag.out
new file mode 100644
index 0000000..759f4c4
--- /dev/null
+++ b/Test/baseResults/spv.nonuniform2.frag.out
@@ -0,0 +1,54 @@
+spv.nonuniform2.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 24
+
+                              Capability Shader
+                              Capability ImageBuffer
+                              Capability ShaderNonUniformEXT
+                              Capability RuntimeDescriptorArrayEXT
+                              Capability StorageTexelBufferArrayNonUniformIndexingEXT
+                              Extension  "SPV_EXT_descriptor_indexing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 16
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_nonuniform_qualifier"
+                              Name 4  "main"
+                              Name 9  "FragColor"
+                              Name 13  "data"
+                              Name 16  "rIndex"
+                              Decorate 9(FragColor) Location 0
+                              Decorate 13(data) DescriptorSet 0
+                              Decorate 13(data) Binding 4
+                              Decorate 16(rIndex) Flat
+                              Decorate 16(rIndex) Location 3
+                              Decorate 18 DecorationNonUniformEXT
+                              Decorate 20 DecorationNonUniformEXT
+                              Decorate 21 DecorationNonUniformEXT
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+    9(FragColor):      8(ptr) Variable Output
+              10:             TypeImage 6(float) Buffer nonsampled format:Rgba32f
+              11:             TypeRuntimeArray 10
+              12:             TypePointer UniformConstant 11
+        13(data):     12(ptr) Variable UniformConstant
+              14:             TypeInt 32 1
+              15:             TypePointer Input 14(int)
+      16(rIndex):     15(ptr) Variable Input
+              19:             TypePointer UniformConstant 10
+              22:     14(int) Constant 0
+         4(main):           2 Function None 3
+               5:             Label
+              17:     14(int) Load 16(rIndex)
+              18:     14(int) CopyObject 17
+              20:     19(ptr) AccessChain 13(data) 18
+              21:          10 Load 20
+              23:    7(fvec4) ImageRead 21 22
+                              Store 9(FragColor) 23
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.nonuniform3.frag.out b/Test/baseResults/spv.nonuniform3.frag.out
new file mode 100644
index 0000000..9314261
--- /dev/null
+++ b/Test/baseResults/spv.nonuniform3.frag.out
@@ -0,0 +1,61 @@
+spv.nonuniform3.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 32
+
+                              Capability Shader
+                              Capability ShaderNonUniformEXT
+                              Capability RuntimeDescriptorArrayEXT
+                              Extension  "SPV_EXT_descriptor_indexing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 16
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_nonuniform_qualifier"
+                              Name 4  "main"
+                              Name 9  "FragColor"
+                              Name 13  "uTex"
+                              Name 16  "Index"
+                              Name 23  "uSamp"
+                              Decorate 9(FragColor) Location 0
+                              Decorate 13(uTex) DescriptorSet 0
+                              Decorate 13(uTex) Binding 0
+                              Decorate 16(Index) Flat
+                              Decorate 16(Index) Location 0
+                              Decorate 23(uSamp) DescriptorSet 1
+                              Decorate 23(uSamp) Binding 0
+                              Decorate 27 DecorationNonUniformEXT
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+    9(FragColor):      8(ptr) Variable Output
+              10:             TypeImage 6(float) 2D sampled format:Unknown
+              11:             TypeRuntimeArray 10
+              12:             TypePointer UniformConstant 11
+        13(uTex):     12(ptr) Variable UniformConstant
+              14:             TypeInt 32 1
+              15:             TypePointer Input 14(int)
+       16(Index):     15(ptr) Variable Input
+              18:             TypePointer UniformConstant 10
+              21:             TypeSampler
+              22:             TypePointer UniformConstant 21
+       23(uSamp):     22(ptr) Variable UniformConstant
+              25:             TypeSampledImage 10
+              28:             TypeVector 6(float) 2
+              29:    6(float) Constant 1056964608
+              30:   28(fvec2) ConstantComposite 29 29
+         4(main):           2 Function None 3
+               5:             Label
+              17:     14(int) Load 16(Index)
+              19:     18(ptr) AccessChain 13(uTex) 17
+              20:          10 Load 19
+              24:          21 Load 23(uSamp)
+              26:          25 SampledImage 20 24
+              27:          25 CopyObject 26
+              31:    7(fvec4) ImageSampleImplicitLod 27 30
+                              Store 9(FragColor) 31
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.nonuniform4.frag.out b/Test/baseResults/spv.nonuniform4.frag.out
new file mode 100644
index 0000000..a9dd520
--- /dev/null
+++ b/Test/baseResults/spv.nonuniform4.frag.out
@@ -0,0 +1,50 @@
+spv.nonuniform4.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 24
+
+                              Capability Shader
+                              Capability ImageBuffer
+                              Capability ShaderNonUniformEXT
+                              Capability RuntimeDescriptorArrayEXT
+                              Capability StorageTexelBufferArrayNonUniformIndexingEXT
+                              Extension  "SPV_EXT_descriptor_indexing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 13
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_nonuniform_qualifier"
+                              Name 4  "main"
+                              Name 10  "data"
+                              Name 13  "rIndex"
+                              Decorate 10(data) DescriptorSet 0
+                              Decorate 10(data) Binding 4
+                              Decorate 13(rIndex) Flat
+                              Decorate 13(rIndex) Location 3
+                              Decorate 15 DecorationNonUniformEXT
+                              Decorate 21 DecorationNonUniformEXT
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeImage 6(int) Buffer nonsampled format:R32ui
+               8:             TypeRuntimeArray 7
+               9:             TypePointer UniformConstant 8
+        10(data):      9(ptr) Variable UniformConstant
+              11:             TypeInt 32 1
+              12:             TypePointer Input 11(int)
+      13(rIndex):     12(ptr) Variable Input
+              16:             TypePointer UniformConstant 7
+              18:     11(int) Constant 0
+              19:      6(int) Constant 0
+              20:             TypePointer Image 6(int)
+              22:      6(int) Constant 1
+         4(main):           2 Function None 3
+               5:             Label
+              14:     11(int) Load 13(rIndex)
+              15:     11(int) CopyObject 14
+              17:     16(ptr) AccessChain 10(data) 15
+              21:     20(ptr) ImageTexelPointer 17 18 19
+              23:      6(int) AtomicIAdd 21 22 19 19
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.nonuniform5.frag.out b/Test/baseResults/spv.nonuniform5.frag.out
new file mode 100644
index 0000000..8ce131a
--- /dev/null
+++ b/Test/baseResults/spv.nonuniform5.frag.out
@@ -0,0 +1,56 @@
+spv.nonuniform5.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 23
+
+                              Capability Shader
+                              Capability ShaderNonUniformEXT
+                              Capability RuntimeDescriptorArrayEXT
+                              Capability UniformBufferArrayNonUniformIndexingEXT
+                              Extension  "SPV_EXT_descriptor_indexing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 16
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_nonuniform_qualifier"
+                              Name 4  "main"
+                              Name 9  "FragColor"
+                              Name 10  "UBO"
+                              MemberName 10(UBO) 0  "v"
+                              Name 13  "ubos"
+                              Name 16  "Index"
+                              Decorate 9(FragColor) Location 0
+                              MemberDecorate 10(UBO) 0 Offset 0
+                              Decorate 10(UBO) Block
+                              Decorate 13(ubos) DescriptorSet 0
+                              Decorate 13(ubos) Binding 0
+                              Decorate 16(Index) Flat
+                              Decorate 16(Index) Location 0
+                              Decorate 18 DecorationNonUniformEXT
+                              Decorate 21 DecorationNonUniformEXT
+                              Decorate 22 DecorationNonUniformEXT
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+    9(FragColor):      8(ptr) Variable Output
+         10(UBO):             TypeStruct 7(fvec4)
+              11:             TypeRuntimeArray 10(UBO)
+              12:             TypePointer Uniform 11
+        13(ubos):     12(ptr) Variable Uniform
+              14:             TypeInt 32 1
+              15:             TypePointer Input 14(int)
+       16(Index):     15(ptr) Variable Input
+              19:     14(int) Constant 0
+              20:             TypePointer Uniform 7(fvec4)
+         4(main):           2 Function None 3
+               5:             Label
+              17:     14(int) Load 16(Index)
+              18:     14(int) CopyObject 17
+              21:     20(ptr) AccessChain 13(ubos) 18 19
+              22:    7(fvec4) Load 21
+                              Store 9(FragColor) 22
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.offsets.frag.out b/Test/baseResults/spv.offsets.frag.out
index 17d7b86..08a75e9 100644
--- a/Test/baseResults/spv.offsets.frag.out
+++ b/Test/baseResults/spv.offsets.frag.out
@@ -1,6 +1,6 @@
 spv.offsets.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 15
 
                               Capability Shader
diff --git a/Test/baseResults/spv.paramMemory.frag.out b/Test/baseResults/spv.paramMemory.frag.out
index 02a4852..df13c65 100644
--- a/Test/baseResults/spv.paramMemory.frag.out
+++ b/Test/baseResults/spv.paramMemory.frag.out
@@ -1,15 +1,15 @@
 spv.paramMemory.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 69
+// Generated by (magic number): 80008
+// Id's are bound by 64
 
                               Capability Shader
                               Capability StorageImageReadWithoutFormat
                               Capability StorageImageWriteWithoutFormat
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 27 66
+                              EntryPoint Fragment 4  "main" 27 61
                               ExecutionMode 4 OriginUpperLeft
                               Source ESSL 310
                               Name 4  "main"
@@ -22,39 +22,28 @@
                               Name 22  "data"
                               Name 27  "in_coords"
                               Name 35  "read1"
-                              Name 38  "image1"
-                              Name 39  "param"
-                              Name 42  "read2"
-                              Name 45  "image2"
+                              Name 38  "read2"
+                              Name 43  "image3"
                               Name 46  "param"
-                              Name 49  "image3"
-                              Name 53  "param"
-                              Name 55  "param"
-                              Name 57  "image4"
-                              Name 61  "param"
-                              Name 63  "param"
-                              Name 66  "out_color"
+                              Name 48  "param"
+                              Name 52  "image4"
+                              Name 56  "param"
+                              Name 58  "param"
+                              Name 61  "out_color"
                               Decorate 14(image) Coherent
                               Decorate 14(image) NonWritable
                               Decorate 20(image) Coherent
                               Decorate 20(image) NonReadable
                               Decorate 27(in_coords) Flat
                               Decorate 27(in_coords) Location 0
-                              Decorate 38(image1) DescriptorSet 0
-                              Decorate 38(image1) Binding 0
-                              Decorate 38(image1) Coherent
-                              Decorate 38(image1) NonWritable
-                              Decorate 45(image2) DescriptorSet 0
-                              Decorate 45(image2) Binding 2
-                              Decorate 45(image2) NonWritable
-                              Decorate 49(image3) DescriptorSet 0
-                              Decorate 49(image3) Binding 1
-                              Decorate 49(image3) Coherent
-                              Decorate 49(image3) NonReadable
-                              Decorate 57(image4) DescriptorSet 0
-                              Decorate 57(image4) Binding 3
-                              Decorate 57(image4) NonReadable
-                              Decorate 66(out_color) Location 0
+                              Decorate 43(image3) DescriptorSet 0
+                              Decorate 43(image3) Binding 1
+                              Decorate 43(image3) Coherent
+                              Decorate 43(image3) NonReadable
+                              Decorate 52(image4) DescriptorSet 0
+                              Decorate 52(image4) Binding 3
+                              Decorate 52(image4) NonReadable
+                              Decorate 61(out_color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -69,51 +58,44 @@
               19:             TypeFunction 2 8(ptr) 11(ptr) 18(ptr)
               26:             TypePointer Input 10(ivec2)
    27(in_coords):     26(ptr) Variable Input
-              36:             TypeImage 6(float) 2D nonsampled format:Rgba32f
-              37:             TypePointer UniformConstant 36
-      38(image1):     37(ptr) Variable UniformConstant
-              43:             TypeImage 6(float) 2D nonsampled format:Rgba16f
-              44:             TypePointer UniformConstant 43
-      45(image2):     44(ptr) Variable UniformConstant
-      49(image3):     37(ptr) Variable UniformConstant
-              51:    6(float) Constant 1056964608
-      57(image4):     44(ptr) Variable UniformConstant
-              59:    6(float) Constant 1073741824
-              65:             TypePointer Output 12(fvec4)
-   66(out_color):     65(ptr) Variable Output
-              67:    6(float) Constant 0
-              68:   12(fvec4) ConstantComposite 67 67 67 67
+              36:    6(float) Constant 1053609165
+              37:   12(fvec4) ConstantComposite 36 36 36 36
+              39:    6(float) Constant 1056964608
+              40:   12(fvec4) ConstantComposite 39 39 39 39
+              41:             TypeImage 6(float) 2D nonsampled format:Rgba32f
+              42:             TypePointer UniformConstant 41
+      43(image3):     42(ptr) Variable UniformConstant
+              50:             TypeImage 6(float) 2D nonsampled format:Rgba16f
+              51:             TypePointer UniformConstant 50
+      52(image4):     51(ptr) Variable UniformConstant
+              54:    6(float) Constant 1073741824
+              60:             TypePointer Output 12(fvec4)
+   61(out_color):     60(ptr) Variable Output
+              62:    6(float) Constant 0
+              63:   12(fvec4) ConstantComposite 62 62 62 62
          4(main):           2 Function None 3
                5:             Label
        35(read1):     18(ptr) Variable Function
-       39(param):     11(ptr) Variable Function
-       42(read2):     18(ptr) Variable Function
+       38(read2):     18(ptr) Variable Function
        46(param):     11(ptr) Variable Function
-       53(param):     11(ptr) Variable Function
-       55(param):     18(ptr) Variable Function
-       61(param):     11(ptr) Variable Function
-       63(param):     18(ptr) Variable Function
-              40:   10(ivec2) Load 27(in_coords)
-                              Store 39(param) 40
-              41:   12(fvec4) FunctionCall 16(image_load(I21;vi2;) 38(image1) 39(param)
-                              Store 35(read1) 41
+       48(param):     18(ptr) Variable Function
+       56(param):     11(ptr) Variable Function
+       58(param):     18(ptr) Variable Function
+                              Store 35(read1) 37
+                              Store 38(read2) 40
+              44:   12(fvec4) Load 35(read1)
+              45:   12(fvec4) VectorTimesScalar 44 39
               47:   10(ivec2) Load 27(in_coords)
                               Store 46(param) 47
-              48:   12(fvec4) FunctionCall 16(image_load(I21;vi2;) 45(image2) 46(param)
-                              Store 42(read2) 48
-              50:   12(fvec4) Load 35(read1)
-              52:   12(fvec4) VectorTimesScalar 50 51
-              54:   10(ivec2) Load 27(in_coords)
-                              Store 53(param) 54
-                              Store 55(param) 52
-              56:           2 FunctionCall 23(image_store(I21;vi2;vf4;) 49(image3) 53(param) 55(param)
-              58:   12(fvec4) Load 42(read2)
-              60:   12(fvec4) VectorTimesScalar 58 59
-              62:   10(ivec2) Load 27(in_coords)
-                              Store 61(param) 62
-                              Store 63(param) 60
-              64:           2 FunctionCall 23(image_store(I21;vi2;vf4;) 57(image4) 61(param) 63(param)
-                              Store 66(out_color) 68
+                              Store 48(param) 45
+              49:           2 FunctionCall 23(image_store(I21;vi2;vf4;) 43(image3) 46(param) 48(param)
+              53:   12(fvec4) Load 38(read2)
+              55:   12(fvec4) VectorTimesScalar 53 54
+              57:   10(ivec2) Load 27(in_coords)
+                              Store 56(param) 57
+                              Store 58(param) 55
+              59:           2 FunctionCall 23(image_store(I21;vi2;vf4;) 52(image4) 56(param) 58(param)
+                              Store 61(out_color) 63
                               Return
                               FunctionEnd
 16(image_load(I21;vi2;):   12(fvec4) Function None 13
diff --git a/Test/baseResults/spv.perprimitiveNV.frag.out b/Test/baseResults/spv.perprimitiveNV.frag.out
index eaff400..9943ee9 100644
--- a/Test/baseResults/spv.perprimitiveNV.frag.out
+++ b/Test/baseResults/spv.perprimitiveNV.frag.out
@@ -1,6 +1,6 @@
 spv.perprimitiveNV.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 23
 
                               Capability Shader
diff --git a/Test/baseResults/spv.pp.line.frag.out b/Test/baseResults/spv.pp.line.frag.out
index 5794177..12c5fa5 100644
--- a/Test/baseResults/spv.pp.line.frag.out
+++ b/Test/baseResults/spv.pp.line.frag.out
@@ -3,7 +3,7 @@
 WARNING: spv.pp.line.frag:7: varying deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/spv.precise.tesc.out b/Test/baseResults/spv.precise.tesc.out
index 95a048f..840e7b3 100644
--- a/Test/baseResults/spv.precise.tesc.out
+++ b/Test/baseResults/spv.precise.tesc.out
@@ -1,6 +1,6 @@
 spv.precise.tesc
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 72
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.precise.tese.out b/Test/baseResults/spv.precise.tese.out
index a73cbd8..b59ac0e 100644
--- a/Test/baseResults/spv.precise.tese.out
+++ b/Test/baseResults/spv.precise.tese.out
@@ -1,6 +1,6 @@
 spv.precise.tese
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 119
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.precision.frag.out b/Test/baseResults/spv.precision.frag.out
index 5ddb492..ac4c0aa 100644
--- a/Test/baseResults/spv.precision.frag.out
+++ b/Test/baseResults/spv.precision.frag.out
@@ -1,6 +1,6 @@
 spv.precision.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 127
 
                               Capability Shader
diff --git a/Test/baseResults/spv.precisionNonESSamp.frag.out b/Test/baseResults/spv.precisionNonESSamp.frag.out
index 0620c41..97681f3 100644
--- a/Test/baseResults/spv.precisionNonESSamp.frag.out
+++ b/Test/baseResults/spv.precisionNonESSamp.frag.out
@@ -1,6 +1,6 @@
 spv.precisionNonESSamp.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 47
 
                               Capability Shader
diff --git a/Test/baseResults/spv.prepost.frag.out b/Test/baseResults/spv.prepost.frag.out
index 3b4bfd8..a0dbbd4 100644
--- a/Test/baseResults/spv.prepost.frag.out
+++ b/Test/baseResults/spv.prepost.frag.out
@@ -1,6 +1,6 @@
 spv.prepost.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 94
 
                               Capability Shader
diff --git a/Test/baseResults/spv.privateVariableTypes.frag.out b/Test/baseResults/spv.privateVariableTypes.frag.out
new file mode 100644
index 0000000..1b8e1a5
--- /dev/null
+++ b/Test/baseResults/spv.privateVariableTypes.frag.out
@@ -0,0 +1,54 @@
+spv.privateVariableTypes.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 27
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 460
+                              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"
+                              Name 4  "main"
+                              Name 8  "i8"
+                              Name 11  "u8"
+                              Name 14  "i16"
+                              Name 17  "u16"
+                              Name 20  "i64"
+                              Name 23  "u64"
+                              Name 26  "f16"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 8 1
+               7:             TypePointer Private 6(int8_t)
+           8(i8):      7(ptr) Variable Private
+               9:             TypeInt 8 0
+              10:             TypePointer Private 9(int8_t)
+          11(u8):     10(ptr) Variable Private
+              12:             TypeInt 16 1
+              13:             TypePointer Private 12(int16_t)
+         14(i16):     13(ptr) Variable Private
+              15:             TypeInt 16 0
+              16:             TypePointer Private 15(int16_t)
+         17(u16):     16(ptr) Variable Private
+              18:             TypeInt 64 1
+              19:             TypePointer Private 18(int64_t)
+         20(i64):     19(ptr) Variable Private
+              21:             TypeInt 64 0
+              22:             TypePointer Private 21(int64_t)
+         23(u64):     22(ptr) Variable Private
+              24:             TypeFloat 16
+              25:             TypePointer Private 24(float16_t)
+         26(f16):     25(ptr) Variable Private
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.pushConstant.vert.out b/Test/baseResults/spv.pushConstant.vert.out
index 40ee328..5348edb 100644
--- a/Test/baseResults/spv.pushConstant.vert.out
+++ b/Test/baseResults/spv.pushConstant.vert.out
@@ -1,6 +1,6 @@
 spv.pushConstant.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/spv.pushConstantAnon.vert.out b/Test/baseResults/spv.pushConstantAnon.vert.out
index b03855d..3932b42 100644
--- a/Test/baseResults/spv.pushConstantAnon.vert.out
+++ b/Test/baseResults/spv.pushConstantAnon.vert.out
@@ -1,6 +1,6 @@
 spv.pushConstantAnon.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.qualifiers.vert.out b/Test/baseResults/spv.qualifiers.vert.out
index ffdc6f8..47f73a0 100644
--- a/Test/baseResults/spv.qualifiers.vert.out
+++ b/Test/baseResults/spv.qualifiers.vert.out
@@ -1,6 +1,6 @@
 spv.qualifiers.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.queryL.frag.out b/Test/baseResults/spv.queryL.frag.out
index 87dbb8c..97d845a 100644
--- a/Test/baseResults/spv.queryL.frag.out
+++ b/Test/baseResults/spv.queryL.frag.out
@@ -1,7 +1,7 @@
 spv.queryL.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 224
 
                               Capability Shader
diff --git a/Test/baseResults/spv.rankShift.comp.out b/Test/baseResults/spv.rankShift.comp.out
index 3ca7514..e0fba77 100644
--- a/Test/baseResults/spv.rankShift.comp.out
+++ b/Test/baseResults/spv.rankShift.comp.out
@@ -1,6 +1,6 @@
 spv.rankShift.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.autoassign-2.frag.out b/Test/baseResults/spv.register.autoassign-2.frag.out
index 533e388..9fd317e 100644
--- a/Test/baseResults/spv.register.autoassign-2.frag.out
+++ b/Test/baseResults/spv.register.autoassign-2.frag.out
@@ -1,6 +1,6 @@
 spv.register.autoassign-2.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 47
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.autoassign.frag.out b/Test/baseResults/spv.register.autoassign.frag.out
index 123ea35..74118ef 100644
--- a/Test/baseResults/spv.register.autoassign.frag.out
+++ b/Test/baseResults/spv.register.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.register.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 155
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.noautoassign.frag.out b/Test/baseResults/spv.register.noautoassign.frag.out
index 3259f41..1292b0b 100644
--- a/Test/baseResults/spv.register.noautoassign.frag.out
+++ b/Test/baseResults/spv.register.noautoassign.frag.out
@@ -1,6 +1,6 @@
 spv.register.noautoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 155
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.subpass.frag.out b/Test/baseResults/spv.register.subpass.frag.out
index c42832a..21f7955 100644
--- a/Test/baseResults/spv.register.subpass.frag.out
+++ b/Test/baseResults/spv.register.subpass.frag.out
@@ -1,6 +1,6 @@
 spv.register.subpass.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/spv.rw.autoassign.frag.out b/Test/baseResults/spv.rw.autoassign.frag.out
index 2ee30bc..a575e78 100644
--- a/Test/baseResults/spv.rw.autoassign.frag.out
+++ b/Test/baseResults/spv.rw.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.rw.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sample.frag.out b/Test/baseResults/spv.sample.frag.out
index e4d38f3..57fbf31 100644
--- a/Test/baseResults/spv.sample.frag.out
+++ b/Test/baseResults/spv.sample.frag.out
@@ -1,6 +1,6 @@
 spv.sample.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 13
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sampleId.frag.out b/Test/baseResults/spv.sampleId.frag.out
index 894d8db..1412da2 100644
--- a/Test/baseResults/spv.sampleId.frag.out
+++ b/Test/baseResults/spv.sampleId.frag.out
@@ -1,6 +1,6 @@
 spv.sampleId.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out b/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
index 84b763b..2892325 100644
--- a/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
+++ b/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
@@ -1,10 +1,10 @@
 spv.sampleMaskOverrideCoverage.frag
-Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
+                              Capability SampleMaskOverrideCoverageNV
                               Extension  "SPV_NV_sample_mask_override_coverage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
diff --git a/Test/baseResults/spv.samplePosition.frag.out b/Test/baseResults/spv.samplePosition.frag.out
index 882423e..b06c768 100644
--- a/Test/baseResults/spv.samplePosition.frag.out
+++ b/Test/baseResults/spv.samplePosition.frag.out
@@ -1,6 +1,6 @@
 spv.samplePosition.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/spv.samplerlessTextureFunctions.frag.out b/Test/baseResults/spv.samplerlessTextureFunctions.frag.out
index 0f09b43..c12201e 100644
--- a/Test/baseResults/spv.samplerlessTextureFunctions.frag.out
+++ b/Test/baseResults/spv.samplerlessTextureFunctions.frag.out
@@ -1,6 +1,6 @@
 spv.samplerlessTextureFunctions.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 51
 
                               Capability Shader
diff --git a/Test/baseResults/spv.scalarlayout.frag.out b/Test/baseResults/spv.scalarlayout.frag.out
index 0168bc3..1b26242 100644
--- a/Test/baseResults/spv.scalarlayout.frag.out
+++ b/Test/baseResults/spv.scalarlayout.frag.out
@@ -1,7 +1,7 @@
 spv.scalarlayout.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.scalarlayoutfloat16.frag.out b/Test/baseResults/spv.scalarlayoutfloat16.frag.out
index dac7e3a..c88fa7f 100644
--- a/Test/baseResults/spv.scalarlayoutfloat16.frag.out
+++ b/Test/baseResults/spv.scalarlayoutfloat16.frag.out
@@ -1,7 +1,7 @@
 spv.scalarlayoutfloat16.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.separate.frag.out b/Test/baseResults/spv.separate.frag.out
index 27cd3be..690ab2f 100644
--- a/Test/baseResults/spv.separate.frag.out
+++ b/Test/baseResults/spv.separate.frag.out
@@ -1,7 +1,7 @@
 spv.separate.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 319
 
                               Capability Shader
diff --git a/Test/baseResults/spv.set.vert.out b/Test/baseResults/spv.set.vert.out
index 16d771f..fe4326f 100644
--- a/Test/baseResults/spv.set.vert.out
+++ b/Test/baseResults/spv.set.vert.out
@@ -1,6 +1,6 @@
 spv.set.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderBallot.comp.out b/Test/baseResults/spv.shaderBallot.comp.out
index 2f0e5a0..3ddee0f 100644
--- a/Test/baseResults/spv.shaderBallot.comp.out
+++ b/Test/baseResults/spv.shaderBallot.comp.out
@@ -1,7 +1,7 @@
 spv.shaderBallot.comp
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 298
+// Generated by (magic number): 80008
+// Id's are bound by 318
 
                               Capability Shader
                               Capability Int64
@@ -9,7 +9,7 @@
                               Extension  "SPV_KHR_shader_ballot"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "main" 10 12 21 23 26 29 32
+                              EntryPoint GLCompute 4  "main" 10 12 22 29 36 43 50
                               ExecutionMode 4 LocalSize 8 8 1
                               Source GLSL 450
                               SourceExtension  "GL_ARB_gpu_shader_int64"
@@ -19,30 +19,30 @@
                               Name 10  "gl_SubGroupInvocationARB"
                               Name 12  "gl_SubGroupSizeARB"
                               Name 19  "relMask"
-                              Name 21  "gl_SubGroupEqMaskARB"
-                              Name 23  "gl_SubGroupGeMaskARB"
-                              Name 26  "gl_SubGroupGtMaskARB"
-                              Name 29  "gl_SubGroupLeMaskARB"
-                              Name 32  "gl_SubGroupLtMaskARB"
-                              Name 52  "Buffers"
-                              MemberName 52(Buffers) 0  "f4"
-                              MemberName 52(Buffers) 1  "i4"
-                              MemberName 52(Buffers) 2  "u4"
-                              Name 55  "data"
+                              Name 22  "gl_SubGroupEqMaskARB"
+                              Name 29  "gl_SubGroupGeMaskARB"
+                              Name 36  "gl_SubGroupGtMaskARB"
+                              Name 43  "gl_SubGroupLeMaskARB"
+                              Name 50  "gl_SubGroupLtMaskARB"
+                              Name 72  "Buffers"
+                              MemberName 72(Buffers) 0  "f4"
+                              MemberName 72(Buffers) 1  "i4"
+                              MemberName 72(Buffers) 2  "u4"
+                              Name 75  "data"
                               Decorate 10(gl_SubGroupInvocationARB) BuiltIn SubgroupLocalInvocationId
                               Decorate 12(gl_SubGroupSizeARB) BuiltIn SubgroupSize
-                              Decorate 21(gl_SubGroupEqMaskARB) BuiltIn SubgroupEqMaskKHR
-                              Decorate 23(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR
-                              Decorate 26(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR
-                              Decorate 29(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR
-                              Decorate 32(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR
-                              MemberDecorate 52(Buffers) 0 Offset 0
-                              MemberDecorate 52(Buffers) 1 Offset 16
-                              MemberDecorate 52(Buffers) 2 Offset 32
-                              Decorate 52(Buffers) BufferBlock
-                              Decorate 55(data) DescriptorSet 0
-                              Decorate 55(data) Binding 0
-                              Decorate 297 BuiltIn WorkgroupSize
+                              Decorate 22(gl_SubGroupEqMaskARB) BuiltIn SubgroupEqMaskKHR
+                              Decorate 29(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR
+                              Decorate 36(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR
+                              Decorate 43(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR
+                              Decorate 50(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR
+                              MemberDecorate 72(Buffers) 0 Offset 0
+                              MemberDecorate 72(Buffers) 1 Offset 16
+                              MemberDecorate 72(Buffers) 2 Offset 32
+                              Decorate 72(Buffers) BufferBlock
+                              Decorate 75(data) DescriptorSet 0
+                              Decorate 75(data) Binding 0
+                              Decorate 317 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -53,43 +53,43 @@
               15:      6(int) Constant 4
               17:             TypeInt 64 0
               18:             TypePointer Function 17(int64_t)
-              20:             TypePointer Input 17(int64_t)
-21(gl_SubGroupEqMaskARB):     20(ptr) Variable Input
-23(gl_SubGroupGeMaskARB):     20(ptr) Variable Input
-26(gl_SubGroupGtMaskARB):     20(ptr) Variable Input
-29(gl_SubGroupLeMaskARB):     20(ptr) Variable Input
-32(gl_SubGroupLtMaskARB):     20(ptr) Variable Input
-              36:             TypeBool
-              37:    36(bool) ConstantTrue
-              38:             TypeVector 6(int) 4
-              42:             TypeVector 6(int) 2
-              48:             TypeFloat 32
-              49:             TypeVector 48(float) 4
-              50:             TypeInt 32 1
-              51:             TypeVector 50(int) 4
-     52(Buffers):             TypeStruct 49(fvec4) 51(ivec4) 38(ivec4)
-              53:             TypeArray 52(Buffers) 15
-              54:             TypePointer Uniform 53
-        55(data):     54(ptr) Variable Uniform
-              57:     50(int) Constant 0
-              58:      6(int) Constant 0
-              59:             TypePointer Uniform 48(float)
-              66:     50(int) Constant 1
-              67:             TypeVector 48(float) 2
-              68:             TypePointer Uniform 49(fvec4)
-              82:     50(int) Constant 2
-              83:             TypeVector 48(float) 3
-              99:     50(int) Constant 3
-             114:             TypePointer Uniform 50(int)
-             121:             TypeVector 50(int) 2
-             122:             TypePointer Uniform 51(ivec4)
-             136:             TypeVector 50(int) 3
-             166:             TypePointer Uniform 6(int)
-             173:             TypePointer Uniform 38(ivec4)
-             187:             TypeVector 6(int) 3
-             295:      6(int) Constant 8
-             296:      6(int) Constant 1
-             297:  187(ivec3) ConstantComposite 295 295 296
+              20:             TypeVector 6(int) 4
+              21:             TypePointer Input 20(ivec4)
+22(gl_SubGroupEqMaskARB):     21(ptr) Variable Input
+              26:             TypeVector 6(int) 2
+29(gl_SubGroupGeMaskARB):     21(ptr) Variable Input
+36(gl_SubGroupGtMaskARB):     21(ptr) Variable Input
+43(gl_SubGroupLeMaskARB):     21(ptr) Variable Input
+50(gl_SubGroupLtMaskARB):     21(ptr) Variable Input
+              58:             TypeBool
+              59:    58(bool) ConstantTrue
+              68:             TypeFloat 32
+              69:             TypeVector 68(float) 4
+              70:             TypeInt 32 1
+              71:             TypeVector 70(int) 4
+     72(Buffers):             TypeStruct 69(fvec4) 71(ivec4) 20(ivec4)
+              73:             TypeArray 72(Buffers) 15
+              74:             TypePointer Uniform 73
+        75(data):     74(ptr) Variable Uniform
+              77:     70(int) Constant 0
+              78:      6(int) Constant 0
+              79:             TypePointer Uniform 68(float)
+              86:     70(int) Constant 1
+              87:             TypeVector 68(float) 2
+              88:             TypePointer Uniform 69(fvec4)
+             102:     70(int) Constant 2
+             103:             TypeVector 68(float) 3
+             119:     70(int) Constant 3
+             134:             TypePointer Uniform 70(int)
+             141:             TypeVector 70(int) 2
+             142:             TypePointer Uniform 71(ivec4)
+             156:             TypeVector 70(int) 3
+             186:             TypePointer Uniform 6(int)
+             193:             TypePointer Uniform 20(ivec4)
+             207:             TypeVector 6(int) 3
+             315:      6(int) Constant 8
+             316:      6(int) Constant 1
+             317:  207(ivec3) ConstantComposite 315 315 316
          4(main):           2 Function None 3
                5:             Label
    8(invocation):      7(ptr) Variable Function
@@ -99,275 +99,295 @@
               14:      6(int) IAdd 11 13
               16:      6(int) UMod 14 15
                               Store 8(invocation) 16
-              22: 17(int64_t) Load 21(gl_SubGroupEqMaskARB)
-              24: 17(int64_t) Load 23(gl_SubGroupGeMaskARB)
-              25: 17(int64_t) IAdd 22 24
-              27: 17(int64_t) Load 26(gl_SubGroupGtMaskARB)
-              28: 17(int64_t) IAdd 25 27
-              30: 17(int64_t) Load 29(gl_SubGroupLeMaskARB)
-              31: 17(int64_t) IAdd 28 30
-              33: 17(int64_t) Load 32(gl_SubGroupLtMaskARB)
-              34: 17(int64_t) IAdd 31 33
-                              Store 19(relMask) 34
-              35: 17(int64_t) Load 19(relMask)
-              39:   38(ivec4) SubgroupBallotKHR 37
-              40:      6(int) CompositeExtract 39 0
-              41:      6(int) CompositeExtract 39 1
-              43:   42(ivec2) CompositeConstruct 40 41
-              44: 17(int64_t) Bitcast 43
-              45:    36(bool) IEqual 35 44
-                              SelectionMerge 47 None
-                              BranchConditional 45 46 216
-              46:               Label
-              56:      6(int)   Load 8(invocation)
-              60:     59(ptr)   AccessChain 55(data) 57 57 58
-              61:   48(float)   Load 60
-              62:      6(int)   Load 8(invocation)
-              63:   48(float)   SubgroupReadInvocationKHR 61 62
-              64:     59(ptr)   AccessChain 55(data) 56 57 58
-                                Store 64 63
-              65:      6(int)   Load 8(invocation)
-              69:     68(ptr)   AccessChain 55(data) 66 57
-              70:   49(fvec4)   Load 69
-              71:   67(fvec2)   VectorShuffle 70 70 0 1
-              72:      6(int)   Load 8(invocation)
-              73:   48(float)   CompositeExtract 71 0
-              74:   48(float)   SubgroupReadInvocationKHR 73 72
-              75:   48(float)   CompositeExtract 71 1
-              76:   48(float)   SubgroupReadInvocationKHR 75 72
-              77:   67(fvec2)   CompositeConstruct 74 76
-              78:     68(ptr)   AccessChain 55(data) 65 57
-              79:   49(fvec4)   Load 78
-              80:   49(fvec4)   VectorShuffle 79 77 4 5 2 3
-                                Store 78 80
-              81:      6(int)   Load 8(invocation)
-              84:     68(ptr)   AccessChain 55(data) 82 57
-              85:   49(fvec4)   Load 84
-              86:   83(fvec3)   VectorShuffle 85 85 0 1 2
-              87:      6(int)   Load 8(invocation)
-              88:   48(float)   CompositeExtract 86 0
-              89:   48(float)   SubgroupReadInvocationKHR 88 87
-              90:   48(float)   CompositeExtract 86 1
-              91:   48(float)   SubgroupReadInvocationKHR 90 87
-              92:   48(float)   CompositeExtract 86 2
-              93:   48(float)   SubgroupReadInvocationKHR 92 87
-              94:   83(fvec3)   CompositeConstruct 89 91 93
-              95:     68(ptr)   AccessChain 55(data) 81 57
-              96:   49(fvec4)   Load 95
-              97:   49(fvec4)   VectorShuffle 96 94 4 5 6 3
-                                Store 95 97
-              98:      6(int)   Load 8(invocation)
-             100:     68(ptr)   AccessChain 55(data) 99 57
-             101:   49(fvec4)   Load 100
-             102:      6(int)   Load 8(invocation)
-             103:   48(float)   CompositeExtract 101 0
-             104:   48(float)   SubgroupReadInvocationKHR 103 102
-             105:   48(float)   CompositeExtract 101 1
-             106:   48(float)   SubgroupReadInvocationKHR 105 102
-             107:   48(float)   CompositeExtract 101 2
-             108:   48(float)   SubgroupReadInvocationKHR 107 102
-             109:   48(float)   CompositeExtract 101 3
-             110:   48(float)   SubgroupReadInvocationKHR 109 102
-             111:   49(fvec4)   CompositeConstruct 104 106 108 110
-             112:     68(ptr)   AccessChain 55(data) 98 57
-                                Store 112 111
-             113:      6(int)   Load 8(invocation)
-             115:    114(ptr)   AccessChain 55(data) 57 66 58
-             116:     50(int)   Load 115
-             117:      6(int)   Load 8(invocation)
-             118:     50(int)   SubgroupReadInvocationKHR 116 117
-             119:    114(ptr)   AccessChain 55(data) 113 66 58
-                                Store 119 118
-             120:      6(int)   Load 8(invocation)
-             123:    122(ptr)   AccessChain 55(data) 66 66
-             124:   51(ivec4)   Load 123
-             125:  121(ivec2)   VectorShuffle 124 124 0 1
-             126:      6(int)   Load 8(invocation)
-             127:     50(int)   CompositeExtract 125 0
-             128:     50(int)   SubgroupReadInvocationKHR 127 126
-             129:     50(int)   CompositeExtract 125 1
-             130:     50(int)   SubgroupReadInvocationKHR 129 126
-             131:  121(ivec2)   CompositeConstruct 128 130
-             132:    122(ptr)   AccessChain 55(data) 120 66
-             133:   51(ivec4)   Load 132
-             134:   51(ivec4)   VectorShuffle 133 131 4 5 2 3
-                                Store 132 134
-             135:      6(int)   Load 8(invocation)
-             137:    122(ptr)   AccessChain 55(data) 82 66
-             138:   51(ivec4)   Load 137
-             139:  136(ivec3)   VectorShuffle 138 138 0 1 2
+              23:   20(ivec4) Load 22(gl_SubGroupEqMaskARB)
+              24:      6(int) CompositeExtract 23 0
+              25:      6(int) CompositeExtract 23 1
+              27:   26(ivec2) CompositeConstruct 24 25
+              28: 17(int64_t) Bitcast 27
+              30:   20(ivec4) Load 29(gl_SubGroupGeMaskARB)
+              31:      6(int) CompositeExtract 30 0
+              32:      6(int) CompositeExtract 30 1
+              33:   26(ivec2) CompositeConstruct 31 32
+              34: 17(int64_t) Bitcast 33
+              35: 17(int64_t) IAdd 28 34
+              37:   20(ivec4) Load 36(gl_SubGroupGtMaskARB)
+              38:      6(int) CompositeExtract 37 0
+              39:      6(int) CompositeExtract 37 1
+              40:   26(ivec2) CompositeConstruct 38 39
+              41: 17(int64_t) Bitcast 40
+              42: 17(int64_t) IAdd 35 41
+              44:   20(ivec4) Load 43(gl_SubGroupLeMaskARB)
+              45:      6(int) CompositeExtract 44 0
+              46:      6(int) CompositeExtract 44 1
+              47:   26(ivec2) CompositeConstruct 45 46
+              48: 17(int64_t) Bitcast 47
+              49: 17(int64_t) IAdd 42 48
+              51:   20(ivec4) Load 50(gl_SubGroupLtMaskARB)
+              52:      6(int) CompositeExtract 51 0
+              53:      6(int) CompositeExtract 51 1
+              54:   26(ivec2) CompositeConstruct 52 53
+              55: 17(int64_t) Bitcast 54
+              56: 17(int64_t) IAdd 49 55
+                              Store 19(relMask) 56
+              57: 17(int64_t) Load 19(relMask)
+              60:   20(ivec4) SubgroupBallotKHR 59
+              61:      6(int) CompositeExtract 60 0
+              62:      6(int) CompositeExtract 60 1
+              63:   26(ivec2) CompositeConstruct 61 62
+              64: 17(int64_t) Bitcast 63
+              65:    58(bool) IEqual 57 64
+                              SelectionMerge 67 None
+                              BranchConditional 65 66 236
+              66:               Label
+              76:      6(int)   Load 8(invocation)
+              80:     79(ptr)   AccessChain 75(data) 77 77 78
+              81:   68(float)   Load 80
+              82:      6(int)   Load 8(invocation)
+              83:   68(float)   SubgroupReadInvocationKHR 81 82
+              84:     79(ptr)   AccessChain 75(data) 76 77 78
+                                Store 84 83
+              85:      6(int)   Load 8(invocation)
+              89:     88(ptr)   AccessChain 75(data) 86 77
+              90:   69(fvec4)   Load 89
+              91:   87(fvec2)   VectorShuffle 90 90 0 1
+              92:      6(int)   Load 8(invocation)
+              93:   68(float)   CompositeExtract 91 0
+              94:   68(float)   SubgroupReadInvocationKHR 93 92
+              95:   68(float)   CompositeExtract 91 1
+              96:   68(float)   SubgroupReadInvocationKHR 95 92
+              97:   87(fvec2)   CompositeConstruct 94 96
+              98:     88(ptr)   AccessChain 75(data) 85 77
+              99:   69(fvec4)   Load 98
+             100:   69(fvec4)   VectorShuffle 99 97 4 5 2 3
+                                Store 98 100
+             101:      6(int)   Load 8(invocation)
+             104:     88(ptr)   AccessChain 75(data) 102 77
+             105:   69(fvec4)   Load 104
+             106:  103(fvec3)   VectorShuffle 105 105 0 1 2
+             107:      6(int)   Load 8(invocation)
+             108:   68(float)   CompositeExtract 106 0
+             109:   68(float)   SubgroupReadInvocationKHR 108 107
+             110:   68(float)   CompositeExtract 106 1
+             111:   68(float)   SubgroupReadInvocationKHR 110 107
+             112:   68(float)   CompositeExtract 106 2
+             113:   68(float)   SubgroupReadInvocationKHR 112 107
+             114:  103(fvec3)   CompositeConstruct 109 111 113
+             115:     88(ptr)   AccessChain 75(data) 101 77
+             116:   69(fvec4)   Load 115
+             117:   69(fvec4)   VectorShuffle 116 114 4 5 6 3
+                                Store 115 117
+             118:      6(int)   Load 8(invocation)
+             120:     88(ptr)   AccessChain 75(data) 119 77
+             121:   69(fvec4)   Load 120
+             122:      6(int)   Load 8(invocation)
+             123:   68(float)   CompositeExtract 121 0
+             124:   68(float)   SubgroupReadInvocationKHR 123 122
+             125:   68(float)   CompositeExtract 121 1
+             126:   68(float)   SubgroupReadInvocationKHR 125 122
+             127:   68(float)   CompositeExtract 121 2
+             128:   68(float)   SubgroupReadInvocationKHR 127 122
+             129:   68(float)   CompositeExtract 121 3
+             130:   68(float)   SubgroupReadInvocationKHR 129 122
+             131:   69(fvec4)   CompositeConstruct 124 126 128 130
+             132:     88(ptr)   AccessChain 75(data) 118 77
+                                Store 132 131
+             133:      6(int)   Load 8(invocation)
+             135:    134(ptr)   AccessChain 75(data) 77 86 78
+             136:     70(int)   Load 135
+             137:      6(int)   Load 8(invocation)
+             138:     70(int)   SubgroupReadInvocationKHR 136 137
+             139:    134(ptr)   AccessChain 75(data) 133 86 78
+                                Store 139 138
              140:      6(int)   Load 8(invocation)
-             141:     50(int)   CompositeExtract 139 0
-             142:     50(int)   SubgroupReadInvocationKHR 141 140
-             143:     50(int)   CompositeExtract 139 1
-             144:     50(int)   SubgroupReadInvocationKHR 143 140
-             145:     50(int)   CompositeExtract 139 2
-             146:     50(int)   SubgroupReadInvocationKHR 145 140
-             147:  136(ivec3)   CompositeConstruct 142 144 146
-             148:    122(ptr)   AccessChain 55(data) 135 66
-             149:   51(ivec4)   Load 148
-             150:   51(ivec4)   VectorShuffle 149 147 4 5 6 3
-                                Store 148 150
-             151:      6(int)   Load 8(invocation)
-             152:    122(ptr)   AccessChain 55(data) 99 66
-             153:   51(ivec4)   Load 152
-             154:      6(int)   Load 8(invocation)
-             155:     50(int)   CompositeExtract 153 0
-             156:     50(int)   SubgroupReadInvocationKHR 155 154
-             157:     50(int)   CompositeExtract 153 1
-             158:     50(int)   SubgroupReadInvocationKHR 157 154
-             159:     50(int)   CompositeExtract 153 2
-             160:     50(int)   SubgroupReadInvocationKHR 159 154
-             161:     50(int)   CompositeExtract 153 3
-             162:     50(int)   SubgroupReadInvocationKHR 161 154
-             163:   51(ivec4)   CompositeConstruct 156 158 160 162
-             164:    122(ptr)   AccessChain 55(data) 151 66
-                                Store 164 163
-             165:      6(int)   Load 8(invocation)
-             167:    166(ptr)   AccessChain 55(data) 57 82 58
-             168:      6(int)   Load 167
-             169:      6(int)   Load 8(invocation)
-             170:      6(int)   SubgroupReadInvocationKHR 168 169
-             171:    166(ptr)   AccessChain 55(data) 165 82 58
-                                Store 171 170
-             172:      6(int)   Load 8(invocation)
-             174:    173(ptr)   AccessChain 55(data) 66 82
-             175:   38(ivec4)   Load 174
-             176:   42(ivec2)   VectorShuffle 175 175 0 1
-             177:      6(int)   Load 8(invocation)
-             178:      6(int)   CompositeExtract 176 0
-             179:      6(int)   SubgroupReadInvocationKHR 178 177
-             180:      6(int)   CompositeExtract 176 1
-             181:      6(int)   SubgroupReadInvocationKHR 180 177
-             182:   42(ivec2)   CompositeConstruct 179 181
-             183:    173(ptr)   AccessChain 55(data) 172 82
-             184:   38(ivec4)   Load 183
-             185:   38(ivec4)   VectorShuffle 184 182 4 5 2 3
-                                Store 183 185
-             186:      6(int)   Load 8(invocation)
-             188:    173(ptr)   AccessChain 55(data) 82 82
-             189:   38(ivec4)   Load 188
-             190:  187(ivec3)   VectorShuffle 189 189 0 1 2
-             191:      6(int)   Load 8(invocation)
-             192:      6(int)   CompositeExtract 190 0
-             193:      6(int)   SubgroupReadInvocationKHR 192 191
-             194:      6(int)   CompositeExtract 190 1
-             195:      6(int)   SubgroupReadInvocationKHR 194 191
-             196:      6(int)   CompositeExtract 190 2
-             197:      6(int)   SubgroupReadInvocationKHR 196 191
-             198:  187(ivec3)   CompositeConstruct 193 195 197
-             199:    173(ptr)   AccessChain 55(data) 186 82
-             200:   38(ivec4)   Load 199
-             201:   38(ivec4)   VectorShuffle 200 198 4 5 6 3
-                                Store 199 201
-             202:      6(int)   Load 8(invocation)
-             203:    173(ptr)   AccessChain 55(data) 99 82
-             204:   38(ivec4)   Load 203
-             205:      6(int)   Load 8(invocation)
-             206:      6(int)   CompositeExtract 204 0
-             207:      6(int)   SubgroupReadInvocationKHR 206 205
-             208:      6(int)   CompositeExtract 204 1
-             209:      6(int)   SubgroupReadInvocationKHR 208 205
-             210:      6(int)   CompositeExtract 204 2
-             211:      6(int)   SubgroupReadInvocationKHR 210 205
-             212:      6(int)   CompositeExtract 204 3
-             213:      6(int)   SubgroupReadInvocationKHR 212 205
-             214:   38(ivec4)   CompositeConstruct 207 209 211 213
-             215:    173(ptr)   AccessChain 55(data) 202 82
-                                Store 215 214
-                                Branch 47
-             216:               Label
-             217:      6(int)   Load 8(invocation)
-             218:     59(ptr)   AccessChain 55(data) 57 57 58
-             219:   48(float)   Load 218
-             220:   48(float)   SubgroupFirstInvocationKHR 219
-             221:     59(ptr)   AccessChain 55(data) 217 57 58
-                                Store 221 220
+             143:    142(ptr)   AccessChain 75(data) 86 86
+             144:   71(ivec4)   Load 143
+             145:  141(ivec2)   VectorShuffle 144 144 0 1
+             146:      6(int)   Load 8(invocation)
+             147:     70(int)   CompositeExtract 145 0
+             148:     70(int)   SubgroupReadInvocationKHR 147 146
+             149:     70(int)   CompositeExtract 145 1
+             150:     70(int)   SubgroupReadInvocationKHR 149 146
+             151:  141(ivec2)   CompositeConstruct 148 150
+             152:    142(ptr)   AccessChain 75(data) 140 86
+             153:   71(ivec4)   Load 152
+             154:   71(ivec4)   VectorShuffle 153 151 4 5 2 3
+                                Store 152 154
+             155:      6(int)   Load 8(invocation)
+             157:    142(ptr)   AccessChain 75(data) 102 86
+             158:   71(ivec4)   Load 157
+             159:  156(ivec3)   VectorShuffle 158 158 0 1 2
+             160:      6(int)   Load 8(invocation)
+             161:     70(int)   CompositeExtract 159 0
+             162:     70(int)   SubgroupReadInvocationKHR 161 160
+             163:     70(int)   CompositeExtract 159 1
+             164:     70(int)   SubgroupReadInvocationKHR 163 160
+             165:     70(int)   CompositeExtract 159 2
+             166:     70(int)   SubgroupReadInvocationKHR 165 160
+             167:  156(ivec3)   CompositeConstruct 162 164 166
+             168:    142(ptr)   AccessChain 75(data) 155 86
+             169:   71(ivec4)   Load 168
+             170:   71(ivec4)   VectorShuffle 169 167 4 5 6 3
+                                Store 168 170
+             171:      6(int)   Load 8(invocation)
+             172:    142(ptr)   AccessChain 75(data) 119 86
+             173:   71(ivec4)   Load 172
+             174:      6(int)   Load 8(invocation)
+             175:     70(int)   CompositeExtract 173 0
+             176:     70(int)   SubgroupReadInvocationKHR 175 174
+             177:     70(int)   CompositeExtract 173 1
+             178:     70(int)   SubgroupReadInvocationKHR 177 174
+             179:     70(int)   CompositeExtract 173 2
+             180:     70(int)   SubgroupReadInvocationKHR 179 174
+             181:     70(int)   CompositeExtract 173 3
+             182:     70(int)   SubgroupReadInvocationKHR 181 174
+             183:   71(ivec4)   CompositeConstruct 176 178 180 182
+             184:    142(ptr)   AccessChain 75(data) 171 86
+                                Store 184 183
+             185:      6(int)   Load 8(invocation)
+             187:    186(ptr)   AccessChain 75(data) 77 102 78
+             188:      6(int)   Load 187
+             189:      6(int)   Load 8(invocation)
+             190:      6(int)   SubgroupReadInvocationKHR 188 189
+             191:    186(ptr)   AccessChain 75(data) 185 102 78
+                                Store 191 190
+             192:      6(int)   Load 8(invocation)
+             194:    193(ptr)   AccessChain 75(data) 86 102
+             195:   20(ivec4)   Load 194
+             196:   26(ivec2)   VectorShuffle 195 195 0 1
+             197:      6(int)   Load 8(invocation)
+             198:      6(int)   CompositeExtract 196 0
+             199:      6(int)   SubgroupReadInvocationKHR 198 197
+             200:      6(int)   CompositeExtract 196 1
+             201:      6(int)   SubgroupReadInvocationKHR 200 197
+             202:   26(ivec2)   CompositeConstruct 199 201
+             203:    193(ptr)   AccessChain 75(data) 192 102
+             204:   20(ivec4)   Load 203
+             205:   20(ivec4)   VectorShuffle 204 202 4 5 2 3
+                                Store 203 205
+             206:      6(int)   Load 8(invocation)
+             208:    193(ptr)   AccessChain 75(data) 102 102
+             209:   20(ivec4)   Load 208
+             210:  207(ivec3)   VectorShuffle 209 209 0 1 2
+             211:      6(int)   Load 8(invocation)
+             212:      6(int)   CompositeExtract 210 0
+             213:      6(int)   SubgroupReadInvocationKHR 212 211
+             214:      6(int)   CompositeExtract 210 1
+             215:      6(int)   SubgroupReadInvocationKHR 214 211
+             216:      6(int)   CompositeExtract 210 2
+             217:      6(int)   SubgroupReadInvocationKHR 216 211
+             218:  207(ivec3)   CompositeConstruct 213 215 217
+             219:    193(ptr)   AccessChain 75(data) 206 102
+             220:   20(ivec4)   Load 219
+             221:   20(ivec4)   VectorShuffle 220 218 4 5 6 3
+                                Store 219 221
              222:      6(int)   Load 8(invocation)
-             223:     68(ptr)   AccessChain 55(data) 66 57
-             224:   49(fvec4)   Load 223
-             225:   67(fvec2)   VectorShuffle 224 224 0 1
-             226:   67(fvec2)   SubgroupFirstInvocationKHR 225
-             227:     68(ptr)   AccessChain 55(data) 222 57
-             228:   49(fvec4)   Load 227
-             229:   49(fvec4)   VectorShuffle 228 226 4 5 2 3
-                                Store 227 229
-             230:      6(int)   Load 8(invocation)
-             231:     68(ptr)   AccessChain 55(data) 82 57
-             232:   49(fvec4)   Load 231
-             233:   83(fvec3)   VectorShuffle 232 232 0 1 2
-             234:   83(fvec3)   SubgroupFirstInvocationKHR 233
-             235:     68(ptr)   AccessChain 55(data) 230 57
-             236:   49(fvec4)   Load 235
-             237:   49(fvec4)   VectorShuffle 236 234 4 5 6 3
-                                Store 235 237
-             238:      6(int)   Load 8(invocation)
-             239:     68(ptr)   AccessChain 55(data) 99 57
-             240:   49(fvec4)   Load 239
-             241:   49(fvec4)   SubgroupFirstInvocationKHR 240
-             242:     68(ptr)   AccessChain 55(data) 238 57
-                                Store 242 241
-             243:      6(int)   Load 8(invocation)
-             244:    114(ptr)   AccessChain 55(data) 57 66 58
-             245:     50(int)   Load 244
-             246:     50(int)   SubgroupFirstInvocationKHR 245
-             247:    114(ptr)   AccessChain 55(data) 243 66 58
-                                Store 247 246
-             248:      6(int)   Load 8(invocation)
-             249:    122(ptr)   AccessChain 55(data) 66 66
-             250:   51(ivec4)   Load 249
-             251:  121(ivec2)   VectorShuffle 250 250 0 1
-             252:  121(ivec2)   SubgroupFirstInvocationKHR 251
-             253:    122(ptr)   AccessChain 55(data) 248 66
-             254:   51(ivec4)   Load 253
-             255:   51(ivec4)   VectorShuffle 254 252 4 5 2 3
-                                Store 253 255
-             256:      6(int)   Load 8(invocation)
-             257:    122(ptr)   AccessChain 55(data) 82 66
-             258:   51(ivec4)   Load 257
-             259:  136(ivec3)   VectorShuffle 258 258 0 1 2
-             260:  136(ivec3)   SubgroupFirstInvocationKHR 259
-             261:    122(ptr)   AccessChain 55(data) 256 66
-             262:   51(ivec4)   Load 261
-             263:   51(ivec4)   VectorShuffle 262 260 4 5 6 3
-                                Store 261 263
-             264:      6(int)   Load 8(invocation)
-             265:    122(ptr)   AccessChain 55(data) 99 66
-             266:   51(ivec4)   Load 265
-             267:   51(ivec4)   SubgroupFirstInvocationKHR 266
-             268:    122(ptr)   AccessChain 55(data) 264 66
-                                Store 268 267
-             269:      6(int)   Load 8(invocation)
-             270:    166(ptr)   AccessChain 55(data) 57 82 58
-             271:      6(int)   Load 270
-             272:      6(int)   SubgroupFirstInvocationKHR 271
-             273:    166(ptr)   AccessChain 55(data) 269 82 58
-                                Store 273 272
-             274:      6(int)   Load 8(invocation)
-             275:    173(ptr)   AccessChain 55(data) 66 82
-             276:   38(ivec4)   Load 275
-             277:   42(ivec2)   VectorShuffle 276 276 0 1
-             278:   42(ivec2)   SubgroupFirstInvocationKHR 277
-             279:    173(ptr)   AccessChain 55(data) 274 82
-             280:   38(ivec4)   Load 279
-             281:   38(ivec4)   VectorShuffle 280 278 4 5 2 3
-                                Store 279 281
-             282:      6(int)   Load 8(invocation)
-             283:    173(ptr)   AccessChain 55(data) 82 82
-             284:   38(ivec4)   Load 283
-             285:  187(ivec3)   VectorShuffle 284 284 0 1 2
-             286:  187(ivec3)   SubgroupFirstInvocationKHR 285
-             287:    173(ptr)   AccessChain 55(data) 282 82
-             288:   38(ivec4)   Load 287
-             289:   38(ivec4)   VectorShuffle 288 286 4 5 6 3
-                                Store 287 289
-             290:      6(int)   Load 8(invocation)
-             291:    173(ptr)   AccessChain 55(data) 99 82
-             292:   38(ivec4)   Load 291
-             293:   38(ivec4)   SubgroupFirstInvocationKHR 292
-             294:    173(ptr)   AccessChain 55(data) 290 82
-                                Store 294 293
-                                Branch 47
-              47:             Label
+             223:    193(ptr)   AccessChain 75(data) 119 102
+             224:   20(ivec4)   Load 223
+             225:      6(int)   Load 8(invocation)
+             226:      6(int)   CompositeExtract 224 0
+             227:      6(int)   SubgroupReadInvocationKHR 226 225
+             228:      6(int)   CompositeExtract 224 1
+             229:      6(int)   SubgroupReadInvocationKHR 228 225
+             230:      6(int)   CompositeExtract 224 2
+             231:      6(int)   SubgroupReadInvocationKHR 230 225
+             232:      6(int)   CompositeExtract 224 3
+             233:      6(int)   SubgroupReadInvocationKHR 232 225
+             234:   20(ivec4)   CompositeConstruct 227 229 231 233
+             235:    193(ptr)   AccessChain 75(data) 222 102
+                                Store 235 234
+                                Branch 67
+             236:               Label
+             237:      6(int)   Load 8(invocation)
+             238:     79(ptr)   AccessChain 75(data) 77 77 78
+             239:   68(float)   Load 238
+             240:   68(float)   SubgroupFirstInvocationKHR 239
+             241:     79(ptr)   AccessChain 75(data) 237 77 78
+                                Store 241 240
+             242:      6(int)   Load 8(invocation)
+             243:     88(ptr)   AccessChain 75(data) 86 77
+             244:   69(fvec4)   Load 243
+             245:   87(fvec2)   VectorShuffle 244 244 0 1
+             246:   87(fvec2)   SubgroupFirstInvocationKHR 245
+             247:     88(ptr)   AccessChain 75(data) 242 77
+             248:   69(fvec4)   Load 247
+             249:   69(fvec4)   VectorShuffle 248 246 4 5 2 3
+                                Store 247 249
+             250:      6(int)   Load 8(invocation)
+             251:     88(ptr)   AccessChain 75(data) 102 77
+             252:   69(fvec4)   Load 251
+             253:  103(fvec3)   VectorShuffle 252 252 0 1 2
+             254:  103(fvec3)   SubgroupFirstInvocationKHR 253
+             255:     88(ptr)   AccessChain 75(data) 250 77
+             256:   69(fvec4)   Load 255
+             257:   69(fvec4)   VectorShuffle 256 254 4 5 6 3
+                                Store 255 257
+             258:      6(int)   Load 8(invocation)
+             259:     88(ptr)   AccessChain 75(data) 119 77
+             260:   69(fvec4)   Load 259
+             261:   69(fvec4)   SubgroupFirstInvocationKHR 260
+             262:     88(ptr)   AccessChain 75(data) 258 77
+                                Store 262 261
+             263:      6(int)   Load 8(invocation)
+             264:    134(ptr)   AccessChain 75(data) 77 86 78
+             265:     70(int)   Load 264
+             266:     70(int)   SubgroupFirstInvocationKHR 265
+             267:    134(ptr)   AccessChain 75(data) 263 86 78
+                                Store 267 266
+             268:      6(int)   Load 8(invocation)
+             269:    142(ptr)   AccessChain 75(data) 86 86
+             270:   71(ivec4)   Load 269
+             271:  141(ivec2)   VectorShuffle 270 270 0 1
+             272:  141(ivec2)   SubgroupFirstInvocationKHR 271
+             273:    142(ptr)   AccessChain 75(data) 268 86
+             274:   71(ivec4)   Load 273
+             275:   71(ivec4)   VectorShuffle 274 272 4 5 2 3
+                                Store 273 275
+             276:      6(int)   Load 8(invocation)
+             277:    142(ptr)   AccessChain 75(data) 102 86
+             278:   71(ivec4)   Load 277
+             279:  156(ivec3)   VectorShuffle 278 278 0 1 2
+             280:  156(ivec3)   SubgroupFirstInvocationKHR 279
+             281:    142(ptr)   AccessChain 75(data) 276 86
+             282:   71(ivec4)   Load 281
+             283:   71(ivec4)   VectorShuffle 282 280 4 5 6 3
+                                Store 281 283
+             284:      6(int)   Load 8(invocation)
+             285:    142(ptr)   AccessChain 75(data) 119 86
+             286:   71(ivec4)   Load 285
+             287:   71(ivec4)   SubgroupFirstInvocationKHR 286
+             288:    142(ptr)   AccessChain 75(data) 284 86
+                                Store 288 287
+             289:      6(int)   Load 8(invocation)
+             290:    186(ptr)   AccessChain 75(data) 77 102 78
+             291:      6(int)   Load 290
+             292:      6(int)   SubgroupFirstInvocationKHR 291
+             293:    186(ptr)   AccessChain 75(data) 289 102 78
+                                Store 293 292
+             294:      6(int)   Load 8(invocation)
+             295:    193(ptr)   AccessChain 75(data) 86 102
+             296:   20(ivec4)   Load 295
+             297:   26(ivec2)   VectorShuffle 296 296 0 1
+             298:   26(ivec2)   SubgroupFirstInvocationKHR 297
+             299:    193(ptr)   AccessChain 75(data) 294 102
+             300:   20(ivec4)   Load 299
+             301:   20(ivec4)   VectorShuffle 300 298 4 5 2 3
+                                Store 299 301
+             302:      6(int)   Load 8(invocation)
+             303:    193(ptr)   AccessChain 75(data) 102 102
+             304:   20(ivec4)   Load 303
+             305:  207(ivec3)   VectorShuffle 304 304 0 1 2
+             306:  207(ivec3)   SubgroupFirstInvocationKHR 305
+             307:    193(ptr)   AccessChain 75(data) 302 102
+             308:   20(ivec4)   Load 307
+             309:   20(ivec4)   VectorShuffle 308 306 4 5 6 3
+                                Store 307 309
+             310:      6(int)   Load 8(invocation)
+             311:    193(ptr)   AccessChain 75(data) 119 102
+             312:   20(ivec4)   Load 311
+             313:   20(ivec4)   SubgroupFirstInvocationKHR 312
+             314:    193(ptr)   AccessChain 75(data) 310 102
+                                Store 314 313
+                                Branch 67
+              67:             Label
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.shaderBallotAMD.comp.out b/Test/baseResults/spv.shaderBallotAMD.comp.out
index f3fbc9f..eb8f404 100644
--- a/Test/baseResults/spv.shaderBallotAMD.comp.out
+++ b/Test/baseResults/spv.shaderBallotAMD.comp.out
@@ -1,7 +1,6 @@
 spv.shaderBallotAMD.comp
-Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 1343
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderDrawParams.vert.out b/Test/baseResults/spv.shaderDrawParams.vert.out
index d6b43e8..ad51de1 100644
--- a/Test/baseResults/spv.shaderDrawParams.vert.out
+++ b/Test/baseResults/spv.shaderDrawParams.vert.out
@@ -1,6 +1,6 @@
 spv.shaderDrawParams.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderFragMaskAMD.frag.out b/Test/baseResults/spv.shaderFragMaskAMD.frag.out
index 788d3ee..b1e5c0d 100644
--- a/Test/baseResults/spv.shaderFragMaskAMD.frag.out
+++ b/Test/baseResults/spv.shaderFragMaskAMD.frag.out
@@ -1,6 +1,6 @@
 spv.shaderFragMaskAMD.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderGroupVote.comp.out b/Test/baseResults/spv.shaderGroupVote.comp.out
index e45f585..a09e798 100644
--- a/Test/baseResults/spv.shaderGroupVote.comp.out
+++ b/Test/baseResults/spv.shaderGroupVote.comp.out
@@ -1,6 +1,6 @@
 spv.shaderGroupVote.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderImageFootprint.frag.out b/Test/baseResults/spv.shaderImageFootprint.frag.out
index 671eff7..7559564 100644
--- a/Test/baseResults/spv.shaderImageFootprint.frag.out
+++ b/Test/baseResults/spv.shaderImageFootprint.frag.out
@@ -1,11 +1,11 @@
 spv.shaderImageFootprint.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 622
 
                               Capability Shader
                               Capability MinLod
-                              Capability Bad
+                              Capability ImageFootprintNV
                               Extension  "SPV_NV_shader_image_footprint"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
diff --git a/Test/baseResults/spv.shaderStencilExport.frag.out b/Test/baseResults/spv.shaderStencilExport.frag.out
index 8fc691e..37fce5f 100644
--- a/Test/baseResults/spv.shaderStencilExport.frag.out
+++ b/Test/baseResults/spv.shaderStencilExport.frag.out
@@ -1,6 +1,6 @@
 spv.shaderStencilExport.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 10
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shadingRate.frag.out b/Test/baseResults/spv.shadingRate.frag.out
index 1147776..ce56113 100644
--- a/Test/baseResults/spv.shadingRate.frag.out
+++ b/Test/baseResults/spv.shadingRate.frag.out
@@ -1,6 +1,6 @@
 spv.shadingRate.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shiftOps.frag.out b/Test/baseResults/spv.shiftOps.frag.out
index 3085a55..15df236 100644
--- a/Test/baseResults/spv.shiftOps.frag.out
+++ b/Test/baseResults/spv.shiftOps.frag.out
@@ -1,6 +1,6 @@
 spv.shiftOps.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shortCircuit.frag.out b/Test/baseResults/spv.shortCircuit.frag.out
index d651824..6104b04 100644
--- a/Test/baseResults/spv.shortCircuit.frag.out
+++ b/Test/baseResults/spv.shortCircuit.frag.out
@@ -1,6 +1,6 @@
 spv.shortCircuit.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 147
 
                               Capability Shader
diff --git a/Test/baseResults/spv.simpleFunctionCall.frag.out b/Test/baseResults/spv.simpleFunctionCall.frag.out
index 627b31c..8e666a6 100644
--- a/Test/baseResults/spv.simpleFunctionCall.frag.out
+++ b/Test/baseResults/spv.simpleFunctionCall.frag.out
@@ -1,6 +1,6 @@
 spv.simpleFunctionCall.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 19
 
                               Capability Shader
diff --git a/Test/baseResults/spv.simpleMat.vert.out b/Test/baseResults/spv.simpleMat.vert.out
index 8557458..ff51dc0 100644
--- a/Test/baseResults/spv.simpleMat.vert.out
+++ b/Test/baseResults/spv.simpleMat.vert.out
@@ -2,7 +2,7 @@
 WARNING: 0:3: varying deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/spv.smBuiltins.frag.out b/Test/baseResults/spv.smBuiltins.frag.out
new file mode 100644
index 0000000..9f4cc60
--- /dev/null
+++ b/Test/baseResults/spv.smBuiltins.frag.out
@@ -0,0 +1,50 @@
+spv.smBuiltins.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 20
+
+                              Capability Shader
+                              Capability ShaderSMBuiltinsNV
+                              Extension  "SPV_NV_shader_sm_builtins"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 11 13 15 17
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_NV_shader_sm_builtins"
+                              Name 4  "main"
+                              Name 9  "data"
+                              Name 11  "gl_WarpsPerSMNV"
+                              Name 13  "gl_SMCountNV"
+                              Name 15  "gl_WarpIDNV"
+                              Name 17  "gl_SMIDNV"
+                              Decorate 9(data) Location 0
+                              Decorate 11(gl_WarpsPerSMNV) Flat
+                              Decorate 11(gl_WarpsPerSMNV) BuiltIn WarpsPerSMNV
+                              Decorate 13(gl_SMCountNV) Flat
+                              Decorate 13(gl_SMCountNV) BuiltIn SMCountNV
+                              Decorate 15(gl_WarpIDNV) Flat
+                              Decorate 15(gl_WarpIDNV) BuiltIn WarpIDNV
+                              Decorate 17(gl_SMIDNV) Flat
+                              Decorate 17(gl_SMIDNV) BuiltIn SMIDNV
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 4
+               8:             TypePointer Output 7(ivec4)
+         9(data):      8(ptr) Variable Output
+              10:             TypePointer Input 6(int)
+11(gl_WarpsPerSMNV):     10(ptr) Variable Input
+13(gl_SMCountNV):     10(ptr) Variable Input
+ 15(gl_WarpIDNV):     10(ptr) Variable Input
+   17(gl_SMIDNV):     10(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+              12:      6(int) Load 11(gl_WarpsPerSMNV)
+              14:      6(int) Load 13(gl_SMCountNV)
+              16:      6(int) Load 15(gl_WarpIDNV)
+              18:      6(int) Load 17(gl_SMIDNV)
+              19:    7(ivec4) CompositeConstruct 12 14 16 18
+                              Store 9(data) 19
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.smBuiltins.vert.out b/Test/baseResults/spv.smBuiltins.vert.out
new file mode 100644
index 0000000..0453b0c
--- /dev/null
+++ b/Test/baseResults/spv.smBuiltins.vert.out
@@ -0,0 +1,62 @@
+spv.smBuiltins.vert
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 29
+
+                              Capability Shader
+                              Capability ShaderSMBuiltinsNV
+                              Extension  "SPV_NV_shader_sm_builtins"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 15 18 20 22 24
+                              Source GLSL 450
+                              SourceExtension  "GL_NV_shader_sm_builtins"
+                              Name 4  "main"
+                              Name 9  "Output"
+                              MemberName 9(Output) 0  "result"
+                              Name 11  ""
+                              Name 15  "gl_VertexIndex"
+                              Name 18  "gl_WarpsPerSMNV"
+                              Name 20  "gl_SMCountNV"
+                              Name 22  "gl_WarpIDNV"
+                              Name 24  "gl_SMIDNV"
+                              Decorate 8 ArrayStride 16
+                              MemberDecorate 9(Output) 0 Offset 0
+                              Decorate 9(Output) BufferBlock
+                              Decorate 11 DescriptorSet 0
+                              Decorate 11 Binding 0
+                              Decorate 15(gl_VertexIndex) BuiltIn VertexIndex
+                              Decorate 18(gl_WarpsPerSMNV) BuiltIn WarpsPerSMNV
+                              Decorate 20(gl_SMCountNV) BuiltIn SMCountNV
+                              Decorate 22(gl_WarpIDNV) BuiltIn WarpIDNV
+                              Decorate 24(gl_SMIDNV) BuiltIn SMIDNV
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 4
+               8:             TypeRuntimeArray 7(ivec4)
+       9(Output):             TypeStruct 8
+              10:             TypePointer Uniform 9(Output)
+              11:     10(ptr) Variable Uniform
+              12:             TypeInt 32 1
+              13:     12(int) Constant 0
+              14:             TypePointer Input 12(int)
+15(gl_VertexIndex):     14(ptr) Variable Input
+              17:             TypePointer Input 6(int)
+18(gl_WarpsPerSMNV):     17(ptr) Variable Input
+20(gl_SMCountNV):     17(ptr) Variable Input
+ 22(gl_WarpIDNV):     17(ptr) Variable Input
+   24(gl_SMIDNV):     17(ptr) Variable Input
+              27:             TypePointer Uniform 7(ivec4)
+         4(main):           2 Function None 3
+               5:             Label
+              16:     12(int) Load 15(gl_VertexIndex)
+              19:      6(int) Load 18(gl_WarpsPerSMNV)
+              21:      6(int) Load 20(gl_SMCountNV)
+              23:      6(int) Load 22(gl_WarpIDNV)
+              25:      6(int) Load 24(gl_SMIDNV)
+              26:    7(ivec4) CompositeConstruct 19 21 23 25
+              28:     27(ptr) AccessChain 11 13 16
+                              Store 28 26
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.sparseTexture.frag.out b/Test/baseResults/spv.sparseTexture.frag.out
index 7fdea0c..3414200 100644
--- a/Test/baseResults/spv.sparseTexture.frag.out
+++ b/Test/baseResults/spv.sparseTexture.frag.out
@@ -1,7 +1,7 @@
 spv.sparseTexture.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 438
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sparseTextureClamp.frag.out b/Test/baseResults/spv.sparseTextureClamp.frag.out
index ff7dce5..fedd64a 100644
--- a/Test/baseResults/spv.sparseTextureClamp.frag.out
+++ b/Test/baseResults/spv.sparseTextureClamp.frag.out
@@ -1,7 +1,7 @@
 spv.sparseTextureClamp.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 360
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConst.vert.out b/Test/baseResults/spv.specConst.vert.out
index 70fbd09..116c136 100644
--- a/Test/baseResults/spv.specConst.vert.out
+++ b/Test/baseResults/spv.specConst.vert.out
@@ -1,6 +1,6 @@
 spv.specConst.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstArrayCheck.vert.out b/Test/baseResults/spv.specConstArrayCheck.vert.out
new file mode 100755
index 0000000..d9b0779
--- /dev/null
+++ b/Test/baseResults/spv.specConstArrayCheck.vert.out
@@ -0,0 +1,6 @@
+spv.specConstArrayCheck.vert
+ERROR: 0:13: '[' :  array index out of range '6'
+ERROR: 1 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.specConstant.comp.out b/Test/baseResults/spv.specConstant.comp.out
index 2f64150..e0ad699 100644
--- a/Test/baseResults/spv.specConstant.comp.out
+++ b/Test/baseResults/spv.specConstant.comp.out
@@ -1,6 +1,6 @@
 spv.specConstant.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstant.vert.out b/Test/baseResults/spv.specConstant.vert.out
index 0d47dce..77317ae 100644
--- a/Test/baseResults/spv.specConstant.vert.out
+++ b/Test/baseResults/spv.specConstant.vert.out
@@ -1,6 +1,6 @@
 spv.specConstant.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 81
 
                               Capability Shader
@@ -11,7 +11,7 @@
                               Source GLSL 400
                               Name 4  "main"
                               Name 9  "arraySize"
-                              Name 14  "foo(vf4[s2765];"
+                              Name 14  "foo(vf4[s4530];"
                               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[s2765];) 47(param)
+              49:           2 FunctionCall 14(foo(vf4[s4530];) 47(param)
                               Return
                               FunctionEnd
-14(foo(vf4[s2765];):           2 Function None 12
+14(foo(vf4[s4530];):           2 Function None 12
            13(p):     11(ptr) FunctionParameter
               15:             Label
               54:     24(ptr) AccessChain 53(dupUcol) 23
diff --git a/Test/baseResults/spv.specConstantComposite.vert.out b/Test/baseResults/spv.specConstantComposite.vert.out
index 58d4b6a..20a071b 100644
--- a/Test/baseResults/spv.specConstantComposite.vert.out
+++ b/Test/baseResults/spv.specConstantComposite.vert.out
@@ -1,6 +1,6 @@
 spv.specConstantComposite.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstantOperations.vert.out b/Test/baseResults/spv.specConstantOperations.vert.out
index 0f141e3..747d50b 100644
--- a/Test/baseResults/spv.specConstantOperations.vert.out
+++ b/Test/baseResults/spv.specConstantOperations.vert.out
@@ -1,6 +1,6 @@
 spv.specConstantOperations.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 162
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specTexture.frag.out b/Test/baseResults/spv.specTexture.frag.out
new file mode 100755
index 0000000..a4cf47d
--- /dev/null
+++ b/Test/baseResults/spv.specTexture.frag.out
@@ -0,0 +1,43 @@
+spv.specTexture.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 23
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9
+                              ExecutionMode 4 OriginLowerLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "color_out"
+                              Name 13  "tex"
+                              Name 19  "offs"
+                              Decorate 9(color_out) Location 0
+                              Decorate 13(tex) DescriptorSet 0
+                              Decorate 13(tex) Binding 0
+                              Decorate 19(offs) SpecId 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+    9(color_out):      8(ptr) Variable Output
+              10:             TypeImage 6(float) 2D sampled format:Unknown
+              11:             TypeSampledImage 10
+              12:             TypePointer UniformConstant 11
+         13(tex):     12(ptr) Variable UniformConstant
+              15:             TypeVector 6(float) 2
+              16:    6(float) Constant 0
+              17:   15(fvec2) ConstantComposite 16 16
+              18:             TypeInt 32 1
+        19(offs):     18(int) SpecConstant 0
+              20:             TypeVector 18(int) 2
+              21:   20(ivec2) SpecConstantComposite 19(offs) 19(offs)
+         4(main):           2 Function None 3
+               5:             Label
+              14:          11 Load 13(tex)
+              22:    7(fvec4) ImageSampleExplicitLod 14 17 Lod ConstOffset 16 21
+                              Store 9(color_out) 22
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ssbo.autoassign.frag.out b/Test/baseResults/spv.ssbo.autoassign.frag.out
index 40afa15..7d64847 100644
--- a/Test/baseResults/spv.ssbo.autoassign.frag.out
+++ b/Test/baseResults/spv.ssbo.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.ssbo.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 99
 
                               Capability Shader
diff --git a/Test/baseResults/spv.ssboAlias.frag.out b/Test/baseResults/spv.ssboAlias.frag.out
index f03d2ca..1711d9d 100644
--- a/Test/baseResults/spv.ssboAlias.frag.out
+++ b/Test/baseResults/spv.ssboAlias.frag.out
@@ -1,6 +1,6 @@
 spv.ssboAlias.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/spv.stereoViewRendering.tesc.out b/Test/baseResults/spv.stereoViewRendering.tesc.out
index 03b20f9..2cab064 100644
--- a/Test/baseResults/spv.stereoViewRendering.tesc.out
+++ b/Test/baseResults/spv.stereoViewRendering.tesc.out
@@ -1,8 +1,7 @@
 spv.stereoViewRendering.tesc
-Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 38
+// Generated by (magic number): 80008
+// Id's are bound by 42
 
                               Capability Geometry
                               Capability Tessellation
@@ -14,7 +13,7 @@
                               Extension  "SPV_NV_viewport_array2"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 16 18 31 37
+                              EntryPoint TessellationControl 4  "main" 16 18 31 41
                               ExecutionMode 4 OutputVertices 4
                               Source GLSL 450
                               SourceExtension  "GL_NV_stereo_view_rendering"
@@ -32,7 +31,7 @@
                               MemberName 27(gl_PerVertex) 3  "gl_CullDistance"
                               MemberName 27(gl_PerVertex) 4  "gl_SecondaryPositionNV"
                               Name 31  "gl_in"
-                              Name 37  "gl_Layer"
+                              Name 41  "gl_Layer"
                               MemberDecorate 12(gl_PerVertex) 0 BuiltIn SecondaryPositionNV
                               MemberDecorate 12(gl_PerVertex) 1 BuiltIn SecondaryViewportMaskNV
                               Decorate 12(gl_PerVertex) Block
@@ -41,10 +40,11 @@
                               MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance
+                              MemberDecorate 27(gl_PerVertex) 4 BuiltIn SecondaryPositionNV
                               Decorate 27(gl_PerVertex) Block
-                              Decorate 37(gl_Layer) BuiltIn Layer
-                              Decorate 37(gl_Layer) ViewportRelativeNV
-                              Decorate 37(gl_Layer) SecondaryViewportRelativeNV 1
+                              Decorate 41(gl_Layer) BuiltIn Layer
+                              Decorate 41(gl_Layer) ViewportRelativeNV
+                              Decorate 41(gl_Layer) SecondaryViewportRelativeNV 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -71,8 +71,9 @@
               30:             TypePointer Input 29
        31(gl_in):     30(ptr) Variable Input
               32:             TypePointer Input 7(fvec4)
-              35:             TypePointer Output 7(fvec4)
-    37(gl_Layer):     22(ptr) Variable Output
+              35:      8(int) Constant 4
+              39:             TypePointer Output 7(fvec4)
+    41(gl_Layer):     22(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
               19:      8(int) Load 18(gl_InvocationID)
@@ -81,7 +82,10 @@
               24:      8(int) Load 18(gl_InvocationID)
               33:     32(ptr) AccessChain 31(gl_in) 20 21
               34:    7(fvec4) Load 33
-              36:     35(ptr) AccessChain 16(gl_out) 24 21
-                              Store 36 34
+              36:     32(ptr) AccessChain 31(gl_in) 20 35
+              37:    7(fvec4) Load 36
+              38:    7(fvec4) FAdd 34 37
+              40:     39(ptr) AccessChain 16(gl_out) 24 21
+                              Store 40 38
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.stereoViewRendering.vert.out b/Test/baseResults/spv.stereoViewRendering.vert.out
index afd8c75..acb8338 100644
--- a/Test/baseResults/spv.stereoViewRendering.vert.out
+++ b/Test/baseResults/spv.stereoViewRendering.vert.out
@@ -1,6 +1,6 @@
 spv.stereoViewRendering.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.storageBuffer.vert.out b/Test/baseResults/spv.storageBuffer.vert.out
index 5006e4c..79cf9f1 100644
--- a/Test/baseResults/spv.storageBuffer.vert.out
+++ b/Test/baseResults/spv.storageBuffer.vert.out
@@ -1,6 +1,6 @@
 spv.storageBuffer.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/spv.structAssignment.frag.out b/Test/baseResults/spv.structAssignment.frag.out
index 4b357da..d61c0e4 100644
--- a/Test/baseResults/spv.structAssignment.frag.out
+++ b/Test/baseResults/spv.structAssignment.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/spv.structDeref.frag.out b/Test/baseResults/spv.structDeref.frag.out
index 6888a85..2a114d7 100644
--- a/Test/baseResults/spv.structDeref.frag.out
+++ b/Test/baseResults/spv.structDeref.frag.out
@@ -1,6 +1,6 @@
 spv.structDeref.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 123
 
                               Capability Shader
diff --git a/Test/baseResults/spv.structure.frag.out b/Test/baseResults/spv.structure.frag.out
index f1da59f..e8f8b39 100644
--- a/Test/baseResults/spv.structure.frag.out
+++ b/Test/baseResults/spv.structure.frag.out
@@ -1,6 +1,6 @@
 spv.structure.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroup.frag.out b/Test/baseResults/spv.subgroup.frag.out
index 4dd636e..ee932bf 100644
--- a/Test/baseResults/spv.subgroup.frag.out
+++ b/Test/baseResults/spv.subgroup.frag.out
@@ -1,6 +1,6 @@
 spv.subgroup.frag
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 17
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroup.geom.out b/Test/baseResults/spv.subgroup.geom.out
index a68343a..279e646 100644
--- a/Test/baseResults/spv.subgroup.geom.out
+++ b/Test/baseResults/spv.subgroup.geom.out
@@ -1,6 +1,6 @@
 spv.subgroup.geom
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 26
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.subgroup.tesc.out b/Test/baseResults/spv.subgroup.tesc.out
index 4e362e2..bc55b4e 100644
--- a/Test/baseResults/spv.subgroup.tesc.out
+++ b/Test/baseResults/spv.subgroup.tesc.out
@@ -1,6 +1,6 @@
 spv.subgroup.tesc
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 26
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.subgroup.tese.out b/Test/baseResults/spv.subgroup.tese.out
index e09f558..6b0a5ce 100644
--- a/Test/baseResults/spv.subgroup.tese.out
+++ b/Test/baseResults/spv.subgroup.tese.out
@@ -1,6 +1,6 @@
 spv.subgroup.tese
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 26
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.subgroup.vert.out b/Test/baseResults/spv.subgroup.vert.out
index 2fbc92b..6deaf55 100644
--- a/Test/baseResults/spv.subgroup.vert.out
+++ b/Test/baseResults/spv.subgroup.vert.out
@@ -1,6 +1,6 @@
 spv.subgroup.vert
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupArithmetic.comp.out b/Test/baseResults/spv.subgroupArithmetic.comp.out
index f4e251a..29ea9ec 100644
--- a/Test/baseResults/spv.subgroupArithmetic.comp.out
+++ b/Test/baseResults/spv.subgroupArithmetic.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupArithmetic.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 2085
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupBallot.comp.out b/Test/baseResults/spv.subgroupBallot.comp.out
index ea152d9..9fe1964 100644
--- a/Test/baseResults/spv.subgroupBallot.comp.out
+++ b/Test/baseResults/spv.subgroupBallot.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupBallot.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 397
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupBasic.comp.out b/Test/baseResults/spv.subgroupBasic.comp.out
index 641534d..2f6571b 100644
--- a/Test/baseResults/spv.subgroupBasic.comp.out
+++ b/Test/baseResults/spv.subgroupBasic.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupBasic.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupClustered.comp.out b/Test/baseResults/spv.subgroupClustered.comp.out
index 150eb8a..3971281 100644
--- a/Test/baseResults/spv.subgroupClustered.comp.out
+++ b/Test/baseResults/spv.subgroupClustered.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupClustered.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 737
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out b/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out
new file mode 100644
index 0000000..263f48d
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out
@@ -0,0 +1,4280 @@
+spv.subgroupExtendedTypesArithmetic.comp
+// Module Version 10300
+// Generated by (magic number): 80008
+// 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..9f6a8c0
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out
@@ -0,0 +1,560 @@
+spv.subgroupExtendedTypesBallot.comp
+// Module Version 10300
+// Generated by (magic number): 80008
+// 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..af3385e
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out
@@ -0,0 +1,1520 @@
+spv.subgroupExtendedTypesClustered.comp
+// Module Version 10300
+// Generated by (magic number): 80008
+// 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..9de4b98
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out
@@ -0,0 +1,1835 @@
+spv.subgroupExtendedTypesPartitioned.comp
+// Module Version 10300
+// Generated by (magic number): 80008
+// 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..ebd6132
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out
@@ -0,0 +1,981 @@
+spv.subgroupExtendedTypesQuad.comp
+// Module Version 10300
+// Generated by (magic number): 80008
+// 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..f241389
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out
@@ -0,0 +1,616 @@
+spv.subgroupExtendedTypesShuffle.comp
+// Module Version 10300
+// Generated by (magic number): 80008
+// 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..06150b0
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out
@@ -0,0 +1,616 @@
+spv.subgroupExtendedTypesShuffleRelative.comp
+// Module Version 10300
+// Generated by (magic number): 80008
+// 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..63cc844
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out
@@ -0,0 +1,377 @@
+spv.subgroupExtendedTypesVote.comp
+// Module Version 10300
+// Generated by (magic number): 80008
+// 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.subgroupPartitioned.comp.out b/Test/baseResults/spv.subgroupPartitioned.comp.out
index ab4e0c2..e16e309 100644
--- a/Test/baseResults/spv.subgroupPartitioned.comp.out
+++ b/Test/baseResults/spv.subgroupPartitioned.comp.out
@@ -1,7 +1,6 @@
 spv.subgroupPartitioned.comp
-Validation failed
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 2506
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupQuad.comp.out b/Test/baseResults/spv.subgroupQuad.comp.out
index 435c490..1c5e963 100644
--- a/Test/baseResults/spv.subgroupQuad.comp.out
+++ b/Test/baseResults/spv.subgroupQuad.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupQuad.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 616
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupShuffle.comp.out b/Test/baseResults/spv.subgroupShuffle.comp.out
index 991c6fa..532b0d2 100644
--- a/Test/baseResults/spv.subgroupShuffle.comp.out
+++ b/Test/baseResults/spv.subgroupShuffle.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupShuffle.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 379
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupShuffleRelative.comp.out b/Test/baseResults/spv.subgroupShuffleRelative.comp.out
index 3aad760..ae5589a 100644
--- a/Test/baseResults/spv.subgroupShuffleRelative.comp.out
+++ b/Test/baseResults/spv.subgroupShuffleRelative.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupShuffleRelative.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 379
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupVote.comp.out b/Test/baseResults/spv.subgroupVote.comp.out
index 4fdbb0b..6f6f8cf 100644
--- a/Test/baseResults/spv.subgroupVote.comp.out
+++ b/Test/baseResults/spv.subgroupVote.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupVote.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 216
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subpass.frag.out b/Test/baseResults/spv.subpass.frag.out
index 706624d..4bc556a 100644
--- a/Test/baseResults/spv.subpass.frag.out
+++ b/Test/baseResults/spv.subpass.frag.out
@@ -1,6 +1,6 @@
 spv.subpass.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 67
 
                               Capability Shader
diff --git a/Test/baseResults/spv.switch.frag.out b/Test/baseResults/spv.switch.frag.out
index 47cc5d4..729257c 100644
--- a/Test/baseResults/spv.switch.frag.out
+++ b/Test/baseResults/spv.switch.frag.out
@@ -4,7 +4,7 @@
 WARNING: 0:139: 'switch' : last case/default label not followed by statements 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 269
 
                               Capability Shader
diff --git a/Test/baseResults/spv.swizzle.frag.out b/Test/baseResults/spv.swizzle.frag.out
index 2a132d5..9b31a26 100644
--- a/Test/baseResults/spv.swizzle.frag.out
+++ b/Test/baseResults/spv.swizzle.frag.out
@@ -1,6 +1,6 @@
 spv.swizzle.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 108
 
                               Capability Shader
diff --git a/Test/baseResults/spv.swizzleInversion.frag.out b/Test/baseResults/spv.swizzleInversion.frag.out
index 0aee7ae..7964360 100644
--- a/Test/baseResults/spv.swizzleInversion.frag.out
+++ b/Test/baseResults/spv.swizzleInversion.frag.out
@@ -1,6 +1,6 @@
 spv.swizzleInversion.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 46
 
                               Capability Shader
diff --git a/Test/baseResults/spv.test.frag.out b/Test/baseResults/spv.test.frag.out
index 02e4f66..db77cbb 100644
--- a/Test/baseResults/spv.test.frag.out
+++ b/Test/baseResults/spv.test.frag.out
@@ -1,6 +1,6 @@
 spv.test.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 55
 
                               Capability Shader
diff --git a/Test/baseResults/spv.test.vert.out b/Test/baseResults/spv.test.vert.out
index 3303c88..3b06c66 100644
--- a/Test/baseResults/spv.test.vert.out
+++ b/Test/baseResults/spv.test.vert.out
@@ -2,7 +2,7 @@
 WARNING: 0:5: attribute deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.texture.frag.out b/Test/baseResults/spv.texture.frag.out
index d518ad7..3ea7338 100644
--- a/Test/baseResults/spv.texture.frag.out
+++ b/Test/baseResults/spv.texture.frag.out
@@ -4,7 +4,7 @@
 WARNING: 0:12: varying deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 305
 
                               Capability Shader
diff --git a/Test/baseResults/spv.texture.sampler.transform.frag.out b/Test/baseResults/spv.texture.sampler.transform.frag.out
index 612f2a9..f2306e7 100644
--- a/Test/baseResults/spv.texture.sampler.transform.frag.out
+++ b/Test/baseResults/spv.texture.sampler.transform.frag.out
@@ -1,6 +1,6 @@
 spv.texture.sampler.transform.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.texture.vert.out b/Test/baseResults/spv.texture.vert.out
index f3f979c..3f9336b 100644
--- a/Test/baseResults/spv.texture.vert.out
+++ b/Test/baseResults/spv.texture.vert.out
@@ -1,6 +1,6 @@
 spv.texture.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 150
 
                               Capability Shader
diff --git a/Test/baseResults/spv.textureBuffer.vert.out b/Test/baseResults/spv.textureBuffer.vert.out
index 252a9c8..4631290 100644
--- a/Test/baseResults/spv.textureBuffer.vert.out
+++ b/Test/baseResults/spv.textureBuffer.vert.out
@@ -1,6 +1,6 @@
 spv.textureBuffer.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/spv.textureGatherBiasLod.frag.out b/Test/baseResults/spv.textureGatherBiasLod.frag.out
index cd18688..aada70d 100644
--- a/Test/baseResults/spv.textureGatherBiasLod.frag.out
+++ b/Test/baseResults/spv.textureGatherBiasLod.frag.out
@@ -1,7 +1,7 @@
 spv.textureGatherBiasLod.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 298
 
                               Capability Shader
diff --git a/Test/baseResults/spv.types.frag.out b/Test/baseResults/spv.types.frag.out
index e6fd3e0..3f7fd12 100644
--- a/Test/baseResults/spv.types.frag.out
+++ b/Test/baseResults/spv.types.frag.out
@@ -1,6 +1,6 @@
 spv.types.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 260
 
                               Capability Shader
diff --git a/Test/baseResults/spv.uint.frag.out b/Test/baseResults/spv.uint.frag.out
index e6fe5e4..612b323 100644
--- a/Test/baseResults/spv.uint.frag.out
+++ b/Test/baseResults/spv.uint.frag.out
@@ -1,6 +1,6 @@
 spv.uint.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 213
 
                               Capability Shader
diff --git a/Test/baseResults/spv.uniformArray.frag.out b/Test/baseResults/spv.uniformArray.frag.out
index 0f9883e..339d1de 100644
--- a/Test/baseResults/spv.uniformArray.frag.out
+++ b/Test/baseResults/spv.uniformArray.frag.out
@@ -1,6 +1,6 @@
 spv.uniformArray.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/spv.unit1.frag.out b/Test/baseResults/spv.unit1.frag.out
index d64d437..b2ec724 100644
--- a/Test/baseResults/spv.unit1.frag.out
+++ b/Test/baseResults/spv.unit1.frag.out
@@ -193,7 +193,7 @@
 0:?     'h3' ( global highp float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 69
 
                               Capability Shader
diff --git a/Test/baseResults/spv.variableArrayIndex.frag.out b/Test/baseResults/spv.variableArrayIndex.frag.out
index 87d934e..cc6d96b 100644
--- a/Test/baseResults/spv.variableArrayIndex.frag.out
+++ b/Test/baseResults/spv.variableArrayIndex.frag.out
@@ -1,6 +1,6 @@
 spv.variableArrayIndex.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 93
 
                               Capability Shader
diff --git a/Test/baseResults/spv.varyingArray.frag.out b/Test/baseResults/spv.varyingArray.frag.out
index 2628f82..d5a59ae 100644
--- a/Test/baseResults/spv.varyingArray.frag.out
+++ b/Test/baseResults/spv.varyingArray.frag.out
@@ -1,6 +1,6 @@
 spv.varyingArray.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 61
 
                               Capability Shader
diff --git a/Test/baseResults/spv.varyingArrayIndirect.frag.out b/Test/baseResults/spv.varyingArrayIndirect.frag.out
index 60e9857..799def9 100644
--- a/Test/baseResults/spv.varyingArrayIndirect.frag.out
+++ b/Test/baseResults/spv.varyingArrayIndirect.frag.out
@@ -1,6 +1,6 @@
 spv.varyingArrayIndirect.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/spv.vecMatConstruct.frag.out b/Test/baseResults/spv.vecMatConstruct.frag.out
index 57ecd67..004b2bc 100644
--- a/Test/baseResults/spv.vecMatConstruct.frag.out
+++ b/Test/baseResults/spv.vecMatConstruct.frag.out
@@ -1,6 +1,6 @@
 spv.vecMatConstruct.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 62
 
                               Capability Shader
diff --git a/Test/baseResults/spv.viewportArray2.tesc.out b/Test/baseResults/spv.viewportArray2.tesc.out
index a4016d4..78ee00d 100644
--- a/Test/baseResults/spv.viewportArray2.tesc.out
+++ b/Test/baseResults/spv.viewportArray2.tesc.out
@@ -1,7 +1,7 @@
 spv.viewportArray2.tesc
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 25
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.viewportArray2.vert.out b/Test/baseResults/spv.viewportArray2.vert.out
index df116cf..6d419a6 100644
--- a/Test/baseResults/spv.viewportArray2.vert.out
+++ b/Test/baseResults/spv.viewportArray2.vert.out
@@ -1,6 +1,6 @@
 spv.viewportArray2.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 19
 
                               Capability Shader
diff --git a/Test/baseResults/spv.voidFunction.frag.out b/Test/baseResults/spv.voidFunction.frag.out
index fbaee87..804b32c 100644
--- a/Test/baseResults/spv.voidFunction.frag.out
+++ b/Test/baseResults/spv.voidFunction.frag.out
@@ -1,6 +1,6 @@
 spv.voidFunction.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/spv.volatileAtomic.comp.out b/Test/baseResults/spv.volatileAtomic.comp.out
new file mode 100644
index 0000000..8326374
--- /dev/null
+++ b/Test/baseResults/spv.volatileAtomic.comp.out
@@ -0,0 +1,40 @@
+spv.volatileAtomic.comp
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 18
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "D"
+                              MemberName 8(D) 0  "d"
+                              Name 10  "d"
+                              Decorate 7 ArrayStride 4
+                              MemberDecorate 8(D) 0 Volatile
+                              MemberDecorate 8(D) 0 Coherent
+                              MemberDecorate 8(D) 0 Offset 0
+                              Decorate 8(D) BufferBlock
+                              Decorate 10(d) DescriptorSet 0
+                              Decorate 10(d) Binding 3
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeRuntimeArray 6(int)
+            8(D):             TypeStruct 7
+               9:             TypePointer Uniform 8(D)
+           10(d):      9(ptr) Variable Uniform
+              11:             TypeInt 32 1
+              12:     11(int) Constant 0
+              13:             TypePointer Uniform 6(int)
+              15:      6(int) Constant 0
+              16:      6(int) Constant 1
+         4(main):           2 Function None 3
+               5:             Label
+              14:     13(ptr) AccessChain 10(d) 12 12
+              17:      6(int) AtomicExchange 14 16 15 15
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.vulkan110.int16.frag.out b/Test/baseResults/spv.vulkan110.int16.frag.out
index 11f1cd3..b94593c 100644
--- a/Test/baseResults/spv.vulkan110.int16.frag.out
+++ b/Test/baseResults/spv.vulkan110.int16.frag.out
@@ -1,6 +1,6 @@
 spv.vulkan110.int16.frag
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 523
 
                               Capability Shader
diff --git a/Test/baseResults/spv.vulkan110.storageBuffer.vert.out b/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
index a019471..7592cf7 100644
--- a/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
+++ b/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
@@ -1,6 +1,6 @@
 spv.vulkan110.storageBuffer.vert
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/spv.while-continue-break.vert.out b/Test/baseResults/spv.while-continue-break.vert.out
index d49bca0..132f503 100644
--- a/Test/baseResults/spv.while-continue-break.vert.out
+++ b/Test/baseResults/spv.while-continue-break.vert.out
@@ -1,6 +1,6 @@
 spv.while-continue-break.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 41
 
                               Capability Shader
diff --git a/Test/baseResults/spv.while-simple.vert.out b/Test/baseResults/spv.while-simple.vert.out
index b507da3..ea9a980 100644
--- a/Test/baseResults/spv.while-simple.vert.out
+++ b/Test/baseResults/spv.while-simple.vert.out
@@ -1,6 +1,6 @@
 spv.while-simple.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/spv.whileLoop.frag.out b/Test/baseResults/spv.whileLoop.frag.out
index e294972..67d44f4 100644
--- a/Test/baseResults/spv.whileLoop.frag.out
+++ b/Test/baseResults/spv.whileLoop.frag.out
@@ -1,6 +1,6 @@
 spv.whileLoop.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfb.vert.out b/Test/baseResults/spv.xfb.vert.out
index 3cd93d5..7eb38b3 100644
--- a/Test/baseResults/spv.xfb.vert.out
+++ b/Test/baseResults/spv.xfb.vert.out
@@ -1,6 +1,6 @@
 spv.xfb.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 16
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfb2.vert.out b/Test/baseResults/spv.xfb2.vert.out
index a8551a1..0f593da 100644
--- a/Test/baseResults/spv.xfb2.vert.out
+++ b/Test/baseResults/spv.xfb2.vert.out
@@ -1,6 +1,6 @@
 spv.xfb2.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfb3.vert.out b/Test/baseResults/spv.xfb3.vert.out
index 0218847..77894b4 100644
--- a/Test/baseResults/spv.xfb3.vert.out
+++ b/Test/baseResults/spv.xfb3.vert.out
@@ -1,6 +1,6 @@
 spv.xfb3.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out b/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out
index 066aa3a..52ce965 100644
--- a/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out
+++ b/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out
@@ -1,6 +1,6 @@
 spv.xfbOffsetOnBlockMembersAssignment.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out b/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out
index 7eb4593..13be843 100644
--- a/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out
+++ b/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out
@@ -1,6 +1,6 @@
 spv.xfbOffsetOnStructMembersAssignment.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 40
 
                               Capability Shader
@@ -27,16 +27,14 @@
                               Name 34  ""
                               Name 38  "gl_VertexID"
                               Name 39  "gl_InstanceID"
-                              MemberDecorate 7(S) 0 Offset 16
-                              MemberDecorate 7(S) 1 Offset 20
                               Decorate 9(s1) Location 0
                               Decorate 9(s1) XfbBuffer 2
                               Decorate 9(s1) XfbStride 24
-                              MemberDecorate 19(S2) 0 Offset 8
-                              MemberDecorate 19(S2) 1 Offset 12
+                              Decorate 9(s1) Offset 16
                               Decorate 21(s2) Location 5
                               Decorate 21(s2) XfbBuffer 1
                               Decorate 21(s2) XfbStride 28
+                              Decorate 21(s2) Offset 8
                               MemberDecorate 32(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 32(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 32(gl_PerVertex) 2 BuiltIn ClipDistance
diff --git a/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out b/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out
index ebc4962..7159f4a 100644
--- a/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out
+++ b/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out
@@ -1,6 +1,6 @@
 spv.xfbOverlapOffsetCheckWithBlockAndMember.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfbStrideJustOnce.vert.out b/Test/baseResults/spv.xfbStrideJustOnce.vert.out
index 9b459b5..270d17a 100644
--- a/Test/baseResults/spv.xfbStrideJustOnce.vert.out
+++ b/Test/baseResults/spv.xfbStrideJustOnce.vert.out
@@ -1,6 +1,6 @@
 spv.xfbStrideJustOnce.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/vulkan.ast.vert.out b/Test/baseResults/vulkan.ast.vert.out
index 72a4570..2bf2065 100644
--- a/Test/baseResults/vulkan.ast.vert.out
+++ b/Test/baseResults/vulkan.ast.vert.out
@@ -258,7 +258,7 @@
 0:?       2 (const int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/vulkan.frag.out b/Test/baseResults/vulkan.frag.out
index c81ed25..e620898 100644
--- a/Test/baseResults/vulkan.frag.out
+++ b/Test/baseResults/vulkan.frag.out
@@ -7,14 +7,14 @@
 ERROR: 0:9: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:10: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:14: 'sampler2D' : sampler-constructor requires two arguments 
-ERROR: 0:15: 'sampler2D' : sampler-constructor first argument must be a scalar textureXXX type 
-ERROR: 0:16: 'sampler2D' : sampler-constructor first argument must be a scalar textureXXX type 
-ERROR: 0:17: 'sampler2D' : sampler-constructor second argument must be a scalar type 'sampler' 
-ERROR: 0:18: 'sampler2D' : sampler-constructor second argument must be a scalar type 'sampler' 
-ERROR: 0:19: 'sampler2D' : sampler-constructor second argument must be a scalar type 'sampler' 
+ERROR: 0:15: 'sampler2D' : sampler-constructor first argument must be a scalar *texture* type 
+ERROR: 0:16: 'sampler2D' : sampler-constructor first argument must be a scalar *texture* type 
+ERROR: 0:17: 'sampler2D' : sampler-constructor second argument must be a scalar sampler or samplerShadow 
+ERROR: 0:18: 'sampler2D' : sampler-constructor second argument must be a scalar sampler or samplerShadow 
+ERROR: 0:19: 'sampler2D' : sampler-constructor second argument must be a scalar sampler or samplerShadow 
 ERROR: 0:21: 'sampler3D' : sampler-constructor cannot make an array of samplers 
-ERROR: 0:22: 'sampler2D' : sampler-constructor first argument must be a scalar textureXXX type 
-ERROR: 0:23: 'sampler2D' : sampler-constructor first argument must match type and dimensionality of constructor type 
+ERROR: 0:22: 'sampler2D' : sampler-constructor first argument must be a scalar *texture* type 
+ERROR: 0:23: 'sampler2D' : sampler-constructor first argument must be a *texture* type matching the dimensionality and sampled type of the constructor 
 ERROR: 0:28: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: s2D
 ERROR: 0:29: 'sampler3D' : sampler-constructor cannot make an array of samplers 
 ERROR: 0:29: 'sampler3D' : sampler/image types can only be used in uniform variables or function parameters: s3d
diff --git a/Test/baseResults/vulkan.vert.out b/Test/baseResults/vulkan.vert.out
index 19fdade..7ee611a 100644
--- a/Test/baseResults/vulkan.vert.out
+++ b/Test/baseResults/vulkan.vert.out
@@ -30,14 +30,30 @@
 ERROR: 0:34: '=' : can't use with types containing arrays sized with a specialization constant 
 ERROR: 0:35: '==' : can't use with types containing arrays sized with a specialization constant 
 ERROR: 0:39: 'set' : cannot be used with push_constant 
-ERROR: 0:49: '[]' : only outermost dimension of an array of arrays can be a specialization constant 
-ERROR: 0:50: '[]' : only outermost dimension of an array of arrays can be a specialization constant 
-ERROR: 0:51: '[]' : only outermost dimension of an array of arrays can be a specialization constant 
 ERROR: 0:54: '[]' : only outermost dimension of an array of arrays can be a specialization constant 
 ERROR: 0:54: 'location' : SPIR-V requires location for user input/output 
 ERROR: 0:58: 'location' : SPIR-V requires location for user input/output 
 ERROR: 0:65: 'location' : overlapping use of location 10
-ERROR: 38 compilation errors.  No code generated.
+ERROR: 0:68: 'location' : needs a literal integer 
+ERROR: 0:68: 'component' : needs a literal integer 
+ERROR: 0:69: 'binding' : needs a literal integer 
+ERROR: 0:69: 'set' : needs a literal integer 
+ERROR: 0:70: 'offset' : needs a literal integer 
+ERROR: 0:71: 'align' : must be a power of 2 
+ERROR: 0:71: 'align' : needs a literal integer 
+ERROR: 0:72: 'xfb_offset' : needs a literal integer 
+ERROR: 0:73: 'xfb_buffer' : needs a literal integer 
+ERROR: 0:74: 'xfb_stride' : needs a literal integer 
+ERROR: 0:73: 'xfb_buffer' : member cannot contradict block (or what block inherited from global) 
+ERROR: 0:72: 'xfb layout qualifier' : can only be used on an output 
+ERROR: 0:73: 'xfb layout qualifier' : can only be used on an output 
+ERROR: 0:74: 'xfb layout qualifier' : can only be used on an output 
+ERROR: 0:76: 'input_attachment_index' : needs a literal integer 
+ERROR: 0:76: 'input_attachment_index' : can only be used with a subpass 
+ERROR: 0:77: 'constant_id' : needs a literal integer 
+ERROR: 0:77: 'constant_id' : can only be applied to 'const'-qualified scalar 
+ERROR: 0:77: 'constant_id' : can only be applied to a scalar 
+ERROR: 54 compilation errors.  No code generated.
 
 
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/web.array.frag.out b/Test/baseResults/web.array.frag.out
new file mode 100644
index 0000000..61c9db9
--- /dev/null
+++ b/Test/baseResults/web.array.frag.out
@@ -0,0 +1,102 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 74
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %colorOut
+               OpExecutionMode %main OriginUpperLeft
+               OpSource ESSL 310
+               OpName %main "main"
+               OpName %foo_f1_5__ "foo(f1[5];"
+               OpName %a "a"
+               OpName %g4 "g4"
+               OpName %g5 "g5"
+               OpName %param "param"
+               OpName %u "u"
+               OpName %param_0 "param"
+               OpName %colorOut "colorOut"
+               OpDecorate %colorOut Location 0
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+       %uint = OpTypeInt 32 0
+     %uint_5 = OpConstant %uint 5
+%_arr_float_uint_5 = OpTypeArray %float %uint_5
+%_ptr_Function__arr_float_uint_5 = OpTypePointer Function %_arr_float_uint_5
+     %uint_4 = OpConstant %uint 4
+%_arr_float_uint_4 = OpTypeArray %float %uint_4
+         %13 = OpTypeFunction %_arr_float_uint_4 %_ptr_Function__arr_float_uint_5
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+%_ptr_Function_float = OpTypePointer Function %float
+      %int_1 = OpConstant %int 1
+      %int_2 = OpConstant %int 2
+      %int_3 = OpConstant %int 3
+%_ptr_Private__arr_float_uint_4 = OpTypePointer Private %_arr_float_uint_4
+         %g4 = OpVariable %_ptr_Private__arr_float_uint_4 Private
+%_ptr_Private__arr_float_uint_5 = OpTypePointer Private %_arr_float_uint_5
+         %g5 = OpVariable %_ptr_Private__arr_float_uint_5 Private
+    %float_1 = OpConstant %float 1
+    %float_2 = OpConstant %float 2
+    %float_3 = OpConstant %float 3
+    %float_4 = OpConstant %float 4
+         %45 = OpConstantComposite %_arr_float_uint_4 %float_1 %float_2 %float_3 %float_4
+       %bool = OpTypeBool
+    %v2float = OpTypeVector %float 2
+%_ptr_Output_v2float = OpTypePointer Output %v2float
+   %colorOut = OpVariable %_ptr_Output_v2float Output
+    %float_5 = OpConstant %float 5
+         %73 = OpConstantComposite %v2float %float_4 %float_5
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+      %param = OpVariable %_ptr_Function__arr_float_uint_5 Function
+          %u = OpVariable %_ptr_Function__arr_float_uint_5 Function
+    %param_0 = OpVariable %_ptr_Function__arr_float_uint_5 Function
+         %39 = OpLoad %_arr_float_uint_5 %g5
+               OpStore %param %39
+         %40 = OpFunctionCall %_arr_float_uint_4 %foo_f1_5__ %param
+               OpStore %g4 %40
+         %46 = OpLoad %_arr_float_uint_4 %g4
+         %48 = OpCompositeExtract %float %45 0
+         %49 = OpCompositeExtract %float %46 0
+         %50 = OpFOrdEqual %bool %48 %49
+         %51 = OpCompositeExtract %float %45 1
+         %52 = OpCompositeExtract %float %46 1
+         %53 = OpFOrdEqual %bool %51 %52
+         %54 = OpLogicalAnd %bool %50 %53
+         %55 = OpCompositeExtract %float %45 2
+         %56 = OpCompositeExtract %float %46 2
+         %57 = OpFOrdEqual %bool %55 %56
+         %58 = OpLogicalAnd %bool %54 %57
+         %59 = OpCompositeExtract %float %45 3
+         %60 = OpCompositeExtract %float %46 3
+         %61 = OpFOrdEqual %bool %59 %60
+         %62 = OpLogicalAnd %bool %58 %61
+               OpSelectionMerge %64 None
+               OpBranchConditional %62 %63 %64
+         %63 = OpLabel
+               OpBranch %64
+         %64 = OpLabel
+         %67 = OpLoad %_arr_float_uint_5 %u
+               OpStore %param_0 %67
+         %68 = OpFunctionCall %_arr_float_uint_4 %foo_f1_5__ %param_0
+               OpStore %colorOut %73
+               OpReturn
+               OpFunctionEnd
+ %foo_f1_5__ = OpFunction %_arr_float_uint_4 None %13
+          %a = OpFunctionParameter %_ptr_Function__arr_float_uint_5
+         %16 = OpLabel
+         %20 = OpAccessChain %_ptr_Function_float %a %int_0
+         %21 = OpLoad %float %20
+         %23 = OpAccessChain %_ptr_Function_float %a %int_1
+         %24 = OpLoad %float %23
+         %26 = OpAccessChain %_ptr_Function_float %a %int_2
+         %27 = OpLoad %float %26
+         %29 = OpAccessChain %_ptr_Function_float %a %int_3
+         %30 = OpLoad %float %29
+         %31 = OpCompositeConstruct %_arr_float_uint_4 %21 %24 %27 %30
+               OpReturnValue %31
+               OpFunctionEnd
diff --git a/Test/baseResults/web.basic.vert.out b/Test/baseResults/web.basic.vert.out
new file mode 100644
index 0000000..46c147f
--- /dev/null
+++ b/Test/baseResults/web.basic.vert.out
@@ -0,0 +1,65 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %outv4 %inv4
+               OpSource ESSL 310
+               OpName %main "main"
+               OpName %outv4 "outv4"
+               OpName %inv4 "inv4"
+               OpName %uBlock "uBlock"
+               OpMemberName %uBlock 0 "a"
+               OpMemberName %uBlock 1 "b"
+               OpMemberName %uBlock 2 "c"
+               OpName %uInst "uInst"
+               OpDecorate %outv4 Location 1
+               OpDecorate %inv4 Location 2
+               OpMemberDecorate %uBlock 0 Offset 0
+               OpMemberDecorate %uBlock 1 Offset 16
+               OpMemberDecorate %uBlock 2 Offset 32
+               OpDecorate %uBlock Block
+               OpDecorate %uInst DescriptorSet 0
+               OpDecorate %uInst Binding 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+      %outv4 = OpVariable %_ptr_Output_v4float Output
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+       %inv4 = OpVariable %_ptr_Input_v4float Input
+        %int = OpTypeInt 32 1
+      %v4int = OpTypeVector %int 4
+       %uint = OpTypeInt 32 0
+     %v4uint = OpTypeVector %uint 4
+     %uBlock = OpTypeStruct %v4float %v4int %v4uint
+%_ptr_Uniform_uBlock = OpTypePointer Uniform %uBlock
+      %uInst = OpVariable %_ptr_Uniform_uBlock Uniform
+      %int_0 = OpConstant %int 0
+%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
+      %int_1 = OpConstant %int 1
+%_ptr_Uniform_v4int = OpTypePointer Uniform %v4int
+      %int_2 = OpConstant %int 2
+%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %12 = OpLoad %v4float %inv4
+         %13 = OpExtInst %v4float %1 Normalize %12
+         %23 = OpAccessChain %_ptr_Uniform_v4float %uInst %int_0
+         %24 = OpLoad %v4float %23
+         %25 = OpFMul %v4float %13 %24
+         %28 = OpAccessChain %_ptr_Uniform_v4int %uInst %int_1
+         %29 = OpLoad %v4int %28
+         %30 = OpConvertSToF %v4float %29
+         %31 = OpFMul %v4float %25 %30
+         %34 = OpAccessChain %_ptr_Uniform_v4uint %uInst %int_2
+         %35 = OpLoad %v4uint %34
+         %36 = OpConvertUToF %v4float %35
+         %37 = OpFMul %v4float %31 %36
+               OpStore %outv4 %37
+               OpReturn
+               OpFunctionEnd
diff --git a/Test/baseResults/web.builtins.frag.out b/Test/baseResults/web.builtins.frag.out
new file mode 100644
index 0000000..ecf0304
--- /dev/null
+++ b/Test/baseResults/web.builtins.frag.out
@@ -0,0 +1,149 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 69
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %gl_FragCoord %gl_FragDepth %sc %s2 %sf %c1D %c2D %c4D %c3D %ic1D %ic3D %ic4D
+               OpExecutionMode %main OriginUpperLeft
+               OpExecutionMode %main DepthReplacing
+               OpSource ESSL 310
+               OpName %main "main"
+               OpName %f "f"
+               OpName %gl_FragCoord "gl_FragCoord"
+               OpName %gl_FragDepth "gl_FragDepth"
+               OpName %sc "sc"
+               OpName %S2 "S2"
+               OpMemberName %S2 0 "c"
+               OpMemberName %S2 1 "f"
+               OpName %s2 "s2"
+               OpName %sf "sf"
+               OpName %c1D "c1D"
+               OpName %c2D "c2D"
+               OpName %c4D "c4D"
+               OpName %c3D "c3D"
+               OpName %ic1D "ic1D"
+               OpName %ic3D "ic3D"
+               OpName %ic4D "ic4D"
+               OpDecorate %f RelaxedPrecision
+               OpDecorate %gl_FragCoord BuiltIn FragCoord
+               OpDecorate %gl_FragDepth BuiltIn FragDepth
+               OpDecorate %19 RelaxedPrecision
+               OpDecorate %sc RelaxedPrecision
+               OpDecorate %sc Location 0
+               OpMemberDecorate %S2 0 RelaxedPrecision
+               OpMemberDecorate %S2 1 RelaxedPrecision
+               OpDecorate %s2 Location 8
+               OpDecorate %30 RelaxedPrecision
+               OpDecorate %sf RelaxedPrecision
+               OpDecorate %sf Location 1
+               OpDecorate %34 RelaxedPrecision
+               OpDecorate %c1D RelaxedPrecision
+               OpDecorate %c1D Location 4
+               OpDecorate %36 RelaxedPrecision
+               OpDecorate %37 RelaxedPrecision
+               OpDecorate %38 RelaxedPrecision
+               OpDecorate %39 RelaxedPrecision
+               OpDecorate %c2D RelaxedPrecision
+               OpDecorate %c2D Location 5
+               OpDecorate %43 RelaxedPrecision
+               OpDecorate %44 RelaxedPrecision
+               OpDecorate %45 RelaxedPrecision
+               OpDecorate %46 RelaxedPrecision
+               OpDecorate %47 RelaxedPrecision
+               OpDecorate %c4D RelaxedPrecision
+               OpDecorate %c4D Location 7
+               OpDecorate %49 RelaxedPrecision
+               OpDecorate %50 RelaxedPrecision
+               OpDecorate %51 RelaxedPrecision
+               OpDecorate %52 RelaxedPrecision
+               OpDecorate %53 RelaxedPrecision
+               OpDecorate %c3D RelaxedPrecision
+               OpDecorate %c3D Location 6
+               OpDecorate %55 RelaxedPrecision
+               OpDecorate %56 RelaxedPrecision
+               OpDecorate %ic1D RelaxedPrecision
+               OpDecorate %ic1D Flat
+               OpDecorate %ic1D Location 1
+               OpDecorate %ic3D RelaxedPrecision
+               OpDecorate %ic3D Flat
+               OpDecorate %ic3D Location 2
+               OpDecorate %ic4D RelaxedPrecision
+               OpDecorate %ic4D Flat
+               OpDecorate %ic4D Location 3
+               OpDecorate %68 RelaxedPrecision
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+%_ptr_Function_float = OpTypePointer Function %float
+    %v4float = OpTypeVector %float 4
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+%gl_FragCoord = OpVariable %_ptr_Input_v4float Input
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Input_float = OpTypePointer Input %float
+%_ptr_Output_float = OpTypePointer Output %float
+%gl_FragDepth = OpVariable %_ptr_Output_float Output
+    %v3float = OpTypeVector %float 3
+%_ptr_Output_v3float = OpTypePointer Output %v3float
+         %sc = OpVariable %_ptr_Output_v3float Output
+         %S2 = OpTypeStruct %v3float %float
+%_ptr_Input_S2 = OpTypePointer Input %S2
+         %s2 = OpVariable %_ptr_Input_S2 Input
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+         %sf = OpVariable %_ptr_Output_float Output
+      %int_1 = OpConstant %int 1
+        %c1D = OpVariable %_ptr_Input_float Input
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+        %c2D = OpVariable %_ptr_Input_v2float Input
+        %c4D = OpVariable %_ptr_Input_v4float Input
+        %c3D = OpVariable %_ptr_Input_v3float Input
+%_ptr_Input_int = OpTypePointer Input %int
+       %ic1D = OpVariable %_ptr_Input_int Input
+      %v3int = OpTypeVector %int 3
+%_ptr_Input_v3int = OpTypePointer Input %v3int
+       %ic3D = OpVariable %_ptr_Input_v3int Input
+      %v4int = OpTypeVector %int 4
+%_ptr_Input_v4int = OpTypePointer Input %v4int
+       %ic4D = OpVariable %_ptr_Input_v4int Input
+      %v2int = OpTypeVector %int 2
+      %int_2 = OpConstant %int 2
+      %int_3 = OpConstant %int 3
+         %68 = OpConstantComposite %v2int %int_2 %int_3
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+          %f = OpVariable %_ptr_Function_float Function
+         %15 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_1
+         %16 = OpLoad %float %15
+               OpStore %f %16
+         %19 = OpLoad %float %f
+               OpStore %gl_FragDepth %19
+         %29 = OpAccessChain %_ptr_Input_v3float %s2 %int_0
+         %30 = OpLoad %v3float %29
+               OpStore %sc %30
+         %33 = OpAccessChain %_ptr_Input_float %s2 %int_1
+         %34 = OpLoad %float %33
+               OpStore %sf %34
+         %36 = OpLoad %float %c1D
+         %37 = OpExtInst %float %1 Sinh %36
+         %38 = OpLoad %float %c1D
+         %39 = OpExtInst %float %1 Cosh %38
+         %43 = OpLoad %v2float %c2D
+         %44 = OpExtInst %v2float %1 Tanh %43
+         %45 = OpVectorTimesScalar %v2float %44 %39
+         %46 = OpCompositeConstruct %v2float %37 %37
+         %47 = OpFAdd %v2float %46 %45
+         %49 = OpLoad %v4float %c4D
+         %50 = OpExtInst %v4float %1 Asinh %49
+         %51 = OpLoad %v4float %c4D
+         %52 = OpExtInst %v4float %1 Acosh %51
+         %53 = OpFAdd %v4float %50 %52
+         %55 = OpLoad %v3float %c3D
+         %56 = OpExtInst %v3float %1 Atanh %55
+               OpReturn
+               OpFunctionEnd
diff --git a/Test/baseResults/web.builtins.vert.out b/Test/baseResults/web.builtins.vert.out
new file mode 100644
index 0000000..597e731
--- /dev/null
+++ b/Test/baseResults/web.builtins.vert.out
@@ -0,0 +1,62 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 33
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %gl_Position %ps %gl_VertexIndex %gl_PointSize %gl_InstanceIndex
+               OpSource ESSL 310
+               OpName %main "main"
+               OpName %gl_Position "gl_Position"
+               OpName %ps "ps"
+               OpName %gl_VertexIndex "gl_VertexIndex"
+               OpName %gl_PointSize "gl_PointSize"
+               OpName %gl_InstanceIndex "gl_InstanceIndex"
+               OpDecorate %gl_Position Invariant
+               OpDecorate %gl_Position BuiltIn Position
+               OpDecorate %ps RelaxedPrecision
+               OpDecorate %ps Location 0
+               OpDecorate %12 RelaxedPrecision
+               OpDecorate %gl_VertexIndex BuiltIn VertexIndex
+               OpDecorate %gl_PointSize BuiltIn PointSize
+               OpDecorate %25 RelaxedPrecision
+               OpDecorate %gl_InstanceIndex BuiltIn InstanceIndex
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%gl_Position = OpVariable %_ptr_Output_v4float Output
+%_ptr_Input_float = OpTypePointer Input %float
+         %ps = OpVariable %_ptr_Input_float Input
+        %int = OpTypeInt 32 1
+      %int_4 = OpConstant %int 4
+%_ptr_Input_int = OpTypePointer Input %int
+%gl_VertexIndex = OpVariable %_ptr_Input_int Input
+%_ptr_Output_float = OpTypePointer Output %float
+%gl_PointSize = OpVariable %_ptr_Output_float Output
+      %int_5 = OpConstant %int 5
+%gl_InstanceIndex = OpVariable %_ptr_Input_int Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %12 = OpLoad %float %ps
+         %13 = OpCompositeConstruct %v4float %12 %12 %12 %12
+               OpStore %gl_Position %13
+         %18 = OpLoad %int %gl_VertexIndex
+         %19 = OpISub %int %int_4 %18
+         %20 = OpConvertSToF %float %19
+         %21 = OpLoad %v4float %gl_Position
+         %22 = OpVectorTimesScalar %v4float %21 %20
+               OpStore %gl_Position %22
+         %25 = OpLoad %float %ps
+               OpStore %gl_PointSize %25
+         %28 = OpLoad %int %gl_InstanceIndex
+         %29 = OpISub %int %int_5 %28
+         %30 = OpConvertSToF %float %29
+         %31 = OpLoad %float %gl_PointSize
+         %32 = OpFMul %float %31 %30
+               OpStore %gl_PointSize %32
+               OpReturn
+               OpFunctionEnd
diff --git a/Test/baseResults/web.comp.out b/Test/baseResults/web.comp.out
new file mode 100644
index 0000000..d0a911e
--- /dev/null
+++ b/Test/baseResults/web.comp.out
@@ -0,0 +1,157 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 108
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main" %gl_NumWorkGroups %gl_WorkGroupID %gl_LocalInvocationID %gl_GlobalInvocationID %gl_LocalInvocationIndex
+               OpExecutionMode %main LocalSize 2 5 7
+               OpSource ESSL 310
+               OpName %main "main"
+               OpName %bName "bName"
+               OpMemberName %bName 0 "size"
+               OpMemberName %bName 1 "count"
+               OpMemberName %bName 2 "data"
+               OpName %bInst "bInst"
+               OpName %s "s"
+               OpName %arrX "arrX"
+               OpName %arrY "arrY"
+               OpName %arrZ "arrZ"
+               OpName %gl_NumWorkGroups "gl_NumWorkGroups"
+               OpName %gl_WorkGroupID "gl_WorkGroupID"
+               OpName %gl_LocalInvocationID "gl_LocalInvocationID"
+               OpName %gl_GlobalInvocationID "gl_GlobalInvocationID"
+               OpName %gl_LocalInvocationIndex "gl_LocalInvocationIndex"
+               OpDecorate %_runtimearr_v4float ArrayStride 16
+               OpMemberDecorate %bName 0 Offset 0
+               OpMemberDecorate %bName 1 Offset 16
+               OpMemberDecorate %bName 2 Offset 32
+               OpDecorate %bName BufferBlock
+               OpDecorate %bInst DescriptorSet 0
+               OpDecorate %bInst Binding 0
+               OpDecorate %39 SpecId 18
+               OpDecorate %41 SpecId 19
+               OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
+               OpDecorate %gl_NumWorkGroups BuiltIn NumWorkgroups
+               OpDecorate %gl_WorkGroupID BuiltIn WorkgroupId
+               OpDecorate %gl_LocalInvocationID BuiltIn LocalInvocationId
+               OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
+               OpDecorate %gl_LocalInvocationIndex BuiltIn LocalInvocationIndex
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_2 = OpConstant %uint 2
+   %uint_264 = OpConstant %uint 264
+        %int = OpTypeInt 32 1
+     %v3uint = OpTypeVector %uint 3
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_runtimearr_v4float = OpTypeRuntimeArray %v4float
+      %bName = OpTypeStruct %int %v3uint %_runtimearr_v4float
+%_ptr_Uniform_bName = OpTypePointer Uniform %bName
+      %bInst = OpVariable %_ptr_Uniform_bName Uniform
+      %int_2 = OpConstant %int 2
+      %int_0 = OpConstant %int 0
+%_ptr_Uniform_int = OpTypePointer Uniform %int
+    %float_7 = OpConstant %float 7
+         %24 = OpConstantComposite %v4float %float_7 %float_7 %float_7 %float_7
+%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
+     %uint_1 = OpConstant %uint 1
+  %uint_3400 = OpConstant %uint 3400
+    %uint_72 = OpConstant %uint 72
+%uint_197645 = OpConstant %uint 197645
+%_arr_v4float_uint_197645 = OpTypeArray %v4float %uint_197645
+%_ptr_Workgroup__arr_v4float_uint_197645 = OpTypePointer Workgroup %_arr_v4float_uint_197645
+          %s = OpVariable %_ptr_Workgroup__arr_v4float_uint_197645 Workgroup
+      %int_3 = OpConstant %int 3
+    %float_0 = OpConstant %float 0
+         %39 = OpSpecConstant %uint 2
+     %uint_5 = OpConstant %uint 5
+         %41 = OpSpecConstant %uint 7
+%gl_WorkGroupSize = OpSpecConstantComposite %v3uint %39 %uint_5 %41
+     %uint_0 = OpConstant %uint 0
+%_arr_int_44 = OpTypeArray %int %44
+%_ptr_Private__arr_int_44 = OpTypePointer Private %_arr_int_44
+       %arrX = OpVariable %_ptr_Private__arr_int_44 Private
+%_ptr_Private_int = OpTypePointer Private %int
+%_arr_int_52 = OpTypeArray %int %52
+%_ptr_Private__arr_int_52 = OpTypePointer Private %_arr_int_52
+       %arrY = OpVariable %_ptr_Private__arr_int_52 Private
+%_arr_int_59 = OpTypeArray %int %59
+%_ptr_Private__arr_int_59 = OpTypePointer Private %_arr_int_59
+       %arrZ = OpVariable %_ptr_Private__arr_int_59 Private
+%_ptr_Workgroup_v4float = OpTypePointer Workgroup %v4float
+      %int_1 = OpConstant %int 1
+%_ptr_Input_v3uint = OpTypePointer Input %v3uint
+%gl_NumWorkGroups = OpVariable %_ptr_Input_v3uint Input
+%gl_WorkGroupID = OpVariable %_ptr_Input_v3uint Input
+%gl_LocalInvocationID = OpVariable %_ptr_Input_v3uint Input
+%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%gl_LocalInvocationIndex = OpVariable %_ptr_Input_uint Input
+%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
+      %int_5 = OpConstant %int 5
+ %int_197645 = OpConstant %int 197645
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_264
+         %20 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+         %21 = OpLoad %int %20
+         %22 = OpSDiv %int %21 %int_2
+         %26 = OpAccessChain %_ptr_Uniform_v4float %bInst %int_2 %22
+         %27 = OpLoad %v4float %26
+         %28 = OpFMul %v4float %27 %24
+         %29 = OpAccessChain %_ptr_Uniform_v4float %bInst %int_2 %22
+               OpStore %29 %28
+               OpMemoryBarrier %uint_1 %uint_3400
+               OpMemoryBarrier %uint_2 %uint_3400
+               OpMemoryBarrier %uint_1 %uint_264
+               OpMemoryBarrier %uint_1 %uint_72
+         %44 = OpCompositeExtract %uint %gl_WorkGroupSize 0
+         %49 = OpAccessChain %_ptr_Private_int %arrX %int_0
+         %50 = OpLoad %int %49
+         %51 = OpConvertSToF %float %50
+         %52 = OpCompositeExtract %uint %gl_WorkGroupSize 1
+         %56 = OpAccessChain %_ptr_Private_int %arrY %int_0
+         %57 = OpLoad %int %56
+         %58 = OpConvertSToF %float %57
+         %59 = OpCompositeExtract %uint %gl_WorkGroupSize 2
+         %63 = OpAccessChain %_ptr_Private_int %arrZ %int_0
+         %64 = OpLoad %int %63
+         %65 = OpConvertSToF %float %64
+         %66 = OpCompositeConstruct %v4float %float_0 %51 %58 %65
+         %68 = OpAccessChain %_ptr_Workgroup_v4float %s %int_3
+               OpStore %68 %66
+         %72 = OpLoad %v3uint %gl_NumWorkGroups
+         %73 = OpIAdd %v3uint %72 %gl_WorkGroupSize
+         %75 = OpLoad %v3uint %gl_WorkGroupID
+         %76 = OpIAdd %v3uint %73 %75
+         %78 = OpLoad %v3uint %gl_LocalInvocationID
+         %79 = OpIAdd %v3uint %76 %78
+         %81 = OpLoad %v3uint %gl_GlobalInvocationID
+         %84 = OpLoad %uint %gl_LocalInvocationIndex
+         %85 = OpCompositeConstruct %v3uint %84 %84 %84
+         %86 = OpIMul %v3uint %81 %85
+         %87 = OpIAdd %v3uint %79 %86
+         %89 = OpAccessChain %_ptr_Uniform_v3uint %bInst %int_1
+               OpStore %89 %87
+         %90 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+         %91 = OpAtomicIAdd %int %90 %uint_1 %uint_0 %int_2
+         %92 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+         %93 = OpAtomicSMin %int %92 %uint_1 %uint_0 %int_2
+         %94 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+         %95 = OpAtomicSMax %int %94 %uint_1 %uint_0 %int_2
+         %96 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+         %97 = OpAtomicAnd %int %96 %uint_1 %uint_0 %int_2
+         %98 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+         %99 = OpAtomicOr %int %98 %uint_1 %uint_0 %int_2
+        %100 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+        %101 = OpAtomicXor %int %100 %uint_1 %uint_0 %int_2
+        %102 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+        %103 = OpAtomicExchange %int %102 %uint_1 %uint_0 %int_2
+        %104 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+        %106 = OpAtomicCompareExchange %int %104 %uint_1 %uint_0 %uint_0 %int_2 %int_5
+               OpReturn
+               OpFunctionEnd
diff --git a/Test/baseResults/web.controlFlow.frag.out b/Test/baseResults/web.controlFlow.frag.out
new file mode 100644
index 0000000..5719989
--- /dev/null
+++ b/Test/baseResults/web.controlFlow.frag.out
@@ -0,0 +1,347 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 193
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %x %BaseColor %Count %bigColor %outColor %v4 %f_0
+               OpExecutionMode %main OriginUpperLeft
+               OpSource ESSL 310
+               OpName %main "main"
+               OpName %c "c"
+               OpName %f "f"
+               OpName %x "x"
+               OpName %d "d"
+               OpName %color "color"
+               OpName %BaseColor "BaseColor"
+               OpName %i "i"
+               OpName %Count "Count"
+               OpName %bigColor "bigColor"
+               OpName %outColor "outColor"
+               OpName %sum "sum"
+               OpName %i_0 "i"
+               OpName %v4 "v4"
+               OpName %i_1 "i"
+               OpName %tv4 "tv4"
+               OpName %r "r"
+               OpName %i_2 "i"
+               OpName %i_3 "i"
+               OpName %i_4 "i"
+               OpName %A "A"
+               OpName %B "B"
+               OpName %C "C"
+               OpName %D "D"
+               OpName %f_0 "f"
+               OpDecorate %f RelaxedPrecision
+               OpDecorate %x Location 0
+               OpDecorate %color RelaxedPrecision
+               OpDecorate %BaseColor RelaxedPrecision
+               OpDecorate %BaseColor Location 2
+               OpDecorate %47 RelaxedPrecision
+               OpDecorate %Count Flat
+               OpDecorate %Count Location 4
+               OpDecorate %bigColor RelaxedPrecision
+               OpDecorate %bigColor Location 1
+               OpDecorate %63 RelaxedPrecision
+               OpDecorate %64 RelaxedPrecision
+               OpDecorate %65 RelaxedPrecision
+               OpDecorate %outColor RelaxedPrecision
+               OpDecorate %outColor Location 0
+               OpDecorate %71 RelaxedPrecision
+               OpDecorate %sum RelaxedPrecision
+               OpDecorate %v4 Flat
+               OpDecorate %v4 Location 5
+               OpDecorate %91 RelaxedPrecision
+               OpDecorate %92 RelaxedPrecision
+               OpDecorate %93 RelaxedPrecision
+               OpDecorate %tv4 RelaxedPrecision
+               OpDecorate %111 RelaxedPrecision
+               OpDecorate %115 RelaxedPrecision
+               OpDecorate %116 RelaxedPrecision
+               OpDecorate %117 RelaxedPrecision
+               OpDecorate %118 RelaxedPrecision
+               OpDecorate %119 RelaxedPrecision
+               OpDecorate %120 RelaxedPrecision
+               OpDecorate %r RelaxedPrecision
+               OpDecorate %123 RelaxedPrecision
+               OpDecorate %124 RelaxedPrecision
+               OpDecorate %136 RelaxedPrecision
+               OpDecorate %141 RelaxedPrecision
+               OpDecorate %142 RelaxedPrecision
+               OpDecorate %143 RelaxedPrecision
+               OpDecorate %144 RelaxedPrecision
+               OpDecorate %145 RelaxedPrecision
+               OpDecorate %157 RelaxedPrecision
+               OpDecorate %158 RelaxedPrecision
+               OpDecorate %159 RelaxedPrecision
+               OpDecorate %f_0 RelaxedPrecision
+               OpDecorate %f_0 Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+%_ptr_Private_int = OpTypePointer Private %int
+          %c = OpVariable %_ptr_Private_int Private
+      %float = OpTypeFloat 32
+%_ptr_Function_float = OpTypePointer Function %float
+%_ptr_Input_float = OpTypePointer Input %float
+          %x = OpVariable %_ptr_Input_float Input
+          %d = OpVariable %_ptr_Private_int Private
+    %v4float = OpTypeVector %float 4
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+  %BaseColor = OpVariable %_ptr_Input_v4float Input
+%_ptr_Function_int = OpTypePointer Function %int
+      %int_0 = OpConstant %int 0
+%_ptr_Input_int = OpTypePointer Input %int
+      %Count = OpVariable %_ptr_Input_int Input
+       %bool = OpTypeBool
+   %bigColor = OpVariable %_ptr_Input_v4float Input
+      %int_1 = OpConstant %int 1
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+   %outColor = OpVariable %_ptr_Output_v4float Output
+    %float_0 = OpConstant %float 0
+      %int_4 = OpConstant %int 4
+       %uint = OpTypeInt 32 0
+     %v4uint = OpTypeVector %uint 4
+%_ptr_Input_v4uint = OpTypePointer Input %v4uint
+         %v4 = OpVariable %_ptr_Input_v4uint Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+     %uint_4 = OpConstant %uint 4
+    %v3float = OpTypeVector %float 3
+     %uint_3 = OpConstant %uint 3
+     %int_16 = OpConstant %int 16
+     %int_10 = OpConstant %int 10
+      %int_2 = OpConstant %int 2
+      %int_5 = OpConstant %int 5
+      %int_3 = OpConstant %int 3
+        %f_0 = OpVariable %_ptr_Input_float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+          %f = OpVariable %_ptr_Function_float Function
+      %color = OpVariable %_ptr_Function_v4float Function
+          %i = OpVariable %_ptr_Function_int Function
+        %sum = OpVariable %_ptr_Function_float Function
+        %i_0 = OpVariable %_ptr_Function_int Function
+        %i_1 = OpVariable %_ptr_Function_int Function
+        %tv4 = OpVariable %_ptr_Function_v4float Function
+          %r = OpVariable %_ptr_Function_v4float Function
+        %i_2 = OpVariable %_ptr_Function_int Function
+        %i_3 = OpVariable %_ptr_Function_int Function
+        %i_4 = OpVariable %_ptr_Function_int Function
+          %A = OpVariable %_ptr_Function_int Function
+          %B = OpVariable %_ptr_Function_int Function
+          %C = OpVariable %_ptr_Function_int Function
+          %D = OpVariable %_ptr_Function_int Function
+          %9 = OpLoad %int %c
+               OpSelectionMerge %13 None
+               OpSwitch %9 %12 1 %10 2 %11
+         %12 = OpLabel
+         %39 = OpLoad %float %x
+         %40 = OpExtInst %float %1 Tan %39
+               OpStore %f %40
+               OpBranch %13
+         %10 = OpLabel
+         %19 = OpLoad %float %x
+         %20 = OpExtInst %float %1 Sin %19
+               OpStore %f %20
+               OpBranch %13
+         %11 = OpLabel
+         %23 = OpLoad %int %d
+               OpSelectionMerge %26 None
+               OpSwitch %23 %26 1 %24 2 %25
+         %24 = OpLabel
+         %27 = OpLoad %float %x
+         %28 = OpLoad %float %x
+         %29 = OpFMul %float %27 %28
+         %30 = OpLoad %float %x
+         %31 = OpFMul %float %29 %30
+               OpStore %f %31
+               OpBranch %26
+         %25 = OpLabel
+         %33 = OpLoad %float %x
+         %34 = OpLoad %float %x
+         %35 = OpFMul %float %33 %34
+               OpStore %f %35
+               OpBranch %26
+         %26 = OpLabel
+               OpBranch %13
+         %13 = OpLabel
+         %47 = OpLoad %v4float %BaseColor
+               OpStore %color %47
+               OpStore %i %int_0
+               OpBranch %51
+         %51 = OpLabel
+               OpLoopMerge %53 %54 None
+               OpBranch %55
+         %55 = OpLabel
+         %56 = OpLoad %int %i
+         %59 = OpLoad %int %Count
+         %61 = OpSLessThan %bool %56 %59
+               OpBranchConditional %61 %52 %53
+         %52 = OpLabel
+         %63 = OpLoad %v4float %bigColor
+         %64 = OpLoad %v4float %color
+         %65 = OpFAdd %v4float %64 %63
+               OpStore %color %65
+               OpBranch %54
+         %54 = OpLabel
+         %66 = OpLoad %int %i
+         %68 = OpIAdd %int %66 %int_1
+               OpStore %i %68
+               OpBranch %51
+         %53 = OpLabel
+         %71 = OpLoad %v4float %color
+               OpStore %outColor %71
+               OpStore %sum %float_0
+               OpStore %i_0 %int_0
+               OpBranch %75
+         %75 = OpLabel
+               OpLoopMerge %77 %78 None
+               OpBranch %79
+         %79 = OpLabel
+         %80 = OpLoad %int %i_0
+         %82 = OpSLessThan %bool %80 %int_4
+               OpBranchConditional %82 %76 %77
+         %76 = OpLabel
+         %87 = OpLoad %int %i_0
+         %89 = OpAccessChain %_ptr_Input_uint %v4 %87
+         %90 = OpLoad %uint %89
+         %91 = OpConvertUToF %float %90
+         %92 = OpLoad %float %sum
+         %93 = OpFAdd %float %92 %91
+               OpStore %sum %93
+               OpBranch %78
+         %78 = OpLabel
+         %94 = OpLoad %int %i_0
+         %95 = OpIAdd %int %94 %int_1
+               OpStore %i_0 %95
+               OpBranch %75
+         %77 = OpLabel
+               OpStore %i_1 %int_0
+               OpBranch %97
+         %97 = OpLabel
+               OpLoopMerge %99 %100 None
+               OpBranch %101
+        %101 = OpLabel
+        %102 = OpLoad %int %i_1
+        %103 = OpSLessThan %bool %102 %int_4
+               OpBranchConditional %103 %98 %99
+         %98 = OpLabel
+        %105 = OpLoad %int %i_1
+        %106 = OpLoad %int %i_1
+        %107 = OpAccessChain %_ptr_Input_uint %v4 %106
+        %108 = OpLoad %uint %107
+        %110 = OpIMul %uint %108 %uint_4
+        %111 = OpConvertUToF %float %110
+        %112 = OpAccessChain %_ptr_Function_float %tv4 %105
+               OpStore %112 %111
+               OpBranch %100
+        %100 = OpLabel
+        %113 = OpLoad %int %i_1
+        %114 = OpIAdd %int %113 %int_1
+               OpStore %i_1 %114
+               OpBranch %97
+         %99 = OpLabel
+        %115 = OpLoad %float %sum
+        %116 = OpCompositeConstruct %v4float %115 %115 %115 %115
+        %117 = OpLoad %v4float %tv4
+        %118 = OpFAdd %v4float %116 %117
+        %119 = OpLoad %v4float %outColor
+        %120 = OpFAdd %v4float %119 %118
+               OpStore %outColor %120
+        %123 = OpLoad %v4float %BaseColor
+        %124 = OpVectorShuffle %v3float %123 %123 0 1 2
+        %125 = OpLoad %v4float %r
+        %126 = OpVectorShuffle %v4float %125 %124 4 5 6 3
+               OpStore %r %126
+               OpStore %i_2 %int_0
+               OpBranch %128
+        %128 = OpLabel
+               OpLoopMerge %130 %131 None
+               OpBranch %132
+        %132 = OpLabel
+        %133 = OpLoad %int %i_2
+        %134 = OpLoad %int %Count
+        %135 = OpSLessThan %bool %133 %134
+               OpBranchConditional %135 %129 %130
+        %129 = OpLabel
+        %136 = OpLoad %float %f
+        %138 = OpAccessChain %_ptr_Function_float %r %uint_3
+               OpStore %138 %136
+               OpBranch %131
+        %131 = OpLabel
+        %139 = OpLoad %int %i_2
+        %140 = OpIAdd %int %139 %int_1
+               OpStore %i_2 %140
+               OpBranch %128
+        %130 = OpLabel
+        %141 = OpLoad %v4float %r
+        %142 = OpVectorShuffle %v3float %141 %141 0 1 2
+        %143 = OpLoad %v4float %outColor
+        %144 = OpVectorShuffle %v3float %143 %143 0 1 2
+        %145 = OpFAdd %v3float %144 %142
+        %146 = OpLoad %v4float %outColor
+        %147 = OpVectorShuffle %v4float %146 %145 4 5 6 3
+               OpStore %outColor %147
+               OpStore %i_3 %int_0
+               OpBranch %149
+        %149 = OpLabel
+               OpLoopMerge %151 %152 None
+               OpBranch %153
+        %153 = OpLabel
+        %154 = OpLoad %int %i_3
+        %156 = OpSLessThan %bool %154 %int_16
+               OpBranchConditional %156 %150 %151
+        %150 = OpLabel
+        %157 = OpLoad %float %f
+        %158 = OpLoad %v4float %outColor
+        %159 = OpVectorTimesScalar %v4float %158 %157
+               OpStore %outColor %159
+               OpBranch %152
+        %152 = OpLabel
+        %160 = OpLoad %int %i_3
+        %161 = OpIAdd %int %160 %int_4
+               OpStore %i_3 %161
+               OpBranch %149
+        %151 = OpLabel
+               OpStore %i_4 %int_0
+               OpBranch %163
+        %163 = OpLabel
+               OpLoopMerge %165 %166 None
+               OpBranch %167
+        %167 = OpLabel
+        %168 = OpLoad %int %i_4
+        %170 = OpSLessThan %bool %168 %int_10
+               OpBranchConditional %170 %164 %165
+        %164 = OpLabel
+               OpStore %A %int_1
+        %172 = OpLoad %int %i_4
+        %174 = OpSMod %int %172 %int_2
+        %175 = OpIEqual %bool %174 %int_0
+               OpSelectionMerge %177 None
+               OpBranchConditional %175 %176 %177
+        %176 = OpLabel
+               OpStore %B %int_2
+               OpBranch %166
+        %177 = OpLabel
+        %181 = OpLoad %int %i_4
+        %183 = OpSMod %int %181 %int_5
+        %184 = OpIEqual %bool %183 %int_0
+               OpSelectionMerge %186 None
+               OpBranchConditional %184 %185 %186
+        %185 = OpLabel
+               OpStore %B %int_2
+               OpBranch %165
+        %186 = OpLabel
+        %188 = OpLoad %int %i_4
+        %189 = OpIAdd %int %188 %int_1
+               OpStore %i_4 %189
+               OpBranch %166
+        %166 = OpLabel
+               OpBranch %163
+        %165 = OpLabel
+               OpStore %D %int_3
+               OpReturn
+               OpFunctionEnd
diff --git a/Test/baseResults/web.operations.frag.out b/Test/baseResults/web.operations.frag.out
new file mode 100644
index 0000000..d7e4d6e
--- /dev/null
+++ b/Test/baseResults/web.operations.frag.out
@@ -0,0 +1,321 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 207
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main"
+               OpExecutionMode %main OriginUpperLeft
+               OpSource ESSL 310
+               OpName %main "main"
+               OpName %f "f"
+               OpName %v4 "v4"
+               OpName %u "u"
+               OpName %uv4 "uv4"
+               OpName %iv3 "iv3"
+               OpName %i "i"
+               OpName %uv3 "uv3"
+               OpName %m2 "m2"
+               OpName %iv4 "iv4"
+               OpName %m4 "m4"
+               OpName %a "a"
+               OpName %S "S"
+               OpMemberName %S 0 "i"
+               OpName %s "s"
+               OpName %b "b"
+               OpName %arr "arr"
+               OpName %arr2 "arr2"
+               OpName %block "block"
+               OpMemberName %block 0 "f"
+               OpName %instanceName "instanceName"
+               OpDecorate %u RelaxedPrecision
+               OpDecorate %18 RelaxedPrecision
+               OpDecorate %19 RelaxedPrecision
+               OpDecorate %20 RelaxedPrecision
+               OpDecorate %uv4 RelaxedPrecision
+               OpDecorate %24 RelaxedPrecision
+               OpDecorate %25 RelaxedPrecision
+               OpDecorate %26 RelaxedPrecision
+               OpDecorate %27 RelaxedPrecision
+               OpDecorate %iv3 RelaxedPrecision
+               OpDecorate %32 RelaxedPrecision
+               OpDecorate %33 RelaxedPrecision
+               OpDecorate %34 RelaxedPrecision
+               OpDecorate %i RelaxedPrecision
+               OpDecorate %38 RelaxedPrecision
+               OpDecorate %39 RelaxedPrecision
+               OpDecorate %uv3 RelaxedPrecision
+               OpDecorate %43 RelaxedPrecision
+               OpDecorate %45 RelaxedPrecision
+               OpDecorate %46 RelaxedPrecision
+               OpDecorate %iv4 RelaxedPrecision
+               OpDecorate %62 RelaxedPrecision
+               OpDecorate %64 RelaxedPrecision
+               OpDecorate %65 RelaxedPrecision
+               OpDecorate %104 RelaxedPrecision
+               OpDecorate %105 RelaxedPrecision
+               OpMemberDecorate %S 0 RelaxedPrecision
+               OpDecorate %153 RelaxedPrecision
+               OpDecorate %154 RelaxedPrecision
+               OpDecorate %155 RelaxedPrecision
+               OpDecorate %156 RelaxedPrecision
+               OpDecorate %157 RelaxedPrecision
+               OpDecorate %158 RelaxedPrecision
+               OpDecorate %159 RelaxedPrecision
+               OpDecorate %160 RelaxedPrecision
+               OpDecorate %161 RelaxedPrecision
+               OpDecorate %162 RelaxedPrecision
+               OpDecorate %163 RelaxedPrecision
+               OpDecorate %164 RelaxedPrecision
+               OpDecorate %165 RelaxedPrecision
+               OpDecorate %166 RelaxedPrecision
+               OpDecorate %167 RelaxedPrecision
+               OpDecorate %168 RelaxedPrecision
+               OpDecorate %169 RelaxedPrecision
+               OpDecorate %170 RelaxedPrecision
+               OpDecorate %171 RelaxedPrecision
+               OpDecorate %172 RelaxedPrecision
+               OpDecorate %173 RelaxedPrecision
+               OpDecorate %174 RelaxedPrecision
+               OpDecorate %175 RelaxedPrecision
+               OpDecorate %176 RelaxedPrecision
+               OpDecorate %177 RelaxedPrecision
+               OpDecorate %178 RelaxedPrecision
+               OpDecorate %179 RelaxedPrecision
+               OpDecorate %180 RelaxedPrecision
+               OpDecorate %181 RelaxedPrecision
+               OpDecorate %182 RelaxedPrecision
+               OpDecorate %183 RelaxedPrecision
+               OpDecorate %184 RelaxedPrecision
+               OpDecorate %185 RelaxedPrecision
+               OpDecorate %186 RelaxedPrecision
+               OpDecorate %187 RelaxedPrecision
+               OpDecorate %188 RelaxedPrecision
+               OpDecorate %189 RelaxedPrecision
+               OpDecorate %190 RelaxedPrecision
+               OpDecorate %191 RelaxedPrecision
+               OpDecorate %192 RelaxedPrecision
+               OpDecorate %193 RelaxedPrecision
+               OpDecorate %194 RelaxedPrecision
+               OpDecorate %arr RelaxedPrecision
+               OpDecorate %arr2 RelaxedPrecision
+               OpMemberDecorate %block 0 RelaxedPrecision
+               OpMemberDecorate %block 0 Offset 0
+               OpDecorate %block Block
+               OpDecorate %instanceName DescriptorSet 0
+               OpDecorate %instanceName Binding 0
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+%_ptr_Function_float = OpTypePointer Function %float
+    %v4float = OpTypeVector %float 4
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %v4uint = OpTypeVector %uint 4
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+%_ptr_Function_int = OpTypePointer Function %int
+      %int_3 = OpConstant %int 3
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+     %uint_4 = OpConstant %uint 4
+    %v2float = OpTypeVector %float 2
+%mat2v2float = OpTypeMatrix %v2float 2
+%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
+    %float_1 = OpConstant %float 1
+      %v4int = OpTypeVector %int 4
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+      %int_1 = OpConstant %int 1
+%mat4v4float = OpTypeMatrix %v4float 4
+%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
+       %bool = OpTypeBool
+     %v4bool = OpTypeVector %bool 4
+     %v2bool = OpTypeVector %bool 2
+     %uint_5 = OpConstant %uint 5
+%_arr_float_uint_5 = OpTypeArray %float %uint_5
+%_ptr_Private__arr_float_uint_5 = OpTypePointer Private %_arr_float_uint_5
+          %a = OpVariable %_ptr_Private__arr_float_uint_5 Private
+          %S = OpTypeStruct %int
+%_ptr_Private_S = OpTypePointer Private %S
+          %s = OpVariable %_ptr_Private_S Private
+%_ptr_Function_bool = OpTypePointer Function %bool
+     %uint_2 = OpConstant %uint 2
+%_arr_int_uint_2 = OpTypeArray %int %uint_2
+%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
+     %uint_3 = OpConstant %uint 3
+%_arr_int_uint_3 = OpTypeArray %int %uint_3
+%_ptr_Function__arr_int_uint_3 = OpTypePointer Function %_arr_int_uint_3
+      %int_2 = OpConstant %int 2
+      %block = OpTypeStruct %float
+%_ptr_Uniform_block = OpTypePointer Uniform %block
+%instanceName = OpVariable %_ptr_Uniform_block Uniform
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+          %f = OpVariable %_ptr_Function_float Function
+         %v4 = OpVariable %_ptr_Function_v4float Function
+          %u = OpVariable %_ptr_Function_uint Function
+        %uv4 = OpVariable %_ptr_Function_v4uint Function
+        %iv3 = OpVariable %_ptr_Function_v3int Function
+          %i = OpVariable %_ptr_Function_int Function
+        %uv3 = OpVariable %_ptr_Function_v3uint Function
+         %m2 = OpVariable %_ptr_Function_mat2v2float Function
+        %iv4 = OpVariable %_ptr_Function_v4int Function
+         %m4 = OpVariable %_ptr_Function_mat4v4float Function
+          %b = OpVariable %_ptr_Function_bool Function
+        %arr = OpVariable %_ptr_Function__arr_int_uint_2 Function
+       %arr2 = OpVariable %_ptr_Function__arr_int_uint_3 Function
+          %9 = OpLoad %float %f
+         %13 = OpLoad %v4float %v4
+         %14 = OpVectorTimesScalar %v4float %13 %9
+         %18 = OpLoad %uint %u
+         %19 = OpLoad %uint %u
+         %20 = OpIAdd %uint %18 %19
+         %24 = OpLoad %v4uint %uv4
+         %25 = OpLoad %uint %u
+         %26 = OpCompositeConstruct %v4uint %25 %25 %25 %25
+         %27 = OpUDiv %v4uint %24 %26
+         %32 = OpLoad %v3int %iv3
+         %33 = OpLoad %v3int %iv3
+         %34 = OpISub %v3int %33 %32
+               OpStore %iv3 %34
+         %38 = OpLoad %int %i
+         %39 = OpSMod %int %38 %int_3
+               OpStore %i %39
+         %43 = OpLoad %v3uint %uv3
+         %45 = OpCompositeConstruct %v3uint %uint_4 %uint_4 %uint_4
+         %46 = OpUMod %v3uint %43 %45
+         %51 = OpLoad %mat2v2float %m2
+         %53 = OpCompositeConstruct %v2float %float_1 %float_1
+         %54 = OpCompositeExtract %v2float %51 0
+         %55 = OpFSub %v2float %54 %53
+         %56 = OpCompositeExtract %v2float %51 1
+         %57 = OpFSub %v2float %56 %53
+         %58 = OpCompositeConstruct %mat2v2float %55 %57
+               OpStore %m2 %58
+         %62 = OpLoad %v4int %iv4
+         %64 = OpCompositeConstruct %v4int %int_1 %int_1 %int_1 %int_1
+         %65 = OpIAdd %v4int %62 %64
+               OpStore %iv4 %65
+         %69 = OpLoad %mat4v4float %m4
+         %70 = OpLoad %mat4v4float %m4
+         %72 = OpCompositeExtract %v4float %69 0
+         %73 = OpCompositeExtract %v4float %70 0
+         %75 = OpFOrdNotEqual %v4bool %72 %73
+         %76 = OpAny %bool %75
+         %77 = OpCompositeExtract %v4float %69 1
+         %78 = OpCompositeExtract %v4float %70 1
+         %79 = OpFOrdNotEqual %v4bool %77 %78
+         %80 = OpAny %bool %79
+         %81 = OpLogicalOr %bool %76 %80
+         %82 = OpCompositeExtract %v4float %69 2
+         %83 = OpCompositeExtract %v4float %70 2
+         %84 = OpFOrdNotEqual %v4bool %82 %83
+         %85 = OpAny %bool %84
+         %86 = OpLogicalOr %bool %81 %85
+         %87 = OpCompositeExtract %v4float %69 3
+         %88 = OpCompositeExtract %v4float %70 3
+         %89 = OpFOrdNotEqual %v4bool %87 %88
+         %90 = OpAny %bool %89
+         %91 = OpLogicalOr %bool %86 %90
+         %92 = OpLoad %mat2v2float %m2
+         %93 = OpLoad %mat2v2float %m2
+         %94 = OpCompositeExtract %v2float %92 0
+         %95 = OpCompositeExtract %v2float %93 0
+         %97 = OpFOrdEqual %v2bool %94 %95
+         %98 = OpAll %bool %97
+         %99 = OpCompositeExtract %v2float %92 1
+        %100 = OpCompositeExtract %v2float %93 1
+        %101 = OpFOrdEqual %v2bool %99 %100
+        %102 = OpAll %bool %101
+        %103 = OpLogicalAnd %bool %98 %102
+        %104 = OpLoad %int %i
+        %105 = OpLoad %int %i
+        %106 = OpSLessThanEqual %bool %104 %105
+        %111 = OpLoad %_arr_float_uint_5 %a
+        %112 = OpLoad %_arr_float_uint_5 %a
+        %113 = OpCompositeExtract %float %111 0
+        %114 = OpCompositeExtract %float %112 0
+        %115 = OpFOrdEqual %bool %113 %114
+        %116 = OpCompositeExtract %float %111 1
+        %117 = OpCompositeExtract %float %112 1
+        %118 = OpFOrdEqual %bool %116 %117
+        %119 = OpLogicalAnd %bool %115 %118
+        %120 = OpCompositeExtract %float %111 2
+        %121 = OpCompositeExtract %float %112 2
+        %122 = OpFOrdEqual %bool %120 %121
+        %123 = OpLogicalAnd %bool %119 %122
+        %124 = OpCompositeExtract %float %111 3
+        %125 = OpCompositeExtract %float %112 3
+        %126 = OpFOrdEqual %bool %124 %125
+        %127 = OpLogicalAnd %bool %123 %126
+        %128 = OpCompositeExtract %float %111 4
+        %129 = OpCompositeExtract %float %112 4
+        %130 = OpFOrdEqual %bool %128 %129
+        %131 = OpLogicalAnd %bool %127 %130
+        %135 = OpLoad %S %s
+        %136 = OpLoad %S %s
+        %137 = OpCompositeExtract %int %135 0
+        %138 = OpCompositeExtract %int %136 0
+        %139 = OpINotEqual %bool %137 %138
+        %142 = OpLoad %bool %b
+        %143 = OpLoad %bool %b
+        %144 = OpLogicalAnd %bool %142 %143
+        %145 = OpLoad %bool %b
+        %146 = OpLoad %bool %b
+        %147 = OpLogicalOr %bool %145 %146
+        %148 = OpLoad %bool %b
+        %149 = OpLoad %bool %b
+        %150 = OpLogicalNotEqual %bool %148 %149
+        %151 = OpLoad %bool %b
+        %152 = OpLogicalNot %bool %151
+        %153 = OpLoad %int %i
+        %154 = OpNot %int %153
+        %155 = OpLoad %uint %u
+        %156 = OpNot %uint %155
+        %157 = OpLoad %v3uint %uv3
+        %158 = OpNot %v3uint %157
+        %159 = OpLoad %v3int %iv3
+        %160 = OpNot %v3int %159
+        %161 = OpLoad %int %i
+        %162 = OpLoad %v3uint %uv3
+        %163 = OpCompositeConstruct %v3int %161 %161 %161
+        %164 = OpShiftLeftLogical %v3uint %162 %163
+               OpStore %uv3 %164
+        %165 = OpLoad %int %i
+        %166 = OpLoad %int %i
+        %167 = OpShiftRightArithmetic %int %165 %166
+        %168 = OpLoad %uint %u
+        %169 = OpLoad %uint %u
+        %170 = OpShiftLeftLogical %uint %168 %169
+        %171 = OpLoad %v3int %iv3
+        %172 = OpLoad %v3int %iv3
+        %173 = OpShiftRightArithmetic %v3int %171 %172
+        %174 = OpLoad %int %i
+        %175 = OpLoad %int %i
+        %176 = OpBitwiseAnd %int %174 %175
+        %177 = OpLoad %uint %u
+        %178 = OpLoad %uint %u
+        %179 = OpBitwiseOr %uint %177 %178
+        %180 = OpLoad %v3int %iv3
+        %181 = OpLoad %v3int %iv3
+        %182 = OpBitwiseXor %v3int %180 %181
+        %183 = OpLoad %uint %u
+        %184 = OpLoad %v3uint %uv3
+        %185 = OpCompositeConstruct %v3uint %183 %183 %183
+        %186 = OpBitwiseAnd %v3uint %185 %184
+        %187 = OpLoad %v3uint %uv3
+        %188 = OpLoad %uint %u
+        %189 = OpCompositeConstruct %v3uint %188 %188 %188
+        %190 = OpBitwiseOr %v3uint %187 %189
+        %191 = OpLoad %uint %u
+        %192 = OpLoad %v3uint %uv3
+        %193 = OpCompositeConstruct %v3uint %191 %191 %191
+        %194 = OpBitwiseAnd %v3uint %192 %193
+               OpStore %uv3 %194
+               OpReturn
+               OpFunctionEnd
diff --git a/Test/baseResults/web.separate.frag.out b/Test/baseResults/web.separate.frag.out
new file mode 100644
index 0000000..5a99298
--- /dev/null
+++ b/Test/baseResults/web.separate.frag.out
@@ -0,0 +1,178 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 99
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %color %i
+               OpExecutionMode %main OriginUpperLeft
+               OpSource ESSL 310
+               OpName %main "main"
+               OpName %color "color"
+               OpName %t2d "t2d"
+               OpName %s "s"
+               OpName %t3d "t3d"
+               OpName %sA "sA"
+               OpName %sShadow "sShadow"
+               OpName %i "i"
+               OpName %tex2D "tex2D"
+               OpName %texCube "texCube"
+               OpName %tex2DArray "tex2DArray"
+               OpName %itex2D "itex2D"
+               OpName %itex3D "itex3D"
+               OpName %itexCube "itexCube"
+               OpName %itex2DArray "itex2DArray"
+               OpName %utex2D "utex2D"
+               OpName %utex3D "utex3D"
+               OpName %utexCube "utexCube"
+               OpName %utex2DArray "utex2DArray"
+               OpName %tex3D "tex3D"
+               OpDecorate %color Location 0
+               OpDecorate %t2d RelaxedPrecision
+               OpDecorate %t2d DescriptorSet 0
+               OpDecorate %t2d Binding 3
+               OpDecorate %14 RelaxedPrecision
+               OpDecorate %s DescriptorSet 0
+               OpDecorate %s Binding 0
+               OpDecorate %23 RelaxedPrecision
+               OpDecorate %t3d DescriptorSet 0
+               OpDecorate %t3d Binding 4
+               OpDecorate %sA DescriptorSet 0
+               OpDecorate %sA Binding 2
+               OpDecorate %48 RelaxedPrecision
+               OpDecorate %51 RelaxedPrecision
+               OpDecorate %sShadow DescriptorSet 0
+               OpDecorate %sShadow Binding 1
+               OpDecorate %i RelaxedPrecision
+               OpDecorate %i Flat
+               OpDecorate %i Location 0
+               OpDecorate %tex2D RelaxedPrecision
+               OpDecorate %tex2D DescriptorSet 0
+               OpDecorate %tex2D Binding 5
+               OpDecorate %texCube RelaxedPrecision
+               OpDecorate %texCube DescriptorSet 0
+               OpDecorate %texCube Binding 6
+               OpDecorate %tex2DArray DescriptorSet 0
+               OpDecorate %tex2DArray Binding 15
+               OpDecorate %itex2D DescriptorSet 0
+               OpDecorate %itex2D Binding 16
+               OpDecorate %itex3D DescriptorSet 0
+               OpDecorate %itex3D Binding 17
+               OpDecorate %itexCube DescriptorSet 0
+               OpDecorate %itexCube Binding 18
+               OpDecorate %itex2DArray DescriptorSet 0
+               OpDecorate %itex2DArray Binding 19
+               OpDecorate %utex2D DescriptorSet 0
+               OpDecorate %utex2D Binding 20
+               OpDecorate %utex3D DescriptorSet 0
+               OpDecorate %utex3D Binding 21
+               OpDecorate %utexCube DescriptorSet 0
+               OpDecorate %utexCube Binding 22
+               OpDecorate %utex2DArray DescriptorSet 0
+               OpDecorate %utex2DArray Binding 23
+               OpDecorate %tex3D DescriptorSet 0
+               OpDecorate %tex3D Binding 36
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+      %color = OpVariable %_ptr_Output_v4float Output
+         %10 = OpTypeImage %float 2D 0 0 0 1 Unknown
+         %11 = OpTypeSampledImage %10
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+        %t2d = OpVariable %_ptr_UniformConstant_11 UniformConstant
+         %15 = OpTypeSampler
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+          %s = OpVariable %_ptr_UniformConstant_15 UniformConstant
+    %v2float = OpTypeVector %float 2
+  %float_0_5 = OpConstant %float 0.5
+         %22 = OpConstantComposite %v2float %float_0_5 %float_0_5
+         %24 = OpTypeImage %float 3D 0 0 0 1 Unknown
+         %25 = OpTypeSampledImage %24
+       %uint = OpTypeInt 32 0
+     %uint_4 = OpConstant %uint 4
+%_arr_25_uint_4 = OpTypeArray %25 %uint_4
+%_ptr_UniformConstant__arr_25_uint_4 = OpTypePointer UniformConstant %_arr_25_uint_4
+        %t3d = OpVariable %_ptr_UniformConstant__arr_25_uint_4 UniformConstant
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_UniformConstant_25 = OpTypePointer UniformConstant %25
+%_arr_15_uint_4 = OpTypeArray %15 %uint_4
+%_ptr_UniformConstant__arr_15_uint_4 = OpTypePointer UniformConstant %_arr_15_uint_4
+         %sA = OpVariable %_ptr_UniformConstant__arr_15_uint_4 UniformConstant
+      %int_2 = OpConstant %int 2
+    %v3float = OpTypeVector %float 3
+         %44 = OpConstantComposite %v3float %float_0_5 %float_0_5 %float_0_5
+    %sShadow = OpVariable %_ptr_UniformConstant_15 UniformConstant
+%_ptr_Input_int = OpTypePointer Input %int
+          %i = OpVariable %_ptr_Input_int Input
+      %tex2D = OpVariable %_ptr_UniformConstant_11 UniformConstant
+         %58 = OpTypeImage %float Cube 0 0 0 1 Unknown
+         %59 = OpTypeSampledImage %58
+%_ptr_UniformConstant_59 = OpTypePointer UniformConstant %59
+    %texCube = OpVariable %_ptr_UniformConstant_59 UniformConstant
+         %62 = OpTypeImage %float 2D 0 1 0 1 Unknown
+         %63 = OpTypeSampledImage %62
+%_ptr_UniformConstant_63 = OpTypePointer UniformConstant %63
+ %tex2DArray = OpVariable %_ptr_UniformConstant_63 UniformConstant
+         %66 = OpTypeImage %int 2D 0 0 0 1 Unknown
+         %67 = OpTypeSampledImage %66
+%_ptr_UniformConstant_67 = OpTypePointer UniformConstant %67
+     %itex2D = OpVariable %_ptr_UniformConstant_67 UniformConstant
+         %70 = OpTypeImage %int 3D 0 0 0 1 Unknown
+         %71 = OpTypeSampledImage %70
+%_ptr_UniformConstant_71 = OpTypePointer UniformConstant %71
+     %itex3D = OpVariable %_ptr_UniformConstant_71 UniformConstant
+         %74 = OpTypeImage %int Cube 0 0 0 1 Unknown
+         %75 = OpTypeSampledImage %74
+%_ptr_UniformConstant_75 = OpTypePointer UniformConstant %75
+   %itexCube = OpVariable %_ptr_UniformConstant_75 UniformConstant
+         %78 = OpTypeImage %int 2D 0 1 0 1 Unknown
+         %79 = OpTypeSampledImage %78
+%_ptr_UniformConstant_79 = OpTypePointer UniformConstant %79
+%itex2DArray = OpVariable %_ptr_UniformConstant_79 UniformConstant
+         %82 = OpTypeImage %uint 2D 0 0 0 1 Unknown
+         %83 = OpTypeSampledImage %82
+%_ptr_UniformConstant_83 = OpTypePointer UniformConstant %83
+     %utex2D = OpVariable %_ptr_UniformConstant_83 UniformConstant
+         %86 = OpTypeImage %uint 3D 0 0 0 1 Unknown
+         %87 = OpTypeSampledImage %86
+%_ptr_UniformConstant_87 = OpTypePointer UniformConstant %87
+     %utex3D = OpVariable %_ptr_UniformConstant_87 UniformConstant
+         %90 = OpTypeImage %uint Cube 0 0 0 1 Unknown
+         %91 = OpTypeSampledImage %90
+%_ptr_UniformConstant_91 = OpTypePointer UniformConstant %91
+   %utexCube = OpVariable %_ptr_UniformConstant_91 UniformConstant
+         %94 = OpTypeImage %uint 2D 0 1 0 1 Unknown
+         %95 = OpTypeSampledImage %94
+%_ptr_UniformConstant_95 = OpTypePointer UniformConstant %95
+%utex2DArray = OpVariable %_ptr_UniformConstant_95 UniformConstant
+      %tex3D = OpVariable %_ptr_UniformConstant_25 UniformConstant
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %14 = OpLoad %11 %t2d
+         %18 = OpLoad %15 %s
+         %19 = OpSampledImage %11 %14 %18
+         %23 = OpImageSampleImplicitLod %v4float %19 %22
+               OpStore %color %23
+         %34 = OpAccessChain %_ptr_UniformConstant_25 %t3d %int_1
+         %35 = OpLoad %25 %34
+         %40 = OpAccessChain %_ptr_UniformConstant_15 %sA %int_2
+         %41 = OpLoad %15 %40
+         %42 = OpSampledImage %25 %35 %41
+         %45 = OpImageSampleImplicitLod %v4float %42 %44
+         %46 = OpLoad %v4float %color
+         %47 = OpFAdd %v4float %46 %45
+               OpStore %color %47
+         %48 = OpLoad %11 %t2d
+         %49 = OpLoad %15 %s
+         %50 = OpSampledImage %11 %48 %49
+         %51 = OpImageSampleImplicitLod %v4float %50 %22
+         %52 = OpLoad %v4float %color
+         %53 = OpFAdd %v4float %52 %51
+               OpStore %color %53
+               OpReturn
+               OpFunctionEnd
diff --git a/Test/baseResults/web.texture.frag.out b/Test/baseResults/web.texture.frag.out
new file mode 100644
index 0000000..baad564
--- /dev/null
+++ b/Test/baseResults/web.texture.frag.out
@@ -0,0 +1,396 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 189
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %c2D %c4D %c3D %ic3D %ic1D %c1D %ic4D %s2 %sc %sf
+               OpExecutionMode %main OriginUpperLeft
+               OpSource ESSL 310
+               OpName %main "main"
+               OpName %v "v"
+               OpName %s2D "s2D"
+               OpName %c2D "c2D"
+               OpName %s3D "s3D"
+               OpName %c4D "c4D"
+               OpName %s2DArray "s2DArray"
+               OpName %c3D "c3D"
+               OpName %ic3D "ic3D"
+               OpName %ic1D "ic1D"
+               OpName %f "f"
+               OpName %s2DShadow "s2DShadow"
+               OpName %c1D "c1D"
+               OpName %sCube "sCube"
+               OpName %s2DArrayShadow "s2DArrayShadow"
+               OpName %iv "iv"
+               OpName %is2D "is2D"
+               OpName %is3D "is3D"
+               OpName %isCube "isCube"
+               OpName %is2DArray "is2DArray"
+               OpName %sCubeShadow "sCubeShadow"
+               OpName %us2D "us2D"
+               OpName %us3D "us3D"
+               OpName %usCube "usCube"
+               OpName %us2DArray "us2DArray"
+               OpName %ic4D "ic4D"
+               OpName %S2 "S2"
+               OpMemberName %S2 0 "c"
+               OpMemberName %S2 1 "f"
+               OpName %s2 "s2"
+               OpName %sc "sc"
+               OpName %sf "sf"
+               OpName %arrayedSampler "arrayedSampler"
+               OpDecorate %v RelaxedPrecision
+               OpDecorate %s2D RelaxedPrecision
+               OpDecorate %s2D DescriptorSet 0
+               OpDecorate %s2D Binding 1
+               OpDecorate %14 RelaxedPrecision
+               OpDecorate %c2D RelaxedPrecision
+               OpDecorate %c2D Location 5
+               OpDecorate %18 RelaxedPrecision
+               OpDecorate %19 RelaxedPrecision
+               OpDecorate %s3D RelaxedPrecision
+               OpDecorate %s3D DescriptorSet 0
+               OpDecorate %s3D Binding 2
+               OpDecorate %24 RelaxedPrecision
+               OpDecorate %c4D RelaxedPrecision
+               OpDecorate %c4D Location 7
+               OpDecorate %27 RelaxedPrecision
+               OpDecorate %28 RelaxedPrecision
+               OpDecorate %s2DArray RelaxedPrecision
+               OpDecorate %s2DArray DescriptorSet 0
+               OpDecorate %s2DArray Binding 6
+               OpDecorate %33 RelaxedPrecision
+               OpDecorate %c3D RelaxedPrecision
+               OpDecorate %c3D Location 6
+               OpDecorate %37 RelaxedPrecision
+               OpDecorate %39 RelaxedPrecision
+               OpDecorate %40 RelaxedPrecision
+               OpDecorate %ic3D RelaxedPrecision
+               OpDecorate %ic3D Flat
+               OpDecorate %ic3D Location 2
+               OpDecorate %45 RelaxedPrecision
+               OpDecorate %ic1D RelaxedPrecision
+               OpDecorate %ic1D Flat
+               OpDecorate %ic1D Location 1
+               OpDecorate %48 RelaxedPrecision
+               OpDecorate %50 RelaxedPrecision
+               OpDecorate %f RelaxedPrecision
+               OpDecorate %s2DShadow RelaxedPrecision
+               OpDecorate %s2DShadow DescriptorSet 0
+               OpDecorate %s2DShadow Binding 5
+               OpDecorate %57 RelaxedPrecision
+               OpDecorate %58 RelaxedPrecision
+               OpDecorate %c1D RelaxedPrecision
+               OpDecorate %c1D Location 4
+               OpDecorate %61 RelaxedPrecision
+               OpDecorate %67 RelaxedPrecision
+               OpDecorate %68 RelaxedPrecision
+               OpDecorate %69 RelaxedPrecision
+               OpDecorate %70 RelaxedPrecision
+               OpDecorate %71 RelaxedPrecision
+               OpDecorate %sCube RelaxedPrecision
+               OpDecorate %sCube DescriptorSet 0
+               OpDecorate %sCube Binding 3
+               OpDecorate %76 RelaxedPrecision
+               OpDecorate %77 RelaxedPrecision
+               OpDecorate %78 RelaxedPrecision
+               OpDecorate %79 RelaxedPrecision
+               OpDecorate %80 RelaxedPrecision
+               OpDecorate %s2DArrayShadow RelaxedPrecision
+               OpDecorate %s2DArrayShadow DescriptorSet 0
+               OpDecorate %s2DArrayShadow Binding 7
+               OpDecorate %85 RelaxedPrecision
+               OpDecorate %86 RelaxedPrecision
+               OpDecorate %87 RelaxedPrecision
+               OpDecorate %88 RelaxedPrecision
+               OpDecorate %90 RelaxedPrecision
+               OpDecorate %91 RelaxedPrecision
+               OpDecorate %92 RelaxedPrecision
+               OpDecorate %93 RelaxedPrecision
+               OpDecorate %94 RelaxedPrecision
+               OpDecorate %95 RelaxedPrecision
+               OpDecorate %96 RelaxedPrecision
+               OpDecorate %97 RelaxedPrecision
+               OpDecorate %98 RelaxedPrecision
+               OpDecorate %99 RelaxedPrecision
+               OpDecorate %100 RelaxedPrecision
+               OpDecorate %iv RelaxedPrecision
+               OpDecorate %is2D RelaxedPrecision
+               OpDecorate %is2D DescriptorSet 0
+               OpDecorate %is2D Binding 8
+               OpDecorate %108 RelaxedPrecision
+               OpDecorate %109 RelaxedPrecision
+               OpDecorate %110 RelaxedPrecision
+               OpDecorate %111 RelaxedPrecision
+               OpDecorate %112 RelaxedPrecision
+               OpDecorate %115 RelaxedPrecision
+               OpDecorate %116 RelaxedPrecision
+               OpDecorate %117 RelaxedPrecision
+               OpDecorate %118 RelaxedPrecision
+               OpDecorate %119 RelaxedPrecision
+               OpDecorate %120 RelaxedPrecision
+               OpDecorate %121 RelaxedPrecision
+               OpDecorate %122 RelaxedPrecision
+               OpDecorate %123 RelaxedPrecision
+               OpDecorate %124 RelaxedPrecision
+               OpDecorate %is3D RelaxedPrecision
+               OpDecorate %is3D DescriptorSet 0
+               OpDecorate %is3D Binding 9
+               OpDecorate %129 RelaxedPrecision
+               OpDecorate %130 RelaxedPrecision
+               OpDecorate %132 RelaxedPrecision
+               OpDecorate %isCube RelaxedPrecision
+               OpDecorate %isCube DescriptorSet 0
+               OpDecorate %isCube Binding 10
+               OpDecorate %137 RelaxedPrecision
+               OpDecorate %138 RelaxedPrecision
+               OpDecorate %139 RelaxedPrecision
+               OpDecorate %140 RelaxedPrecision
+               OpDecorate %is2DArray RelaxedPrecision
+               OpDecorate %is2DArray DescriptorSet 0
+               OpDecorate %is2DArray Binding 11
+               OpDecorate %145 RelaxedPrecision
+               OpDecorate %146 RelaxedPrecision
+               OpDecorate %147 RelaxedPrecision
+               OpDecorate %149 RelaxedPrecision
+               OpDecorate %sCubeShadow RelaxedPrecision
+               OpDecorate %sCubeShadow DescriptorSet 0
+               OpDecorate %sCubeShadow Binding 4
+               OpDecorate %154 RelaxedPrecision
+               OpDecorate %us2D RelaxedPrecision
+               OpDecorate %us2D DescriptorSet 0
+               OpDecorate %us2D Binding 12
+               OpDecorate %us3D RelaxedPrecision
+               OpDecorate %us3D DescriptorSet 0
+               OpDecorate %us3D Binding 13
+               OpDecorate %usCube RelaxedPrecision
+               OpDecorate %usCube DescriptorSet 0
+               OpDecorate %usCube Binding 14
+               OpDecorate %us2DArray RelaxedPrecision
+               OpDecorate %us2DArray DescriptorSet 0
+               OpDecorate %us2DArray Binding 15
+               OpDecorate %ic4D RelaxedPrecision
+               OpDecorate %ic4D Flat
+               OpDecorate %ic4D Location 3
+               OpDecorate %65 RelaxedPrecision
+               OpMemberDecorate %S2 0 RelaxedPrecision
+               OpMemberDecorate %S2 1 RelaxedPrecision
+               OpDecorate %s2 Location 8
+               OpDecorate %sc RelaxedPrecision
+               OpDecorate %sc Location 0
+               OpDecorate %sf RelaxedPrecision
+               OpDecorate %sf Location 1
+               OpDecorate %arrayedSampler RelaxedPrecision
+               OpDecorate %arrayedSampler DescriptorSet 0
+               OpDecorate %arrayedSampler Binding 0
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %10 = OpTypeImage %float 2D 0 0 0 1 Unknown
+         %11 = OpTypeSampledImage %10
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+        %s2D = OpVariable %_ptr_UniformConstant_11 UniformConstant
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+        %c2D = OpVariable %_ptr_Input_v2float Input
+         %20 = OpTypeImage %float 3D 0 0 0 1 Unknown
+         %21 = OpTypeSampledImage %20
+%_ptr_UniformConstant_21 = OpTypePointer UniformConstant %21
+        %s3D = OpVariable %_ptr_UniformConstant_21 UniformConstant
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+        %c4D = OpVariable %_ptr_Input_v4float Input
+         %29 = OpTypeImage %float 2D 0 1 0 1 Unknown
+         %30 = OpTypeSampledImage %29
+%_ptr_UniformConstant_30 = OpTypePointer UniformConstant %30
+   %s2DArray = OpVariable %_ptr_UniformConstant_30 UniformConstant
+    %v3float = OpTypeVector %float 3
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+        %c3D = OpVariable %_ptr_Input_v3float Input
+%float_1_20000005 = OpConstant %float 1.20000005
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+%_ptr_Input_v3int = OpTypePointer Input %v3int
+       %ic3D = OpVariable %_ptr_Input_v3int Input
+%_ptr_Input_int = OpTypePointer Input %int
+       %ic1D = OpVariable %_ptr_Input_int Input
+%_ptr_Function_float = OpTypePointer Function %float
+         %53 = OpTypeImage %float 2D 1 0 0 1 Unknown
+         %54 = OpTypeSampledImage %53
+%_ptr_UniformConstant_54 = OpTypePointer UniformConstant %54
+  %s2DShadow = OpVariable %_ptr_UniformConstant_54 UniformConstant
+%_ptr_Input_float = OpTypePointer Input %float
+        %c1D = OpVariable %_ptr_Input_float Input
+      %v2int = OpTypeVector %int 2
+      %int_2 = OpConstant %int 2
+      %int_3 = OpConstant %int 3
+         %65 = OpConstantComposite %v2int %int_2 %int_3
+         %72 = OpTypeImage %float Cube 0 0 0 1 Unknown
+         %73 = OpTypeSampledImage %72
+%_ptr_UniformConstant_73 = OpTypePointer UniformConstant %73
+      %sCube = OpVariable %_ptr_UniformConstant_73 UniformConstant
+         %81 = OpTypeImage %float 2D 1 1 0 1 Unknown
+         %82 = OpTypeSampledImage %81
+%_ptr_UniformConstant_82 = OpTypePointer UniformConstant %82
+%s2DArrayShadow = OpVariable %_ptr_UniformConstant_82 UniformConstant
+      %v4int = OpTypeVector %int 4
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+        %104 = OpTypeImage %int 2D 0 0 0 1 Unknown
+        %105 = OpTypeSampledImage %104
+%_ptr_UniformConstant_105 = OpTypePointer UniformConstant %105
+       %is2D = OpVariable %_ptr_UniformConstant_105 UniformConstant
+        %125 = OpTypeImage %int 3D 0 0 0 1 Unknown
+        %126 = OpTypeSampledImage %125
+%_ptr_UniformConstant_126 = OpTypePointer UniformConstant %126
+       %is3D = OpVariable %_ptr_UniformConstant_126 UniformConstant
+%float_4_19999981 = OpConstant %float 4.19999981
+        %133 = OpTypeImage %int Cube 0 0 0 1 Unknown
+        %134 = OpTypeSampledImage %133
+%_ptr_UniformConstant_134 = OpTypePointer UniformConstant %134
+     %isCube = OpVariable %_ptr_UniformConstant_134 UniformConstant
+        %141 = OpTypeImage %int 2D 0 1 0 1 Unknown
+        %142 = OpTypeSampledImage %141
+%_ptr_UniformConstant_142 = OpTypePointer UniformConstant %142
+  %is2DArray = OpVariable %_ptr_UniformConstant_142 UniformConstant
+        %150 = OpTypeImage %float Cube 1 0 0 1 Unknown
+        %151 = OpTypeSampledImage %150
+%_ptr_UniformConstant_151 = OpTypePointer UniformConstant %151
+%sCubeShadow = OpVariable %_ptr_UniformConstant_151 UniformConstant
+       %uint = OpTypeInt 32 0
+        %160 = OpTypeImage %uint 2D 0 0 0 1 Unknown
+        %161 = OpTypeSampledImage %160
+%_ptr_UniformConstant_161 = OpTypePointer UniformConstant %161
+       %us2D = OpVariable %_ptr_UniformConstant_161 UniformConstant
+        %164 = OpTypeImage %uint 3D 0 0 0 1 Unknown
+        %165 = OpTypeSampledImage %164
+%_ptr_UniformConstant_165 = OpTypePointer UniformConstant %165
+       %us3D = OpVariable %_ptr_UniformConstant_165 UniformConstant
+        %168 = OpTypeImage %uint Cube 0 0 0 1 Unknown
+        %169 = OpTypeSampledImage %168
+%_ptr_UniformConstant_169 = OpTypePointer UniformConstant %169
+     %usCube = OpVariable %_ptr_UniformConstant_169 UniformConstant
+        %172 = OpTypeImage %uint 2D 0 1 0 1 Unknown
+        %173 = OpTypeSampledImage %172
+%_ptr_UniformConstant_173 = OpTypePointer UniformConstant %173
+  %us2DArray = OpVariable %_ptr_UniformConstant_173 UniformConstant
+%_ptr_Input_v4int = OpTypePointer Input %v4int
+       %ic4D = OpVariable %_ptr_Input_v4int Input
+         %S2 = OpTypeStruct %v3float %float
+%_ptr_Input_S2 = OpTypePointer Input %S2
+         %s2 = OpVariable %_ptr_Input_S2 Input
+%_ptr_Output_v3float = OpTypePointer Output %v3float
+         %sc = OpVariable %_ptr_Output_v3float Output
+%_ptr_Output_float = OpTypePointer Output %float
+         %sf = OpVariable %_ptr_Output_float Output
+     %uint_5 = OpConstant %uint 5
+%_arr_11_uint_5 = OpTypeArray %11 %uint_5
+%_ptr_UniformConstant__arr_11_uint_5 = OpTypePointer UniformConstant %_arr_11_uint_5
+%arrayedSampler = OpVariable %_ptr_UniformConstant__arr_11_uint_5 UniformConstant
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+          %v = OpVariable %_ptr_Function_v4float Function
+          %f = OpVariable %_ptr_Function_float Function
+         %iv = OpVariable %_ptr_Function_v4int Function
+         %14 = OpLoad %11 %s2D
+         %18 = OpLoad %v2float %c2D
+         %19 = OpImageSampleImplicitLod %v4float %14 %18
+               OpStore %v %19
+         %24 = OpLoad %21 %s3D
+         %27 = OpLoad %v4float %c4D
+         %28 = OpImageSampleProjImplicitLod %v4float %24 %27
+               OpStore %v %28
+         %33 = OpLoad %30 %s2DArray
+         %37 = OpLoad %v3float %c3D
+         %39 = OpImageSampleExplicitLod %v4float %33 %37 Lod %float_1_20000005
+               OpStore %v %39
+         %40 = OpLoad %21 %s3D
+         %45 = OpLoad %v3int %ic3D
+         %48 = OpLoad %int %ic1D
+         %49 = OpImage %20 %40
+         %50 = OpImageFetch %v4float %49 %45 Lod %48
+               OpStore %v %50
+         %57 = OpLoad %54 %s2DShadow
+         %58 = OpLoad %v3float %c3D
+         %61 = OpLoad %float %c1D
+         %66 = OpCompositeExtract %float %58 2
+         %67 = OpImageSampleDrefExplicitLod %float %57 %58 %66 Lod|ConstOffset %61 %65
+               OpStore %f %67
+         %68 = OpLoad %11 %s2D
+         %69 = OpLoad %v3float %c3D
+         %70 = OpLoad %float %c1D
+         %71 = OpImageSampleProjExplicitLod %v4float %68 %69 Lod|ConstOffset %70 %65
+               OpStore %v %71
+         %76 = OpLoad %73 %sCube
+         %77 = OpLoad %v3float %c3D
+         %78 = OpLoad %v3float %c3D
+         %79 = OpLoad %v3float %c3D
+         %80 = OpImageSampleExplicitLod %v4float %76 %77 Grad %78 %79
+               OpStore %v %80
+         %85 = OpLoad %82 %s2DArrayShadow
+         %86 = OpLoad %v4float %c4D
+         %87 = OpLoad %v2float %c2D
+         %88 = OpLoad %v2float %c2D
+         %89 = OpCompositeExtract %float %86 3
+         %90 = OpImageSampleDrefExplicitLod %float %85 %86 %89 Grad|ConstOffset %87 %88 %65
+               OpStore %f %90
+         %91 = OpLoad %21 %s3D
+         %92 = OpLoad %v4float %c4D
+         %93 = OpLoad %v3float %c3D
+         %94 = OpLoad %v3float %c3D
+         %95 = OpImageSampleProjExplicitLod %v4float %91 %92 Grad %93 %94
+               OpStore %v %95
+         %96 = OpLoad %11 %s2D
+         %97 = OpLoad %v3float %c3D
+         %98 = OpLoad %v2float %c2D
+         %99 = OpLoad %v2float %c2D
+        %100 = OpImageSampleProjExplicitLod %v4float %96 %97 Grad|ConstOffset %98 %99 %65
+               OpStore %v %100
+        %108 = OpLoad %105 %is2D
+        %109 = OpLoad %v2float %c2D
+        %110 = OpImageSampleImplicitLod %v4int %108 %109
+               OpStore %iv %110
+        %111 = OpLoad %105 %is2D
+        %112 = OpLoad %v4float %c4D
+        %113 = OpCompositeExtract %float %112 3
+        %114 = OpCompositeInsert %v4float %113 %112 2
+        %115 = OpImageSampleProjImplicitLod %v4int %111 %114 ConstOffset %65
+               OpStore %iv %115
+        %116 = OpLoad %105 %is2D
+        %117 = OpLoad %v3float %c3D
+        %118 = OpLoad %float %c1D
+        %119 = OpImageSampleProjExplicitLod %v4int %116 %117 Lod %118
+               OpStore %iv %119
+        %120 = OpLoad %105 %is2D
+        %121 = OpLoad %v3float %c3D
+        %122 = OpLoad %v2float %c2D
+        %123 = OpLoad %v2float %c2D
+        %124 = OpImageSampleProjExplicitLod %v4int %120 %121 Grad %122 %123
+               OpStore %iv %124
+        %129 = OpLoad %126 %is3D
+        %130 = OpLoad %v3float %c3D
+        %132 = OpImageSampleImplicitLod %v4int %129 %130 Bias %float_4_19999981
+               OpStore %iv %132
+        %137 = OpLoad %134 %isCube
+        %138 = OpLoad %v3float %c3D
+        %139 = OpLoad %float %c1D
+        %140 = OpImageSampleExplicitLod %v4int %137 %138 Lod %139
+               OpStore %iv %140
+        %145 = OpLoad %142 %is2DArray
+        %146 = OpLoad %v3int %ic3D
+        %147 = OpLoad %int %ic1D
+        %148 = OpImage %141 %145
+        %149 = OpImageFetch %v4int %148 %146 Lod %147
+               OpStore %iv %149
+        %154 = OpLoad %151 %sCubeShadow
+        %155 = OpImage %150 %154
+        %156 = OpImageQuerySizeLod %v2int %155 %int_2
+        %157 = OpLoad %v4int %iv
+        %158 = OpVectorShuffle %v4int %157 %156 4 5 2 3
+               OpStore %iv %158
+               OpReturn
+               OpFunctionEnd
diff --git a/Test/constFold.frag b/Test/constFold.frag
index daecaa2..49373e6 100644
--- a/Test/constFold.frag
+++ b/Test/constFold.frag
@@ -122,6 +122,9 @@
 
 const mat2 mm2 = mat2(1.0, 2.0, 3.0, 4.0);

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

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

+const mat3x4 mm34 = mat3x4(7.0);

+const vec4 mv4 = vec4(m22);

 

 void foo3()

 {

diff --git a/Test/cppBad.vert b/Test/cppBad.vert
index 0044c44..c1548c8 100644
--- a/Test/cppBad.vert
+++ b/Test/cppBad.vert
@@ -1,4 +1,5 @@
-#define m#0#

+#define n#0#

+#define m #0#

 #if m

 #endif

 #define n()

diff --git a/Test/cppBad3.vert b/Test/cppBad3.vert
new file mode 100644
index 0000000..95343db
--- /dev/null
+++ b/Test/cppBad3.vert
@@ -0,0 +1,3 @@
+#define f =y(.
+#define y(m)
+y(f)
\ No newline at end of file
diff --git a/Test/cppBad4.vert b/Test/cppBad4.vert
new file mode 100755
index 0000000..ca43841
--- /dev/null
+++ b/Test/cppBad4.vert
@@ -0,0 +1,4 @@
+int,i=
+#define f g(#g(y
+#define g(m)
+g(f)
diff --git a/Test/cppBad5.vert b/Test/cppBad5.vert
new file mode 100755
index 0000000..9ae5056
--- /dev/null
+++ b/Test/cppBad5.vert
@@ -0,0 +1,4 @@
+int,i=
+#define f g($g(y
+#define g(m)
+g(f)
diff --git a/Test/cppMerge.frag b/Test/cppMerge.frag
new file mode 100755
index 0000000..a499f84
--- /dev/null
+++ b/Test/cppMerge.frag
@@ -0,0 +1,24 @@
+#version 450 core
+
+#define PASTER2(type, suffix) type##suffix
+#define PASTER3(type, suffix) type## suffix
+#define MAKE_TYPE1 image1D dest ## 1;
+#define MAKE_TYPE2(type, suffix) PASTER2(type, suffix)
+#define MAKE_TYPE3(type, suffix) PASTER3(type, suffix)
+
+#define PREFIX image
+#define PREFIX3 imag
+#define SUFFIX2 1D
+#define SUFFIX3 e1 D
+
+#define RESOURCE_TYPE1 MAKE_TYPE1
+#define RESOURCE_TYPE2 MAKE_TYPE2(PREFIX, SUFFIX2)
+#define RESOURCE_TYPE3 MAKE_TYPE3(PREFIX3, SUFFIX3)
+
+layout (set = 0, binding = 0) uniform writeonly RESOURCE_TYPE1
+layout (set = 0, binding = 0) uniform writeonly RESOURCE_TYPE2 dest2;
+layout (set = 0, binding = 0) uniform writeonly RESOURCE_TYPE3 dest3;
+
+void main()
+{
+}
\ No newline at end of file
diff --git a/Test/foo.h b/Test/foo.h
index 7f79340..236277c 100644
--- a/Test/foo.h
+++ b/Test/foo.h
@@ -1 +1 @@
-#error should not be included
\ No newline at end of file
+#error should not be included
diff --git a/Test/glsl.450.subgroup.frag b/Test/glsl.450.subgroup.frag
new file mode 100644
index 0000000..d0b9573
--- /dev/null
+++ b/Test/glsl.450.subgroup.frag
@@ -0,0 +1,252 @@
+#version 450

+

+vec4 undeclared_errors(vec4 f4)

+{

+  vec4 result;

+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)

+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)

+  subgroupBarrier();             // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)         

+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)

+  subgroupElect();               // ERROR, extension not enabled (basic)

+  gl_NumSubgroups;               // ERROR, only defined in compute

+  gl_SubgroupID;                 // ERROR, only defined in compute

+  subgroupMemoryBarrierShared(); // ERROR, only defined in compute

+

+  subgroupAll(true);        // ERROR extension not enabled (vote)

+  subgroupAny(false);       // ERROR extension not enabled (vote)

+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)

+

+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)

+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)

+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)

+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)

+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)

+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)

+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)

+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)

+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)

+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)

+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)

+

+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)

+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)

+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)

+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)

+

+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)

+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)

+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)

+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)

+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)

+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)

+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)

+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)

+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)

+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)

+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)

+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)

+

+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)

+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)

+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)

+

+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)

+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)

+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)

+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)

+

+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+

+  return result;

+}

+

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(location = 0) out uvec4 data;

+void main (void)

+{

+  data = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+  subgroupBarrier();

+  subgroupMemoryBarrier();

+  subgroupMemoryBarrierBuffer();

+  subgroupMemoryBarrierImage();

+  subgroupElect();

+}

+

+#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));

+  subgroupBallotBitExtract(ballot, 0);

+  subgroupBallotBitCount(ballot);

+  subgroupBallotInclusiveBitCount(ballot);

+  subgroupBallotExclusiveBitCount(ballot);

+  subgroupBallotFindLSB(ballot);

+  subgroupBallotFindMSB(ballot);

+}

+

+#extension GL_KHR_shader_subgroup_vote: enable

+void vote_works(vec4 f4)

+{

+  subgroupAll(true);

+  subgroupAny(false);

+  subgroupAllEqual(f4);

+}

+

+#extension GL_KHR_shader_subgroup_shuffle: enable

+#extension GL_KHR_shader_subgroup_shuffle_relative: enable

+void shuffle_works(vec4 f4)

+{

+  subgroupShuffle(f4, 0);

+  subgroupShuffleXor(f4, 0x1);

+  subgroupShuffleUp(f4, 1);

+  subgroupShuffleDown(f4, 1);

+}

+

+#extension GL_KHR_shader_subgroup_arithmetic: enable

+void arith_works(vec4 f4)

+{

+  uvec4 ballot;

+  subgroupAdd(f4);

+  subgroupMul(f4);

+  subgroupMin(f4);

+  subgroupMax(f4);

+  subgroupAnd(ballot);

+  subgroupOr(ballot);

+  subgroupXor(ballot);

+  subgroupInclusiveAdd(f4);

+  subgroupInclusiveMul(f4);

+  subgroupInclusiveMin(f4);

+  subgroupInclusiveMax(f4);

+  subgroupInclusiveAnd(ballot);

+  subgroupInclusiveOr(ballot);

+  subgroupInclusiveXor(ballot);

+  subgroupExclusiveAdd(f4);

+  subgroupExclusiveMul(f4);

+  subgroupExclusiveMin(f4);

+  subgroupExclusiveMax(f4);

+  subgroupExclusiveAnd(ballot);

+  subgroupExclusiveOr(ballot);

+  subgroupExclusiveXor(ballot);

+}

+

+#extension GL_KHR_shader_subgroup_clustered: enable

+void clustered_works(vec4 f4)

+{

+  uvec4 ballot = uvec4(0x55,0,0,0);

+  subgroupClusteredAdd(f4, 2);

+  subgroupClusteredMul(f4, 2);

+  subgroupClusteredMin(f4, 2);

+  subgroupClusteredMax(f4, 2);

+  subgroupClusteredAnd(ballot, 2);

+  subgroupClusteredOr(ballot, 2);

+  subgroupClusteredXor(ballot, 2);

+}

+

+#extension GL_KHR_shader_subgroup_quad: enable

+void quad_works(vec4 f4)

+{

+  int i;

+  subgroupQuadBroadcast(f4, 0);

+  subgroupQuadBroadcast(f4, i);

+  subgroupQuadSwapHorizontal(f4);

+  subgroupQuadSwapVertical(f4);

+  subgroupQuadSwapDiagonal(f4);

+}

+

+#extension GL_NV_shader_subgroup_partitioned: enable

+void partitioned_works(vec4 f4)

+{

+  uvec4 parti = subgroupPartitionNV(f4);

+  uvec4 ballot = uvec4(0x55,0,0,0);

+  subgroupPartitionedAddNV(f4, parti);

+  subgroupPartitionedMulNV(f4, parti);

+  subgroupPartitionedMinNV(f4, parti);

+  subgroupPartitionedMaxNV(f4, parti);

+  subgroupPartitionedAndNV(ballot, parti);

+  subgroupPartitionedOrNV(ballot, parti);

+  subgroupPartitionedXorNV(ballot, parti);

+  subgroupPartitionedInclusiveAddNV(f4, parti);

+  subgroupPartitionedInclusiveMulNV(f4, parti);

+  subgroupPartitionedInclusiveMinNV(f4, parti);

+  subgroupPartitionedInclusiveMaxNV(f4, parti);

+  subgroupPartitionedInclusiveAndNV(ballot, parti);

+  subgroupPartitionedInclusiveOrNV(ballot, parti);

+  subgroupPartitionedInclusiveXorNV(ballot, parti);

+  subgroupPartitionedExclusiveAddNV(f4, parti);

+  subgroupPartitionedExclusiveMulNV(f4, parti);

+  subgroupPartitionedExclusiveMinNV(f4, parti);

+  subgroupPartitionedExclusiveMaxNV(f4, parti);

+  subgroupPartitionedExclusiveAndNV(ballot, parti);

+  subgroupPartitionedExclusiveOrNV(ballot, parti);

+  subgroupPartitionedExclusiveXorNV(ballot, parti);

+}

+

+// tests for NV_shader_sm_builtins

+void sm_builtins_err()

+{

+    gl_WarpsPerSMNV;    // ERROR, no extension

+    gl_SMCountNV;       // ERROR, no extension

+    gl_WarpIDNV;        // ERROR, no extension

+    gl_SMIDNV;          // ERROR, no extension

+}

+

+#ifdef GL_NV_shader_sm_builtins

+#extension GL_NV_shader_sm_builtins : enable

+#endif

+

+void sm_builtins()

+{

+    gl_WarpsPerSMNV;

+    gl_SMCountNV;

+    gl_WarpIDNV;

+    gl_SMIDNV;

+}

diff --git a/Test/glsl.450.subgroup.geom b/Test/glsl.450.subgroup.geom
new file mode 100644
index 0000000..d5d2f25
--- /dev/null
+++ b/Test/glsl.450.subgroup.geom
@@ -0,0 +1,254 @@
+#version 450

+

+vec4 undeclared_errors(vec4 f4)

+{

+  vec4 result;

+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)

+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)

+  subgroupBarrier();             // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)

+  subgroupElect();               // ERROR, extension not enabled (basic)

+  gl_NumSubgroups;               // ERROR, only defined in compute

+  gl_SubgroupID;                 // ERROR, only defined in compute

+  subgroupMemoryBarrierShared(); // ERROR, only defined in compute

+

+  subgroupAll(true);        // ERROR extension not enabled (vote)

+  subgroupAny(false);       // ERROR extension not enabled (vote)

+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)

+

+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)

+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)

+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)

+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)

+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)

+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)

+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)

+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)

+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)

+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)

+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)

+

+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)

+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)

+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)

+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)

+

+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)

+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)

+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)

+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)

+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)

+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)

+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)

+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)

+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)

+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)

+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)

+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)

+

+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)

+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)

+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)

+

+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)

+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)

+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)

+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)

+

+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+

+  return result;

+}

+

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(points) in;

+layout(points, max_vertices = 1) out;

+layout(set = 0, binding = 0, std430) buffer Output

+{

+  uvec4 result[];

+};

+

+void main (void)

+{

+  result[gl_PrimitiveIDIn] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+  subgroupBarrier();

+  subgroupMemoryBarrier();

+  subgroupMemoryBarrierBuffer();

+  subgroupMemoryBarrierImage();

+  subgroupElect();

+}

+

+#extension GL_KHR_shader_subgroup_ballot: enable

+void ballot_works(vec4 f4) {

+  gl_SubgroupEqMask;

+  gl_SubgroupGeMask;

+  gl_SubgroupGtMask;

+  gl_SubgroupLeMask;

+  gl_SubgroupLtMask;

+  subgroupBroadcast(f4, 0);

+  subgroupBroadcastFirst(f4);

+  uvec4 ballot = subgroupBallot(false);

+  subgroupInverseBallot(uvec4(0x1));

+  subgroupBallotBitExtract(ballot, 0);

+  subgroupBallotBitCount(ballot);

+  subgroupBallotInclusiveBitCount(ballot);

+  subgroupBallotExclusiveBitCount(ballot);

+  subgroupBallotFindLSB(ballot);

+  subgroupBallotFindMSB(ballot);

+}

+

+#extension GL_KHR_shader_subgroup_vote: enable

+void vote_works(vec4 f4)

+{

+  subgroupAll(true);

+  subgroupAny(false);

+  subgroupAllEqual(f4);

+}

+

+#extension GL_KHR_shader_subgroup_shuffle: enable

+#extension GL_KHR_shader_subgroup_shuffle_relative: enable

+void shuffle_works(vec4 f4)

+{

+  subgroupShuffle(f4, 0);

+  subgroupShuffleXor(f4, 0x1);

+  subgroupShuffleUp(f4, 1);

+  subgroupShuffleDown(f4, 1);

+}

+

+#extension GL_KHR_shader_subgroup_arithmetic: enable

+void arith_works(vec4 f4)

+{

+  uvec4 ballot;

+  subgroupAdd(f4);

+  subgroupMul(f4);

+  subgroupMin(f4);

+  subgroupMax(f4);

+  subgroupAnd(ballot);

+  subgroupOr(ballot);

+  subgroupXor(ballot);

+  subgroupInclusiveAdd(f4);

+  subgroupInclusiveMul(f4);

+  subgroupInclusiveMin(f4);

+  subgroupInclusiveMax(f4);

+  subgroupInclusiveAnd(ballot);

+  subgroupInclusiveOr(ballot);

+  subgroupInclusiveXor(ballot);

+  subgroupExclusiveAdd(f4);

+  subgroupExclusiveMul(f4);

+  subgroupExclusiveMin(f4);

+  subgroupExclusiveMax(f4);

+  subgroupExclusiveAnd(ballot);

+  subgroupExclusiveOr(ballot);

+  subgroupExclusiveXor(ballot);

+}

+

+#extension GL_KHR_shader_subgroup_clustered: enable

+void clustered_works(vec4 f4)

+{

+  uvec4 ballot = uvec4(0x55,0,0,0);

+  subgroupClusteredAdd(f4, 2);

+  subgroupClusteredMul(f4, 2);

+  subgroupClusteredMin(f4, 2);

+  subgroupClusteredMax(f4, 2);

+  subgroupClusteredAnd(ballot, 2);

+  subgroupClusteredOr(ballot, 2);

+  subgroupClusteredXor(ballot, 2);

+}

+

+#extension GL_KHR_shader_subgroup_quad: enable

+void quad_works(vec4 f4)

+{

+  subgroupQuadBroadcast(f4, 0);

+  subgroupQuadSwapHorizontal(f4);

+  subgroupQuadSwapVertical(f4);

+  subgroupQuadSwapDiagonal(f4);

+}

+

+#extension GL_NV_shader_subgroup_partitioned: enable

+void partitioned_works(vec4 f4)

+{

+  uvec4 parti = subgroupPartitionNV(f4);

+  uvec4 ballot = uvec4(0x55,0,0,0);

+  subgroupPartitionedAddNV(f4, parti);

+  subgroupPartitionedMulNV(f4, parti);

+  subgroupPartitionedMinNV(f4, parti);

+  subgroupPartitionedMaxNV(f4, parti);

+  subgroupPartitionedAndNV(ballot, parti);

+  subgroupPartitionedOrNV(ballot, parti);

+  subgroupPartitionedXorNV(ballot, parti);

+  subgroupPartitionedInclusiveAddNV(f4, parti);

+  subgroupPartitionedInclusiveMulNV(f4, parti);

+  subgroupPartitionedInclusiveMinNV(f4, parti);

+  subgroupPartitionedInclusiveMaxNV(f4, parti);

+  subgroupPartitionedInclusiveAndNV(ballot, parti);

+  subgroupPartitionedInclusiveOrNV(ballot, parti);

+  subgroupPartitionedInclusiveXorNV(ballot, parti);

+  subgroupPartitionedExclusiveAddNV(f4, parti);

+  subgroupPartitionedExclusiveMulNV(f4, parti);

+  subgroupPartitionedExclusiveMinNV(f4, parti);

+  subgroupPartitionedExclusiveMaxNV(f4, parti);

+  subgroupPartitionedExclusiveAndNV(ballot, parti);

+  subgroupPartitionedExclusiveOrNV(ballot, parti);

+  subgroupPartitionedExclusiveXorNV(ballot, parti);

+}

+

+// tests for NV_shader_sm_builtins

+void sm_builtins_err()

+{

+    gl_WarpsPerSMNV;    // ERROR, no extension

+    gl_SMCountNV;       // ERROR, no extension

+    gl_WarpIDNV;        // ERROR, no extension

+    gl_SMIDNV;          // ERROR, no extension

+}

+

+#ifdef GL_NV_shader_sm_builtins

+#extension GL_NV_shader_sm_builtins : enable

+#endif

+

+void sm_builtins()

+{

+    gl_WarpsPerSMNV;

+    gl_SMCountNV;

+    gl_WarpIDNV;

+    gl_SMIDNV;

+}

diff --git a/Test/glsl.450.subgroup.tesc b/Test/glsl.450.subgroup.tesc
new file mode 100644
index 0000000..92cb1ae
--- /dev/null
+++ b/Test/glsl.450.subgroup.tesc
@@ -0,0 +1,253 @@
+#version 450

+

+vec4 undeclared_errors(vec4 f4)

+{

+  vec4 result;

+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)

+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)

+  subgroupBarrier();             // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)

+  subgroupElect();               // ERROR, extension not enabled (basic)

+  gl_NumSubgroups;               // ERROR, only defined in compute

+  gl_SubgroupID;                 // ERROR, only defined in compute

+  subgroupMemoryBarrierShared(); // ERROR, only defined in compute

+

+  subgroupAll(true);        // ERROR extension not enabled (vote)

+  subgroupAny(false);       // ERROR extension not enabled (vote)

+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)

+

+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)

+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)

+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)

+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)

+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)

+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)

+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)

+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)

+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)

+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)

+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)

+

+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)

+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)

+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)

+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)

+

+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)

+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)

+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)

+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)

+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)

+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)

+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)

+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)

+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)

+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)

+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)

+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)

+

+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)

+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)

+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)

+

+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)

+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)

+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)

+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)

+

+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+

+  return result;

+}

+

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(vertices=1) out;

+layout(set = 0, binding = 0, std430) buffer Output

+{

+  uvec4 result[];

+};

+

+void main (void)

+{

+  result[gl_PrimitiveID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+  subgroupBarrier();

+  subgroupMemoryBarrier();

+  subgroupMemoryBarrierBuffer();

+  subgroupMemoryBarrierImage();

+  subgroupElect();

+}

+

+#extension GL_KHR_shader_subgroup_ballot: enable

+void ballot_works(vec4 f4) {

+  gl_SubgroupEqMask;

+  gl_SubgroupGeMask;

+  gl_SubgroupGtMask;

+  gl_SubgroupLeMask;

+  gl_SubgroupLtMask;

+  subgroupBroadcast(f4, 0);

+  subgroupBroadcastFirst(f4);

+  uvec4 ballot = subgroupBallot(false);

+  subgroupInverseBallot(uvec4(0x1));

+  subgroupBallotBitExtract(ballot, 0);

+  subgroupBallotBitCount(ballot);

+  subgroupBallotInclusiveBitCount(ballot);

+  subgroupBallotExclusiveBitCount(ballot);

+  subgroupBallotFindLSB(ballot);

+  subgroupBallotFindMSB(ballot);

+}

+

+#extension GL_KHR_shader_subgroup_vote: enable

+void vote_works(vec4 f4)

+{

+  subgroupAll(true);

+  subgroupAny(false);

+  subgroupAllEqual(f4);

+}

+

+#extension GL_KHR_shader_subgroup_shuffle: enable

+#extension GL_KHR_shader_subgroup_shuffle_relative: enable

+void shuffle_works(vec4 f4)

+{

+  subgroupShuffle(f4, 0);

+  subgroupShuffleXor(f4, 0x1);

+  subgroupShuffleUp(f4, 1);

+  subgroupShuffleDown(f4, 1);

+}

+

+#extension GL_KHR_shader_subgroup_arithmetic: enable

+void arith_works(vec4 f4)

+{

+  uvec4 ballot;

+  subgroupAdd(f4);

+  subgroupMul(f4);

+  subgroupMin(f4);

+  subgroupMax(f4);

+  subgroupAnd(ballot);

+  subgroupOr(ballot);

+  subgroupXor(ballot);

+  subgroupInclusiveAdd(f4);

+  subgroupInclusiveMul(f4);

+  subgroupInclusiveMin(f4);

+  subgroupInclusiveMax(f4);

+  subgroupInclusiveAnd(ballot);

+  subgroupInclusiveOr(ballot);

+  subgroupInclusiveXor(ballot);

+  subgroupExclusiveAdd(f4);

+  subgroupExclusiveMul(f4);

+  subgroupExclusiveMin(f4);

+  subgroupExclusiveMax(f4);

+  subgroupExclusiveAnd(ballot);

+  subgroupExclusiveOr(ballot);

+  subgroupExclusiveXor(ballot);

+}

+

+#extension GL_KHR_shader_subgroup_clustered: enable

+void clustered_works(vec4 f4)

+{

+  uvec4 ballot = uvec4(0x55,0,0,0);

+  subgroupClusteredAdd(f4, 2);

+  subgroupClusteredMul(f4, 2);

+  subgroupClusteredMin(f4, 2);

+  subgroupClusteredMax(f4, 2);

+  subgroupClusteredAnd(ballot, 2);

+  subgroupClusteredOr(ballot, 2);

+  subgroupClusteredXor(ballot, 2);

+}

+

+#extension GL_KHR_shader_subgroup_quad: enable

+void quad_works(vec4 f4)

+{

+  subgroupQuadBroadcast(f4, 0);

+  subgroupQuadSwapHorizontal(f4);

+  subgroupQuadSwapVertical(f4);

+  subgroupQuadSwapDiagonal(f4);

+}

+

+#extension GL_NV_shader_subgroup_partitioned: enable

+void partitioned_works(vec4 f4)

+{

+  uvec4 parti = subgroupPartitionNV(f4);

+  uvec4 ballot = uvec4(0x55,0,0,0);

+  subgroupPartitionedAddNV(f4, parti);

+  subgroupPartitionedMulNV(f4, parti);

+  subgroupPartitionedMinNV(f4, parti);

+  subgroupPartitionedMaxNV(f4, parti);

+  subgroupPartitionedAndNV(ballot, parti);

+  subgroupPartitionedOrNV(ballot, parti);

+  subgroupPartitionedXorNV(ballot, parti);

+  subgroupPartitionedInclusiveAddNV(f4, parti);

+  subgroupPartitionedInclusiveMulNV(f4, parti);

+  subgroupPartitionedInclusiveMinNV(f4, parti);

+  subgroupPartitionedInclusiveMaxNV(f4, parti);

+  subgroupPartitionedInclusiveAndNV(ballot, parti);

+  subgroupPartitionedInclusiveOrNV(ballot, parti);

+  subgroupPartitionedInclusiveXorNV(ballot, parti);

+  subgroupPartitionedExclusiveAddNV(f4, parti);

+  subgroupPartitionedExclusiveMulNV(f4, parti);

+  subgroupPartitionedExclusiveMinNV(f4, parti);

+  subgroupPartitionedExclusiveMaxNV(f4, parti);

+  subgroupPartitionedExclusiveAndNV(ballot, parti);

+  subgroupPartitionedExclusiveOrNV(ballot, parti);

+  subgroupPartitionedExclusiveXorNV(ballot, parti);

+}

+

+// tests for NV_shader_sm_builtins

+void sm_builtins_err()

+{

+    gl_WarpsPerSMNV;    // ERROR, no extension

+    gl_SMCountNV;       // ERROR, no extension

+    gl_WarpIDNV;        // ERROR, no extension

+    gl_SMIDNV;          // ERROR, no extension

+}

+

+#ifdef GL_NV_shader_sm_builtins

+#extension GL_NV_shader_sm_builtins : enable

+#endif

+

+void sm_builtins()

+{

+    gl_WarpsPerSMNV;

+    gl_SMCountNV;

+    gl_WarpIDNV;

+    gl_SMIDNV;

+}

diff --git a/Test/glsl.450.subgroup.tese b/Test/glsl.450.subgroup.tese
new file mode 100644
index 0000000..bfb2b72
--- /dev/null
+++ b/Test/glsl.450.subgroup.tese
@@ -0,0 +1,253 @@
+#version 450

+

+vec4 undeclared_errors(vec4 f4)

+{

+  vec4 result;

+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)

+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)

+  subgroupBarrier();             // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)

+  subgroupElect();               // ERROR, extension not enabled (basic)

+  gl_NumSubgroups;               // ERROR, only defined in compute

+  gl_SubgroupID;                 // ERROR, only defined in compute

+  subgroupMemoryBarrierShared(); // ERROR, only defined in compute

+

+  subgroupAll(true);        // ERROR extension not enabled (vote)

+  subgroupAny(false);       // ERROR extension not enabled (vote)

+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)

+

+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)

+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)

+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)

+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)

+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)

+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)

+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)

+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)

+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)

+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)

+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)

+

+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)

+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)

+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)

+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)

+

+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)

+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)

+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)

+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)

+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)

+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)

+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)

+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)

+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)

+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)

+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)

+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)

+

+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)

+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)

+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)

+

+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)

+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)

+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)

+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)

+

+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+

+  return result;

+}

+

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(isolines) in;

+layout(set = 0, binding = 0, std430) buffer Output

+{

+  uvec4 result[];

+};

+

+void main (void)

+{

+  result[gl_PrimitiveID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+  subgroupBarrier();

+  subgroupMemoryBarrier();

+  subgroupMemoryBarrierBuffer();

+  subgroupMemoryBarrierImage();

+  subgroupElect();

+}

+

+#extension GL_KHR_shader_subgroup_ballot: enable

+void ballot_works(vec4 f4) {

+  gl_SubgroupEqMask;

+  gl_SubgroupGeMask;

+  gl_SubgroupGtMask;

+  gl_SubgroupLeMask;

+  gl_SubgroupLtMask;

+  subgroupBroadcast(f4, 0);

+  subgroupBroadcastFirst(f4);

+  uvec4 ballot = subgroupBallot(false);

+  subgroupInverseBallot(uvec4(0x1));

+  subgroupBallotBitExtract(ballot, 0);

+  subgroupBallotBitCount(ballot);

+  subgroupBallotInclusiveBitCount(ballot);

+  subgroupBallotExclusiveBitCount(ballot);

+  subgroupBallotFindLSB(ballot);

+  subgroupBallotFindMSB(ballot);

+}

+

+#extension GL_KHR_shader_subgroup_vote: enable

+void vote_works(vec4 f4)

+{

+  subgroupAll(true);

+  subgroupAny(false);

+  subgroupAllEqual(f4);

+}

+

+#extension GL_KHR_shader_subgroup_shuffle: enable

+#extension GL_KHR_shader_subgroup_shuffle_relative: enable

+void shuffle_works(vec4 f4)

+{

+  subgroupShuffle(f4, 0);

+  subgroupShuffleXor(f4, 0x1);

+  subgroupShuffleUp(f4, 1);

+  subgroupShuffleDown(f4, 1);

+}

+

+#extension GL_KHR_shader_subgroup_arithmetic: enable

+void arith_works(vec4 f4)

+{

+  uvec4 ballot;

+  subgroupAdd(f4);

+  subgroupMul(f4);

+  subgroupMin(f4);

+  subgroupMax(f4);

+  subgroupAnd(ballot);

+  subgroupOr(ballot);

+  subgroupXor(ballot);

+  subgroupInclusiveAdd(f4);

+  subgroupInclusiveMul(f4);

+  subgroupInclusiveMin(f4);

+  subgroupInclusiveMax(f4);

+  subgroupInclusiveAnd(ballot);

+  subgroupInclusiveOr(ballot);

+  subgroupInclusiveXor(ballot);

+  subgroupExclusiveAdd(f4);

+  subgroupExclusiveMul(f4);

+  subgroupExclusiveMin(f4);

+  subgroupExclusiveMax(f4);

+  subgroupExclusiveAnd(ballot);

+  subgroupExclusiveOr(ballot);

+  subgroupExclusiveXor(ballot);

+}

+

+#extension GL_KHR_shader_subgroup_clustered: enable

+void clustered_works(vec4 f4)

+{

+  uvec4 ballot = uvec4(0x55,0,0,0);

+  subgroupClusteredAdd(f4, 2);

+  subgroupClusteredMul(f4, 2);

+  subgroupClusteredMin(f4, 2);

+  subgroupClusteredMax(f4, 2);

+  subgroupClusteredAnd(ballot, 2);

+  subgroupClusteredOr(ballot, 2);

+  subgroupClusteredXor(ballot, 2);

+}

+

+#extension GL_KHR_shader_subgroup_quad: enable

+void quad_works(vec4 f4)

+{

+  subgroupQuadBroadcast(f4, 0);

+  subgroupQuadSwapHorizontal(f4);

+  subgroupQuadSwapVertical(f4);

+  subgroupQuadSwapDiagonal(f4);

+}

+

+#extension GL_NV_shader_subgroup_partitioned: enable

+void partitioned_works(vec4 f4)

+{

+  uvec4 parti = subgroupPartitionNV(f4);

+  uvec4 ballot = uvec4(0x55,0,0,0);

+  subgroupPartitionedAddNV(f4, parti);

+  subgroupPartitionedMulNV(f4, parti);

+  subgroupPartitionedMinNV(f4, parti);

+  subgroupPartitionedMaxNV(f4, parti);

+  subgroupPartitionedAndNV(ballot, parti);

+  subgroupPartitionedOrNV(ballot, parti);

+  subgroupPartitionedXorNV(ballot, parti);

+  subgroupPartitionedInclusiveAddNV(f4, parti);

+  subgroupPartitionedInclusiveMulNV(f4, parti);

+  subgroupPartitionedInclusiveMinNV(f4, parti);

+  subgroupPartitionedInclusiveMaxNV(f4, parti);

+  subgroupPartitionedInclusiveAndNV(ballot, parti);

+  subgroupPartitionedInclusiveOrNV(ballot, parti);

+  subgroupPartitionedInclusiveXorNV(ballot, parti);

+  subgroupPartitionedExclusiveAddNV(f4, parti);

+  subgroupPartitionedExclusiveMulNV(f4, parti);

+  subgroupPartitionedExclusiveMinNV(f4, parti);

+  subgroupPartitionedExclusiveMaxNV(f4, parti);

+  subgroupPartitionedExclusiveAndNV(ballot, parti);

+  subgroupPartitionedExclusiveOrNV(ballot, parti);

+  subgroupPartitionedExclusiveXorNV(ballot, parti);

+}

+

+// tests for NV_shader_sm_builtins

+void sm_builtins_err()

+{

+    gl_WarpsPerSMNV;    // ERROR, no extension

+    gl_SMCountNV;       // ERROR, no extension

+    gl_WarpIDNV;        // ERROR, no extension

+    gl_SMIDNV;          // ERROR, no extension

+}

+

+#ifdef GL_NV_shader_sm_builtins

+#extension GL_NV_shader_sm_builtins : enable

+#endif

+

+void sm_builtins()

+{

+    gl_WarpsPerSMNV;

+    gl_SMCountNV;

+    gl_WarpIDNV;

+    gl_SMIDNV;

+}

diff --git a/Test/glsl.450.subgroup.vert b/Test/glsl.450.subgroup.vert
new file mode 100644
index 0000000..110b1d0
--- /dev/null
+++ b/Test/glsl.450.subgroup.vert
@@ -0,0 +1,253 @@
+#version 450

+

+vec4 undeclared_errors(vec4 f4)

+{

+  vec4 result;

+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)

+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)

+  subgroupBarrier();             // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)

+  subgroupElect();               // ERROR, extension not enabled (basic)

+  gl_NumSubgroups;               // ERROR, only defined in compute

+  gl_SubgroupID;                 // ERROR, only defined in compute

+  subgroupMemoryBarrierShared(); // ERROR, only defined in compute

+

+  subgroupAll(true);        // ERROR extension not enabled (vote)

+  subgroupAny(false);       // ERROR extension not enabled (vote)

+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)

+

+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)

+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)

+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)

+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)

+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)

+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)

+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)

+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)

+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)

+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)

+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)

+

+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)

+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)

+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)

+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)

+

+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)

+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)

+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)

+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)

+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)

+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)

+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)

+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)

+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)

+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)

+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)

+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)

+

+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)

+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)

+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)

+

+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)

+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)

+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)

+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)

+

+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+

+  return result;

+}

+

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(set = 0, binding = 0, std430) buffer Output

+{

+  uvec4 result[];

+};

+

+void main (void)

+{

+  result[gl_VertexID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+  subgroupBarrier();

+  subgroupMemoryBarrier();

+  subgroupMemoryBarrierBuffer();

+  subgroupMemoryBarrierImage();

+  subgroupElect();

+}

+

+#extension GL_KHR_shader_subgroup_ballot: enable

+void ballot_works(vec4 f4) {

+  gl_SubgroupEqMask;

+  gl_SubgroupGeMask;

+  gl_SubgroupGtMask;

+  gl_SubgroupLeMask;

+  gl_SubgroupLtMask;

+  subgroupBroadcast(f4, 0);

+  subgroupBroadcastFirst(f4);

+  uvec4 ballot = subgroupBallot(false);

+  subgroupInverseBallot(uvec4(0x1));

+  subgroupBallotBitExtract(ballot, 0);

+  subgroupBallotBitCount(ballot);

+  subgroupBallotInclusiveBitCount(ballot);

+  subgroupBallotExclusiveBitCount(ballot);

+  subgroupBallotFindLSB(ballot);

+  subgroupBallotFindMSB(ballot);

+}

+

+#extension GL_KHR_shader_subgroup_vote: enable

+void vote_works(vec4 f4)

+{

+  subgroupAll(true);

+  subgroupAny(false);

+  subgroupAllEqual(f4);

+}

+

+#extension GL_KHR_shader_subgroup_shuffle: enable

+#extension GL_KHR_shader_subgroup_shuffle_relative: enable

+void shuffle_works(vec4 f4)

+{

+  subgroupShuffle(f4, 0);

+  subgroupShuffleXor(f4, 0x1);

+  subgroupShuffleUp(f4, 1);

+  subgroupShuffleDown(f4, 1);

+}

+

+#extension GL_KHR_shader_subgroup_arithmetic: enable

+void arith_works(vec4 f4)

+{

+  uvec4 ballot;

+  subgroupAdd(f4);

+  subgroupMul(f4);

+  subgroupMin(f4);

+  subgroupMax(f4);

+  subgroupAnd(ballot);

+  subgroupOr(ballot);

+  subgroupXor(ballot);

+  subgroupInclusiveAdd(f4);

+  subgroupInclusiveMul(f4);

+  subgroupInclusiveMin(f4);

+  subgroupInclusiveMax(f4);

+  subgroupInclusiveAnd(ballot);

+  subgroupInclusiveOr(ballot);

+  subgroupInclusiveXor(ballot);

+  subgroupExclusiveAdd(f4);

+  subgroupExclusiveMul(f4);

+  subgroupExclusiveMin(f4);

+  subgroupExclusiveMax(f4);

+  subgroupExclusiveAnd(ballot);

+  subgroupExclusiveOr(ballot);

+  subgroupExclusiveXor(ballot);

+}

+

+#extension GL_KHR_shader_subgroup_clustered: enable

+void clustered_works(vec4 f4)

+{

+  uvec4 ballot = uvec4(0x55,0,0,0);

+  subgroupClusteredAdd(f4, 2);

+  subgroupClusteredMul(f4, 2);

+  subgroupClusteredMin(f4, 2);

+  subgroupClusteredMax(f4, 2);

+  subgroupClusteredAnd(ballot, 2);

+  subgroupClusteredOr(ballot, 2);

+  subgroupClusteredXor(ballot, 2);

+}

+

+#extension GL_KHR_shader_subgroup_quad: enable

+void quad_works(vec4 f4)

+{

+  subgroupQuadBroadcast(f4, 0);

+  subgroupQuadSwapHorizontal(f4);

+  subgroupQuadSwapVertical(f4);

+  subgroupQuadSwapDiagonal(f4);

+}

+

+#extension GL_NV_shader_subgroup_partitioned: enable

+void partitioned_works(vec4 f4)

+{

+  uvec4 parti = subgroupPartitionNV(f4);

+  uvec4 ballot = uvec4(0x55,0,0,0);

+  subgroupPartitionedAddNV(f4, parti);

+  subgroupPartitionedMulNV(f4, parti);

+  subgroupPartitionedMinNV(f4, parti);

+  subgroupPartitionedMaxNV(f4, parti);

+  subgroupPartitionedAndNV(ballot, parti);

+  subgroupPartitionedOrNV(ballot, parti);

+  subgroupPartitionedXorNV(ballot, parti);

+  subgroupPartitionedInclusiveAddNV(f4, parti);

+  subgroupPartitionedInclusiveMulNV(f4, parti);

+  subgroupPartitionedInclusiveMinNV(f4, parti);

+  subgroupPartitionedInclusiveMaxNV(f4, parti);

+  subgroupPartitionedInclusiveAndNV(ballot, parti);

+  subgroupPartitionedInclusiveOrNV(ballot, parti);

+  subgroupPartitionedInclusiveXorNV(ballot, parti);

+  subgroupPartitionedExclusiveAddNV(f4, parti);

+  subgroupPartitionedExclusiveMulNV(f4, parti);

+  subgroupPartitionedExclusiveMinNV(f4, parti);

+  subgroupPartitionedExclusiveMaxNV(f4, parti);

+  subgroupPartitionedExclusiveAndNV(ballot, parti);

+  subgroupPartitionedExclusiveOrNV(ballot, parti);

+  subgroupPartitionedExclusiveXorNV(ballot, parti);

+}

+

+// tests for NV_shader_sm_builtins

+void sm_builtins_err()

+{

+    gl_WarpsPerSMNV;    // ERROR, no extension

+    gl_SMCountNV;       // ERROR, no extension

+    gl_WarpIDNV;        // ERROR, no extension

+    gl_SMIDNV;          // ERROR, no extension

+}

+

+#ifdef GL_NV_shader_sm_builtins

+#extension GL_NV_shader_sm_builtins : enable

+#endif

+

+void sm_builtins()

+{

+    gl_WarpsPerSMNV;

+    gl_SMCountNV;

+    gl_WarpIDNV;

+    gl_SMIDNV;

+}

+

diff --git a/Test/glsl.450.subgroupArithmetic.comp b/Test/glsl.450.subgroupArithmetic.comp
new file mode 100644
index 0000000..6cc9337
--- /dev/null
+++ b/Test/glsl.450.subgroupArithmetic.comp
@@ -0,0 +1,393 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_arithmetic: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

+    data[invocation].i4.x   =   int(subgroupAnd(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupAnd(lessThan(data[1].i4, ivec4(0))));

+

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

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

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

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

+

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

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

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

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

+

+    data[invocation].i4.x   =   int(subgroupOr(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupOr(lessThan(data[1].i4, ivec4(0))));

+

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

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

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

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

+

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

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

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

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

+

+    data[invocation].i4.x   =   int(subgroupXor(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupXor(lessThan(data[1].i4, ivec4(0))));

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

+    data[invocation].i4.x   =   int(subgroupInclusiveAnd(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupInclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupInclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupInclusiveAnd(lessThan(data[1].i4, ivec4(0))));

+

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

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

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

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

+

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

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

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

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

+

+    data[invocation].i4.x   =   int(subgroupInclusiveOr(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupInclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupInclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupInclusiveOr(lessThan(data[1].i4, ivec4(0))));

+

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

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

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

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

+

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

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

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

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

+

+    data[invocation].i4.x   =   int(subgroupInclusiveXor(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupInclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupInclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupInclusiveXor(lessThan(data[1].i4, ivec4(0))));

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

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

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

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

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

+

+    data[invocation].i4.x   =   int(subgroupExclusiveAnd(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupExclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupExclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupExclusiveAnd(lessThan(data[1].i4, ivec4(0))));

+

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

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

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

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

+

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

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

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

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

+

+    data[invocation].i4.x   =   int(subgroupExclusiveOr(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupExclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupExclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupExclusiveOr(lessThan(data[1].i4, ivec4(0))));

+

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

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

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

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

+

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

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

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

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

+

+    data[invocation].i4.x   =   int(subgroupExclusiveXor(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupExclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupExclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupExclusiveXor(lessThan(data[1].i4, ivec4(0))));

+}

diff --git a/Test/glsl.450.subgroupBallot.comp b/Test/glsl.450.subgroupBallot.comp
new file mode 100644
index 0000000..bb9dc3e
--- /dev/null
+++ b/Test/glsl.450.subgroupBallot.comp
@@ -0,0 +1,86 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_ballot: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

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

+

+    uvec4 relMask = gl_SubgroupEqMask +

+                       gl_SubgroupGeMask +

+                       gl_SubgroupGtMask +

+                       gl_SubgroupLeMask +

+                       gl_SubgroupLtMask;

+

+    uvec4 result = subgroupBallot(true);

+

+    data[invocation].u4.x = subgroupBallotBitCount(result);

+    data[invocation].u4.y = subgroupBallotBitExtract(result, 0) ? 1 : 0;

+    data[invocation].u4.z = subgroupBallotInclusiveBitCount(result) + subgroupBallotExclusiveBitCount(result);

+    data[invocation].u4.w = subgroupBallotFindLSB(result) + subgroupBallotFindMSB(result);

+

+    if ((relMask == result) && subgroupInverseBallot(data[0].u4))

+    {

+        data[invocation].f4.x   = subgroupBroadcast(data[0].f4.x,    3);

+        data[invocation].f4.xy  = subgroupBroadcast(data[1].f4.xy,   3);

+        data[invocation].f4.xyz = subgroupBroadcast(data[2].f4.xyz,  3);

+        data[invocation].f4     = subgroupBroadcast(data[3].f4,      3);

+

+        data[invocation].i4.x   = subgroupBroadcast(data[0].i4.x,    2);

+        data[invocation].i4.xy  = subgroupBroadcast(data[1].i4.xy,   2);

+        data[invocation].i4.xyz = subgroupBroadcast(data[2].i4.xyz,  2);

+        data[invocation].i4     = subgroupBroadcast(data[3].i4,      2);

+

+        data[invocation].u4.x   = subgroupBroadcast(data[0].u4.x,    1);

+        data[invocation].u4.xy  = subgroupBroadcast(data[1].u4.xy,   1);

+        data[invocation].u4.xyz = subgroupBroadcast(data[2].u4.xyz,  1);

+        data[invocation].u4     = subgroupBroadcast(data[3].u4,      1);

+

+        data[invocation].d4.x   = subgroupBroadcast(data[0].d4.x,    0);

+        data[invocation].d4.xy  = subgroupBroadcast(data[1].d4.xy,   0);

+        data[invocation].d4.xyz = subgroupBroadcast(data[2].d4.xyz,  0);

+        data[invocation].d4     = subgroupBroadcast(data[3].d4,      0);

+

+        data[invocation].i4.x   = int(subgroupBroadcast(data[0].i4.x < 0,            1));

+        data[invocation].i4.xy  = ivec2(subgroupBroadcast(lessThan(data[1].i4.xy, ivec2(0)), 1));

+        data[invocation].i4.xyz = ivec3(subgroupBroadcast(lessThan(data[1].i4.xyz, ivec3(0)), 1));

+        data[invocation].i4     = ivec4(subgroupBroadcast(lessThan(data[1].i4, ivec4(0)), 1));

+    }

+    else

+    {

+        data[invocation].f4.x   = subgroupBroadcastFirst(data[0].f4.x);

+        data[invocation].f4.xy  = subgroupBroadcastFirst(data[1].f4.xy);

+        data[invocation].f4.xyz = subgroupBroadcastFirst(data[2].f4.xyz);

+        data[invocation].f4     = subgroupBroadcastFirst(data[3].f4);

+

+        data[invocation].i4.x   = subgroupBroadcastFirst(data[0].i4.x);

+        data[invocation].i4.xy  = subgroupBroadcastFirst(data[1].i4.xy);

+        data[invocation].i4.xyz = subgroupBroadcastFirst(data[2].i4.xyz);

+        data[invocation].i4     = subgroupBroadcastFirst(data[3].i4);

+

+        data[invocation].u4.x   = subgroupBroadcastFirst(data[0].u4.x);

+        data[invocation].u4.xy  = subgroupBroadcastFirst(data[1].u4.xy);

+        data[invocation].u4.xyz = subgroupBroadcastFirst(data[2].u4.xyz);

+        data[invocation].u4     = subgroupBroadcastFirst(data[3].u4);

+

+        data[invocation].d4.x   = subgroupBroadcastFirst(data[0].d4.x);

+        data[invocation].d4.xy  = subgroupBroadcastFirst(data[1].d4.xy);

+        data[invocation].d4.xyz = subgroupBroadcastFirst(data[2].d4.xyz);

+        data[invocation].d4     = subgroupBroadcastFirst(data[3].d4);

+

+        data[invocation].i4.x   = int(subgroupBroadcastFirst(data[0].i4.x < 0));

+        data[invocation].i4.xy  = ivec2(subgroupBroadcastFirst(lessThan(data[1].i4.xy, ivec2(0))));

+        data[invocation].i4.xyz = ivec3(subgroupBroadcastFirst(lessThan(data[1].i4.xyz, ivec3(0))));

+        data[invocation].i4     = ivec4(subgroupBroadcastFirst(lessThan(data[1].i4, ivec4(0))));

+    }

+}

diff --git a/Test/glsl.450.subgroupBallotNeg.comp b/Test/glsl.450.subgroupBallotNeg.comp
new file mode 100644
index 0000000..4020adf
--- /dev/null
+++ b/Test/glsl.450.subgroupBallotNeg.comp
@@ -0,0 +1,33 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_ballot: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

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

+

+    uvec4 relMask = gl_SubgroupEqMask +

+                       gl_SubgroupGeMask +

+                       gl_SubgroupGtMask +

+                       gl_SubgroupLeMask +

+                       gl_SubgroupLtMask;

+

+    uvec4 result = subgroupBallot(true);

+

+    data[invocation].u4.x = subgroupBallotBitCount(result);

+    data[invocation].u4.y = subgroupBallotBitExtract(result, 0) ? 1 : 0;

+    data[invocation].u4.z = subgroupBallotInclusiveBitCount(result) + subgroupBallotExclusiveBitCount(result);

+    data[invocation].u4.w = subgroupBallotFindLSB(result) + subgroupBallotFindMSB(result);

+

+    data[invocation].f4.x   = subgroupBroadcast(data[0].f4.x,    invocation);  // ERROR: not constant

+}

diff --git a/Test/glsl.450.subgroupBasic.comp b/Test/glsl.450.subgroupBasic.comp
new file mode 100644
index 0000000..7b42878
--- /dev/null
+++ b/Test/glsl.450.subgroupBasic.comp
@@ -0,0 +1,258 @@
+#version 450

+

+vec4 undeclared_errors(vec4 f4)

+{

+  vec4 result;

+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)

+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)

+  subgroupBarrier();             // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)

+  subgroupElect();               // ERROR, extension not enabled (basic)

+  gl_NumSubgroups;               // ERROR, extension not enabled (basic)

+  gl_SubgroupID;                 // ERROR, extension not enabled (basic)

+  subgroupMemoryBarrierShared(); // ERROR, extension not enabled (basic)

+

+  subgroupAll(true);        // ERROR extension not enabled (vote)

+  subgroupAny(false);       // ERROR extension not enabled (vote)

+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)

+

+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)

+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)

+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)

+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)

+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)

+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)

+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)

+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)

+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)

+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)

+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)

+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)

+

+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)

+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)

+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)

+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)

+

+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)

+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)

+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)

+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)

+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)

+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)

+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)

+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)

+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)

+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)

+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)

+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)

+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)

+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)

+

+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)

+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)

+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)

+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)

+

+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)

+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)

+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)

+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)

+

+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)

+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)

+

+  return result;

+}

+

+#extension GL_KHR_shader_subgroup_basic: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffer

+{

+    int a[];

+} data;

+

+void main()

+{

+    data.a[gl_SubgroupSize] = 1;

+    data.a[gl_SubgroupInvocationID] = 1;

+    data.a[gl_NumSubgroups] = 1;

+    data.a[gl_SubgroupID] = (subgroupElect()) ? 1 : 0;

+    subgroupBarrier();

+    subgroupMemoryBarrier();

+    subgroupMemoryBarrierBuffer();

+    subgroupMemoryBarrierShared();

+    subgroupMemoryBarrierImage();

+}

+

+#extension GL_KHR_shader_subgroup_ballot: enable

+void ballot_works(vec4 f4) {

+  gl_SubgroupEqMask;

+  gl_SubgroupGeMask;

+  gl_SubgroupGtMask;

+  gl_SubgroupLeMask;

+  gl_SubgroupLtMask;

+  subgroupBroadcast(f4, 0);

+  subgroupBroadcastFirst(f4);

+  uvec4 ballot = subgroupBallot(false);

+  subgroupInverseBallot(uvec4(0x1));

+  subgroupBallotBitExtract(ballot, 0);

+  subgroupBallotBitCount(ballot);

+  subgroupBallotInclusiveBitCount(ballot);

+  subgroupBallotExclusiveBitCount(ballot);

+  subgroupBallotFindLSB(ballot);

+  subgroupBallotFindMSB(ballot);

+}

+

+#extension GL_KHR_shader_subgroup_vote: enable

+void vote_works(vec4 f4)

+{

+  subgroupAll(true);

+  subgroupAny(false);

+  subgroupAllEqual(f4);

+}

+

+#extension GL_KHR_shader_subgroup_shuffle: enable

+#extension GL_KHR_shader_subgroup_shuffle_relative: enable

+void shuffle_works(vec4 f4)

+{

+  subgroupShuffle(f4, 0);

+  subgroupShuffleXor(f4, 0x1);

+  subgroupShuffleUp(f4, 1);

+  subgroupShuffleDown(f4, 1);

+}

+

+#extension GL_KHR_shader_subgroup_arithmetic: enable

+void arith_works(vec4 f4)

+{

+  uvec4 ballot;

+  subgroupAdd(f4);

+  subgroupMul(f4);

+  subgroupMin(f4);

+  subgroupMax(f4);

+  subgroupAnd(ballot);

+  subgroupOr(ballot);

+  subgroupXor(ballot);

+  subgroupInclusiveAdd(f4);

+  subgroupInclusiveMul(f4);

+  subgroupInclusiveMin(f4);

+  subgroupInclusiveMax(f4);

+  subgroupInclusiveAnd(ballot);

+  subgroupInclusiveOr(ballot);

+  subgroupInclusiveXor(ballot);

+  subgroupExclusiveAdd(f4);

+  subgroupExclusiveMul(f4);

+  subgroupExclusiveMin(f4);

+  subgroupExclusiveMax(f4);

+  subgroupExclusiveAnd(ballot);

+  subgroupExclusiveOr(ballot);

+  subgroupExclusiveXor(ballot);

+}

+

+#extension GL_KHR_shader_subgroup_clustered: enable

+void clustered_works(vec4 f4)

+{

+  uvec4 ballot = uvec4(0x55,0,0,0);

+  subgroupClusteredAdd(f4, 2);

+  subgroupClusteredMul(f4, 2);

+  subgroupClusteredMin(f4, 2);

+  subgroupClusteredMax(f4, 2);

+  subgroupClusteredAnd(ballot, 2);

+  subgroupClusteredOr(ballot, 2);

+  subgroupClusteredXor(ballot, 2);

+}

+

+#extension GL_KHR_shader_subgroup_quad: enable

+void quad_works(vec4 f4)

+{

+  subgroupQuadBroadcast(f4, 0);

+  subgroupQuadSwapHorizontal(f4);

+  subgroupQuadSwapVertical(f4);

+  subgroupQuadSwapDiagonal(f4);

+}

+

+#extension GL_NV_shader_subgroup_partitioned: enable

+void partitioned_works(vec4 f4)

+{

+  uvec4 parti = subgroupPartitionNV(f4);

+  uvec4 ballot = uvec4(0x55,0,0,0);

+  subgroupPartitionedAddNV(f4, parti);

+  subgroupPartitionedMulNV(f4, parti);

+  subgroupPartitionedMinNV(f4, parti);

+  subgroupPartitionedMaxNV(f4, parti);

+  subgroupPartitionedAndNV(ballot, parti);

+  subgroupPartitionedOrNV(ballot, parti);

+  subgroupPartitionedXorNV(ballot, parti);

+  subgroupPartitionedInclusiveAddNV(f4, parti);

+  subgroupPartitionedInclusiveMulNV(f4, parti);

+  subgroupPartitionedInclusiveMinNV(f4, parti);

+  subgroupPartitionedInclusiveMaxNV(f4, parti);

+  subgroupPartitionedInclusiveAndNV(ballot, parti);

+  subgroupPartitionedInclusiveOrNV(ballot, parti);

+  subgroupPartitionedInclusiveXorNV(ballot, parti);

+  subgroupPartitionedExclusiveAddNV(f4, parti);

+  subgroupPartitionedExclusiveMulNV(f4, parti);

+  subgroupPartitionedExclusiveMinNV(f4, parti);

+  subgroupPartitionedExclusiveMaxNV(f4, parti);

+  subgroupPartitionedExclusiveAndNV(ballot, parti);

+  subgroupPartitionedExclusiveOrNV(ballot, parti);

+  subgroupPartitionedExclusiveXorNV(ballot, parti);

+}

+

+// tests for NV_shader_sm_builtins

+void sm_builtins_err()

+{

+    gl_WarpsPerSMNV;    // ERROR, no extension

+    gl_SMCountNV;       // ERROR, no extension

+    gl_WarpIDNV;        // ERROR, no extension

+    gl_SMIDNV;          // ERROR, no extension

+}

+

+#ifdef GL_NV_shader_sm_builtins

+#extension GL_NV_shader_sm_builtins : enable

+#endif

+

+void sm_builtins()

+{

+    gl_WarpsPerSMNV;

+    gl_SMCountNV;

+    gl_WarpIDNV;

+    gl_SMIDNV;

+}

diff --git a/Test/glsl.450.subgroupClustered.comp b/Test/glsl.450.subgroupClustered.comp
new file mode 100644
index 0000000..128a24c
--- /dev/null
+++ b/Test/glsl.450.subgroupClustered.comp
@@ -0,0 +1,143 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_clustered: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

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

+

+    data[invocation].f4.x   = subgroupClusteredAdd(data[0].f4.x, 1);

+    data[invocation].f4.xy  = subgroupClusteredAdd(data[1].f4.xy, 1);

+    data[invocation].f4.xyz = subgroupClusteredAdd(data[2].f4.xyz, 1);

+    data[invocation].f4     = subgroupClusteredAdd(data[3].f4, 1);

+

+    data[invocation].i4.x   = subgroupClusteredAdd(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredAdd(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredAdd(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredAdd(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredAdd(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredAdd(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredAdd(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredAdd(data[3].u4, 1);

+

+    data[invocation].d4.x   = subgroupClusteredAdd(data[0].d4.x, 1);

+    data[invocation].d4.xy  = subgroupClusteredAdd(data[1].d4.xy, 1);

+    data[invocation].d4.xyz = subgroupClusteredAdd(data[2].d4.xyz, 1);

+    data[invocation].d4     = subgroupClusteredAdd(data[3].d4, 1);

+

+    data[invocation].f4.x   = subgroupClusteredMul(data[0].f4.x, 1);

+    data[invocation].f4.xy  = subgroupClusteredMul(data[1].f4.xy, 1);

+    data[invocation].f4.xyz = subgroupClusteredMul(data[2].f4.xyz, 1);

+    data[invocation].f4     = subgroupClusteredMul(data[3].f4, 1);

+

+    data[invocation].i4.x   = subgroupClusteredMul(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredMul(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredMul(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredMul(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredMul(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredMul(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredMul(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredMul(data[3].u4, 1);

+

+    data[invocation].d4.x   = subgroupClusteredMul(data[0].d4.x, 1);

+    data[invocation].d4.xy  = subgroupClusteredMul(data[1].d4.xy, 1);

+    data[invocation].d4.xyz = subgroupClusteredMul(data[2].d4.xyz, 1);

+    data[invocation].d4     = subgroupClusteredMul(data[3].d4, 1);

+

+    data[invocation].f4.x   = subgroupClusteredMin(data[0].f4.x, 1);

+    data[invocation].f4.xy  = subgroupClusteredMin(data[1].f4.xy, 1);

+    data[invocation].f4.xyz = subgroupClusteredMin(data[2].f4.xyz, 1);

+    data[invocation].f4     = subgroupClusteredMin(data[3].f4, 1);

+

+    data[invocation].i4.x   = subgroupClusteredMin(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredMin(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredMin(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredMin(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredMin(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredMin(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredMin(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredMin(data[3].u4, 1);

+

+    data[invocation].d4.x   = subgroupClusteredMin(data[0].d4.x, 1);

+    data[invocation].d4.xy  = subgroupClusteredMin(data[1].d4.xy, 1);

+    data[invocation].d4.xyz = subgroupClusteredMin(data[2].d4.xyz, 1);

+    data[invocation].d4     = subgroupClusteredMin(data[3].d4, 1);

+

+    data[invocation].f4.x   = subgroupClusteredMax(data[0].f4.x, 1);

+    data[invocation].f4.xy  = subgroupClusteredMax(data[1].f4.xy, 1);

+    data[invocation].f4.xyz = subgroupClusteredMax(data[2].f4.xyz, 1);

+    data[invocation].f4     = subgroupClusteredMax(data[3].f4, 1);

+

+    data[invocation].i4.x   = subgroupClusteredMax(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredMax(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredMax(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredMax(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredMax(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredMax(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredMax(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredMax(data[3].u4, 1);

+

+    data[invocation].d4.x   = subgroupClusteredMax(data[0].d4.x, 1);

+    data[invocation].d4.xy  = subgroupClusteredMax(data[1].d4.xy, 1);

+    data[invocation].d4.xyz = subgroupClusteredMax(data[2].d4.xyz, 1);

+    data[invocation].d4     = subgroupClusteredMax(data[3].d4, 1);

+

+    data[invocation].i4.x   = subgroupClusteredAnd(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredAnd(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredAnd(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredAnd(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredAnd(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredAnd(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredAnd(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredAnd(data[3].u4, 1);

+

+    data[invocation].i4.x   =   int(subgroupClusteredAnd(data[0].i4.x < 0, 1));

+    data[invocation].i4.xy  = ivec2(subgroupClusteredAnd(lessThan(data[1].i4.xy, ivec2(0)), 1));

+    data[invocation].i4.xyz = ivec3(subgroupClusteredAnd(lessThan(data[1].i4.xyz, ivec3(0)), 1));

+    data[invocation].i4     = ivec4(subgroupClusteredAnd(lessThan(data[1].i4, ivec4(0)), 1));

+

+    data[invocation].i4.x   = subgroupClusteredOr(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredOr(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredOr(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredOr(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredOr(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredOr(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredOr(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredOr(data[3].u4, 1);

+

+    data[invocation].i4.x   =   int(subgroupClusteredOr(data[0].i4.x < 0, 1));

+    data[invocation].i4.xy  = ivec2(subgroupClusteredOr(lessThan(data[1].i4.xy, ivec2(0)), 1));

+    data[invocation].i4.xyz = ivec3(subgroupClusteredOr(lessThan(data[1].i4.xyz, ivec3(0)), 1));

+    data[invocation].i4     = ivec4(subgroupClusteredOr(lessThan(data[1].i4, ivec4(0)), 1));

+

+    data[invocation].i4.x   = subgroupClusteredXor(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredXor(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredXor(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredXor(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredXor(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredXor(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredXor(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredXor(data[3].u4, 1);

+

+    data[invocation].i4.x   =   int(subgroupClusteredXor(data[0].i4.x < 0, 1));

+    data[invocation].i4.xy  = ivec2(subgroupClusteredXor(lessThan(data[1].i4.xy, ivec2(0)), 1));

+    data[invocation].i4.xyz = ivec3(subgroupClusteredXor(lessThan(data[1].i4.xyz, ivec3(0)), 1));

+    data[invocation].i4     = ivec4(subgroupClusteredXor(lessThan(data[1].i4, ivec4(0)), 1));

+}

diff --git a/Test/glsl.450.subgroupClusteredNeg.comp b/Test/glsl.450.subgroupClusteredNeg.comp
new file mode 100644
index 0000000..ec15413
--- /dev/null
+++ b/Test/glsl.450.subgroupClusteredNeg.comp
@@ -0,0 +1,39 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_clustered: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    int a = 1;

+    const int aConst = 1;

+

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

+

+    data[invocation].f4.xy  = subgroupClusteredAdd(data[1].f4.xy, 0);          // ERROR, less than 1

+

+    data[invocation].f4.x   = subgroupClusteredMul(data[0].f4.x, 3);           // ERROR, not a power of 2

+

+    data[invocation].i4.xy  = subgroupClusteredMin(data[1].i4.xy, 8);

+    data[invocation].i4.xyz = subgroupClusteredMin(data[2].i4.xyz, 6);         // ERROR, not a power of 2

+

+    data[invocation].f4.x   = subgroupClusteredMax(data[0].f4.x, -1);          // ERROR, less than 1

+

+    data[invocation].i4     = subgroupClusteredAnd(data[3].i4, -3);            // ERROR, less than 1

+

+    data[invocation].i4.x   = subgroupClusteredOr(data[0].i4.x, a);            // ERROR, not constant

+    data[invocation].i4.xy  = subgroupClusteredOr(data[1].i4.xy, aConst);

+

+    data[invocation].i4.x   = subgroupClusteredXor(data[0].i4.x, 1 + a);       // ERROR, not constant

+    data[invocation].i4.xy  = subgroupClusteredXor(data[1].i4.xy, aConst + a); // ERROR, not constant

+    data[invocation].i4.xyz = subgroupClusteredXor(data[2].i4.xyz, 1 + aConst);

+}

diff --git a/Test/glsl.450.subgroupPartitioned.comp b/Test/glsl.450.subgroupPartitioned.comp
new file mode 100644
index 0000000..604833e
--- /dev/null
+++ b/Test/glsl.450.subgroupPartitioned.comp
@@ -0,0 +1,420 @@
+#version 450

+

+#extension GL_NV_shader_subgroup_partitioned: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

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

+

+    uvec4 ballot = subgroupPartitionNV(invocation);

+

+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.x);

+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.xy);

+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.xyz);

+    data[invocation].u4 = subgroupPartitionNV(data[0].f4);

+

+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.x);

+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.xy);

+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.xyz);

+    data[invocation].u4 = subgroupPartitionNV(data[0].i4);

+

+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.x);

+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.xy);

+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.xyz);

+    data[invocation].u4 = subgroupPartitionNV(data[0].u4);

+

+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.x);

+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.xy);

+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.xyz);

+    data[invocation].u4 = subgroupPartitionNV(data[0].d4);

+

+    data[invocation].u4 = subgroupPartitionNV(bool(data[0].i4.x));

+    data[invocation].u4 = subgroupPartitionNV(bvec2(data[0].i4.xy));

+    data[invocation].u4 = subgroupPartitionNV(bvec3(data[0].i4.xyz));

+    data[invocation].u4 = subgroupPartitionNV(bvec4(data[0].i4));

+

+    data[invocation].f4.x   = subgroupPartitionedAddNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedAddNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedAddNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedAddNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedAddNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedAddNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedAddNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedAddNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedAddNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedAddNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedAddNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedAddNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedAddNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedAddNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedAddNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedAddNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedMulNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedMulNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedMulNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedMulNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedMulNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedMulNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedMulNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedMulNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedMulNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedMulNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedMulNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedMulNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedMulNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedMulNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedMulNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedMulNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedMinNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedMinNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedMinNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedMinNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedMinNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedMinNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedMinNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedMinNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedMinNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedMinNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedMinNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedMinNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedMinNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedMinNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedMinNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedMinNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedMaxNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedMaxNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedMaxNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedMaxNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedMaxNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedMaxNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedMaxNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedMaxNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedMaxNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedMaxNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedMaxNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedMaxNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedMaxNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedMaxNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedMaxNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedMaxNV(data[3].d4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedAndNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedAndNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedAndNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedAndNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedAndNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedAndNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedAndNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedAndNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedAndNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedAndNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedOrNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedOrNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedOrNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedOrNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedOrNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedOrNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedOrNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedOrNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedOrNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedOrNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedXorNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedXorNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedXorNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedXorNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedXorNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedXorNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedXorNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedXorNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedXorNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedXorNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].f4.x   = subgroupPartitionedInclusiveAddNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedInclusiveAddNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedInclusiveAddNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedInclusiveAddNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveAddNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveAddNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveAddNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveAddNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveAddNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveAddNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveAddNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveAddNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedInclusiveAddNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedInclusiveAddNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedInclusiveAddNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedInclusiveAddNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedInclusiveMulNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMulNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMulNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedInclusiveMulNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveMulNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMulNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMulNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveMulNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveMulNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMulNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMulNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveMulNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedInclusiveMulNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMulNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMulNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedInclusiveMulNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedInclusiveMinNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMinNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMinNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedInclusiveMinNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveMinNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMinNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMinNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveMinNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveMinNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMinNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMinNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveMinNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedInclusiveMinNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMinNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMinNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedInclusiveMinNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedInclusiveMaxNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedInclusiveMaxNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveMaxNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveMaxNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveMaxNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveMaxNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedInclusiveMaxNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedInclusiveMaxNV(data[3].d4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveAndNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveAndNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveAndNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveAndNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveAndNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveAndNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveAndNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveAndNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveAndNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveOrNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveOrNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveOrNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveOrNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveOrNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveOrNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveOrNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveOrNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveOrNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveXorNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveXorNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveXorNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveXorNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveXorNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveXorNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveXorNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveXorNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveXorNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].f4.x   = subgroupPartitionedExclusiveAddNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedExclusiveAddNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedExclusiveAddNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedExclusiveAddNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveAddNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveAddNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveAddNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveAddNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveAddNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveAddNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveAddNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveAddNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedExclusiveAddNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedExclusiveAddNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedExclusiveAddNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedExclusiveAddNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedExclusiveMulNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMulNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMulNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedExclusiveMulNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveMulNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMulNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMulNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveMulNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveMulNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMulNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMulNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveMulNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedExclusiveMulNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMulNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMulNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedExclusiveMulNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedExclusiveMinNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMinNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMinNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedExclusiveMinNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveMinNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMinNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMinNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveMinNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveMinNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMinNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMinNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveMinNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedExclusiveMinNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMinNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMinNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedExclusiveMinNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedExclusiveMaxNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedExclusiveMaxNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveMaxNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveMaxNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveMaxNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveMaxNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedExclusiveMaxNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedExclusiveMaxNV(data[3].d4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveAndNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveAndNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveAndNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveAndNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveAndNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveAndNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveAndNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveAndNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveAndNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveOrNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveOrNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveOrNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveOrNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveOrNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveOrNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveOrNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveOrNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveOrNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveXorNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveXorNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveXorNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveXorNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveXorNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveXorNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveXorNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveXorNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveXorNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));

+}

diff --git a/Test/glsl.450.subgroupQuad.comp b/Test/glsl.450.subgroupQuad.comp
new file mode 100644
index 0000000..223a7cd
--- /dev/null
+++ b/Test/glsl.450.subgroupQuad.comp
@@ -0,0 +1,118 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_quad: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

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

+

+    data[invocation].f4.x   = subgroupQuadBroadcast(data[0].f4.x, 1);

+    data[invocation].f4.xy  = subgroupQuadBroadcast(data[1].f4.xy, 1);

+    data[invocation].f4.xyz = subgroupQuadBroadcast(data[2].f4.xyz, 1);

+    data[invocation].f4     = subgroupQuadBroadcast(data[3].f4, 1);

+

+    data[invocation].i4.x   = subgroupQuadBroadcast(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupQuadBroadcast(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupQuadBroadcast(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupQuadBroadcast(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupQuadBroadcast(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupQuadBroadcast(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupQuadBroadcast(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupQuadBroadcast(data[3].u4, 1);

+

+    data[invocation].d4.x   = subgroupQuadBroadcast(data[0].d4.x, 1);

+    data[invocation].d4.xy  = subgroupQuadBroadcast(data[1].d4.xy, 1);

+    data[invocation].d4.xyz = subgroupQuadBroadcast(data[2].d4.xyz, 1);

+    data[invocation].d4     = subgroupQuadBroadcast(data[3].d4, 1);

+

+    data[invocation].i4.x   =   int(subgroupQuadBroadcast(data[0].i4.x < 0, 1));

+    data[invocation].i4.xy  = ivec2(subgroupQuadBroadcast(lessThan(data[1].i4.xy, ivec2(0)), 1));

+    data[invocation].i4.xyz = ivec3(subgroupQuadBroadcast(lessThan(data[1].i4.xyz, ivec3(0)), 1));

+    data[invocation].i4     = ivec4(subgroupQuadBroadcast(lessThan(data[1].i4, ivec4(0)), 1));

+

+    data[invocation].f4.x   = subgroupQuadSwapHorizontal(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupQuadSwapHorizontal(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupQuadSwapHorizontal(data[2].f4.xyz);

+    data[invocation].f4     = subgroupQuadSwapHorizontal(data[3].f4);

+

+    data[invocation].i4.x   = subgroupQuadSwapHorizontal(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupQuadSwapHorizontal(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupQuadSwapHorizontal(data[2].i4.xyz);

+    data[invocation].i4     = subgroupQuadSwapHorizontal(data[3].i4);

+

+    data[invocation].u4.x   = subgroupQuadSwapHorizontal(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupQuadSwapHorizontal(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupQuadSwapHorizontal(data[2].u4.xyz);

+    data[invocation].u4     = subgroupQuadSwapHorizontal(data[3].u4);

+

+    data[invocation].d4.x   = subgroupQuadSwapHorizontal(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupQuadSwapHorizontal(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupQuadSwapHorizontal(data[2].d4.xyz);

+    data[invocation].d4     = subgroupQuadSwapHorizontal(data[3].d4);

+

+    data[invocation].i4.x   =   int(subgroupQuadSwapHorizontal(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupQuadSwapHorizontal(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupQuadSwapHorizontal(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupQuadSwapHorizontal(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].f4.x   = subgroupQuadSwapVertical(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupQuadSwapVertical(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupQuadSwapVertical(data[2].f4.xyz);

+    data[invocation].f4     = subgroupQuadSwapVertical(data[3].f4);

+

+    data[invocation].i4.x   = subgroupQuadSwapVertical(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupQuadSwapVertical(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupQuadSwapVertical(data[2].i4.xyz);

+    data[invocation].i4     = subgroupQuadSwapVertical(data[3].i4);

+

+    data[invocation].u4.x   = subgroupQuadSwapVertical(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupQuadSwapVertical(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupQuadSwapVertical(data[2].u4.xyz);

+    data[invocation].u4     = subgroupQuadSwapVertical(data[3].u4);

+

+    data[invocation].d4.x   = subgroupQuadSwapVertical(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupQuadSwapVertical(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupQuadSwapVertical(data[2].d4.xyz);

+    data[invocation].d4     = subgroupQuadSwapVertical(data[3].d4);

+

+    data[invocation].i4.x   =   int(subgroupQuadSwapVertical(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupQuadSwapVertical(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupQuadSwapVertical(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupQuadSwapVertical(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].f4.x   = subgroupQuadSwapDiagonal(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupQuadSwapDiagonal(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupQuadSwapDiagonal(data[2].f4.xyz);

+    data[invocation].f4     = subgroupQuadSwapDiagonal(data[3].f4);

+

+    data[invocation].i4.x   = subgroupQuadSwapDiagonal(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupQuadSwapDiagonal(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupQuadSwapDiagonal(data[2].i4.xyz);

+    data[invocation].i4     = subgroupQuadSwapDiagonal(data[3].i4);

+

+    data[invocation].u4.x   = subgroupQuadSwapDiagonal(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupQuadSwapDiagonal(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupQuadSwapDiagonal(data[2].u4.xyz);

+    data[invocation].u4     = subgroupQuadSwapDiagonal(data[3].u4);

+

+    data[invocation].d4.x   = subgroupQuadSwapDiagonal(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupQuadSwapDiagonal(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupQuadSwapDiagonal(data[2].d4.xyz);

+    data[invocation].d4     = subgroupQuadSwapDiagonal(data[3].d4);

+

+    data[invocation].i4.x   =   int(subgroupQuadSwapDiagonal(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupQuadSwapDiagonal(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupQuadSwapDiagonal(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupQuadSwapDiagonal(lessThan(data[1].i4, ivec4(0))));

+}

diff --git a/Test/glsl.450.subgroupShuffle.comp b/Test/glsl.450.subgroupShuffle.comp
new file mode 100644
index 0000000..6d26488
--- /dev/null
+++ b/Test/glsl.450.subgroupShuffle.comp
@@ -0,0 +1,68 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_shuffle: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

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

+

+    data[invocation].f4.x   = subgroupShuffle(data[0].f4.x,    invocation);

+    data[invocation].f4.xy  = subgroupShuffle(data[1].f4.xy,   invocation);

+    data[invocation].f4.xyz = subgroupShuffle(data[2].f4.xyz,  invocation);

+    data[invocation].f4     = subgroupShuffle(data[3].f4,      invocation);

+

+    data[invocation].i4.x   = subgroupShuffle(data[0].i4.x,    invocation);

+    data[invocation].i4.xy  = subgroupShuffle(data[1].i4.xy,   invocation);

+    data[invocation].i4.xyz = subgroupShuffle(data[2].i4.xyz,  invocation);

+    data[invocation].i4     = subgroupShuffle(data[3].i4,      invocation);

+

+    data[invocation].u4.x   = subgroupShuffle(data[0].u4.x,    invocation);

+    data[invocation].u4.xy  = subgroupShuffle(data[1].u4.xy,   invocation);

+    data[invocation].u4.xyz = subgroupShuffle(data[2].u4.xyz,  invocation);

+    data[invocation].u4     = subgroupShuffle(data[3].u4,      invocation);

+

+    data[invocation].d4.x   = subgroupShuffle(data[0].d4.x,    invocation);

+    data[invocation].d4.xy  = subgroupShuffle(data[1].d4.xy,   invocation);

+    data[invocation].d4.xyz = subgroupShuffle(data[2].d4.xyz,  invocation);

+    data[invocation].d4     = subgroupShuffle(data[3].d4,      invocation);

+

+    data[invocation].i4.x   =   int(subgroupShuffle(data[0].i4.x < 0,                   invocation));

+    data[invocation].i4.xy  = ivec2(subgroupShuffle(lessThan(data[1].i4.xy, ivec2(0)),  invocation));

+    data[invocation].i4.xyz = ivec3(subgroupShuffle(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+    data[invocation].i4     = ivec4(subgroupShuffle(lessThan(data[1].i4, ivec4(0)),     invocation));

+

+    data[invocation].f4.x   = subgroupShuffleXor(data[0].f4.x,    invocation);

+    data[invocation].f4.xy  = subgroupShuffleXor(data[1].f4.xy,   invocation);

+    data[invocation].f4.xyz = subgroupShuffleXor(data[2].f4.xyz,  invocation);

+    data[invocation].f4     = subgroupShuffleXor(data[3].f4,      invocation);

+

+    data[invocation].i4.x   = subgroupShuffleXor(data[0].i4.x,    invocation);

+    data[invocation].i4.xy  = subgroupShuffleXor(data[1].i4.xy,   invocation);

+    data[invocation].i4.xyz = subgroupShuffleXor(data[2].i4.xyz,  invocation);

+    data[invocation].i4     = subgroupShuffleXor(data[3].i4,      invocation);

+

+    data[invocation].u4.x   = subgroupShuffleXor(data[0].u4.x,    invocation);

+    data[invocation].u4.xy  = subgroupShuffleXor(data[1].u4.xy,   invocation);

+    data[invocation].u4.xyz = subgroupShuffleXor(data[2].u4.xyz,  invocation);

+    data[invocation].u4     = subgroupShuffleXor(data[3].u4,      invocation);

+

+    data[invocation].d4.x   = subgroupShuffleXor(data[0].d4.x,    invocation);

+    data[invocation].d4.xy  = subgroupShuffleXor(data[1].d4.xy,   invocation);

+    data[invocation].d4.xyz = subgroupShuffleXor(data[2].d4.xyz,  invocation);

+    data[invocation].d4     = subgroupShuffleXor(data[3].d4,      invocation);

+

+    data[invocation].i4.x   =   int(subgroupShuffleXor(data[0].i4.x < 0,                   invocation));

+    data[invocation].i4.xy  = ivec2(subgroupShuffleXor(lessThan(data[1].i4.xy, ivec2(0)),  invocation));

+    data[invocation].i4.xyz = ivec3(subgroupShuffleXor(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+    data[invocation].i4     = ivec4(subgroupShuffleXor(lessThan(data[1].i4, ivec4(0)),     invocation));

+}

diff --git a/Test/glsl.450.subgroupShuffleRelative.comp b/Test/glsl.450.subgroupShuffleRelative.comp
new file mode 100644
index 0000000..1864de1
--- /dev/null
+++ b/Test/glsl.450.subgroupShuffleRelative.comp
@@ -0,0 +1,68 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_shuffle_relative: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

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

+

+    data[invocation].f4.x   = subgroupShuffleUp(data[0].f4.x,    invocation);

+    data[invocation].f4.xy  = subgroupShuffleUp(data[1].f4.xy,   invocation);

+    data[invocation].f4.xyz = subgroupShuffleUp(data[2].f4.xyz,  invocation);

+    data[invocation].f4     = subgroupShuffleUp(data[3].f4,      invocation);

+

+    data[invocation].i4.x   = subgroupShuffleUp(data[0].i4.x,    invocation);

+    data[invocation].i4.xy  = subgroupShuffleUp(data[1].i4.xy,   invocation);

+    data[invocation].i4.xyz = subgroupShuffleUp(data[2].i4.xyz,  invocation);

+    data[invocation].i4     = subgroupShuffleUp(data[3].i4,      invocation);

+

+    data[invocation].u4.x   = subgroupShuffleUp(data[0].u4.x,    invocation);

+    data[invocation].u4.xy  = subgroupShuffleUp(data[1].u4.xy,   invocation);

+    data[invocation].u4.xyz = subgroupShuffleUp(data[2].u4.xyz,  invocation);

+    data[invocation].u4     = subgroupShuffleUp(data[3].u4,      invocation);

+

+    data[invocation].d4.x   = subgroupShuffleUp(data[0].d4.x,    invocation);

+    data[invocation].d4.xy  = subgroupShuffleUp(data[1].d4.xy,   invocation);

+    data[invocation].d4.xyz = subgroupShuffleUp(data[2].d4.xyz,  invocation);

+    data[invocation].d4     = subgroupShuffleUp(data[3].d4,      invocation);

+

+    data[invocation].i4.x   =   int(subgroupShuffleUp(data[0].i4.x < 0,                   invocation));

+    data[invocation].i4.xy  = ivec2(subgroupShuffleUp(lessThan(data[1].i4.xy, ivec2(0)),  invocation));

+    data[invocation].i4.xyz = ivec3(subgroupShuffleUp(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+    data[invocation].i4     = ivec4(subgroupShuffleUp(lessThan(data[1].i4, ivec4(0)),     invocation));

+

+    data[invocation].f4.x   = subgroupShuffleDown(data[0].f4.x,    invocation);

+    data[invocation].f4.xy  = subgroupShuffleDown(data[1].f4.xy,   invocation);

+    data[invocation].f4.xyz = subgroupShuffleDown(data[2].f4.xyz,  invocation);

+    data[invocation].f4     = subgroupShuffleDown(data[3].f4,      invocation);

+

+    data[invocation].i4.x   = subgroupShuffleDown(data[0].i4.x,    invocation);

+    data[invocation].i4.xy  = subgroupShuffleDown(data[1].i4.xy,   invocation);

+    data[invocation].i4.xyz = subgroupShuffleDown(data[2].i4.xyz,  invocation);

+    data[invocation].i4     = subgroupShuffleDown(data[3].i4,      invocation);

+

+    data[invocation].u4.x   = subgroupShuffleDown(data[0].u4.x,    invocation);

+    data[invocation].u4.xy  = subgroupShuffleDown(data[1].u4.xy,   invocation);

+    data[invocation].u4.xyz = subgroupShuffleDown(data[2].u4.xyz,  invocation);

+    data[invocation].u4     = subgroupShuffleDown(data[3].u4,      invocation);

+

+    data[invocation].d4.x   = subgroupShuffleDown(data[0].d4.x,    invocation);

+    data[invocation].d4.xy  = subgroupShuffleDown(data[1].d4.xy,   invocation);

+    data[invocation].d4.xyz = subgroupShuffleDown(data[2].d4.xyz,  invocation);

+    data[invocation].d4     = subgroupShuffleDown(data[3].d4,      invocation);

+

+    data[invocation].i4.x   =   int(subgroupShuffleDown(data[0].i4.x < 0,                   invocation));

+    data[invocation].i4.xy  = ivec2(subgroupShuffleDown(lessThan(data[1].i4.xy, ivec2(0)),  invocation));

+    data[invocation].i4.xyz = ivec3(subgroupShuffleDown(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+    data[invocation].i4     = ivec4(subgroupShuffleDown(lessThan(data[1].i4, ivec4(0)),     invocation));

+}

diff --git a/Test/glsl.450.subgroupVote.comp b/Test/glsl.450.subgroupVote.comp
new file mode 100644
index 0000000..c1c877a
--- /dev/null
+++ b/Test/glsl.450.subgroupVote.comp
@@ -0,0 +1,49 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_vote: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+    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].f4.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].f4.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].f4.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].f4));

+

+        data[invocation].r = int(subgroupAllEqual(data[0].i4.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].i4.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].i4.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].i4));

+

+        data[invocation].r = int(subgroupAllEqual(data[0].u4.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].u4.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].u4.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].u4));

+    }

+    else if (subgroupAny(data[invocation].r < 0))

+    {

+        data[invocation].r = int(subgroupAllEqual(data[0].d4.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].d4.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].d4.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].d4));

+

+        data[invocation].r = int(int(subgroupAllEqual(data[0].i4.x < 0)));

+        data[invocation].r = int(ivec2(subgroupAllEqual(lessThan(data[1].i4.xy, ivec2(0)))));

+        data[invocation].r = int(ivec3(subgroupAllEqual(lessThan(data[1].i4.xyz, ivec3(0)))));

+        data[invocation].r = int(ivec4(subgroupAllEqual(lessThan(data[1].i4, ivec4(0)))));

+    }

+}

diff --git a/Test/glsl.460.subgroup.mesh b/Test/glsl.460.subgroup.mesh
new file mode 100644
index 0000000..1071cac
--- /dev/null
+++ b/Test/glsl.460.subgroup.mesh
@@ -0,0 +1,314 @@
+#version 460
+
+vec4 undeclared_errors(vec4 f4)
+{
+  vec4 result;
+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)
+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)
+  subgroupBarrier();             // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)
+  subgroupElect();               // ERROR, extension not enabled (basic)
+  gl_NumSubgroups;               // ERROR, extension not enabled (basic)
+  gl_SubgroupID;                 // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierShared(); // ERROR, extension not enabled (basic)
+
+  subgroupAll(true);        // ERROR extension not enabled (vote)
+  subgroupAny(false);       // ERROR extension not enabled (vote)
+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)
+
+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)
+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)
+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)
+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)
+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)
+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)
+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)
+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)
+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)
+
+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)
+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)
+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)
+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)
+
+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)
+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)
+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)
+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)
+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+
+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)
+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)
+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)
+
+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)
+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)
+
+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+
+  return result;
+}
+
+#define MAX_VER  81
+#define MAX_PRIM 32
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_NV_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(triangles) out;
+
+// test use of builtins in mesh shaders:
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+
+    gl_MeshVerticesNV[iid].gl_Position = vec4(1.0);
+    gl_MeshVerticesNV[iid].gl_PointSize = 2.0;
+    gl_MeshVerticesNV[iid].gl_ClipDistance[3] = 3.0;
+    gl_MeshVerticesNV[iid].gl_CullDistance[2] = 4.0;
+
+    BARRIER();
+
+    gl_MeshVerticesNV[iid+1].gl_Position = gl_MeshVerticesNV[iid].gl_Position;
+    gl_MeshVerticesNV[iid+1].gl_PointSize = gl_MeshVerticesNV[iid].gl_PointSize;
+    gl_MeshVerticesNV[iid+1].gl_ClipDistance[3] = gl_MeshVerticesNV[iid].gl_ClipDistance[3];
+    gl_MeshVerticesNV[iid+1].gl_CullDistance[2] = gl_MeshVerticesNV[iid].gl_CullDistance[2];
+
+    BARRIER();
+
+    gl_MeshPrimitivesNV[iid].gl_PrimitiveID = 6;
+    gl_MeshPrimitivesNV[iid].gl_Layer = 7;
+    gl_MeshPrimitivesNV[iid].gl_ViewportIndex = 8;
+    gl_MeshPrimitivesNV[iid].gl_ViewportMask[0] = 9;
+
+    BARRIER();
+
+    gl_MeshPrimitivesNV[iid+1].gl_PrimitiveID = gl_MeshPrimitivesNV[iid].gl_PrimitiveID;
+    gl_MeshPrimitivesNV[iid+1].gl_Layer = gl_MeshPrimitivesNV[iid].gl_Layer;
+    gl_MeshPrimitivesNV[iid+1].gl_ViewportIndex = gl_MeshPrimitivesNV[iid].gl_ViewportIndex;
+    gl_MeshPrimitivesNV[iid+1].gl_ViewportMask[0] = gl_MeshPrimitivesNV[iid].gl_ViewportMask[0];
+
+    BARRIER();
+
+    // check bound limits
+    gl_PrimitiveIndicesNV[0] = 257; // should truncate 257 -> 1
+    gl_PrimitiveIndicesNV[(MAX_PRIM * 3) - 1] = 2;
+    gl_PrimitiveIndicesNV[gid] = gl_PrimitiveIndicesNV[gid-1];
+
+    // writes 4 indices at offset gl_DrawID
+    writePackedPrimitiveIndices4x8NV(gl_DrawID, 0x01020304);
+
+    gl_PrimitiveCountNV = MAX_PRIM * 3;
+
+    BARRIER();
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+  gl_NumSubgroups;                  // allowed in mesh
+  gl_SubgroupID;                    // allowed in mesh
+  subgroupMemoryBarrierShared();    // allowed in mesh
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+  uvec4 parti = subgroupPartitionNV(f4);
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupPartitionedAddNV(f4, parti);
+  subgroupPartitionedMulNV(f4, parti);
+  subgroupPartitionedMinNV(f4, parti);
+  subgroupPartitionedMaxNV(f4, parti);
+  subgroupPartitionedAndNV(ballot, parti);
+  subgroupPartitionedOrNV(ballot, parti);
+  subgroupPartitionedXorNV(ballot, parti);
+  subgroupPartitionedInclusiveAddNV(f4, parti);
+  subgroupPartitionedInclusiveMulNV(f4, parti);
+  subgroupPartitionedInclusiveMinNV(f4, parti);
+  subgroupPartitionedInclusiveMaxNV(f4, parti);
+  subgroupPartitionedInclusiveAndNV(ballot, parti);
+  subgroupPartitionedInclusiveOrNV(ballot, parti);
+  subgroupPartitionedInclusiveXorNV(ballot, parti);
+  subgroupPartitionedExclusiveAddNV(f4, parti);
+  subgroupPartitionedExclusiveMulNV(f4, parti);
+  subgroupPartitionedExclusiveMinNV(f4, parti);
+  subgroupPartitionedExclusiveMaxNV(f4, parti);
+  subgroupPartitionedExclusiveAndNV(ballot, parti);
+  subgroupPartitionedExclusiveOrNV(ballot, parti);
+  subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+    gl_WarpsPerSMNV;    // ERROR, no extension
+    gl_SMCountNV;       // ERROR, no extension
+    gl_WarpIDNV;        // ERROR, no extension
+    gl_SMIDNV;          // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+    gl_WarpsPerSMNV;
+    gl_SMCountNV;
+    gl_WarpIDNV;
+    gl_SMIDNV;
+}
diff --git a/Test/glsl.460.subgroup.rahit b/Test/glsl.460.subgroup.rahit
new file mode 100644
index 0000000..a1bce28
--- /dev/null
+++ b/Test/glsl.460.subgroup.rahit
@@ -0,0 +1,275 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+vec4 undeclared_errors(vec4 f4)
+{
+  vec4 result;
+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)
+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)
+  subgroupBarrier();             // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)
+  subgroupElect();               // ERROR, extension not enabled (basic)
+  gl_NumSubgroups;               // ERROR, only defined in compute
+  gl_SubgroupID;                 // ERROR, only defined in compute
+  subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+  subgroupAll(true);        // ERROR extension not enabled (vote)
+  subgroupAny(false);       // ERROR extension not enabled (vote)
+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)
+
+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)
+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)
+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)
+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)
+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)
+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)
+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)
+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)
+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)
+
+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)
+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)
+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)
+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)
+
+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)
+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)
+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)
+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)
+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+
+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)
+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)
+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)
+
+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)
+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)
+
+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+
+  return result;
+}
+
+
+layout(location = 1) rayPayloadInNV vec4 incomingPayload;
+void main()
+{
+	uvec3 v0 = gl_LaunchIDNV;
+	uvec3 v1 = gl_LaunchSizeNV;
+	int v2 = gl_PrimitiveID;
+	int v3 = gl_InstanceID;
+	int v4 = gl_InstanceCustomIndexNV;
+	vec3 v5 = gl_WorldRayOriginNV;
+	vec3 v6 = gl_WorldRayDirectionNV;
+	vec3 v7 = gl_ObjectRayOriginNV;
+	vec3 v8 = gl_ObjectRayDirectionNV;
+	float v9 = gl_RayTminNV;
+	float v10 = gl_RayTmaxNV;
+	float v11 = gl_HitTNV;
+	uint v12 = gl_HitKindNV;
+	mat4x3 v13 = gl_ObjectToWorldNV;
+	mat4x3 v14 = gl_WorldToObjectNV;
+	incomingPayload = vec4(0.5f);
+	if (v2 == 1)
+	    ignoreIntersectionNV();
+	else
+	    terminateRayNV();
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+  uvec4 parti = subgroupPartitionNV(f4);
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupPartitionedAddNV(f4, parti);
+  subgroupPartitionedMulNV(f4, parti);
+  subgroupPartitionedMinNV(f4, parti);
+  subgroupPartitionedMaxNV(f4, parti);
+  subgroupPartitionedAndNV(ballot, parti);
+  subgroupPartitionedOrNV(ballot, parti);
+  subgroupPartitionedXorNV(ballot, parti);
+  subgroupPartitionedInclusiveAddNV(f4, parti);
+  subgroupPartitionedInclusiveMulNV(f4, parti);
+  subgroupPartitionedInclusiveMinNV(f4, parti);
+  subgroupPartitionedInclusiveMaxNV(f4, parti);
+  subgroupPartitionedInclusiveAndNV(ballot, parti);
+  subgroupPartitionedInclusiveOrNV(ballot, parti);
+  subgroupPartitionedInclusiveXorNV(ballot, parti);
+  subgroupPartitionedExclusiveAddNV(f4, parti);
+  subgroupPartitionedExclusiveMulNV(f4, parti);
+  subgroupPartitionedExclusiveMinNV(f4, parti);
+  subgroupPartitionedExclusiveMaxNV(f4, parti);
+  subgroupPartitionedExclusiveAndNV(ballot, parti);
+  subgroupPartitionedExclusiveOrNV(ballot, parti);
+  subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+    gl_WarpsPerSMNV;    // ERROR, no extension
+    gl_SMCountNV;       // ERROR, no extension
+    gl_WarpIDNV;        // ERROR, no extension
+    gl_SMIDNV;          // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+    gl_WarpsPerSMNV;
+    gl_SMCountNV;
+    gl_WarpIDNV;
+    gl_SMIDNV;
+}
diff --git a/Test/glsl.460.subgroup.rcall b/Test/glsl.460.subgroup.rcall
new file mode 100644
index 0000000..9c2ede8
--- /dev/null
+++ b/Test/glsl.460.subgroup.rcall
@@ -0,0 +1,263 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+vec4 undeclared_errors(vec4 f4)
+{
+  vec4 result;
+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)
+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)
+  subgroupBarrier();             // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)
+  subgroupElect();               // ERROR, extension not enabled (basic)
+  gl_NumSubgroups;               // ERROR, only defined in compute
+  gl_SubgroupID;                 // ERROR, only defined in compute
+  subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+  subgroupAll(true);        // ERROR extension not enabled (vote)
+  subgroupAny(false);       // ERROR extension not enabled (vote)
+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)
+
+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)
+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)
+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)
+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)
+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)
+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)
+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)
+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)
+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)
+
+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)
+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)
+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)
+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)
+
+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)
+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)
+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)
+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)
+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+
+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)
+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)
+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)
+
+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)
+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)
+
+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+
+  return result;
+}
+
+
+layout(location = 0) callableDataNV vec4 data0;
+layout(location = 1) callableDataInNV dataBlock {
+	uint data1;
+};
+void main()
+{
+	uvec3 id = gl_LaunchIDNV;
+	uvec3 size = gl_LaunchSizeNV;
+	data1 = 256U;
+	executeCallableNV(2,1);
+}
+
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+  uvec4 parti = subgroupPartitionNV(f4);
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupPartitionedAddNV(f4, parti);
+  subgroupPartitionedMulNV(f4, parti);
+  subgroupPartitionedMinNV(f4, parti);
+  subgroupPartitionedMaxNV(f4, parti);
+  subgroupPartitionedAndNV(ballot, parti);
+  subgroupPartitionedOrNV(ballot, parti);
+  subgroupPartitionedXorNV(ballot, parti);
+  subgroupPartitionedInclusiveAddNV(f4, parti);
+  subgroupPartitionedInclusiveMulNV(f4, parti);
+  subgroupPartitionedInclusiveMinNV(f4, parti);
+  subgroupPartitionedInclusiveMaxNV(f4, parti);
+  subgroupPartitionedInclusiveAndNV(ballot, parti);
+  subgroupPartitionedInclusiveOrNV(ballot, parti);
+  subgroupPartitionedInclusiveXorNV(ballot, parti);
+  subgroupPartitionedExclusiveAddNV(f4, parti);
+  subgroupPartitionedExclusiveMulNV(f4, parti);
+  subgroupPartitionedExclusiveMinNV(f4, parti);
+  subgroupPartitionedExclusiveMaxNV(f4, parti);
+  subgroupPartitionedExclusiveAndNV(ballot, parti);
+  subgroupPartitionedExclusiveOrNV(ballot, parti);
+  subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+    gl_WarpsPerSMNV;    // ERROR, no extension
+    gl_SMCountNV;       // ERROR, no extension
+    gl_WarpIDNV;        // ERROR, no extension
+    gl_SMIDNV;          // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+    gl_WarpsPerSMNV;
+    gl_SMCountNV;
+    gl_WarpIDNV;
+    gl_SMIDNV;
+}
diff --git a/Test/glsl.460.subgroup.rchit b/Test/glsl.460.subgroup.rchit
new file mode 100644
index 0000000..aae5b54
--- /dev/null
+++ b/Test/glsl.460.subgroup.rchit
@@ -0,0 +1,273 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+vec4 undeclared_errors(vec4 f4)
+{
+  vec4 result;
+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)
+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)
+  subgroupBarrier();             // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)
+  subgroupElect();               // ERROR, extension not enabled (basic)
+  gl_NumSubgroups;               // ERROR, only defined in compute
+  gl_SubgroupID;                 // ERROR, only defined in compute
+  subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+  subgroupAll(true);        // ERROR extension not enabled (vote)
+  subgroupAny(false);       // ERROR extension not enabled (vote)
+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)
+
+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)
+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)
+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)
+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)
+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)
+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)
+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)
+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)
+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)
+
+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)
+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)
+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)
+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)
+
+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)
+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)
+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)
+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)
+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+
+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)
+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)
+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)
+
+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)
+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)
+
+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+
+  return result;
+}
+
+
+layout(binding = 0, set = 0) uniform accelerationStructureNV accNV;
+layout(location = 0) rayPayloadNV vec4 localPayload;
+layout(location = 1) rayPayloadInNV vec4 incomingPayload;
+void main()
+{
+	uvec3 v0 = gl_LaunchIDNV;
+	uvec3 v1 = gl_LaunchSizeNV;
+	int v2 = gl_PrimitiveID;
+	int v3 = gl_InstanceID;
+	int v4 = gl_InstanceCustomIndexNV;
+	vec3 v5 = gl_WorldRayOriginNV;
+	vec3 v6 = gl_WorldRayDirectionNV;
+	vec3 v7 = gl_ObjectRayOriginNV;
+	vec3 v8 = gl_ObjectRayDirectionNV;
+	float v9 = gl_RayTminNV;
+	float v10 = gl_RayTmaxNV;
+	float v11 = gl_HitTNV;
+	uint v12 = gl_HitKindNV;
+	mat4x3 v13 = gl_ObjectToWorldNV;
+	mat4x3 v14 = gl_WorldToObjectNV;
+	traceNV(accNV, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+  uvec4 parti = subgroupPartitionNV(f4);
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupPartitionedAddNV(f4, parti);
+  subgroupPartitionedMulNV(f4, parti);
+  subgroupPartitionedMinNV(f4, parti);
+  subgroupPartitionedMaxNV(f4, parti);
+  subgroupPartitionedAndNV(ballot, parti);
+  subgroupPartitionedOrNV(ballot, parti);
+  subgroupPartitionedXorNV(ballot, parti);
+  subgroupPartitionedInclusiveAddNV(f4, parti);
+  subgroupPartitionedInclusiveMulNV(f4, parti);
+  subgroupPartitionedInclusiveMinNV(f4, parti);
+  subgroupPartitionedInclusiveMaxNV(f4, parti);
+  subgroupPartitionedInclusiveAndNV(ballot, parti);
+  subgroupPartitionedInclusiveOrNV(ballot, parti);
+  subgroupPartitionedInclusiveXorNV(ballot, parti);
+  subgroupPartitionedExclusiveAddNV(f4, parti);
+  subgroupPartitionedExclusiveMulNV(f4, parti);
+  subgroupPartitionedExclusiveMinNV(f4, parti);
+  subgroupPartitionedExclusiveMaxNV(f4, parti);
+  subgroupPartitionedExclusiveAndNV(ballot, parti);
+  subgroupPartitionedExclusiveOrNV(ballot, parti);
+  subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+    gl_WarpsPerSMNV;    // ERROR, no extension
+    gl_SMCountNV;       // ERROR, no extension
+    gl_WarpIDNV;        // ERROR, no extension
+    gl_SMIDNV;          // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+    gl_WarpsPerSMNV;
+    gl_SMCountNV;
+    gl_WarpIDNV;
+    gl_SMIDNV;
+}
diff --git a/Test/glsl.460.subgroup.rgen b/Test/glsl.460.subgroup.rgen
new file mode 100644
index 0000000..a3c78c9
--- /dev/null
+++ b/Test/glsl.460.subgroup.rgen
@@ -0,0 +1,267 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+vec4 undeclared_errors(vec4 f4)
+{
+  vec4 result;
+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)
+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)
+  subgroupBarrier();             // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)
+  subgroupElect();               // ERROR, extension not enabled (basic)
+  gl_NumSubgroups;               // ERROR, only defined in compute
+  gl_SubgroupID;                 // ERROR, only defined in compute
+  subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+  subgroupAll(true);        // ERROR extension not enabled (vote)
+  subgroupAny(false);       // ERROR extension not enabled (vote)
+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)
+
+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)
+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)
+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)
+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)
+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)
+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)
+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)
+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)
+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)
+
+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)
+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)
+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)
+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)
+
+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)
+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)
+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)
+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)
+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+
+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)
+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)
+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)
+
+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)
+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)
+
+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+
+  return result;
+}
+
+layout(binding = 0, set = 0) uniform accelerationStructureNV accNV0;
+layout(binding = 1, set = 0) uniform accelerationStructureNV accNV1; // Unused
+layout(location = 0) rayPayloadNV vec4 payload;
+layout(shaderRecordNV) buffer block
+{
+	vec3 dir;
+	vec3 origin;
+
+};
+void main()
+{
+    uint lx = gl_LaunchIDNV.x;
+    uint ly = gl_LaunchIDNV.y;
+    uint sx = gl_LaunchSizeNV.x;
+    uint sy = gl_LaunchSizeNV.y;
+    traceNV(accNV0, lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+  uvec4 parti = subgroupPartitionNV(f4);
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupPartitionedAddNV(f4, parti);
+  subgroupPartitionedMulNV(f4, parti);
+  subgroupPartitionedMinNV(f4, parti);
+  subgroupPartitionedMaxNV(f4, parti);
+  subgroupPartitionedAndNV(ballot, parti);
+  subgroupPartitionedOrNV(ballot, parti);
+  subgroupPartitionedXorNV(ballot, parti);
+  subgroupPartitionedInclusiveAddNV(f4, parti);
+  subgroupPartitionedInclusiveMulNV(f4, parti);
+  subgroupPartitionedInclusiveMinNV(f4, parti);
+  subgroupPartitionedInclusiveMaxNV(f4, parti);
+  subgroupPartitionedInclusiveAndNV(ballot, parti);
+  subgroupPartitionedInclusiveOrNV(ballot, parti);
+  subgroupPartitionedInclusiveXorNV(ballot, parti);
+  subgroupPartitionedExclusiveAddNV(f4, parti);
+  subgroupPartitionedExclusiveMulNV(f4, parti);
+  subgroupPartitionedExclusiveMinNV(f4, parti);
+  subgroupPartitionedExclusiveMaxNV(f4, parti);
+  subgroupPartitionedExclusiveAndNV(ballot, parti);
+  subgroupPartitionedExclusiveOrNV(ballot, parti);
+  subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+    gl_WarpsPerSMNV;    // ERROR, no extension
+    gl_SMCountNV;       // ERROR, no extension
+    gl_WarpIDNV;        // ERROR, no extension
+    gl_SMIDNV;          // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+    gl_WarpsPerSMNV;
+    gl_SMCountNV;
+    gl_WarpIDNV;
+    gl_SMIDNV;
+}
diff --git a/Test/glsl.460.subgroup.rint b/Test/glsl.460.subgroup.rint
new file mode 100644
index 0000000..1909c5a
--- /dev/null
+++ b/Test/glsl.460.subgroup.rint
@@ -0,0 +1,273 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+
+vec4 undeclared_errors(vec4 f4)
+{
+  vec4 result;
+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)
+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)
+  subgroupBarrier();             // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)
+  subgroupElect();               // ERROR, extension not enabled (basic)
+  gl_NumSubgroups;               // ERROR, only defined in compute
+  gl_SubgroupID;                 // ERROR, only defined in compute
+  subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+  subgroupAll(true);        // ERROR extension not enabled (vote)
+  subgroupAny(false);       // ERROR extension not enabled (vote)
+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)
+
+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)
+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)
+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)
+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)
+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)
+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)
+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)
+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)
+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)
+
+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)
+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)
+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)
+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)
+
+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)
+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)
+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)
+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)
+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+
+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)
+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)
+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)
+
+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)
+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)
+
+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+
+  return result;
+}
+
+
+
+hitAttributeNV vec4 iAttr;
+void main()
+{
+	uvec3 v0 = gl_LaunchIDNV;
+	uvec3 v1 = gl_LaunchSizeNV;
+	int v2 = gl_PrimitiveID;
+	int v3 = gl_InstanceID;
+	int v4 = gl_InstanceCustomIndexNV;
+	vec3 v5 = gl_WorldRayOriginNV;
+	vec3 v6 = gl_WorldRayDirectionNV;
+	vec3 v7 = gl_ObjectRayOriginNV;
+	vec3 v8 = gl_ObjectRayDirectionNV;
+	float v9 = gl_RayTminNV;
+	float v10 = gl_RayTmaxNV;
+	mat4x3 v11 = gl_ObjectToWorldNV;
+	mat4x3 v12 = gl_WorldToObjectNV;
+	iAttr = vec4(0.5f,0.5f,0.0f,1.0f);
+	reportIntersectionNV(0.5, 1U);
+}
+
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+  uvec4 parti = subgroupPartitionNV(f4);
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupPartitionedAddNV(f4, parti);
+  subgroupPartitionedMulNV(f4, parti);
+  subgroupPartitionedMinNV(f4, parti);
+  subgroupPartitionedMaxNV(f4, parti);
+  subgroupPartitionedAndNV(ballot, parti);
+  subgroupPartitionedOrNV(ballot, parti);
+  subgroupPartitionedXorNV(ballot, parti);
+  subgroupPartitionedInclusiveAddNV(f4, parti);
+  subgroupPartitionedInclusiveMulNV(f4, parti);
+  subgroupPartitionedInclusiveMinNV(f4, parti);
+  subgroupPartitionedInclusiveMaxNV(f4, parti);
+  subgroupPartitionedInclusiveAndNV(ballot, parti);
+  subgroupPartitionedInclusiveOrNV(ballot, parti);
+  subgroupPartitionedInclusiveXorNV(ballot, parti);
+  subgroupPartitionedExclusiveAddNV(f4, parti);
+  subgroupPartitionedExclusiveMulNV(f4, parti);
+  subgroupPartitionedExclusiveMinNV(f4, parti);
+  subgroupPartitionedExclusiveMaxNV(f4, parti);
+  subgroupPartitionedExclusiveAndNV(ballot, parti);
+  subgroupPartitionedExclusiveOrNV(ballot, parti);
+  subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+    gl_WarpsPerSMNV;    // ERROR, no extension
+    gl_SMCountNV;       // ERROR, no extension
+    gl_WarpIDNV;        // ERROR, no extension
+    gl_SMIDNV;          // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+    gl_WarpsPerSMNV;
+    gl_SMCountNV;
+    gl_WarpIDNV;
+    gl_SMIDNV;
+}
diff --git a/Test/glsl.460.subgroup.rmiss b/Test/glsl.460.subgroup.rmiss
new file mode 100644
index 0000000..96c4411
--- /dev/null
+++ b/Test/glsl.460.subgroup.rmiss
@@ -0,0 +1,267 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+
+vec4 undeclared_errors(vec4 f4)
+{
+  vec4 result;
+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)
+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)
+  subgroupBarrier();             // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)
+  subgroupElect();               // ERROR, extension not enabled (basic)
+  gl_NumSubgroups;               // ERROR, only defined in compute
+  gl_SubgroupID;                 // ERROR, only defined in compute
+  subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+  subgroupAll(true);        // ERROR extension not enabled (vote)
+  subgroupAny(false);       // ERROR extension not enabled (vote)
+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)
+
+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)
+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)
+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)
+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)
+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)
+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)
+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)
+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)
+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)
+
+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)
+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)
+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)
+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)
+
+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)
+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)
+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)
+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)
+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+
+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)
+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)
+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)
+
+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)
+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)
+
+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+
+  return result;
+}
+
+
+layout(binding = 0, set = 0) uniform accelerationStructureNV accNV;
+layout(location = 0) rayPayloadNV vec4 localPayload;
+layout(location = 1) rayPayloadInNV vec4 incomingPayload;
+void main()
+{
+	uvec3 v0 = gl_LaunchIDNV;
+	uvec3 v1 = gl_LaunchSizeNV;
+	vec3 v2 = gl_WorldRayOriginNV;
+	vec3 v3 = gl_WorldRayDirectionNV;
+	vec3 v4 = gl_ObjectRayOriginNV;
+	vec3 v5 = gl_ObjectRayDirectionNV;
+	float v6 = gl_RayTminNV;
+	float v7 = gl_RayTmaxNV;
+	traceNV(accNV, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+  uvec4 parti = subgroupPartitionNV(f4);
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupPartitionedAddNV(f4, parti);
+  subgroupPartitionedMulNV(f4, parti);
+  subgroupPartitionedMinNV(f4, parti);
+  subgroupPartitionedMaxNV(f4, parti);
+  subgroupPartitionedAndNV(ballot, parti);
+  subgroupPartitionedOrNV(ballot, parti);
+  subgroupPartitionedXorNV(ballot, parti);
+  subgroupPartitionedInclusiveAddNV(f4, parti);
+  subgroupPartitionedInclusiveMulNV(f4, parti);
+  subgroupPartitionedInclusiveMinNV(f4, parti);
+  subgroupPartitionedInclusiveMaxNV(f4, parti);
+  subgroupPartitionedInclusiveAndNV(ballot, parti);
+  subgroupPartitionedInclusiveOrNV(ballot, parti);
+  subgroupPartitionedInclusiveXorNV(ballot, parti);
+  subgroupPartitionedExclusiveAddNV(f4, parti);
+  subgroupPartitionedExclusiveMulNV(f4, parti);
+  subgroupPartitionedExclusiveMinNV(f4, parti);
+  subgroupPartitionedExclusiveMaxNV(f4, parti);
+  subgroupPartitionedExclusiveAndNV(ballot, parti);
+  subgroupPartitionedExclusiveOrNV(ballot, parti);
+  subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+    gl_WarpsPerSMNV;    // ERROR, no extension
+    gl_SMCountNV;       // ERROR, no extension
+    gl_WarpIDNV;        // ERROR, no extension
+    gl_SMIDNV;          // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+    gl_WarpsPerSMNV;
+    gl_SMCountNV;
+    gl_WarpIDNV;
+    gl_SMIDNV;
+}
diff --git a/Test/glsl.460.subgroup.task b/Test/glsl.460.subgroup.task
new file mode 100644
index 0000000..9b147f8
--- /dev/null
+++ b/Test/glsl.460.subgroup.task
@@ -0,0 +1,304 @@
+#version 460
+
+vec4 undeclared_errors(vec4 f4)
+{
+  vec4 result;
+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)
+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)
+  subgroupBarrier();             // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)
+  subgroupElect();               // ERROR, extension not enabled (basic)
+  gl_NumSubgroups;               // ERROR, extension not enabled (basic)
+  gl_SubgroupID;                 // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierShared(); // ERROR, extension not enabled (basic)
+
+  subgroupAll(true);        // ERROR extension not enabled (vote)
+  subgroupAny(false);       // ERROR extension not enabled (vote)
+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)
+
+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)
+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)
+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)
+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)
+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)
+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)
+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)
+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)
+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)
+
+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)
+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)
+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)
+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)
+
+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)
+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)
+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)
+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)
+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+
+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)
+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)
+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)
+
+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)
+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)
+
+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+
+  return result;
+}
+
+#define MAX_VIEWS gl_MaxMeshViewCountNV
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_NV_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+// test use of shared memory in task shaders:
+layout(binding=0) writeonly uniform image2D uni_image;
+uniform block0 {
+    uint uni_value;
+};
+shared vec4 mem[10];
+
+// test use of task memory in task shaders:
+taskNV out Task {
+    vec2 dummy;
+    vec2 submesh[3];
+    uint viewID;
+} mytask;
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+    uint viewID = gl_MeshViewIndicesNV[gl_MeshViewCountNV%MAX_VIEWS];
+
+    // 1. shared memory load and stores
+    for (uint i = 0; i < 10; ++i) {
+        mem[i] = vec4(i + uni_value);
+    }
+    imageStore(uni_image, ivec2(iid), mem[gid]);
+    imageStore(uni_image, ivec2(iid), mem[gid+1]);
+
+    BARRIER();
+
+    // 2. task memory stores
+
+    mytask.dummy      = vec2(30.0, 31.0);
+    mytask.submesh[0] = vec2(32.0, 33.0);
+    mytask.submesh[1] = vec2(34.0, 35.0);
+    mytask.submesh[2] = mytask.submesh[gid%2];
+    mytask.viewID     = viewID;
+
+    BARRIER();
+
+    // 3. set task count
+    gl_TaskCountNV = 3;
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+  gl_NumSubgroups;                  // allowed in task
+  gl_SubgroupID;                    // allowed in task
+  subgroupMemoryBarrierShared();    // allowed in task
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+  uvec4 parti = subgroupPartitionNV(f4);
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupPartitionedAddNV(f4, parti);
+  subgroupPartitionedMulNV(f4, parti);
+  subgroupPartitionedMinNV(f4, parti);
+  subgroupPartitionedMaxNV(f4, parti);
+  subgroupPartitionedAndNV(ballot, parti);
+  subgroupPartitionedOrNV(ballot, parti);
+  subgroupPartitionedXorNV(ballot, parti);
+  subgroupPartitionedInclusiveAddNV(f4, parti);
+  subgroupPartitionedInclusiveMulNV(f4, parti);
+  subgroupPartitionedInclusiveMinNV(f4, parti);
+  subgroupPartitionedInclusiveMaxNV(f4, parti);
+  subgroupPartitionedInclusiveAndNV(ballot, parti);
+  subgroupPartitionedInclusiveOrNV(ballot, parti);
+  subgroupPartitionedInclusiveXorNV(ballot, parti);
+  subgroupPartitionedExclusiveAddNV(f4, parti);
+  subgroupPartitionedExclusiveMulNV(f4, parti);
+  subgroupPartitionedExclusiveMinNV(f4, parti);
+  subgroupPartitionedExclusiveMaxNV(f4, parti);
+  subgroupPartitionedExclusiveAndNV(ballot, parti);
+  subgroupPartitionedExclusiveOrNV(ballot, parti);
+  subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
+// tests for NV_shader_sm_builtins
+void sm_builtins_err()
+{
+    gl_WarpsPerSMNV;    // ERROR, no extension
+    gl_SMCountNV;       // ERROR, no extension
+    gl_WarpIDNV;        // ERROR, no extension
+    gl_SMIDNV;          // ERROR, no extension
+}
+
+#ifdef GL_NV_shader_sm_builtins
+#extension GL_NV_shader_sm_builtins : enable
+#endif
+
+void sm_builtins()
+{
+    gl_WarpsPerSMNV;
+    gl_SMCountNV;
+    gl_WarpIDNV;
+    gl_SMIDNV;
+}
diff --git a/Test/glsl.es320.subgroup.frag b/Test/glsl.es320.subgroup.frag
new file mode 100644
index 0000000..baf59fb
--- /dev/null
+++ b/Test/glsl.es320.subgroup.frag
@@ -0,0 +1,7 @@
+#version 320 es

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(location = 0) out uvec4 data;

+void main (void)

+{

+  data = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+}

diff --git a/Test/glsl.es320.subgroup.geom b/Test/glsl.es320.subgroup.geom
new file mode 100644
index 0000000..d071510
--- /dev/null
+++ b/Test/glsl.es320.subgroup.geom
@@ -0,0 +1,13 @@
+#version 320 es

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(points) in;

+layout(points, max_vertices = 1) out;

+layout(set = 0, binding = 0, std430) buffer Output

+{

+  uvec4 result[];

+};

+

+void main (void)

+{

+  result[gl_PrimitiveIDIn] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+}

diff --git a/Test/glsl.es320.subgroup.tesc b/Test/glsl.es320.subgroup.tesc
new file mode 100644
index 0000000..c356d7f
--- /dev/null
+++ b/Test/glsl.es320.subgroup.tesc
@@ -0,0 +1,12 @@
+#version 320 es

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(vertices=1) out;

+layout(set = 0, binding = 0, std430) buffer Output

+{

+  uvec4 result[];

+};

+

+void main (void)

+{

+  result[gl_PrimitiveID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+}

diff --git a/Test/glsl.es320.subgroup.tese b/Test/glsl.es320.subgroup.tese
new file mode 100644
index 0000000..29a9748
--- /dev/null
+++ b/Test/glsl.es320.subgroup.tese
@@ -0,0 +1,12 @@
+#version 320 es

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(isolines) in;

+layout(set = 0, binding = 0, std430) buffer Output

+{

+  uvec4 result[];

+};

+

+void main (void)

+{

+  result[gl_PrimitiveID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+}

diff --git a/Test/glsl.es320.subgroup.vert b/Test/glsl.es320.subgroup.vert
new file mode 100644
index 0000000..3d8bd9a
--- /dev/null
+++ b/Test/glsl.es320.subgroup.vert
@@ -0,0 +1,11 @@
+#version 320 es

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(set = 0, binding = 0, std430) buffer Output

+{

+  uvec4 result[];

+};

+

+void main (void)

+{

+  result[gl_VertexID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+}

diff --git a/Test/glsl.es320.subgroupArithmetic.comp b/Test/glsl.es320.subgroupArithmetic.comp
new file mode 100644
index 0000000..4db7db3
--- /dev/null
+++ b/Test/glsl.es320.subgroupArithmetic.comp
@@ -0,0 +1,332 @@
+#version 320 es

+

+#extension GL_KHR_shader_subgroup_arithmetic: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+} data[4];

+

+void main()

+{

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

+

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

+    data[0].f4.xy  = subgroupAdd(data[1].f4.xy);

+    data[0].f4.xyz = subgroupAdd(data[2].f4.xyz);

+    data[0].f4     = subgroupAdd(data[3].f4);

+

+    data[1].i4.x   = subgroupAdd(data[0].i4.x);

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

+    data[1].i4.xyz = subgroupAdd(data[2].i4.xyz);

+    data[1].i4     = subgroupAdd(data[3].i4);

+

+    data[2].u4.x   = subgroupAdd(data[0].u4.x);

+    data[2].u4.xy  = subgroupAdd(data[1].u4.xy);

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

+    data[2].u4     = subgroupAdd(data[3].u4);

+

+    data[3].f4.x   = subgroupMul(data[0].f4.x);

+    data[3].f4.xy  = subgroupMul(data[1].f4.xy);

+    data[3].f4.xyz = subgroupMul(data[2].f4.xyz);

+    data[3].f4     = subgroupMul(data[3].f4);

+

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

+    data[0].i4.xy  = subgroupMul(data[1].i4.xy);

+    data[0].i4.xyz = subgroupMul(data[2].i4.xyz);

+    data[0].i4     = subgroupMul(data[3].i4);

+

+    data[1].u4.x   = subgroupMul(data[0].u4.x);

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

+    data[1].u4.xyz = subgroupMul(data[2].u4.xyz);

+    data[1].u4     = subgroupMul(data[3].u4);

+

+    data[2].f4.x   = subgroupMin(data[0].f4.x);

+    data[2].f4.xy  = subgroupMin(data[1].f4.xy);

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

+    data[2].f4     = subgroupMin(data[3].f4);

+

+    data[3].i4.x   = subgroupMin(data[0].i4.x);

+    data[3].i4.xy  = subgroupMin(data[1].i4.xy);

+    data[3].i4.xyz = subgroupMin(data[2].i4.xyz);

+    data[3].i4     = subgroupMin(data[3].i4);

+

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

+    data[0].u4.xy  = subgroupMin(data[1].u4.xy);

+    data[0].u4.xyz = subgroupMin(data[2].u4.xyz);

+    data[0].u4     = subgroupMin(data[3].u4);

+

+    data[1].f4.x   = subgroupMax(data[0].f4.x);

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

+    data[1].f4.xyz = subgroupMax(data[2].f4.xyz);

+    data[1].f4     = subgroupMax(data[3].f4);

+

+    data[2].i4.x   = subgroupMax(data[0].i4.x);

+    data[2].i4.xy  = subgroupMax(data[1].i4.xy);

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

+    data[2].i4     = subgroupMax(data[3].i4);

+

+    data[3].u4.x   = subgroupMax(data[0].u4.x);

+    data[3].u4.xy  = subgroupMax(data[1].u4.xy);

+    data[3].u4.xyz = subgroupMax(data[2].u4.xyz);

+    data[3].u4     = subgroupMax(data[3].u4);

+

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

+    data[0].i4.xy  = subgroupAnd(data[1].i4.xy);

+    data[0].i4.xyz = subgroupAnd(data[2].i4.xyz);

+    data[0].i4     = subgroupAnd(data[3].i4);

+

+    data[1].u4.x   = subgroupAnd(data[0].u4.x);

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

+    data[1].u4.xyz = subgroupAnd(data[2].u4.xyz);

+    data[1].u4     = subgroupAnd(data[3].u4);

+

+    data[2].i4.x   =   int(subgroupAnd(data[0].i4.x < 0));

+    data[2].i4.xy  = ivec2(subgroupAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[2].i4.xyz = ivec3(subgroupAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[2].i4     = ivec4(subgroupAnd(lessThan(data[1].i4, ivec4(0))));

+

+    data[3].i4.x   = subgroupOr(data[0].i4.x);

+    data[3].i4.xy  = subgroupOr(data[1].i4.xy);

+    data[3].i4.xyz = subgroupOr(data[2].i4.xyz);

+    data[3].i4     = subgroupOr(data[3].i4);

+

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

+    data[0].u4.xy  = subgroupOr(data[1].u4.xy);

+    data[0].u4.xyz = subgroupOr(data[2].u4.xyz);

+    data[0].u4     = subgroupOr(data[3].u4);

+

+    data[1].i4.x   =   int(subgroupOr(data[0].i4.x < 0));

+    data[1].i4.xy  = ivec2(subgroupOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[1].i4.xyz = ivec3(subgroupOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[1].i4     = ivec4(subgroupOr(lessThan(data[1].i4, ivec4(0))));

+

+    data[2].i4.x   = subgroupXor(data[0].i4.x);

+    data[2].i4.xy  = subgroupXor(data[1].i4.xy);

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

+    data[2].i4     = subgroupXor(data[3].i4);

+

+    data[3].u4.x   = subgroupXor(data[0].u4.x);

+    data[3].u4.xy  = subgroupXor(data[1].u4.xy);

+    data[3].u4.xyz = subgroupXor(data[2].u4.xyz);

+    data[3].u4     = subgroupXor(data[3].u4);

+

+    data[0].i4.x   =   int(subgroupXor(data[0].i4.x < 0));

+    data[0].i4.xy  = ivec2(subgroupXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[0].i4.xyz = ivec3(subgroupXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[0].i4     = ivec4(subgroupXor(lessThan(data[1].i4, ivec4(0))));

+

+    data[1].f4.x   = subgroupInclusiveAdd(data[0].f4.x);

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

+    data[1].f4.xyz = subgroupInclusiveAdd(data[2].f4.xyz);

+    data[1].f4     = subgroupInclusiveAdd(data[3].f4);

+

+    data[2].i4.x   = subgroupInclusiveAdd(data[0].i4.x);

+    data[2].i4.xy  = subgroupInclusiveAdd(data[1].i4.xy);

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

+    data[2].i4     = subgroupInclusiveAdd(data[3].i4);

+

+    data[3].u4.x   = subgroupInclusiveAdd(data[0].u4.x);

+    data[3].u4.xy  = subgroupInclusiveAdd(data[1].u4.xy);

+    data[3].u4.xyz = subgroupInclusiveAdd(data[2].u4.xyz);

+    data[3].u4     = subgroupInclusiveAdd(data[3].u4);

+

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

+    data[0].f4.xy  = subgroupInclusiveMul(data[1].f4.xy);

+    data[0].f4.xyz = subgroupInclusiveMul(data[2].f4.xyz);

+    data[0].f4     = subgroupInclusiveMul(data[3].f4);

+

+    data[1].i4.x   = subgroupInclusiveMul(data[0].i4.x);

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

+    data[1].i4.xyz = subgroupInclusiveMul(data[2].i4.xyz);

+    data[1].i4     = subgroupInclusiveMul(data[3].i4);

+

+    data[2].u4.x   = subgroupInclusiveMul(data[0].u4.x);

+    data[2].u4.xy  = subgroupInclusiveMul(data[1].u4.xy);

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

+    data[2].u4     = subgroupInclusiveMul(data[3].u4);

+

+    data[3].f4.x   = subgroupInclusiveMin(data[0].f4.x);

+    data[3].f4.xy  = subgroupInclusiveMin(data[1].f4.xy);

+    data[3].f4.xyz = subgroupInclusiveMin(data[2].f4.xyz);

+    data[3].f4     = subgroupInclusiveMin(data[3].f4);

+

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

+    data[0].i4.xy  = subgroupInclusiveMin(data[1].i4.xy);

+    data[0].i4.xyz = subgroupInclusiveMin(data[2].i4.xyz);

+    data[0].i4     = subgroupInclusiveMin(data[3].i4);

+

+    data[1].u4.x   = subgroupInclusiveMin(data[0].u4.x);

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

+    data[1].u4.xyz = subgroupInclusiveMin(data[2].u4.xyz);

+    data[1].u4     = subgroupInclusiveMin(data[3].u4);

+

+    data[2].f4.x   = subgroupInclusiveMax(data[0].f4.x);

+    data[2].f4.xy  = subgroupInclusiveMax(data[1].f4.xy);

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

+    data[2].f4     = subgroupInclusiveMax(data[3].f4);

+

+    data[3].i4.x   = subgroupInclusiveMax(data[0].i4.x);

+    data[3].i4.xy  = subgroupInclusiveMax(data[1].i4.xy);

+    data[3].i4.xyz = subgroupInclusiveMax(data[2].i4.xyz);

+    data[3].i4     = subgroupInclusiveMax(data[3].i4);

+

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

+    data[0].u4.xy  = subgroupInclusiveMax(data[1].u4.xy);

+    data[0].u4.xyz = subgroupInclusiveMax(data[2].u4.xyz);

+    data[0].u4     = subgroupInclusiveMax(data[3].u4);

+

+    data[1].i4.x   = subgroupInclusiveAnd(data[0].i4.x);

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

+    data[1].i4.xyz = subgroupInclusiveAnd(data[2].i4.xyz);

+    data[1].i4     = subgroupInclusiveAnd(data[3].i4);

+

+    data[2].u4.x   = subgroupInclusiveAnd(data[0].u4.x);

+    data[2].u4.xy  = subgroupInclusiveAnd(data[1].u4.xy);

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

+    data[2].u4     = subgroupInclusiveAnd(data[3].u4);

+

+    data[3].i4.x   =   int(subgroupInclusiveAnd(data[0].i4.x < 0));

+    data[3].i4.xy  = ivec2(subgroupInclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[3].i4.xyz = ivec3(subgroupInclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[3].i4     = ivec4(subgroupInclusiveAnd(lessThan(data[1].i4, ivec4(0))));

+

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

+    data[0].i4.xy  = subgroupInclusiveOr(data[1].i4.xy);

+    data[0].i4.xyz = subgroupInclusiveOr(data[2].i4.xyz);

+    data[0].i4     = subgroupInclusiveOr(data[3].i4);

+

+    data[1].u4.x   = subgroupInclusiveOr(data[0].u4.x);

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

+    data[1].u4.xyz = subgroupInclusiveOr(data[2].u4.xyz);

+    data[1].u4     = subgroupInclusiveOr(data[3].u4);

+

+    data[2].i4.x   =   int(subgroupInclusiveOr(data[0].i4.x < 0));

+    data[2].i4.xy  = ivec2(subgroupInclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[2].i4.xyz = ivec3(subgroupInclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[2].i4     = ivec4(subgroupInclusiveOr(lessThan(data[1].i4, ivec4(0))));

+

+    data[3].i4.x   = subgroupInclusiveXor(data[0].i4.x);

+    data[3].i4.xy  = subgroupInclusiveXor(data[1].i4.xy);

+    data[3].i4.xyz = subgroupInclusiveXor(data[2].i4.xyz);

+    data[3].i4     = subgroupInclusiveXor(data[3].i4);

+

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

+    data[0].u4.xy  = subgroupInclusiveXor(data[1].u4.xy);

+    data[0].u4.xyz = subgroupInclusiveXor(data[2].u4.xyz);

+    data[0].u4     = subgroupInclusiveXor(data[3].u4);

+

+    data[1].i4.x   =   int(subgroupInclusiveXor(data[0].i4.x < 0));

+    data[1].i4.xy  = ivec2(subgroupInclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[1].i4.xyz = ivec3(subgroupInclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[1].i4     = ivec4(subgroupInclusiveXor(lessThan(data[1].i4, ivec4(0))));

+

+    data[2].f4.x   = subgroupExclusiveAdd(data[0].f4.x);

+    data[2].f4.xy  = subgroupExclusiveAdd(data[1].f4.xy);

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

+    data[2].f4     = subgroupExclusiveAdd(data[3].f4);

+

+    data[3].i4.x   = subgroupExclusiveAdd(data[0].i4.x);

+    data[3].i4.xy  = subgroupExclusiveAdd(data[1].i4.xy);

+    data[3].i4.xyz = subgroupExclusiveAdd(data[2].i4.xyz);

+    data[3].i4     = subgroupExclusiveAdd(data[3].i4);

+

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

+    data[0].u4.xy  = subgroupExclusiveAdd(data[1].u4.xy);

+    data[0].u4.xyz = subgroupExclusiveAdd(data[2].u4.xyz);

+    data[0].u4     = subgroupExclusiveAdd(data[3].u4);

+

+    data[1].f4.x   = subgroupExclusiveMul(data[0].f4.x);

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

+    data[1].f4.xyz = subgroupExclusiveMul(data[2].f4.xyz);

+    data[1].f4     = subgroupExclusiveMul(data[3].f4);

+

+    data[2].i4.x   = subgroupExclusiveMul(data[0].i4.x);

+    data[2].i4.xy  = subgroupExclusiveMul(data[1].i4.xy);

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

+    data[2].i4     = subgroupExclusiveMul(data[3].i4);

+

+    data[3].u4.x   = subgroupExclusiveMul(data[0].u4.x);

+    data[3].u4.xy  = subgroupExclusiveMul(data[1].u4.xy);

+    data[3].u4.xyz = subgroupExclusiveMul(data[2].u4.xyz);

+    data[3].u4     = subgroupExclusiveMul(data[3].u4);

+

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

+    data[0].f4.xy  = subgroupExclusiveMin(data[1].f4.xy);

+    data[0].f4.xyz = subgroupExclusiveMin(data[2].f4.xyz);

+    data[0].f4     = subgroupExclusiveMin(data[3].f4);

+

+    data[1].i4.x   = subgroupExclusiveMin(data[0].i4.x);

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

+    data[1].i4.xyz = subgroupExclusiveMin(data[2].i4.xyz);

+    data[1].i4     = subgroupExclusiveMin(data[3].i4);

+

+    data[2].u4.x   = subgroupExclusiveMin(data[0].u4.x);

+    data[2].u4.xy  = subgroupExclusiveMin(data[1].u4.xy);

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

+    data[2].u4     = subgroupExclusiveMin(data[3].u4);

+

+    data[3].f4.x   = subgroupExclusiveMax(data[0].f4.x);

+    data[3].f4.xy  = subgroupExclusiveMax(data[1].f4.xy);

+    data[3].f4.xyz = subgroupExclusiveMax(data[2].f4.xyz);

+    data[3].f4     = subgroupExclusiveMax(data[3].f4);

+

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

+    data[0].i4.xy  = subgroupExclusiveMax(data[1].i4.xy);

+    data[0].i4.xyz = subgroupExclusiveMax(data[2].i4.xyz);

+    data[0].i4     = subgroupExclusiveMax(data[3].i4);

+

+    data[1].u4.x   = subgroupExclusiveMax(data[0].u4.x);

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

+    data[1].u4.xyz = subgroupExclusiveMax(data[2].u4.xyz);

+    data[1].u4     = subgroupExclusiveMax(data[3].u4);

+

+    data[2].i4.x   = subgroupExclusiveAnd(data[0].i4.x);

+    data[2].i4.xy  = subgroupExclusiveAnd(data[1].i4.xy);

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

+    data[2].i4     = subgroupExclusiveAnd(data[3].i4);

+

+    data[3].u4.x   = subgroupExclusiveAnd(data[0].u4.x);

+    data[3].u4.xy  = subgroupExclusiveAnd(data[1].u4.xy);

+    data[3].u4.xyz = subgroupExclusiveAnd(data[2].u4.xyz);

+    data[3].u4     = subgroupExclusiveAnd(data[3].u4);

+

+    data[0].i4.x   =   int(subgroupExclusiveAnd(data[0].i4.x < 0));

+    data[0].i4.xy  = ivec2(subgroupExclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[0].i4.xyz = ivec3(subgroupExclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[0].i4     = ivec4(subgroupExclusiveAnd(lessThan(data[1].i4, ivec4(0))));

+

+    data[1].i4.x   = subgroupExclusiveOr(data[0].i4.x);

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

+    data[1].i4.xyz = subgroupExclusiveOr(data[2].i4.xyz);

+    data[1].i4     = subgroupExclusiveOr(data[3].i4);

+

+    data[2].u4.x   = subgroupExclusiveOr(data[0].u4.x);

+    data[2].u4.xy  = subgroupExclusiveOr(data[1].u4.xy);

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

+    data[2].u4     = subgroupExclusiveOr(data[3].u4);

+

+    data[3].i4.x   =   int(subgroupExclusiveOr(data[0].i4.x < 0));

+    data[3].i4.xy  = ivec2(subgroupExclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[3].i4.xyz = ivec3(subgroupExclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[3].i4     = ivec4(subgroupExclusiveOr(lessThan(data[1].i4, ivec4(0))));

+

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

+    data[0].i4.xy  = subgroupExclusiveXor(data[1].i4.xy);

+    data[0].i4.xyz = subgroupExclusiveXor(data[2].i4.xyz);

+    data[0].i4     = subgroupExclusiveXor(data[3].i4);

+

+    data[1].u4.x   = subgroupExclusiveXor(data[0].u4.x);

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

+    data[1].u4.xyz = subgroupExclusiveXor(data[2].u4.xyz);

+    data[1].u4     = subgroupExclusiveXor(data[3].u4);

+

+    data[2].i4.x   =   int(subgroupExclusiveXor(data[0].i4.x < 0));

+    data[2].i4.xy  = ivec2(subgroupExclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[2].i4.xyz = ivec3(subgroupExclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[2].i4     = ivec4(subgroupExclusiveXor(lessThan(data[1].i4, ivec4(0))));

+}

diff --git a/Test/glsl.es320.subgroupBallot.comp b/Test/glsl.es320.subgroupBallot.comp
new file mode 100644
index 0000000..1764c23
--- /dev/null
+++ b/Test/glsl.es320.subgroupBallot.comp
@@ -0,0 +1,75 @@
+#version 320 es

+

+#extension GL_KHR_shader_subgroup_ballot: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+} data[4];

+

+void main()

+{

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

+

+    uvec4 relMask = gl_SubgroupEqMask +

+                       gl_SubgroupGeMask +

+                       gl_SubgroupGtMask +

+                       gl_SubgroupLeMask +

+                       gl_SubgroupLtMask;

+

+    uvec4 result = subgroupBallot(true);

+

+    data[0].u4.x = subgroupBallotBitCount(result);

+    data[0].u4.y = subgroupBallotBitExtract(result, 0u) ? 1u : 0u;

+    data[0].u4.z = subgroupBallotInclusiveBitCount(result) + subgroupBallotExclusiveBitCount(result);

+    data[0].u4.w = subgroupBallotFindLSB(result) + subgroupBallotFindMSB(result);

+

+    if ((relMask == result) && subgroupInverseBallot(data[0].u4))

+    {

+        data[1].f4.x   = subgroupBroadcast(data[0].f4.x,    3u);

+        data[1].f4.xy  = subgroupBroadcast(data[1].f4.xy,   3u);

+        data[1].f4.xyz = subgroupBroadcast(data[2].f4.xyz,  3u);

+        data[1].f4     = subgroupBroadcast(data[3].f4,      3u);

+

+        data[2].i4.x   = subgroupBroadcast(data[0].i4.x,    2u);

+        data[2].i4.xy  = subgroupBroadcast(data[1].i4.xy,   2u);

+        data[2].i4.xyz = subgroupBroadcast(data[2].i4.xyz,  2u);

+        data[2].i4     = subgroupBroadcast(data[3].i4,      2u);

+

+        data[3].u4.x   = subgroupBroadcast(data[0].u4.x,    1u);

+        data[3].u4.xy  = subgroupBroadcast(data[1].u4.xy,   1u);

+        data[3].u4.xyz = subgroupBroadcast(data[2].u4.xyz,  1u);

+        data[3].u4     = subgroupBroadcast(data[3].u4,      1u);

+

+        data[0].i4.x   = int(subgroupBroadcast(data[0].i4.x < 0,            1u));

+        data[0].i4.xy  = ivec2(subgroupBroadcast(lessThan(data[1].i4.xy, ivec2(0)), 1u));

+        data[0].i4.xyz = ivec3(subgroupBroadcast(lessThan(data[1].i4.xyz, ivec3(0)), 1u));

+        data[0].i4     = ivec4(subgroupBroadcast(lessThan(data[1].i4, ivec4(0)), 1u));

+    }

+    else

+    {

+        data[1].f4.x   = subgroupBroadcastFirst(data[0].f4.x);

+        data[1].f4.xy  = subgroupBroadcastFirst(data[1].f4.xy);

+        data[1].f4.xyz = subgroupBroadcastFirst(data[2].f4.xyz);

+        data[1].f4     = subgroupBroadcastFirst(data[3].f4);

+

+        data[2].i4.x   = subgroupBroadcastFirst(data[0].i4.x);

+        data[2].i4.xy  = subgroupBroadcastFirst(data[1].i4.xy);

+        data[2].i4.xyz = subgroupBroadcastFirst(data[2].i4.xyz);

+        data[2].i4     = subgroupBroadcastFirst(data[3].i4);

+

+        data[3].u4.x   = subgroupBroadcastFirst(data[0].u4.x);

+        data[3].u4.xy  = subgroupBroadcastFirst(data[1].u4.xy);

+        data[3].u4.xyz = subgroupBroadcastFirst(data[2].u4.xyz);

+        data[3].u4     = subgroupBroadcastFirst(data[3].u4);

+

+        data[0].i4.x   = int(subgroupBroadcastFirst(data[0].i4.x < 0));

+        data[0].i4.xy  = ivec2(subgroupBroadcastFirst(lessThan(data[1].i4.xy, ivec2(0))));

+        data[0].i4.xyz = ivec3(subgroupBroadcastFirst(lessThan(data[1].i4.xyz, ivec3(0))));

+        data[0].i4     = ivec4(subgroupBroadcastFirst(lessThan(data[1].i4, ivec4(0))));

+    }

+}

diff --git a/Test/glsl.es320.subgroupBallotNeg.comp b/Test/glsl.es320.subgroupBallotNeg.comp
new file mode 100644
index 0000000..80ee6f8
--- /dev/null
+++ b/Test/glsl.es320.subgroupBallotNeg.comp
@@ -0,0 +1,32 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_ballot: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+} data[4];

+

+void main()

+{

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

+

+    uvec4 relMask = gl_SubgroupEqMask +

+                       gl_SubgroupGeMask +

+                       gl_SubgroupGtMask +

+                       gl_SubgroupLeMask +

+                       gl_SubgroupLtMask;

+

+    uvec4 result = subgroupBallot(true);

+

+    data[0].u4.x = subgroupBallotBitCount(result);

+    data[0].u4.y = subgroupBallotBitExtract(result, 0) ? 1u : 0u;

+    data[0].u4.z = subgroupBallotInclusiveBitCount(result) + subgroupBallotExclusiveBitCount(result);

+    data[0].u4.w = subgroupBallotFindLSB(result) + subgroupBallotFindMSB(result);

+

+    data[1].f4.x   = subgroupBroadcast(data[0].f4.x,    invocation);  // ERROR: not constant

+}

diff --git a/Test/glsl.es320.subgroupBasic.comp b/Test/glsl.es320.subgroupBasic.comp
new file mode 100644
index 0000000..7dc7458
--- /dev/null
+++ b/Test/glsl.es320.subgroupBasic.comp
@@ -0,0 +1,23 @@
+#version 320 es

+

+#extension GL_KHR_shader_subgroup_basic: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffer

+{

+    int a[];

+} data;

+

+void main()

+{

+    data.a[gl_SubgroupSize] = 1;

+    data.a[gl_SubgroupInvocationID] = 1;

+    data.a[gl_NumSubgroups] = 1;

+    data.a[gl_SubgroupID] = (subgroupElect()) ? 1 : 0;

+    subgroupBarrier();

+    subgroupMemoryBarrier();

+    subgroupMemoryBarrierBuffer();

+    subgroupMemoryBarrierShared();

+    subgroupMemoryBarrierImage();

+}

diff --git a/Test/glsl.es320.subgroupClustered.comp b/Test/glsl.es320.subgroupClustered.comp
new file mode 100644
index 0000000..61764e5
--- /dev/null
+++ b/Test/glsl.es320.subgroupClustered.comp
@@ -0,0 +1,122 @@
+#version 320 es

+

+#extension GL_KHR_shader_subgroup_clustered: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+} data[4];

+

+void main()

+{

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

+

+    data[0].f4.x   = subgroupClusteredAdd(data[0].f4.x, 1u);

+    data[0].f4.xy  = subgroupClusteredAdd(data[1].f4.xy, 1u);

+    data[0].f4.xyz = subgroupClusteredAdd(data[2].f4.xyz, 1u);

+    data[0].f4     = subgroupClusteredAdd(data[3].f4, 1u);

+

+    data[1].i4.x   = subgroupClusteredAdd(data[0].i4.x, 1u);

+    data[1].i4.xy  = subgroupClusteredAdd(data[1].i4.xy, 1u);

+    data[1].i4.xyz = subgroupClusteredAdd(data[2].i4.xyz, 1u);

+    data[1].i4     = subgroupClusteredAdd(data[3].i4, 1u);

+

+    data[2].u4.x   = subgroupClusteredAdd(data[0].u4.x, 1u);

+    data[2].u4.xy  = subgroupClusteredAdd(data[1].u4.xy, 1u);

+    data[2].u4.xyz = subgroupClusteredAdd(data[2].u4.xyz, 1u);

+    data[2].u4     = subgroupClusteredAdd(data[3].u4, 1u);

+

+    data[3].f4.x   = subgroupClusteredMul(data[0].f4.x, 1u);

+    data[3].f4.xy  = subgroupClusteredMul(data[1].f4.xy, 1u);

+    data[3].f4.xyz = subgroupClusteredMul(data[2].f4.xyz, 1u);

+    data[3].f4     = subgroupClusteredMul(data[3].f4, 1u);

+

+    data[0].i4.x   = subgroupClusteredMul(data[0].i4.x, 1u);

+    data[0].i4.xy  = subgroupClusteredMul(data[1].i4.xy, 1u);

+    data[0].i4.xyz = subgroupClusteredMul(data[2].i4.xyz, 1u);

+    data[0].i4     = subgroupClusteredMul(data[3].i4, 1u);

+

+    data[1].u4.x   = subgroupClusteredMul(data[0].u4.x, 1u);

+    data[1].u4.xy  = subgroupClusteredMul(data[1].u4.xy, 1u);

+    data[1].u4.xyz = subgroupClusteredMul(data[2].u4.xyz, 1u);

+    data[1].u4     = subgroupClusteredMul(data[3].u4, 1u);

+

+    data[2].f4.x   = subgroupClusteredMin(data[0].f4.x, 1u);

+    data[2].f4.xy  = subgroupClusteredMin(data[1].f4.xy, 1u);

+    data[2].f4.xyz = subgroupClusteredMin(data[2].f4.xyz, 1u);

+    data[2].f4     = subgroupClusteredMin(data[3].f4, 1u);

+

+    data[3].i4.x   = subgroupClusteredMin(data[0].i4.x, 1u);

+    data[3].i4.xy  = subgroupClusteredMin(data[1].i4.xy, 1u);

+    data[3].i4.xyz = subgroupClusteredMin(data[2].i4.xyz, 1u);

+    data[3].i4     = subgroupClusteredMin(data[3].i4, 1u);

+

+    data[0].u4.x   = subgroupClusteredMin(data[0].u4.x, 1u);

+    data[0].u4.xy  = subgroupClusteredMin(data[1].u4.xy, 1u);

+    data[0].u4.xyz = subgroupClusteredMin(data[2].u4.xyz, 1u);

+    data[0].u4     = subgroupClusteredMin(data[3].u4, 1u);

+

+    data[1].f4.x   = subgroupClusteredMax(data[0].f4.x, 1u);

+    data[1].f4.xy  = subgroupClusteredMax(data[1].f4.xy, 1u);

+    data[1].f4.xyz = subgroupClusteredMax(data[2].f4.xyz, 1u);

+    data[1].f4     = subgroupClusteredMax(data[3].f4, 1u);

+

+    data[2].i4.x   = subgroupClusteredMax(data[0].i4.x, 1u);

+    data[2].i4.xy  = subgroupClusteredMax(data[1].i4.xy, 1u);

+    data[2].i4.xyz = subgroupClusteredMax(data[2].i4.xyz, 1u);

+    data[2].i4     = subgroupClusteredMax(data[3].i4, 1u);

+

+    data[3].u4.x   = subgroupClusteredMax(data[0].u4.x, 1u);

+    data[3].u4.xy  = subgroupClusteredMax(data[1].u4.xy, 1u);

+    data[3].u4.xyz = subgroupClusteredMax(data[2].u4.xyz, 1u);

+    data[3].u4     = subgroupClusteredMax(data[3].u4, 1u);

+

+    data[0].i4.x   = subgroupClusteredAnd(data[0].i4.x, 1u);

+    data[0].i4.xy  = subgroupClusteredAnd(data[1].i4.xy, 1u);

+    data[0].i4.xyz = subgroupClusteredAnd(data[2].i4.xyz, 1u);

+    data[0].i4     = subgroupClusteredAnd(data[3].i4, 1u);

+

+    data[1].u4.x   = subgroupClusteredAnd(data[0].u4.x, 1u);

+    data[1].u4.xy  = subgroupClusteredAnd(data[1].u4.xy, 1u);

+    data[1].u4.xyz = subgroupClusteredAnd(data[2].u4.xyz, 1u);

+    data[1].u4     = subgroupClusteredAnd(data[3].u4, 1u);

+

+    data[2].i4.x   =   int(subgroupClusteredAnd(data[0].i4.x < 0, 1u));

+    data[2].i4.xy  = ivec2(subgroupClusteredAnd(lessThan(data[1].i4.xy, ivec2(0)), 1u));

+    data[2].i4.xyz = ivec3(subgroupClusteredAnd(lessThan(data[1].i4.xyz, ivec3(0)), 1u));

+    data[2].i4     = ivec4(subgroupClusteredAnd(lessThan(data[1].i4, ivec4(0)), 1u));

+

+    data[3].i4.x   = subgroupClusteredOr(data[0].i4.x, 1u);

+    data[3].i4.xy  = subgroupClusteredOr(data[1].i4.xy, 1u);

+    data[3].i4.xyz = subgroupClusteredOr(data[2].i4.xyz, 1u);

+    data[3].i4     = subgroupClusteredOr(data[3].i4, 1u);

+

+    data[0].u4.x   = subgroupClusteredOr(data[0].u4.x, 1u);

+    data[0].u4.xy  = subgroupClusteredOr(data[1].u4.xy, 1u);

+    data[0].u4.xyz = subgroupClusteredOr(data[2].u4.xyz, 1u);

+    data[0].u4     = subgroupClusteredOr(data[3].u4, 1u);

+

+    data[1].i4.x   =   int(subgroupClusteredOr(data[0].i4.x < 0, 1u));

+    data[1].i4.xy  = ivec2(subgroupClusteredOr(lessThan(data[1].i4.xy, ivec2(0)), 1u));

+    data[1].i4.xyz = ivec3(subgroupClusteredOr(lessThan(data[1].i4.xyz, ivec3(0)), 1u));

+    data[1].i4     = ivec4(subgroupClusteredOr(lessThan(data[1].i4, ivec4(0)), 1u));

+

+    data[2].i4.x   = subgroupClusteredXor(data[0].i4.x, 1u);

+    data[2].i4.xy  = subgroupClusteredXor(data[1].i4.xy, 1u);

+    data[2].i4.xyz = subgroupClusteredXor(data[2].i4.xyz, 1u);

+    data[2].i4     = subgroupClusteredXor(data[3].i4, 1u);

+

+    data[3].u4.x   = subgroupClusteredXor(data[0].u4.x, 1u);

+    data[3].u4.xy  = subgroupClusteredXor(data[1].u4.xy, 1u);

+    data[3].u4.xyz = subgroupClusteredXor(data[2].u4.xyz, 1u);

+    data[3].u4     = subgroupClusteredXor(data[3].u4, 1u);

+

+    data[0].i4.x   =   int(subgroupClusteredXor(data[0].i4.x < 0, 1u));

+    data[0].i4.xy  = ivec2(subgroupClusteredXor(lessThan(data[1].i4.xy, ivec2(0)), 1u));

+    data[0].i4.xyz = ivec3(subgroupClusteredXor(lessThan(data[1].i4.xyz, ivec3(0)), 1u));

+    data[0].i4     = ivec4(subgroupClusteredXor(lessThan(data[1].i4, ivec4(0)), 1u));

+}

diff --git a/Test/glsl.es320.subgroupClusteredNeg.comp b/Test/glsl.es320.subgroupClusteredNeg.comp
new file mode 100644
index 0000000..0eb50d8
--- /dev/null
+++ b/Test/glsl.es320.subgroupClusteredNeg.comp
@@ -0,0 +1,34 @@
+#version 320 es

+

+#extension GL_KHR_shader_subgroup_clustered: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+} data[4];

+

+void main()

+{

+    int a = 1;

+    const int aConst = 1;

+

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

+

+    data[0].f4.xy  = subgroupClusteredAdd(data[1].f4.xy, 0u);          // ERROR, less than 1

+

+    data[0].f4.x   = subgroupClusteredMul(data[0].f4.x, 3u);           // ERROR, not a power of 2

+

+    data[1].i4.xy  = subgroupClusteredMin(data[1].i4.xy, 8u);

+    data[1].i4.xyz = subgroupClusteredMin(data[2].i4.xyz, 6u);         // ERROR, not a power of 2

+

+    data[3].i4.x   = subgroupClusteredOr(data[0].i4.x, uint(a));            // ERROR, not constant

+    data[3].i4.xy  = subgroupClusteredOr(data[1].i4.xy, uint(aConst));

+

+    data[0].i4.x   = subgroupClusteredXor(data[0].i4.x, uint(1 + a));       // ERROR, not constant

+    data[0].i4.xy  = subgroupClusteredXor(data[1].i4.xy, uint(aConst + a)); // ERROR, not constant

+    data[0].i4.xyz = subgroupClusteredXor(data[2].i4.xyz, uint(1 + aConst));

+}

diff --git a/Test/glsl.es320.subgroupPartitioned.comp b/Test/glsl.es320.subgroupPartitioned.comp
new file mode 100644
index 0000000..15f13a0
--- /dev/null
+++ b/Test/glsl.es320.subgroupPartitioned.comp
@@ -0,0 +1,354 @@
+#version 320 es

+

+#extension GL_NV_shader_subgroup_partitioned: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+} data[4];

+

+void main()

+{

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

+

+    uvec4 ballot = subgroupPartitionNV(invocation);

+

+    data[0].u4 = subgroupPartitionNV(data[0].f4.x);

+    data[0].u4 = subgroupPartitionNV(data[0].f4.xy);

+    data[0].u4 = subgroupPartitionNV(data[0].f4.xyz);

+    data[0].u4 = subgroupPartitionNV(data[0].f4);

+

+    data[0].u4 = subgroupPartitionNV(data[0].i4.x);

+    data[0].u4 = subgroupPartitionNV(data[0].i4.xy);

+    data[0].u4 = subgroupPartitionNV(data[0].i4.xyz);

+    data[0].u4 = subgroupPartitionNV(data[0].i4);

+

+    data[0].u4 = subgroupPartitionNV(data[0].u4.x);

+    data[0].u4 = subgroupPartitionNV(data[0].u4.xy);

+    data[0].u4 = subgroupPartitionNV(data[0].u4.xyz);

+    data[0].u4 = subgroupPartitionNV(data[0].u4);

+

+    data[1].u4 = subgroupPartitionNV(bool(data[0].i4.x));

+    data[1].u4 = subgroupPartitionNV(bvec2(data[0].i4.xy));

+    data[1].u4 = subgroupPartitionNV(bvec3(data[0].i4.xyz));

+    data[1].u4 = subgroupPartitionNV(bvec4(data[0].i4));

+

+    data[1].f4.x   = subgroupPartitionedAddNV(data[0].f4.x, ballot);

+    data[1].f4.xy  = subgroupPartitionedAddNV(data[1].f4.xy, ballot);

+    data[1].f4.xyz = subgroupPartitionedAddNV(data[2].f4.xyz, ballot);

+    data[1].f4     = subgroupPartitionedAddNV(data[3].f4, ballot);

+

+    data[1].i4.x   = subgroupPartitionedAddNV(data[0].i4.x, ballot);

+    data[1].i4.xy  = subgroupPartitionedAddNV(data[1].i4.xy, ballot);

+    data[1].i4.xyz = subgroupPartitionedAddNV(data[2].i4.xyz, ballot);

+    data[1].i4     = subgroupPartitionedAddNV(data[3].i4, ballot);

+

+    data[1].u4.x   = subgroupPartitionedAddNV(data[0].u4.x, ballot);

+    data[1].u4.xy  = subgroupPartitionedAddNV(data[1].u4.xy, ballot);

+    data[1].u4.xyz = subgroupPartitionedAddNV(data[2].u4.xyz, ballot);

+    data[1].u4     = subgroupPartitionedAddNV(data[3].u4, ballot);

+

+    data[2].f4.x   = subgroupPartitionedMulNV(data[0].f4.x, ballot);

+    data[2].f4.xy  = subgroupPartitionedMulNV(data[1].f4.xy, ballot);

+    data[2].f4.xyz = subgroupPartitionedMulNV(data[2].f4.xyz, ballot);

+    data[2].f4     = subgroupPartitionedMulNV(data[3].f4, ballot);

+

+    data[2].i4.x   = subgroupPartitionedMulNV(data[0].i4.x, ballot);

+    data[2].i4.xy  = subgroupPartitionedMulNV(data[1].i4.xy, ballot);

+    data[2].i4.xyz = subgroupPartitionedMulNV(data[2].i4.xyz, ballot);

+    data[2].i4     = subgroupPartitionedMulNV(data[3].i4, ballot);

+

+    data[2].u4.x   = subgroupPartitionedMulNV(data[0].u4.x, ballot);

+    data[2].u4.xy  = subgroupPartitionedMulNV(data[1].u4.xy, ballot);

+    data[2].u4.xyz = subgroupPartitionedMulNV(data[2].u4.xyz, ballot);

+    data[2].u4     = subgroupPartitionedMulNV(data[3].u4, ballot);

+

+    data[2].f4.x   = subgroupPartitionedMinNV(data[0].f4.x, ballot);

+    data[2].f4.xy  = subgroupPartitionedMinNV(data[1].f4.xy, ballot);

+    data[2].f4.xyz = subgroupPartitionedMinNV(data[2].f4.xyz, ballot);

+    data[2].f4     = subgroupPartitionedMinNV(data[3].f4, ballot);

+

+    data[3].i4.x   = subgroupPartitionedMinNV(data[0].i4.x, ballot);

+    data[3].i4.xy  = subgroupPartitionedMinNV(data[1].i4.xy, ballot);

+    data[3].i4.xyz = subgroupPartitionedMinNV(data[2].i4.xyz, ballot);

+    data[3].i4     = subgroupPartitionedMinNV(data[3].i4, ballot);

+

+    data[3].u4.x   = subgroupPartitionedMinNV(data[0].u4.x, ballot);

+    data[3].u4.xy  = subgroupPartitionedMinNV(data[1].u4.xy, ballot);

+    data[3].u4.xyz = subgroupPartitionedMinNV(data[2].u4.xyz, ballot);

+    data[3].u4     = subgroupPartitionedMinNV(data[3].u4, ballot);

+

+    data[3].f4.x   = subgroupPartitionedMaxNV(data[0].f4.x, ballot);

+    data[3].f4.xy  = subgroupPartitionedMaxNV(data[1].f4.xy, ballot);

+    data[3].f4.xyz = subgroupPartitionedMaxNV(data[2].f4.xyz, ballot);

+    data[3].f4     = subgroupPartitionedMaxNV(data[3].f4, ballot);

+

+    data[0].i4.x   = subgroupPartitionedMaxNV(data[0].i4.x, ballot);

+    data[0].i4.xy  = subgroupPartitionedMaxNV(data[1].i4.xy, ballot);

+    data[0].i4.xyz = subgroupPartitionedMaxNV(data[2].i4.xyz, ballot);

+    data[0].i4     = subgroupPartitionedMaxNV(data[3].i4, ballot);

+

+    data[0].u4.x   = subgroupPartitionedMaxNV(data[0].u4.x, ballot);

+    data[0].u4.xy  = subgroupPartitionedMaxNV(data[1].u4.xy, ballot);

+    data[0].u4.xyz = subgroupPartitionedMaxNV(data[2].u4.xyz, ballot);

+    data[0].u4     = subgroupPartitionedMaxNV(data[3].u4, ballot);

+

+    data[0].i4.x   = subgroupPartitionedAndNV(data[0].i4.x, ballot);

+    data[0].i4.xy  = subgroupPartitionedAndNV(data[1].i4.xy, ballot);

+    data[0].i4.xyz = subgroupPartitionedAndNV(data[2].i4.xyz, ballot);

+    data[0].i4     = subgroupPartitionedAndNV(data[3].i4, ballot);

+

+    data[1].u4.x   = subgroupPartitionedAndNV(data[0].u4.x, ballot);

+    data[1].u4.xy  = subgroupPartitionedAndNV(data[1].u4.xy, ballot);

+    data[1].u4.xyz = subgroupPartitionedAndNV(data[2].u4.xyz, ballot);

+    data[1].u4     = subgroupPartitionedAndNV(data[3].u4, ballot);

+

+    data[1].i4.x   =   int(subgroupPartitionedAndNV(data[0].i4.x < 0, ballot));

+    data[1].i4.xy  = ivec2(subgroupPartitionedAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[1].i4.xyz = ivec3(subgroupPartitionedAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[1].i4     = ivec4(subgroupPartitionedAndNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[1].i4.x   = subgroupPartitionedOrNV(data[0].i4.x, ballot);

+    data[1].i4.xy  = subgroupPartitionedOrNV(data[1].i4.xy, ballot);

+    data[1].i4.xyz = subgroupPartitionedOrNV(data[2].i4.xyz, ballot);

+    data[1].i4     = subgroupPartitionedOrNV(data[3].i4, ballot);

+

+    data[2].u4.x   = subgroupPartitionedOrNV(data[0].u4.x, ballot);

+    data[2].u4.xy  = subgroupPartitionedOrNV(data[1].u4.xy, ballot);

+    data[2].u4.xyz = subgroupPartitionedOrNV(data[2].u4.xyz, ballot);

+    data[2].u4     = subgroupPartitionedOrNV(data[3].u4, ballot);

+

+    data[2].i4.x   =   int(subgroupPartitionedOrNV(data[0].i4.x < 0, ballot));

+    data[2].i4.xy  = ivec2(subgroupPartitionedOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[2].i4.xyz = ivec3(subgroupPartitionedOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[2].i4     = ivec4(subgroupPartitionedOrNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[2].i4.x   = subgroupPartitionedXorNV(data[0].i4.x, ballot);

+    data[2].i4.xy  = subgroupPartitionedXorNV(data[1].i4.xy, ballot);

+    data[2].i4.xyz = subgroupPartitionedXorNV(data[2].i4.xyz, ballot);

+    data[2].i4     = subgroupPartitionedXorNV(data[3].i4, ballot);

+

+    data[2].u4.x   = subgroupPartitionedXorNV(data[0].u4.x, ballot);

+    data[2].u4.xy  = subgroupPartitionedXorNV(data[1].u4.xy, ballot);

+    data[2].u4.xyz = subgroupPartitionedXorNV(data[2].u4.xyz, ballot);

+    data[2].u4     = subgroupPartitionedXorNV(data[3].u4, ballot);

+

+    data[3].i4.x   =   int(subgroupPartitionedXorNV(data[0].i4.x < 0, ballot));

+    data[3].i4.xy  = ivec2(subgroupPartitionedXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[3].i4.xyz = ivec3(subgroupPartitionedXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[3].i4     = ivec4(subgroupPartitionedXorNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[3].f4.x   = subgroupPartitionedInclusiveAddNV(data[0].f4.x, ballot);

+    data[3].f4.xy  = subgroupPartitionedInclusiveAddNV(data[1].f4.xy, ballot);

+    data[3].f4.xyz = subgroupPartitionedInclusiveAddNV(data[2].f4.xyz, ballot);

+    data[3].f4     = subgroupPartitionedInclusiveAddNV(data[3].f4, ballot);

+

+    data[3].i4.x   = subgroupPartitionedInclusiveAddNV(data[0].i4.x, ballot);

+    data[3].i4.xy  = subgroupPartitionedInclusiveAddNV(data[1].i4.xy, ballot);

+    data[3].i4.xyz = subgroupPartitionedInclusiveAddNV(data[2].i4.xyz, ballot);

+    data[3].i4     = subgroupPartitionedInclusiveAddNV(data[3].i4, ballot);

+

+    data[3].u4.x   = subgroupPartitionedInclusiveAddNV(data[0].u4.x, ballot);

+    data[3].u4.xy  = subgroupPartitionedInclusiveAddNV(data[1].u4.xy, ballot);

+    data[3].u4.xyz = subgroupPartitionedInclusiveAddNV(data[2].u4.xyz, ballot);

+    data[3].u4     = subgroupPartitionedInclusiveAddNV(data[3].u4, ballot);

+

+    data[3].f4.x   = subgroupPartitionedInclusiveMulNV(data[0].f4.x, ballot);

+    data[3].f4.xy  = subgroupPartitionedInclusiveMulNV(data[1].f4.xy, ballot);

+    data[3].f4.xyz = subgroupPartitionedInclusiveMulNV(data[2].f4.xyz, ballot);

+    data[3].f4     = subgroupPartitionedInclusiveMulNV(data[3].f4, ballot);

+

+    data[3].i4.x   = subgroupPartitionedInclusiveMulNV(data[0].i4.x, ballot);

+    data[3].i4.xy  = subgroupPartitionedInclusiveMulNV(data[1].i4.xy, ballot);

+    data[3].i4.xyz = subgroupPartitionedInclusiveMulNV(data[2].i4.xyz, ballot);

+    data[3].i4     = subgroupPartitionedInclusiveMulNV(data[3].i4, ballot);

+

+    data[0].u4.x   = subgroupPartitionedInclusiveMulNV(data[0].u4.x, ballot);

+    data[0].u4.xy  = subgroupPartitionedInclusiveMulNV(data[1].u4.xy, ballot);

+    data[0].u4.xyz = subgroupPartitionedInclusiveMulNV(data[2].u4.xyz, ballot);

+    data[0].u4     = subgroupPartitionedInclusiveMulNV(data[3].u4, ballot);

+

+    data[0].f4.x   = subgroupPartitionedInclusiveMinNV(data[0].f4.x, ballot);

+    data[0].f4.xy  = subgroupPartitionedInclusiveMinNV(data[1].f4.xy, ballot);

+    data[0].f4.xyz = subgroupPartitionedInclusiveMinNV(data[2].f4.xyz, ballot);

+    data[0].f4     = subgroupPartitionedInclusiveMinNV(data[3].f4, ballot);

+

+    data[0].i4.x   = subgroupPartitionedInclusiveMinNV(data[0].i4.x, ballot);

+    data[0].i4.xy  = subgroupPartitionedInclusiveMinNV(data[1].i4.xy, ballot);

+    data[0].i4.xyz = subgroupPartitionedInclusiveMinNV(data[2].i4.xyz, ballot);

+    data[0].i4     = subgroupPartitionedInclusiveMinNV(data[3].i4, ballot);

+

+    data[0].u4.x   = subgroupPartitionedInclusiveMinNV(data[0].u4.x, ballot);

+    data[0].u4.xy  = subgroupPartitionedInclusiveMinNV(data[1].u4.xy, ballot);

+    data[0].u4.xyz = subgroupPartitionedInclusiveMinNV(data[2].u4.xyz, ballot);

+    data[0].u4     = subgroupPartitionedInclusiveMinNV(data[3].u4, ballot);

+

+    data[1].f4.x   = subgroupPartitionedInclusiveMaxNV(data[0].f4.x, ballot);

+    data[1].f4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].f4.xy, ballot);

+    data[1].f4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].f4.xyz, ballot);

+    data[1].f4     = subgroupPartitionedInclusiveMaxNV(data[3].f4, ballot);

+

+    data[1].i4.x   = subgroupPartitionedInclusiveMaxNV(data[0].i4.x, ballot);

+    data[1].i4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].i4.xy, ballot);

+    data[1].i4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].i4.xyz, ballot);

+    data[1].i4     = subgroupPartitionedInclusiveMaxNV(data[3].i4, ballot);

+

+    data[1].u4.x   = subgroupPartitionedInclusiveMaxNV(data[0].u4.x, ballot);

+    data[1].u4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].u4.xy, ballot);

+    data[1].u4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].u4.xyz, ballot);

+    data[1].u4     = subgroupPartitionedInclusiveMaxNV(data[3].u4, ballot);

+

+    data[1].i4.x   = subgroupPartitionedInclusiveAndNV(data[0].i4.x, ballot);

+    data[1].i4.xy  = subgroupPartitionedInclusiveAndNV(data[1].i4.xy, ballot);

+    data[1].i4.xyz = subgroupPartitionedInclusiveAndNV(data[2].i4.xyz, ballot);

+    data[1].i4     = subgroupPartitionedInclusiveAndNV(data[3].i4, ballot);

+

+    data[2].u4.x   = subgroupPartitionedInclusiveAndNV(data[0].u4.x, ballot);

+    data[2].u4.xy  = subgroupPartitionedInclusiveAndNV(data[1].u4.xy, ballot);

+    data[2].u4.xyz = subgroupPartitionedInclusiveAndNV(data[2].u4.xyz, ballot);

+    data[2].u4     = subgroupPartitionedInclusiveAndNV(data[3].u4, ballot);

+

+    data[2].i4.x   =   int(subgroupPartitionedInclusiveAndNV(data[0].i4.x < 0, ballot));

+    data[2].i4.xy  = ivec2(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[2].i4.xyz = ivec3(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[2].i4     = ivec4(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[2].i4.x   = subgroupPartitionedInclusiveOrNV(data[0].i4.x, ballot);

+    data[2].i4.xy  = subgroupPartitionedInclusiveOrNV(data[1].i4.xy, ballot);

+    data[2].i4.xyz = subgroupPartitionedInclusiveOrNV(data[2].i4.xyz, ballot);

+    data[2].i4     = subgroupPartitionedInclusiveOrNV(data[3].i4, ballot);

+

+    data[2].u4.x   = subgroupPartitionedInclusiveOrNV(data[0].u4.x, ballot);

+    data[2].u4.xy  = subgroupPartitionedInclusiveOrNV(data[1].u4.xy, ballot);

+    data[2].u4.xyz = subgroupPartitionedInclusiveOrNV(data[2].u4.xyz, ballot);

+    data[2].u4     = subgroupPartitionedInclusiveOrNV(data[3].u4, ballot);

+

+    data[3].i4.x   =   int(subgroupPartitionedInclusiveOrNV(data[0].i4.x < 0, ballot));

+    data[3].i4.xy  = ivec2(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[3].i4.xyz = ivec3(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[3].i4     = ivec4(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[3].i4.x   = subgroupPartitionedInclusiveXorNV(data[0].i4.x, ballot);

+    data[3].i4.xy  = subgroupPartitionedInclusiveXorNV(data[1].i4.xy, ballot);

+    data[3].i4.xyz = subgroupPartitionedInclusiveXorNV(data[2].i4.xyz, ballot);

+    data[3].i4     = subgroupPartitionedInclusiveXorNV(data[3].i4, ballot);

+

+    data[3].u4.x   = subgroupPartitionedInclusiveXorNV(data[0].u4.x, ballot);

+    data[3].u4.xy  = subgroupPartitionedInclusiveXorNV(data[1].u4.xy, ballot);

+    data[3].u4.xyz = subgroupPartitionedInclusiveXorNV(data[2].u4.xyz, ballot);

+    data[3].u4     = subgroupPartitionedInclusiveXorNV(data[3].u4, ballot);

+

+    data[3].i4.x   =   int(subgroupPartitionedInclusiveXorNV(data[0].i4.x < 0, ballot));

+    data[3].i4.xy  = ivec2(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[3].i4.xyz = ivec3(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[3].i4     = ivec4(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[0].f4.x   = subgroupPartitionedExclusiveAddNV(data[0].f4.x, ballot);

+    data[0].f4.xy  = subgroupPartitionedExclusiveAddNV(data[1].f4.xy, ballot);

+    data[0].f4.xyz = subgroupPartitionedExclusiveAddNV(data[2].f4.xyz, ballot);

+    data[0].f4     = subgroupPartitionedExclusiveAddNV(data[3].f4, ballot);

+

+    data[0].i4.x   = subgroupPartitionedExclusiveAddNV(data[0].i4.x, ballot);

+    data[0].i4.xy  = subgroupPartitionedExclusiveAddNV(data[1].i4.xy, ballot);

+    data[0].i4.xyz = subgroupPartitionedExclusiveAddNV(data[2].i4.xyz, ballot);

+    data[0].i4     = subgroupPartitionedExclusiveAddNV(data[3].i4, ballot);

+

+    data[0].u4.x   = subgroupPartitionedExclusiveAddNV(data[0].u4.x, ballot);

+    data[0].u4.xy  = subgroupPartitionedExclusiveAddNV(data[1].u4.xy, ballot);

+    data[0].u4.xyz = subgroupPartitionedExclusiveAddNV(data[2].u4.xyz, ballot);

+    data[0].u4     = subgroupPartitionedExclusiveAddNV(data[3].u4, ballot);

+

+    data[0].f4.x   = subgroupPartitionedExclusiveMulNV(data[0].f4.x, ballot);

+    data[0].f4.xy  = subgroupPartitionedExclusiveMulNV(data[1].f4.xy, ballot);

+    data[0].f4.xyz = subgroupPartitionedExclusiveMulNV(data[2].f4.xyz, ballot);

+    data[0].f4     = subgroupPartitionedExclusiveMulNV(data[3].f4, ballot);

+

+    data[1].i4.x   = subgroupPartitionedExclusiveMulNV(data[0].i4.x, ballot);

+    data[1].i4.xy  = subgroupPartitionedExclusiveMulNV(data[1].i4.xy, ballot);

+    data[1].i4.xyz = subgroupPartitionedExclusiveMulNV(data[2].i4.xyz, ballot);

+    data[1].i4     = subgroupPartitionedExclusiveMulNV(data[3].i4, ballot);

+

+    data[1].u4.x   = subgroupPartitionedExclusiveMulNV(data[0].u4.x, ballot);

+    data[1].u4.xy  = subgroupPartitionedExclusiveMulNV(data[1].u4.xy, ballot);

+    data[1].u4.xyz = subgroupPartitionedExclusiveMulNV(data[2].u4.xyz, ballot);

+    data[1].u4     = subgroupPartitionedExclusiveMulNV(data[3].u4, ballot);

+

+    data[1].f4.x   = subgroupPartitionedExclusiveMinNV(data[0].f4.x, ballot);

+    data[1].f4.xy  = subgroupPartitionedExclusiveMinNV(data[1].f4.xy, ballot);

+    data[1].f4.xyz = subgroupPartitionedExclusiveMinNV(data[2].f4.xyz, ballot);

+    data[1].f4     = subgroupPartitionedExclusiveMinNV(data[3].f4, ballot);

+

+    data[1].i4.x   = subgroupPartitionedExclusiveMinNV(data[0].i4.x, ballot);

+    data[1].i4.xy  = subgroupPartitionedExclusiveMinNV(data[1].i4.xy, ballot);

+    data[1].i4.xyz = subgroupPartitionedExclusiveMinNV(data[2].i4.xyz, ballot);

+    data[1].i4     = subgroupPartitionedExclusiveMinNV(data[3].i4, ballot);

+

+    data[2].u4.x   = subgroupPartitionedExclusiveMinNV(data[0].u4.x, ballot);

+    data[2].u4.xy  = subgroupPartitionedExclusiveMinNV(data[1].u4.xy, ballot);

+    data[2].u4.xyz = subgroupPartitionedExclusiveMinNV(data[2].u4.xyz, ballot);

+    data[2].u4     = subgroupPartitionedExclusiveMinNV(data[3].u4, ballot);

+

+    data[2].f4.x   = subgroupPartitionedExclusiveMaxNV(data[0].f4.x, ballot);

+    data[2].f4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].f4.xy, ballot);

+    data[2].f4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].f4.xyz, ballot);

+    data[2].f4     = subgroupPartitionedExclusiveMaxNV(data[3].f4, ballot);

+

+    data[2].i4.x   = subgroupPartitionedExclusiveMaxNV(data[0].i4.x, ballot);

+    data[2].i4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].i4.xy, ballot);

+    data[2].i4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].i4.xyz, ballot);

+    data[2].i4     = subgroupPartitionedExclusiveMaxNV(data[3].i4, ballot);

+

+    data[2].u4.x   = subgroupPartitionedExclusiveMaxNV(data[0].u4.x, ballot);

+    data[2].u4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].u4.xy, ballot);

+    data[2].u4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].u4.xyz, ballot);

+    data[2].u4     = subgroupPartitionedExclusiveMaxNV(data[3].u4, ballot);

+

+    data[2].i4.x   = subgroupPartitionedExclusiveAndNV(data[0].i4.x, ballot);

+    data[2].i4.xy  = subgroupPartitionedExclusiveAndNV(data[1].i4.xy, ballot);

+    data[2].i4.xyz = subgroupPartitionedExclusiveAndNV(data[2].i4.xyz, ballot);

+    data[2].i4     = subgroupPartitionedExclusiveAndNV(data[3].i4, ballot);

+

+    data[2].u4.x   = subgroupPartitionedExclusiveAndNV(data[0].u4.x, ballot);

+    data[2].u4.xy  = subgroupPartitionedExclusiveAndNV(data[1].u4.xy, ballot);

+    data[2].u4.xyz = subgroupPartitionedExclusiveAndNV(data[2].u4.xyz, ballot);

+    data[2].u4     = subgroupPartitionedExclusiveAndNV(data[3].u4, ballot);

+

+    data[3].i4.x   =   int(subgroupPartitionedExclusiveAndNV(data[0].i4.x < 0, ballot));

+    data[3].i4.xy  = ivec2(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[3].i4.xyz = ivec3(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[3].i4     = ivec4(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[3].i4.x   = subgroupPartitionedExclusiveOrNV(data[0].i4.x, ballot);

+    data[3].i4.xy  = subgroupPartitionedExclusiveOrNV(data[1].i4.xy, ballot);

+    data[3].i4.xyz = subgroupPartitionedExclusiveOrNV(data[2].i4.xyz, ballot);

+    data[3].i4     = subgroupPartitionedExclusiveOrNV(data[3].i4, ballot);

+

+    data[3].u4.x   = subgroupPartitionedExclusiveOrNV(data[0].u4.x, ballot);

+    data[3].u4.xy  = subgroupPartitionedExclusiveOrNV(data[1].u4.xy, ballot);

+    data[3].u4.xyz = subgroupPartitionedExclusiveOrNV(data[2].u4.xyz, ballot);

+    data[3].u4     = subgroupPartitionedExclusiveOrNV(data[3].u4, ballot);

+

+    data[3].i4.x   =   int(subgroupPartitionedExclusiveOrNV(data[0].i4.x < 0, ballot));

+    data[3].i4.xy  = ivec2(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[3].i4.xyz = ivec3(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[3].i4     = ivec4(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[3].i4.x   = subgroupPartitionedExclusiveXorNV(data[0].i4.x, ballot);

+    data[3].i4.xy  = subgroupPartitionedExclusiveXorNV(data[1].i4.xy, ballot);

+    data[3].i4.xyz = subgroupPartitionedExclusiveXorNV(data[2].i4.xyz, ballot);

+    data[3].i4     = subgroupPartitionedExclusiveXorNV(data[3].i4, ballot);

+

+    data[0].u4.x   = subgroupPartitionedExclusiveXorNV(data[0].u4.x, ballot);

+    data[0].u4.xy  = subgroupPartitionedExclusiveXorNV(data[1].u4.xy, ballot);

+    data[0].u4.xyz = subgroupPartitionedExclusiveXorNV(data[2].u4.xyz, ballot);

+    data[0].u4     = subgroupPartitionedExclusiveXorNV(data[3].u4, ballot);

+

+    data[0].i4.x   =   int(subgroupPartitionedExclusiveXorNV(data[0].i4.x < 0, ballot));

+    data[0].i4.xy  = ivec2(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[0].i4.xyz = ivec3(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[0].i4     = ivec4(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));

+}

diff --git a/Test/glsl.es320.subgroupQuad.comp b/Test/glsl.es320.subgroupQuad.comp
new file mode 100644
index 0000000..5394999
--- /dev/null
+++ b/Test/glsl.es320.subgroupQuad.comp
@@ -0,0 +1,97 @@
+#version 320 es

+

+#extension GL_KHR_shader_subgroup_quad: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+} data[4];

+

+void main()

+{

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

+

+    data[0].f4.x   = subgroupQuadBroadcast(data[0].f4.x, 1u);

+    data[0].f4.xy  = subgroupQuadBroadcast(data[1].f4.xy, 1u);

+    data[0].f4.xyz = subgroupQuadBroadcast(data[2].f4.xyz, 1u);

+    data[0].f4     = subgroupQuadBroadcast(data[3].f4, 1u);

+

+    data[0].i4.x   = subgroupQuadBroadcast(data[0].i4.x, 1u);

+    data[0].i4.xy  = subgroupQuadBroadcast(data[1].i4.xy, 1u);

+    data[0].i4.xyz = subgroupQuadBroadcast(data[2].i4.xyz, 1u);

+    data[0].i4     = subgroupQuadBroadcast(data[3].i4, 1u);

+

+    data[0].u4.x   = subgroupQuadBroadcast(data[0].u4.x, 1u);

+    data[0].u4.xy  = subgroupQuadBroadcast(data[1].u4.xy, 1u);

+    data[0].u4.xyz = subgroupQuadBroadcast(data[2].u4.xyz, 1u);

+    data[0].u4     = subgroupQuadBroadcast(data[3].u4, 1u);

+

+    data[1].i4.x   =   int(subgroupQuadBroadcast(data[0].i4.x < 0, 1u));

+    data[1].i4.xy  = ivec2(subgroupQuadBroadcast(lessThan(data[1].i4.xy, ivec2(0)), 1u));

+    data[1].i4.xyz = ivec3(subgroupQuadBroadcast(lessThan(data[1].i4.xyz, ivec3(0)), 1u));

+    data[1].i4     = ivec4(subgroupQuadBroadcast(lessThan(data[1].i4, ivec4(0)), 1u));

+

+    data[1].f4.x   = subgroupQuadSwapHorizontal(data[0].f4.x);

+    data[1].f4.xy  = subgroupQuadSwapHorizontal(data[1].f4.xy);

+    data[1].f4.xyz = subgroupQuadSwapHorizontal(data[2].f4.xyz);

+    data[1].f4     = subgroupQuadSwapHorizontal(data[3].f4);

+

+    data[1].i4.x   = subgroupQuadSwapHorizontal(data[0].i4.x);

+    data[1].i4.xy  = subgroupQuadSwapHorizontal(data[1].i4.xy);

+    data[1].i4.xyz = subgroupQuadSwapHorizontal(data[2].i4.xyz);

+    data[1].i4     = subgroupQuadSwapHorizontal(data[3].i4);

+

+    data[1].u4.x   = subgroupQuadSwapHorizontal(data[0].u4.x);

+    data[1].u4.xy  = subgroupQuadSwapHorizontal(data[1].u4.xy);

+    data[1].u4.xyz = subgroupQuadSwapHorizontal(data[2].u4.xyz);

+    data[1].u4     = subgroupQuadSwapHorizontal(data[3].u4);

+

+    data[2].i4.x   =   int(subgroupQuadSwapHorizontal(data[0].i4.x < 0));

+    data[2].i4.xy  = ivec2(subgroupQuadSwapHorizontal(lessThan(data[1].i4.xy, ivec2(0))));

+    data[2].i4.xyz = ivec3(subgroupQuadSwapHorizontal(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[2].i4     = ivec4(subgroupQuadSwapHorizontal(lessThan(data[1].i4, ivec4(0))));

+

+    data[2].f4.x   = subgroupQuadSwapVertical(data[0].f4.x);

+    data[2].f4.xy  = subgroupQuadSwapVertical(data[1].f4.xy);

+    data[2].f4.xyz = subgroupQuadSwapVertical(data[2].f4.xyz);

+    data[2].f4     = subgroupQuadSwapVertical(data[3].f4);

+

+    data[2].i4.x   = subgroupQuadSwapVertical(data[0].i4.x);

+    data[2].i4.xy  = subgroupQuadSwapVertical(data[1].i4.xy);

+    data[2].i4.xyz = subgroupQuadSwapVertical(data[2].i4.xyz);

+    data[2].i4     = subgroupQuadSwapVertical(data[3].i4);

+

+    data[2].u4.x   = subgroupQuadSwapVertical(data[0].u4.x);

+    data[2].u4.xy  = subgroupQuadSwapVertical(data[1].u4.xy);

+    data[2].u4.xyz = subgroupQuadSwapVertical(data[2].u4.xyz);

+    data[2].u4     = subgroupQuadSwapVertical(data[3].u4);

+

+    data[3].i4.x   =   int(subgroupQuadSwapVertical(data[0].i4.x < 0));

+    data[3].i4.xy  = ivec2(subgroupQuadSwapVertical(lessThan(data[1].i4.xy, ivec2(0))));

+    data[3].i4.xyz = ivec3(subgroupQuadSwapVertical(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[3].i4     = ivec4(subgroupQuadSwapVertical(lessThan(data[1].i4, ivec4(0))));

+

+    data[3].f4.x   = subgroupQuadSwapDiagonal(data[0].f4.x);

+    data[3].f4.xy  = subgroupQuadSwapDiagonal(data[1].f4.xy);

+    data[3].f4.xyz = subgroupQuadSwapDiagonal(data[2].f4.xyz);

+    data[3].f4     = subgroupQuadSwapDiagonal(data[3].f4);

+

+    data[3].i4.x   = subgroupQuadSwapDiagonal(data[0].i4.x);

+    data[3].i4.xy  = subgroupQuadSwapDiagonal(data[1].i4.xy);

+    data[3].i4.xyz = subgroupQuadSwapDiagonal(data[2].i4.xyz);

+    data[3].i4     = subgroupQuadSwapDiagonal(data[3].i4);

+

+    data[3].u4.x   = subgroupQuadSwapDiagonal(data[0].u4.x);

+    data[3].u4.xy  = subgroupQuadSwapDiagonal(data[1].u4.xy);

+    data[3].u4.xyz = subgroupQuadSwapDiagonal(data[2].u4.xyz);

+    data[3].u4     = subgroupQuadSwapDiagonal(data[3].u4);

+

+    data[3].i4.x   =   int(subgroupQuadSwapDiagonal(data[0].i4.x < 0));

+    data[3].i4.xy  = ivec2(subgroupQuadSwapDiagonal(lessThan(data[1].i4.xy, ivec2(0))));

+    data[3].i4.xyz = ivec3(subgroupQuadSwapDiagonal(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[3].i4     = ivec4(subgroupQuadSwapDiagonal(lessThan(data[1].i4, ivec4(0))));

+}

diff --git a/Test/glsl.es320.subgroupShuffle.comp b/Test/glsl.es320.subgroupShuffle.comp
new file mode 100644
index 0000000..1ad480d
--- /dev/null
+++ b/Test/glsl.es320.subgroupShuffle.comp
@@ -0,0 +1,57 @@
+#version 320 es

+

+#extension GL_KHR_shader_subgroup_shuffle: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+} data[4];

+

+void main()

+{

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

+

+    data[0].f4.x   = subgroupShuffle(data[0].f4.x,    invocation);

+    data[0].f4.xy  = subgroupShuffle(data[1].f4.xy,   invocation);

+    data[0].f4.xyz = subgroupShuffle(data[2].f4.xyz,  invocation);

+    data[0].f4     = subgroupShuffle(data[3].f4,      invocation);

+

+    data[0].i4.x   = subgroupShuffle(data[0].i4.x,    invocation);

+    data[0].i4.xy  = subgroupShuffle(data[1].i4.xy,   invocation);

+    data[0].i4.xyz = subgroupShuffle(data[2].i4.xyz,  invocation);

+    data[0].i4     = subgroupShuffle(data[3].i4,      invocation);

+

+    data[1].u4.x   = subgroupShuffle(data[0].u4.x,    invocation);

+    data[1].u4.xy  = subgroupShuffle(data[1].u4.xy,   invocation);

+    data[1].u4.xyz = subgroupShuffle(data[2].u4.xyz,  invocation);

+    data[1].u4     = subgroupShuffle(data[3].u4,      invocation);

+

+    data[1].i4.x   =   int(subgroupShuffle(data[0].i4.x < 0,                   invocation));

+    data[1].i4.xy  = ivec2(subgroupShuffle(lessThan(data[1].i4.xy, ivec2(0)),  invocation));

+    data[1].i4.xyz = ivec3(subgroupShuffle(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+    data[1].i4     = ivec4(subgroupShuffle(lessThan(data[1].i4, ivec4(0)),     invocation));

+

+    data[2].f4.x   = subgroupShuffleXor(data[0].f4.x,    invocation);

+    data[2].f4.xy  = subgroupShuffleXor(data[1].f4.xy,   invocation);

+    data[2].f4.xyz = subgroupShuffleXor(data[2].f4.xyz,  invocation);

+    data[2].f4     = subgroupShuffleXor(data[3].f4,      invocation);

+

+    data[2].i4.x   = subgroupShuffleXor(data[0].i4.x,    invocation);

+    data[2].i4.xy  = subgroupShuffleXor(data[1].i4.xy,   invocation);

+    data[2].i4.xyz = subgroupShuffleXor(data[2].i4.xyz,  invocation);

+    data[2].i4     = subgroupShuffleXor(data[3].i4,      invocation);

+

+    data[3].u4.x   = subgroupShuffleXor(data[0].u4.x,    invocation);

+    data[3].u4.xy  = subgroupShuffleXor(data[1].u4.xy,   invocation);

+    data[3].u4.xyz = subgroupShuffleXor(data[2].u4.xyz,  invocation);

+    data[3].u4     = subgroupShuffleXor(data[3].u4,      invocation);

+

+    data[3].i4.x   =   int(subgroupShuffleXor(data[0].i4.x < 0,                   invocation));

+    data[3].i4.xy  = ivec2(subgroupShuffleXor(lessThan(data[1].i4.xy, ivec2(0)),  invocation));

+    data[3].i4.xyz = ivec3(subgroupShuffleXor(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+    data[3].i4     = ivec4(subgroupShuffleXor(lessThan(data[1].i4, ivec4(0)),     invocation));

+}

diff --git a/Test/glsl.es320.subgroupShuffleRelative.comp b/Test/glsl.es320.subgroupShuffleRelative.comp
new file mode 100644
index 0000000..7c94ec7
--- /dev/null
+++ b/Test/glsl.es320.subgroupShuffleRelative.comp
@@ -0,0 +1,57 @@
+#version 320 es

+

+#extension GL_KHR_shader_subgroup_shuffle_relative: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+} data[4];

+

+void main()

+{

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

+

+    data[0].f4.x   = subgroupShuffleUp(data[0].f4.x,    invocation);

+    data[0].f4.xy  = subgroupShuffleUp(data[1].f4.xy,   invocation);

+    data[0].f4.xyz = subgroupShuffleUp(data[2].f4.xyz,  invocation);

+    data[0].f4     = subgroupShuffleUp(data[3].f4,      invocation);

+

+    data[0].i4.x   = subgroupShuffleUp(data[0].i4.x,    invocation);

+    data[0].i4.xy  = subgroupShuffleUp(data[1].i4.xy,   invocation);

+    data[0].i4.xyz = subgroupShuffleUp(data[2].i4.xyz,  invocation);

+    data[0].i4     = subgroupShuffleUp(data[3].i4,      invocation);

+

+    data[1].u4.x   = subgroupShuffleUp(data[0].u4.x,    invocation);

+    data[1].u4.xy  = subgroupShuffleUp(data[1].u4.xy,   invocation);

+    data[1].u4.xyz = subgroupShuffleUp(data[2].u4.xyz,  invocation);

+    data[1].u4     = subgroupShuffleUp(data[3].u4,      invocation);

+

+    data[1].i4.x   =   int(subgroupShuffleUp(data[0].i4.x < 0,                   invocation));

+    data[1].i4.xy  = ivec2(subgroupShuffleUp(lessThan(data[1].i4.xy, ivec2(0)),  invocation));

+    data[1].i4.xyz = ivec3(subgroupShuffleUp(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+    data[1].i4     = ivec4(subgroupShuffleUp(lessThan(data[1].i4, ivec4(0)),     invocation));

+

+    data[2].f4.x   = subgroupShuffleDown(data[0].f4.x,    invocation);

+    data[2].f4.xy  = subgroupShuffleDown(data[1].f4.xy,   invocation);

+    data[2].f4.xyz = subgroupShuffleDown(data[2].f4.xyz,  invocation);

+    data[2].f4     = subgroupShuffleDown(data[3].f4,      invocation);

+

+    data[2].i4.x   = subgroupShuffleDown(data[0].i4.x,    invocation);

+    data[2].i4.xy  = subgroupShuffleDown(data[1].i4.xy,   invocation);

+    data[2].i4.xyz = subgroupShuffleDown(data[2].i4.xyz,  invocation);

+    data[2].i4     = subgroupShuffleDown(data[3].i4,      invocation);

+

+    data[3].u4.x   = subgroupShuffleDown(data[0].u4.x,    invocation);

+    data[3].u4.xy  = subgroupShuffleDown(data[1].u4.xy,   invocation);

+    data[3].u4.xyz = subgroupShuffleDown(data[2].u4.xyz,  invocation);

+    data[3].u4     = subgroupShuffleDown(data[3].u4,      invocation);

+

+    data[3].i4.x   =   int(subgroupShuffleDown(data[0].i4.x < 0,                   invocation));

+    data[3].i4.xy  = ivec2(subgroupShuffleDown(lessThan(data[1].i4.xy, ivec2(0)),  invocation));

+    data[3].i4.xyz = ivec3(subgroupShuffleDown(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+    data[3].i4     = ivec4(subgroupShuffleDown(lessThan(data[1].i4, ivec4(0)),     invocation));

+}

diff --git a/Test/glsl.es320.subgroupVote.comp b/Test/glsl.es320.subgroupVote.comp
new file mode 100644
index 0000000..3c44ba4
--- /dev/null
+++ b/Test/glsl.es320.subgroupVote.comp
@@ -0,0 +1,43 @@
+#version 320 es

+

+#extension GL_KHR_shader_subgroup_vote: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    int r;

+} data[4];

+

+void main()

+{

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

+

+    if (subgroupAll(data[0].r < 0))

+    {

+        data[0].r = int(subgroupAllEqual(data[0].f4.x));

+        data[0].r = int(subgroupAllEqual(data[1].f4.xy));

+        data[0].r = int(subgroupAllEqual(data[2].f4.xyz));

+        data[0].r = int(subgroupAllEqual(data[3].f4));

+

+        data[0].r = int(subgroupAllEqual(data[0].i4.x));

+        data[0].r = int(subgroupAllEqual(data[1].i4.xy));

+        data[0].r = int(subgroupAllEqual(data[2].i4.xyz));

+        data[0].r = int(subgroupAllEqual(data[3].i4));

+

+        data[0].r = int(subgroupAllEqual(data[0].u4.x));

+        data[0].r = int(subgroupAllEqual(data[1].u4.xy));

+        data[0].r = int(subgroupAllEqual(data[2].u4.xyz));

+        data[0].r = int(subgroupAllEqual(data[3].u4));

+    }

+    else if (subgroupAny(data[1].r < 0))

+    {

+        data[1].r = int(int(subgroupAllEqual(data[0].i4.x < 0)));

+        data[1].r = int(ivec2(subgroupAllEqual(lessThan(data[1].i4.xy, ivec2(0)))));

+        data[1].r = int(ivec3(subgroupAllEqual(lessThan(data[1].i4.xyz, ivec3(0)))));

+        data[1].r = int(ivec4(subgroupAllEqual(lessThan(data[1].i4, ivec4(0)))));

+    }

+}

diff --git a/Test/hlsl.doLoop.frag b/Test/hlsl.doLoop.frag
index 0318dc8..8f4bfdc 100644
--- a/Test/hlsl.doLoop.frag
+++ b/Test/hlsl.doLoop.frag
@@ -1,9 +1,29 @@
+void f0() {
+    [unroll] do {} while (false);
+}
+
+void f1() {
+    [unroll] do {;} while (false);
+}
+
+float f2(float input) {
+    do { return (float4)input; } while (input > 2.0);
+}
+
+void f3(float input) {
+    do ++input; while (input < 10.0);
+}
+
+void f4(float input) {
+    do while (++input < 10.0); while (++input < 10.0); // nest while inside do-while
+}
+
 float4 PixelShaderFunction(float input) : COLOR0
 {
-    [unroll] do {} while (false);
-    [unroll] do {;} while (false);
-    do { return (float4)input; } while (input > 2.0);
-    do ++input; while (input < 10.0);
-    do while (++input < 10.0); while (++input < 10.0); // nest while inside do-while
+    f0();
+    f1();
+    f2(input);
+    f3(input);
+    f4(input);
     return (float4)input;
 }
diff --git a/Test/hlsl.earlydepthstencil.frag b/Test/hlsl.earlydepthstencil.frag
new file mode 100644
index 0000000..268baae
--- /dev/null
+++ b/Test/hlsl.earlydepthstencil.frag
@@ -0,0 +1,12 @@
+RWTexture2D<uint> Values;

+

+struct InputStruct {

+	float4 Position : SV_POSITION;

+};

+

+[earlydepthstencil]

+uint main(InputStruct input) : SV_Target {

+	uint oldVal;

+	InterlockedExchange(Values[uint2(input.Position.x, input.Position.y)], 1.0, oldVal);

+	return oldVal;

+}

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

+[maxvertexcount(4)]

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

+       inout LineStream<S> OutputStream)

+{

+    S s;

+    OutputStream.Append(s);

+}

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

+{

+    int d = 4;

+    int2 d2 = int2(5,d);

+    float  f1 = log2(5);

+    float2 f2 = log(d2);

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

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

+

+    int a = 5;

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

+    b *= b;

+    uint c = f32tof16(b);

+

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

+}
\ No newline at end of file
diff --git a/Test/hlsl.specConstant.frag b/Test/hlsl.specConstant.frag
new file mode 100755
index 0000000..ab2a815
--- /dev/null
+++ b/Test/hlsl.specConstant.frag
@@ -0,0 +1,15 @@
+[[vk::constant_id(0)]] const uint index = 2;

+

+static const uint array[] = { 10, 20, 30, 40 };

+

+float4 main( ) : SV_TARGET

+{

+    float4 r;

+    for(uint i = 0; i < array[index]; i++)

+        r = i;

+

+    r += index + index;

+    r += 2 * index;

+

+    return r;

+}

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

+

+layout(location=0) out vec4 color;

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale;

+} uPC;

+

+vec4 getColor2();

+float getScale();

+

+void main()

+{

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

+}

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

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale;

+} uPC;

+

+vec4

+getColor2()

+{

+	return uPC.color2;

+}

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

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale2;

+} uPC;

+

+float

+getScale()

+{

+	return uPC.scale2;

+}

+

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

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale;

+	float scale2;

+} uPC;

+

+float

+getScale()

+{

+	return uPC.scale;

+}

+

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

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale;

+} uPC;

+

+vec4

+getColor2()

+{

+	return uPC.color2;

+}

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

+

+layout(location=0) out vec4 color;

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale;

+} uPC;

+

+vec4 getColor2();

+float getScale();

+

+void main()

+{

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

+}

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

+

+layout(location=0) out vec4 color;

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale;

+} uPC;

+

+vec4 getColor2();

+float getScale();

+

+void main()

+{

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

+}

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

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale;

+} uPC;

+

+vec4

+getColor2()

+{

+	return uPC.color2;

+}

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

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale;

+} uPC;

+

+float

+getScale()

+{

+	return uPC.scale;

+}

diff --git a/Test/link.vk.multiBlocksValid.0.0.vert b/Test/link.vk.multiBlocksValid.0.0.vert
new file mode 100755
index 0000000..81747ec
--- /dev/null
+++ b/Test/link.vk.multiBlocksValid.0.0.vert
@@ -0,0 +1,49 @@
+#version 430
+
+// OK: different instance names is allowed in other unit
+layout (std140, binding = 0) uniform MatrixBlock
+{
+	mat4 uProj;
+	mat4 uWorld;
+} uM;
+
+// OK: other unit has it as anonymous, but that is allowed
+out Vertex
+{
+	vec4 v1;
+	vec4 v2;
+} oV;
+
+// OK: different instance names is allowed in other unit
+layout (std140, binding = 1) uniform ColorBlock
+{
+	vec4 color1;
+	bool b;
+	vec4 color2;
+	vec4 color3;
+} uC;
+
+// OK: different instance names is allowed in other unit
+layout (std430, binding = 1) buffer BufferBlock
+{
+	mat4 p;
+} uBuf;
+
+layout (std430, binding = 0) buffer SecondaryColorBlock
+{
+	vec4 c;
+} uColorBuf;
+
+vec4 getWorld();
+vec4 getColor2();
+
+out vec4 oColor;
+
+void
+main()
+{
+	oColor = uC.color1 * getColor2() * uColorBuf.c;
+	oV.v1 = uC.color1;
+
+	gl_Position = uM.uProj * getWorld();
+}
diff --git a/Test/link.vk.multiBlocksValid.0.1.vert b/Test/link.vk.multiBlocksValid.0.1.vert
new file mode 100755
index 0000000..5267778
--- /dev/null
+++ b/Test/link.vk.multiBlocksValid.0.1.vert
@@ -0,0 +1,46 @@
+#version 430
+
+// OK: different instance names is allowed in other unit
+layout (std140, binding = 1) uniform ColorBlock
+{
+	vec4 color1;
+	bool b;
+	vec4 color2;
+	vec4 color3;
+} uColor;
+
+// OK: different instance names is allowed in other unit
+layout (std430, binding = 1) buffer BufferBlock
+{
+	mat4 p;
+} uBuffer;
+
+// OK: different instance names is allowed in other unit
+layout (std140, binding = 0) uniform MatrixBlock
+{
+	mat4 uProj;
+	mat4 uWorld;
+} uMatrix;
+
+// OK, it's allowed for input/output interfaces to
+// be anonymous is one unit and not in another
+out Vertex
+{
+	vec4 v1;
+	vec4 v2;
+};
+
+
+in vec4 P;
+
+vec4 getColor2()
+{
+	return uColor.color2;
+}
+
+vec4 getWorld()
+{
+	v1 = vec4(1);
+	return uMatrix.uWorld * P;
+}
+
diff --git a/Test/link.vk.multiBlocksValid.1.0.geom b/Test/link.vk.multiBlocksValid.1.0.geom
new file mode 100755
index 0000000..9811b08
--- /dev/null
+++ b/Test/link.vk.multiBlocksValid.1.0.geom
@@ -0,0 +1,62 @@
+#version 430
+
+layout (triangles) in;
+layout (triangle_strip, max_vertices = 3) out;
+
+// OK: different instance names is allowed
+layout (std140, binding = 0) uniform MatrixBlock
+{
+	mat4 uProj;
+	mat4 uWorld;
+} uM;
+
+// Verify that in/out blocks with same block name work
+in Vertex
+{
+	vec4 v1;
+	vec4 v2;
+} iV[3];
+
+out Vertex
+{
+	vec4 val1;
+} oV;
+
+// OK: different instance names is allowed
+layout (std140, binding = 1) uniform ColorBlock
+{
+	vec4 color1;
+	bool b;
+	vec4 color2;
+	vec4 color3;
+} uC;
+
+// OK: different instance names is allowed
+layout (std430, binding = 1) buffer BufferBlock
+{
+	mat4 p;
+} uBuf;
+
+vec4 getWorld(int i);
+vec4 getColor2();
+
+out vec4 oColor;
+
+float globalF;
+
+void
+main()
+{
+	oColor = uC.color1 * getColor2();
+
+	globalF = 1.0;
+
+	for (int i = 0; i < 3; i++)
+	{
+		gl_Position = uM.uProj * getWorld(i);
+		oV.val1 = uC.color1 + iV[i].v2 * globalF;
+		EmitVertex();
+	}
+
+	EndPrimitive();
+}
diff --git a/Test/link.vk.multiBlocksValid.1.1.geom b/Test/link.vk.multiBlocksValid.1.1.geom
new file mode 100755
index 0000000..f372343
--- /dev/null
+++ b/Test/link.vk.multiBlocksValid.1.1.geom
@@ -0,0 +1,54 @@
+#version 430
+
+layout (triangles) in;
+layout (triangle_strip, max_vertices = 3) out;
+
+// OK: different instance names is allowed
+layout (std140, binding = 1) uniform ColorBlock
+{
+	vec4 color1;
+	bool b;
+	vec4 color2;
+	vec4 color3;
+} uColor;
+
+// OK: different instance names is allowed
+layout (std430, binding = 1) buffer BufferBlock
+{
+	mat4 p;
+} uBuffer;
+
+// OK: different instance names is allowed
+layout (std140, binding = 0) uniform MatrixBlock
+{
+	mat4 uProj;
+	mat4 uWorld;
+} uMatrix;
+
+// OK, it's allowed for input/output interfaces to
+// be anonymous is one unit and not in another
+out Vertex
+{
+	vec4 val1;
+};
+
+in Vertex
+{
+	vec4 v1;
+	vec4 v2;
+} iVV[];
+
+
+in vec4 P[3];
+
+vec4 getColor2()
+{
+	return uColor.color2;
+}
+
+vec4 getWorld(int i)
+{
+	val1 = vec4(1);
+	return uMatrix.uWorld * iVV[i].v1;
+}
+
diff --git a/Test/link.vk.pcNamingInvalid.0.0.vert b/Test/link.vk.pcNamingInvalid.0.0.vert
new file mode 100755
index 0000000..26a7586
--- /dev/null
+++ b/Test/link.vk.pcNamingInvalid.0.0.vert
@@ -0,0 +1,21 @@
+#version 450
+layout (push_constant) uniform Block
+{
+	mat4 uWorld;
+	mat4 uProj;
+	vec4 color1;
+	vec4 color2;
+} a;
+
+vec4 getWorld();
+vec4 getColor2();
+
+out vec4 oColor;
+
+void
+main()
+{
+	oColor = a.color1 * getColor2();
+
+	gl_Position = a.uProj * getWorld();
+}
diff --git a/Test/link.vk.pcNamingInvalid.0.1.vert b/Test/link.vk.pcNamingInvalid.0.1.vert
new file mode 100755
index 0000000..47d2314
--- /dev/null
+++ b/Test/link.vk.pcNamingInvalid.0.1.vert
@@ -0,0 +1,22 @@
+#version 450
+
+layout (push_constant) uniform Block2
+{
+	mat4 uWorld;
+	mat4 uProj;
+	vec4 color1;
+	vec4 color2;
+} a;
+
+in vec4 P;
+
+vec4 getColor2()
+{
+	return a.color2;
+}
+
+vec4 getWorld()
+{
+	return a.uWorld * P;
+}
+
diff --git a/Test/link.vk.pcNamingValid.0.0.vert b/Test/link.vk.pcNamingValid.0.0.vert
new file mode 100755
index 0000000..7df2190
--- /dev/null
+++ b/Test/link.vk.pcNamingValid.0.0.vert
@@ -0,0 +1,21 @@
+#version 450
+layout (push_constant) uniform PCBlock
+{
+	mat4 uWorld;
+	mat4 uProj;
+	vec4 color1;
+	vec4 color2;
+} a;
+
+vec4 getWorld();
+vec4 getColor2();
+
+layout(location = 0) out vec4 oColor;
+
+void
+main()
+{
+	oColor = a.color1 * getColor2();
+
+	gl_Position = a.uProj * getWorld();
+}
diff --git a/Test/link.vk.pcNamingValid.0.1.vert b/Test/link.vk.pcNamingValid.0.1.vert
new file mode 100755
index 0000000..9a4b41b
--- /dev/null
+++ b/Test/link.vk.pcNamingValid.0.1.vert
@@ -0,0 +1,22 @@
+#version 450
+
+layout (push_constant) uniform PCBlock
+{
+	mat4 uWorld;
+	mat4 uProj;
+	vec4 color1;
+	vec4 color2;
+} b;
+
+layout(location = 0) in vec4 P;
+
+vec4 getColor2()
+{
+	return b.color2;
+}
+
+vec4 getWorld()
+{
+	return b.uWorld * P;
+}
+
diff --git a/Test/link1.vk.frag b/Test/link1.vk.frag
index 167e78e..c860f64 100644
--- a/Test/link1.vk.frag
+++ b/Test/link1.vk.frag
@@ -10,8 +10,8 @@
 int c[];

 int i;

 

-buffer bnameRuntime  { float r[]; };

-buffer bnameImplicit { float m[]; };

+layout (binding = 0) buffer bnameRuntime  { float r[]; };

+layout (binding = 1) buffer bnameImplicit { float m[]; };

 

 void main()

 {

diff --git a/Test/link2.vk.frag b/Test/link2.vk.frag
index b80402c..b83f869 100644
--- a/Test/link2.vk.frag
+++ b/Test/link2.vk.frag
@@ -8,8 +8,8 @@
 int c[7];

 int i;

 

-buffer bnameRuntime  { float r[]; };

-buffer bnameImplicit { float m[4]; };

+layout (binding = 0) buffer bnameRuntime  { float r[]; };

+layout (binding = 1) buffer bnameImplicit { float m[4]; };

 

 vec4 getColor()

 {

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/rayQuery-allOps.Error.rgen b/Test/rayQuery-allOps.Error.rgen
new file mode 100644
index 0000000..d25a183
--- /dev/null
+++ b/Test/rayQuery-allOps.Error.rgen
@@ -0,0 +1,212 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_ray_query : enable
+
+struct Ray
+{
+    vec3 pos;
+    float tmin;
+    vec3 dir;
+    float tmax;
+};
+
+layout(std430, set = 0, binding = 0) buffer Log
+{
+    uint x;
+    uint y;
+};
+
+layout(binding = 1, set = 0) uniform accelerationStructureEXT rtas;
+layout(std430, set = 0, binding = 2) buffer Rays { Ray rays[]; };
+
+void doSomething()
+{
+    x = 0;
+    y = 0;
+}
+
+Ray makeRayDesc()
+{
+    Ray ray;
+    ray.pos= vec3(0,0,0);
+    ray.dir = vec3(1,0,0);
+    ray.tmin = 0.0f;
+    ray.tmax = 9999.0;
+    return ray;
+}
+
+void main()
+{
+    Ray ray = makeRayDesc();
+    rayQueryEXT rayQuery;
+    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsNoneEXT, 0xFF, ray.pos, ray.tmin, ray.dir, ray.tmax);
+
+    mat4x3 _mat4x3;
+    mat3x4 _mat3x4;
+
+    while (rayQueryProceedEXT(rayQuery) == 1)
+    {
+        int candidateType = rayQueryGetIntersectionTypeEXT(rayQuery, false);
+        switch(candidateType)
+        {
+            case gl_RayQueryCandidateIntersectionTriangleEXT:
+
+                rayQueryTerminateEXT(rayQuery);
+                _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
+                _mat3x4 = transpose(_mat4x3);
+                rayQueryConfirmIntersectionEXT(rayQuery);
+
+                if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true) == 1)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true) == 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true))
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceIdEXT(rayQuery, true))
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true))
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionTEXT(rayQuery, true))
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQuery, true))
+                {
+                    doSomething();
+                }
+                break;
+
+            case gl_RayQueryCandidateIntersectionAABBEXT:
+            {
+                _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
+                _mat3x4 = transpose(_mat4x3);
+                if (rayQueryGetIntersectionCandidateAABBOpaqueEXT(rayQuery))
+                {
+                    doSomething();
+                }
+
+                int t = 1;
+                rayQueryGenerateIntersectionEXT(rayQuery, t);
+                rayQueryTerminateEXT(rayQuery);
+                break;
+            }
+        }
+    }
+
+    if(_mat3x4[0][0] == _mat4x3[0][0])
+    {
+        doSomething();
+    }
+
+    int committedStatus = rayQueryGetIntersectionTypeEXT(rayQuery, true);
+
+    switch(committedStatus)
+    {
+        case gl_RayQueryCommittedIntersectionNoneEXT :
+            _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, false);
+            _mat3x4 = transpose(_mat4x3);
+            break;
+
+        case gl_RayQueryCommittedIntersectionTriangleEXT :
+            _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, true);
+            _mat3x4 = transpose(_mat4x3);
+
+            if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true))
+            {
+                doSomething();
+            }
+
+            if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true) == 0)
+            {
+                doSomething();
+            }
+            break;
+
+        case gl_RayQueryCommittedIntersectionGeneratedEXT :
+
+            if(rayQueryGetIntersectionGeometryIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionInstanceIdEXT(rayQuery, true))
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true))
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true))
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionTEXT(rayQuery, true))
+            {
+                doSomething();
+            }
+            break;
+    }
+
+    if (_mat3x4[0][0] == _mat4x3[0][0])
+    {
+        doSomething();
+    }
+
+    if (rayQueryGetRayFlagsEXT(rayQuery))
+    {
+        doSomething();
+    }
+
+    if (rayQueryGetRayTMinEXT(rayQuery))
+    {
+        doSomething();
+    }
+
+    vec3 o = rayQueryGetWorldRayOriginEXT(rayQuery);
+    vec3 d = rayQueryGetWorldRayDirectionEXT(rayQuery);
+
+    if (o.x == d.z)
+    {
+        doSomething();
+    }
+}
diff --git a/Test/rayQuery-allOps.comp b/Test/rayQuery-allOps.comp
new file mode 100644
index 0000000..80f2593
--- /dev/null
+++ b/Test/rayQuery-allOps.comp
@@ -0,0 +1,212 @@
+#version 460
+#extension GL_EXT_ray_query : enable
+#extension GL_EXT_ray_flags_primitive_culling : enable
+
+struct Ray
+{
+    vec3 pos;
+    float tmin;
+    vec3 dir;
+    float tmax;
+};
+
+layout(std430, set = 0, binding = 0) buffer Log
+{
+    uint x;
+    uint y;
+};
+
+layout(binding = 1, set = 0) uniform accelerationStructureEXT rtas;
+layout(std430, set = 0, binding = 2) buffer Rays { Ray rays[]; };
+
+void doSomething()
+{
+    x = 0;
+    y = 0;
+}
+
+Ray makeRayDesc()
+{
+    Ray ray;
+    ray.pos= vec3(0,0,0);
+    ray.dir = vec3(1,0,0);
+    ray.tmin = 0.0f;
+    ray.tmax = 9999.0;
+    return ray;
+}
+
+void main()
+{
+    Ray ray = makeRayDesc();
+    rayQueryEXT rayQuery;
+    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsNoneEXT, 0xFF, ray.pos, ray.tmin, ray.dir, ray.tmax);
+
+    mat4x3 _mat4x3;
+    mat3x4 _mat3x4;
+
+    while (rayQueryProceedEXT(rayQuery))
+    {
+        uint candidateType = rayQueryGetIntersectionTypeEXT(rayQuery, false);
+        switch(candidateType)
+        {
+            case gl_RayQueryCandidateIntersectionTriangleEXT:
+
+                rayQueryTerminateEXT(rayQuery);
+                _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
+                _mat3x4 = transpose(_mat4x3);
+                rayQueryConfirmIntersectionEXT(rayQuery);
+
+                if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true))
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true).x == 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceIdEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true).x > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true).x > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionTEXT(rayQuery, true) > 0.f)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+                break;
+
+            case gl_RayQueryCandidateIntersectionAABBEXT:
+            {
+                _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
+                _mat3x4 = transpose(_mat4x3);
+                if (rayQueryGetIntersectionCandidateAABBOpaqueEXT(rayQuery))
+                {
+                    doSomething();
+                }
+
+                float t = 0.5;
+                rayQueryGenerateIntersectionEXT(rayQuery, t);
+                rayQueryTerminateEXT(rayQuery);
+                break;
+            }
+        }
+    }
+
+    if(_mat3x4[0][0] == _mat4x3[0][0])
+    {
+        doSomething();
+    }
+
+    uint committedStatus = rayQueryGetIntersectionTypeEXT(rayQuery, true);
+
+    switch(committedStatus)
+    {
+        case gl_RayQueryCommittedIntersectionNoneEXT :
+            _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, false);
+            _mat3x4 = transpose(_mat4x3);
+            break;
+
+        case gl_RayQueryCommittedIntersectionTriangleEXT :
+            _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, true);
+            _mat3x4 = transpose(_mat4x3);
+
+            if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true))
+            {
+                doSomething();
+            }
+
+            if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true).y == 0)
+            {
+                doSomething();
+            }
+            break;
+
+        case gl_RayQueryCommittedIntersectionGeneratedEXT :
+
+            if(rayQueryGetIntersectionGeometryIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionInstanceIdEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true).z > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true).x > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionTEXT(rayQuery, true) > 0.f)
+            {
+                doSomething();
+            }
+            break;
+    }
+
+    if (_mat3x4[0][0] == _mat4x3[0][0])
+    {
+        doSomething();
+    }
+
+    if (rayQueryGetRayFlagsEXT(rayQuery) > gl_RayFlagsSkipTrianglesEXT)
+    {
+        doSomething();
+    }
+
+    if (rayQueryGetRayTMinEXT(rayQuery) > 0.0)
+    {
+        doSomething();
+    }
+
+    vec3 o = rayQueryGetWorldRayOriginEXT(rayQuery);
+    vec3 d = rayQueryGetWorldRayDirectionEXT(rayQuery);
+
+    if (o.x == d.z)
+    {
+        doSomething();
+    }
+}
diff --git a/Test/rayQuery-allOps.frag b/Test/rayQuery-allOps.frag
new file mode 100644
index 0000000..9fdf0c0
--- /dev/null
+++ b/Test/rayQuery-allOps.frag
@@ -0,0 +1,212 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_ray_query : enable
+
+struct Ray
+{
+    vec3 pos;
+    float tmin;
+    vec3 dir;
+    float tmax;
+};
+
+layout(std430, set = 0, binding = 0) buffer Log
+{
+    uint x;
+    uint y;
+};
+
+layout(binding = 1, set = 0) uniform accelerationStructureEXT rtas;
+layout(std430, set = 0, binding = 2) buffer Rays { Ray rays[]; };
+
+void doSomething()
+{
+    x = 0;
+    y = 0;
+}
+
+Ray makeRayDesc()
+{
+    Ray ray;
+    ray.pos= vec3(0,0,0);
+    ray.dir = vec3(1,0,0);
+    ray.tmin = 0.0f;
+    ray.tmax = 9999.0;
+    return ray;
+}
+
+void main()
+{
+    Ray ray = makeRayDesc();
+    rayQueryEXT rayQuery;
+    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsNoneEXT, 0xFF, ray.pos, ray.tmin, ray.dir, ray.tmax);
+
+    mat4x3 _mat4x3;
+    mat3x4 _mat3x4;
+
+    while (rayQueryProceedEXT(rayQuery))
+    {
+        uint candidateType = rayQueryGetIntersectionTypeEXT(rayQuery, false);
+        switch(candidateType)
+        {
+            case gl_RayQueryCandidateIntersectionTriangleEXT:
+
+                rayQueryTerminateEXT(rayQuery);
+                _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
+                _mat3x4 = transpose(_mat4x3);
+                rayQueryConfirmIntersectionEXT(rayQuery);
+
+                if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true))
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true).x == 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceIdEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true).x > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true).x > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionTEXT(rayQuery, true) > 0.f)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+                break;
+
+            case gl_RayQueryCandidateIntersectionAABBEXT:
+            {
+                _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
+                _mat3x4 = transpose(_mat4x3);
+                if (rayQueryGetIntersectionCandidateAABBOpaqueEXT(rayQuery))
+                {
+                    doSomething();
+                }
+
+                float t = 0.5;
+                rayQueryGenerateIntersectionEXT(rayQuery, t);
+                rayQueryTerminateEXT(rayQuery);
+                break;
+            }
+        }
+    }
+
+    if(_mat3x4[0][0] == _mat4x3[0][0])
+    {
+        doSomething();
+    }
+
+    uint committedStatus = rayQueryGetIntersectionTypeEXT(rayQuery, true);
+
+    switch(committedStatus)
+    {
+        case gl_RayQueryCommittedIntersectionNoneEXT :
+            _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, false);
+            _mat3x4 = transpose(_mat4x3);
+            break;
+
+        case gl_RayQueryCommittedIntersectionTriangleEXT :
+            _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, true);
+            _mat3x4 = transpose(_mat4x3);
+
+            if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true))
+            {
+                doSomething();
+            }
+
+            if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true).y == 0)
+            {
+                doSomething();
+            }
+            break;
+
+        case gl_RayQueryCommittedIntersectionGeneratedEXT :
+
+            if(rayQueryGetIntersectionGeometryIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionInstanceIdEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true).z > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true).x > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionTEXT(rayQuery, true) > 0.f)
+            {
+                doSomething();
+            }
+            break;
+    }
+
+    if (_mat3x4[0][0] == _mat4x3[0][0])
+    {
+        doSomething();
+    }
+
+    if (rayQueryGetRayFlagsEXT(rayQuery) > 0)
+    {
+        doSomething();
+    }
+
+    if (rayQueryGetRayTMinEXT(rayQuery) > 0.0)
+    {
+        doSomething();
+    }
+
+    vec3 o = rayQueryGetWorldRayOriginEXT(rayQuery);
+    vec3 d = rayQueryGetWorldRayDirectionEXT(rayQuery);
+
+    if (o.x == d.z)
+    {
+        doSomething();
+    }
+}
diff --git a/Test/rayQuery-allOps.rgen b/Test/rayQuery-allOps.rgen
new file mode 100644
index 0000000..9fdf0c0
--- /dev/null
+++ b/Test/rayQuery-allOps.rgen
@@ -0,0 +1,212 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_ray_query : enable
+
+struct Ray
+{
+    vec3 pos;
+    float tmin;
+    vec3 dir;
+    float tmax;
+};
+
+layout(std430, set = 0, binding = 0) buffer Log
+{
+    uint x;
+    uint y;
+};
+
+layout(binding = 1, set = 0) uniform accelerationStructureEXT rtas;
+layout(std430, set = 0, binding = 2) buffer Rays { Ray rays[]; };
+
+void doSomething()
+{
+    x = 0;
+    y = 0;
+}
+
+Ray makeRayDesc()
+{
+    Ray ray;
+    ray.pos= vec3(0,0,0);
+    ray.dir = vec3(1,0,0);
+    ray.tmin = 0.0f;
+    ray.tmax = 9999.0;
+    return ray;
+}
+
+void main()
+{
+    Ray ray = makeRayDesc();
+    rayQueryEXT rayQuery;
+    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsNoneEXT, 0xFF, ray.pos, ray.tmin, ray.dir, ray.tmax);
+
+    mat4x3 _mat4x3;
+    mat3x4 _mat3x4;
+
+    while (rayQueryProceedEXT(rayQuery))
+    {
+        uint candidateType = rayQueryGetIntersectionTypeEXT(rayQuery, false);
+        switch(candidateType)
+        {
+            case gl_RayQueryCandidateIntersectionTriangleEXT:
+
+                rayQueryTerminateEXT(rayQuery);
+                _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
+                _mat3x4 = transpose(_mat4x3);
+                rayQueryConfirmIntersectionEXT(rayQuery);
+
+                if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true))
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true).x == 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceIdEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true).x > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true).x > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionTEXT(rayQuery, true) > 0.f)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+                break;
+
+            case gl_RayQueryCandidateIntersectionAABBEXT:
+            {
+                _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
+                _mat3x4 = transpose(_mat4x3);
+                if (rayQueryGetIntersectionCandidateAABBOpaqueEXT(rayQuery))
+                {
+                    doSomething();
+                }
+
+                float t = 0.5;
+                rayQueryGenerateIntersectionEXT(rayQuery, t);
+                rayQueryTerminateEXT(rayQuery);
+                break;
+            }
+        }
+    }
+
+    if(_mat3x4[0][0] == _mat4x3[0][0])
+    {
+        doSomething();
+    }
+
+    uint committedStatus = rayQueryGetIntersectionTypeEXT(rayQuery, true);
+
+    switch(committedStatus)
+    {
+        case gl_RayQueryCommittedIntersectionNoneEXT :
+            _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, false);
+            _mat3x4 = transpose(_mat4x3);
+            break;
+
+        case gl_RayQueryCommittedIntersectionTriangleEXT :
+            _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, true);
+            _mat3x4 = transpose(_mat4x3);
+
+            if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true))
+            {
+                doSomething();
+            }
+
+            if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true).y == 0)
+            {
+                doSomething();
+            }
+            break;
+
+        case gl_RayQueryCommittedIntersectionGeneratedEXT :
+
+            if(rayQueryGetIntersectionGeometryIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionInstanceIdEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true).z > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true).x > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionTEXT(rayQuery, true) > 0.f)
+            {
+                doSomething();
+            }
+            break;
+    }
+
+    if (_mat3x4[0][0] == _mat4x3[0][0])
+    {
+        doSomething();
+    }
+
+    if (rayQueryGetRayFlagsEXT(rayQuery) > 0)
+    {
+        doSomething();
+    }
+
+    if (rayQueryGetRayTMinEXT(rayQuery) > 0.0)
+    {
+        doSomething();
+    }
+
+    vec3 o = rayQueryGetWorldRayOriginEXT(rayQuery);
+    vec3 d = rayQueryGetWorldRayDirectionEXT(rayQuery);
+
+    if (o.x == d.z)
+    {
+        doSomething();
+    }
+}
diff --git a/Test/rayQuery-committed.Error.rgen b/Test/rayQuery-committed.Error.rgen
new file mode 100644
index 0000000..aeb8ec0
--- /dev/null
+++ b/Test/rayQuery-committed.Error.rgen
@@ -0,0 +1,105 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_ray_query : enable
+
+struct Ray
+{
+    vec3 pos;
+    float tmin;
+    vec3 dir;
+    float tmax;
+};
+
+layout(std430, set = 0, binding = 0) buffer Log
+{
+    uint x;
+    uint y;
+};
+
+layout(binding = 1, set = 0) uniform accelerationStructureEXT rtas;
+layout(std430, set = 0, binding = 2) buffer Rays { Ray rays[]; };
+
+void doSomething()
+{
+    x = 0;
+    y = 0;
+}
+
+uint launchIndex()
+{
+    return gl_LaunchIDNV.z*gl_LaunchSizeNV.x*gl_LaunchSizeNV.y + gl_LaunchIDNV.y*gl_LaunchSizeNV.x + gl_LaunchIDNV.x;
+}
+
+void main()
+{
+    uint index = launchIndex();
+    Ray ray = rays[index];
+    rayQueryEXT rayQuery;
+
+    bool committed_true = true;
+    bool committed_false = false;
+
+    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsOpaqueEXT, gl_RayFlagsCullBackFacingTrianglesEXT, ray.pos, ray.tmin, ray.dir, ray.tmax);
+    while (rayQueryProceedEXT(rayQuery))
+    {
+        mat4x3 mat_o2w;
+        mat4x3 mat_w2o;
+
+        uint candidateType = rayQueryGetIntersectionTypeEXT(rayQuery, committed_false);
+        if (candidateType == gl_RayQueryCandidateIntersectionTriangleEXT)
+        {
+            rayQueryTerminateEXT(rayQuery);
+
+            mat_o2w = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, committed_false);
+            mat_w2o = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, committed_false);
+
+            rayQueryConfirmIntersectionEXT(rayQuery);
+
+            if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, committed_true))
+            {
+                doSomething();
+            }
+            if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, committed_true).x == 0)
+            {
+                doSomething();
+            }
+            if (rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, committed_true) > 0)
+            {
+                doSomething();
+            }
+            if (rayQueryGetIntersectionInstanceIdEXT(rayQuery, committed_true) > 0)
+            {
+                doSomething();
+            }
+            if (rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, committed_true).x > 0)
+            {
+                doSomething();
+            }
+            if (rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, committed_true).x > 0)
+            {
+                doSomething();
+            }
+            if (rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, committed_true) > 0)
+            {
+                doSomething();
+            }
+            if (rayQueryGetIntersectionTEXT(rayQuery, committed_true) > 0.f)
+            {
+                doSomething();
+            }
+            if (rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQuery, committed_true) > 0)
+            {
+                doSomething();
+            }
+        }
+    }
+
+    uint committedStatus = rayQueryGetIntersectionTypeEXT(rayQuery, committed_true);
+    if (committedStatus == gl_RayQueryCommittedIntersectionGeneratedEXT)
+    {
+        if (rayQueryGetIntersectionGeometryIndexEXT(rayQuery, committed_true) > 0)
+        {
+            doSomething();
+        }
+    }
+}
diff --git a/Test/rayQuery-initialize.rgen b/Test/rayQuery-initialize.rgen
new file mode 100644
index 0000000..ff61800
--- /dev/null
+++ b/Test/rayQuery-initialize.rgen
@@ -0,0 +1,33 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_ray_query : enable
+
+struct Ray
+{
+    vec3 pos;
+    float tmin;
+    vec3 dir;
+    float tmax;
+};
+
+layout(binding = 0, set = 0) uniform accelerationStructureEXT rtas;
+layout(std430, set = 0, binding = 2) buffer Rays { Ray rays[]; };
+
+uint launchIndex()
+{
+    return gl_LaunchIDNV.z*gl_LaunchSizeNV.x*gl_LaunchSizeNV.y + gl_LaunchIDNV.y*gl_LaunchSizeNV.x + gl_LaunchIDNV.x;
+}
+
+void doInitialize(rayQueryEXT rayQuery, Ray ray)
+{
+    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsNoneEXT, gl_RayFlagsCullBackFacingTrianglesEXT, ray.pos, ray.tmin, ray.dir, ray.tmax);
+}
+
+void main()
+{
+    uint index = launchIndex();
+    Ray ray = rays[index];
+    rayQueryEXT rayQuery;
+    doInitialize(rayQuery, ray);
+    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsOpaqueEXT, gl_RayFlagsCullFrontFacingTrianglesEXT, ray.pos, ray.tmin, ray.dir, ray.tmax);
+}
diff --git a/Test/rayQuery-no-cse.rgen b/Test/rayQuery-no-cse.rgen
new file mode 100644
index 0000000..ccec76f
--- /dev/null
+++ b/Test/rayQuery-no-cse.rgen
@@ -0,0 +1,35 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_ray_query : enable
+
+struct Ray
+{
+    vec3 pos;
+    float tmin;
+    vec3 dir;
+    float tmax;
+};
+
+layout(binding = 0, set = 0) uniform accelerationStructureEXT rtas;
+layout(std430, set = 0, binding = 2) buffer Rays { Ray rays[]; };
+
+uint launchIndex()
+{
+    return gl_LaunchIDNV.z*gl_LaunchSizeNV.x*gl_LaunchSizeNV.y + gl_LaunchIDNV.y*gl_LaunchSizeNV.x + gl_LaunchIDNV.x;
+}
+
+void doInitialize(rayQueryEXT rayQuery, Ray ray)
+{
+    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsNoneEXT, gl_RayFlagsCullBackFacingTrianglesEXT, ray.pos, ray.tmin, ray.dir, ray.tmax);
+}
+
+void main()
+{
+    uint index = launchIndex();
+    Ray ray = rays[index];
+    rayQueryEXT rayQuery1;
+    rayQueryEXT rayQuery2;
+    doInitialize(rayQuery1, ray);
+    rayQueryInitializeEXT(rayQuery1, rtas, gl_RayFlagsOpaqueEXT, gl_RayFlagsCullFrontFacingTrianglesEXT, ray.pos, ray.tmin, ray.dir, ray.tmax);
+    doInitialize(rayQuery2, ray);
+}
diff --git a/Test/rayQuery.rgen b/Test/rayQuery.rgen
new file mode 100644
index 0000000..8d5638f
--- /dev/null
+++ b/Test/rayQuery.rgen
@@ -0,0 +1,23 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_ray_query : enable
+layout(binding = 0, set = 0) uniform accelerationStructureEXT acc0;
+
+layout(shaderRecordNV) buffer block
+{
+	vec3 dir;
+	vec3 origin;
+};
+
+void main()
+{
+    rayQueryEXT localRayQuery;
+    uint rayFlags = gl_RayFlagsOpaqueEXT | gl_RayFlagsSkipClosestHitShaderEXT;
+    float tMin = 0.f;
+    float tMax = 1000.f;
+    rayQueryInitializeEXT(localRayQuery, acc0, rayFlags, 0xFF , origin, tMin, dir, tMax);
+    if (!rayQueryProceedEXT(localRayQuery))
+    {
+        rayQueryTerminateEXT(localRayQuery);
+    }
+}
diff --git a/Test/reflection.frag b/Test/reflection.frag
new file mode 100644
index 0000000..9299653
--- /dev/null
+++ b/Test/reflection.frag
@@ -0,0 +1,8 @@
+#version 440 core

+

+in float inval;

+

+void main()

+{

+    float f = inval;

+}

diff --git a/Test/reflection.linked.frag b/Test/reflection.linked.frag
new file mode 100644
index 0000000..4a88ec4
--- /dev/null
+++ b/Test/reflection.linked.frag
@@ -0,0 +1,19 @@
+#version 440 core

+

+layout(binding = 0, std140) uniform ubo_block {

+	float unused_uniform;

+	float shared_uniform;

+	float vsonly_uniform;

+	float fsonly_uniform;

+} ubo;

+

+in float vertout;

+

+out float fragout;

+

+void main()

+{

+    fragout = vertout;

+    fragout += ubo.shared_uniform;

+    fragout += ubo.fsonly_uniform;

+}

diff --git a/Test/reflection.linked.vert b/Test/reflection.linked.vert
new file mode 100644
index 0000000..e28142d
--- /dev/null
+++ b/Test/reflection.linked.vert
@@ -0,0 +1,19 @@
+#version 440 core

+

+layout(binding = 0, std140) uniform ubo_block {

+	float unused_uniform;

+	float shared_uniform;

+	float vsonly_uniform;

+	float fsonly_uniform;

+} ubo;

+

+in float vertin;

+

+out float vertout;

+

+void main()

+{

+    vertout = vertin;

+    vertout += ubo.shared_uniform;

+    vertout += ubo.vsonly_uniform;

+}

diff --git a/Test/reflection.options.geom b/Test/reflection.options.geom
new file mode 100644
index 0000000..76ba3c0
--- /dev/null
+++ b/Test/reflection.options.geom
@@ -0,0 +1,31 @@
+#version 330 core

+

+precision highp float;

+

+layout(triangles) in;

+layout(triangle_strip, max_vertices = 4) out;

+

+in block

+{

+    vec2 Color;

+    vec2 Texcoord;

+    flat ivec3 in_a;

+} In[];

+

+out block

+{

+    vec4 Color;

+    vec4 a;

+    vec2 b[3];

+} Out;

+

+void main()

+{

+    for(int i = 0; i < gl_in.length(); ++i)

+    {

+        gl_Position = gl_in[i].gl_Position;

+        Out.Color = vec4(In[i].Color, 0, 1);

+        EmitVertex();

+    }

+    EndPrimitive();

+}

diff --git a/Test/reflection.options.vert b/Test/reflection.options.vert
new file mode 100644
index 0000000..b88f854
--- /dev/null
+++ b/Test/reflection.options.vert
@@ -0,0 +1,64 @@
+#version 440 core

+

+struct VertexInfo {

+    float position[3];

+    float normal[3];

+};

+

+struct TriangleInfo {

+    VertexInfo v[3];

+};

+

+buffer VertexCollection {

+    TriangleInfo t[5];

+    uint padding[10];

+};

+

+buffer MultipleArrays {

+    TriangleInfo tri[5];

+    VertexInfo vert[5];

+    float f[5];

+} multiarray;

+

+buffer ArrayedBind {

+    float a;

+    float b;

+} buffers[3];

+

+uniform UBO {

+    VertexInfo verts[2];

+    float flt[8];

+    uvec4 unused;

+    float uniform_multi[4][3][2];

+} ubo;

+

+uniform float uniform_multi[4][3][2];

+

+struct OutputStruct {

+    float val;

+    vec3 a;

+    vec2 b[4];

+    mat2x2 c;

+};

+

+out OutputStruct outval;

+out float outarr[3];

+

+void main()

+{

+    float f;

+    f += t[0].v[0].position[0];

+    f += t[gl_InstanceID].v[gl_InstanceID].position[gl_InstanceID];

+    f += t[gl_InstanceID].v[gl_InstanceID].normal[gl_InstanceID];

+    f += multiarray.tri[gl_InstanceID].v[0].position[0];

+    f += multiarray.vert[gl_InstanceID].position[0];

+    f += multiarray.f[gl_InstanceID];

+    f += ubo.verts[gl_InstanceID].position[0];

+    f += ubo.flt[gl_InstanceID];

+    f += ubo.uniform_multi[0][0][0];

+    f += uniform_multi[gl_InstanceID][gl_InstanceID][gl_InstanceID];

+    f += buffers[gl_InstanceID].b;

+    TriangleInfo tlocal[5] = t;

+    outval.val = f;

+    outarr[2] = f;

+}

diff --git a/Test/reflection.vert b/Test/reflection.vert
index 7549f08..7b9239b 100644
--- a/Test/reflection.vert
+++ b/Test/reflection.vert
@@ -60,6 +60,14 @@
     N3 foo;

 } nest;

 

+layout(std140) uniform nested2 {

+    vec4 padding; // offset 0, size 16

+    N3 a;       // offset 16, size 32

+    N1 b[4];    // offset 48, size 64

+    N1 c[2];    // offset 112, size 32

+    N1 d[4];    // offset 144, size 64

+} nest2;

+

 struct TS {

     int a;

     int dead;

@@ -99,6 +107,7 @@
 in vec3 attributeFloat3;

 in vec4 attributeFloat4;

 in mat4 attributeMat4;

+in float attributeFloatArray[3];

 

 uniform deep3 deepA[2], deepB[2], deepC[3], deepD[2];

 

@@ -153,6 +162,22 @@
     N2 runtimeArray[];

 } buf4i;

 

+struct VertexInfo {

+    float position[3];

+    float normal[3];

+};

+

+struct TriangleInfo {

+    VertexInfo v[3];

+};

+

+buffer VertexCollection {

+    TriangleInfo t[5];

+    uint padding[10];

+};

+

+out float outval;

+

 void main()

 {

     liveFunction1(image_ui2D, sampler_2D, sampler_2DMSArray);

@@ -188,6 +213,7 @@
         f += deepB[i].d2.d1[i].va[1].x;

         deep3 d = deepC[1];

         deep3 da[2] = deepD;

+        deep1 db = deepA[i].d2.d1[i];

     } else

         f = ufDead3;

 

@@ -199,8 +225,21 @@
     f += attributeFloat3.x;

     f += attributeFloat4.x;

     f += attributeMat4[0][1];

+    f += attributeFloatArray[2];

     f += buf1i.runtimeArray[3];

     f += buf2i.runtimeArray[3].c;

     f += buf3i.runtimeArray[gl_InstanceID];

     f += buf4i.runtimeArray[gl_InstanceID].c;

+

+    N3 n = nest2.a;

+    N1 b[4] = nest2.b;

+    f += nest2.c[1].a;

+    f += nest2.d[gl_InstanceID].a;

+

+    f += t[0].v[0].position[0];

+    f += t[gl_InstanceID].v[gl_InstanceID].position[gl_InstanceID];

+    f += t[gl_InstanceID].v[gl_InstanceID].normal[gl_InstanceID];

+    TriangleInfo tlocal[5] = t;

+

+    outval = f;

 }

diff --git a/Test/runtests b/Test/runtests
index c88cb59..1a7c7c9 100755
--- a/Test/runtests
+++ b/Test/runtests
@@ -1,11 +1,16 @@
 #!/usr/bin/env bash
 
-TARGETDIR=localResults
+# Arguments:
+#  1- TargetDirectory, where to write test results and intermediary files
+#  2- Path to glslangValidator
+#  3- Path to spirv-remap
+
+TARGETDIR=${1:-localResults}
 BASEDIR=baseResults
-EXE=../build/install/bin/glslangValidator
-REMAPEXE=../build/install/bin/spirv-remap
+EXE=${2:-../build/install/bin/glslangValidator}
+REMAPEXE=${3:-../build/install/bin/spirv-remap}
 HASERROR=0
-mkdir -p localResults
+mkdir -p $TARGETDIR
 
 if [ -a localtestlist ]
   then
@@ -32,6 +37,18 @@
 echo Running reflection...
 $EXE -l -q -C reflection.vert > $TARGETDIR/reflection.vert.out
 diff -b $BASEDIR/reflection.vert.out $TARGETDIR/reflection.vert.out || HASERROR=1
+$EXE -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks reflection.options.vert > $TARGETDIR/reflection.options.vert.out
+diff -b $BASEDIR/reflection.options.vert.out $TARGETDIR/reflection.options.vert.out || HASERROR=1
+$EXE -l -q -C reflection.frag > $TARGETDIR/reflection.frag.out
+diff -b $BASEDIR/reflection.frag.out $TARGETDIR/reflection.frag.out || HASERROR=1
+$EXE -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks reflection.frag > $TARGETDIR/reflection.options.frag.out
+diff -b $BASEDIR/reflection.options.frag.out $TARGETDIR/reflection.options.frag.out || HASERROR=1
+$EXE -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks reflection.options.geom > $TARGETDIR/reflection.options.geom.out
+diff -b $BASEDIR/reflection.options.geom.out $TARGETDIR/reflection.options.geom.out || HASERROR=1
+$EXE -l -q -C reflection.linked.vert reflection.linked.frag > $TARGETDIR/reflection.linked.out
+diff -b $BASEDIR/reflection.linked.out $TARGETDIR/reflection.linked.out || HASERROR=1
+$EXE -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks reflection.linked.vert reflection.linked.frag > $TARGETDIR/reflection.linked.options.out
+diff -b $BASEDIR/reflection.linked.options.out $TARGETDIR/reflection.linked.options.out || HASERROR=1
 $EXE -D -Od -e flizv -l -q -C -V -Od hlsl.reflection.vert > $TARGETDIR/hlsl.reflection.vert.out
 diff -b $BASEDIR/hlsl.reflection.vert.out $TARGETDIR/hlsl.reflection.vert.out || HASERROR=1
 $EXE -D -Od -e main -l -q -C -V -Od hlsl.reflection.binding.frag > $TARGETDIR/hlsl.reflection.binding.frag.out
@@ -43,13 +60,13 @@
 # multi-threaded test
 #
 echo Comparing single thread to multithread for all tests in current directory...
-$EXE -i -C *.vert *.geom *.frag *.tes* *.comp > singleThread.out
-$EXE -i -C *.vert *.geom *.frag *.tes* *.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
 
 #
@@ -133,7 +150,7 @@
 $EXE -g --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf --spirv-val \
      -G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.frag.out
 diff -b $BASEDIR/spv.debugInfo.frag.out $TARGETDIR/spv.debugInfo.frag.out || HASERROR=1
-$EXE -g -Od --target-env vulkan1.1 --relaxed-errors --suppress-warnings --aml --hlsl-offsets --nsf --spirv-val \
+$EXE -g -Od --target-env vulkan1.1 --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf --spirv-val \
      -G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.1.1.frag.out
 diff -b $BASEDIR/spv.debugInfo.1.1.frag.out $TARGETDIR/spv.debugInfo.1.1.frag.out || HASERROR=1
 $EXE -g -D -Od -e newMain -g --amb --aml --fua --hlsl-iomap --nsf --spirv-val --sib 1 --ssb 2 --sbb 3 --stb 4 --suavb 5 --sub 6 \
@@ -159,9 +176,9 @@
 # Testing -D and -U
 #
 echo "Testing -D and -U"
-$EXE -DUNDEFED -UIN_SHADER -DFOO=200 -i -l -UUNDEFED -DMUL=FOO*2 glsl.-D-U.frag > $TARGETDIR/glsl.-D-U.frag.out
+$EXE -DUNDEFED -UIN_SHADER -DFOO=200 -i -l --U UNDEFED --define-macro MUL=FOO*2 glsl.-D-U.frag > $TARGETDIR/glsl.-D-U.frag.out
 diff -b $BASEDIR/glsl.-D-U.frag.out $TARGETDIR/glsl.-D-U.frag.out || HASERROR=1
-$EXE -D -Od -e main -V -i -DUNDEFED -UIN_SHADER -DFOO=200 -UUNDEFED -Od hlsl.-D-U.frag > $TARGETDIR/hlsl.-D-U.frag.out
+$EXE -D -Od -e main -V -i -DUNDEFED -UIN_SHADER --D FOO=200 --undef-macro UNDEFED -Od hlsl.-D-U.frag > $TARGETDIR/hlsl.-D-U.frag.out
 diff -b $BASEDIR/hlsl.-D-U.frag.out $TARGETDIR/hlsl.-D-U.frag.out || HASERROR=1
 
 #
@@ -172,6 +189,7 @@
 $EXE --client opengl100       spv.targetOpenGL.vert || HASERROR=1
 $EXE --target-env vulkan1.0   spv.targetVulkan.vert || HASERROR=1
 $EXE --target-env vulkan1.1   spv.targetVulkan.vert || HASERROR=1
+$EXE --target-env vulkan1.2   spv.targetVulkan.vert || HASERROR=1
 $EXE --target-env opengl      spv.targetOpenGL.vert || HASERROR=1
 $EXE -V100                    spv.targetVulkan.vert || HASERROR=1
 $EXE -G100                    spv.targetOpenGL.vert || HASERROR=1
@@ -228,6 +246,13 @@
 diff -b $BASEDIR/hlsl.pp.expand.frag.err $TARGETDIR/hlsl.pp.expand.frag.err || HASERROR=1
 
 #
+# Test --nan-clamp
+#
+echo "Testing nan-clamp"
+$EXE --nan-clamp -H --aml --amb spv.400.frag > $TARGETDIR/spv.400.frag.nanclamp.out
+diff -b $BASEDIR/spv.400.frag.nanclamp.out $TARGETDIR/spv.400.frag.nanclamp.out || HASERROR=1
+
+#
 # Final checking
 #
 if [ $HASERROR -eq 0 ]
diff --git a/Test/specExamples.vert b/Test/specExamples.vert
index 9df1561..64ec710 100644
--- a/Test/specExamples.vert
+++ b/Test/specExamples.vert
@@ -166,8 +166,8 @@
     v.x = func2(a.x, b.x, c.x, d.x);        // precise!

     func3(a.x * b.x, c.x * d.x, v.x);       // precise!

         

-    funcA(img1);              // OK, adding "restrict" is allowed

-    funcB(img2);              // illegal, stripping "coherent" is not

+    funcA(img1);              // OK, adding "restrict" is allowed, ERROR, changing formats

+    funcB(img2);              // illegal, stripping "coherent" is not, ERROR, changing formats

 

     {

         struct light {

diff --git a/Test/spv.1.3.coopmat.comp b/Test/spv.1.3.coopmat.comp
new file mode 100644
index 0000000..23e0b78
--- /dev/null
+++ b/Test/spv.1.3.coopmat.comp
@@ -0,0 +1,28 @@
+#version 450 core
+#extension GL_KHR_memory_scope_semantics : enable

+#extension GL_NV_cooperative_matrix : enable

+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable

+

+#pragma use_variable_pointers

+

+layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+

+layout(set = 0, binding = 0) coherent buffer Block {

+    float y[1024*1024];

+    float x[];

+} block;

+

+

+void main()
+{
+    fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> m = fcoopmatNV<32, gl_ScopeSubgroup, 16, 8>(0.0);

+

+    m = m + m;

+    m = m - m;

+    m = -m;

+    m = 2.0*m;

+    m = m*2.0;

+

+    coopMatLoadNV(m, block.x, 16, 128, false);

+    coopMatStoreNV(m, block.x, 16, 128, false);

+}
diff --git a/Test/spv.1.4.LoopControl.frag b/Test/spv.1.4.LoopControl.frag
new file mode 100644
index 0000000..00392ae
--- /dev/null
+++ b/Test/spv.1.4.LoopControl.frag
@@ -0,0 +1,19 @@
+#version 450
+
+#extension GL_EXT_control_flow_attributes : enable
+
+bool cond;
+
+void main()
+{
+        [[min_iterations(3), max_iterations(7)]]   for (int i = 0; i < 8; ++i) { }
+        [[iteration_multiple(2)]]                  while(true) {  }
+        [[peel_count(5)]]                          do {  } while(true);
+        [[partial_count(4)]]                       for (int i = 0; i < 8; ++i) { }
+
+        // warnings on all these
+        [[min_iterations, max_iterations]]   for (int i = 0; i < 8; ++i) { }
+        //[[iteration_multiple(0)]]                  while(true) {  }
+        //[[peel_count]]                          do {  } while(true);
+        //[[partial_count]]                       for (int i = 0; i < 8; ++i) { }
+}
diff --git a/Test/spv.1.4.NonWritable.frag b/Test/spv.1.4.NonWritable.frag
new file mode 100755
index 0000000..386b446
--- /dev/null
+++ b/Test/spv.1.4.NonWritable.frag
@@ -0,0 +1,13 @@
+#version 450
+
+layout(location = 0) flat in int index;
+
+layout(location = 0) out float color;
+
+// lookup table
+const float table[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
+
+void main()
+{
+    color = table[index];
+}
diff --git a/Test/spv.1.4.OpCopyLogical.comp b/Test/spv.1.4.OpCopyLogical.comp
new file mode 100644
index 0000000..fe95da7
--- /dev/null
+++ b/Test/spv.1.4.OpCopyLogical.comp
@@ -0,0 +1,48 @@
+#version 450 core

+

+struct MyStruct

+{

+    vec2 foo[2];

+    int sb;

+};

+

+layout(binding = 0, std430) buffer SSBO0

+{

+    MyStruct a;

+} inBuf;

+

+layout(binding = 1, std430) buffer SSBO1

+{

+    MyStruct b;

+} outBuf;

+

+layout(binding = 2, std140) uniform UBO

+{

+    MyStruct c;

+} uBuf;

+

+struct Nested {

+    float f;

+    MyStruct S[2];

+};

+

+layout(binding = 2, std140) uniform UBON

+{

+    Nested N1;

+} uBufN;

+

+layout(binding = 1, std430) buffer SSBO1N

+{

+    Nested N2;

+} outBufN;

+

+void main()

+{

+    MyStruct t = inBuf.a;

+    outBuf.b = t;

+    t = uBuf.c;

+    outBuf.b = t;

+

+    Nested n = uBufN.N1;

+    outBufN.N2 = n;

+}

diff --git a/Test/spv.1.4.OpCopyLogical.funcall.frag b/Test/spv.1.4.OpCopyLogical.funcall.frag
new file mode 100644
index 0000000..7f9968d
--- /dev/null
+++ b/Test/spv.1.4.OpCopyLogical.funcall.frag
@@ -0,0 +1,21 @@
+#version 450

+

+struct S { mat4 m; };

+buffer blockName { S s1; };  // need an S with decoration

+S s2;                        // no decorations on S

+

+void fooConst(const in S s) { }

+void foo(in S s) { }

+void fooOut(inout S s) { }

+

+void main()

+{

+  fooConst(s1);

+  fooConst(s2);

+

+  foo(s1);

+  foo(s2);

+

+  fooOut(s1);

+  fooOut(s2);

+}
\ No newline at end of file
diff --git a/Test/spv.1.4.OpCopyLogicalBool.comp b/Test/spv.1.4.OpCopyLogicalBool.comp
new file mode 100644
index 0000000..303bdb8
--- /dev/null
+++ b/Test/spv.1.4.OpCopyLogicalBool.comp
@@ -0,0 +1,48 @@
+#version 450 core

+

+struct MyStruct

+{

+    vec2 foo[2];

+    bool sb;

+};

+

+layout(binding = 0, std430) buffer SSBO0

+{

+    MyStruct a;

+} inBuf;

+

+layout(binding = 1, std430) buffer SSBO1

+{

+    MyStruct b;

+} outBuf;

+

+layout(binding = 2, std140) uniform UBO

+{

+    MyStruct c;

+} uBuf;

+

+struct Nested {

+    bool b;

+    MyStruct S[2];

+};

+

+layout(binding = 2, std140) uniform UBON

+{

+    Nested N1;

+} uBufN;

+

+layout(binding = 1, std430) buffer SSBO1N

+{

+    Nested N2;

+} outBufN;

+

+void main()

+{

+    MyStruct t = inBuf.a;

+    outBuf.b = t;

+    t = uBuf.c;

+    outBuf.b = t;

+

+    Nested n = uBufN.N1;

+    outBufN.N2 = n;

+}

diff --git a/Test/spv.1.4.OpEntryPoint.frag b/Test/spv.1.4.OpEntryPoint.frag
new file mode 100644
index 0000000..ef1235a
--- /dev/null
+++ b/Test/spv.1.4.OpEntryPoint.frag
@@ -0,0 +1,27 @@
+#version 450
+
+layout(location = 0) in vec4 inv;
+layout(location = 0) out vec4 outv;
+
+vec4 globalv;
+
+layout(binding = 0) uniform ubt {
+    vec4 v;
+} uniformv;
+
+layout(binding = 1) buffer bbt {
+    float f;
+} bufferv;
+
+layout(binding = 2, push_constant) uniform pushB {
+    int a;
+} pushv;
+
+void main()
+{
+    vec4 functionv;
+    functionv = inv;
+    globalv = inv;
+    outv = functionv + inv + globalv + uniformv.v * pushv.a * bufferv.f;
+    outv += functionv + inv + globalv + uniformv.v * pushv.a * bufferv.f;
+}
diff --git a/Test/spv.1.4.OpSelect.frag b/Test/spv.1.4.OpSelect.frag
new file mode 100755
index 0000000..cfbf337
--- /dev/null
+++ b/Test/spv.1.4.OpSelect.frag
@@ -0,0 +1,37 @@
+#version 450
+
+struct S1 {
+    float a;
+    int b;
+};
+
+layout(location = 0) flat in S1 in1;
+layout(location = 2) flat in S1 in2;
+layout(location = 4) flat in int cond;
+
+layout(location = 0) out float outv;
+
+void fun1(){}
+void fun2(){}
+
+void main()
+{
+    // glslang will only make OpSelect for very trivial looking expressions
+
+    float f1 = 1.0;
+    float f2 = 2.0;
+    outv = cond < 8 ? f1 : f2;           // in all versions
+
+    ivec4 iv1 = ivec4(f1);
+    ivec4 iv2 = ivec4(f2);
+    outv *= (cond > 0 ? iv1 : iv2).z;     // in all versions, but in 1.4 as scalar condition, not smeared ala mix()
+
+    mat3 m1 = mat3(1.0);
+    mat3 m2 = mat3(2.0);
+    outv *= (cond < 20 ? m1 : m2)[2][1];  // in 1.4, but not before
+
+    S1 fv = cond > 5 ? in1 : in2;         // in 1.4, but not before
+    outv *= fv.a;
+
+    cond > 0 ? fun1() : fun2();           // not allowed by any version
+}
diff --git a/Test/spv.1.4.constructComposite.comp b/Test/spv.1.4.constructComposite.comp
new file mode 100644
index 0000000..7f1c370
--- /dev/null
+++ b/Test/spv.1.4.constructComposite.comp
@@ -0,0 +1,25 @@
+#version 460 core

+

+layout(local_size_x=64) in;

+

+struct sA {

+  int x, y;

+};

+

+struct sB {

+  sA a;

+};

+

+layout(binding=0,set=0) uniform ubo {

+  sB  b;

+};

+

+struct sC {

+  sA state;

+} c = {

+  b.a,

+};

+

+void main()

+{

+}

diff --git a/Test/spv.1.4.image.frag b/Test/spv.1.4.image.frag
new file mode 100644
index 0000000..a835e3c
--- /dev/null
+++ b/Test/spv.1.4.image.frag
@@ -0,0 +1,38 @@
+#version 450

+

+layout(rgba32f, binding = 1)    uniform  image2D         i2D;

+layout(r32i,   binding = 12)    uniform iimage2D        ii2D;

+layout(r32ui,   binding = 12)   uniform uimage2D        ui2D;

+

+layout(rgba32f, binding = 9)    uniform  image2DMS     i2DMS;

+layout(r32i,    binding = 13)   uniform iimage2DMS    ii2DMS;

+layout(r32ui,    binding = 13)  uniform uimage2DMS    ui2DMS;

+

+flat in ivec2 ic2D;

+flat in uint value;

+

+out vec4 fragData;

+

+void main()

+{

+    vec4 v = vec4(0.0);

+    ivec4 iv = ivec4(0.0);

+    uvec4 uv = uvec4(0.0);

+

+    v += imageLoad(i2D, ic2D);

+    imageStore(i2D, ic2D, v);

+    v += imageLoad(ii2D, ic2D);

+    imageStore(ii2D, ic2D, iv);

+    v += imageLoad(ui2D, ic2D);

+    imageStore(ui2D, ic2D, uv);

+

+    v += imageLoad(i2DMS, ic2D, 1);

+    imageStore(i2DMS, ic2D, 2, v);

+    v += imageLoad(ii2DMS, ic2D, 1);

+    imageStore(ii2DMS, ic2D, 2, iv);

+    v += imageLoad(ui2DMS, ic2D, 1);

+    imageStore(ui2DMS, ic2D, 2, uv);

+

+    fragData = v;

+}

+

diff --git a/Test/spv.1.4.sparseTexture.frag b/Test/spv.1.4.sparseTexture.frag
new file mode 100644
index 0000000..fcddbeb
--- /dev/null
+++ b/Test/spv.1.4.sparseTexture.frag
@@ -0,0 +1,47 @@
+#version 450

+#extension GL_ARB_sparse_texture2: enable

+

+uniform sampler2D               s2D;

+uniform isampler2D             is2D;

+uniform usampler2D             us2D;

+

+layout(rgba32f)  uniform  image2D i2D;

+layout(rgba32i)  uniform iimage2DMS ii2DMS;

+layout(rgba32ui) uniform uimage3D ui3D;

+

+in vec2 c2;

+in vec3 c3;

+in vec4 c4;

+

+in flat ivec2 ic2;

+in flat ivec3 ic3;

+

+in flat ivec2 offsets[4];

+

+out vec4 outColor;

+

+void main()

+{

+    int   resident = 0;

+    vec4  texel  = vec4(0.0);

+    ivec4 itexel = ivec4(0);

+    uvec4 utexel = uvec4(0);

+

+    resident |= sparseTextureARB(s2D,  c2, texel);

+    resident |= sparseTextureARB(is2D, c2, texel);

+    resident |= sparseTextureARB(us2D, c2, texel);

+

+    resident |= sparseTextureLodARB( s2D, c2, 2.0, texel);

+    resident |= sparseTextureLodARB(is2D, c2, 2.0, texel);

+    resident |= sparseTextureLodARB(us2D, c2, 2.0, texel);

+

+    resident |= sparseTexelFetchARB( s2D, ivec2(c2), 2, texel);

+    resident |= sparseTexelFetchARB(is2D, ivec2(c2), 2, texel);

+    resident |= sparseTexelFetchARB(us2D, ivec2(c2), 2, texel);

+

+    resident |= sparseImageLoadARB(i2D, ic2, texel);

+    resident |= sparseImageLoadARB(ii2DMS, ic2, 3, texel);

+    resident |= sparseImageLoadARB(ui3D, ic3, utexel);

+

+    outColor = sparseTexelsResidentARB(resident) ? texel : vec4(itexel) + vec4(utexel);

+}
\ No newline at end of file
diff --git a/Test/spv.1.4.texture.frag b/Test/spv.1.4.texture.frag
new file mode 100644
index 0000000..cd98dd5
--- /dev/null
+++ b/Test/spv.1.4.texture.frag
@@ -0,0 +1,26 @@
+#version 450

+

+uniform  sampler2D       texSampler2D;

+uniform isampler2D      itexSampler2D;

+uniform usampler2D      utexSampler2D;

+

+in  vec2 t;

+in  vec2 coords2D;

+flat in ivec2 iCoords2D;

+

+out vec4 color;

+

+flat in int iLod;

+

+void main()

+{

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

+

+    color += texture( texSampler2D, coords2D);

+    color += texture(itexSampler2D, coords2D);

+    color += texture(utexSampler2D, coords2D);

+

+    color += texelFetch( texSampler2D, iCoords2D, iLod);

+    color += texelFetch(itexSampler2D, iCoords2D, iLod);

+    color += texelFetch(utexSampler2D, iCoords2D, iLod);

+}
\ No newline at end of file
diff --git a/Test/spv.16bitxfb.vert b/Test/spv.16bitxfb.vert
new file mode 100644
index 0000000..f971943
--- /dev/null
+++ b/Test/spv.16bitxfb.vert
@@ -0,0 +1,33 @@
+#version 450 core

+

+#extension GL_AMD_gpu_shader_half_float: enable

+#extension GL_AMD_gpu_shader_int16: enable

+

+layout(location = 0) in f16vec4 if16v4;

+layout(location = 1) in i16vec4 ii16v4;

+layout(location = 2) in u16vec4 iu16v4;

+

+layout(location = 0, xfb_buffer = 0, xfb_stride = 6, xfb_offset = 0) out f16vec3 of16v3;

+layout(location = 1, xfb_buffer = 1, xfb_stride = 6, xfb_offset = 0) out F16Out

+{

+    float16_t of16;

+    f16vec2   of16v2;

+};

+

+layout(location = 5, xfb_buffer = 2, xfb_stride = 6, xfb_offset = 0) out i16vec3 oi16v3;

+layout(location = 6, xfb_buffer = 3, xfb_stride = 6, xfb_offset = 0) out I16Out

+{

+    uint16_t ou16;

+    u16vec2  ou16v2;

+};

+

+void main()

+{

+    of16v3 = if16v4.xyz;

+    of16   = if16v4.x;

+    of16v2 = if16v4.xy;

+

+    oi16v3 = ii16v4.xyz;

+    ou16   = iu16v4.x;

+    ou16v2 = iu16v4.xy;

+}
\ No newline at end of file
diff --git a/Test/spv.8bit-16bit-construction.frag b/Test/spv.8bit-16bit-construction.frag
new file mode 100644
index 0000000..573fa54
--- /dev/null
+++ b/Test/spv.8bit-16bit-construction.frag
@@ -0,0 +1,22 @@
+#version 450 core
+
+#extension GL_EXT_shader_8bit_storage : enable
+#extension GL_EXT_shader_16bit_storage : enable
+
+buffer B
+{
+    int8_t i8_from_i16;
+    int16_t i16_from_i8;
+    uint8_t u8_from_u16;
+    uint16_t u16_from_u8;
+    float16_t f16_from_i8;
+};
+
+void main()
+{
+    i8_from_i16 = int8_t(int16_t(1));
+    i16_from_i8 = int16_t(int8_t(1));
+    u8_from_u16 = uint8_t(uint16_t(1));
+    u16_from_u8 = uint16_t(uint8_t(1));
+    f16_from_i8 = float16_t(int8_t(1));
+}
diff --git a/Test/spv.Operations.frag b/Test/spv.Operations.frag
index 52f0a30..3477a79 100644
--- a/Test/spv.Operations.frag
+++ b/Test/spv.Operations.frag
@@ -55,9 +55,10 @@
     v += ceil(v);

     v += fract(v);

     v += mod(v, v);

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

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

 

     v += modf(v, v);

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

 

     v += min(v, uv4);

     v += max(v, uv4);

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

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

 

+    // multiple out operands

+    uvec4 msb;

+    uvec4 lsb;

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

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

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

+

 	//// bool

 	b = isnan(uf);

     b = isinf(f);

diff --git a/Test/spv.RayCallable.rcall b/Test/spv.RayCallable.rcall
index 12f2884..992cce6 100644
--- a/Test/spv.RayCallable.rcall
+++ b/Test/spv.RayCallable.rcall
@@ -8,8 +8,6 @@
 {
 	uvec3 id = gl_LaunchIDNV;
 	uvec3 size = gl_LaunchSizeNV;
-    uint curFlags = gl_IncomingRayFlagsNV;
-	curFlags = curFlags & gl_RayFlagsOpaqueNV;
 	data1 = 256U;
 	executeCallableNV(2,1);
 }
diff --git a/Test/spv.RayCallable_Errors.rcall b/Test/spv.RayCallable_Errors.rcall
index 7339682..f6126a6 100644
--- a/Test/spv.RayCallable_Errors.rcall
+++ b/Test/spv.RayCallable_Errors.rcall
@@ -19,6 +19,7 @@
     mat4x3 e11 = gl_WorldToObjectNV;                        // ERROR, unsupported builtin in stage
     float e12 = gl_HitTNV;                                  // ERROR, unsupported builtin in stage
     float e13 = gl_HitKindNV;                               // ERROR, unsupported builtin in stage
+    uint curFlags = gl_IncomingRayFlagsNV;                  // ERROR, unsupported builtin in stage
     reportIntersectionNV(1.0, 1U);                          // ERROR, unsupported builtin in stage
     ignoreIntersectionNV();                                 // ERROR, unsupported builtin in stage
     terminateRayNV();                                       // ERROR, unsupported builtin in stage
diff --git a/Test/spv.RayGenShader.rgen b/Test/spv.RayGenShader.rgen
index c36cae4..a714354 100644
--- a/Test/spv.RayGenShader.rgen
+++ b/Test/spv.RayGenShader.rgen
@@ -5,8 +5,9 @@
 layout(location = 0) rayPayloadNV vec4 payload;
 layout(shaderRecordNV) buffer block
 {
-	float arr[4];
-	vec4 pad;
+	vec3 dir;
+	vec3 origin;
+
 };
 void main()
 {
@@ -14,7 +15,5 @@
     uint ly = gl_LaunchIDNV.y;
     uint sx = gl_LaunchSizeNV.x;
     uint sy = gl_LaunchSizeNV.y;
-    traceNV(accNV0, lx, ly, sx, sy, 0u, vec3(0.0f), 0.5f, vec3(1.0f), 0.75f, 1);
-    arr[3] = 1.0f;
-    pad = payload;
+    traceNV(accNV0, lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
 }
diff --git a/Test/spv.RayGenShader11.rgen b/Test/spv.RayGenShader11.rgen
index 68f92b2..d010a87 100644
--- a/Test/spv.RayGenShader11.rgen
+++ b/Test/spv.RayGenShader11.rgen
@@ -4,8 +4,8 @@
 layout(location = 0) rayPayloadNV vec4 payload;
 layout(shaderRecordNV) buffer block
 {
-	float arr[4];
-	vec4 pad;
+	vec3 dir;
+	vec3 origin;
 };
 void main()
 {
@@ -13,7 +13,5 @@
     uint ly = gl_LaunchIDNV.y;
     uint sx = gl_LaunchSizeNV.x;
     uint sy = gl_LaunchSizeNV.y;
-    traceNV(accNV, lx, ly, sx, sy, 0u, vec3(0.0f), 0.5f, vec3(1.0f), 0.75f, 1);
-    arr[3] = 1.0f;
-    pad = payload;
+    traceNV(accNV, lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
 }
diff --git a/Test/spv.RayGenShaderArray.rgen b/Test/spv.RayGenShaderArray.rgen
new file mode 100644
index 0000000..d743458
--- /dev/null
+++ b/Test/spv.RayGenShaderArray.rgen
@@ -0,0 +1,22 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_nonuniform_qualifier : enable

+layout(binding = 0, set = 0) uniform accelerationStructureNV accNV0[];
+layout(binding = 1, set = 0) uniform accelerationStructureNV accNV1[2];

+layout(location = 0) rayPayloadNV vec4 payload;
+layout(shaderRecordNV) buffer block
+{
+	vec3 dir;
+	vec3 origin;
+    int i;
+};
+void main()
+{
+    uint lx = gl_LaunchIDNV.x;
+    uint ly = gl_LaunchIDNV.y;
+    uint sx = gl_LaunchSizeNV.x;
+    uint sy = gl_LaunchSizeNV.y;
+    traceNV(accNV0[i], lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+    traceNV(accNV1[i], lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);

+    traceNV(accNV0[nonuniformEXT(i)], lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);

+}
diff --git a/Test/spv.RayGenShader_Errors.rgen b/Test/spv.RayGenShader_Errors.rgen
index d61ac21..5a590c8 100644
--- a/Test/spv.RayGenShader_Errors.rgen
+++ b/Test/spv.RayGenShader_Errors.rgen
@@ -37,4 +37,5 @@
     reportIntersectionNV(1.0, 1U);                          // ERROR, unsupported builtin in stage
     ignoreIntersectionNV();                                 // ERROR, unsupported builtin in stage
     terminateRayNV();                                       // ERROR, unsupported builtin in stage
+    d = 1.0f;                                               // ERROR, can't modify shaderRecordNV block
 }
diff --git a/Test/spv.atomicCounter.comp b/Test/spv.atomicCounter.comp
new file mode 100644
index 0000000..ecb2304
--- /dev/null
+++ b/Test/spv.atomicCounter.comp
@@ -0,0 +1,26 @@
+#version 450

+

+

+

+layout(binding = 0) uniform atomic_uint counter;

+

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

+shared uint value;

+

+int arrX[gl_WorkGroupSize.x];

+int arrY[gl_WorkGroupSize.y];

+int arrZ[gl_WorkGroupSize.z];

+

+uint func(atomic_uint c)

+{

+    return atomicCounterIncrement(c);

+}

+

+void main()

+{

+    memoryBarrierAtomicCounter();

+    func(counter);

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

+    atomicCounterDecrement(counter);

+    atomicCounterIncrement(counter);

+}

diff --git a/Test/spv.bufferhandle10.frag b/Test/spv.bufferhandle10.frag
index 1d537e4..d720563 100644
--- a/Test/spv.bufferhandle10.frag
+++ b/Test/spv.bufferhandle10.frag
@@ -20,4 +20,6 @@
     coherent blockType b = t.f;

     b.x[0] = 2;

 

+    volatile blockType b2 = t.f;

+    b2.x[0] = 3;

 }

diff --git a/Test/spv.bufferhandle16.frag b/Test/spv.bufferhandle16.frag
new file mode 100644
index 0000000..168148c
--- /dev/null
+++ b/Test/spv.bufferhandle16.frag
@@ -0,0 +1,26 @@
+#version 450

+

+#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable

+#extension GL_EXT_buffer_reference : enable

+#extension GL_EXT_scalar_block_layout : enable

+

+layout(buffer_reference) buffer T1 {

+    int x;

+    bool y;

+};

+layout(buffer_reference) buffer T2 {

+    int x;

+};

+

+const int s = int(uint64_t(T1(T2(uint64_t(3)))));

+int x[s];

+const uint64_t t = uint64_t(true ? T2(uint64_t(10)) : T2(uint64_t(11)));

+

+void main()

+{

+    T1 a = T1(uint64_t(4)), b = T1(uint64_t(5));

+    T1 c = true ? a : b;

+    T1 d = (a,b);

+    T1 e = true ? T1(uint64_t(6)) : T1(uint64_t(7));

+    T1 f = a.y ? T1(uint64_t(8)) : T1(uint64_t(9));

+}

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

+

+#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable

+#extension GL_EXT_buffer_reference : enable

+#extension GL_EXT_scalar_block_layout : enable

+

+layout(buffer_reference) buffer T1 {

+    int x;

+};

+

+const T1 a = T1(uint64_t(2));

+

+void main()

+{

+    T1 b, c;

+    const T1 d = b;

+

+    b == c;

+    b != c;

+}

diff --git a/Test/spv.bufferhandle18.frag b/Test/spv.bufferhandle18.frag
new file mode 100644
index 0000000..64517fe
--- /dev/null
+++ b/Test/spv.bufferhandle18.frag
@@ -0,0 +1,59 @@
+#version 450

+

+#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable

+#extension GL_EXT_buffer_reference2 : enable

+#extension GL_EXT_scalar_block_layout : enable

+

+layout(buffer_reference, buffer_reference_align = 8) buffer T1 {

+    int x;

+    bool y;

+};

+layout(buffer_reference, buffer_reference_align = 64) buffer T2 {

+    int x;

+};

+

+const int s = int(uint64_t(T1(T2(uint64_t(3)))));

+int x[s];

+const uint64_t t = uint64_t(true ? T2(uint64_t(10)) : T2(uint64_t(11)));

+

+

+#define sizeof(T) (uint64_t(T(uint64_t(0))+1))

+

+const uint64_t s2 = sizeof(T1);

+uint buf[int(s2)];

+

+

+void main()

+{

+    T1 a = T1(uint64_t(4)), b = T1(uint64_t(5));

+    T1 c = true ? a : b;

+    T1 d = (a,b);

+    T1 e = true ? T1(uint64_t(6)) : T1(uint64_t(7));

+    T1 f = a.y ? T1(uint64_t(8)) : T1(uint64_t(9));

+

+    f[3].x = 1;

+    (f+5).x = 1;

+

+    T1 arr[2] = {a, f};

+    arr[1][7].x = 1;

+    int i;

+    arr[i][i].x = 1;

+    // Since we don't distinguish between "pointer" and "reference" type,

+    // a reference type can have [] applied to it repeatedly and it has

+    // the effect of adding up the indices.

+    arr[i][i][i][i][i][i][i].x = 1;

+

+    T1 j;

+    j = j+1;

+    j = j-2;

+    j += 3;

+    j -= 4;

+    j = 5+j;

+    T1 k = j + 6;

+    int64_t x = k - j;

+    uint64_t y = sizeof(T1);

+    k = k + (-1);

+

+    T2 m;

+    m = m+1;

+}

diff --git a/Test/spv.bufferhandle19_Errors.frag b/Test/spv.bufferhandle19_Errors.frag
new file mode 100644
index 0000000..75f53e6
--- /dev/null
+++ b/Test/spv.bufferhandle19_Errors.frag
@@ -0,0 +1,32 @@
+#version 450

+

+#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable

+#extension GL_EXT_buffer_reference2 : enable

+#extension GL_EXT_scalar_block_layout : enable

+

+layout(buffer_reference) buffer T1 {

+    int x[];

+};

+

+layout(buffer_reference) buffer T2 {

+    int x[2];

+};

+

+void main()

+{

+    T1 a;

+    a+1;

+    a-1;

+    1+a;

+    a-a;

+    a+=1;

+    a-=1;

+    a+=a;

+    a-=a;

+

+    T2 b;

+    b+=b;

+    b-=b;

+    b+b;

+    1-b;

+}

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.conditionalDemote.frag b/Test/spv.conditionalDemote.frag
new file mode 100644
index 0000000..1f9b238
--- /dev/null
+++ b/Test/spv.conditionalDemote.frag
@@ -0,0 +1,18 @@
+#version 460 core

+#extension GL_EXT_demote_to_helper_invocation : enable

+

+layout(set = 0, binding = 0) uniform sampler2D tex;

+layout(location = 0) in vec2 coord;

+layout(location = 0) out vec4 o;

+

+void main (void)

+{

+    vec4 v = texture(tex, coord);

+

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

+        demote;

+

+    bool x = helperInvocationEXT();

+

+    o = v;

+}

diff --git a/Test/spv.constConstruct.vert b/Test/spv.constConstruct.vert
new file mode 100644
index 0000000..13d5e36
--- /dev/null
+++ b/Test/spv.constConstruct.vert
@@ -0,0 +1,158 @@
+#version 450

+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable

+#extension GL_EXT_shader_explicit_arithmetic_types_float32 : enable

+#extension GL_EXT_shader_explicit_arithmetic_types_float64 : 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_int32 : enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable

+

+precision highp float;

+

+void main()

+{

+    float16_t(float16_t(0x1));

+    float16_t(float32_t(0x2));

+    float16_t(float64_t(0x3));

+    float16_t(int8_t   (0x4));

+    float16_t(int16_t  (0x5));

+    float16_t(int32_t  (0x6));

+    float16_t(int64_t  (0x7));

+    float16_t(uint8_t  (0x8));

+    float16_t(uint16_t (0x9));

+    float16_t(uint32_t (0xA));

+    float16_t(uint64_t (0xB));

+    float16_t(bool     (0xC));

+    float32_t(float16_t(0x11));

+    float32_t(float32_t(0x12));

+    float32_t(float64_t(0x13));

+    float32_t(int8_t   (0x14));

+    float32_t(int16_t  (0x15));

+    float32_t(int32_t  (0x16));

+    float32_t(int64_t  (0x17));

+    float32_t(uint8_t  (0x18));

+    float32_t(uint16_t (0x19));

+    float32_t(uint32_t (0x1A));

+    float32_t(uint64_t (0x1B));

+    float32_t(bool     (0x1C));

+    float64_t(float16_t(0x21));

+    float64_t(float32_t(0x22));

+    float64_t(float64_t(0x23));

+    float64_t(int8_t   (0x24));

+    float64_t(int16_t  (0x25));

+    float64_t(int32_t  (0x26));

+    float64_t(int64_t  (0x27));

+    float64_t(uint8_t  (0x28));

+    float64_t(uint16_t (0x29));

+    float64_t(uint32_t (0x2A));

+    float64_t(uint64_t (0x2B));

+    float64_t(bool     (0x2C));

+    int8_t(float16_t(0x31));

+    int8_t(float32_t(0x32));

+    int8_t(float64_t(0x33));

+    int8_t(int8_t   (0x34));

+    int8_t(int16_t  (0x35));

+    int8_t(int32_t  (0x36));

+    int8_t(int64_t  (0x37));

+    int8_t(uint8_t  (0x38));

+    int8_t(uint16_t (0x39));

+    int8_t(uint32_t (0x3A));

+    int8_t(uint64_t (0x3B));

+    int8_t(bool     (0x3C));

+    int16_t(float16_t(0x41));

+    int16_t(float32_t(0x42));

+    int16_t(float64_t(0x43));

+    int16_t(int8_t   (0x44));

+    int16_t(int16_t  (0x45));

+    int16_t(int32_t  (0x46));

+    int16_t(int64_t  (0x47));

+    int16_t(uint8_t  (0x48));

+    int16_t(uint16_t (0x49));

+    int16_t(uint32_t (0x4A));

+    int16_t(uint64_t (0x4B));

+    int16_t(bool     (0x4C));

+    int32_t(float16_t(0x51));

+    int32_t(float32_t(0x52));

+    int32_t(float64_t(0x53));

+    int32_t(int8_t   (0x54));

+    int32_t(int16_t  (0x55));

+    int32_t(int32_t  (0x56));

+    int32_t(int64_t  (0x57));

+    int32_t(uint8_t  (0x58));

+    int32_t(uint16_t (0x59));

+    int32_t(uint32_t (0x5A));

+    int32_t(uint64_t (0x5B));

+    int32_t(bool     (0x5C));

+    int64_t(float16_t(0x61));

+    int64_t(float32_t(0x62));

+    int64_t(float64_t(0x63));

+    int64_t(int8_t   (0x64));

+    int64_t(int16_t  (0x65));

+    int64_t(int32_t  (0x66));

+    int64_t(int64_t  (0x67));

+    int64_t(uint8_t  (0x68));

+    int64_t(uint16_t (0x69));

+    int64_t(uint32_t (0x6A));

+    int64_t(uint64_t (0x6B));

+    int64_t(bool     (0x6C));

+    uint8_t(float16_t(0x71));

+    uint8_t(float32_t(0x72));

+    uint8_t(float64_t(0x73));

+    uint8_t(int8_t   (0x74));

+    uint8_t(int16_t  (0x75));

+    uint8_t(int32_t  (0x76));

+    uint8_t(int64_t  (0x77));

+    uint8_t(uint8_t  (0x78));

+    uint8_t(uint16_t (0x79));

+    uint8_t(uint32_t (0x7A));

+    uint8_t(uint64_t (0x7B));

+    uint8_t(bool     (0x7C));

+    uint16_t(float16_t(0x81));

+    uint16_t(float32_t(0x82));

+    uint16_t(float64_t(0x83));

+    uint16_t(int8_t   (0x84));

+    uint16_t(int16_t  (0x85));

+    uint16_t(int32_t  (0x86));

+    uint16_t(int64_t  (0x87));

+    uint16_t(uint8_t  (0x88));

+    uint16_t(uint16_t (0x89));

+    uint16_t(uint32_t (0x8A));

+    uint16_t(uint64_t (0x8B));

+    uint16_t(bool     (0x8C));

+    uint32_t(float16_t(0x91));

+    uint32_t(float32_t(0x92));

+    uint32_t(float64_t(0x93));

+    uint32_t(int8_t   (0x94));

+    uint32_t(int16_t  (0x95));

+    uint32_t(int32_t  (0x96));

+    uint32_t(int64_t  (0x97));

+    uint32_t(uint8_t  (0x98));

+    uint32_t(uint16_t (0x99));

+    uint32_t(uint32_t (0x9A));

+    uint32_t(uint64_t (0x9B));

+    uint32_t(bool     (0x9C));

+    uint64_t(float16_t(0xA1));

+    uint64_t(float32_t(0xA2));

+    uint64_t(float64_t(0xA3));

+    uint64_t(int8_t   (0xA4));

+    uint64_t(int16_t  (0xA5));

+    uint64_t(int32_t  (0xA6));

+    uint64_t(int64_t  (0xA7));

+    uint64_t(uint8_t  (0xA8));

+    uint64_t(uint16_t (0xA9));

+    uint64_t(uint32_t (0xAA));

+    uint64_t(uint64_t (0xAB));

+    uint64_t(bool     (0xAC));

+    bool(float16_t(0xB1));

+    bool(float32_t(0xB2));

+    bool(float64_t(0xB3));

+    bool(int8_t   (0xB4));

+    bool(int16_t  (0xB5));

+    bool(int32_t  (0xB6));

+    bool(int64_t  (0xB7));

+    bool(uint8_t  (0xB8));

+    bool(uint16_t (0xB9));

+    bool(uint32_t (0xBA));

+    bool(uint64_t (0xBB));

+    bool(bool     (0xBC));

+}

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

+

+layout(local_size_x=64) in;

+

+struct sA {

+  int x, y;

+};

+

+struct sB {

+  sA a;

+};

+

+layout(binding=0,set=0) uniform ubo {

+  sB  b;

+};

+

+struct sC {

+  sA state;

+} c = {

+  b.a,

+};

+

+void main()

+{

+}

diff --git a/Test/spv.controlFlowAttributes.frag b/Test/spv.controlFlowAttributes.frag
index 6d90c0d..cedd602 100644
--- a/Test/spv.controlFlowAttributes.frag
+++ b/Test/spv.controlFlowAttributes.frag
@@ -4,11 +4,18 @@
 
 bool cond;
 
+void f0() {
+        [[loop]]                   for (;;) { }
+}
+
+void f1() {
+        [[dont_unroll]]            while(true) {  }
+}
+
 void main()
 {
         [[unroll]]                 for (int i = 0; i < 8; ++i) { }
-        [[loop]]                   for (;;) { }
-        [[dont_unroll]]            while(true) {  }
+	f0();
         [[dependency_infinite]]    do {  } while(true);
         [[dependency_length(1+3)]] for (int i = 0; i < 8; ++i) { }
         [[flatten]]                if (cond) { } else { }
diff --git a/Test/spv.coopmat.comp b/Test/spv.coopmat.comp
new file mode 100644
index 0000000..ab4292f
--- /dev/null
+++ b/Test/spv.coopmat.comp
@@ -0,0 +1,115 @@
+#version 450 core
+#extension GL_KHR_memory_scope_semantics : enable

+#extension GL_NV_cooperative_matrix : enable

+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable

+#extension GL_EXT_buffer_reference : enable

+

+layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+

+const int X = 8;

+layout(constant_id = 0) const int Y = 2;

+const int Z = X*Y;

+

+fcoopmatNV<16, gl_ScopeSubgroup, Z, 8> mC;

+fcoopmatNV<16, gl_ScopeSubgroup, Z, 8> mC2[3];

+

+int arr[mC.length()];

+int arr2[mC2[1].length()];

+

+layout(constant_id = 1) const float F = 3.0;

+

+const fcoopmatNV<32, gl_ScopeSubgroup, Z, 8> mD = fcoopmatNV<32, gl_ScopeSubgroup, Z, 8>(0.0);

+const fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> mD2 = fcoopmatNV<16, gl_ScopeSubgroup, 8, 8>(1);

+

+struct S { int a; int b; int c; };

+

+const S s = S(12, 23, 34);

+

+layout(set = 0, binding = 0, buffer_reference) coherent buffer Block {

+    float y[1024*1024];

+    float x[];

+} block;

+

+layout(set = 0, binding = 0) coherent buffer Block16 {

+    float16_t y[1024*1024];

+    float16_t x[];

+

+    Block b;

+} block16;

+

+fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> f16(fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> m) { return -m; }

+fcoopmatNV<32, gl_ScopeSubgroup, 8, 8> f32(fcoopmatNV<32, gl_ScopeSubgroup, 8, 8> m) { return -m; }

+

+layout(constant_id = 2) const int SC = 1;

+fcoopmatNV<16, gl_ScopeSubgroup, SC, SC> scm[SC][SC];

+

+// sized for fcoopmatNV<16, gl_ScopeSubgroup, 16, 16>

+shared uvec4 shmatrix[16*16*2/16];

+

+void main()
+{
+    fcoopmatNV<32, gl_ScopeSubgroup, 16, (2>1?8:4)> m = fcoopmatNV<32, gl_ScopeSubgroup, 16, (2>1?8:4)>(0.0);

+

+    m = m + m;

+    m = m - m;

+    m = -m;

+    m = 2.0*m;

+    m = m*2.0;

+

+    fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> m2 = fcoopmatNV<16, gl_ScopeSubgroup, 16, 8>(m);

+

+    float x = m[1];

+    m[0] = x;

+

+    coopMatLoadNV(m, block.x, 16, 128, false);

+    coopMatStoreNV(m, block.x, 16, 128, false);

+    coopMatLoadNV(m2, block16.x, 16, 128, false);

+    coopMatStoreNV(m2, block16.x, 16, 128, false);

+    coopMatLoadNV(m, block16.b.x, 16, 128, false);

+    coopMatStoreNV(m, block16.b.x, 16, 128, false);

+

+    fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> A;

+    fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> B;

+    fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> C;

+    fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> D;

+    D = coopMatMulAddNV(A, B, C);

+

+    int l = D.length();

+

+    fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> E;

+

+    fcoopmatNV<16, gl_ScopeSubgroup, Z, Z> F = fcoopmatNV<16, gl_ScopeSubgroup, Z, Z>(0.0);

+

+    fcoopmatNV<32, gl_ScopeSubgroup, 16, (2>1?8:4)> a[5];

+    a[3][0] = 1.0;

+

+    float md1 = mD[1];

+

+    md1 += (m += m)[1234];

+

+    mC2[1] = mC2[2];

+

+    coopMatLoadNV(m, block.y, 16, 128, false);

+    coopMatStoreNV(m, block.y, 16, 128, false);

+    coopMatLoadNV(m2, block16.y, 16, 128, false);

+    coopMatStoreNV(m2, block16.y, 16, 128, false);

+

+    fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> p1;

+    fcoopmatNV<32, gl_ScopeSubgroup, 8, 8> p2;

+

+    p1 = f16(p1);

+    p2 = f32(p2);

+

+    p1 = fcoopmatNV<16, gl_ScopeSubgroup, 8, 8>(0.0);

+    p2 = fcoopmatNV<32, gl_ScopeSubgroup, 8, 8>(0.0);

+

+    p1 /= p1;

+

+    p1 *= float16_t(2.0);

+    p2 *= 4.0;

+

+    fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> ms;

+    coopMatLoadNV(ms, shmatrix, 1, 2, false);

+    coopMatStoreNV(ms, shmatrix, 1, 2, false);

+

+}
diff --git a/Test/spv.coopmat_Error.comp b/Test/spv.coopmat_Error.comp
new file mode 100644
index 0000000..220aa98
--- /dev/null
+++ b/Test/spv.coopmat_Error.comp
@@ -0,0 +1,76 @@
+#version 450 core
+#extension GL_KHR_memory_scope_semantics : enable

+#extension GL_NV_cooperative_matrix : enable

+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable

+

+layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+

+float<16> ftemplate16;

+

+fcoopmatNV fnoparams;

+

+fcoopmatNV<8, gl_ScopeSubgroup, 8, 8> fbadbits;

+

+fcoopmatNV<16, gl_ScopeSubgroup, 8> fbadnumparams;

+

+int X = 8;

+

+fcoopmatNV<16, gl_ScopeSubgroup, 8, X> fbadparam;

+

+layout(constant_id = 0) int Y = 1;

+

+shared fcoopmatNV<16, gl_ScopeSubgroup, 16, 16> sharedmat;

+

+layout(set = 0, binding = 0) buffer InvBlock {

+    fcoopmatNV<16, gl_ScopeSubgroup, 16, 16> bufmat;

+} invblock;

+

+void main()
+{

+    fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> f32_16_8;

+    fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> f16_16_8;

+

+    // invalid implicit conversions

+    f32_16_8 = f16_16_8;

+    f32_16_8 = f16_16_8 + f16_16_8;

+

+    fcoopmatNV<16, gl_ScopeSubgroup, 8, 8> f16_8_8;

+

+    // mismatching dimensions

+    f16_16_8 = f16_8_8;

+

+    fcoopmatNV<16, gl_ScopeSubgroup, 8, Y> f16_8_Y;

+    fcoopmatNV<16, gl_ScopeSubgroup, 8, (Y+1)> f16_8_Y1;

+

+    // mismatching dimensions with specialization constants

+    f16_8_Y = f16_8_Y1;

+

+    // wrong arguments for constructor

+    f16_8_8 = fcoopmatNV<16, gl_ScopeSubgroup, 8, 8>(1, 1);

+

+    // can't construct from a builtin type

+    mat4 m4;

+    fcoopmatNV<32, gl_ScopeSubgroup, 4, 4> f32_4_4 = fcoopmatNV<32, gl_ScopeSubgroup, 4, 4>(m4);

+

+    // only support a single array subscript

+    f16_16_8[0][0];

+

+    // don't support scalar component selection

+    f16_16_8.x;

+

+    f16_16_8 * f16_16_8;

+

+    f16_16_8 + 1.0;

+    f16_16_8 - 1.0;

+    f16_16_8 / 1.0;

+    f16_16_8 += 1.0;

+    f16_16_8 -= 1.0;

+    f16_16_8 /= 1.0;

+

+    f16_16_8*2.0;

+    2.0*f16_16_8;

+    f32_16_8*float16_t(2.0);

+    float16_t(2.0)*f32_16_8;

+

+    transpose(f16_8_8);

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

+#extension GL_EXT_debug_printf : enable

+

+void main()

+{

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

+

+    // ABA{backspace}Z

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

+

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

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

+}

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

+#extension GL_EXT_debug_printf : enable

+

+void main()

+{

+    // invalid hex sequence

+    debugPrintfEXT("\xZ");

+

+    // not an octal sequence

+    debugPrintfEXT("\8");

+}

diff --git a/Test/spv.demoteDisabled.frag b/Test/spv.demoteDisabled.frag
new file mode 100644
index 0000000..fca702d
--- /dev/null
+++ b/Test/spv.demoteDisabled.frag
@@ -0,0 +1,10 @@
+#version 460 core

+

+void main (void)

+{

+    {

+        int demote = 0;

+        demote;

+    }

+    demote;

+}

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

+

+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : require

+

+layout(local_size_x = 16, local_size_y = 16, local_size_z = 1) in;

+

+void main()

+{

+    vec4 v = vec4(0.0);

+    vec4(f16vec4(v));

+}
\ No newline at end of file
diff --git a/Test/spv.float16convertonlystorage.comp b/Test/spv.float16convertonlystorage.comp
new file mode 100644
index 0000000..3f8e157
--- /dev/null
+++ b/Test/spv.float16convertonlystorage.comp
@@ -0,0 +1,11 @@
+#version 450 core

+

+#extension GL_EXT_shader_16bit_storage : require

+

+layout(local_size_x = 16, local_size_y = 16, local_size_z = 1) in;

+

+void main()

+{

+    vec4 v = vec4(0.0);

+    vec4(f16vec4(v));

+}
\ No newline at end of file
diff --git a/Test/spv.fsi.frag b/Test/spv.fsi.frag
new file mode 100644
index 0000000..5e6fb5f
--- /dev/null
+++ b/Test/spv.fsi.frag
@@ -0,0 +1,20 @@
+#version 450

+#extension GL_ARB_fragment_shader_interlock : enable

+

+layout(set = 0, binding = 0) coherent buffer B1 {

+    layout(offset = 0)  int x;

+} b1;

+

+layout(set = 0, binding = 1, rgba32f) coherent uniform image2D im;

+

+layout(sample_interlock_ordered) in;

+

+void main() {

+

+    beginInvocationInterlockARB();

+

+    b1.x = 1;

+    imageStore(im, ivec2(0,0), vec4(0));

+

+    endInvocationInterlockARB();

+}

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

+#extension GL_ARB_fragment_shader_interlock : enable

+

+layout(pixel_interlock_ordered) out;

+

+layout(pixel_interlock_ordered) in;

+layout(pixel_interlock_unordered) in;

+

+void foo()

+{

+    beginInvocationInterlockARB();

+    endInvocationInterlockARB();

+}

+

+void main() {

+

+    endInvocationInterlockARB();

+    beginInvocationInterlockARB();

+

+    return;

+

+    endInvocationInterlockARB();

+}

diff --git a/Test/spv.functionParameterTypes.frag b/Test/spv.functionParameterTypes.frag
new file mode 100644
index 0000000..08c1687
--- /dev/null
+++ b/Test/spv.functionParameterTypes.frag
@@ -0,0 +1,20 @@
+#version 460 core

+#extension GL_EXT_shader_explicit_arithmetic_types_int64 : 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_float16 : enable

+

+int f(int8_t i8,

+       uint8_t u8,

+       int16_t i16,

+       uint16_t u16,

+       int64_t i64,

+       uint64_t u64,

+       float16_t f16)

+{

+    return 0;

+}

+

+void main()

+{

+}

diff --git a/Test/spv.hlslOffsets.vert b/Test/spv.hlslOffsets.vert
index 87e32a7..26950d9 100644
--- a/Test/spv.hlslOffsets.vert
+++ b/Test/spv.hlslOffsets.vert
@@ -1,6 +1,6 @@
 #version 450

 

-buffer block {

+layout(binding = 0) buffer block {

     float m0;

     vec3 m4;

     //////

diff --git a/Test/spv.intcoopmat.comp b/Test/spv.intcoopmat.comp
new file mode 100644
index 0000000..235aa16
--- /dev/null
+++ b/Test/spv.intcoopmat.comp
@@ -0,0 +1,117 @@
+#version 450 core
+#extension GL_KHR_memory_scope_semantics : enable

+#extension GL_NV_cooperative_matrix : enable

+#extension GL_NV_integer_cooperative_matrix : enable

+#extension GL_EXT_shader_explicit_arithmetic_types : enable

+#extension GL_EXT_buffer_reference : enable

+

+layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+

+const int X = 8;

+layout(constant_id = 0) const int Y = 2;

+const int Z = X*Y;

+

+icoopmatNV<8, gl_ScopeSubgroup, Z, 8> miC;

+icoopmatNV<8, gl_ScopeSubgroup, Z, 8> miC2[3];

+ucoopmatNV<8, gl_ScopeSubgroup, Z, 8> muC;

+ucoopmatNV<8, gl_ScopeSubgroup, Z, 8> muC2[3];

+

+int iarr[miC.length()];

+int iarr2[miC2[1].length()];

+int uarr[muC.length()];

+int uarr2[muC2[1].length()];

+

+const icoopmatNV<32, gl_ScopeSubgroup, Z, 8> mD = icoopmatNV<32, gl_ScopeSubgroup, Z, 8>(1);

+const ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> mD2 = ucoopmatNV<8, gl_ScopeSubgroup, 8, 8>(1);

+

+struct S { int a; int b; int c; };

+

+const S s = S(12, 23, 34);

+

+layout(set = 0, binding = 0, buffer_reference) coherent buffer Block {

+    uint y[1024*1024];

+    uint x[];

+} block;

+

+layout(set = 0, binding = 0) coherent buffer Block16 {

+    int8_t y[1024*1024];

+    int8_t x[];

+

+    Block b;

+} block8;

+

+icoopmatNV<8, gl_ScopeSubgroup, 8, 8> ineg(icoopmatNV<8, gl_ScopeSubgroup, 8, 8> m) { return -m; }

+ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> umul(ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> m) { return m * uint8_t(2); }

+

+layout(constant_id = 2) const int SC = 1;

+ucoopmatNV<32, gl_ScopeSubgroup, SC, SC> scm[SC][SC];

+

+// sized for icoopmatNV<8, gl_ScopeSubgroup, 16, 16>

+shared uvec4 shmatrix[16*16*2/16];

+

+void main()
+{
+    ucoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)> mu = ucoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)>(2);

+    icoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)> mi = icoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)>(2);

+

+    mu = mu + mu;

+    mu = mu - mu;

+    mi = -mi;

+    mi = mi * int8_t(2);

+

+    fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> mf16_0 = fcoopmatNV<16, gl_ScopeSubgroup, 16, 8>(mu);

+    fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> mf32_0 = fcoopmatNV<32, gl_ScopeSubgroup, 16, 8>(mu);

+    fcoopmatNV<16, gl_ScopeSubgroup, 16, 8> mf16_1 = fcoopmatNV<16, gl_ScopeSubgroup, 16, 8>(mi);

+    fcoopmatNV<32, gl_ScopeSubgroup, 16, 8> mf32_1 = fcoopmatNV<32, gl_ScopeSubgroup, 16, 8>(mi);

+

+    uint8_t x = mu[1];

+    mi[0] = int8_t(x);

+

+    coopMatLoadNV(mi, block.x, 16, 128, false);

+    coopMatStoreNV(mi, block.x, 16, 128, false);

+    coopMatLoadNV(mu, block8.x, 16, 128, false);

+    coopMatStoreNV(mu, block8.x, 16, 128, false);

+    coopMatLoadNV(mi, block8.b.x, 16, 128, false);

+    coopMatStoreNV(mi, block8.b.x, 16, 128, false);

+

+    ucoopmatNV<8, gl_ScopeSubgroup, 16, 8> A;

+    ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> B;

+    ucoopmatNV<8, gl_ScopeSubgroup, 16, 8> C;

+    ucoopmatNV<8, gl_ScopeSubgroup, 16, 8> D;

+    D = coopMatMulAddNV(A, B, C);

+

+    int l = D.length();

+

+

+    icoopmatNV<8, gl_ScopeSubgroup, 16, (2>1?8:4)> a[5];

+    a[3][0] = int8_t(1);

+

+    int md1 = mD[1];

+

+    md1 += (mi += mi)[1234];

+

+    muC2[0] = muC2[1];
+    muC2[1][0] = (miC2[2][0]);

+

+    coopMatLoadNV(mi, block.y, 16, 128, false);

+    coopMatStoreNV(mi, block.y, 16, 128, false);

+    coopMatLoadNV(mu, block8.y, 16, 128, false);

+    coopMatStoreNV(mu, block8.y, 16, 128, false);

+

+    icoopmatNV<8, gl_ScopeSubgroup, 8, 8> p1;

+    ucoopmatNV<8, gl_ScopeSubgroup, 8, 8> p2;

+

+    p1 = ineg(p1);

+    p2 = umul(p2);

+

+    p1 /= p1;

+    p2 /= p2;
+

+    p1 *= int8_t(2);

+    p2 *= uint8_t(4);

+

+    icoopmatNV<8, gl_ScopeSubgroup, 16, 8> ms;

+    coopMatLoadNV(ms, shmatrix, 1, 2, false);

+    coopMatStoreNV(ms, shmatrix, 1, 2, false);

+

+}
diff --git a/Test/spv.memoryScopeSemantics.comp b/Test/spv.memoryScopeSemantics.comp
index c03c123..528a639 100644
--- a/Test/spv.memoryScopeSemantics.comp
+++ b/Test/spv.memoryScopeSemantics.comp
@@ -18,6 +18,9 @@
 layout (binding = 7) nonprivate uniform BufferK { uint x; } bufferk;

 shared uint64_t atomu64;

 shared int64_t atomi64;

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

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

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

 

 

 void main()

@@ -57,5 +60,15 @@
 

     atomu64 = atomicMax(atomu64, uint64_t(7), gl_ScopeDevice, 0, 0);

     atomicCompSwap(atomi64, int64_t(10), int64_t(atomu64), gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire);

+

+    y = bufferl.x;

+    atomicAdd(bufferl.x, 1);

+    atomicOr(bufferm.x, 2);

+    imageAtomicAdd(imagei, ivec2(0,0), 3);

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

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

+

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

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

 }

 

diff --git a/Test/spv.memoryScopeSemantics_Error.comp b/Test/spv.memoryScopeSemantics_Error.comp
index 4e18b2e..1b85671 100644
--- a/Test/spv.memoryScopeSemantics_Error.comp
+++ b/Test/spv.memoryScopeSemantics_Error.comp
@@ -24,5 +24,7 @@
     uint origu = atomicCompSwap(atomu, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquireRelease);

     memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsMakeVisible);

     memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeAvailable);

+    memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsVolatile);

+    atomicCompSwap(bufferi.x, 10u, 10u, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsVolatile, gl_StorageSemanticsBuffer, gl_SemanticsAcquire);

 }

 

diff --git a/Test/spv.meshShaderBuiltins.mesh b/Test/spv.meshShaderBuiltins.mesh
index 8adff3d..0240a17 100644
--- a/Test/spv.meshShaderBuiltins.mesh
+++ b/Test/spv.meshShaderBuiltins.mesh
@@ -50,8 +50,9 @@
 
     BARRIER();
 
-    // should truncate 257 -> 1
-    gl_PrimitiveIndicesNV[0] = 257;
+    // check bound limits
+    gl_PrimitiveIndicesNV[0] = 257; // should truncate 257 -> 1
+    gl_PrimitiveIndicesNV[(MAX_PRIM * 3) - 1] = 2;
     gl_PrimitiveIndicesNV[gid] = gl_PrimitiveIndicesNV[gid-1];
 
     // writes 4 indices at offset gl_DrawID
diff --git a/Test/spv.meshShaderPerViewUserDefined.mesh b/Test/spv.meshShaderPerViewUserDefined.mesh
index 4a316eb..262504d 100644
--- a/Test/spv.meshShaderPerViewUserDefined.mesh
+++ b/Test/spv.meshShaderPerViewUserDefined.mesh
@@ -22,18 +22,30 @@
 layout(location=0) out block {
     perprimitiveNV perviewNV vec4 color1[][3];  // Implicitly sized
     perprimitiveNV vec4 color2[3];
-    perviewNV vec4 color3[MAX_VIEWS][3];          // Explicitly sized
+    perviewNV vec4 color3[MAX_VIEWS][3];        // Explicitly sized
     vec4 color4;
 } b[];
 
-// per-view block
+// per-view block attributes
 perviewNV layout(location=10) out perviewBlock {
     perprimitiveNV vec4 color5[];              // Implicitly sized
     perprimitiveNV vec4 color6[MAX_VIEWS][3];  // Explicitly sized
-    vec4 color7[][3];                            // Implicitly sized
-    vec4 color8[MAX_VIEWS];                      // Explicitly sized
+    vec4 color7[][3];                          // Implicitly sized
+    vec4 color8[MAX_VIEWS];                    // Explicitly sized
 } b2[];
 
+// per-view non-block attributes
+perviewNV                layout(location=18) out vec4 nonBlk1[MAX_VER][MAX_VIEWS]; // Explicit+Explicit
+perviewNV perprimitiveNV layout(location=19) out vec4 nonBlk2[MAX_PRIM][];         // Explicit+Implicit
+perviewNV                layout(location=20) out vec4 nonBlk3[][MAX_VIEWS];        // Implicit+Explicit
+perviewNV perprimitiveNV layout(location=21) out vec4 nonBlk4[][];                 // Implicit+Implicit
+
+// per-view non-block array attributes
+perviewNV                layout(location=22) out vec4 nonBlkArr1[MAX_VER][MAX_VIEWS][2]; // Explicit+Explicit
+perviewNV perprimitiveNV layout(location=24) out vec4 nonBlkArr2[MAX_PRIM][][2];         // Explicit+Implicit
+perviewNV                layout(location=26) out vec4 nonBlkArr3[][MAX_VIEWS][2];        // Implicit+Explicit
+perviewNV perprimitiveNV layout(location=28) out vec4 nonBlkArr4[][][2];                 // Implicit+Implicit
+
 void main()
 {
     uint iid = gl_LocalInvocationID.x;
diff --git a/Test/spv.meshShaderPerView_Errors.mesh b/Test/spv.meshShaderPerView_Errors.mesh
new file mode 100644
index 0000000..77190ef
--- /dev/null
+++ b/Test/spv.meshShaderPerView_Errors.mesh
@@ -0,0 +1,32 @@
+#version 450

+

+#define MAX_VER  81

+#define MAX_PRIM 32

+#define MAX_VIEWS gl_MaxMeshViewCountNV

+

+#extension GL_NV_mesh_shader : enable

+

+layout(local_size_x = 32) in;

+

+layout(max_vertices=MAX_VER) out;

+layout(max_primitives=MAX_PRIM) out;

+layout(triangles) out;

+

+// test error checks for use of incorrect per-view attributes

+

+// per-view block attributes

+perviewNV layout(location=0) out perviewBlock {

+    vec4 missingInnermostDimSize1[][];

+    vec4 incorrectViewDimSize1[MAX_VIEWS+1];

+    vec4 missingViewDim1;

+} b2[];

+

+// per-view non-block attributes

+perviewNV layout(location=10) out vec4 missingInnermostDimSize2[][][];

+perviewNV layout(location=11) out vec4 incorrectViewDimSize2[][MAX_VIEWS-1];

+perviewNV layout(location=12) out vec4 missingViewDim2[];

+

+void main()

+{

+}

+

diff --git a/Test/spv.meshShaderRedeclBuiltins.mesh b/Test/spv.meshShaderRedeclBuiltins.mesh
index 38107b2..1b19a75 100644
--- a/Test/spv.meshShaderRedeclBuiltins.mesh
+++ b/Test/spv.meshShaderRedeclBuiltins.mesh
@@ -22,14 +22,16 @@
     float gl_PointSize;
     float gl_ClipDistance[4];
     float gl_CullDistance[4];
-} gl_MeshVerticesNV[];
+} gl_MeshVerticesNV[MAX_VER];                   // explicitly sized to MAX_VER
 
 perprimitiveNV out gl_MeshPerPrimitiveNV {
     int gl_PrimitiveID;
     int gl_Layer;
     int gl_ViewportIndex;
     int gl_ViewportMask[];
-} gl_MeshPrimitivesNV[];
+} gl_MeshPrimitivesNV[];                        // implicitly sized to MAX_PRIM
+
+out uint gl_PrimitiveIndicesNV[MAX_PRIM*3];     // explicitly sized to MAX_PRIM * 3
 
 void main()
 {
@@ -63,4 +65,9 @@
     gl_MeshPrimitivesNV[iid+1].gl_ViewportMask[0] = gl_MeshPrimitivesNV[iid].gl_ViewportMask[0];
 
     BARRIER();
+
+    // check bound limits
+    gl_PrimitiveIndicesNV[0] = 1;
+    gl_PrimitiveIndicesNV[(MAX_PRIM * 3) - 1] = 2;
+    gl_PrimitiveCountNV = MAX_PRIM * 3;
 }
diff --git a/Test/spv.meshTaskShader.task b/Test/spv.meshTaskShader.task
index c12b3bd..ff94e6d 100644
--- a/Test/spv.meshTaskShader.task
+++ b/Test/spv.meshTaskShader.task
@@ -1,5 +1,7 @@
 #version 450
 
+#define MAX_VIEWS gl_MaxMeshViewCountNV
+
 #define BARRIER() \
     memoryBarrierShared(); \
     barrier();
@@ -19,12 +21,14 @@
 taskNV out Task {
     vec2 dummy;
     vec2 submesh[3];
+    uint viewID;
 } mytask;
 
 void main()
 {
     uint iid = gl_LocalInvocationID.x;
     uint gid = gl_WorkGroupID.x;
+    uint viewID = gl_MeshViewIndicesNV[gl_MeshViewCountNV%MAX_VIEWS];
 
     // 1. shared memory load and stores
     for (uint i = 0; i < 10; ++i) {
@@ -41,6 +45,7 @@
     mytask.submesh[0] = vec2(32.0, 33.0);
     mytask.submesh[1] = vec2(34.0, 35.0);
     mytask.submesh[2] = mytask.submesh[gid%2];
+    mytask.viewID     = viewID;
 
     BARRIER();
 
diff --git a/Test/spv.multiviewPerViewAttributes.tesc b/Test/spv.multiviewPerViewAttributes.tesc
index a0dd64d..117a1ad 100644
--- a/Test/spv.multiviewPerViewAttributes.tesc
+++ b/Test/spv.multiviewPerViewAttributes.tesc
@@ -10,5 +10,5 @@
 void main()

 {

     gl_out[gl_InvocationID].gl_ViewportMaskPerViewNV[0]    = 1;

-    gl_out[gl_InvocationID].gl_PositionPerViewNV[0]        =  gl_in[1].gl_Position;

+    gl_out[gl_InvocationID].gl_PositionPerViewNV[0] = gl_in[1].gl_Position + gl_in[1].gl_PositionPerViewNV[0];

 }

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

+#extension GL_EXT_nonuniform_qualifier : require

+layout(set=0,binding=4,rgba32f) uniform imageBuffer data[];

+layout(location = 0) out vec4     FragColor;

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

+void main()

+{

+  FragColor = imageLoad(data[nonuniformEXT(rIndex)], 0);

+}

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

+#extension GL_EXT_nonuniform_qualifier : require

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

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

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

+layout(location = 0) out vec4 FragColor;

+void main()

+{

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

+}

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

+#extension GL_EXT_nonuniform_qualifier : require

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

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

+void main()

+{

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

+}

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

+#extension GL_EXT_nonuniform_qualifier : require

+

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

+layout(location = 0) out vec4 FragColor;

+

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

+{

+	vec4 v;

+} ubos[];

+

+void main()

+{

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

+}

diff --git a/Test/spv.paramMemory.frag b/Test/spv.paramMemory.frag
index 79d2fe5..1d08081 100644
--- a/Test/spv.paramMemory.frag
+++ b/Test/spv.paramMemory.frag
@@ -1,7 +1,7 @@
 #version 310 es
 
-readonly coherent uniform layout(set = 0, binding = 0, rgba32f) highp image2D image1;
-readonly uniform layout(set = 0, binding = 2, rgba16f) highp image2D image2;
+// readonly coherent uniform layout(set = 0, binding = 0) highp image2D image1;
+// readonly uniform layout(set = 0, binding = 2) highp image2D image2;
 writeonly coherent uniform layout(set = 0, binding = 1, rgba32f) highp image2D image3;
 writeonly uniform layout(set = 0, binding = 3, rgba16f) highp image2D image4;
 
@@ -20,8 +20,8 @@
 
 void main()
 {
-	highp vec4 read1 = image_load(image1, in_coords);
-	highp vec4 read2 = image_load(image2, in_coords);
+	highp vec4 read1 = vec4(0.4); // = image_load(image1, in_coords);
+	highp vec4 read2 = vec4(0.5); // = image_load(image2, in_coords);
 	
 	image_store(image3, in_coords, read1*0.5);
 	image_store(image4, in_coords, read2*2.0);
diff --git a/Test/spv.privateVariableTypes.frag b/Test/spv.privateVariableTypes.frag
new file mode 100644
index 0000000..cb6981f
--- /dev/null
+++ b/Test/spv.privateVariableTypes.frag
@@ -0,0 +1,17 @@
+#version 460 core

+#extension GL_EXT_shader_explicit_arithmetic_types_int64 : 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_float16 : enable

+

+int8_t i8;

+uint8_t u8;

+int16_t i16;

+uint16_t u16;

+int64_t i64;

+uint64_t u64;

+float16_t f16;

+

+void main()

+{

+}

diff --git a/Test/spv.smBuiltins.frag b/Test/spv.smBuiltins.frag
new file mode 100644
index 0000000..b676e60
--- /dev/null
+++ b/Test/spv.smBuiltins.frag
@@ -0,0 +1,7 @@
+#version 450
+#extension GL_NV_shader_sm_builtins: enable
+layout(location = 0) out uvec4 data;
+void main (void)
+{
+  data = uvec4(gl_WarpsPerSMNV, gl_SMCountNV, gl_WarpIDNV, gl_SMIDNV);
+}
diff --git a/Test/spv.smBuiltins.vert b/Test/spv.smBuiltins.vert
new file mode 100644
index 0000000..0b3db02
--- /dev/null
+++ b/Test/spv.smBuiltins.vert
@@ -0,0 +1,11 @@
+#version 450
+#extension GL_NV_shader_sm_builtins: enable
+layout(set = 0, binding = 0, std430) buffer Output
+{
+  uvec4 result[];
+};
+
+void main (void)
+{
+  result[gl_VertexIndex] = uvec4(gl_WarpsPerSMNV, gl_SMCountNV, gl_WarpIDNV, gl_SMIDNV);
+}
diff --git a/Test/spv.specConstArrayCheck.vert b/Test/spv.specConstArrayCheck.vert
new file mode 100755
index 0000000..9f0dc0b
--- /dev/null
+++ b/Test/spv.specConstArrayCheck.vert
@@ -0,0 +1,14 @@
+#version 450

+

+layout(constant_id = 0) const uint a = 1;

+layout(constant_id = 1) const uint b = 2;

+layout(location = 0) out uint o;

+

+void main() {

+  uint arr1[a+a];

+  uint arr2[b];

+  o = arr1[1];

+  o = arr2[1];

+  o = arr1[6];

+  o = arr2[6];

+}

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

 {

     gl_out[gl_InvocationID].gl_SecondaryViewportMaskNV[0]            = 1;

-    gl_out[gl_InvocationID].gl_SecondaryPositionNV                   = gl_in[1].gl_Position;

+    gl_out[gl_InvocationID].gl_SecondaryPositionNV = gl_in[1].gl_Position + gl_in[1].gl_SecondaryPositionNV;

 }

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/Test/vulkan.vert b/Test/vulkan.vert
index a6af2d5..7142691 100644
--- a/Test/vulkan.vert
+++ b/Test/vulkan.vert
@@ -21,8 +21,8 @@
 }

 

 layout(binding = 0) uniform atomic_uint aui;   // ERROR, no atomics in Vulkan

-layout(shared) uniform ub1n { int a; } ub1i;   // ERROR, no shared

-layout(packed) uniform ub2n { int a; } ub2i;   // ERROR, no packed

+layout(shared, binding = 1) uniform ub1n { int a; } ub1i;   // ERROR, no shared

+layout(packed, binding = 2) uniform ub2n { int a; } ub2i;   // ERROR, no packed

 

 layout(constant_id=222) const int arraySize = 4;

 

@@ -46,9 +46,9 @@
 #error VULKAN should be 100

 #endif

 

-float AofA0[2][arraySize];              // ERROR, only outer dimension

-float AofA1[arraySize][arraySize];      // ERROR, only outer dimension

-float AofA2[arraySize][2 + arraySize];  // ERROR, only outer dimension

+float AofA0[2][arraySize];

+float AofA1[arraySize][arraySize];

+float AofA2[arraySize][2 + arraySize];

 float AofA3[arraySize][2];

 

 out ban1 {                              // ERROR, only outer dimension

@@ -63,3 +63,15 @@
 layout(binding = 3001) uniform b3001 { int a; };

 layout(location = 10) in vec4 in1;

 layout(location = 10) in vec4 in2;  // ERROR, no location aliasing

+

+layout(constant_id = 400) const int nonLit = 1;

+layout(location = nonLit, component = nonLit) in vec4 nonLit1;  // ERROR, non literal

+layout(binding = nonLit, set = nonLit) uniform nonLitBN {       // ERROR, non literal

+    layout(offset = nonLit) vec4 nonLit1;                       // ERROR, non literal

+    layout(align = nonLit) vec4 nonLit3;                        // ERROR, non literal

+    layout(xfb_offset = nonLit) vec4 nonLit4;                   // ERROR, non literal

+    layout(xfb_buffer = nonLit) vec4 nonLit5;                   // ERROR, non literal

+    layout(xfb_stride = nonLit) vec4 nonLit6;                   // ERROR, non literal

+} nonLitBI;

+layout(input_attachment_index = nonLit) vec4 nonLit3;           // ERROR, non literal

+layout(constant_id = nonLit) vec4 nonLit4;                      // ERROR, non literal

diff --git a/Test/web.array.frag b/Test/web.array.frag
new file mode 100644
index 0000000..8b8acdf
--- /dev/null
+++ b/Test/web.array.frag
@@ -0,0 +1,26 @@
+#version 310 es
+
+precision highp float;
+
+float g4[4];
+float g5[5];
+
+layout(location = 0) out vec2 colorOut;
+
+float[4] foo(float a[5])
+{
+    return float[](a[0], a[1], a[2], a[3]);
+}
+
+void main()
+{
+    g4 = foo(g5);
+
+    if (float[4](1.0, 2.0, 3.0, 4.0) == g4)
+        ;
+
+    float u[5];
+    foo(u);
+
+    colorOut = vec2(g4.length(), g5.length());
+}
diff --git a/Test/web.basic.vert b/Test/web.basic.vert
new file mode 100644
index 0000000..9bc4c30
--- /dev/null
+++ b/Test/web.basic.vert
@@ -0,0 +1,15 @@
+#version 310 es

+

+layout(location = 2) in vec4 inv4;

+layout(location = 1) out vec4 outv4;

+

+layout(binding = 3) uniform uBlock {

+    vec4 a;

+    ivec4 b;

+    uvec4 c;

+} uInst;

+

+void main()

+{

+    outv4 = normalize(inv4) * uInst.a * vec4(uInst.b) * vec4(uInst.c);

+}

diff --git a/Test/web.builtins.frag b/Test/web.builtins.frag
new file mode 100644
index 0000000..5ede9a9
--- /dev/null
+++ b/Test/web.builtins.frag
@@ -0,0 +1,58 @@
+#version 310 es
+
+precision lowp float;
+layout(location = 4) in float c1D;
+layout(location = 5) in vec2  c2D;
+layout(location = 6) in vec3  c3D;
+layout(location = 7) in smooth vec4  c4D;
+
+layout(location = 1) flat in int   ic1D;
+layout(location = 2) flat in ivec3 ic3D;
+layout(location = 3) flat in ivec4 ic4D;
+
+const ivec2 ic2D = ivec2(2, 3);
+
+struct s {
+    int i;
+    sampler2D s;
+};
+
+struct S2 {
+    vec3 c;
+    float f;
+};
+
+layout(location = 8) in S2 s2;
+
+layout(location = 0) out vec3 sc;
+layout(location = 1) out float sf;
+
+void main()
+{
+    float f = gl_FragCoord.y;
+    gl_FragDepth = f;
+
+    sc = s2.c;
+    sf = s2.f;
+
+    sinh(c1D) +
+    cosh(c1D) * tanh(c2D);
+    asinh(c4D) + acosh(c4D);
+    atanh(c3D);
+}
+
+void foo324(void)
+{
+    float p = pow(3.2, 4.6);
+    p += sin(0.4);
+    p += distance(vec2(10.0, 11.0), vec2(13.0, 15.0)); // 5
+    p += dot(vec3(2,3,5), vec3(-2,-1,4));              // 13
+    vec3 c3 = cross(vec3(3,-3,1), vec3(4,9,2));        // (-15, -2, 39)
+    c3 += faceforward(vec3(1,2,3), vec3(2,3,5), vec3(-2,-1,4));     // (-1,-2,-3)
+    c3 += faceforward(vec3(1,2,3), vec3(-2,-3,-5), vec3(-2,-1,4));  // (1,2,3)
+    vec2 c2 = reflect(vec2(1,3), vec2(0,1));           // (1,-3)
+    c2 += refract(vec2(1,3), vec2(0,1), 1.0);          // (1,-3)
+    c2 += refract(vec2(1,3), vec2(0,1), 3.0);
+    c2 += refract(vec2(1,0.1), vec2(0,1), 5.0);        // (0,0)
+    mat3x2 m32 = outerProduct(vec2(2,3), vec3(5,7,11));// rows: (10, 14, 22), (15, 21, 33)
+}
diff --git a/Test/web.builtins.vert b/Test/web.builtins.vert
new file mode 100644
index 0000000..f27b12b
--- /dev/null
+++ b/Test/web.builtins.vert
@@ -0,0 +1,14 @@
+#version 310 es

+

+layout(location = 0) in mediump float ps;

+

+invariant gl_Position;

+

+void main()

+{

+    gl_Position = vec4(ps);

+    gl_Position *= float(4 - gl_VertexIndex);

+

+    gl_PointSize = ps; 

+    gl_PointSize *= float(5 - gl_InstanceIndex);

+}

diff --git a/Test/web.comp b/Test/web.comp
new file mode 100644
index 0000000..07847b4
--- /dev/null
+++ b/Test/web.comp
@@ -0,0 +1,50 @@
+#version 310 es
+
+layout(local_size_x_id = 18, local_size_z_id = 19) in;
+
+layout(local_size_x = 2) in;
+layout(local_size_y = 5) in;
+layout(local_size_z = 7) in;
+
+const int total = gl_MaxComputeWorkGroupCount.x
+                + gl_MaxComputeWorkGroupCount.y
+                + gl_MaxComputeWorkGroupCount.z
+                + gl_MaxComputeUniformComponents
+                + gl_MaxComputeTextureImageUnits;
+
+shared vec4 s[total];
+
+int arrX[gl_WorkGroupSize.x];
+int arrY[gl_WorkGroupSize.y];
+int arrZ[gl_WorkGroupSize.z];
+
+layout(binding = 0, set = 0) buffer bName {
+    int size;
+    uvec3 count;
+    vec4 data[];
+} bInst;
+
+void main()
+{
+    barrier();
+
+    bInst.data[bInst.size / 2] *= vec4(7.0);
+
+    memoryBarrier();
+    groupMemoryBarrier();
+    memoryBarrierShared();
+    memoryBarrierBuffer();
+
+    s[3] = vec4(0, arrX[0], arrY[0], arrZ[0]);
+    bInst.count = gl_NumWorkGroups + gl_WorkGroupSize + gl_WorkGroupID + gl_LocalInvocationID +
+                  gl_GlobalInvocationID * gl_LocalInvocationIndex;
+
+    atomicAdd(bInst.size, 2);
+    atomicMin(bInst.size, 2);
+    atomicMax(bInst.size, 2);
+    atomicAnd(bInst.size, 2);
+    atomicOr(bInst.size, 2);
+    atomicXor(bInst.size, 2);
+    atomicExchange(bInst.size, 2);
+    atomicCompSwap(bInst.size, 5, 2);
+}
diff --git a/Test/web.controlFlow.frag b/Test/web.controlFlow.frag
new file mode 100644
index 0000000..89f7e68
--- /dev/null
+++ b/Test/web.controlFlow.frag
@@ -0,0 +1,91 @@
+#version 310 es
+
+precision mediump float;
+precision highp int;
+
+int c, d;
+layout(location = 0) in highp float x;
+layout(location = 1) in vec4 bigColor;
+layout(location = 2) in vec4 BaseColor;
+layout(location = 3) in float f;
+
+layout(location = 4) flat in int Count;
+layout(location = 5) flat in uvec4 v4;
+
+layout(location = 0) out vec4 outColor;
+
+void main()
+{
+    float f;
+    int a[2];
+
+    switch(c)
+    {
+    }
+
+    switch (c) {      // a no-error normal switch
+    case 1:
+        f = sin(x);
+        break;
+    case 2:
+        switch (d) {
+        case 1:
+            f = x * x * x;
+            break;
+        case 2:
+            f = x * x;
+            break;
+        }
+        break;
+    default:
+        f = tan(x);
+    }
+
+    vec4 color = BaseColor;
+
+    for (int i = 0; i < Count; ++i) {
+        color += bigColor;
+    }
+
+    outColor = color;
+
+    float sum = 0.0;
+    for (int i = 0; i < 4; ++i)
+        sum += float(v4[i]);
+
+    vec4 tv4;
+
+    for (int i = 0; i < 4; ++i)
+        tv4[i] = float(v4[i] * 4u);
+
+    outColor += vec4(sum) + tv4;
+
+    vec4 r;
+    r.xyz = BaseColor.xyz;
+
+    for (int i = 0; i < Count; ++i)
+        r.w = f;
+
+    outColor.xyz += r.xyz;
+
+    for (int i = 0; i < 16; i += 4)
+        outColor *= f;
+
+    int i = 0;
+    int A, B, C, D;
+    while (i<10) {
+        A = 1;
+        if (i%2 == 0) {
+            B = 2;
+            continue;
+            C = 2;
+        }
+        if (i%5 == 0) {
+            B = 2;
+            break;
+            C = 2;
+        }
+        i++;
+    }
+    D = 3;
+}
diff --git a/Test/web.operations.frag b/Test/web.operations.frag
new file mode 100644
index 0000000..589ae6f
--- /dev/null
+++ b/Test/web.operations.frag
@@ -0,0 +1,73 @@
+#version 310 es
+
+precision highp float;
+
+layout(binding = 0) uniform block {
+    mediump float f;
+} instanceName;
+
+struct S {
+    int i;
+} s;
+
+float a[5];
+
+void main()
+{
+    bool b;
+    float f;
+    int i;
+    uint u;
+    bvec3 b3;
+    vec3 v3;
+    ivec3 iv3;
+    uvec3 uv3;
+    vec4 v4;
+    ivec4 iv4;
+    uvec4 uv4;
+    mat2 m2;
+    mat4 m4;
+
+    f * v4;
+    u + u;
+    uv4 / u;
+    iv3 -= iv3;
+    
+    i %= 3;
+    uv3 % 4u;
+    --m2;
+    iv4++;
+
+    m4 != m4;
+    m2 == m2;
+    i <= i;
+    a == a;
+    s != s;
+
+    b && b;
+    b || b;
+    b ^^ b;
+
+    !b, uv3;
+
+    ~i;
+    ~u;
+    ~uv3;
+    ~iv3;
+
+    uv3 <<= i;
+    i >> i;
+    u << u;
+    iv3 >> iv3;
+
+    i & i;
+    u | u;
+    iv3 ^ iv3;
+    u & uv3;
+    uv3 | u;
+    uv3 &= u;
+    int arr[0x222 & 0xf];
+    arr[1]; // size 2
+    int arr2[(uvec2(0, 0x2) | 0x1u).y];
+    arr2[2]; // size 3
+}
diff --git a/Test/web.runtests b/Test/web.runtests
new file mode 100755
index 0000000..3283dd8
--- /dev/null
+++ b/Test/web.runtests
@@ -0,0 +1,38 @@
+#!/usr/bin/env bash
+
+TESTLIST=web.testlist
+TARGETDIR=localResults
+BASEDIR=baseResults
+EXE=../build/install/bin/glslangValidator.exe
+HASERROR=0
+mkdir -p $TARGETDIR
+
+if [ -a $TESTLIST ]
+  then
+    while read t; do
+      echo Running $t...
+      b=`basename $t`
+      $EXE -V -o webtest.spv $t
+      spirv-dis webtest.spv > $TARGETDIR/$b.out
+      rm -f webtest.spv
+      diff -b $BASEDIR/$b.out $TARGETDIR/$b.out || HASERROR=1
+    done < $TESTLIST
+else
+  echo $TESTLIST is missing
+fi
+
+wc --bytes $EXE > $TARGETDIR/size
+echo "base size was" `cat $BASEDIR/size`
+echo "new  size  is" `cat $TARGETDIR/size`
+
+#
+# Final checking
+#
+if [ $HASERROR -eq 0 ]
+then
+    echo Tests Succeeded.
+else
+    echo Tests Failed.
+fi
+
+exit $HASERROR
diff --git a/Test/web.separate.frag b/Test/web.separate.frag
new file mode 100644
index 0000000..b747cba
--- /dev/null
+++ b/Test/web.separate.frag
@@ -0,0 +1,63 @@
+#version 310 es
+
+precision highp sampler;
+precision highp samplerShadow;
+precision highp texture2DArray;
+precision highp itexture2D;
+precision highp itexture3D;
+precision highp itextureCube;
+precision highp itexture2DArray;
+precision highp utexture2D;
+precision highp utexture3D;
+precision highp utextureCube;
+precision highp utexture2DArray;
+precision highp texture3D;
+precision highp float;
+
+layout(binding = 0) uniform sampler s;
+layout(binding = 1) uniform samplerShadow sShadow;
+layout(binding = 2) uniform sampler sA[4];
+layout(binding = 3) uniform texture2D t2d;
+layout(binding = 4) uniform texture3D t3d[4];
+layout(location = 0) flat in int i;
+
+layout(location = 0) out vec4 color;
+
+void main()
+{
+    color = texture(sampler2D(t2d, s), vec2(0.5));
+    color += texture(sampler3D(t3d[1], sA[2]), vec3(0.5));
+    color += texture(sampler2D(t2d, s), vec2(0.5));
+}
+
+layout(binding =  5) uniform texture2D                 tex2D;
+layout(binding =  6) uniform textureCube               texCube;
+layout(binding = 15) uniform texture2DArray            tex2DArray;
+layout(binding = 16) uniform itexture2D                itex2D;
+layout(binding = 17) uniform itexture3D                itex3D;
+layout(binding = 18) uniform itextureCube              itexCube;
+layout(binding = 19) uniform itexture2DArray           itex2DArray;
+layout(binding = 20) uniform utexture2D                utex2D;
+layout(binding = 21) uniform utexture3D                utex3D;
+layout(binding = 22) uniform utextureCube              utexCube;
+layout(binding = 23) uniform utexture2DArray           utex2DArray;
+layout(binding = 36) uniform texture3D                 tex3D;
+
+void foo()
+{
+    sampler2D              (tex2D, s);
+    samplerCube            (texCube, s);
+    samplerCubeShadow      (texCube, sShadow);
+    sampler2DArray         (tex2DArray, s);
+    sampler2DArrayShadow   (tex2DArray, sShadow);
+    isampler2D             (itex2D, s);
+    isampler3D             (itex3D, s);
+    isamplerCube           (itexCube, s);
+    isampler2DArray        (itex2DArray, s);
+    usampler2D             (utex2D, s);
+    usampler3D             (utex3D, s);
+    usamplerCube           (utexCube, s);
+    usampler2DArray        (utex2DArray, s);
+    sampler3D              (tex3D, s);
+    sampler2DShadow        (tex2D, sShadow);
+}
diff --git a/Test/web.testlist b/Test/web.testlist
new file mode 100644
index 0000000..764c0c0
--- /dev/null
+++ b/Test/web.testlist
@@ -0,0 +1,9 @@
+web.builtins.vert
+web.builtins.frag
+web.basic.vert
+web.controlFlow.frag
+web.operations.frag
+web.texture.frag
+web.array.frag
+web.separate.frag
+web.comp
diff --git a/Test/web.texture.frag b/Test/web.texture.frag
new file mode 100644
index 0000000..5bfd962
--- /dev/null
+++ b/Test/web.texture.frag
@@ -0,0 +1,77 @@
+#version 310 es
+layout(binding = 1) uniform sampler2D s2D;
+layout(binding = 2) uniform lowp sampler3D s3D;
+layout(binding = 3) uniform samplerCube sCube;
+layout(binding = 4) uniform lowp samplerCubeShadow sCubeShadow;
+layout(binding = 5) uniform lowp sampler2DShadow s2DShadow;
+layout(binding = 6) uniform lowp sampler2DArray s2DArray;
+layout(binding = 7) uniform lowp sampler2DArrayShadow s2DArrayShadow;
+layout(binding = 8) uniform lowp isampler2D is2D;
+layout(binding = 9) uniform lowp isampler3D is3D;
+layout(binding = 10) uniform lowp isamplerCube isCube;
+layout(binding = 11) uniform lowp isampler2DArray is2DArray;
+layout(binding = 12) uniform lowp usampler2D us2D;
+layout(binding = 13) uniform lowp usampler3D us3D;
+layout(binding = 14) uniform lowp usamplerCube usCube;
+layout(binding = 15) uniform lowp usampler2DArray us2DArray;
+
+precision lowp float;
+layout(location = 4) in float c1D;
+layout(location = 5) in vec2  c2D;
+layout(location = 6) in vec3  c3D;
+layout(location = 7) in smooth vec4  c4D;
+
+layout(location = 1) flat in int   ic1D;
+layout(location = 2) flat in ivec3 ic3D;
+layout(location = 3) flat in ivec4 ic4D;
+
+const ivec2 ic2D = ivec2(2, 3);
+
+struct s {
+    int i;
+    sampler2D s;
+};
+
+struct S2 {
+    vec3 c;
+    float f;
+};
+
+layout(location = 8) in S2 s2;
+
+layout(location = 0) out vec3 sc;
+layout(location = 1) out float sf;
+
+layout(binding = 0) uniform sampler2D arrayedSampler[5];
+
+void main()
+{
+    float f;
+    vec4 v;
+    v = texture(s2D, c2D);
+    v = textureProj(s3D, c4D);
+    v = textureLod(s2DArray, c3D, 1.2);
+    v = texelFetch(s3D, ic3D, ic1D);
+    f = textureLodOffset(s2DShadow, c3D, c1D, ic2D);
+    v = textureProjLodOffset(s2D, c3D, c1D, ic2D);
+    v = textureGrad(sCube, c3D, c3D, c3D);
+    f = textureGradOffset(s2DArrayShadow, c4D, c2D, c2D, ic2D);
+    v = textureProjGrad(s3D, c4D, c3D, c3D);
+    v = textureProjGradOffset(s2D, c3D, c2D, c2D, ic2D);
+
+    ivec4 iv;
+    iv = texture(is2D, c2D);
+    iv = textureProjOffset(is2D, c4D, ic2D);
+    iv = textureProjLod(is2D, c3D, c1D);
+    iv = textureProjGrad(is2D, c3D, c2D, c2D);
+    iv = texture(is3D, c3D, 4.2);
+    iv = textureLod(isCube, c3D, c1D);
+    iv = texelFetch(is2DArray, ic3D, ic1D);
+
+    iv.xy = textureSize(sCubeShadow, 2);
+}
+
+void foo23()
+{
+    textureOffset(s2DShadow, c3D, ivec2(-8, 7), c1D);
+}
diff --git a/WORKSPACE b/WORKSPACE
new file mode 100644
index 0000000..3c38e61
--- /dev/null
+++ b/WORKSPACE
@@ -0,0 +1,27 @@
+workspace(name = "org_khronos_glslang")
+load(
+    "@bazel_tools//tools/build_defs/repo:http.bzl",
+    "http_archive",
+)
+
+http_archive(
+    name = "com_google_googletest",
+    sha256 = "ef9e2e12e7bf115ee48b427ae171fc869eeaf1b532c0fcfd982f6a353d2471b4",
+    strip_prefix = "googletest-37ae1fc5e6be26f367d76c078beabd7024fed53a",
+    urls = ["https://github.com/google/googletest/archive/37ae1fc5e6be26f367d76c078beabd7024fed53a.zip"],  # 2018-07-16
+)
+
+http_archive(
+    name = "com_googlesource_code_re2",
+    sha256 = "b885bb965ab4b6cf8718bbb8154d8f6474cd00331481b6d3e390babb3532263e",
+    strip_prefix = "re2-e860767c86e577b87deadf24cc4567ea83c4f162/",
+    urls = ["https://github.com/google/re2/archive/e860767c86e577b87deadf24cc4567ea83c4f162.zip"],
+)
+
+http_archive(
+    name = "com_google_effcee",
+    build_file = "BUILD.effcee.bazel",
+    sha256 = "b0c21a01995fdf9792510566d78d5e7fe6f83cb4ba986eba691f4926f127cb34",
+    strip_prefix = "effcee-8f0a61dc95e0df18c18e0ac56d83b3fa9d2fe90b/",
+    urls = ["https://github.com/google/effcee/archive/8f0a61dc95e0df18c18e0ac56d83b3fa9d2fe90b.zip"],
+)
diff --git a/_config.yml b/_config.yml
new file mode 100644
index 0000000..e8b995b
--- /dev/null
+++ b/_config.yml
@@ -0,0 +1 @@
+theme: jekyll-theme-merlot
diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp
new file mode 100644
index 0000000..c4c24a9
--- /dev/null
+++ b/glslang/CInterface/glslang_c_interface.cpp
@@ -0,0 +1,461 @@
+/**
+    This code is based on the glslang_c_interface implementation by Viktor Latypov
+**/
+
+/**
+BSD 2-Clause License
+
+Copyright (c) 2019, Viktor Latypov
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**/
+
+#include "glslang/Include/glslang_c_interface.h"
+
+#include "SPIRV/GlslangToSpv.h"
+#include "SPIRV/Logger.h"
+#include "SPIRV/SpvTools.h"
+#include "StandAlone/DirStackFileIncluder.h"
+#include "StandAlone/ResourceLimits.h"
+#include "glslang/Include/ShHandle.h"
+
+#include "glslang/Include/ResourceLimits.h"
+#include "glslang/MachineIndependent/Versions.h"
+
+static_assert(int(GLSLANG_STAGE_COUNT) == EShLangCount, "");
+static_assert(int(GLSLANG_STAGE_MASK_COUNT) == EShLanguageMaskCount, "");
+static_assert(int(GLSLANG_SOURCE_COUNT) == glslang::EShSourceCount, "");
+static_assert(int(GLSLANG_CLIENT_COUNT) == glslang::EShClientCount, "");
+static_assert(int(GLSLANG_TARGET_COUNT) == glslang::EShTargetCount, "");
+static_assert(int(GLSLANG_TARGET_CLIENT_VERSION_COUNT) == glslang::EShTargetClientVersionCount, "");
+static_assert(int(GLSLANG_TARGET_LANGUAGE_VERSION_COUNT) == glslang::EShTargetLanguageVersionCount, "");
+static_assert(int(GLSLANG_OPT_LEVEL_COUNT) == EshOptLevelCount, "");
+static_assert(int(GLSLANG_TEX_SAMP_TRANS_COUNT) == EShTexSampTransCount, "");
+static_assert(int(GLSLANG_MSG_COUNT) == EShMsgCount, "");
+static_assert(int(GLSLANG_REFLECTION_COUNT) == EShReflectionCount, "");
+static_assert(int(GLSLANG_PROFILE_COUNT) == EProfileCount, "");
+static_assert(sizeof(glslang_limits_t) == sizeof(TLimits), "");
+static_assert(sizeof(glslang_resource_t) == sizeof(TBuiltInResource), "");
+
+typedef struct glslang_shader_s {
+    glslang::TShader* shader;
+    std::string preprocessedGLSL;
+} glslang_shader_t;
+
+typedef struct glslang_program_s {
+    glslang::TProgram* program;
+    std::vector<unsigned int> spirv;
+    std::string loggerMessages;
+} glslang_program_t;
+
+/* Wrapper/Adapter for C glsl_include_callbacks_t functions
+
+   This class contains a 'glsl_include_callbacks_t' structure
+   with C include_local/include_system callback pointers.
+
+   This class implement TShader::Includer interface
+   by redirecting C++ virtual methods to C callbacks.
+
+   The 'IncludeResult' instances produced by this Includer
+   contain a reference to glsl_include_result_t C structure
+   to allow its lifetime management by another C callback
+   (CallbackIncluder::callbacks::free_include_result)
+*/
+class CallbackIncluder : public glslang::TShader::Includer {
+public:
+    /* Wrapper of IncludeResult which stores a glsl_include_result object internally */
+    class CallbackIncludeResult : public glslang::TShader::Includer::IncludeResult {
+    public:
+        CallbackIncludeResult(const std::string& headerName, const char* const headerData, const size_t headerLength,
+                              void* userData, glsl_include_result_t* includeResult)
+            : glslang::TShader::Includer::IncludeResult(headerName, headerData, headerLength, userData),
+              includeResult(includeResult)
+        {
+        }
+
+        virtual ~CallbackIncludeResult() {}
+
+    protected:
+        friend class CallbackIncluder;
+
+        glsl_include_result_t* includeResult;
+    };
+
+public:
+    CallbackIncluder(glsl_include_callbacks_t _callbacks, void* _context) : callbacks(_callbacks), context(_context) {}
+
+    virtual ~CallbackIncluder() {}
+
+    virtual IncludeResult* includeSystem(const char* headerName, const char* includerName,
+                                         size_t inclusionDepth) override
+    {
+        if (this->callbacks.include_system) {
+            glsl_include_result_t* result =
+                this->callbacks.include_system(this->context, headerName, includerName, inclusionDepth);
+
+            return new CallbackIncludeResult(std::string(headerName), result->header_data, result->header_length,
+                                             nullptr, result);
+        }
+
+        return glslang::TShader::Includer::includeSystem(headerName, includerName, inclusionDepth);
+    }
+
+    virtual IncludeResult* includeLocal(const char* headerName, const char* includerName,
+                                        size_t inclusionDepth) override
+    {
+        if (this->callbacks.include_local) {
+            glsl_include_result_t* result =
+                this->callbacks.include_local(this->context, headerName, includerName, inclusionDepth);
+
+            return new CallbackIncludeResult(std::string(headerName), result->header_data, result->header_length,
+                                             nullptr, result);
+        }
+
+        return glslang::TShader::Includer::includeLocal(headerName, includerName, inclusionDepth);
+    }
+
+    /* This function only calls free_include_result callback
+       when the IncludeResult instance is allocated by a C function */
+    virtual void releaseInclude(IncludeResult* result) override
+    {
+        if (result == nullptr)
+            return;
+
+        if (this->callbacks.free_include_result && (result->userData == nullptr)) {
+            CallbackIncludeResult* innerResult = static_cast<CallbackIncludeResult*>(result);
+            /* use internal free() function */
+            this->callbacks.free_include_result(this->context, innerResult->includeResult);
+            /* ignore internal fields of TShader::Includer::IncludeResult */
+            delete result;
+            return;
+        }
+
+        delete[] static_cast<char*>(result->userData);
+        delete result;
+    }
+
+private:
+    CallbackIncluder() {}
+
+    /* C callback pointers */
+    glsl_include_callbacks_t callbacks;
+    /* User-defined context */
+    void* context;
+};
+
+int glslang_initialize_process() { return static_cast<int>(glslang::InitializeProcess()); }
+
+void glslang_finalize_process() { glslang::FinalizeProcess(); }
+
+static EShLanguage c_shader_stage(glslang_stage_t stage)
+{
+    switch (stage) {
+    case GLSLANG_STAGE_VERTEX:
+        return EShLangVertex;
+    case GLSLANG_STAGE_TESSCONTROL:
+        return EShLangTessControl;
+    case GLSLANG_STAGE_TESSEVALUATION:
+        return EShLangTessEvaluation;
+    case GLSLANG_STAGE_GEOMETRY:
+        return EShLangGeometry;
+    case GLSLANG_STAGE_FRAGMENT:
+        return EShLangFragment;
+    case GLSLANG_STAGE_COMPUTE:
+        return EShLangCompute;
+    case GLSLANG_STAGE_RAYGEN_NV:
+        return EShLangRayGen;
+    case GLSLANG_STAGE_INTERSECT_NV:
+        return EShLangIntersect;
+    case GLSLANG_STAGE_ANYHIT_NV:
+        return EShLangAnyHit;
+    case GLSLANG_STAGE_CLOSESTHIT_NV:
+        return EShLangClosestHit;
+    case GLSLANG_STAGE_MISS_NV:
+        return EShLangMiss;
+    case GLSLANG_STAGE_CALLABLE_NV:
+        return EShLangCallable;
+    case GLSLANG_STAGE_TASK_NV:
+        return EShLangTaskNV;
+    case GLSLANG_STAGE_MESH_NV:
+        return EShLangMeshNV;
+    default:
+        break;
+    }
+    return EShLangCount;
+}
+
+static int c_shader_messages(glslang_messages_t messages)
+{
+#define CONVERT_MSG(in, out)                                                                                           \
+    if ((messages & in) == in)                                                                                         \
+        res |= out;
+
+    int res = 0;
+
+    CONVERT_MSG(GLSLANG_MSG_RELAXED_ERRORS_BIT, EShMsgRelaxedErrors);
+    CONVERT_MSG(GLSLANG_MSG_SUPPRESS_WARNINGS_BIT, EShMsgSuppressWarnings);
+    CONVERT_MSG(GLSLANG_MSG_AST_BIT, EShMsgAST);
+    CONVERT_MSG(GLSLANG_MSG_SPV_RULES_BIT, EShMsgSpvRules);
+    CONVERT_MSG(GLSLANG_MSG_VULKAN_RULES_BIT, EShMsgVulkanRules);
+    CONVERT_MSG(GLSLANG_MSG_ONLY_PREPROCESSOR_BIT, EShMsgOnlyPreprocessor);
+    CONVERT_MSG(GLSLANG_MSG_READ_HLSL_BIT, EShMsgReadHlsl);
+    CONVERT_MSG(GLSLANG_MSG_CASCADING_ERRORS_BIT, EShMsgCascadingErrors);
+    CONVERT_MSG(GLSLANG_MSG_KEEP_UNCALLED_BIT, EShMsgKeepUncalled);
+    CONVERT_MSG(GLSLANG_MSG_HLSL_OFFSETS_BIT, EShMsgHlslOffsets);
+    CONVERT_MSG(GLSLANG_MSG_DEBUG_INFO_BIT, EShMsgDebugInfo);
+    CONVERT_MSG(GLSLANG_MSG_HLSL_ENABLE_16BIT_TYPES_BIT, EShMsgHlslEnable16BitTypes);
+    CONVERT_MSG(GLSLANG_MSG_HLSL_LEGALIZATION_BIT, EShMsgHlslLegalization);
+    CONVERT_MSG(GLSLANG_MSG_HLSL_DX9_COMPATIBLE_BIT, EShMsgHlslDX9Compatible);
+    CONVERT_MSG(GLSLANG_MSG_BUILTIN_SYMBOL_TABLE_BIT, EShMsgBuiltinSymbolTable);
+    return res;
+#undef CONVERT_MSG
+}
+
+static glslang::EShTargetLanguageVersion
+c_shader_target_language_version(glslang_target_language_version_t target_language_version)
+{
+    switch (target_language_version) {
+    case GLSLANG_TARGET_SPV_1_0:
+        return glslang::EShTargetSpv_1_0;
+    case GLSLANG_TARGET_SPV_1_1:
+        return glslang::EShTargetSpv_1_1;
+    case GLSLANG_TARGET_SPV_1_2:
+        return glslang::EShTargetSpv_1_2;
+    case GLSLANG_TARGET_SPV_1_3:
+        return glslang::EShTargetSpv_1_3;
+    case GLSLANG_TARGET_SPV_1_4:
+        return glslang::EShTargetSpv_1_4;
+    case GLSLANG_TARGET_SPV_1_5:
+        return glslang::EShTargetSpv_1_5;
+    default:
+        break;
+    }
+    return glslang::EShTargetSpv_1_0;
+}
+
+static glslang::EShClient c_shader_client(glslang_client_t client)
+{
+    switch (client) {
+    case GLSLANG_CLIENT_VULKAN:
+        return glslang::EShClientVulkan;
+    case GLSLANG_CLIENT_OPENGL:
+        return glslang::EShClientOpenGL;
+    default:
+        break;
+    }
+
+    return glslang::EShClientNone;
+}
+
+static glslang::EShTargetClientVersion c_shader_client_version(glslang_target_client_version_t client_version)
+{
+    switch (client_version) {
+    case GLSLANG_TARGET_VULKAN_1_1:
+        return glslang::EShTargetVulkan_1_1;
+    case GLSLANG_TARGET_OPENGL_450:
+        return glslang::EShTargetOpenGL_450;
+    default:
+        break;
+    }
+
+    return glslang::EShTargetVulkan_1_0;
+}
+
+static glslang::EShTargetLanguage c_shader_target_language(glslang_target_language_t target_language)
+{
+    if (target_language == GLSLANG_TARGET_NONE)
+        return glslang::EShTargetNone;
+
+    return glslang::EShTargetSpv;
+}
+
+static glslang::EShSource c_shader_source(glslang_source_t source)
+{
+    switch (source) {
+    case GLSLANG_SOURCE_GLSL:
+        return glslang::EShSourceGlsl;
+    case GLSLANG_SOURCE_HLSL:
+        return glslang::EShSourceHlsl;
+    default:
+        break;
+    }
+
+    return glslang::EShSourceNone;
+}
+
+static EProfile c_shader_profile(glslang_profile_t profile)
+{
+    switch (profile) {
+    case GLSLANG_BAD_PROFILE:
+        return EBadProfile;
+    case GLSLANG_NO_PROFILE:
+        return ENoProfile;
+    case GLSLANG_CORE_PROFILE:
+        return ECoreProfile;
+    case GLSLANG_COMPATIBILITY_PROFILE:
+        return ECompatibilityProfile;
+    case GLSLANG_ES_PROFILE:
+        return EEsProfile;
+    case GLSLANG_PROFILE_COUNT: // Should not use this
+        break;
+    }
+
+    return EProfile();
+}
+
+glslang_shader_t* glslang_shader_create(const glslang_input_t* input)
+{
+    if (!input || !input->code) {
+        printf("Error creating shader: null input(%p)/input->code\n", input);
+
+        if (input)
+            printf("input->code = %p\n", input->code);
+
+        return nullptr;
+    }
+
+    glslang_shader_t* shader = new glslang_shader_t();
+
+    shader->shader = new glslang::TShader(c_shader_stage(input->stage));
+    shader->shader->setStrings(&input->code, 1);
+    shader->shader->setEnvInput(c_shader_source(input->language), c_shader_stage(input->stage),
+                                c_shader_client(input->client), input->default_version);
+    shader->shader->setEnvClient(c_shader_client(input->client), c_shader_client_version(input->client_version));
+    shader->shader->setEnvTarget(c_shader_target_language(input->target_language),
+                                 c_shader_target_language_version(input->target_language_version));
+
+    return shader;
+}
+
+const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader)
+{
+    return shader->preprocessedGLSL.c_str();
+}
+
+int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input)
+{
+    DirStackFileIncluder Includer;
+    /* TODO: use custom callbacks if they are available in 'i->callbacks' */
+    return shader->shader->preprocess(
+        reinterpret_cast<const TBuiltInResource*>(input->resource),
+        input->default_version,
+        c_shader_profile(input->default_profile),
+        input->force_default_version_and_profile != 0,
+        input->forward_compatible != 0,
+        (EShMessages)c_shader_messages(input->messages),
+        &shader->preprocessedGLSL,
+        Includer
+    );
+}
+
+int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input)
+{
+    const char* preprocessedCStr = shader->preprocessedGLSL.c_str();
+    shader->shader->setStrings(&preprocessedCStr, 1);
+
+    return shader->shader->parse(
+        reinterpret_cast<const TBuiltInResource*>(input->resource),
+        input->default_version,
+        input->forward_compatible != 0,
+        (EShMessages)c_shader_messages(input->messages)
+    );
+}
+
+const char* glslang_shader_get_info_log(glslang_shader_t* shader) { return shader->shader->getInfoLog(); }
+
+const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader) { return shader->shader->getInfoDebugLog(); }
+
+void glslang_shader_delete(glslang_shader_t* shader)
+{
+    if (!shader)
+        return;
+
+    delete (shader->shader);
+    delete (shader);
+}
+
+glslang_program_t* glslang_program_create()
+{
+    glslang_program_t* p = new glslang_program_t();
+    p->program = new glslang::TProgram();
+    return p;
+}
+
+void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage)
+{
+    spv::SpvBuildLogger logger;
+    glslang::SpvOptions spvOptions;
+    spvOptions.validate = true;
+
+    const glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage));
+
+    glslang::GlslangToSpv(*intermediate, program->spirv, &logger, &spvOptions);
+
+    program->loggerMessages = logger.getAllMessages();
+}
+
+size_t glslang_program_SPIRV_get_size(glslang_program_t* program) { return program->spirv.size(); }
+
+void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int* out)
+{
+    memcpy(out, program->spirv.data(), program->spirv.size() * sizeof(unsigned int));
+}
+
+unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program)
+{
+    return program->spirv.data();
+}
+
+const char* glslang_program_SPIRV_get_messages(glslang_program_t* program)
+{
+    return program->loggerMessages.empty() ? nullptr : program->loggerMessages.c_str();
+}
+
+void glslang_program_delete(glslang_program_t* program)
+{
+    if (!program)
+        return;
+
+    delete (program->program);
+    delete (program);
+}
+
+void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader)
+{
+    program->program->addShader(shader->shader);
+}
+
+int glslang_program_link(glslang_program_t* program, int messages)
+{
+    return (int)program->program->link((EShMessages)messages);
+}
+
+const char* glslang_program_get_info_log(glslang_program_t* program)
+{
+    return program->program->getInfoLog();
+}
+
+const char* glslang_program_get_info_debug_log(glslang_program_t* program)
+{
+    return program->program->getInfoDebugLog();
+}
diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt
index 5f51476..a0259a3 100644
--- a/glslang/CMakeLists.txt
+++ b/glslang/CMakeLists.txt
@@ -6,7 +6,13 @@
     message("unknown platform")
 endif(WIN32)
 
+if(EMSCRIPTEN OR ENABLE_GLSLANG_JS)
+    # May be enabled on non-Emscripten builds for binary-size testing.
+    add_subdirectory(OSDependent/Web)
+endif(EMSCRIPTEN OR ENABLE_GLSLANG_JS)
+
 set(SOURCES
+    MachineIndependent/glslang.m4
     MachineIndependent/glslang.y
     MachineIndependent/glslang_tab.cpp
     MachineIndependent/attribute.cpp
@@ -36,7 +42,8 @@
     MachineIndependent/preprocessor/PpTokens.cpp
     MachineIndependent/propagateNoContraction.cpp
     GenericCodeGen/CodeGen.cpp
-    GenericCodeGen/Link.cpp)
+    GenericCodeGen/Link.cpp
+    CInterface/glslang_c_interface.cpp)
 
 set(HEADERS
     Public/ShaderLang.h
@@ -44,6 +51,8 @@
     Include/BaseTypes.h
     Include/Common.h
     Include/ConstantUnion.h
+    Include/glslang_c_interface.h
+    Include/glslang_c_shader_types.h
     Include/InfoSink.h
     Include/InitializeGlobals.h
     Include/intermediate.h
@@ -71,22 +80,15 @@
     MachineIndependent/preprocessor/PpContext.h
     MachineIndependent/preprocessor/PpTokens.h)
 
-# This might be useful for making grammar changes:
-#
-# find_package(BISON)
-# add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp.h
-#                    COMMAND ${BISON_EXECUTABLE} --defines=${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp.h -t ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang.y -o ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp
-#                    MAIN_DEPENDENCY MachineIndependent/glslang.y
-#                    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
-# set(BISON_GLSLParser_OUTPUT_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp)
-
 glslang_pch(SOURCES MachineIndependent/pch.cpp)
 
 add_library(glslang ${LIB_TYPE} ${BISON_GLSLParser_OUTPUT_SOURCE} ${SOURCES} ${HEADERS})
 set_property(TARGET glslang PROPERTY FOLDER glslang)
 set_property(TARGET glslang PROPERTY POSITION_INDEPENDENT_CODE ON)
 target_link_libraries(glslang OGLCompiler OSDependent)
-target_include_directories(glslang PUBLIC ..)
+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 "")
@@ -106,13 +108,15 @@
 
 if(ENABLE_GLSLANG_INSTALL)
     if(BUILD_SHARED_LIBS)
-        install(TARGETS glslang
+        install(TARGETS glslang EXPORT glslangTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-                LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+                LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+                RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
     else()
-        install(TARGETS glslang
+        install(TARGETS glslang EXPORT glslangTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endif()
+    install(EXPORT glslangTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
 endif(ENABLE_GLSLANG_INSTALL)
 
 if(ENABLE_GLSLANG_INSTALL)
diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h
index 1827c49..816b179 100644
--- a/glslang/Include/BaseTypes.h
+++ b/glslang/Include/BaseTypes.h
@@ -2,6 +2,7 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -61,12 +62,9 @@
     EbtSampler,
     EbtStruct,
     EbtBlock,
-
-#ifdef NV_EXTENSIONS
-    EbtAccStructNV,
-#endif
-
+    EbtAccStruct,
     EbtReference,
+    EbtRayQuery,
 
     // HLSL types that live only temporarily.
     EbtString,
@@ -94,13 +92,11 @@
     EvqBuffer,        // read/write, shared with app
     EvqShared,        // compute shader's read/write 'shared' qualifier
 
-#ifdef NV_EXTENSIONS
-    EvqPayloadNV,
-    EvqPayloadInNV,
-    EvqHitAttrNV,
-    EvqCallableDataNV,
-    EvqCallableDataInNV,
-#endif
+    EvqPayload,
+    EvqPayloadIn,
+    EvqHitAttr,
+    EvqCallableData,
+    EvqCallableDataIn,
 
     // parameters
     EvqIn,            // also, for 'in' in the grammar before we know if it's a pipeline input or an 'in' parameter
@@ -221,7 +217,6 @@
     EbvSampleMask,
     EbvHelperInvocation,
 
-#ifdef AMD_EXTENSIONS
     EbvBaryCoordNoPersp,
     EbvBaryCoordNoPerspCentroid,
     EbvBaryCoordNoPerspSample,
@@ -229,7 +224,6 @@
     EbvBaryCoordSmoothCentroid,
     EbvBaryCoordSmoothSample,
     EbvBaryCoordPullModel,
-#endif
 
     EbvViewIndex,
     EbvDeviceIndex,
@@ -237,7 +231,6 @@
     EbvFragSizeEXT,
     EbvFragInvocationCountEXT,
 
-#ifdef NV_EXTENSIONS
     EbvViewportMaskNV,
     EbvSecondaryPositionNV,
     EbvSecondaryViewportMaskNV,
@@ -246,23 +239,28 @@
     EbvFragFullyCoveredNV,
     EbvFragmentSizeNV,
     EbvInvocationsPerPixelNV,
-    // raytracing
-    EbvLaunchIdNV,
-    EbvLaunchSizeNV,
-    EbvInstanceCustomIndexNV,
-    EbvWorldRayOriginNV,
-    EbvWorldRayDirectionNV,
-    EbvObjectRayOriginNV,
-    EbvObjectRayDirectionNV,
-    EbvRayTminNV,
-    EbvRayTmaxNV,
-    EbvHitTNV,
-    EbvHitKindNV,
-    EbvObjectToWorldNV,
-    EbvWorldToObjectNV,
-    EbvIncomingRayFlagsNV,
+    // ray tracing
+    EbvLaunchId,
+    EbvLaunchSize,
+    EbvInstanceCustomIndex,
+    EbvGeometryIndex,
+    EbvWorldRayOrigin,
+    EbvWorldRayDirection,
+    EbvObjectRayOrigin,
+    EbvObjectRayDirection,
+    EbvRayTmin,
+    EbvRayTmax,
+    EbvHitT,
+    EbvHitKind,
+    EbvObjectToWorld,
+    EbvObjectToWorld3x4,
+    EbvWorldToObject,
+    EbvWorldToObject3x4,
+    EbvIncomingRayFlags,
+    // barycentrics
     EbvBaryCoordNV,
     EbvBaryCoordNoPerspNV,
+    // mesh shaders
     EbvTaskCountNV,
     EbvPrimitiveCountNV,
     EbvPrimitiveIndicesNV,
@@ -271,7 +269,12 @@
     EbvLayerPerViewNV,
     EbvMeshViewCountNV,
     EbvMeshViewIndicesNV,
-#endif 
+
+    // sm builtins
+    EbvWarpsPerSM,
+    EbvSMCount,
+    EbvWarpID,
+    EbvSMID,
 
     // HLSL built-ins that live only temporarily, until they get remapped
     // to one of the above.
@@ -291,6 +294,19 @@
     EbvLast
 };
 
+// In this enum, order matters; users can assume higher precision is a bigger value
+// and EpqNone is 0.
+enum TPrecisionQualifier {
+    EpqNone = 0,
+    EpqLow,
+    EpqMedium,
+    EpqHigh
+};
+
+#ifdef GLSLANG_WEB
+__inline const char* GetStorageQualifierString(TStorageQualifier q) { return ""; }
+__inline const char* GetPrecisionQualifierString(TPrecisionQualifier p) { return ""; }
+#else
 // These will show up in error messages
 __inline const char* GetStorageQualifierString(TStorageQualifier q)
 {
@@ -317,13 +333,11 @@
     case EvqPointCoord:     return "gl_PointCoord";  break;
     case EvqFragColor:      return "fragColor";      break;
     case EvqFragDepth:      return "gl_FragDepth";   break;
-#ifdef NV_EXTENSIONS
-    case EvqPayloadNV:        return "rayPayloadNV";     break;
-    case EvqPayloadInNV:      return "rayPayloadInNV";   break;
-    case EvqHitAttrNV:        return "hitAttributeNV";   break;
-    case EvqCallableDataNV:   return "callableDataNV";   break;
-    case EvqCallableDataInNV: return "callableDataInNV"; break;
-#endif
+    case EvqPayload:        return "rayPayloadNV";     break;
+    case EvqPayloadIn:      return "rayPayloadInNV";   break;
+    case EvqHitAttr:        return "hitAttributeNV";   break;
+    case EvqCallableData:   return "callableDataNV";   break;
+    case EvqCallableDataIn: return "callableDataInNV"; break;
     default:                return "unknown qualifier";
     }
 }
@@ -338,6 +352,8 @@
     case EbvLocalInvocationId:    return "LocalInvocationID";
     case EbvGlobalInvocationId:   return "GlobalInvocationID";
     case EbvLocalInvocationIndex: return "LocalInvocationIndex";
+    case EbvNumSubgroups:         return "NumSubgroups";
+    case EbvSubgroupID:           return "SubgroupID";
     case EbvSubGroupSize:         return "SubGroupSize";
     case EbvSubGroupInvocation:   return "SubGroupInvocation";
     case EbvSubGroupEqMask:       return "SubGroupEqMask";
@@ -345,6 +361,13 @@
     case EbvSubGroupGtMask:       return "SubGroupGtMask";
     case EbvSubGroupLeMask:       return "SubGroupLeMask";
     case EbvSubGroupLtMask:       return "SubGroupLtMask";
+    case EbvSubgroupSize2:        return "SubgroupSize";
+    case EbvSubgroupInvocation2:  return "SubgroupInvocationID";
+    case EbvSubgroupEqMask2:      return "SubgroupEqMask";
+    case EbvSubgroupGeMask2:      return "SubgroupGeMask";
+    case EbvSubgroupGtMask2:      return "SubgroupGtMask";
+    case EbvSubgroupLeMask2:      return "SubgroupLeMask";
+    case EbvSubgroupLtMask2:      return "SubgroupLtMask";
     case EbvVertexId:             return "VertexId";
     case EbvInstanceId:           return "InstanceId";
     case EbvVertexIndex:          return "VertexIndex";
@@ -396,7 +419,6 @@
     case EbvSampleMask:           return "SampleMaskIn";
     case EbvHelperInvocation:     return "HelperInvocation";
 
-#ifdef AMD_EXTENSIONS
     case EbvBaryCoordNoPersp:           return "BaryCoordNoPersp";
     case EbvBaryCoordNoPerspCentroid:   return "BaryCoordNoPerspCentroid";
     case EbvBaryCoordNoPerspSample:     return "BaryCoordNoPerspSample";
@@ -404,7 +426,6 @@
     case EbvBaryCoordSmoothCentroid:    return "BaryCoordSmoothCentroid";
     case EbvBaryCoordSmoothSample:      return "BaryCoordSmoothSample";
     case EbvBaryCoordPullModel:         return "BaryCoordPullModel";
-#endif
 
     case EbvViewIndex:                  return "ViewIndex";
     case EbvDeviceIndex:                return "DeviceIndex";
@@ -412,7 +433,6 @@
     case EbvFragSizeEXT:                return "FragSizeEXT";
     case EbvFragInvocationCountEXT:     return "FragInvocationCountEXT";
 
-#ifdef NV_EXTENSIONS
     case EbvViewportMaskNV:             return "ViewportMaskNV";
     case EbvSecondaryPositionNV:        return "SecondaryPositionNV";
     case EbvSecondaryViewportMaskNV:    return "SecondaryViewportMaskNV";
@@ -421,23 +441,25 @@
     case EbvFragFullyCoveredNV:         return "FragFullyCoveredNV";
     case EbvFragmentSizeNV:             return "FragmentSizeNV";
     case EbvInvocationsPerPixelNV:      return "InvocationsPerPixelNV";
-    case EbvLaunchIdNV:                 return "LaunchIdNV";
-    case EbvLaunchSizeNV:               return "LaunchSizeNV";
-    case EbvInstanceCustomIndexNV:      return "InstanceCustomIndexNV";
-    case EbvWorldRayOriginNV:           return "WorldRayOriginNV";
-    case EbvWorldRayDirectionNV:        return "WorldRayDirectionNV";
-    case EbvObjectRayOriginNV:          return "ObjectRayOriginNV";
-    case EbvObjectRayDirectionNV:       return "ObjectRayDirectionNV";
-    case EbvRayTminNV:                  return "ObjectRayTminNV";
-    case EbvRayTmaxNV:                  return "ObjectRayTmaxNV";
-    case EbvHitTNV:                     return "HitTNV";
-    case EbvHitKindNV:                  return "HitKindNV";
-    case EbvIncomingRayFlagsNV:         return "IncomingRayFlagsNV";
-    case EbvObjectToWorldNV:            return "ObjectToWorldNV";
-    case EbvWorldToObjectNV:            return "WorldToObjectNV";
+    case EbvLaunchId:                   return "LaunchIdNV";
+    case EbvLaunchSize:                 return "LaunchSizeNV";
+    case EbvInstanceCustomIndex:        return "InstanceCustomIndexNV";
+    case EbvGeometryIndex:              return "GeometryIndexEXT";
+    case EbvWorldRayOrigin:             return "WorldRayOriginNV";
+    case EbvWorldRayDirection:          return "WorldRayDirectionNV";
+    case EbvObjectRayOrigin:            return "ObjectRayOriginNV";
+    case EbvObjectRayDirection:         return "ObjectRayDirectionNV";
+    case EbvRayTmin:                    return "ObjectRayTminNV";
+    case EbvRayTmax:                    return "ObjectRayTmaxNV";
+    case EbvHitT:                       return "HitTNV";
+    case EbvHitKind:                    return "HitKindNV";
+    case EbvIncomingRayFlags:           return "IncomingRayFlagsNV";
+    case EbvObjectToWorld:              return "ObjectToWorldNV";
+    case EbvWorldToObject:              return "WorldToObjectNV";
 
     case EbvBaryCoordNV:                return "BaryCoordNV";
     case EbvBaryCoordNoPerspNV:         return "BaryCoordNoPerspNV";
+
     case EbvTaskCountNV:                return "TaskCountNV";
     case EbvPrimitiveCountNV:           return "PrimitiveCountNV";
     case EbvPrimitiveIndicesNV:         return "PrimitiveIndicesNV";
@@ -446,20 +468,16 @@
     case EbvLayerPerViewNV:             return "LayerPerViewNV";
     case EbvMeshViewCountNV:            return "MeshViewCountNV";
     case EbvMeshViewIndicesNV:          return "MeshViewIndicesNV";
-#endif 
+
+    case EbvWarpsPerSM:                 return "WarpsPerSMNV";
+    case EbvSMCount:                    return "SMCountNV";
+    case EbvWarpID:                     return "WarpIDNV";
+    case EbvSMID:                       return "SMIDNV";
+
     default:                      return "unknown built-in variable";
     }
 }
 
-// In this enum, order matters; users can assume higher precision is a bigger value
-// and EpqNone is 0.
-enum TPrecisionQualifier {
-    EpqNone = 0,
-    EpqLow,
-    EpqMedium,
-    EpqHigh
-};
-
 __inline const char* GetPrecisionQualifierString(TPrecisionQualifier p)
 {
     switch (p) {
@@ -470,6 +488,7 @@
     default:        return "unknown precision qualifier";
     }
 }
+#endif
 
 __inline bool isTypeSignedInt(TBasicType type)
 {
@@ -514,7 +533,8 @@
     }
 }
 
-__inline int getTypeRank(TBasicType type) {
+__inline int getTypeRank(TBasicType type)
+{
     int res = -1;
     switch(type) {
     case EbtInt8:
diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h
index b136dde..733a790 100644
--- a/glslang/Include/Common.h
+++ b/glslang/Include/Common.h
@@ -38,7 +38,7 @@
 #define _COMMON_INCLUDED_
 
 
-#if defined(__ANDROID__) || _MSC_VER < 1700
+#if defined(__ANDROID__) || (defined(_MSC_VER) && _MSC_VER < 1700)
 #include <sstream>
 namespace std {
 template<typename T>
@@ -102,6 +102,7 @@
 #include <algorithm>
 #include <string>
 #include <cstdio>
+#include <cstdlib>
 #include <cassert>
 
 #include "PoolAlloc.h"
@@ -250,7 +251,8 @@
             return nullptr;
         return name->c_str();
     }
-    TString* name; // descriptive name for this string
+    const char* getFilenameStr() const { return name == nullptr ? "" : name->c_str(); }
+    TString* name; // descriptive name for this string, when a textual name is available, otherwise nullptr
     int string;
     int line;
     int column;
diff --git a/glslang/Include/ConstantUnion.h b/glslang/Include/ConstantUnion.h
index 3e93340..c4ffb85 100644
--- a/glslang/Include/ConstantUnion.h
+++ b/glslang/Include/ConstantUnion.h
@@ -213,6 +213,28 @@
             return false;
 
         switch (type) {
+        case EbtInt:
+            if (constant.iConst == iConst)
+                return true;
+
+            break;
+        case EbtUint:
+            if (constant.uConst == uConst)
+                return true;
+
+            break;
+        case EbtBool:
+            if (constant.bConst == bConst)
+                return true;
+
+            break;
+        case EbtDouble:
+            if (constant.dConst == dConst)
+                return true;
+
+            break;
+
+#ifndef GLSLANG_WEB
         case EbtInt16:
             if (constant.i16Const == i16Const)
                 return true;
@@ -233,16 +255,6 @@
                 return true;
 
             break;
-        case EbtInt:
-            if (constant.iConst == iConst)
-                return true;
-
-            break;
-        case EbtUint:
-            if (constant.uConst == uConst)
-                return true;
-
-            break;
         case EbtInt64:
             if (constant.i64Const == i64Const)
                 return true;
@@ -253,16 +265,7 @@
                 return true;
 
             break;
-        case EbtDouble:
-            if (constant.dConst == dConst)
-                return true;
-
-            break;
-        case EbtBool:
-            if (constant.bConst == bConst)
-                return true;
-
-            break;
+#endif
         default:
             assert(false && "Default missing");
         }
@@ -329,6 +332,22 @@
     {
         assert(type == constant.type);
         switch (type) {
+        case EbtInt:
+            if (iConst > constant.iConst)
+                return true;
+
+            return false;
+        case EbtUint:
+            if (uConst > constant.uConst)
+                return true;
+
+            return false;
+        case EbtDouble:
+            if (dConst > constant.dConst)
+                return true;
+
+            return false;
+#ifndef GLSLANG_WEB
         case EbtInt8:
             if (i8Const > constant.i8Const)
                 return true;
@@ -349,16 +368,6 @@
                 return true;
 
             return false;
-        case EbtInt:
-            if (iConst > constant.iConst)
-                return true;
-
-            return false;
-        case EbtUint:
-            if (uConst > constant.uConst)
-                return true;
-
-            return false;
         case EbtInt64:
             if (i64Const > constant.i64Const)
                 return true;
@@ -369,11 +378,7 @@
                 return true;
 
             return false;
-        case EbtDouble:
-            if (dConst > constant.dConst)
-                return true;
-
-            return false;
+#endif
         default:
             assert(false && "Default missing");
             return false;
@@ -384,6 +389,7 @@
     {
         assert(type == constant.type);
         switch (type) {
+#ifndef GLSLANG_WEB
         case EbtInt8:
             if (i8Const < constant.i8Const)
                 return true;
@@ -394,7 +400,7 @@
                 return true;
 
             return false;
-       case EbtInt16:
+        case EbtInt16:
             if (i16Const < constant.i16Const)
                 return true;
 
@@ -402,17 +408,6 @@
         case EbtUint16:
             if (u16Const < constant.u16Const)
                 return true;
-
-            return false;
-        case EbtInt:
-            if (iConst < constant.iConst)
-                return true;
-
-            return false;
-        case EbtUint:
-            if (uConst < constant.uConst)
-                return true;
-
             return false;
         case EbtInt64:
             if (i64Const < constant.i64Const)
@@ -424,11 +419,22 @@
                 return true;
 
             return false;
+#endif
         case EbtDouble:
             if (dConst < constant.dConst)
                 return true;
 
             return false;
+        case EbtInt:
+            if (iConst < constant.iConst)
+                return true;
+
+            return false;
+        case EbtUint:
+            if (uConst < constant.uConst)
+                return true;
+
+            return false;
         default:
             assert(false && "Default missing");
             return false;
@@ -440,15 +446,17 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
+        case EbtInt:    returnValue.setIConst(iConst + constant.iConst); break;
+        case EbtUint:   returnValue.setUConst(uConst + constant.uConst); break;
+        case EbtDouble: returnValue.setDConst(dConst + constant.dConst); break;
+#ifndef GLSLANG_WEB
         case EbtInt8:   returnValue.setI8Const(i8Const + constant.i8Const); break;
         case EbtInt16:  returnValue.setI16Const(i16Const + constant.i16Const); break;
-        case EbtInt:    returnValue.setIConst(iConst + constant.iConst); break;
         case EbtInt64:  returnValue.setI64Const(i64Const + constant.i64Const); break;
         case EbtUint8:  returnValue.setU8Const(u8Const + constant.u8Const); break;
         case EbtUint16: returnValue.setU16Const(u16Const + constant.u16Const); break;
-        case EbtUint:   returnValue.setUConst(uConst + constant.uConst); break;
         case EbtUint64: returnValue.setU64Const(u64Const + constant.u64Const); break;
-        case EbtDouble: returnValue.setDConst(dConst + constant.dConst); break;
+#endif
         default: assert(false && "Default missing");
         }
 
@@ -460,15 +468,17 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
+        case EbtInt:    returnValue.setIConst(iConst - constant.iConst); break;
+        case EbtUint:   returnValue.setUConst(uConst - constant.uConst); break;
+        case EbtDouble: returnValue.setDConst(dConst - constant.dConst); break;
+#ifndef GLSLANG_WEB
         case EbtInt8:   returnValue.setI8Const(i8Const - constant.i8Const); break;
         case EbtInt16:  returnValue.setI16Const(i16Const - constant.i16Const); break;
-        case EbtInt:    returnValue.setIConst(iConst - constant.iConst); break;
         case EbtInt64:  returnValue.setI64Const(i64Const - constant.i64Const); break;
         case EbtUint8:  returnValue.setU8Const(u8Const - constant.u8Const); break;
         case EbtUint16: returnValue.setU16Const(u16Const - constant.u16Const); break;
-        case EbtUint:   returnValue.setUConst(uConst - constant.uConst); break;
         case EbtUint64: returnValue.setU64Const(u64Const - constant.u64Const); break;
-        case EbtDouble: returnValue.setDConst(dConst - constant.dConst); break;
+#endif
         default: assert(false && "Default missing");
         }
 
@@ -480,15 +490,17 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
+        case EbtInt:    returnValue.setIConst(iConst * constant.iConst); break;
+        case EbtUint:   returnValue.setUConst(uConst * constant.uConst); break;
+        case EbtDouble: returnValue.setDConst(dConst * constant.dConst); break;
+#ifndef GLSLANG_WEB
         case EbtInt8:   returnValue.setI8Const(i8Const * constant.i8Const); break;
         case EbtInt16:  returnValue.setI16Const(i16Const * constant.i16Const); break;
-        case EbtInt:    returnValue.setIConst(iConst * constant.iConst); break;
         case EbtInt64:  returnValue.setI64Const(i64Const * constant.i64Const); break;
         case EbtUint8:  returnValue.setU8Const(u8Const * constant.u8Const); break;
         case EbtUint16: returnValue.setU16Const(u16Const * constant.u16Const); break;
-        case EbtUint:   returnValue.setUConst(uConst * constant.uConst); break;
         case EbtUint64: returnValue.setU64Const(u64Const * constant.u64Const); break;
-        case EbtDouble: returnValue.setDConst(dConst * constant.dConst); break;
+#endif
         default: assert(false && "Default missing");
         }
 
@@ -500,14 +512,16 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
+        case EbtInt:    returnValue.setIConst(iConst % constant.iConst); break;
+        case EbtUint:   returnValue.setUConst(uConst % constant.uConst); break;
+#ifndef GLSLANG_WEB
         case EbtInt8:   returnValue.setI8Const(i8Const % constant.i8Const); break;
         case EbtInt16:  returnValue.setI8Const(i8Const % constant.i16Const); break;
-        case EbtInt:    returnValue.setIConst(iConst % constant.iConst); break;
         case EbtInt64:  returnValue.setI64Const(i64Const % constant.i64Const); break;
         case EbtUint8:  returnValue.setU8Const(u8Const % constant.u8Const); break;
         case EbtUint16: returnValue.setU16Const(u16Const % constant.u16Const); break;
-        case EbtUint:   returnValue.setUConst(uConst % constant.uConst); break;
         case EbtUint64: returnValue.setU64Const(u64Const % constant.u64Const); break;
+#endif
         default:     assert(false && "Default missing");
         }
 
@@ -518,6 +532,7 @@
     {
         TConstUnion returnValue;
         switch (type) {
+#ifndef GLSLANG_WEB
         case EbtInt8:
             switch (constant.type) {
             case EbtInt8:   returnValue.setI8Const(i8Const >> constant.i8Const);  break;
@@ -570,32 +585,38 @@
             default:       assert(false && "Default missing");
             }
             break;
+#endif
         case EbtInt:
             switch (constant.type) {
+            case EbtInt:    returnValue.setIConst(iConst >> constant.iConst);   break;
+            case EbtUint:   returnValue.setIConst(iConst >> constant.uConst);   break;
+#ifndef GLSLANG_WEB
             case EbtInt8:   returnValue.setIConst(iConst >> constant.i8Const);  break;
             case EbtUint8:  returnValue.setIConst(iConst >> constant.u8Const);  break;
             case EbtInt16:  returnValue.setIConst(iConst >> constant.i16Const); break;
             case EbtUint16: returnValue.setIConst(iConst >> constant.u16Const); break;
-            case EbtInt:    returnValue.setIConst(iConst >> constant.iConst);   break;
-            case EbtUint:   returnValue.setIConst(iConst >> constant.uConst);   break;
             case EbtInt64:  returnValue.setIConst(iConst >> constant.i64Const); break;
             case EbtUint64: returnValue.setIConst(iConst >> constant.u64Const); break;
+#endif
             default:       assert(false && "Default missing");
             }
             break;
         case EbtUint:
             switch (constant.type) {
+            case EbtInt:    returnValue.setUConst(uConst >> constant.iConst);   break;
+            case EbtUint:   returnValue.setUConst(uConst >> constant.uConst);   break;
+#ifndef GLSLANG_WEB
             case EbtInt8:   returnValue.setUConst(uConst >> constant.i8Const);  break;
             case EbtUint8:  returnValue.setUConst(uConst >> constant.u8Const);  break;
             case EbtInt16:  returnValue.setUConst(uConst >> constant.i16Const); break;
             case EbtUint16: returnValue.setUConst(uConst >> constant.u16Const); break;
-            case EbtInt:    returnValue.setUConst(uConst >> constant.iConst);   break;
-            case EbtUint:   returnValue.setUConst(uConst >> constant.uConst);   break;
             case EbtInt64:  returnValue.setUConst(uConst >> constant.i64Const); break;
             case EbtUint64: returnValue.setUConst(uConst >> constant.u64Const); break;
+#endif
             default:       assert(false && "Default missing");
             }
             break;
+#ifndef GLSLANG_WEB
          case EbtInt64:
             switch (constant.type) {
             case EbtInt8:   returnValue.setI64Const(i64Const >> constant.i8Const);  break;
@@ -622,6 +643,7 @@
             default:       assert(false && "Default missing");
             }
             break;
+#endif
         default:     assert(false && "Default missing");
         }
 
@@ -632,6 +654,7 @@
     {
         TConstUnion returnValue;
         switch (type) {
+#ifndef GLSLANG_WEB
         case EbtInt8:
             switch (constant.type) {
             case EbtInt8:   returnValue.setI8Const(i8Const << constant.i8Const);  break;
@@ -684,32 +707,6 @@
             default:       assert(false && "Default missing");
             }
             break;
-        case EbtInt:
-            switch (constant.type) {
-            case EbtInt8:   returnValue.setIConst(iConst << constant.i8Const);  break;
-            case EbtUint8:  returnValue.setIConst(iConst << constant.u8Const);  break;
-            case EbtInt16:  returnValue.setIConst(iConst << constant.i16Const); break;
-            case EbtUint16: returnValue.setIConst(iConst << constant.u16Const); break;
-            case EbtInt:    returnValue.setIConst(iConst << constant.iConst);   break;
-            case EbtUint:   returnValue.setIConst(iConst << constant.uConst);   break;
-            case EbtInt64:  returnValue.setIConst(iConst << constant.i64Const); break;
-            case EbtUint64: returnValue.setIConst(iConst << constant.u64Const); break;
-            default:       assert(false && "Default missing");
-            }
-            break;
-        case EbtUint:
-            switch (constant.type) {
-            case EbtInt8:   returnValue.setUConst(uConst << constant.i8Const);  break;
-            case EbtUint8:  returnValue.setUConst(uConst << constant.u8Const);  break;
-            case EbtInt16:  returnValue.setUConst(uConst << constant.i16Const); break;
-            case EbtUint16: returnValue.setUConst(uConst << constant.u16Const); break;
-            case EbtInt:    returnValue.setUConst(uConst << constant.iConst);   break;
-            case EbtUint:   returnValue.setUConst(uConst << constant.uConst);   break;
-            case EbtInt64:  returnValue.setUConst(uConst << constant.i64Const); break;
-            case EbtUint64: returnValue.setUConst(uConst << constant.u64Const); break;
-            default:       assert(false && "Default missing");
-            }
-            break;
          case EbtInt64:
             switch (constant.type) {
             case EbtInt8:   returnValue.setI64Const(i64Const << constant.i8Const);  break;
@@ -736,6 +733,37 @@
             default:       assert(false && "Default missing");
             }
             break;
+#endif
+        case EbtInt:
+            switch (constant.type) {
+            case EbtInt:    returnValue.setIConst(iConst << constant.iConst);   break;
+            case EbtUint:   returnValue.setIConst(iConst << constant.uConst);   break;
+#ifndef GLSLANG_WEB
+            case EbtInt8:   returnValue.setIConst(iConst << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setIConst(iConst << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setIConst(iConst << constant.i16Const); break;
+            case EbtUint16: returnValue.setIConst(iConst << constant.u16Const); break;
+            case EbtInt64:  returnValue.setIConst(iConst << constant.i64Const); break;
+            case EbtUint64: returnValue.setIConst(iConst << constant.u64Const); break;
+#endif
+            default:       assert(false && "Default missing");
+            }
+            break;
+        case EbtUint:
+            switch (constant.type) {
+            case EbtInt:    returnValue.setUConst(uConst << constant.iConst);   break;
+            case EbtUint:   returnValue.setUConst(uConst << constant.uConst);   break;
+#ifndef GLSLANG_WEB
+            case EbtInt8:   returnValue.setUConst(uConst << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setUConst(uConst << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setUConst(uConst << constant.i16Const); break;
+            case EbtUint16: returnValue.setUConst(uConst << constant.u16Const); break;
+            case EbtInt64:  returnValue.setUConst(uConst << constant.i64Const); break;
+            case EbtUint64: returnValue.setUConst(uConst << constant.u64Const); break;
+#endif
+            default:       assert(false && "Default missing");
+            }
+            break;
         default:     assert(false && "Default missing");
         }
 
@@ -747,14 +775,16 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
+        case EbtInt:    returnValue.setIConst(iConst & constant.iConst); break;
+        case EbtUint:   returnValue.setUConst(uConst & constant.uConst); break;
+#ifndef GLSLANG_WEB
         case EbtInt8:   returnValue.setI8Const(i8Const & constant.i8Const); break;
         case EbtUint8:  returnValue.setU8Const(u8Const & constant.u8Const); break;
         case EbtInt16:  returnValue.setI16Const(i16Const & constant.i16Const); break;
         case EbtUint16: returnValue.setU16Const(u16Const & constant.u16Const); break;
-        case EbtInt:    returnValue.setIConst(iConst & constant.iConst); break;
-        case EbtUint:   returnValue.setUConst(uConst & constant.uConst); break;
         case EbtInt64:  returnValue.setI64Const(i64Const & constant.i64Const); break;
         case EbtUint64: returnValue.setU64Const(u64Const & constant.u64Const); break;
+#endif
         default:     assert(false && "Default missing");
         }
 
@@ -766,14 +796,16 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
+        case EbtInt:    returnValue.setIConst(iConst | constant.iConst); break;
+        case EbtUint:   returnValue.setUConst(uConst | constant.uConst); break;
+#ifndef GLSLANG_WEB
         case EbtInt8:   returnValue.setI8Const(i8Const | constant.i8Const); break;
         case EbtUint8:  returnValue.setU8Const(u8Const | constant.u8Const); break;
         case EbtInt16:  returnValue.setI16Const(i16Const | constant.i16Const); break;
         case EbtUint16: returnValue.setU16Const(u16Const | constant.u16Const); break;
-        case EbtInt:    returnValue.setIConst(iConst | constant.iConst); break;
-        case EbtUint:   returnValue.setUConst(uConst | constant.uConst); break;
         case EbtInt64:  returnValue.setI64Const(i64Const | constant.i64Const); break;
         case EbtUint64: returnValue.setU64Const(u64Const | constant.u64Const); break;
+#endif
         default:     assert(false && "Default missing");
         }
 
@@ -785,14 +817,16 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
+        case EbtInt:    returnValue.setIConst(iConst ^ constant.iConst); break;
+        case EbtUint:   returnValue.setUConst(uConst ^ constant.uConst); break;
+#ifndef GLSLANG_WEB
         case EbtInt8:   returnValue.setI8Const(i8Const ^ constant.i8Const); break;
         case EbtUint8:  returnValue.setU8Const(u8Const ^ constant.u8Const); break;
         case EbtInt16:  returnValue.setI16Const(i16Const ^ constant.i16Const); break;
         case EbtUint16: returnValue.setU16Const(u16Const ^ constant.u16Const); break;
-        case EbtInt:    returnValue.setIConst(iConst ^ constant.iConst); break;
-        case EbtUint:   returnValue.setUConst(uConst ^ constant.uConst); break;
         case EbtInt64:  returnValue.setI64Const(i64Const ^ constant.i64Const); break;
         case EbtUint64: returnValue.setU64Const(u64Const ^ constant.u64Const); break;
+#endif
         default:     assert(false && "Default missing");
         }
 
@@ -803,14 +837,16 @@
     {
         TConstUnion returnValue;
         switch (type) {
+        case EbtInt:    returnValue.setIConst(~iConst); break;
+        case EbtUint:   returnValue.setUConst(~uConst); break;
+#ifndef GLSLANG_WEB
         case EbtInt8:   returnValue.setI8Const(~i8Const); break;
         case EbtUint8:  returnValue.setU8Const(~u8Const); break;
         case EbtInt16:  returnValue.setI16Const(~i16Const); break;
         case EbtUint16: returnValue.setU16Const(~u16Const); break;
-        case EbtInt:    returnValue.setIConst(~iConst); break;
-        case EbtUint:   returnValue.setUConst(~uConst); break;
         case EbtInt64:  returnValue.setI64Const(~i64Const); break;
         case EbtUint64: returnValue.setU64Const(~u64Const); break;
+#endif
         default:     assert(false && "Default missing");
         }
 
@@ -885,7 +921,7 @@
         else
             unionArray =  new TConstUnionVector(size);
     }
-    TConstUnionArray(const TConstUnionArray& a) : unionArray(a.unionArray) { }
+    TConstUnionArray(const TConstUnionArray& a) = default;
     TConstUnionArray(const TConstUnionArray& a, int start, int size)
     {
         unionArray = new TConstUnionVector(size);
diff --git a/glslang/Include/PoolAlloc.h b/glslang/Include/PoolAlloc.h
index 0e237a6..b8eccb8 100644
--- a/glslang/Include/PoolAlloc.h
+++ b/glslang/Include/PoolAlloc.h
@@ -304,7 +304,6 @@
     size_type max_size() const { return static_cast<size_type>(-1) / sizeof(T); }
     size_type max_size(int size) const { return static_cast<size_type>(-1) / size; }
 
-    void setAllocator(TPoolAllocator* a) { allocator = *a; }
     TPoolAllocator& getAllocator() const { return allocator; }
 
 protected:
diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
index edd5cfc..b2c416d 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -3,6 +3,7 @@
 // Copyright (C) 2012-2016 LunarG, Inc.
 // Copyright (C) 2015-2016 Google, Inc.
 // Copyright (C) 2017 ARM Limited.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -80,30 +81,59 @@
     bool      image : 1;  // image, combined should be false
     bool   combined : 1;  // true means texture is combined with a sampler, false means texture with no sampler
     bool    sampler : 1;  // true means a pure sampler, other fields should be clear()
-    bool   external : 1;  // GL_OES_EGL_image_external
-    unsigned int vectorSize : 3;  // vector return type size.
 
+#ifdef GLSLANG_WEB
+    bool is1D()          const { return false; }
+    bool isBuffer()      const { return false; }
+    bool isRect()        const { return false; }
+    bool isSubpass()     const { return false; }
+    bool isCombined()    const { return true; }
+    bool isImage()       const { return false; }
+    bool isImageClass()  const { return false; }
+    bool isMultiSample() const { return false; }
+    bool isExternal()    const { return false; }
+    void setExternal(bool e) { }
+    bool isYuv()         const { return false; }
+#else
+    unsigned int vectorSize : 3;  // vector return type size.
     // Some languages support structures as sample results.  Storing the whole structure in the
     // TSampler is too large, so there is an index to a separate table.
     static const unsigned structReturnIndexBits = 4;                        // number of index bits to use.
     static const unsigned structReturnSlots = (1<<structReturnIndexBits)-1; // number of valid values
     static const unsigned noReturnStruct = structReturnSlots;               // value if no return struct type.
-
     // Index into a language specific table of texture return structures.
     unsigned int structReturnIndex : structReturnIndexBits;
 
-    // Encapsulate getting members' vector sizes packed into the vectorSize bitfield.
-    unsigned int getVectorSize() const { return vectorSize; }
+    bool   external : 1;  // GL_OES_EGL_image_external
+    bool        yuv : 1;  // GL_EXT_YUV_target
 
-    bool isImage()       const { return image && dim != EsdSubpass; }
+#ifdef ENABLE_HLSL
+    unsigned int getVectorSize() const { return vectorSize; }
+    void clearReturnStruct() { structReturnIndex = noReturnStruct; }
+    bool hasReturnStruct() const { return structReturnIndex != noReturnStruct; }
+    unsigned getStructReturnIndex() const { return structReturnIndex; }
+#endif
+
+    bool is1D()          const { return dim == Esd1D; }
+    bool isBuffer()      const { return dim == EsdBuffer; }
+    bool isRect()        const { return dim == EsdRect; }
     bool isSubpass()     const { return dim == EsdSubpass; }
     bool isCombined()    const { return combined; }
-    bool isPureSampler() const { return sampler; }
+    bool isImage()       const { return image && !isSubpass(); }
+    bool isImageClass()  const { return image; }
+    bool isMultiSample() const { return ms; }
+    bool isExternal()    const { return external; }
+    void setExternal(bool e) { external = e; }
+    bool isYuv()         const { return yuv; }
+#endif
     bool isTexture()     const { return !sampler && !image; }
+    bool isPureSampler() const { return sampler; }
+
+    void setCombined(bool c) { combined = c; }
+    void setBasicType(TBasicType t) { type = t; }
+    TBasicType getBasicType()  const { return type; }
     bool isShadow()      const { return shadow; }
     bool isArrayed()     const { return arrayed; }
-    bool isMultiSample() const { return ms; }
-    bool hasReturnStruct() const { return structReturnIndex != noReturnStruct; }
 
     void clear()
     {
@@ -115,11 +145,16 @@
         image = false;
         combined = false;
         sampler = false;
+#ifndef GLSLANG_WEB
         external = false;
-        structReturnIndex = noReturnStruct;
+        yuv = false;
+#endif
 
+#ifdef ENABLE_HLSL
+        clearReturnStruct();
         // by default, returns a single vec4;
         vectorSize = 4;
+#endif
     }
 
     // make a combined sampler and texture
@@ -157,6 +192,15 @@
         ms = m;
     }
 
+    // make a pure sampler, no texture, no image, nothing combined, the 'sampler' keyword
+    void setPureSampler(bool s)
+    {
+        clear();
+        sampler = true;
+        shadow = s;
+    }
+
+#ifndef GLSLANG_WEB
     // make a subpass input attachment
     void setSubpass(TBasicType t, bool m = false)
     {
@@ -166,14 +210,7 @@
         dim = EsdSubpass;
         ms = m;
     }
-
-    // make a pure sampler, no texture, no image, nothing combined, the 'sampler' keyword
-    void setPureSampler(bool s)
-    {
-        clear();
-        sampler = true;
-        shadow = s;
-    }
+#endif
 
     bool operator==(const TSampler& right) const
     {
@@ -181,13 +218,17 @@
                      dim == right.dim &&
                  arrayed == right.arrayed &&
                   shadow == right.shadow &&
-                      ms == right.ms &&
-                   image == right.image &&
-                combined == right.combined &&
-                 sampler == right.sampler &&
-                external == right.external &&
-              vectorSize == right.vectorSize &&
-       structReturnIndex == right.structReturnIndex;            
+         isMultiSample() == right.isMultiSample() &&
+          isImageClass() == right.isImageClass() &&
+            isCombined() == right.isCombined() &&
+         isPureSampler() == right.isPureSampler() &&
+            isExternal() == right.isExternal() &&
+                 isYuv() == right.isYuv()
+#ifdef ENABLE_HLSL
+      && getVectorSize() == right.getVectorSize() &&
+  getStructReturnIndex() == right.getStructReturnIndex()
+#endif
+        ;
     }
 
     bool operator!=(const TSampler& right) const
@@ -199,51 +240,55 @@
     {
         TString s;
 
-        if (sampler) {
+        if (isPureSampler()) {
             s.append("sampler");
             return s;
         }
 
         switch (type) {
-        case EbtFloat:                   break;
-#ifdef AMD_EXTENSIONS
+        case EbtInt:    s.append("i");   break;
+        case EbtUint:   s.append("u");   break;
+#ifndef GLSLANG_WEB
         case EbtFloat16: s.append("f16"); break;
-#endif
         case EbtInt8:   s.append("i8");  break;
         case EbtUint16: s.append("u8");  break;
         case EbtInt16:  s.append("i16"); break;
         case EbtUint8:  s.append("u16"); break;
-        case EbtInt:    s.append("i");   break;
-        case EbtUint:   s.append("u");   break;
         case EbtInt64:  s.append("i64"); break;
         case EbtUint64: s.append("u64"); break;
-        default:  break;  // some compilers want this
+#endif
+        default:  break;
         }
-        if (image) {
-            if (dim == EsdSubpass)
+        if (isImageClass()) {
+            if (isSubpass())
                 s.append("subpass");
             else
                 s.append("image");
-        } else if (combined) {
+        } else if (isCombined()) {
             s.append("sampler");
         } else {
             s.append("texture");
         }
-        if (external) {
+        if (isExternal()) {
             s.append("ExternalOES");
             return s;
         }
+        if (isYuv()) {
+            return "__" + s + "External2DY2YEXT";
+        }
         switch (dim) {
-        case Esd1D:      s.append("1D");      break;
         case Esd2D:      s.append("2D");      break;
         case Esd3D:      s.append("3D");      break;
         case EsdCube:    s.append("Cube");    break;
+#ifndef GLSLANG_WEB
+        case Esd1D:      s.append("1D");      break;
         case EsdRect:    s.append("2DRect");  break;
         case EsdBuffer:  s.append("Buffer");  break;
         case EsdSubpass: s.append("Input"); break;
+#endif
         default:  break;  // some compilers want this
         }
-        if (ms)
+        if (isMultiSample())
             s.append("MS");
         if (arrayed)
             s.append("Array");
@@ -416,6 +461,30 @@
     EBlendCount
 };
 
+enum TInterlockOrdering {
+    EioNone,
+    EioPixelInterlockOrdered,
+    EioPixelInterlockUnordered,
+    EioSampleInterlockOrdered,
+    EioSampleInterlockUnordered,
+    EioShadingRateInterlockOrdered,
+    EioShadingRateInterlockUnordered,
+
+    EioCount,
+};
+
+enum TShaderInterface
+{
+    // Includes both uniform blocks and buffer blocks
+    EsiUniform = 0,
+    EsiInput,
+    EsiOutput,
+    EsiNone,
+
+    EsiCount
+};
+
+
 class TQualifier {
 public:
     static const int layoutNotSet = -1;
@@ -424,9 +493,11 @@
     {
         precision = EpqNone;
         invariant = false;
-        noContraction = false;
         makeTemporary();
         declaredBuiltIn = EbvNone;
+#ifndef GLSLANG_WEB
+        noContraction = false;
+#endif
     }
 
     // drop qualifiers that don't belong in a temporary variable
@@ -445,8 +516,10 @@
     void clearInterstage()
     {
         clearInterpolation();
+#ifndef GLSLANG_WEB
         patch = false;
         sample = false;
+#endif
     }
 
     void clearInterpolation()
@@ -454,11 +527,9 @@
         centroid     = false;
         smooth       = false;
         flat         = false;
+#ifndef GLSLANG_WEB
         nopersp      = false;
-#ifdef AMD_EXTENSIONS
         explicitInterp = false;
-#endif
-#ifdef NV_EXTENSIONS
         pervertexNV = false;
         perPrimitiveNV = false;
         perViewNV = false;
@@ -468,100 +539,110 @@
 
     void clearMemory()
     {
+#ifndef GLSLANG_WEB
         coherent     = false;
         devicecoherent = false;
         queuefamilycoherent = false;
         workgroupcoherent = false;
         subgroupcoherent  = false;
+        shadercallcoherent = false;
         nonprivate = false;
         volatil      = false;
         restrict     = false;
         readonly     = false;
         writeonly    = false;
-    }
-
-    // Drop just the storage qualification, which perhaps should
-    // never be done, as it is fundamentally inconsistent, but need to
-    // explore what downstream consumers need.
-    // E.g., in a dereference, it is an inconsistency between:
-    // A) partially dereferenced resource is still in the storage class it started in
-    // B) partially dereferenced resource is a new temporary object
-    // If A, then nothing should change, if B, then everything should change, but this is half way.
-    void makePartialTemporary()
-    {
-        storage      = EvqTemporary;
-        specConstant = false;
-        nonUniform   = false;
+#endif
     }
 
     const char*         semanticName;
     TStorageQualifier   storage   : 6;
-    TBuiltInVariable    builtIn   : 8;
-    TBuiltInVariable    declaredBuiltIn : 8;
+    TBuiltInVariable    builtIn   : 9;
+    TBuiltInVariable    declaredBuiltIn : 9;
+    static_assert(EbvLast < 256, "need to increase size of TBuiltInVariable bitfields!");
     TPrecisionQualifier precision : 3;
     bool invariant    : 1; // require canonical treatment for cross-shader invariance
-    bool noContraction: 1; // prevent contraction and reassociation, e.g., for 'precise' keyword, and expressions it affects
     bool centroid     : 1;
     bool smooth       : 1;
     bool flat         : 1;
+    // having a constant_id is not sufficient: expressions have no id, but are still specConstant
+    bool specConstant : 1;
+    bool nonUniform   : 1;
+    bool explicitOffset   : 1;
+
+#ifdef GLSLANG_WEB
+    bool isWriteOnly() const { return false; }
+    bool isReadOnly() const { return false; }
+    bool isRestrict() const { return false; }
+    bool isCoherent() const { return false; }
+    bool isVolatile() const { return false; }
+    bool isSample() const { return false; }
+    bool isMemory() const { return false; }
+    bool isMemoryQualifierImageAndSSBOOnly() const { return false; }
+    bool bufferReferenceNeedsVulkanMemoryModel() const { return false; }
+    bool isInterpolation() const { return flat || smooth; }
+    bool isExplicitInterpolation() const { return false; }
+    bool isAuxiliary() const { return centroid; }
+    bool isPatch() const { return false; }
+    bool isNoContraction() const { return false; }
+    void setNoContraction() { }
+    bool isPervertexNV() const { return false; }
+#else
+    bool noContraction: 1; // prevent contraction and reassociation, e.g., for 'precise' keyword, and expressions it affects
     bool nopersp      : 1;
-#ifdef AMD_EXTENSIONS
     bool explicitInterp : 1;
-#endif
-#ifdef NV_EXTENSIONS
     bool pervertexNV  : 1;
     bool perPrimitiveNV : 1;
     bool perViewNV : 1;
     bool perTaskNV : 1;
-#endif
     bool patch        : 1;
     bool sample       : 1;
+    bool restrict     : 1;
+    bool readonly     : 1;
+    bool writeonly    : 1;
     bool coherent     : 1;
+    bool volatil      : 1;
     bool devicecoherent : 1;
     bool queuefamilycoherent : 1;
     bool workgroupcoherent : 1;
     bool subgroupcoherent  : 1;
+    bool shadercallcoherent : 1;
     bool nonprivate   : 1;
-    bool volatil      : 1;
-    bool restrict     : 1;
-    bool readonly     : 1;
-    bool writeonly    : 1;
-    bool specConstant : 1;  // having a constant_id is not sufficient: expressions have no id, but are still specConstant
-    bool nonUniform   : 1;
-
+    bool isWriteOnly() const { return writeonly; }
+    bool isReadOnly() const { return readonly; }
+    bool isRestrict() const { return restrict; }
+    bool isCoherent() const { return coherent; }
+    bool isVolatile() const { return volatil; }
+    bool isSample() const { return sample; }
     bool isMemory() const
     {
-        return subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || restrict || readonly || writeonly || nonprivate;
+        return shadercallcoherent || subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || restrict || readonly || writeonly || nonprivate;
     }
     bool isMemoryQualifierImageAndSSBOOnly() const
     {
-        return subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || restrict || readonly || writeonly;
+        return shadercallcoherent || subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || restrict || readonly || writeonly;
     }
-
+    bool bufferReferenceNeedsVulkanMemoryModel() const
+    {
+        // include qualifiers that map to load/store availability/visibility/nonprivate memory access operands
+        return subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || nonprivate;
+    }
     bool isInterpolation() const
     {
-#ifdef AMD_EXTENSIONS
         return flat || smooth || nopersp || explicitInterp;
-#else
-        return flat || smooth || nopersp;
-#endif
     }
-
-#ifdef AMD_EXTENSIONS
     bool isExplicitInterpolation() const
     {
         return explicitInterp;
     }
-#endif
-
     bool isAuxiliary() const
     {
-#ifdef NV_EXTENSIONS
         return centroid || patch || sample || pervertexNV;
-#else
-        return centroid || patch || sample;
-#endif
     }
+    bool isPatch() const { return patch; }
+    bool isNoContraction() const { return noContraction; }
+    void setNoContraction() { noContraction = true; }
+    bool isPervertexNV() const { return pervertexNV; }
+#endif
 
     bool isPipeInput() const
     {
@@ -627,33 +708,6 @@
         }
     }
 
-    bool isPerPrimitive() const
-    {
-#ifdef NV_EXTENSIONS
-        return perPrimitiveNV;
-#else
-        return false;
-#endif
-    }
-
-    bool isPerView() const
-    {
-#ifdef NV_EXTENSIONS
-        return perViewNV;
-#else
-        return false;
-#endif
-    }
-
-    bool isTaskMemory() const
-    {
-#ifdef NV_EXTENSIONS
-        return perTaskNV;
-#else
-        return false;
-#endif
-    }
-
     bool isIo() const
     {
         switch (storage) {
@@ -693,6 +747,15 @@
         }
     }
 
+#ifdef GLSLANG_WEB
+    bool isPerView() const { return false; }
+    bool isTaskMemory() const { return false; }
+    bool isArrayedIo(EShLanguage language) const { return false; }
+#else
+    bool isPerPrimitive() const { return perPrimitiveNV; }
+    bool isPerView() const { return perViewNV; }
+    bool isTaskMemory() const { return perTaskNV; }
+
     // True if this type of IO is supposed to be arrayed with extra level for per-vertex data
     bool isArrayedIo(EShLanguage language) const
     {
@@ -703,49 +766,50 @@
             return ! patch && (isPipeInput() || isPipeOutput());
         case EShLangTessEvaluation:
             return ! patch && isPipeInput();
-#ifdef NV_EXTENSIONS
         case EShLangFragment:
             return pervertexNV && isPipeInput();
         case EShLangMeshNV:
             return ! perTaskNV && isPipeOutput();
-#endif
 
         default:
             return false;
         }
     }
+#endif
 
     // Implementing an embedded layout-qualifier class here, since C++ can't have a real class bitfield
     void clearLayout()  // all layout
     {
         clearUniformLayout();
 
+#ifndef GLSLANG_WEB
         layoutPushConstant = false;
         layoutBufferReference = false;
-#ifdef NV_EXTENSIONS
         layoutPassthrough = false;
         layoutViewportRelative = false;
         // -2048 as the default value indicating layoutSecondaryViewportRelative is not set
         layoutSecondaryViewportRelativeOffset = -2048;
-        layoutShaderRecordNV = false;
-#endif
-
+        layoutShaderRecord = false;
         layoutBufferReferenceAlign = layoutBufferReferenceAlignEnd;
+        layoutFormat = ElfNone;
+#endif
 
         clearInterstageLayout();
 
         layoutSpecConstantId = layoutSpecConstantIdEnd;
-
-        layoutFormat = ElfNone;
     }
     void clearInterstageLayout()
     {
         layoutLocation = layoutLocationEnd;
         layoutComponent = layoutComponentEnd;
+#ifndef GLSLANG_WEB
         layoutIndex = layoutIndexEnd;
         clearStreamLayout();
         clearXfbLayout();
+#endif
     }
+
+#ifndef GLSLANG_WEB
     void clearStreamLayout()
     {
         layoutStream = layoutStreamEnd;
@@ -756,6 +820,7 @@
         layoutXfbStride = layoutXfbStrideEnd;
         layoutXfbOffset = layoutXfbOffsetEnd;
     }
+#endif
 
     bool hasNonXfbLayout() const
     {
@@ -763,11 +828,9 @@
                hasAnyLocation() ||
                hasStream() ||
                hasFormat() ||
-#ifdef NV_EXTENSIONS
-               layoutShaderRecordNV ||
-#endif
-               layoutPushConstant ||
-               layoutBufferReference;
+               isShaderRecord() ||
+               isPushConstant() ||
+               hasBufferReference();
     }
     bool hasLayout() const
     {
@@ -812,6 +875,7 @@
                  unsigned int layoutSpecConstantId       : 11;
     static const unsigned int layoutSpecConstantIdEnd = 0x7FF;
 
+#ifndef GLSLANG_WEB
     // stored as log2 of the actual alignment value
                  unsigned int layoutBufferReferenceAlign :  6;
     static const unsigned int layoutBufferReferenceAlignEnd = 0x3F;
@@ -820,12 +884,10 @@
 
     bool layoutPushConstant;
     bool layoutBufferReference;
-
-#ifdef NV_EXTENSIONS
     bool layoutPassthrough;
     bool layoutViewportRelative;
     int layoutSecondaryViewportRelativeOffset;
-    bool layoutShaderRecordNV;
+    bool layoutShaderRecord;
 #endif
 
     bool hasUniformLayout() const
@@ -846,7 +908,9 @@
 
         layoutSet = layoutSetEnd;
         layoutBinding = layoutBindingEnd;
+#ifndef GLSLANG_WEB
         layoutAttachment = layoutAttachmentEnd;
+#endif
     }
 
     bool hasMatrix() const
@@ -857,10 +921,6 @@
     {
         return layoutPacking != ElpNone;
     }
-    bool hasOffset() const
-    {
-        return layoutOffset != layoutNotSet;
-    }
     bool hasAlign() const
     {
         return layoutAlign != layoutNotSet;
@@ -875,14 +935,6 @@
     {
         return layoutLocation != layoutLocationEnd;
     }
-    bool hasComponent() const
-    {
-        return layoutComponent != layoutComponentEnd;
-    }
-    bool hasIndex() const
-    {
-        return layoutIndex != layoutIndexEnd;
-    }
     bool hasSet() const
     {
         return layoutSet != layoutSetEnd;
@@ -891,6 +943,40 @@
     {
         return layoutBinding != layoutBindingEnd;
     }
+#ifdef GLSLANG_WEB
+    bool hasOffset() const { return false; }
+    bool isNonPerspective() const { return false; }
+    bool hasIndex() const { return false; }
+    unsigned getIndex() const { return 0; }
+    bool hasComponent() const { return false; }
+    bool hasStream() const { return false; }
+    bool hasFormat() const { return false; }
+    bool hasXfb() const { return false; }
+    bool hasXfbBuffer() const { return false; }
+    bool hasXfbStride() const { return false; }
+    bool hasXfbOffset() const { return false; }
+    bool hasAttachment() const { return false; }
+    TLayoutFormat getFormat() const { return ElfNone; }
+    bool isPushConstant() const { return false; }
+    bool isShaderRecord() const { return false; }
+    bool hasBufferReference() const { return false; }
+    bool hasBufferReferenceAlign() const { return false; }
+    bool isNonUniform() const { return false; }
+#else
+    bool hasOffset() const
+    {
+        return layoutOffset != layoutNotSet;
+    }
+    bool isNonPerspective() const { return nopersp; }
+    bool hasIndex() const
+    {
+        return layoutIndex != layoutIndexEnd;
+    }
+    unsigned getIndex() const { return layoutIndex; }
+    bool hasComponent() const
+    {
+        return layoutComponent != layoutComponentEnd;
+    }
     bool hasStream() const
     {
         return layoutStream != layoutStreamEnd;
@@ -921,16 +1007,25 @@
     {
         return layoutAttachment != layoutAttachmentEnd;
     }
+    TLayoutFormat getFormat() const { return layoutFormat; }
+    bool isPushConstant() const { return layoutPushConstant; }
+    bool isShaderRecord() const { return layoutShaderRecord; }
+    bool hasBufferReference() const { return layoutBufferReference; }
+    bool hasBufferReferenceAlign() const
+    {
+        return layoutBufferReferenceAlign != layoutBufferReferenceAlignEnd;
+    }
+    bool isNonUniform() const
+    {
+        return nonUniform;
+    }
+#endif
     bool hasSpecConstantId() const
     {
         // Not the same thing as being a specialization constant, this
         // is just whether or not it was declared with an ID.
         return layoutSpecConstantId != layoutSpecConstantIdEnd;
     }
-    bool hasBufferReferenceAlign() const
-    {
-        return layoutBufferReferenceAlign != layoutBufferReferenceAlignEnd;
-    }
     bool isSpecConstant() const
     {
         // True if type is a specialization constant, whether or not it
@@ -938,10 +1033,6 @@
         // true front-end constant.
         return specConstant;
     }
-    bool isNonUniform() const
-    {
-        return nonUniform;
-    }
     bool isFrontEndConstant() const
     {
         // True if the front-end knows the final constant value.
@@ -961,11 +1052,13 @@
     static const char* getLayoutPackingString(TLayoutPacking packing)
     {
         switch (packing) {
+        case ElpStd140:   return "std140";
+#ifndef GLSLANG_WEB
         case ElpPacked:   return "packed";
         case ElpShared:   return "shared";
-        case ElpStd140:   return "std140";
         case ElpStd430:   return "std430";
         case ElpScalar:   return "scalar";
+#endif
         default:          return "none";
         }
     }
@@ -977,6 +1070,9 @@
         default:             return "none";
         }
     }
+#ifdef GLSLANG_WEB
+    static const char* getLayoutFormatString(TLayoutFormat f) { return "none"; }
+#else
     static const char* getLayoutFormatString(TLayoutFormat f)
     {
         switch (f) {
@@ -1099,6 +1195,19 @@
         default:                    return 0;
         }
     }
+    static const char* getInterlockOrderingString(TInterlockOrdering order)
+    {
+        switch (order) {
+        case EioPixelInterlockOrdered:          return "pixel_interlock_ordered";
+        case EioPixelInterlockUnordered:        return "pixel_interlock_unordered";
+        case EioSampleInterlockOrdered:         return "sample_interlock_ordered";
+        case EioSampleInterlockUnordered:       return "sample_interlock_unordered";
+        case EioShadingRateInterlockOrdered:    return "shading_rate_interlock_ordered";
+        case EioShadingRateInterlockUnordered:  return "shading_rate_interlock_unordered";
+        default:                                return "none";
+        }
+    }
+#endif
 };
 
 // Qualifiers that don't need to be keep per object.  They have shader scope, not object scope.
@@ -1113,18 +1222,22 @@
     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
     bool postDepthCoverage;   // fragment input
     TLayoutDepth layoutDepth;
     bool blendEquation;       // true if any blend equation was specified
     int numViews;             // multiview extenstions
-
-#ifdef NV_EXTENSIONS
+    TInterlockOrdering interlockOrdering;
     bool layoutOverrideCoverage;        // true if layout override_coverage set
     bool layoutDerivativeGroupQuads;    // true if layout derivative_group_quadsNV set
     bool layoutDerivativeGroupLinear;   // true if layout derivative_group_linearNV set
     int primitives;                     // mesh shader "max_primitives"DerivativeGroupLinear;   // true if layout derivative_group_linearNV set
+    TLayoutDepth getDepth() const { return layoutDepth; }
+#else
+    TLayoutDepth getDepth() const { return EldNone; }
 #endif
 
     void init()
@@ -1140,22 +1253,32 @@
         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;
+#ifndef GLSLANG_WEB
         earlyFragmentTests = false;
         postDepthCoverage = false;
         layoutDepth = EldNone;
         blendEquation = false;
         numViews = TQualifier::layoutNotSet;
-#ifdef NV_EXTENSIONS
         layoutOverrideCoverage      = false;
         layoutDerivativeGroupQuads  = false;
         layoutDerivativeGroupLinear = false;
         primitives                  = TQualifier::layoutNotSet;
+        interlockOrdering = EioNone;
 #endif
     }
 
+#ifdef GLSLANG_WEB
+    bool hasBlendEquation() const { return false; }
+#else
+    bool hasBlendEquation() const { return blendEquation; }
+#endif
+
     // Merge in characteristics from the 'src' qualifier.  They can override when
     // set, but never erase when not set.
     void merge(const TShaderQualifiers& src)
@@ -1181,9 +1304,13 @@
                 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];
         }
+#ifndef GLSLANG_WEB
         if (src.earlyFragmentTests)
             earlyFragmentTests = true;
         if (src.postDepthCoverage)
@@ -1194,7 +1321,6 @@
             blendEquation = src.blendEquation;
         if (src.numViews != TQualifier::layoutNotSet)
             numViews = src.numViews;
-#ifdef NV_EXTENSIONS
         if (src.layoutOverrideCoverage)
             layoutOverrideCoverage = src.layoutOverrideCoverage;
         if (src.layoutDerivativeGroupQuads)
@@ -1203,6 +1329,8 @@
             layoutDerivativeGroupLinear = src.layoutDerivativeGroupLinear;
         if (src.primitives != TQualifier::layoutNotSet)
             primitives = src.primitives;
+        if (src.interlockOrdering != EioNone)
+            interlockOrdering = src.interlockOrdering;
 #endif
     }
 };
@@ -1224,9 +1352,17 @@
     int vectorSize : 4;
     int matrixCols : 4;
     int matrixRows : 4;
+    bool coopmat   : 1;
     TArraySizes* arraySizes;
     const TType* userDef;
     TSourceLoc loc;
+    TArraySizes* typeParameters;
+
+#ifdef GLSLANG_WEB
+    bool isCoopmat() const { return false; }
+#else
+    bool isCoopmat() const { return coopmat; }
+#endif
 
     void initType(const TSourceLoc& l)
     {
@@ -1237,6 +1373,8 @@
         arraySizes = nullptr;
         userDef = nullptr;
         loc = l;
+        typeParameters = nullptr;
+        coopmat = false;
     }
 
     void initQualifiers(bool global = false)
@@ -1288,8 +1426,8 @@
     // for "empty" type (no args) or simple scalar/vector/matrix
     explicit TType(TBasicType t = EbtVoid, TStorageQualifier q = EvqTemporary, int vs = 1, int mc = 0, int mr = 0,
                    bool isVector = false) :
-                            basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1),
-                            arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr)
+                            basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1), coopmat(false),
+                            arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr)
                             {
                                 sampler.clear();
                                 qualifier.clear();
@@ -1299,8 +1437,8 @@
     // for explicit precision qualifier
     TType(TBasicType t, TStorageQualifier q, TPrecisionQualifier p, int vs = 1, int mc = 0, int mr = 0,
           bool isVector = false) :
-                            basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1),
-                            arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr)
+                            basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1), coopmat(false),
+                            arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr)
                             {
                                 sampler.clear();
                                 qualifier.clear();
@@ -1312,8 +1450,8 @@
     // for turning a TPublicType into a TType, using a shallow copy
     explicit TType(const TPublicType& p) :
                             basicType(p.basicType),
-                            vectorSize(p.vectorSize), matrixCols(p.matrixCols), matrixRows(p.matrixRows), vector1(false),
-                            arraySizes(p.arraySizes), structure(nullptr), fieldName(nullptr), typeName(nullptr)
+                            vectorSize(p.vectorSize), matrixCols(p.matrixCols), matrixRows(p.matrixRows), vector1(false), coopmat(p.coopmat),
+                            arraySizes(p.arraySizes), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(p.typeParameters)
                             {
                                 if (basicType == EbtSampler)
                                     sampler = p.sampler;
@@ -1329,12 +1467,25 @@
                                     }
                                     typeName = NewPoolTString(p.userDef->getTypeName().c_str());
                                 }
+                                if (p.isCoopmat() && p.typeParameters && p.typeParameters->getNumDims() > 0) {
+                                    int numBits = p.typeParameters->getDimSize(0);
+                                    if (p.basicType == EbtFloat && numBits == 16) {
+                                        basicType = EbtFloat16;
+                                        qualifier.precision = EpqNone;
+                                    } else if (p.basicType == EbtUint && numBits == 8) {
+                                        basicType = EbtUint8;
+                                        qualifier.precision = EpqNone;
+                                    } else if (p.basicType == EbtInt && numBits == 8) {
+                                        basicType = EbtInt8;
+                                        qualifier.precision = EpqNone;
+                                    }
+                                }
                             }
     // for construction of sampler types
     TType(const TSampler& sampler, TStorageQualifier q = EvqUniform, TArraySizes* as = nullptr) :
-        basicType(EbtSampler), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false),
+        basicType(EbtSampler), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmat(false),
         arraySizes(as), structure(nullptr), fieldName(nullptr), typeName(nullptr),
-        sampler(sampler)
+        sampler(sampler), typeParameters(nullptr)
     {
         qualifier.clear();
         qualifier.storage = q;
@@ -1375,13 +1526,16 @@
                                         // dereference from vector to scalar
                                         vectorSize = 1;
                                         vector1 = false;
+                                    } else if (isCoopMat()) {
+                                        coopmat = false;
+                                        typeParameters = nullptr;
                                     }
                                 }
                             }
     // for making structures, ...
     TType(TTypeList* userDef, const TString& n) :
-                            basicType(EbtStruct), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false),
-                            arraySizes(nullptr), structure(userDef), fieldName(nullptr)
+                            basicType(EbtStruct), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmat(false),
+                            arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr)
                             {
                                 sampler.clear();
                                 qualifier.clear();
@@ -1389,8 +1543,8 @@
                             }
     // For interface blocks
     TType(TTypeList* userDef, const TString& n, const TQualifier& q) :
-                            basicType(EbtBlock), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false),
-                            qualifier(q), arraySizes(nullptr), structure(userDef), fieldName(nullptr)
+                            basicType(EbtBlock), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmat(false),
+                            qualifier(q), arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr)
                             {
                                 sampler.clear();
                                 typeName = NewPoolTString(n.c_str());
@@ -1428,6 +1582,8 @@
         } else {
             referentType = copyOf.referentType;
         }
+        typeParameters = copyOf.typeParameters;
+        coopmat = copyOf.isCoopMat();
     }
 
     // Make complete copy of the whole type graph rooted at 'copyOf'.
@@ -1472,6 +1628,23 @@
         assert(fieldName);
         return *fieldName;
     }
+    TShaderInterface getShaderInterface() const
+    {
+        if (basicType != EbtBlock)
+            return EsiNone;
+
+        switch (qualifier.storage) {
+        default:
+            return EsiNone;
+        case EvqVaryingIn:
+            return EsiInput;
+        case EvqVaryingOut:
+            return EsiOutput;
+        case EvqUniform:
+        case EvqBuffer:
+            return EsiUniform;
+        }
+    }
 
     virtual TBasicType getBasicType() const { return basicType; }
     virtual const TSampler& getSampler() const { return sampler; }
@@ -1486,11 +1659,17 @@
     virtual int getOuterArraySize()  const { return arraySizes->getOuterSize(); }
     virtual TIntermTyped*  getOuterArrayNode() const { return arraySizes->getOuterNode(); }
     virtual int getCumulativeArraySize()  const { return arraySizes->getCumulativeSize(); }
-    virtual bool isArrayOfArrays() const { return arraySizes != nullptr && arraySizes->getNumDims() > 1; }
+#ifdef GLSLANG_WEB
+    bool isArrayOfArrays() const { return false; }
+#else
+    bool isArrayOfArrays() const { return arraySizes != nullptr && arraySizes->getNumDims() > 1; }
+#endif
     virtual int getImplicitArraySize() const { return arraySizes->getImplicitSize(); }
     virtual const TArraySizes* getArraySizes() const { return arraySizes; }
     virtual       TArraySizes* getArraySizes()       { return arraySizes; }
     virtual TType* getReferentType() const { return referentType; }
+    virtual const TArraySizes* getTypeParameters() const { return typeParameters; }
+    virtual       TArraySizes* getTypeParameters()       { return typeParameters; }
 
     virtual bool isScalar() const { return ! isVector() && ! isMatrix() && ! isStruct() && ! isArray(); }
     virtual bool isScalarOrVec1() const { return isScalar() || vector1; }
@@ -1522,9 +1701,9 @@
         }
         return false;
     }
-    virtual bool isOpaque() const { return basicType == EbtSampler || basicType == EbtAtomicUint
-#ifdef NV_EXTENSIONS
-        || basicType == EbtAccStructNV
+    virtual bool isOpaque() const { return basicType == EbtSampler
+#ifndef GLSLANG_WEB
+         || basicType == EbtAtomicUint || basicType == EbtAccStruct || basicType == EbtRayQuery
 #endif
         ; }
     virtual bool isBuiltIn() const { return getQualifier().builtIn != EbvNone; }
@@ -1533,6 +1712,18 @@
     virtual bool isImage()   const { return basicType == EbtSampler && getSampler().isImage(); }
     virtual bool isSubpass() const { return basicType == EbtSampler && getSampler().isSubpass(); }
     virtual bool isTexture() const { return basicType == EbtSampler && getSampler().isTexture(); }
+    // Check the block-name convention of creating a block without populating it's members:
+    virtual bool isUnusableName() const { return isStruct() && structure == nullptr; }
+    virtual bool isParameterized()  const { return typeParameters != nullptr; }
+#ifdef GLSLANG_WEB
+    bool isAtomic() const { return false; }
+    bool isCoopMat() const { return false; }
+    bool isReference() const { return false; }
+#else
+    bool isAtomic() const { return basicType == EbtAtomicUint; }
+    bool isCoopMat() const { return coopmat; }
+    bool isReference() const { return getBasicType() == EbtReference; }
+#endif
 
     // return true if this type contains any subtype which satisfies the given predicate.
     template <typename P>
@@ -1598,6 +1789,7 @@
             case EbtInt64:
             case EbtUint64:
             case EbtBool:
+            case EbtReference:
                 return true;
             default:
                 return false;
@@ -1612,15 +1804,44 @@
         return contains([](const TType* t) { return t->isArray() && t->arraySizes->isOuterSpecialization(); } );
     }
 
-    virtual bool contains16BitInt() const
+#ifdef GLSLANG_WEB
+    bool containsDouble() const { return false; }
+    bool contains16BitFloat() const { return false; }
+    bool contains64BitInt() const { return false; }
+    bool contains16BitInt() const { return false; }
+    bool contains8BitInt() const { return false; }
+    bool containsCoopMat() const { return false; }
+    bool containsReference() const { return false; }
+#else
+    bool containsDouble() const
+    {
+        return containsBasicType(EbtDouble);
+    }
+    bool contains16BitFloat() const
+    {
+        return containsBasicType(EbtFloat16);
+    }
+    bool contains64BitInt() const
+    {
+        return containsBasicType(EbtInt64) || containsBasicType(EbtUint64);
+    }
+    bool contains16BitInt() const
     {
         return containsBasicType(EbtInt16) || containsBasicType(EbtUint16);
     }
-
-    virtual bool contains8BitInt() const
+    bool contains8BitInt() const
     {
         return containsBasicType(EbtInt8) || containsBasicType(EbtUint8);
     }
+    bool containsCoopMat() const
+    {
+        return contains([](const TType* t) { return t->coopmat; } );
+    }
+    bool containsReference() const
+    {
+        return containsBasicType(EbtReference);
+    }
+#endif
 
     // Array editing methods.  Array descriptors can be shared across
     // type instances.  This allows all uses of the same array
@@ -1680,11 +1901,9 @@
     {
         if (isUnsizedArray() && !(skipNonvariablyIndexed || isArrayVariablyIndexed()))
             changeOuterArraySize(getImplicitArraySize());
-#ifdef NV_EXTENSIONS
         // For multi-dim per-view arrays, set unsized inner dimension size to 1
         if (qualifier.isPerView() && arraySizes && arraySizes->isInnerUnsized())
             arraySizes->clearInnerUnsized();
-#endif
         if (isStruct() && structure->size() > 0) {
             int lastMember = (int)structure->size() - 1;
             for (int i = 0; i < lastMember; ++i)
@@ -1694,6 +1913,46 @@
         }
     }
 
+
+    void updateTypeParameters(const TType& type)
+    {
+        // For when we may already be sharing existing array descriptors,
+        // keeping the pointers the same, just updating the contents.
+        assert(typeParameters != nullptr);
+        assert(type.typeParameters != nullptr);
+        *typeParameters = *type.typeParameters;
+    }
+    void copyTypeParameters(const TArraySizes& s)
+    {
+        // For setting a fresh new set of type parameters, not yet worrying about sharing.
+        typeParameters = new TArraySizes;
+        *typeParameters = s;
+    }
+    void transferTypeParameters(TArraySizes* s)
+    {
+        // For setting an already allocated set of sizes that this type can use
+        // (no copy made).
+        typeParameters = s;
+    }
+    void clearTypeParameters()
+    {
+        typeParameters = nullptr;
+    }
+
+    // Add inner array sizes, to any existing sizes, via copy; the
+    // sizes passed in can still be reused for other purposes.
+    void copyTypeParametersInnerSizes(const TArraySizes* s)
+    {
+        if (s != nullptr) {
+            if (typeParameters == nullptr)
+                copyTypeParameters(*s);
+            else
+                typeParameters->addInnerSizes(*s);
+        }
+    }
+
+
+
     const char* getBasicString() const
     {
         return TType::getBasicString(basicType);
@@ -1702,31 +1961,39 @@
     static const char* getBasicString(TBasicType t)
     {
         switch (t) {
-        case EbtVoid:              return "void";
         case EbtFloat:             return "float";
+        case EbtInt:               return "int";
+        case EbtUint:              return "uint";
+        case EbtSampler:           return "sampler/image";
+#ifndef GLSLANG_WEB
+        case EbtVoid:              return "void";
         case EbtDouble:            return "double";
         case EbtFloat16:           return "float16_t";
         case EbtInt8:              return "int8_t";
         case EbtUint8:             return "uint8_t";
         case EbtInt16:             return "int16_t";
         case EbtUint16:            return "uint16_t";
-        case EbtInt:               return "int";
-        case EbtUint:              return "uint";
         case EbtInt64:             return "int64_t";
         case EbtUint64:            return "uint64_t";
         case EbtBool:              return "bool";
         case EbtAtomicUint:        return "atomic_uint";
-        case EbtSampler:           return "sampler/image";
         case EbtStruct:            return "structure";
         case EbtBlock:             return "block";
-#ifdef NV_EXTENSIONS
-        case EbtAccStructNV:       return "accelerationStructureNV";
-#endif
+        case EbtAccStruct:         return "accelerationStructureNV";
+        case EbtRayQuery:          return "rayQueryEXT";
         case EbtReference:         return "reference";
+#endif
         default:                   return "unknown type";
         }
     }
 
+#ifdef GLSLANG_WEB
+    TString getCompleteString() const { return ""; }
+    const char* getStorageQualifierString() const { return ""; }
+    const char* getBuiltInVariableString() const { return ""; }
+    const char* getPrecisionQualifierString() const { return ""; }
+    TString getBasicTypeString() const { return ""; }
+#else
     TString getCompleteString() const
     {
         TString typeString;
@@ -1815,7 +2082,6 @@
                     appendUint(1u << qualifier.layoutBufferReferenceAlign);
                 }
 
-#ifdef NV_EXTENSIONS
                 if (qualifier.layoutPassthrough)
                     appendStr(" passthrough");
                 if (qualifier.layoutViewportRelative)
@@ -1824,9 +2090,8 @@
                     appendStr(" layoutSecondaryViewportRelativeOffset=");
                     appendInt(qualifier.layoutSecondaryViewportRelativeOffset);
                 }
-                if (qualifier.layoutShaderRecordNV)
+                if (qualifier.layoutShaderRecord)
                     appendStr(" shaderRecordNV");
-#endif
 
                 appendStr(")");
             }
@@ -1844,11 +2109,8 @@
             appendStr(" flat");
         if (qualifier.nopersp)
             appendStr(" noperspective");
-#ifdef AMD_EXTENSIONS
         if (qualifier.explicitInterp)
             appendStr(" __explicitInterpAMD");
-#endif
-#ifdef NV_EXTENSIONS
         if (qualifier.pervertexNV)
             appendStr(" pervertexNV");
         if (qualifier.perPrimitiveNV)
@@ -1857,7 +2119,6 @@
             appendStr(" perviewNV");
         if (qualifier.perTaskNV)
             appendStr(" taskNV");
-#endif
         if (qualifier.patch)
             appendStr(" patch");
         if (qualifier.sample)
@@ -1872,6 +2133,8 @@
             appendStr(" workgroupcoherent");
         if (qualifier.subgroupcoherent)
             appendStr(" subgroupcoherent");
+        if (qualifier.shadercallcoherent)
+            appendStr(" shadercallcoherent");
         if (qualifier.nonprivate)
             appendStr(" nonprivate");
         if (qualifier.volatil)
@@ -1908,6 +2171,15 @@
                 }
             }
         }
+        if (isParameterized()) {
+            appendStr("<");
+            for(int i = 0; i < (int)typeParameters->getNumDims(); ++i) {
+                appendInt(typeParameters->getDimSize(i));
+                if (i != (int)typeParameters->getNumDims() - 1)
+                    appendStr(", ");
+            }
+            appendStr(">");
+        }
         if (qualifier.precision != EpqNone) {
             appendStr(" ");
             appendStr(getPrecisionQualifierString());
@@ -1933,15 +2205,17 @@
         }
 
         // Add struct/block members
-        if (isStruct()) {
+        if (isStruct() && structure) {
             appendStr("{");
+            bool hasHiddenMember = true;
             for (size_t i = 0; i < structure->size(); ++i) {
                 if (! (*structure)[i].type->hiddenMember()) {
+                    if (!hasHiddenMember) 
+                        appendStr(", ");
                     typeString.append((*structure)[i].type->getCompleteString());
                     typeString.append(" ");
                     typeString.append((*structure)[i].type->getFieldName());
-                    if (i < structure->size() - 1)
-                        appendStr(", ");
+                    hasHiddenMember = false;
                 }
             }
             appendStr("}");
@@ -1961,10 +2235,13 @@
     const char* getStorageQualifierString() const { return GetStorageQualifierString(qualifier.storage); }
     const char* getBuiltInVariableString() const { return GetBuiltInVariableString(qualifier.builtIn); }
     const char* getPrecisionQualifierString() const { return GetPrecisionQualifierString(qualifier.precision); }
+#endif
+
     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;
@@ -2027,12 +2304,12 @@
         return true;
     }
 
-    bool sameReferenceType(const TType& right) const
+     bool sameReferenceType(const TType& right) const
     {
-        if ((basicType == EbtReference) != (right.basicType == EbtReference))
+        if (isReference() != right.isReference())
             return false;
 
-        if ((basicType != EbtReference) && (right.basicType != EbtReference))
+        if (!isReference() && !right.isReference())
             return true;
 
         assert(referentType != nullptr);
@@ -2044,7 +2321,7 @@
         return *referentType == *right.referentType;
     }
 
-    // See if two types match, in all aspects except arrayness
+   // See if two types match, in all aspects except arrayness
     bool sameElementType(const TType& right) const
     {
         return basicType == right.basicType && sameElementShape(right);
@@ -2064,6 +2341,13 @@
         return arraySizes->sameInnerArrayness(*right.arraySizes);
     }
 
+    // See if two type's parameters match
+    bool sameTypeParameters(const TType& right) const
+    {
+        return ((typeParameters == nullptr && right.typeParameters == nullptr) ||
+                (typeParameters != nullptr && right.typeParameters != nullptr && *typeParameters == *right.typeParameters));
+    }
+
     // See if two type's elements match in all ways except basic type
     bool sameElementShape(const TType& right) const
     {
@@ -2072,14 +2356,37 @@
                matrixCols == right.matrixCols &&
                matrixRows == right.matrixRows &&
                   vector1 == right.vector1    &&
+              isCoopMat() == right.isCoopMat() &&
                sameStructType(right)          &&
                sameReferenceType(right);
     }
 
+    // See if a cooperative matrix type parameter with unspecified parameters is
+    // an OK function parameter
+    bool coopMatParameterOK(const TType& right) const
+    {
+        return isCoopMat() && right.isCoopMat() && (getBasicType() == right.getBasicType()) &&
+               typeParameters == nullptr && right.typeParameters != nullptr;
+    }
+
+    bool sameCoopMatBaseType(const TType &right) const {
+        bool rv = coopmat && right.coopmat;
+        if (getBasicType() == EbtFloat || getBasicType() == EbtFloat16)
+            rv = right.getBasicType() == EbtFloat || right.getBasicType() == EbtFloat16;
+        else if (getBasicType() == EbtUint || getBasicType() == EbtUint8)
+            rv = right.getBasicType() == EbtUint || right.getBasicType() == EbtUint8;
+        else if (getBasicType() == EbtInt || getBasicType() == EbtInt8)
+            rv = right.getBasicType() == EbtInt || right.getBasicType() == EbtInt8;
+        else
+            rv = false;
+        return rv;
+    }
+
+
     // See if two types match in all ways (just the actual type, not qualification)
     bool operator==(const TType& right) const
     {
-        return sameElementType(right) && sameArrayness(right);
+        return sameElementType(right) && sameArrayness(right) && sameTypeParameters(right);
     }
 
     bool operator!=(const TType& right) const
@@ -2087,6 +2394,17 @@
         return ! operator==(right);
     }
 
+    unsigned int getBufferReferenceAlignment() const
+    {
+#ifndef GLSLANG_WEB
+        if (getBasicType() == glslang::EbtReference) {
+            return getReferentType()->getQualifier().hasBufferReferenceAlign() ?
+                        (1u << getReferentType()->getQualifier().layoutBufferReferenceAlign) : 16u;
+        }
+#endif
+        return 0;
+    }
+
 protected:
     // Require consumer to pick between deep copy and shallow copy.
     TType(const TType& type);
@@ -2104,6 +2422,11 @@
             *arraySizes = *copyOf.arraySizes;
         }
 
+        if (copyOf.typeParameters) {
+            typeParameters = new TArraySizes;
+            *typeParameters = *copyOf.typeParameters;
+        }
+
         if (copyOf.isStruct() && copyOf.structure) {
             auto prevCopy = copiedMap.find(copyOf.structure);
             if (prevCopy != copiedMap.end())
@@ -2139,6 +2462,7 @@
                                // functionality is added.
                                // HLSL does have a 1-component vectors, so this will be true to disambiguate
                                // from a scalar.
+    bool coopmat         : 1;
     TQualifier qualifier;
 
     TArraySizes* arraySizes;    // nullptr unless an array; can be shared across types
@@ -2151,6 +2475,7 @@
     TString *fieldName;         // for structure field names
     TString *typeName;          // for structure type name
     TSampler sampler;
+    TArraySizes* typeParameters;// nullptr unless a parameterized type; can be shared across types
 };
 
 } // end namespace glslang
diff --git a/glslang/Include/arrays.h b/glslang/Include/arrays.h
index af8f560..7f047d9 100644
--- a/glslang/Include/arrays.h
+++ b/glslang/Include/arrays.h
@@ -254,7 +254,9 @@
     void addInnerSize() { addInnerSize((unsigned)UnsizedArraySize); }
     void addInnerSize(int s) { addInnerSize((unsigned)s, nullptr); }
     void addInnerSize(int s, TIntermTyped* n) { sizes.push_back((unsigned)s, n); }
-    void addInnerSize(TArraySize pair) { sizes.push_back(pair.size, pair.node); }
+    void addInnerSize(TArraySize pair) {
+        sizes.push_back(pair.size, pair.node);
+    }
     void addInnerSizes(const TArraySizes& s) { sizes.push_back(s.sizes); }
     void changeOuterSize(int s) { sizes.changeFront((unsigned)s); }
     int getImplicitSize() const { return implicitArraySize; }
@@ -318,8 +320,8 @@
     void setVariablyIndexed() { variablyIndexed = true; }
     bool isVariablyIndexed() const { return variablyIndexed; }
 
-    bool operator==(const TArraySizes& rhs) { return sizes == rhs.sizes; }
-    bool operator!=(const TArraySizes& rhs) { return sizes != rhs.sizes; }
+    bool operator==(const TArraySizes& rhs) const { return sizes == rhs.sizes; }
+    bool operator!=(const TArraySizes& rhs) const { return sizes != rhs.sizes; }
 
 protected:
     TSmallArrayVector sizes;
diff --git a/glslang/Include/glslang_c_interface.h b/glslang/Include/glslang_c_interface.h
new file mode 100644
index 0000000..5a450e0
--- /dev/null
+++ b/glslang/Include/glslang_c_interface.h
@@ -0,0 +1,232 @@
+/**
+    This code is based on the glslang_c_interface implementation by Viktor Latypov
+**/
+
+/**
+BSD 2-Clause License
+
+Copyright (c) 2019, Viktor Latypov
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**/
+
+#ifndef GLSLANG_C_IFACE_H_INCLUDED
+#define GLSLANG_C_IFACE_H_INCLUDED
+
+#include <stdbool.h>
+#include <stdlib.h>
+
+#include "glslang_c_shader_types.h"
+
+typedef struct glslang_shader_s glslang_shader_t;
+typedef struct glslang_program_s glslang_program_t;
+
+/* TLimits counterpart */
+typedef struct glslang_limits_s {
+    bool non_inductive_for_loops;
+    bool while_loops;
+    bool do_while_loops;
+    bool general_uniform_indexing;
+    bool general_attribute_matrix_vector_indexing;
+    bool general_varying_indexing;
+    bool general_sampler_indexing;
+    bool general_variable_indexing;
+    bool general_constant_matrix_vector_indexing;
+} glslang_limits_t;
+
+/* TBuiltInResource counterpart */
+typedef struct glslang_resource_s {
+    int max_lights;
+    int max_clip_planes;
+    int max_texture_units;
+    int max_texture_coords;
+    int max_vertex_attribs;
+    int max_vertex_uniform_components;
+    int max_varying_floats;
+    int max_vertex_texture_image_units;
+    int max_combined_texture_image_units;
+    int max_texture_image_units;
+    int max_fragment_uniform_components;
+    int max_draw_buffers;
+    int max_vertex_uniform_vectors;
+    int max_varying_vectors;
+    int max_fragment_uniform_vectors;
+    int max_vertex_output_vectors;
+    int max_fragment_input_vectors;
+    int min_program_texel_offset;
+    int max_program_texel_offset;
+    int max_clip_distances;
+    int max_compute_work_group_count_x;
+    int max_compute_work_group_count_y;
+    int max_compute_work_group_count_z;
+    int max_compute_work_group_size_x;
+    int max_compute_work_group_size_y;
+    int max_compute_work_group_size_z;
+    int max_compute_uniform_components;
+    int max_compute_texture_image_units;
+    int max_compute_image_uniforms;
+    int max_compute_atomic_counters;
+    int max_compute_atomic_counter_buffers;
+    int max_varying_components;
+    int max_vertex_output_components;
+    int max_geometry_input_components;
+    int max_geometry_output_components;
+    int max_fragment_input_components;
+    int max_image_units;
+    int max_combined_image_units_and_fragment_outputs;
+    int max_combined_shader_output_resources;
+    int max_image_samples;
+    int max_vertex_image_uniforms;
+    int max_tess_control_image_uniforms;
+    int max_tess_evaluation_image_uniforms;
+    int max_geometry_image_uniforms;
+    int max_fragment_image_uniforms;
+    int max_combined_image_uniforms;
+    int max_geometry_texture_image_units;
+    int max_geometry_output_vertices;
+    int max_geometry_total_output_components;
+    int max_geometry_uniform_components;
+    int max_geometry_varying_components;
+    int max_tess_control_input_components;
+    int max_tess_control_output_components;
+    int max_tess_control_texture_image_units;
+    int max_tess_control_uniform_components;
+    int max_tess_control_total_output_components;
+    int max_tess_evaluation_input_components;
+    int max_tess_evaluation_output_components;
+    int max_tess_evaluation_texture_image_units;
+    int max_tess_evaluation_uniform_components;
+    int max_tess_patch_components;
+    int max_patch_vertices;
+    int max_tess_gen_level;
+    int max_viewports;
+    int max_vertex_atomic_counters;
+    int max_tess_control_atomic_counters;
+    int max_tess_evaluation_atomic_counters;
+    int max_geometry_atomic_counters;
+    int max_fragment_atomic_counters;
+    int max_combined_atomic_counters;
+    int max_atomic_counter_bindings;
+    int max_vertex_atomic_counter_buffers;
+    int max_tess_control_atomic_counter_buffers;
+    int max_tess_evaluation_atomic_counter_buffers;
+    int max_geometry_atomic_counter_buffers;
+    int max_fragment_atomic_counter_buffers;
+    int max_combined_atomic_counter_buffers;
+    int max_atomic_counter_buffer_size;
+    int max_transform_feedback_buffers;
+    int max_transform_feedback_interleaved_components;
+    int max_cull_distances;
+    int max_combined_clip_and_cull_distances;
+    int max_samples;
+    int max_mesh_output_vertices_nv;
+    int max_mesh_output_primitives_nv;
+    int max_mesh_work_group_size_x_nv;
+    int max_mesh_work_group_size_y_nv;
+    int max_mesh_work_group_size_z_nv;
+    int max_task_work_group_size_x_nv;
+    int max_task_work_group_size_y_nv;
+    int max_task_work_group_size_z_nv;
+    int max_mesh_view_count_nv;
+
+    glslang_limits_t limits;
+} glslang_resource_t;
+
+typedef struct glslang_input_s {
+    glslang_source_t language;
+    glslang_stage_t stage;
+    glslang_client_t client;
+    glslang_target_client_version_t client_version;
+    glslang_target_language_t target_language;
+    glslang_target_language_version_t target_language_version;
+    /** Shader source code */
+    const char* code;
+    int default_version;
+    glslang_profile_t default_profile;
+    int force_default_version_and_profile;
+    int forward_compatible;
+    glslang_messages_t messages;
+    const glslang_resource_t* resource;
+} glslang_input_t;
+
+/* Inclusion result structure allocated by C include_local/include_system callbacks */
+typedef struct glsl_include_result_s {
+    /* Header file name or NULL if inclusion failed */
+    const char* header_name;
+
+    /* Header contents or NULL */
+    const char* header_data;
+    size_t header_length;
+
+} glsl_include_result_t;
+
+/* Callback for local file inclusion */
+typedef glsl_include_result_t* (*glsl_include_local_func)(void* ctx, const char* header_name, const char* includer_name,
+                                                          size_t include_depth);
+
+/* Callback for system file inclusion */
+typedef glsl_include_result_t* (*glsl_include_system_func)(void* ctx, const char* header_name,
+                                                           const char* includer_name, size_t include_depth);
+
+/* Callback for include result destruction */
+typedef int (*glsl_free_include_result_func)(void* ctx, glsl_include_result_t* result);
+
+/* Collection of callbacks for GLSL preprocessor */
+typedef struct glsl_include_callbacks_s {
+    glsl_include_system_func include_system;
+    glsl_include_local_func include_local;
+    glsl_free_include_result_func free_include_result;
+} glsl_include_callbacks_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int glslang_initialize_process();
+void glslang_finalize_process();
+
+glslang_shader_t* glslang_shader_create(const glslang_input_t* input);
+void glslang_shader_delete(glslang_shader_t* shader);
+int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input);
+int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input);
+const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader);
+const char* glslang_shader_get_info_log(glslang_shader_t* shader);
+const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader);
+
+glslang_program_t* glslang_program_create();
+void glslang_program_delete(glslang_program_t* program);
+void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader);
+int glslang_program_link(glslang_program_t* program, int messages); // glslang_messages_t
+void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage);
+size_t glslang_program_SPIRV_get_size(glslang_program_t* program);
+void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*);
+unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program);
+const char* glslang_program_SPIRV_get_messages(glslang_program_t* program);
+const char* glslang_program_get_info_log(glslang_program_t* program);
+const char* glslang_program_get_info_debug_log(glslang_program_t* program);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifdef GLSLANG_C_IFACE_INCLUDED */
diff --git a/glslang/Include/glslang_c_shader_types.h b/glslang/Include/glslang_c_shader_types.h
new file mode 100644
index 0000000..769f4c4
--- /dev/null
+++ b/glslang/Include/glslang_c_shader_types.h
@@ -0,0 +1,182 @@
+/**
+    This code is based on the glslang_c_interface implementation by Viktor Latypov
+**/
+
+/**
+BSD 2-Clause License
+
+Copyright (c) 2019, Viktor Latypov
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**/
+
+#ifndef C_SHADER_TYPES_H_INCLUDED
+#define C_SHADER_TYPES_H_INCLUDED
+
+#define LAST_ELEMENT_MARKER(x) x
+
+/* EShLanguage counterpart */
+typedef enum {
+    GLSLANG_STAGE_VERTEX,
+    GLSLANG_STAGE_TESSCONTROL,
+    GLSLANG_STAGE_TESSEVALUATION,
+    GLSLANG_STAGE_GEOMETRY,
+    GLSLANG_STAGE_FRAGMENT,
+    GLSLANG_STAGE_COMPUTE,
+    GLSLANG_STAGE_RAYGEN_NV,
+    GLSLANG_STAGE_INTERSECT_NV,
+    GLSLANG_STAGE_ANYHIT_NV,
+    GLSLANG_STAGE_CLOSESTHIT_NV,
+    GLSLANG_STAGE_MISS_NV,
+    GLSLANG_STAGE_CALLABLE_NV,
+    GLSLANG_STAGE_TASK_NV,
+    GLSLANG_STAGE_MESH_NV,
+    LAST_ELEMENT_MARKER(GLSLANG_STAGE_COUNT),
+} glslang_stage_t; // would be better as stage, but this is ancient now
+
+/* EShLanguageMask counterpart */
+typedef enum {
+    GLSLANG_STAGE_VERTEX_MASK = (1 << GLSLANG_STAGE_VERTEX),
+    GLSLANG_STAGE_TESSCONTROL_MASK = (1 << GLSLANG_STAGE_TESSCONTROL),
+    GLSLANG_STAGE_TESSEVALUATION_MASK = (1 << GLSLANG_STAGE_TESSEVALUATION),
+    GLSLANG_STAGE_GEOMETRY_MASK = (1 << GLSLANG_STAGE_GEOMETRY),
+    GLSLANG_STAGE_FRAGMENT_MASK = (1 << GLSLANG_STAGE_FRAGMENT),
+    GLSLANG_STAGE_COMPUTE_MASK = (1 << GLSLANG_STAGE_COMPUTE),
+    GLSLANG_STAGE_RAYGEN_NV_MASK = (1 << GLSLANG_STAGE_RAYGEN_NV),
+    GLSLANG_STAGE_INTERSECT_NV_MASK = (1 << GLSLANG_STAGE_INTERSECT_NV),
+    GLSLANG_STAGE_ANYHIT_NV_MASK = (1 << GLSLANG_STAGE_ANYHIT_NV),
+    GLSLANG_STAGE_CLOSESTHIT_NV_MASK = (1 << GLSLANG_STAGE_CLOSESTHIT_NV),
+    GLSLANG_STAGE_MISS_NV_MASK = (1 << GLSLANG_STAGE_MISS_NV),
+    GLSLANG_STAGE_CALLABLE_NV_MASK = (1 << GLSLANG_STAGE_CALLABLE_NV),
+    GLSLANG_STAGE_TASK_NV_MASK = (1 << GLSLANG_STAGE_TASK_NV),
+    GLSLANG_STAGE_MESH_NV_MASK = (1 << GLSLANG_STAGE_MESH_NV),
+    LAST_ELEMENT_MARKER(GLSLANG_STAGE_MASK_COUNT),
+} glslang_stage_mask_t;
+
+/* EShSource counterpart */
+typedef enum {
+    GLSLANG_SOURCE_NONE,
+    GLSLANG_SOURCE_GLSL,
+    GLSLANG_SOURCE_HLSL,
+    LAST_ELEMENT_MARKER(GLSLANG_SOURCE_COUNT),
+} glslang_source_t;
+
+/* EShClient counterpart */
+typedef enum {
+    GLSLANG_CLIENT_NONE,
+    GLSLANG_CLIENT_VULKAN,
+    GLSLANG_CLIENT_OPENGL,
+    LAST_ELEMENT_MARKER(GLSLANG_CLIENT_COUNT),
+} glslang_client_t;
+
+/* EShTargetLanguage counterpart */
+typedef enum {
+    GLSLANG_TARGET_NONE,
+    GLSLANG_TARGET_SPV,
+    LAST_ELEMENT_MARKER(GLSLANG_TARGET_COUNT),
+} glslang_target_language_t;
+
+/* SH_TARGET_ClientVersion counterpart */
+typedef enum {
+    GLSLANG_TARGET_VULKAN_1_0 = (1 << 22),
+    GLSLANG_TARGET_VULKAN_1_1 = (1 << 22) | (1 << 12),
+    GLSLANG_TARGET_OPENGL_450 = 450,
+    LAST_ELEMENT_MARKER(GLSLANG_TARGET_CLIENT_VERSION_COUNT),
+} glslang_target_client_version_t;
+
+/* SH_TARGET_LanguageVersion counterpart */
+typedef enum {
+    GLSLANG_TARGET_SPV_1_0 = (1 << 16),
+    GLSLANG_TARGET_SPV_1_1 = (1 << 16) | (1 << 8),
+    GLSLANG_TARGET_SPV_1_2 = (1 << 16) | (2 << 8),
+    GLSLANG_TARGET_SPV_1_3 = (1 << 16) | (3 << 8),
+    GLSLANG_TARGET_SPV_1_4 = (1 << 16) | (4 << 8),
+    GLSLANG_TARGET_SPV_1_5 = (1 << 16) | (5 << 8),
+    LAST_ELEMENT_MARKER(GLSLANG_TARGET_LANGUAGE_VERSION_COUNT),
+} glslang_target_language_version_t;
+
+/* EShExecutable counterpart */
+typedef enum { GLSLANG_EX_VERTEX_FRAGMENT, GLSLANG_EX_FRAGMENT } glslang_executable_t;
+
+/* EShOptimizationLevel counterpart  */
+typedef enum {
+    GLSLANG_OPT_NO_GENERATION,
+    GLSLANG_OPT_NONE,
+    GLSLANG_OPT_SIMPLE,
+    GLSLANG_OPT_FULL,
+    LAST_ELEMENT_MARKER(GLSLANG_OPT_LEVEL_COUNT),
+} glslang_optimization_level_t;
+
+/* EShTextureSamplerTransformMode counterpart */
+typedef enum {
+    GLSLANG_TEX_SAMP_TRANS_KEEP,
+    GLSLANG_TEX_SAMP_TRANS_UPGRADE_TEXTURE_REMOVE_SAMPLER,
+    LAST_ELEMENT_MARKER(GLSLANG_TEX_SAMP_TRANS_COUNT),
+} glslang_texture_sampler_transform_mode_t;
+
+/* EShMessages counterpart */
+typedef enum {
+    GLSLANG_MSG_DEFAULT_BIT = 0,
+    GLSLANG_MSG_RELAXED_ERRORS_BIT = (1 << 0),
+    GLSLANG_MSG_SUPPRESS_WARNINGS_BIT = (1 << 1),
+    GLSLANG_MSG_AST_BIT = (1 << 2),
+    GLSLANG_MSG_SPV_RULES_BIT = (1 << 3),
+    GLSLANG_MSG_VULKAN_RULES_BIT = (1 << 4),
+    GLSLANG_MSG_ONLY_PREPROCESSOR_BIT = (1 << 5),
+    GLSLANG_MSG_READ_HLSL_BIT = (1 << 6),
+    GLSLANG_MSG_CASCADING_ERRORS_BIT = (1 << 7),
+    GLSLANG_MSG_KEEP_UNCALLED_BIT = (1 << 8),
+    GLSLANG_MSG_HLSL_OFFSETS_BIT = (1 << 9),
+    GLSLANG_MSG_DEBUG_INFO_BIT = (1 << 10),
+    GLSLANG_MSG_HLSL_ENABLE_16BIT_TYPES_BIT = (1 << 11),
+    GLSLANG_MSG_HLSL_LEGALIZATION_BIT = (1 << 12),
+    GLSLANG_MSG_HLSL_DX9_COMPATIBLE_BIT = (1 << 13),
+    GLSLANG_MSG_BUILTIN_SYMBOL_TABLE_BIT = (1 << 14),
+    LAST_ELEMENT_MARKER(GLSLANG_MSG_COUNT),
+} glslang_messages_t;
+
+/* EShReflectionOptions counterpart */
+typedef enum {
+    GLSLANG_REFLECTION_DEFAULT_BIT = 0,
+    GLSLANG_REFLECTION_STRICT_ARRAY_SUFFIX_BIT = (1 << 0),
+    GLSLANG_REFLECTION_BASIC_ARRAY_SUFFIX_BIT = (1 << 1),
+    GLSLANG_REFLECTION_INTERMEDIATE_IOO_BIT = (1 << 2),
+    GLSLANG_REFLECTION_SEPARATE_BUFFERS_BIT = (1 << 3),
+    GLSLANG_REFLECTION_ALL_BLOCK_VARIABLES_BIT = (1 << 4),
+    GLSLANG_REFLECTION_UNWRAP_IO_BLOCKS_BIT = (1 << 5),
+    LAST_ELEMENT_MARKER(GLSLANG_REFLECTION_COUNT),
+} glslang_reflection_options_t;
+
+/* EProfile counterpart (from Versions.h) */
+typedef enum {
+    GLSLANG_BAD_PROFILE = 0,
+    GLSLANG_NO_PROFILE = (1 << 0),
+    GLSLANG_CORE_PROFILE = (1 << 1),
+    GLSLANG_COMPATIBILITY_PROFILE = (1 << 2),
+    GLSLANG_ES_PROFILE = (1 << 3),
+    LAST_ELEMENT_MARKER(GLSLANG_PROFILE_COUNT),
+} glslang_profile_t;
+
+#undef LAST_ELEMENT_MARKER
+
+#endif
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index 4b6bcb7..bf12fcf 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -2,6 +2,7 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2016 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -85,6 +86,8 @@
     EOpPreIncrement,
     EOpPreDecrement,
 
+    EOpCopyObject,
+
     // (u)int* -> bool
     EOpConvInt8ToBool,
     EOpConvUint8ToBool,
@@ -273,6 +276,10 @@
     EOpConvUint64ToPtr,
     EOpConvPtrToUint64,
 
+    // uvec2 <-> pointer
+    EOpConvUvec2ToPtr,
+    EOpConvPtrToUvec2,
+
     //
     // binary operations
     //
@@ -420,11 +427,9 @@
     EOpReflect,
     EOpRefract,
 
-#ifdef AMD_EXTENSIONS
     EOpMin3,
     EOpMax3,
     EOpMid3,
-#endif
 
     EOpDPdx,            // Fragment only
     EOpDPdy,            // Fragment only
@@ -439,10 +444,7 @@
     EOpInterpolateAtCentroid, // Fragment only
     EOpInterpolateAtSample,   // Fragment only
     EOpInterpolateAtOffset,   // Fragment only
-
-#ifdef AMD_EXTENSIONS
     EOpInterpolateAtVertex,
-#endif
 
     EOpMatrixTimesMatrix,
     EOpOuterProduct,
@@ -532,7 +534,6 @@
     EOpSubgroupQuadSwapVertical,
     EOpSubgroupQuadSwapDiagonal,
 
-#ifdef NV_EXTENSIONS
     EOpSubgroupPartition,
     EOpSubgroupPartitionedAdd,
     EOpSubgroupPartitionedMul,
@@ -555,11 +556,9 @@
     EOpSubgroupPartitionedExclusiveAnd,
     EOpSubgroupPartitionedExclusiveOr,
     EOpSubgroupPartitionedExclusiveXor,
-#endif
 
     EOpSubgroupGuardStop,
 
-#ifdef AMD_EXTENSIONS
     EOpMinInvocations,
     EOpMaxInvocations,
     EOpAddInvocations,
@@ -586,7 +585,6 @@
     EOpCubeFaceIndex,
     EOpCubeFaceCoord,
     EOpTime,
-#endif
 
     EOpAtomicAdd,
     EOpAtomicMin,
@@ -615,6 +613,17 @@
     EOpAny,
     EOpAll,
 
+    EOpCooperativeMatrixLoad,
+    EOpCooperativeMatrixStore,
+    EOpCooperativeMatrixMulAdd,
+
+    EOpBeginInvocationInterlock, // Fragment only
+    EOpEndInvocationInterlock, // Fragment only
+
+    EOpIsHelperInvocation,
+
+    EOpDebugPrintf,
+
     //
     // Branch
     //
@@ -625,6 +634,7 @@
     EOpContinue,
     EOpCase,
     EOpDefault,
+    EOpDemote,          // Fragment only
 
     //
     // Constructors
@@ -642,9 +652,21 @@
     EOpConstructBool,
     EOpConstructFloat,
     EOpConstructDouble,
+    // Keep vector and matrix constructors in a consistent relative order for
+    // TParseContext::constructBuiltIn, which converts between 8/16/32 bit
+    // vector constructors
     EOpConstructVec2,
     EOpConstructVec3,
     EOpConstructVec4,
+    EOpConstructMat2x2,
+    EOpConstructMat2x3,
+    EOpConstructMat2x4,
+    EOpConstructMat3x2,
+    EOpConstructMat3x3,
+    EOpConstructMat3x4,
+    EOpConstructMat4x2,
+    EOpConstructMat4x3,
+    EOpConstructMat4x4,
     EOpConstructDVec2,
     EOpConstructDVec3,
     EOpConstructDVec4,
@@ -675,15 +697,6 @@
     EOpConstructU64Vec2,
     EOpConstructU64Vec3,
     EOpConstructU64Vec4,
-    EOpConstructMat2x2,
-    EOpConstructMat2x3,
-    EOpConstructMat2x4,
-    EOpConstructMat3x2,
-    EOpConstructMat3x3,
-    EOpConstructMat3x4,
-    EOpConstructMat4x2,
-    EOpConstructMat4x3,
-    EOpConstructMat4x4,
     EOpConstructDMat2x2,
     EOpConstructDMat2x3,
     EOpConstructDMat2x4,
@@ -737,6 +750,7 @@
     EOpConstructTextureSampler,
     EOpConstructNonuniform,     // expected to be transformed away, not present in final AST
     EOpConstructReference,
+    EOpConstructCooperativeMatrix,
     EOpConstructGuardEnd,
 
     //
@@ -779,10 +793,8 @@
     EOpImageQuerySamples,
     EOpImageLoad,
     EOpImageStore,
-#ifdef AMD_EXTENSIONS
     EOpImageLoadLod,
     EOpImageStoreLod,
-#endif
     EOpImageAtomicAdd,
     EOpImageAtomicMin,
     EOpImageAtomicMax,
@@ -797,9 +809,7 @@
     EOpSubpassLoad,
     EOpSubpassLoadMS,
     EOpSparseImageLoad,
-#ifdef AMD_EXTENSIONS
     EOpSparseImageLoadLod,
-#endif
 
     EOpImageGuardEnd,
 
@@ -837,13 +847,11 @@
     EOpTextureOffsetClamp,
     EOpTextureGradClamp,
     EOpTextureGradOffsetClamp,
-#ifdef AMD_EXTENSIONS
     EOpTextureGatherLod,
     EOpTextureGatherLodOffset,
     EOpTextureGatherLodOffsets,
     EOpFragmentMaskFetch,
     EOpFragmentFetch,
-#endif
 
     EOpSparseTextureGuardBegin,
 
@@ -863,15 +871,12 @@
     EOpSparseTextureOffsetClamp,
     EOpSparseTextureGradClamp,
     EOpSparseTextureGradOffsetClamp,
-#ifdef AMD_EXTENSIONS
     EOpSparseTextureGatherLod,
     EOpSparseTextureGatherLodOffset,
     EOpSparseTextureGatherLodOffsets,
-#endif
 
     EOpSparseTextureGuardEnd,
 
-#ifdef NV_EXTENSIONS
     EOpImageFootprintGuardBegin,
     EOpImageSampleFootprintNV,
     EOpImageSampleFootprintClampNV,
@@ -879,7 +884,6 @@
     EOpImageSampleFootprintGradNV,
     EOpImageSampleFootprintGradClampNV,
     EOpImageFootprintGuardEnd,
-#endif
     EOpSamplingGuardEnd,
     EOpTextureGuardEnd,
 
@@ -898,14 +902,50 @@
     EOpFindLSB,
     EOpFindMSB,
 
-#ifdef NV_EXTENSIONS
-    EOpTraceNV,
-    EOpReportIntersectionNV,
-    EOpIgnoreIntersectionNV,
-    EOpTerminateRayNV,
-    EOpExecuteCallableNV,
+    EOpCountLeadingZeros,
+    EOpCountTrailingZeros,
+    EOpAbsDifference,
+    EOpAddSaturate,
+    EOpSubSaturate,
+    EOpAverage,
+    EOpAverageRounded,
+    EOpMul32x16,
+
+    EOpTrace,
+    EOpReportIntersection,
+    EOpIgnoreIntersection,
+    EOpTerminateRay,
+    EOpExecuteCallable,
     EOpWritePackedPrimitiveIndices4x8NV,
-#endif
+
+    //
+    // GL_EXT_ray_query operations
+    //
+
+    EOpRayQueryInitialize,
+    EOpRayQueryTerminate,
+    EOpRayQueryGenerateIntersection,
+    EOpRayQueryConfirmIntersection,
+    EOpRayQueryProceed,
+    EOpRayQueryGetIntersectionType,
+    EOpRayQueryGetRayTMin,
+    EOpRayQueryGetRayFlags,
+    EOpRayQueryGetIntersectionT,
+    EOpRayQueryGetIntersectionInstanceCustomIndex,
+    EOpRayQueryGetIntersectionInstanceId,
+    EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset,
+    EOpRayQueryGetIntersectionGeometryIndex,
+    EOpRayQueryGetIntersectionPrimitiveIndex,
+    EOpRayQueryGetIntersectionBarycentrics,
+    EOpRayQueryGetIntersectionFrontFace,
+    EOpRayQueryGetIntersectionCandidateAABBOpaque,
+    EOpRayQueryGetIntersectionObjectRayDirection,
+    EOpRayQueryGetIntersectionObjectRayOrigin,
+    EOpRayQueryGetWorldRayDirection,
+    EOpRayQueryGetWorldRayOrigin,
+    EOpRayQueryGetIntersectionObjectToWorld,
+    EOpRayQueryGetIntersectionWorldToObject,
+
     //
     // HLSL operations
     //
@@ -989,6 +1029,10 @@
     EOpWaveGetLaneIndex,                 // Will decompose to gl_SubgroupInvocationID.
     EOpWaveActiveCountBits,              // Will decompose to subgroupBallotBitCount(subgroupBallot()).
     EOpWavePrefixCountBits,              // Will decompose to subgroupBallotInclusiveBitCount(subgroupBallot()).
+
+    // Shader Clock Ops
+    EOpReadClockSubgroupKHR,
+    EOpReadClockDeviceKHR,
 };
 
 class TIntermTraverser;
@@ -1090,6 +1134,8 @@
     virtual bool isStruct() const { return type.isStruct(); }
     virtual bool isFloatingDomain() const { return type.isFloatingDomain(); }
     virtual bool isIntegerDomain() const { return type.isIntegerDomain(); }
+    bool isAtomic() const { return type.isAtomic(); }
+    bool isReference() const { return type.isReference(); }
     TString getCompleteString() const { return type.getCompleteString(); }
 
 protected:
@@ -1109,7 +1155,12 @@
         first(testFirst),
         unroll(false),
         dontUnroll(false),
-        dependency(0)
+        dependency(0),
+        minIterations(0),
+        maxIterations(iterationsInfinite),
+        iterationMultiple(1),
+        peelCount(0),
+        partialCount(0)
     { }
 
     virtual       TIntermLoop* getAsLoopNode() { return this; }
@@ -1121,14 +1172,36 @@
     bool testFirst() const { return first; }
 
     void setUnroll()     { unroll = true; }
-    void setDontUnroll() { dontUnroll = true; }
+    void setDontUnroll() {
+        dontUnroll = true;
+        peelCount = 0;
+        partialCount = 0;
+    }
     bool getUnroll()     const { return unroll; }
     bool getDontUnroll() const { return dontUnroll; }
 
     static const unsigned int dependencyInfinite = 0xFFFFFFFF;
+    static const unsigned int iterationsInfinite = 0xFFFFFFFF;
     void setLoopDependency(int d) { dependency = d; }
     int getLoopDependency() const { return dependency; }
 
+    void setMinIterations(unsigned int v) { minIterations = v; }
+    unsigned int getMinIterations() const { return minIterations; }
+    void setMaxIterations(unsigned int v) { maxIterations = v; }
+    unsigned int getMaxIterations() const { return maxIterations; }
+    void setIterationMultiple(unsigned int v) { iterationMultiple = v; }
+    unsigned int getIterationMultiple() const { return iterationMultiple; }
+    void setPeelCount(unsigned int v) {
+        peelCount = v;
+        dontUnroll = false;
+    }
+    unsigned int getPeelCount() const { return peelCount; }
+    void setPartialCount(unsigned int v) {
+        partialCount = v;
+        dontUnroll = false;
+    }
+    unsigned int getPartialCount() const { return partialCount; }
+
 protected:
     TIntermNode* body;       // code to loop over
     TIntermTyped* test;      // exit condition associated with loop, could be 0 for 'for' loops
@@ -1137,6 +1210,11 @@
     bool unroll;             // true if unroll requested
     bool dontUnroll;         // true if request to not unroll
     unsigned int dependency; // loop dependency hint; 0 means not set or unknown
+    unsigned int minIterations;      // as per the SPIR-V specification
+    unsigned int maxIterations;      // as per the SPIR-V specification
+    unsigned int iterationMultiple;  // as per the SPIR-V specification
+    unsigned int peelCount;          // as per the SPIR-V specification
+    unsigned int partialCount;       // as per the SPIR-V specification
 };
 
 //
@@ -1152,6 +1230,7 @@
     virtual void traverse(TIntermTraverser*);
     TOperator getFlowOp() const { return flowOp; }
     TIntermTyped* getExpression() const { return expression; }
+    void setExpression(TIntermTyped* pExpression) { expression = pExpression; }
 protected:
     TOperator flowOp;
     TIntermTyped* expression;
@@ -1185,7 +1264,7 @@
     // it is essential to use "symbol = sym" to assign to symbol
     TIntermSymbol(int i, const TString& n, const TType& t)
         : TIntermTyped(t), id(i),
-#ifdef ENABLE_HLSL
+#ifndef GLSLANG_WEB
         flattenSubset(-1),
 #endif
         constSubtree(nullptr)
@@ -1200,7 +1279,7 @@
     const TConstUnionArray& getConstArray() const { return constArray; }
     void setConstSubtree(TIntermTyped* subtree) { constSubtree = subtree; }
     TIntermTyped* getConstSubtree() const { return constSubtree; }
-#ifdef ENABLE_HLSL
+#ifndef GLSLANG_WEB
     void setFlattenSubset(int subset) { flattenSubset = subset; }
     int getFlattenSubset() const { return flattenSubset; } // -1 means full object
 #endif
@@ -1211,7 +1290,7 @@
 
 protected:
     int id;                      // the unique id of the symbol this node represents
-#ifdef ENABLE_HLSL
+#ifndef GLSLANG_WEB
     int flattenSubset;           // how deeply the flattened object rooted at id has been dereferenced
 #endif
     TString name;                // the name of the symbol this node represents
@@ -1251,9 +1330,7 @@
     bool grad;
     bool subpass;
     bool lodClamp;
-#ifdef AMD_EXTENSIONS
     bool fragMask;
-#endif
 };
 
 //
@@ -1269,12 +1346,19 @@
     bool isConstructor() const;
     bool isTexture()  const { return op > EOpTextureGuardBegin  && op < EOpTextureGuardEnd; }
     bool isSampling() const { return op > EOpSamplingGuardBegin && op < EOpSamplingGuardEnd; }
+#ifdef GLSLANG_WEB
+    bool isImage()          const { return false; }
+    bool isSparseTexture()  const { return false; }
+    bool isImageFootprint() const { return false; }
+    bool isSparseImage()    const { return false; }
+    bool isSubgroup()       const { return false; }
+#else
     bool isImage()    const { return op > EOpImageGuardBegin    && op < EOpImageGuardEnd; }
     bool isSparseTexture() const { return op > EOpSparseTextureGuardBegin && op < EOpSparseTextureGuardEnd; }
-#ifdef NV_EXTENSIONS
     bool isImageFootprint() const { return op > EOpImageFootprintGuardBegin && op < EOpImageFootprintGuardEnd; }
-#endif
     bool isSparseImage()   const { return op == EOpSparseImageLoad; }
+    bool isSubgroup() const { return op > EOpSubgroupGuardStart && op < EOpSubgroupGuardStop; }
+#endif
 
     void setOperationPrecision(TPrecisionQualifier p) { operationPrecision = p; }
     TPrecisionQualifier getOperationPrecision() const { return operationPrecision != EpqNone ?
@@ -1304,9 +1388,7 @@
         cracked.grad = false;
         cracked.subpass = false;
         cracked.lodClamp = false;
-#ifdef AMD_EXTENSIONS
         cracked.fragMask = false;
-#endif
 
         switch (op) {
         case EOpImageQuerySize:
@@ -1321,10 +1403,6 @@
         case EOpTexture:
         case EOpSparseTexture:
             break;
-        case EOpTextureClamp:
-        case EOpSparseTextureClamp:
-            cracked.lodClamp = true;
-            break;
         case EOpTextureProj:
             cracked.proj = true;
             break;
@@ -1336,22 +1414,17 @@
         case EOpSparseTextureOffset:
             cracked.offset = true;
             break;
-        case EOpTextureOffsetClamp:
-        case EOpSparseTextureOffsetClamp:
-            cracked.offset = true;
-            cracked.lodClamp = true;
-            break;
         case EOpTextureFetch:
         case EOpSparseTextureFetch:
             cracked.fetch = true;
-            if (sampler.dim == Esd1D || (sampler.dim == Esd2D && ! sampler.ms) || sampler.dim == Esd3D)
+            if (sampler.is1D() || (sampler.dim == Esd2D && ! sampler.isMultiSample()) || sampler.dim == Esd3D)
                 cracked.lod = true;
             break;
         case EOpTextureFetchOffset:
         case EOpSparseTextureFetchOffset:
             cracked.fetch = true;
             cracked.offset = true;
-            if (sampler.dim == Esd1D || (sampler.dim == Esd2D && ! sampler.ms) || sampler.dim == Esd3D)
+            if (sampler.is1D() || (sampler.dim == Esd2D && ! sampler.isMultiSample()) || sampler.dim == Esd3D)
                 cracked.lod = true;
             break;
         case EOpTextureProjOffset:
@@ -1376,11 +1449,6 @@
         case EOpSparseTextureGrad:
             cracked.grad = true;
             break;
-        case EOpTextureGradClamp:
-        case EOpSparseTextureGradClamp:
-            cracked.grad = true;
-            cracked.lodClamp = true;
-            break;
         case EOpTextureGradOffset:
         case EOpSparseTextureGradOffset:
             cracked.grad = true;
@@ -1395,6 +1463,21 @@
             cracked.offset = true;
             cracked.proj = true;
             break;
+#ifndef GLSLANG_WEB
+        case EOpTextureClamp:
+        case EOpSparseTextureClamp:
+            cracked.lodClamp = true;
+            break;
+        case EOpTextureOffsetClamp:
+        case EOpSparseTextureOffsetClamp:
+            cracked.offset = true;
+            cracked.lodClamp = true;
+            break;
+        case EOpTextureGradClamp:
+        case EOpSparseTextureGradClamp:
+            cracked.grad = true;
+            cracked.lodClamp = true;
+            break;
         case EOpTextureGradOffsetClamp:
         case EOpSparseTextureGradOffsetClamp:
             cracked.grad = true;
@@ -1415,7 +1498,6 @@
             cracked.gather = true;
             cracked.offsets = true;
             break;
-#ifdef AMD_EXTENSIONS
         case EOpTextureGatherLod:
         case EOpSparseTextureGatherLod:
             cracked.gather = true;
@@ -1446,8 +1528,6 @@
             cracked.subpass = sampler.dim == EsdSubpass;
             cracked.fragMask = true;
             break;
-#endif
-#ifdef NV_EXTENSIONS
         case EOpImageSampleFootprintNV:
             break;
         case EOpImageSampleFootprintClampNV:
@@ -1463,11 +1543,11 @@
             cracked.lodClamp = true;
             cracked.grad = true;
             break;
-#endif
         case EOpSubpassLoad:
         case EOpSubpassLoadMS:
             cracked.subpass = true;
             break;
+#endif
         default:
             break;
         }
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index 702c89e..d75bf32 100644
--- a/glslang/Include/revision.h
+++ b/glslang/Include/revision.h
@@ -1,3 +1,3 @@
 // This header is generated by the make-revision script.
 
-#define GLSLANG_PATCH_LEVEL 3057
+#define GLSLANG_PATCH_LEVEL 3727
diff --git a/glslang/Include/revision.template b/glslang/Include/revision.template
index 6c13630..4a16bee 100644
--- a/glslang/Include/revision.template
+++ b/glslang/Include/revision.template
@@ -1,13 +1,13 @@
-// The file revision.h should be updated to the latest version, somehow, on

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

-//

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

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

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

-//

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

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

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

-

-#define GLSLANG_REVISION "$WCREV$"

-#define GLSLANG_DATE     "$WCDATE$"

+// The file revision.h should be updated to the latest version, somehow, on
+// check-in, if glslang has changed.
+//
+// revision.template is the source for revision.h when using SubWCRev as the
+// method of updating revision.h.  You don't have to do it this way, the
+// requirement is only that revision.h gets updated.
+//
+// revision.h is under source control so that not all consumers of glslang
+// source have to figure out how to create revision.h just to get a build
+// going.  However, if it is not updated, it can be a version behind.
+
+#define GLSLANG_REVISION "$WCREV$"
+#define GLSLANG_DATE     "$WCDATE$"
diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp
old mode 100755
new mode 100644
index a6adab1..e21cf42
--- a/glslang/MachineIndependent/Constant.cpp
+++ b/glslang/MachineIndependent/Constant.cpp
@@ -2,7 +2,7 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
-// Copyright (C) 2018 Google, Inc.
+// Copyright (C) 2018-2020 Google, Inc.
 //
 // All rights reserved.
 //
@@ -189,6 +189,24 @@
                 else
                     newConstArray[i].setDConst((double)NAN);
                 break;
+
+            case EbtInt:
+                if (rightUnionArray[i] == 0)
+                    newConstArray[i].setIConst(0x7FFFFFFF);
+                else if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == (int)-0x80000000ll)
+                    newConstArray[i].setIConst((int)-0x80000000ll);
+                else
+                    newConstArray[i].setIConst(leftUnionArray[i].getIConst() / rightUnionArray[i].getIConst());
+                break;
+
+            case EbtUint:
+                if (rightUnionArray[i] == 0u)
+                    newConstArray[i].setUConst(0xFFFFFFFFu);
+                else
+                    newConstArray[i].setUConst(leftUnionArray[i].getUConst() / rightUnionArray[i].getUConst());
+                break;
+
+#ifndef GLSLANG_WEB
             case EbtInt8:
                 if (rightUnionArray[i] == (signed char)0)
                     newConstArray[i].setI8Const((signed char)0x7F);
@@ -221,22 +239,6 @@
                     newConstArray[i].setU16Const(leftUnionArray[i].getU16Const() / rightUnionArray[i].getU16Const());
                 break;
 
-            case EbtInt:
-                if (rightUnionArray[i] == 0)
-                    newConstArray[i].setIConst(0x7FFFFFFF);
-                else if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == (int)-0x80000000ll)
-                    newConstArray[i].setIConst((int)-0x80000000ll);
-                else
-                    newConstArray[i].setIConst(leftUnionArray[i].getIConst() / rightUnionArray[i].getIConst());
-                break;
-
-            case EbtUint:
-                if (rightUnionArray[i] == 0u)
-                    newConstArray[i].setUConst(0xFFFFFFFFu);
-                else
-                    newConstArray[i].setUConst(leftUnionArray[i].getUConst() / rightUnionArray[i].getUConst());
-                break;
-
             case EbtInt64:
                 if (rightUnionArray[i] == 0ll)
                     newConstArray[i].setI64Const(0x7FFFFFFFFFFFFFFFll);
@@ -254,6 +256,7 @@
                 break;
             default:
                 return 0;
+#endif
             }
         }
         break;
@@ -292,13 +295,12 @@
                         newConstArray[i].setIConst(0);
                         break;
                     } else goto modulo_default;
-
+#ifndef GLSLANG_WEB
                 case EbtInt64:
                     if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == LLONG_MIN) {
                         newConstArray[i].setI64Const(0);
                         break;
                     } else goto modulo_default;
-#ifdef AMD_EXTENSIONS
                 case EbtInt16:
                     if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == SHRT_MIN) {
                         newConstArray[i].setIConst(0);
@@ -415,8 +417,8 @@
 
     case EOpEmitStreamVertex:
     case EOpEndStreamPrimitive:
-        // These don't actually fold
-        return 0;
+        // These don't fold
+        return nullptr;
 
     case EOpPackSnorm2x16:
     case EOpPackUnorm2x16:
@@ -491,8 +493,6 @@
         break;
     }
 
-    // TODO: 3.0 Functionality: unary constant folding: the rest of the ops have to be fleshed out
-
     case EOpPackSnorm2x16:
     case EOpPackUnorm2x16:
     case EOpPackHalf2x16:
@@ -510,7 +510,7 @@
     case EOpDeterminant:
     case EOpMatrixInverse:
     case EOpTranspose:
-        return 0;
+        return nullptr;
 
     default:
         assert(componentWise);
@@ -529,16 +529,18 @@
             case EbtDouble:
             case EbtFloat16:
             case EbtFloat: newConstArray[i].setDConst(-unionArray[i].getDConst()); break;
+            case EbtInt:   newConstArray[i].setIConst(-unionArray[i].getIConst()); break;
+            case EbtUint:  newConstArray[i].setUConst(static_cast<unsigned int>(-static_cast<int>(unionArray[i].getUConst())));  break;
+#ifndef GLSLANG_WEB
             case EbtInt8:  newConstArray[i].setI8Const(-unionArray[i].getI8Const()); break;
             case EbtUint8: newConstArray[i].setU8Const(static_cast<unsigned int>(-static_cast<signed int>(unionArray[i].getU8Const())));  break;
             case EbtInt16: newConstArray[i].setI16Const(-unionArray[i].getI16Const()); break;
             case EbtUint16:newConstArray[i].setU16Const(static_cast<unsigned int>(-static_cast<signed int>(unionArray[i].getU16Const())));  break;
-            case EbtInt:   newConstArray[i].setIConst(-unionArray[i].getIConst()); break;
-            case EbtUint:  newConstArray[i].setUConst(static_cast<unsigned int>(-static_cast<int>(unionArray[i].getUConst())));  break;
             case EbtInt64: newConstArray[i].setI64Const(-unionArray[i].getI64Const()); break;
             case EbtUint64: newConstArray[i].setU64Const(static_cast<unsigned long long>(-static_cast<long long>(unionArray[i].getU64Const())));  break;
+#endif
             default:
-                return 0;
+                return nullptr;
             }
             break;
         case EOpLogicalNot:
@@ -546,7 +548,7 @@
             switch (getType().getBasicType()) {
             case EbtBool:  newConstArray[i].setBConst(!unionArray[i].getBConst()); break;
             default:
-                return 0;
+                return nullptr;
             }
             break;
         case EOpBitwiseNot:
@@ -671,6 +673,48 @@
             break;
         }
 
+        case EOpConvIntToBool:
+            newConstArray[i].setBConst(unionArray[i].getIConst() != 0); break;
+        case EOpConvUintToBool:
+            newConstArray[i].setBConst(unionArray[i].getUConst() != 0); break;
+        case EOpConvBoolToInt:
+            newConstArray[i].setIConst(unionArray[i].getBConst()); break;
+        case EOpConvBoolToUint:
+            newConstArray[i].setUConst(unionArray[i].getBConst()); break;
+        case EOpConvIntToUint:
+            newConstArray[i].setUConst(unionArray[i].getIConst()); break;
+        case EOpConvUintToInt:
+            newConstArray[i].setIConst(unionArray[i].getUConst()); break;
+
+        case EOpConvFloatToBool:
+        case EOpConvDoubleToBool:
+            newConstArray[i].setBConst(unionArray[i].getDConst() != 0); break;
+
+        case EOpConvBoolToFloat:
+        case EOpConvBoolToDouble:
+            newConstArray[i].setDConst(unionArray[i].getBConst()); break;
+
+        case EOpConvIntToFloat:
+        case EOpConvIntToDouble:
+            newConstArray[i].setDConst(unionArray[i].getIConst()); break;
+
+        case EOpConvUintToFloat:
+        case EOpConvUintToDouble:
+            newConstArray[i].setDConst(unionArray[i].getUConst()); break;
+
+        case EOpConvDoubleToFloat:
+        case EOpConvFloatToDouble:
+            newConstArray[i].setDConst(unionArray[i].getDConst()); break;
+
+        case EOpConvFloatToUint:
+        case EOpConvDoubleToUint:
+            newConstArray[i].setUConst(static_cast<unsigned int>(unionArray[i].getDConst())); break;
+
+        case EOpConvFloatToInt:
+        case EOpConvDoubleToInt:
+            newConstArray[i].setIConst(static_cast<int>(unionArray[i].getDConst())); break;
+
+#ifndef GLSLANG_WEB
         case EOpConvInt8ToBool:
             newConstArray[i].setBConst(unionArray[i].getI8Const() != 0); break;
         case EOpConvUint8ToBool:
@@ -679,20 +723,12 @@
             newConstArray[i].setBConst(unionArray[i].getI16Const() != 0); break;
         case EOpConvUint16ToBool:
             newConstArray[i].setBConst(unionArray[i].getU16Const() != 0); break;
-        case EOpConvIntToBool:
-            newConstArray[i].setBConst(unionArray[i].getIConst() != 0); break;
-        case EOpConvUintToBool:
-            newConstArray[i].setBConst(unionArray[i].getUConst() != 0); break;
         case EOpConvInt64ToBool:
             newConstArray[i].setBConst(unionArray[i].getI64Const() != 0); break;
         case EOpConvUint64ToBool:
             newConstArray[i].setBConst(unionArray[i].getI64Const() != 0); break;
         case EOpConvFloat16ToBool:
             newConstArray[i].setBConst(unionArray[i].getDConst() != 0); break;
-        case EOpConvFloatToBool:
-            newConstArray[i].setBConst(unionArray[i].getDConst() != 0); break;
-        case EOpConvDoubleToBool:
-            newConstArray[i].setBConst(unionArray[i].getDConst() != 0); break;
 
         case EOpConvBoolToInt8:
             newConstArray[i].setI8Const(unionArray[i].getBConst()); break;
@@ -702,20 +738,12 @@
             newConstArray[i].setI16Const(unionArray[i].getBConst()); break;
         case EOpConvBoolToUint16:
             newConstArray[i].setU16Const(unionArray[i].getBConst()); break;
-        case EOpConvBoolToInt:
-            newConstArray[i].setIConst(unionArray[i].getBConst()); break;
-        case EOpConvBoolToUint:
-            newConstArray[i].setUConst(unionArray[i].getBConst()); break;
         case EOpConvBoolToInt64:
             newConstArray[i].setI64Const(unionArray[i].getBConst()); break;
         case EOpConvBoolToUint64:
             newConstArray[i].setU64Const(unionArray[i].getBConst()); break;
         case EOpConvBoolToFloat16:
             newConstArray[i].setDConst(unionArray[i].getBConst()); break;
-        case EOpConvBoolToFloat:
-            newConstArray[i].setDConst(unionArray[i].getBConst()); break;
-        case EOpConvBoolToDouble:
-            newConstArray[i].setDConst(unionArray[i].getBConst()); break;
 
         case EOpConvInt8ToInt16:
             newConstArray[i].setI16Const(unionArray[i].getI8Const()); break;
@@ -810,8 +838,6 @@
             newConstArray[i].setU8Const((unsigned char)unionArray[i].getIConst()); break;
         case EOpConvIntToUint16:
             newConstArray[i].setU16Const((unsigned char)unionArray[i].getIConst()); break;
-        case EOpConvIntToUint:
-            newConstArray[i].setUConst(unionArray[i].getIConst()); break;
         case EOpConvIntToUint64:
             newConstArray[i].setU64Const(unionArray[i].getIConst()); break;
 
@@ -819,8 +845,6 @@
             newConstArray[i].setI8Const((signed char)unionArray[i].getUConst()); break;
         case EOpConvUintToInt16:
             newConstArray[i].setI16Const((signed short)unionArray[i].getUConst()); break;
-        case EOpConvUintToInt:
-            newConstArray[i].setIConst(unionArray[i].getUConst()); break;
         case EOpConvUintToInt64:
             newConstArray[i].setI64Const(unionArray[i].getUConst()); break;
         case EOpConvUintToUint8:
@@ -831,16 +855,8 @@
             newConstArray[i].setU64Const(unionArray[i].getUConst()); break;
         case EOpConvIntToFloat16:
             newConstArray[i].setDConst(unionArray[i].getIConst()); break;
-        case EOpConvIntToFloat:
-            newConstArray[i].setDConst(unionArray[i].getIConst()); break;
-        case EOpConvIntToDouble:
-            newConstArray[i].setDConst(unionArray[i].getIConst()); break;
         case EOpConvUintToFloat16:
             newConstArray[i].setDConst(unionArray[i].getUConst()); break;
-        case EOpConvUintToFloat:
-            newConstArray[i].setDConst(unionArray[i].getUConst()); break;
-        case EOpConvUintToDouble:
-            newConstArray[i].setDConst(unionArray[i].getUConst()); break;
         case EOpConvInt64ToInt8:
             newConstArray[i].setI8Const(static_cast<signed char>(unionArray[i].getI64Const())); break;
         case EOpConvInt64ToInt16:
@@ -905,44 +921,35 @@
             newConstArray[i].setI8Const(static_cast<signed char>(unionArray[i].getDConst())); break;
         case EOpConvFloatToInt16:
             newConstArray[i].setI16Const(static_cast<signed short>(unionArray[i].getDConst())); break;
-        case EOpConvFloatToInt:
-            newConstArray[i].setIConst(static_cast<int>(unionArray[i].getDConst())); break;
         case EOpConvFloatToInt64:
             newConstArray[i].setI64Const(static_cast<long long>(unionArray[i].getDConst())); break;
         case EOpConvFloatToUint8:
             newConstArray[i].setU8Const(static_cast<unsigned char>(unionArray[i].getDConst())); break;
         case EOpConvFloatToUint16:
             newConstArray[i].setU16Const(static_cast<unsigned short>(unionArray[i].getDConst())); break;
-        case EOpConvFloatToUint:
-            newConstArray[i].setUConst(static_cast<unsigned int>(unionArray[i].getDConst())); break;
         case EOpConvFloatToUint64:
             newConstArray[i].setU64Const(static_cast<unsigned long long>(unionArray[i].getDConst())); break;
         case EOpConvFloatToFloat16:
             newConstArray[i].setDConst(unionArray[i].getDConst()); break;
-        case EOpConvFloatToDouble:
-            newConstArray[i].setDConst(unionArray[i].getDConst()); break;
         case EOpConvDoubleToInt8:
             newConstArray[i].setI8Const(static_cast<signed char>(unionArray[i].getDConst())); break;
         case EOpConvDoubleToInt16:
             newConstArray[i].setI16Const(static_cast<signed short>(unionArray[i].getDConst())); break;
-        case EOpConvDoubleToInt:
-            newConstArray[i].setIConst(static_cast<int>(unionArray[i].getDConst())); break;
         case EOpConvDoubleToInt64:
             newConstArray[i].setI64Const(static_cast<long long>(unionArray[i].getDConst())); break;
         case EOpConvDoubleToUint8:
             newConstArray[i].setU8Const(static_cast<unsigned char>(unionArray[i].getDConst())); break;
         case EOpConvDoubleToUint16:
             newConstArray[i].setU16Const(static_cast<unsigned short>(unionArray[i].getDConst())); break;
-        case EOpConvDoubleToUint:
-            newConstArray[i].setUConst(static_cast<unsigned int>(unionArray[i].getDConst())); break;
         case EOpConvDoubleToUint64:
             newConstArray[i].setU64Const(static_cast<unsigned long long>(unionArray[i].getDConst())); break;
         case EOpConvDoubleToFloat16:
             newConstArray[i].setDConst(unionArray[i].getDConst()); break;
-        case EOpConvDoubleToFloat:
-            newConstArray[i].setDConst(unionArray[i].getDConst()); break;
-
-
+        case EOpConvPtrToUint64:
+        case EOpConvUint64ToPtr:
+        case EOpConstructReference:
+            newConstArray[i].setU64Const(unionArray[i].getU64Const()); break;
+#endif
 
         // TODO: 3.0 Functionality: unary constant folding: the rest of the ops have to be fleshed out
 
@@ -966,7 +973,7 @@
         case EOpInt16BitsToFloat16:
         case EOpUint16BitsToFloat16:
         default:
-            return 0;
+            return nullptr;
         }
     }
 
@@ -1005,6 +1012,7 @@
     case EOpMin:
     case EOpMax:
     case EOpMix:
+    case EOpMod:
     case EOpClamp:
     case EOpLessThan:
     case EOpGreaterThan:
@@ -1067,6 +1075,14 @@
             case EOpPow:
                 newConstArray[comp].setDConst(pow(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
                 break;
+            case EOpMod:
+            {
+                double arg0 = childConstUnions[0][arg0comp].getDConst();
+                double arg1 = childConstUnions[1][arg1comp].getDConst();
+                double result = arg0 - arg1 * floor(arg0 / arg1);
+                newConstArray[comp].setDConst(result);
+                break;
+            }
             case EOpMin:
                 switch(children[0]->getAsTyped()->getBasicType()) {
                 case EbtFloat16:
@@ -1074,6 +1090,13 @@
                 case EbtDouble:
                     newConstArray[comp].setDConst(std::min(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
                     break;
+                case EbtInt:
+                    newConstArray[comp].setIConst(std::min(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
+                    break;
+                case EbtUint:
+                    newConstArray[comp].setUConst(std::min(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
+                    break;
+#ifndef GLSLANG_WEB
                 case EbtInt8:
                     newConstArray[comp].setI8Const(std::min(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()));
                     break;
@@ -1086,18 +1109,13 @@
                 case EbtUint16:
                     newConstArray[comp].setU16Const(std::min(childConstUnions[0][arg0comp].getU16Const(), childConstUnions[1][arg1comp].getU16Const()));
                     break;
-                case EbtInt:
-                    newConstArray[comp].setIConst(std::min(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
-                    break;
-                case EbtUint:
-                    newConstArray[comp].setUConst(std::min(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
-                    break;
                 case EbtInt64:
                     newConstArray[comp].setI64Const(std::min(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
                     break;
                 case EbtUint64:
                     newConstArray[comp].setU64Const(std::min(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
                     break;
+#endif
                 default: assert(false && "Default missing");
                 }
                 break;
@@ -1108,6 +1126,13 @@
                 case EbtDouble:
                     newConstArray[comp].setDConst(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
                     break;
+                case EbtInt:
+                    newConstArray[comp].setIConst(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
+                    break;
+                case EbtUint:
+                    newConstArray[comp].setUConst(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
+                    break;
+#ifndef GLSLANG_WEB
                 case EbtInt8:
                     newConstArray[comp].setI8Const(std::max(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()));
                     break;
@@ -1120,18 +1145,13 @@
                 case EbtUint16:
                     newConstArray[comp].setU16Const(std::max(childConstUnions[0][arg0comp].getU16Const(), childConstUnions[1][arg1comp].getU16Const()));
                     break;
-                case EbtInt:
-                    newConstArray[comp].setIConst(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
-                    break;
-                case EbtUint:
-                    newConstArray[comp].setUConst(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
-                    break;
                 case EbtInt64:
                     newConstArray[comp].setI64Const(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
                     break;
                 case EbtUint64:
                     newConstArray[comp].setU64Const(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
                     break;
+#endif
                 default: assert(false && "Default missing");
                 }
                 break;
@@ -1143,6 +1163,11 @@
                     newConstArray[comp].setDConst(std::min(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()),
                                                                                                                childConstUnions[2][arg2comp].getDConst()));
                     break;
+                case EbtUint:
+                    newConstArray[comp].setUConst(std::min(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()),
+                                                                                                                   childConstUnions[2][arg2comp].getUConst()));
+                    break;
+#ifndef GLSLANG_WEB
                 case EbtInt8:
                     newConstArray[comp].setI8Const(std::min(std::max(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()),
                                                                                                                    childConstUnions[2][arg2comp].getI8Const()));
@@ -1163,10 +1188,6 @@
                     newConstArray[comp].setIConst(std::min(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()),
                                                                                                                    childConstUnions[2][arg2comp].getIConst()));
                     break;
-                case EbtUint:
-                    newConstArray[comp].setUConst(std::min(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()),
-                                                                                                                   childConstUnions[2][arg2comp].getUConst()));
-                    break;
                 case EbtInt64:
                     newConstArray[comp].setI64Const(std::min(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()),
                                                                                                                        childConstUnions[2][arg2comp].getI64Const()));
@@ -1175,6 +1196,7 @@
                     newConstArray[comp].setU64Const(std::min(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()),
                                                                                                                        childConstUnions[2][arg2comp].getU64Const()));
                     break;
+#endif
                 default: assert(false && "Default missing");
                 }
                 break;
@@ -1197,12 +1219,17 @@
                 newConstArray[comp].setBConst(childConstUnions[0][arg0comp] != childConstUnions[1][arg1comp]);
                 break;
             case EOpMix:
-                if (children[2]->getAsTyped()->getBasicType() == EbtBool)
-                    newConstArray[comp].setDConst(childConstUnions[2][arg2comp].getBConst() ? childConstUnions[1][arg1comp].getDConst() :
-                                                                                              childConstUnions[0][arg0comp].getDConst());
-                else
-                    newConstArray[comp].setDConst(childConstUnions[0][arg0comp].getDConst() * (1.0 - childConstUnions[2][arg2comp].getDConst()) +
-                                                  childConstUnions[1][arg1comp].getDConst() *        childConstUnions[2][arg2comp].getDConst());
+                if (!children[0]->getAsTyped()->isFloatingDomain())
+                    return aggrNode;
+                if (children[2]->getAsTyped()->getBasicType() == EbtBool) {
+                    newConstArray[comp].setDConst(childConstUnions[2][arg2comp].getBConst()
+                        ? childConstUnions[1][arg1comp].getDConst()
+                        : childConstUnions[0][arg0comp].getDConst());
+                } else {
+                    newConstArray[comp].setDConst(
+                        childConstUnions[0][arg0comp].getDConst() * (1.0 - childConstUnions[2][arg2comp].getDConst()) +
+                        childConstUnions[1][arg1comp].getDConst() *        childConstUnions[2][arg2comp].getDConst());
+                }
                 break;
             case EOpStep:
                 newConstArray[comp].setDConst(childConstUnions[1][arg1comp].getDConst() < childConstUnions[0][arg0comp].getDConst() ? 0.0 : 1.0);
@@ -1354,7 +1381,9 @@
     // arrays, vectors, matrices, all use simple multiplicative math
     // while structures need to add up heterogeneous members
     int start;
-    if (node->isArray() || ! node->isStruct())
+    if (node->getType().isCoopMat())
+        start = 0;
+    else if (node->isArray() || ! node->isStruct())
         start = size * index;
     else {
         // it is a structure
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
old mode 100755
new mode 100644
index a20d3be..eab2098
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -1,8 +1,9 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2016 LunarG, Inc.
-// Copyright (C) 2015-2018 Google, Inc.
+// Copyright (C) 2015-2020 Google, Inc.
 // Copyright (C) 2017 ARM Limited.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -64,6 +65,418 @@
 // Using PureOperatorBuiltins=false is deprecated.
 bool PureOperatorBuiltins = true;
 
+namespace {
+
+//
+// A set of definitions for tabling of the built-in functions.
+//
+
+// Order matters here, as does correlation with the subsequent
+// "const int ..." declarations and the ArgType enumerants.
+const char* TypeString[] = {
+   "bool",  "bvec2", "bvec3", "bvec4",
+   "float",  "vec2",  "vec3",  "vec4",
+   "int",   "ivec2", "ivec3", "ivec4",
+   "uint",  "uvec2", "uvec3", "uvec4",
+};
+const int TypeStringCount = sizeof(TypeString) / sizeof(char*); // number of entries in 'TypeString'
+const int TypeStringRowShift = 2;                               // shift amount to go downe one row in 'TypeString'
+const int TypeStringColumnMask = (1 << TypeStringRowShift) - 1; // reduce type to its column number in 'TypeString'
+const int TypeStringScalarMask = ~TypeStringColumnMask;         // take type to its scalar column in 'TypeString'
+
+enum ArgType {
+    // numbers hardcoded to correspond to 'TypeString'; order and value matter
+    TypeB    = 1 << 0,  // Boolean
+    TypeF    = 1 << 1,  // float 32
+    TypeI    = 1 << 2,  // int 32
+    TypeU    = 1 << 3,  // uint 32
+    TypeF16  = 1 << 4,  // float 16
+    TypeF64  = 1 << 5,  // float 64
+    TypeI8   = 1 << 6,  // int 8
+    TypeI16  = 1 << 7,  // int 16
+    TypeI64  = 1 << 8,  // int 64
+    TypeU8   = 1 << 9,  // uint 8
+    TypeU16  = 1 << 10, // uint 16
+    TypeU64  = 1 << 11, // uint 64
+};
+// Mixtures of the above, to help the function tables
+const ArgType TypeFI  = static_cast<ArgType>(TypeF | TypeI);
+const ArgType TypeFIB = static_cast<ArgType>(TypeF | TypeI | TypeB);
+const ArgType TypeIU  = static_cast<ArgType>(TypeI | TypeU);
+
+// The relationships between arguments and return type, whether anything is
+// output, or other unusual situations.
+enum ArgClass {
+    ClassRegular     = 0,  // nothing special, just all vector widths with matching return type; traditional arithmetic
+    ClassLS     = 1 << 0,  // the last argument is also held fixed as a (type-matched) scalar while the others cycle
+    ClassXLS    = 1 << 1,  // the last argument is exclusively a (type-matched) scalar while the others cycle
+    ClassLS2    = 1 << 2,  // the last two arguments are held fixed as a (type-matched) scalar while the others cycle
+    ClassFS     = 1 << 3,  // the first argument is held fixed as a (type-matched) scalar while the others cycle
+    ClassFS2    = 1 << 4,  // the first two arguments are held fixed as a (type-matched) scalar while the others cycle
+    ClassLO     = 1 << 5,  // the last argument is an output
+    ClassB      = 1 << 6,  // return type cycles through only bool/bvec, matching vector width of args
+    ClassLB     = 1 << 7,  // last argument cycles through only bool/bvec, matching vector width of args
+    ClassV1     = 1 << 8,  // scalar only
+    ClassFIO    = 1 << 9,  // first argument is inout
+    ClassRS     = 1 << 10, // the return is held scalar as the arguments cycle
+    ClassNS     = 1 << 11, // no scalar prototype
+    ClassCV     = 1 << 12, // first argument is 'coherent volatile'
+    ClassFO     = 1 << 13, // first argument is output
+    ClassV3     = 1 << 14, // vec3 only
+};
+// Mixtures of the above, to help the function tables
+const ArgClass ClassV1FIOCV = (ArgClass)(ClassV1 | ClassFIO | ClassCV);
+const ArgClass ClassBNS     = (ArgClass)(ClassB  | ClassNS);
+const ArgClass ClassRSNS    = (ArgClass)(ClassRS | ClassNS);
+
+// A descriptor, for a single profile, of when something is available.
+// If the current profile does not match 'profile' mask below, the other fields
+// do not apply (nor validate).
+// profiles == EBadProfile is the end of an array of these
+struct Versioning {
+    EProfile profiles;       // the profile(s) (mask) that the following fields are valid for
+    int minExtendedVersion;  // earliest version when extensions are enabled; ignored if numExtensions is 0
+    int minCoreVersion;      // earliest version function is in core; 0 means never
+    int numExtensions;       // how many extensions are in the 'extensions' list
+    const char** extensions; // list of extension names enabling the function
+};
+
+EProfile EDesktopProfile = static_cast<EProfile>(ENoProfile | ECoreProfile | ECompatibilityProfile);
+
+// Declare pointers to put into the table for versioning.
+#ifdef GLSLANG_WEB
+    const Versioning* Es300Desktop130 = nullptr;
+    const Versioning* Es310Desktop430 = nullptr;
+#else
+    const Versioning Es300Desktop130Version[] = { { EEsProfile,      0, 300, 0, nullptr },
+                                                  { 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 } };
+    const Versioning* Es310Desktop450 = &Es310Desktop450Version[0];
+#endif
+
+// The main descriptor of what a set of function prototypes can look like, and
+// a pointer to extra versioning information, when needed.
+struct BuiltInFunction {
+    TOperator op;                 // operator to map the name to
+    const char* name;             // function name
+    int numArguments;             // number of arguments (overloads with varying arguments need different entries)
+    ArgType types;                // ArgType mask
+    ArgClass classes;             // the ways this particular function entry manifests
+    const Versioning* versioning; // nullptr means always a valid version
+};
+
+// The tables can have the same built-in function name more than one time,
+// but the exact same prototype must be indicated at most once.
+// The prototypes that get declared are the union of all those indicated.
+// This is important when different releases add new prototypes for the same name.
+// It also also congnitively simpler tiling of the prototype space.
+// In practice, most names can be fully represented with one entry.
+//
+// Table is terminated by an OpNull TOperator.
+
+const BuiltInFunction BaseFunctions[] = {
+//    TOperator,           name,       arg-count,   ArgType,   ArgClass,     versioning
+//    ---------            ----        ---------    -------    --------      ----------
+    { EOpRadians,          "radians",          1,   TypeF,     ClassRegular, nullptr },
+    { EOpDegrees,          "degrees",          1,   TypeF,     ClassRegular, nullptr },
+    { EOpSin,              "sin",              1,   TypeF,     ClassRegular, nullptr },
+    { EOpCos,              "cos",              1,   TypeF,     ClassRegular, nullptr },
+    { EOpTan,              "tan",              1,   TypeF,     ClassRegular, nullptr },
+    { EOpAsin,             "asin",             1,   TypeF,     ClassRegular, nullptr },
+    { EOpAcos,             "acos",             1,   TypeF,     ClassRegular, nullptr },
+    { EOpAtan,             "atan",             2,   TypeF,     ClassRegular, nullptr },
+    { EOpAtan,             "atan",             1,   TypeF,     ClassRegular, nullptr },
+    { EOpPow,              "pow",              2,   TypeF,     ClassRegular, nullptr },
+    { EOpExp,              "exp",              1,   TypeF,     ClassRegular, nullptr },
+    { EOpLog,              "log",              1,   TypeF,     ClassRegular, nullptr },
+    { EOpExp2,             "exp2",             1,   TypeF,     ClassRegular, nullptr },
+    { EOpLog2,             "log2",             1,   TypeF,     ClassRegular, nullptr },
+    { EOpSqrt,             "sqrt",             1,   TypeF,     ClassRegular, nullptr },
+    { EOpInverseSqrt,      "inversesqrt",      1,   TypeF,     ClassRegular, nullptr },
+    { EOpAbs,              "abs",              1,   TypeF,     ClassRegular, nullptr },
+    { EOpSign,             "sign",             1,   TypeF,     ClassRegular, nullptr },
+    { EOpFloor,            "floor",            1,   TypeF,     ClassRegular, nullptr },
+    { EOpCeil,             "ceil",             1,   TypeF,     ClassRegular, nullptr },
+    { EOpFract,            "fract",            1,   TypeF,     ClassRegular, nullptr },
+    { EOpMod,              "mod",              2,   TypeF,     ClassLS,      nullptr },
+    { EOpMin,              "min",              2,   TypeF,     ClassLS,      nullptr },
+    { EOpMax,              "max",              2,   TypeF,     ClassLS,      nullptr },
+    { EOpClamp,            "clamp",            3,   TypeF,     ClassLS2,     nullptr },
+    { EOpMix,              "mix",              3,   TypeF,     ClassLS,      nullptr },
+    { EOpStep,             "step",             2,   TypeF,     ClassFS,      nullptr },
+    { EOpSmoothStep,       "smoothstep",       3,   TypeF,     ClassFS2,     nullptr },
+    { EOpNormalize,        "normalize",        1,   TypeF,     ClassRegular, nullptr },
+    { EOpFaceForward,      "faceforward",      3,   TypeF,     ClassRegular, nullptr },
+    { EOpReflect,          "reflect",          2,   TypeF,     ClassRegular, nullptr },
+    { EOpRefract,          "refract",          3,   TypeF,     ClassXLS,     nullptr },
+    { EOpLength,           "length",           1,   TypeF,     ClassRS,      nullptr },
+    { EOpDistance,         "distance",         2,   TypeF,     ClassRS,      nullptr },
+    { EOpDot,              "dot",              2,   TypeF,     ClassRS,      nullptr },
+    { EOpCross,            "cross",            2,   TypeF,     ClassV3,      nullptr },
+    { EOpLessThan,         "lessThan",         2,   TypeFI,    ClassBNS,     nullptr },
+    { EOpLessThanEqual,    "lessThanEqual",    2,   TypeFI,    ClassBNS,     nullptr },
+    { EOpGreaterThan,      "greaterThan",      2,   TypeFI,    ClassBNS,     nullptr },
+    { EOpGreaterThanEqual, "greaterThanEqual", 2,   TypeFI,    ClassBNS,     nullptr },
+    { EOpVectorEqual,      "equal",            2,   TypeFIB,   ClassBNS,     nullptr },
+    { EOpVectorNotEqual,   "notEqual",         2,   TypeFIB,   ClassBNS,     nullptr },
+    { EOpAny,              "any",              1,   TypeB,     ClassRSNS,    nullptr },
+    { EOpAll,              "all",              1,   TypeB,     ClassRSNS,    nullptr },
+    { EOpVectorLogicalNot, "not",              1,   TypeB,     ClassNS,      nullptr },
+    { EOpSinh,             "sinh",             1,   TypeF,     ClassRegular, Es300Desktop130 },
+    { EOpCosh,             "cosh",             1,   TypeF,     ClassRegular, Es300Desktop130 },
+    { EOpTanh,             "tanh",             1,   TypeF,     ClassRegular, Es300Desktop130 },
+    { EOpAsinh,            "asinh",            1,   TypeF,     ClassRegular, Es300Desktop130 },
+    { EOpAcosh,            "acosh",            1,   TypeF,     ClassRegular, Es300Desktop130 },
+    { EOpAtanh,            "atanh",            1,   TypeF,     ClassRegular, Es300Desktop130 },
+    { EOpAbs,              "abs",              1,   TypeI,     ClassRegular, Es300Desktop130 },
+    { EOpSign,             "sign",             1,   TypeI,     ClassRegular, Es300Desktop130 },
+    { EOpTrunc,            "trunc",            1,   TypeF,     ClassRegular, Es300Desktop130 },
+    { EOpRound,            "round",            1,   TypeF,     ClassRegular, Es300Desktop130 },
+    { EOpRoundEven,        "roundEven",        1,   TypeF,     ClassRegular, Es300Desktop130 },
+    { EOpModf,             "modf",             2,   TypeF,     ClassLO,      Es300Desktop130 },
+    { EOpMin,              "min",              2,   TypeIU,    ClassLS,      Es300Desktop130 },
+    { EOpMax,              "max",              2,   TypeIU,    ClassLS,      Es300Desktop130 },
+    { EOpClamp,            "clamp",            3,   TypeIU,    ClassLS2,     Es300Desktop130 },
+    { EOpMix,              "mix",              3,   TypeF,     ClassLB,      Es300Desktop130 },
+    { EOpIsInf,            "isinf",            1,   TypeF,     ClassB,       Es300Desktop130 },
+    { EOpIsNan,            "isnan",            1,   TypeF,     ClassB,       Es300Desktop130 },
+    { EOpLessThan,         "lessThan",         2,   TypeU,     ClassBNS,     Es300Desktop130 },
+    { EOpLessThanEqual,    "lessThanEqual",    2,   TypeU,     ClassBNS,     Es300Desktop130 },
+    { EOpGreaterThan,      "greaterThan",      2,   TypeU,     ClassBNS,     Es300Desktop130 },
+    { EOpGreaterThanEqual, "greaterThanEqual", 2,   TypeU,     ClassBNS,     Es300Desktop130 },
+    { EOpVectorEqual,      "equal",            2,   TypeU,     ClassBNS,     Es300Desktop130 },
+    { EOpVectorNotEqual,   "notEqual",         2,   TypeU,     ClassBNS,     Es300Desktop130 },
+    { EOpAtomicAdd,        "atomicAdd",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop430 },
+    { EOpAtomicMin,        "atomicMin",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop430 },
+    { EOpAtomicMax,        "atomicMax",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop430 },
+    { EOpAtomicAnd,        "atomicAnd",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop430 },
+    { EOpAtomicOr,         "atomicOr",         2,   TypeIU,    ClassV1FIOCV, Es310Desktop430 },
+    { EOpAtomicXor,        "atomicXor",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop430 },
+    { EOpAtomicExchange,   "atomicExchange",   2,   TypeIU,    ClassV1FIOCV, Es310Desktop430 },
+    { EOpAtomicCompSwap,   "atomicCompSwap",   3,   TypeIU,    ClassV1FIOCV, Es310Desktop430 },
+#ifndef GLSLANG_WEB
+    { EOpMix,              "mix",              3,   TypeB,     ClassRegular, Es310Desktop450 },
+    { EOpMix,              "mix",              3,   TypeIU,    ClassLB,      Es310Desktop450 },
+#endif
+
+    { EOpNull }
+};
+
+const BuiltInFunction DerivativeFunctions[] = {
+    { EOpDPdx,             "dFdx",             1,   TypeF,     ClassRegular, nullptr },
+    { EOpDPdy,             "dFdy",             1,   TypeF,     ClassRegular, nullptr },
+    { EOpFwidth,           "fwidth",           1,   TypeF,     ClassRegular, nullptr },
+    { EOpNull }
+};
+
+// For functions declared some other way, but still use the table to relate to operator.
+struct CustomFunction {
+    TOperator op;                 // operator to map the name to
+    const char* name;             // function name
+    const Versioning* versioning; // nullptr means always a valid version
+};
+
+const CustomFunction CustomFunctions[] = {
+    { EOpBarrier,             "barrier",             nullptr },
+    { EOpMemoryBarrierShared, "memoryBarrierShared", nullptr },
+    { EOpGroupMemoryBarrier,  "groupMemoryBarrier",  nullptr },
+    { EOpMemoryBarrier,       "memoryBarrier",       nullptr },
+    { EOpMemoryBarrierBuffer, "memoryBarrierBuffer", nullptr },
+
+    { EOpPackSnorm2x16,       "packSnorm2x16",       nullptr },
+    { EOpUnpackSnorm2x16,     "unpackSnorm2x16",     nullptr },
+    { EOpPackUnorm2x16,       "packUnorm2x16",       nullptr },
+    { EOpUnpackUnorm2x16,     "unpackUnorm2x16",     nullptr },
+    { EOpPackHalf2x16,        "packHalf2x16",        nullptr },
+    { EOpUnpackHalf2x16,      "unpackHalf2x16",      nullptr },
+
+    { EOpMul,                 "matrixCompMult",      nullptr },
+    { EOpOuterProduct,        "outerProduct",        nullptr },
+    { EOpTranspose,           "transpose",           nullptr },
+    { EOpDeterminant,         "determinant",         nullptr },
+    { EOpMatrixInverse,       "inverse",             nullptr },
+    { EOpFloatBitsToInt,      "floatBitsToInt",      nullptr },
+    { EOpFloatBitsToUint,     "floatBitsToUint",     nullptr },
+    { EOpIntBitsToFloat,      "intBitsToFloat",      nullptr },
+    { EOpUintBitsToFloat,     "uintBitsToFloat",     nullptr },
+
+    { EOpTextureQuerySize,      "textureSize",           nullptr },
+    { EOpTextureQueryLod,       "textureQueryLod",       nullptr },
+    { EOpTextureQueryLevels,    "textureQueryLevels",    nullptr },
+    { EOpTextureQuerySamples,   "textureSamples",        nullptr },
+    { EOpTexture,               "texture",               nullptr },
+    { EOpTextureProj,           "textureProj",           nullptr },
+    { EOpTextureLod,            "textureLod",            nullptr },
+    { EOpTextureOffset,         "textureOffset",         nullptr },
+    { EOpTextureFetch,          "texelFetch",            nullptr },
+    { EOpTextureFetchOffset,    "texelFetchOffset",      nullptr },
+    { EOpTextureProjOffset,     "textureProjOffset",     nullptr },
+    { EOpTextureLodOffset,      "textureLodOffset",      nullptr },
+    { EOpTextureProjLod,        "textureProjLod",        nullptr },
+    { EOpTextureProjLodOffset,  "textureProjLodOffset",  nullptr },
+    { EOpTextureGrad,           "textureGrad",           nullptr },
+    { EOpTextureGradOffset,     "textureGradOffset",     nullptr },
+    { EOpTextureProjGrad,       "textureProjGrad",       nullptr },
+    { EOpTextureProjGradOffset, "textureProjGradOffset", nullptr },
+
+    { EOpNull }
+};
+
+// For the given table of functions, add all the indicated prototypes for each
+// one, to be returned in the passed in decls.
+void AddTabledBuiltin(TString& decls, const BuiltInFunction& function)
+{
+    const auto isScalarType = [](int type) { return (type & TypeStringColumnMask) == 0; };
+
+    // loop across these two:
+    //  0: the varying arg set, and
+    //  1: the fixed scalar args
+    const ArgClass ClassFixed = (ArgClass)(ClassLS | ClassXLS | ClassLS2 | ClassFS | ClassFS2);
+    for (int fixed = 0; fixed < ((function.classes & ClassFixed) > 0 ? 2 : 1); ++fixed) {
+
+        if (fixed == 0 && (function.classes & ClassXLS))
+            continue;
+
+        // walk the type strings in TypeString[]
+        for (int type = 0; type < TypeStringCount; ++type) {
+            // skip types not selected: go from type to row number to type bit
+            if ((function.types & (1 << (type >> TypeStringRowShift))) == 0)
+                continue;
+
+            // if we aren't on a scalar, and should be, skip
+            if ((function.classes & ClassV1) && !isScalarType(type))
+                continue;
+
+            // if we aren't on a 3-vector, and should be, skip
+            if ((function.classes & ClassV3) && (type & TypeStringColumnMask) != 2)
+                continue;
+
+            // skip replication of all arg scalars between the varying arg set and the fixed args
+            if (fixed == 1 && type == (type & TypeStringScalarMask) && (function.classes & ClassXLS) == 0)
+                continue;
+
+            // skip scalars when we are told to
+            if ((function.classes & ClassNS) && isScalarType(type))
+                continue;
+
+            // return type
+            if (function.classes & ClassB)
+                decls.append(TypeString[type & TypeStringColumnMask]);
+            else if (function.classes & ClassRS)
+                decls.append(TypeString[type & TypeStringScalarMask]);
+            else
+                decls.append(TypeString[type]);
+            decls.append(" ");
+            decls.append(function.name);
+            decls.append("(");
+
+            // arguments
+            for (int arg = 0; arg < function.numArguments; ++arg) {
+                if (arg == function.numArguments - 1 && (function.classes & ClassLO))
+                    decls.append("out ");
+                if (arg == 0) {
+#ifndef GLSLANG_WEB
+                    if (function.classes & ClassCV)
+                        decls.append("coherent volatile ");
+#endif
+                    if (function.classes & ClassFIO)
+                        decls.append("inout ");
+                    if (function.classes & ClassFO)
+                        decls.append("out ");
+                }
+                if ((function.classes & ClassLB) && arg == function.numArguments - 1)
+                    decls.append(TypeString[type & TypeStringColumnMask]);
+                else if (fixed && ((arg == function.numArguments - 1 && (function.classes & (ClassLS | ClassXLS |
+                                                                                                       ClassLS2))) ||
+                                   (arg == function.numArguments - 2 && (function.classes & ClassLS2))             ||
+                                   (arg == 0                         && (function.classes & (ClassFS | ClassFS2))) ||
+                                   (arg == 1                         && (function.classes & ClassFS2))))
+                    decls.append(TypeString[type & TypeStringScalarMask]);
+                else
+                    decls.append(TypeString[type]);
+                if (arg < function.numArguments - 1)
+                    decls.append(",");
+            }
+            decls.append(");\n");
+        }
+    }
+}
+
+// See if the tabled versioning information allows the current version.
+bool ValidVersion(const BuiltInFunction& function, int version, EProfile profile, const SpvVersion& /* spVersion */)
+{
+#ifdef GLSLANG_WEB
+    // all entries in table are valid
+    return true;
+#endif
+
+    // nullptr means always valid
+    if (function.versioning == nullptr)
+        return true;
+
+    // check for what is said about our current profile
+    for (const Versioning* v = function.versioning; v->profiles != EBadProfile; ++v) {
+        if ((v->profiles & profile) != 0) {
+            if (v->minCoreVersion <= version || (v->numExtensions > 0 && v->minExtendedVersion <= version))
+                return true;
+        }
+    }
+
+    return false;
+}
+
+// Relate a single table of built-ins to their AST operator.
+// This can get called redundantly (especially for the common built-ins, when
+// called once per stage). This is a performance issue only, not a correctness
+// concern.  It is done for quality arising from simplicity, as there are subtleties
+// to get correct if instead trying to do it surgically.
+template<class FunctionT>
+void RelateTabledBuiltins(const FunctionT* functions, TSymbolTable& symbolTable)
+{
+    while (functions->op != EOpNull) {
+        symbolTable.relateToOperator(functions->name, functions->op);
+        ++functions;
+    }
+}
+
+} // end anonymous namespace
+
+// Add declarations for all tables of built-in functions.
+void TBuiltIns::addTabledBuiltins(int version, EProfile profile, const SpvVersion& spvVersion)
+{
+    const auto forEachFunction = [&](TString& decls, const BuiltInFunction* function) {
+        while (function->op != EOpNull) {
+            if (ValidVersion(*function, version, profile, spvVersion))
+                AddTabledBuiltin(decls, *function);
+            ++function;
+        }
+    };
+
+    forEachFunction(commonBuiltins, BaseFunctions);
+    forEachFunction(stageBuiltins[EShLangFragment], DerivativeFunctions);
+
+    if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450))
+        forEachFunction(stageBuiltins[EShLangCompute], DerivativeFunctions);
+}
+
+// Relate all tables of built-ins to the AST operators.
+void TBuiltIns::relateTabledBuiltins(int /* version */, EProfile /* profile */, const SpvVersion& /* spvVersion */, EShLanguage /* stage */, TSymbolTable& symbolTable)
+{
+    RelateTabledBuiltins(BaseFunctions, symbolTable);
+    RelateTabledBuiltins(DerivativeFunctions, symbolTable);
+    RelateTabledBuiltins(CustomFunctions, symbolTable);
+}
+
 inline bool IncludeLegacy(int version, EProfile profile, const SpvVersion& spvVersion)
 {
     return profile != EEsProfile && (version <= 130 || (spvVersion.spv == 0 && ARBCompatibility) || profile == ECompatibilityProfile);
@@ -84,27 +497,30 @@
     // Set up textual representations for making all the permutations
     // of texturing/imaging functions.
     prefixes[EbtFloat] =  "";
-#ifdef AMD_EXTENSIONS
+    prefixes[EbtInt]   = "i";
+    prefixes[EbtUint]  = "u";
+#ifndef GLSLANG_WEB
     prefixes[EbtFloat16] = "f16";
-#endif
     prefixes[EbtInt8]  = "i8";
     prefixes[EbtUint8] = "u8";
     prefixes[EbtInt16]  = "i16";
     prefixes[EbtUint16] = "u16";
-    prefixes[EbtInt]   = "i";
-    prefixes[EbtUint]  = "u";
+#endif
+
     postfixes[2] = "2";
     postfixes[3] = "3";
     postfixes[4] = "4";
 
     // Map from symbolic class of texturing dimension to numeric dimensions.
-    dimMap[Esd1D] = 1;
     dimMap[Esd2D] = 2;
-    dimMap[EsdRect] = 2;
     dimMap[Esd3D] = 3;
     dimMap[EsdCube] = 3;
+#ifndef GLSLANG_WEB
+    dimMap[Esd1D] = 1;
+    dimMap[EsdRect] = 2;
     dimMap[EsdBuffer] = 1;
-    dimMap[EsdSubpass] = 2;  // potientially unused for now
+    dimMap[EsdSubpass] = 2;  // potentially unused for now
+#endif
 }
 
 TBuiltIns::~TBuiltIns()
@@ -122,32 +538,22 @@
 //
 void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvVersion)
 {
+#ifdef GLSLANG_WEB
+    version = 310;
+    profile = EEsProfile;
+#endif
+    addTabledBuiltins(version, profile, spvVersion);
+
     //============================================================================
     //
     // Prototypes for built-in functions used repeatly by different shaders
     //
     //============================================================================
 
+#ifndef GLSLANG_WEB
     //
     // Derivatives Functions.
     //
-    TString derivatives (
-        "float dFdx(float p);"
-        "vec2  dFdx(vec2  p);"
-        "vec3  dFdx(vec3  p);"
-        "vec4  dFdx(vec4  p);"
-
-        "float dFdy(float p);"
-        "vec2  dFdy(vec2  p);"
-        "vec3  dFdy(vec3  p);"
-        "vec4  dFdy(vec4  p);"
-
-        "float fwidth(float p);"
-        "vec2  fwidth(vec2  p);"
-        "vec3  fwidth(vec3  p);"
-        "vec4  fwidth(vec4  p);"
-    );
-
     TString derivativeControls (
         "float dFdxFine(float p);"
         "vec2  dFdxFine(vec2  p);"
@@ -281,321 +687,9 @@
     //============================================================================
 
     //
-    // Angle and Trigonometric Functions.
-    //
-    commonBuiltins.append(
-        "float radians(float degrees);"
-        "vec2  radians(vec2  degrees);"
-        "vec3  radians(vec3  degrees);"
-        "vec4  radians(vec4  degrees);"
-
-        "float degrees(float radians);"
-        "vec2  degrees(vec2  radians);"
-        "vec3  degrees(vec3  radians);"
-        "vec4  degrees(vec4  radians);"
-
-        "float sin(float angle);"
-        "vec2  sin(vec2  angle);"
-        "vec3  sin(vec3  angle);"
-        "vec4  sin(vec4  angle);"
-
-        "float cos(float angle);"
-        "vec2  cos(vec2  angle);"
-        "vec3  cos(vec3  angle);"
-        "vec4  cos(vec4  angle);"
-
-        "float tan(float angle);"
-        "vec2  tan(vec2  angle);"
-        "vec3  tan(vec3  angle);"
-        "vec4  tan(vec4  angle);"
-
-        "float asin(float x);"
-        "vec2  asin(vec2  x);"
-        "vec3  asin(vec3  x);"
-        "vec4  asin(vec4  x);"
-
-        "float acos(float x);"
-        "vec2  acos(vec2  x);"
-        "vec3  acos(vec3  x);"
-        "vec4  acos(vec4  x);"
-
-        "float atan(float y, float x);"
-        "vec2  atan(vec2  y, vec2  x);"
-        "vec3  atan(vec3  y, vec3  x);"
-        "vec4  atan(vec4  y, vec4  x);"
-
-        "float atan(float y_over_x);"
-        "vec2  atan(vec2  y_over_x);"
-        "vec3  atan(vec3  y_over_x);"
-        "vec4  atan(vec4  y_over_x);"
-
-        "\n");
-
-    if (version >= 130) {
-        commonBuiltins.append(
-            "float sinh(float angle);"
-            "vec2  sinh(vec2  angle);"
-            "vec3  sinh(vec3  angle);"
-            "vec4  sinh(vec4  angle);"
-
-            "float cosh(float angle);"
-            "vec2  cosh(vec2  angle);"
-            "vec3  cosh(vec3  angle);"
-            "vec4  cosh(vec4  angle);"
-
-            "float tanh(float angle);"
-            "vec2  tanh(vec2  angle);"
-            "vec3  tanh(vec3  angle);"
-            "vec4  tanh(vec4  angle);"
-
-            "float asinh(float x);"
-            "vec2  asinh(vec2  x);"
-            "vec3  asinh(vec3  x);"
-            "vec4  asinh(vec4  x);"
-
-            "float acosh(float x);"
-            "vec2  acosh(vec2  x);"
-            "vec3  acosh(vec3  x);"
-            "vec4  acosh(vec4  x);"
-
-            "float atanh(float y_over_x);"
-            "vec2  atanh(vec2  y_over_x);"
-            "vec3  atanh(vec3  y_over_x);"
-            "vec4  atanh(vec4  y_over_x);"
-
-            "\n");
-    }
-
-    //
-    // Exponential Functions.
-    //
-    commonBuiltins.append(
-        "float pow(float x, float y);"
-        "vec2  pow(vec2  x, vec2  y);"
-        "vec3  pow(vec3  x, vec3  y);"
-        "vec4  pow(vec4  x, vec4  y);"
-
-        "float exp(float x);"
-        "vec2  exp(vec2  x);"
-        "vec3  exp(vec3  x);"
-        "vec4  exp(vec4  x);"
-
-        "float log(float x);"
-        "vec2  log(vec2  x);"
-        "vec3  log(vec3  x);"
-        "vec4  log(vec4  x);"
-
-        "float exp2(float x);"
-        "vec2  exp2(vec2  x);"
-        "vec3  exp2(vec3  x);"
-        "vec4  exp2(vec4  x);"
-
-        "float log2(float x);"
-        "vec2  log2(vec2  x);"
-        "vec3  log2(vec3  x);"
-        "vec4  log2(vec4  x);"
-
-        "float sqrt(float x);"
-        "vec2  sqrt(vec2  x);"
-        "vec3  sqrt(vec3  x);"
-        "vec4  sqrt(vec4  x);"
-
-        "float inversesqrt(float x);"
-        "vec2  inversesqrt(vec2  x);"
-        "vec3  inversesqrt(vec3  x);"
-        "vec4  inversesqrt(vec4  x);"
-
-        "\n");
-
-    //
-    // Common Functions.
-    //
-    commonBuiltins.append(
-        "float abs(float x);"
-        "vec2  abs(vec2  x);"
-        "vec3  abs(vec3  x);"
-        "vec4  abs(vec4  x);"
-
-        "float sign(float x);"
-        "vec2  sign(vec2  x);"
-        "vec3  sign(vec3  x);"
-        "vec4  sign(vec4  x);"
-
-        "float floor(float x);"
-        "vec2  floor(vec2  x);"
-        "vec3  floor(vec3  x);"
-        "vec4  floor(vec4  x);"
-
-        "float ceil(float x);"
-        "vec2  ceil(vec2  x);"
-        "vec3  ceil(vec3  x);"
-        "vec4  ceil(vec4  x);"
-
-        "float fract(float x);"
-        "vec2  fract(vec2  x);"
-        "vec3  fract(vec3  x);"
-        "vec4  fract(vec4  x);"
-
-        "float mod(float x, float y);"
-        "vec2  mod(vec2  x, float y);"
-        "vec3  mod(vec3  x, float y);"
-        "vec4  mod(vec4  x, float y);"
-        "vec2  mod(vec2  x, vec2  y);"
-        "vec3  mod(vec3  x, vec3  y);"
-        "vec4  mod(vec4  x, vec4  y);"
-
-        "float min(float x, float y);"
-        "vec2  min(vec2  x, float y);"
-        "vec3  min(vec3  x, float y);"
-        "vec4  min(vec4  x, float y);"
-        "vec2  min(vec2  x, vec2  y);"
-        "vec3  min(vec3  x, vec3  y);"
-        "vec4  min(vec4  x, vec4  y);"
-
-        "float max(float x, float y);"
-        "vec2  max(vec2  x, float y);"
-        "vec3  max(vec3  x, float y);"
-        "vec4  max(vec4  x, float y);"
-        "vec2  max(vec2  x, vec2  y);"
-        "vec3  max(vec3  x, vec3  y);"
-        "vec4  max(vec4  x, vec4  y);"
-
-        "float clamp(float x, float minVal, float maxVal);"
-        "vec2  clamp(vec2  x, float minVal, float maxVal);"
-        "vec3  clamp(vec3  x, float minVal, float maxVal);"
-        "vec4  clamp(vec4  x, float minVal, float maxVal);"
-        "vec2  clamp(vec2  x, vec2  minVal, vec2  maxVal);"
-        "vec3  clamp(vec3  x, vec3  minVal, vec3  maxVal);"
-        "vec4  clamp(vec4  x, vec4  minVal, vec4  maxVal);"
-
-        "float mix(float x, float y, float a);"
-        "vec2  mix(vec2  x, vec2  y, float a);"
-        "vec3  mix(vec3  x, vec3  y, float a);"
-        "vec4  mix(vec4  x, vec4  y, float a);"
-        "vec2  mix(vec2  x, vec2  y, vec2  a);"
-        "vec3  mix(vec3  x, vec3  y, vec3  a);"
-        "vec4  mix(vec4  x, vec4  y, vec4  a);"
-
-        "float step(float edge, float x);"
-        "vec2  step(vec2  edge, vec2  x);"
-        "vec3  step(vec3  edge, vec3  x);"
-        "vec4  step(vec4  edge, vec4  x);"
-        "vec2  step(float edge, vec2  x);"
-        "vec3  step(float edge, vec3  x);"
-        "vec4  step(float edge, vec4  x);"
-
-        "float smoothstep(float edge0, float edge1, float x);"
-        "vec2  smoothstep(vec2  edge0, vec2  edge1, vec2  x);"
-        "vec3  smoothstep(vec3  edge0, vec3  edge1, vec3  x);"
-        "vec4  smoothstep(vec4  edge0, vec4  edge1, vec4  x);"
-        "vec2  smoothstep(float edge0, float edge1, vec2  x);"
-        "vec3  smoothstep(float edge0, float edge1, vec3  x);"
-        "vec4  smoothstep(float edge0, float edge1, vec4  x);"
-
-        "\n");
-
-    if (version >= 130) {
-        commonBuiltins.append(
-            "  int abs(  int x);"
-            "ivec2 abs(ivec2 x);"
-            "ivec3 abs(ivec3 x);"
-            "ivec4 abs(ivec4 x);"
-
-            "  int sign(  int x);"
-            "ivec2 sign(ivec2 x);"
-            "ivec3 sign(ivec3 x);"
-            "ivec4 sign(ivec4 x);"
-
-            "float trunc(float x);"
-            "vec2  trunc(vec2  x);"
-            "vec3  trunc(vec3  x);"
-            "vec4  trunc(vec4  x);"
-
-            "float round(float x);"
-            "vec2  round(vec2  x);"
-            "vec3  round(vec3  x);"
-            "vec4  round(vec4  x);"
-
-            "float roundEven(float x);"
-            "vec2  roundEven(vec2  x);"
-            "vec3  roundEven(vec3  x);"
-            "vec4  roundEven(vec4  x);"
-
-            "float modf(float, out float);"
-            "vec2  modf(vec2,  out vec2 );"
-            "vec3  modf(vec3,  out vec3 );"
-            "vec4  modf(vec4,  out vec4 );"
-
-            "  int min(int    x, int y);"
-            "ivec2 min(ivec2  x, int y);"
-            "ivec3 min(ivec3  x, int y);"
-            "ivec4 min(ivec4  x, int y);"
-            "ivec2 min(ivec2  x, ivec2  y);"
-            "ivec3 min(ivec3  x, ivec3  y);"
-            "ivec4 min(ivec4  x, ivec4  y);"
-
-            " uint min(uint   x, uint y);"
-            "uvec2 min(uvec2  x, uint y);"
-            "uvec3 min(uvec3  x, uint y);"
-            "uvec4 min(uvec4  x, uint y);"
-            "uvec2 min(uvec2  x, uvec2  y);"
-            "uvec3 min(uvec3  x, uvec3  y);"
-            "uvec4 min(uvec4  x, uvec4  y);"
-
-            "  int max(int    x, int y);"
-            "ivec2 max(ivec2  x, int y);"
-            "ivec3 max(ivec3  x, int y);"
-            "ivec4 max(ivec4  x, int y);"
-            "ivec2 max(ivec2  x, ivec2  y);"
-            "ivec3 max(ivec3  x, ivec3  y);"
-            "ivec4 max(ivec4  x, ivec4  y);"
-
-            " uint max(uint   x, uint y);"
-            "uvec2 max(uvec2  x, uint y);"
-            "uvec3 max(uvec3  x, uint y);"
-            "uvec4 max(uvec4  x, uint y);"
-            "uvec2 max(uvec2  x, uvec2  y);"
-            "uvec3 max(uvec3  x, uvec3  y);"
-            "uvec4 max(uvec4  x, uvec4  y);"
-
-            "int    clamp(int x, int minVal, int maxVal);"
-            "ivec2  clamp(ivec2  x, int minVal, int maxVal);"
-            "ivec3  clamp(ivec3  x, int minVal, int maxVal);"
-            "ivec4  clamp(ivec4  x, int minVal, int maxVal);"
-            "ivec2  clamp(ivec2  x, ivec2  minVal, ivec2  maxVal);"
-            "ivec3  clamp(ivec3  x, ivec3  minVal, ivec3  maxVal);"
-            "ivec4  clamp(ivec4  x, ivec4  minVal, ivec4  maxVal);"
-
-            "uint   clamp(uint x, uint minVal, uint maxVal);"
-            "uvec2  clamp(uvec2  x, uint minVal, uint maxVal);"
-            "uvec3  clamp(uvec3  x, uint minVal, uint maxVal);"
-            "uvec4  clamp(uvec4  x, uint minVal, uint maxVal);"
-            "uvec2  clamp(uvec2  x, uvec2  minVal, uvec2  maxVal);"
-            "uvec3  clamp(uvec3  x, uvec3  minVal, uvec3  maxVal);"
-            "uvec4  clamp(uvec4  x, uvec4  minVal, uvec4  maxVal);"
-
-            "float mix(float x, float y, bool  a);"
-            "vec2  mix(vec2  x, vec2  y, bvec2 a);"
-            "vec3  mix(vec3  x, vec3  y, bvec3 a);"
-            "vec4  mix(vec4  x, vec4  y, bvec4 a);"
-
-            "bool  isnan(float x);"
-            "bvec2 isnan(vec2  x);"
-            "bvec3 isnan(vec3  x);"
-            "bvec4 isnan(vec4  x);"
-
-            "bool  isinf(float x);"
-            "bvec2 isinf(vec2  x);"
-            "bvec3 isinf(vec3  x);"
-            "bvec4 isinf(vec4  x);"
-
-            "\n");
-    }
-
-    //
     // double functions added to desktop 4.00, but not fma, frexp, ldexp, or pack/unpack
     //
-    if (profile != EEsProfile && version >= 400) {
+    if (profile != EEsProfile && version >= 150) {  // ARB_gpu_shader_fp64
         commonBuiltins.append(
 
             "double sqrt(double);"
@@ -959,31 +1053,30 @@
             "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"
         );
     }
 
-#ifdef AMD_EXTENSIONS
     // GL_AMD_shader_trinary_minmax
     if (profile != EEsProfile && version >= 430) {
         commonBuiltins.append(
@@ -1080,48 +1173,31 @@
             "\n"
         );
     }
-#endif
 
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 430)) {
         commonBuiltins.append(
-            "uint atomicAdd(coherent volatile inout uint, uint);"
-            " int atomicAdd(coherent volatile inout  int,  int);"
             "uint atomicAdd(coherent volatile inout uint, uint, int, int, int);"
             " int atomicAdd(coherent volatile inout  int,  int, int, int, int);"
 
-            "uint atomicMin(coherent volatile inout uint, uint);"
-            " int atomicMin(coherent volatile inout  int,  int);"
             "uint atomicMin(coherent volatile inout uint, uint, int, int, int);"
             " int atomicMin(coherent volatile inout  int,  int, int, int, int);"
 
-            "uint atomicMax(coherent volatile inout uint, uint);"
-            " int atomicMax(coherent volatile inout  int,  int);"
             "uint atomicMax(coherent volatile inout uint, uint, int, int, int);"
             " int atomicMax(coherent volatile inout  int,  int, int, int, int);"
 
-            "uint atomicAnd(coherent volatile inout uint, uint);"
-            " int atomicAnd(coherent volatile inout  int,  int);"
             "uint atomicAnd(coherent volatile inout uint, uint, int, int, int);"
             " int atomicAnd(coherent volatile inout  int,  int, int, int, int);"
 
-            "uint atomicOr (coherent volatile inout uint, uint);"
-            " int atomicOr (coherent volatile inout  int,  int);"
             "uint atomicOr (coherent volatile inout uint, uint, int, int, int);"
             " int atomicOr (coherent volatile inout  int,  int, int, int, int);"
 
-            "uint atomicXor(coherent volatile inout uint, uint);"
-            " int atomicXor(coherent volatile inout  int,  int);"
             "uint atomicXor(coherent volatile inout uint, uint, int, int, int);"
             " int atomicXor(coherent volatile inout  int,  int, int, int, int);"
 
-            "uint atomicExchange(coherent volatile inout uint, uint);"
-            " int atomicExchange(coherent volatile inout  int,  int);"
             "uint atomicExchange(coherent volatile inout uint, uint, int, int, int);"
             " int atomicExchange(coherent volatile inout  int,  int, int, int, int);"
 
-            "uint atomicCompSwap(coherent volatile inout uint, uint, uint);"
-            " int atomicCompSwap(coherent volatile inout  int,  int,  int);"
             "uint atomicCompSwap(coherent volatile inout uint, uint, uint, int, int, int, int, int);"
             " int atomicCompSwap(coherent volatile inout  int,  int,  int, int, int, int, int, int);"
 
@@ -1183,30 +1259,10 @@
             "void atomicStore(coherent volatile out  int64_t,  int64_t, int, int, int);"
             "\n");
     }
-
-    if ((profile == EEsProfile && version >= 310) ||
-        (profile != EEsProfile && version >= 450)) {
-        commonBuiltins.append(
-            "int    mix(int    x, int    y, bool  a);"
-            "ivec2  mix(ivec2  x, ivec2  y, bvec2 a);"
-            "ivec3  mix(ivec3  x, ivec3  y, bvec3 a);"
-            "ivec4  mix(ivec4  x, ivec4  y, bvec4 a);"
-
-            "uint   mix(uint   x, uint   y, bool  a);"
-            "uvec2  mix(uvec2  x, uvec2  y, bvec2 a);"
-            "uvec3  mix(uvec3  x, uvec3  y, bvec3 a);"
-            "uvec4  mix(uvec4  x, uvec4  y, bvec4 a);"
-
-            "bool   mix(bool   x, bool   y, bool  a);"
-            "bvec2  mix(bvec2  x, bvec2  y, bvec2 a);"
-            "bvec3  mix(bvec3  x, bvec3  y, bvec3 a);"
-            "bvec4  mix(bvec4  x, bvec4  y, bvec4 a);"
-
-            "\n");
-    }
+#endif
 
     if ((profile == EEsProfile && version >= 300) ||
-        (profile != EEsProfile && version >= 330)) {
+        (profile != EEsProfile && version >= 150)) { // GL_ARB_shader_bit_encoding
         commonBuiltins.append(
             "int   floatBitsToInt(highp float value);"
             "ivec2 floatBitsToInt(highp vec2  value);"
@@ -1231,6 +1287,7 @@
             "\n");
     }
 
+#ifndef GLSLANG_WEB
     if ((profile != EEsProfile && version >= 400) ||
         (profile == EEsProfile && version >= 310)) {    // GL_OES_gpu_shader5
 
@@ -1240,15 +1297,15 @@
             "vec3   fma(vec3,   vec3,   vec3  );"
             "vec4   fma(vec4,   vec4,   vec4  );"
             "\n");
+    }
 
-        if (profile != EEsProfile) {
+    if (profile != EEsProfile && version >= 150) {  // ARB_gpu_shader_fp64
             commonBuiltins.append(
                 "double fma(double, double, double);"
                 "dvec2  fma(dvec2,  dvec2,  dvec2 );"
                 "dvec3  fma(dvec3,  dvec3,  dvec3 );"
                 "dvec4  fma(dvec4,  dvec4,  dvec4 );"
                 "\n");
-        }
     }
 
     if ((profile == EEsProfile && version >= 310) ||
@@ -1267,7 +1324,7 @@
             "\n");
     }
 
-    if (profile != EEsProfile && version >= 400) {
+    if (profile != EEsProfile && version >= 150) { // ARB_gpu_shader_fp64
         commonBuiltins.append(
             "double frexp(double, out int);"
             "dvec2  frexp( dvec2, out ivec2);"
@@ -1284,6 +1341,7 @@
 
             "\n");
     }
+#endif
 
     if ((profile == EEsProfile && version >= 300) ||
         (profile != EEsProfile && version >= 400)) {
@@ -1312,6 +1370,7 @@
             "\n");
     }
 
+#ifndef GLSLANG_WEB
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 400)) {
         commonBuiltins.append(
@@ -1331,48 +1390,7 @@
                     "vec4 unpackUnorm4x8(highp uint);"
             "\n");
     }
-
-    //
-    // Geometric Functions.
-    //
-    commonBuiltins.append(
-        "float length(float x);"
-        "float length(vec2  x);"
-        "float length(vec3  x);"
-        "float length(vec4  x);"
-
-        "float distance(float p0, float p1);"
-        "float distance(vec2  p0, vec2  p1);"
-        "float distance(vec3  p0, vec3  p1);"
-        "float distance(vec4  p0, vec4  p1);"
-
-        "float dot(float x, float y);"
-        "float dot(vec2  x, vec2  y);"
-        "float dot(vec3  x, vec3  y);"
-        "float dot(vec4  x, vec4  y);"
-
-        "vec3 cross(vec3 x, vec3 y);"
-        "float normalize(float x);"
-        "vec2  normalize(vec2  x);"
-        "vec3  normalize(vec3  x);"
-        "vec4  normalize(vec4  x);"
-
-        "float faceforward(float N, float I, float Nref);"
-        "vec2  faceforward(vec2  N, vec2  I, vec2  Nref);"
-        "vec3  faceforward(vec3  N, vec3  I, vec3  Nref);"
-        "vec4  faceforward(vec4  N, vec4  I, vec4  Nref);"
-
-        "float reflect(float I, float N);"
-        "vec2  reflect(vec2  I, vec2  N);"
-        "vec3  reflect(vec3  I, vec3  N);"
-        "vec4  reflect(vec4  I, vec4  N);"
-
-        "float refract(float I, float N, float eta);"
-        "vec2  refract(vec2  I, vec2  N, float eta);"
-        "vec3  refract(vec3  I, vec3  N, float eta);"
-        "vec4  refract(vec4  I, vec4  N, float eta);"
-
-        "\n");
+#endif
 
     //
     // Matrix Functions.
@@ -1431,109 +1449,7 @@
         }
     }
 
-    //
-    // Vector relational functions.
-    //
-    commonBuiltins.append(
-        "bvec2 lessThan(vec2 x, vec2 y);"
-        "bvec3 lessThan(vec3 x, vec3 y);"
-        "bvec4 lessThan(vec4 x, vec4 y);"
-
-        "bvec2 lessThan(ivec2 x, ivec2 y);"
-        "bvec3 lessThan(ivec3 x, ivec3 y);"
-        "bvec4 lessThan(ivec4 x, ivec4 y);"
-
-        "bvec2 lessThanEqual(vec2 x, vec2 y);"
-        "bvec3 lessThanEqual(vec3 x, vec3 y);"
-        "bvec4 lessThanEqual(vec4 x, vec4 y);"
-
-        "bvec2 lessThanEqual(ivec2 x, ivec2 y);"
-        "bvec3 lessThanEqual(ivec3 x, ivec3 y);"
-        "bvec4 lessThanEqual(ivec4 x, ivec4 y);"
-
-        "bvec2 greaterThan(vec2 x, vec2 y);"
-        "bvec3 greaterThan(vec3 x, vec3 y);"
-        "bvec4 greaterThan(vec4 x, vec4 y);"
-
-        "bvec2 greaterThan(ivec2 x, ivec2 y);"
-        "bvec3 greaterThan(ivec3 x, ivec3 y);"
-        "bvec4 greaterThan(ivec4 x, ivec4 y);"
-
-        "bvec2 greaterThanEqual(vec2 x, vec2 y);"
-        "bvec3 greaterThanEqual(vec3 x, vec3 y);"
-        "bvec4 greaterThanEqual(vec4 x, vec4 y);"
-
-        "bvec2 greaterThanEqual(ivec2 x, ivec2 y);"
-        "bvec3 greaterThanEqual(ivec3 x, ivec3 y);"
-        "bvec4 greaterThanEqual(ivec4 x, ivec4 y);"
-
-        "bvec2 equal(vec2 x, vec2 y);"
-        "bvec3 equal(vec3 x, vec3 y);"
-        "bvec4 equal(vec4 x, vec4 y);"
-
-        "bvec2 equal(ivec2 x, ivec2 y);"
-        "bvec3 equal(ivec3 x, ivec3 y);"
-        "bvec4 equal(ivec4 x, ivec4 y);"
-
-        "bvec2 equal(bvec2 x, bvec2 y);"
-        "bvec3 equal(bvec3 x, bvec3 y);"
-        "bvec4 equal(bvec4 x, bvec4 y);"
-
-        "bvec2 notEqual(vec2 x, vec2 y);"
-        "bvec3 notEqual(vec3 x, vec3 y);"
-        "bvec4 notEqual(vec4 x, vec4 y);"
-
-        "bvec2 notEqual(ivec2 x, ivec2 y);"
-        "bvec3 notEqual(ivec3 x, ivec3 y);"
-        "bvec4 notEqual(ivec4 x, ivec4 y);"
-
-        "bvec2 notEqual(bvec2 x, bvec2 y);"
-        "bvec3 notEqual(bvec3 x, bvec3 y);"
-        "bvec4 notEqual(bvec4 x, bvec4 y);"
-
-        "bool any(bvec2 x);"
-        "bool any(bvec3 x);"
-        "bool any(bvec4 x);"
-
-        "bool all(bvec2 x);"
-        "bool all(bvec3 x);"
-        "bool all(bvec4 x);"
-
-        "bvec2 not(bvec2 x);"
-        "bvec3 not(bvec3 x);"
-        "bvec4 not(bvec4 x);"
-
-        "\n");
-
-    if (version >= 130) {
-        commonBuiltins.append(
-            "bvec2 lessThan(uvec2 x, uvec2 y);"
-            "bvec3 lessThan(uvec3 x, uvec3 y);"
-            "bvec4 lessThan(uvec4 x, uvec4 y);"
-
-            "bvec2 lessThanEqual(uvec2 x, uvec2 y);"
-            "bvec3 lessThanEqual(uvec3 x, uvec3 y);"
-            "bvec4 lessThanEqual(uvec4 x, uvec4 y);"
-
-            "bvec2 greaterThan(uvec2 x, uvec2 y);"
-            "bvec3 greaterThan(uvec3 x, uvec3 y);"
-            "bvec4 greaterThan(uvec4 x, uvec4 y);"
-
-            "bvec2 greaterThanEqual(uvec2 x, uvec2 y);"
-            "bvec3 greaterThanEqual(uvec3 x, uvec3 y);"
-            "bvec4 greaterThanEqual(uvec4 x, uvec4 y);"
-
-            "bvec2 equal(uvec2 x, uvec2 y);"
-            "bvec3 equal(uvec3 x, uvec3 y);"
-            "bvec4 equal(uvec4 x, uvec4 y);"
-
-            "bvec2 notEqual(uvec2 x, uvec2 y);"
-            "bvec3 notEqual(uvec3 x, uvec3 y);"
-            "bvec4 notEqual(uvec4 x, uvec4 y);"
-
-            "\n");
-    }
-
+#ifndef GLSLANG_WEB
     //
     // Original-style texture functions existing in all stages.
     // (Per-stage functions below.)
@@ -1604,6 +1520,16 @@
                 "\n");
             }
             commonBuiltins.append(
+                "highp ivec2 textureSize(__samplerExternal2DY2YEXT, int lod);" // GL_EXT_YUV_target
+                "vec4 texture(__samplerExternal2DY2YEXT, vec2);"               // GL_EXT_YUV_target
+                "vec4 texture(__samplerExternal2DY2YEXT, vec2, float bias);"   // GL_EXT_YUV_target
+                "vec4 textureProj(__samplerExternal2DY2YEXT, vec3);"           // GL_EXT_YUV_target
+                "vec4 textureProj(__samplerExternal2DY2YEXT, vec3, float bias);" // GL_EXT_YUV_target
+                "vec4 textureProj(__samplerExternal2DY2YEXT, vec4);"           // GL_EXT_YUV_target
+                "vec4 textureProj(__samplerExternal2DY2YEXT, vec4, float bias);" // GL_EXT_YUV_target
+                "vec4 texelFetch(__samplerExternal2DY2YEXT sampler, ivec2, int lod);" // GL_EXT_YUV_target
+                "\n");
+            commonBuiltins.append(
                 "vec4 texture2DGradEXT(sampler2D, vec2, vec2, vec2);"      // GL_EXT_shader_texture_lod
                 "vec4 texture2DProjGradEXT(sampler2D, vec3, vec2, vec2);"  // GL_EXT_shader_texture_lod
                 "vec4 texture2DProjGradEXT(sampler2D, vec4, vec2, vec2);"  // GL_EXT_shader_texture_lod
@@ -1863,7 +1789,8 @@
     }
 
     // GL_KHR_shader_subgroup
-    if (spvVersion.vulkan > 0) {
+    if ((profile == EEsProfile && version >= 310) ||
+        (profile != EEsProfile && version >= 140)) {
         commonBuiltins.append(
             "void subgroupBarrier();"
             "void subgroupMemoryBarrier();"
@@ -1873,58 +1800,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"
@@ -1933,1015 +1808,136 @@
             "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"
-
-#ifdef NV_EXTENSIONS
-            "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"
-#endif
-
-            "\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"
-
-
-#ifdef NV_EXTENSIONS
-                "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"
-#endif
-
-                "\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();"
 
             "\n"
             );
-#ifdef NV_EXTENSIONS
         stageBuiltins[EShLangMeshNV].append(
             "void subgroupMemoryBarrierShared();"
             "\n"
@@ -2950,7 +1946,6 @@
             "void subgroupMemoryBarrierShared();"
             "\n"
             );
-#endif
     }
 
     if (profile != EEsProfile && version >= 460) {
@@ -2962,7 +1957,6 @@
             "\n");
     }
 
-#ifdef AMD_EXTENSIONS
     // GL_AMD_shader_ballot
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append(
@@ -3827,12 +2821,13 @@
     }
 
     // GL_AMD_gcn_shader
-    if (profile != EEsProfile && version >= 450) {
+    if (profile != EEsProfile && version >= 440) {
         commonBuiltins.append(
             "float cubeFaceIndexAMD(vec3);"
             "vec2  cubeFaceCoordAMD(vec3);"
             "uint64_t timeAMD();"
 
+            "in int gl_SIMDGroupSizeAMD;"
             "\n");
     }
 
@@ -3858,11 +2853,182 @@
             "\n");
     }
 
-#endif  // AMD_EXTENSIONS
+    if ((profile != EEsProfile && version >= 130) ||
+        (profile == EEsProfile && version >= 300)) {
+        commonBuiltins.append(
+            "uint countLeadingZeros(uint);"
+            "uvec2 countLeadingZeros(uvec2);"
+            "uvec3 countLeadingZeros(uvec3);"
+            "uvec4 countLeadingZeros(uvec4);"
 
+            "uint countTrailingZeros(uint);"
+            "uvec2 countTrailingZeros(uvec2);"
+            "uvec3 countTrailingZeros(uvec3);"
+            "uvec4 countTrailingZeros(uvec4);"
 
-#ifdef NV_EXTENSIONS
-    if ((profile != EEsProfile && version >= 450) || 
+            "uint absoluteDifference(int, int);"
+            "uvec2 absoluteDifference(ivec2, ivec2);"
+            "uvec3 absoluteDifference(ivec3, ivec3);"
+            "uvec4 absoluteDifference(ivec4, ivec4);"
+
+            "uint16_t absoluteDifference(int16_t, int16_t);"
+            "u16vec2 absoluteDifference(i16vec2, i16vec2);"
+            "u16vec3 absoluteDifference(i16vec3, i16vec3);"
+            "u16vec4 absoluteDifference(i16vec4, i16vec4);"
+
+            "uint64_t absoluteDifference(int64_t, int64_t);"
+            "u64vec2 absoluteDifference(i64vec2, i64vec2);"
+            "u64vec3 absoluteDifference(i64vec3, i64vec3);"
+            "u64vec4 absoluteDifference(i64vec4, i64vec4);"
+
+            "uint absoluteDifference(uint, uint);"
+            "uvec2 absoluteDifference(uvec2, uvec2);"
+            "uvec3 absoluteDifference(uvec3, uvec3);"
+            "uvec4 absoluteDifference(uvec4, uvec4);"
+
+            "uint16_t absoluteDifference(uint16_t, uint16_t);"
+            "u16vec2 absoluteDifference(u16vec2, u16vec2);"
+            "u16vec3 absoluteDifference(u16vec3, u16vec3);"
+            "u16vec4 absoluteDifference(u16vec4, u16vec4);"
+
+            "uint64_t absoluteDifference(uint64_t, uint64_t);"
+            "u64vec2 absoluteDifference(u64vec2, u64vec2);"
+            "u64vec3 absoluteDifference(u64vec3, u64vec3);"
+            "u64vec4 absoluteDifference(u64vec4, u64vec4);"
+
+            "int addSaturate(int, int);"
+            "ivec2 addSaturate(ivec2, ivec2);"
+            "ivec3 addSaturate(ivec3, ivec3);"
+            "ivec4 addSaturate(ivec4, ivec4);"
+
+            "int16_t addSaturate(int16_t, int16_t);"
+            "i16vec2 addSaturate(i16vec2, i16vec2);"
+            "i16vec3 addSaturate(i16vec3, i16vec3);"
+            "i16vec4 addSaturate(i16vec4, i16vec4);"
+
+            "int64_t addSaturate(int64_t, int64_t);"
+            "i64vec2 addSaturate(i64vec2, i64vec2);"
+            "i64vec3 addSaturate(i64vec3, i64vec3);"
+            "i64vec4 addSaturate(i64vec4, i64vec4);"
+
+            "uint addSaturate(uint, uint);"
+            "uvec2 addSaturate(uvec2, uvec2);"
+            "uvec3 addSaturate(uvec3, uvec3);"
+            "uvec4 addSaturate(uvec4, uvec4);"
+
+            "uint16_t addSaturate(uint16_t, uint16_t);"
+            "u16vec2 addSaturate(u16vec2, u16vec2);"
+            "u16vec3 addSaturate(u16vec3, u16vec3);"
+            "u16vec4 addSaturate(u16vec4, u16vec4);"
+
+            "uint64_t addSaturate(uint64_t, uint64_t);"
+            "u64vec2 addSaturate(u64vec2, u64vec2);"
+            "u64vec3 addSaturate(u64vec3, u64vec3);"
+            "u64vec4 addSaturate(u64vec4, u64vec4);"
+
+            "int subtractSaturate(int, int);"
+            "ivec2 subtractSaturate(ivec2, ivec2);"
+            "ivec3 subtractSaturate(ivec3, ivec3);"
+            "ivec4 subtractSaturate(ivec4, ivec4);"
+
+            "int16_t subtractSaturate(int16_t, int16_t);"
+            "i16vec2 subtractSaturate(i16vec2, i16vec2);"
+            "i16vec3 subtractSaturate(i16vec3, i16vec3);"
+            "i16vec4 subtractSaturate(i16vec4, i16vec4);"
+
+            "int64_t subtractSaturate(int64_t, int64_t);"
+            "i64vec2 subtractSaturate(i64vec2, i64vec2);"
+            "i64vec3 subtractSaturate(i64vec3, i64vec3);"
+            "i64vec4 subtractSaturate(i64vec4, i64vec4);"
+
+            "uint subtractSaturate(uint, uint);"
+            "uvec2 subtractSaturate(uvec2, uvec2);"
+            "uvec3 subtractSaturate(uvec3, uvec3);"
+            "uvec4 subtractSaturate(uvec4, uvec4);"
+
+            "uint16_t subtractSaturate(uint16_t, uint16_t);"
+            "u16vec2 subtractSaturate(u16vec2, u16vec2);"
+            "u16vec3 subtractSaturate(u16vec3, u16vec3);"
+            "u16vec4 subtractSaturate(u16vec4, u16vec4);"
+
+            "uint64_t subtractSaturate(uint64_t, uint64_t);"
+            "u64vec2 subtractSaturate(u64vec2, u64vec2);"
+            "u64vec3 subtractSaturate(u64vec3, u64vec3);"
+            "u64vec4 subtractSaturate(u64vec4, u64vec4);"
+
+            "int average(int, int);"
+            "ivec2 average(ivec2, ivec2);"
+            "ivec3 average(ivec3, ivec3);"
+            "ivec4 average(ivec4, ivec4);"
+
+            "int16_t average(int16_t, int16_t);"
+            "i16vec2 average(i16vec2, i16vec2);"
+            "i16vec3 average(i16vec3, i16vec3);"
+            "i16vec4 average(i16vec4, i16vec4);"
+
+            "int64_t average(int64_t, int64_t);"
+            "i64vec2 average(i64vec2, i64vec2);"
+            "i64vec3 average(i64vec3, i64vec3);"
+            "i64vec4 average(i64vec4, i64vec4);"
+
+            "uint average(uint, uint);"
+            "uvec2 average(uvec2, uvec2);"
+            "uvec3 average(uvec3, uvec3);"
+            "uvec4 average(uvec4, uvec4);"
+
+            "uint16_t average(uint16_t, uint16_t);"
+            "u16vec2 average(u16vec2, u16vec2);"
+            "u16vec3 average(u16vec3, u16vec3);"
+            "u16vec4 average(u16vec4, u16vec4);"
+
+            "uint64_t average(uint64_t, uint64_t);"
+            "u64vec2 average(u64vec2, u64vec2);"
+            "u64vec3 average(u64vec3, u64vec3);"
+            "u64vec4 average(u64vec4, u64vec4);"
+
+            "int averageRounded(int, int);"
+            "ivec2 averageRounded(ivec2, ivec2);"
+            "ivec3 averageRounded(ivec3, ivec3);"
+            "ivec4 averageRounded(ivec4, ivec4);"
+
+            "int16_t averageRounded(int16_t, int16_t);"
+            "i16vec2 averageRounded(i16vec2, i16vec2);"
+            "i16vec3 averageRounded(i16vec3, i16vec3);"
+            "i16vec4 averageRounded(i16vec4, i16vec4);"
+
+            "int64_t averageRounded(int64_t, int64_t);"
+            "i64vec2 averageRounded(i64vec2, i64vec2);"
+            "i64vec3 averageRounded(i64vec3, i64vec3);"
+            "i64vec4 averageRounded(i64vec4, i64vec4);"
+
+            "uint averageRounded(uint, uint);"
+            "uvec2 averageRounded(uvec2, uvec2);"
+            "uvec3 averageRounded(uvec3, uvec3);"
+            "uvec4 averageRounded(uvec4, uvec4);"
+
+            "uint16_t averageRounded(uint16_t, uint16_t);"
+            "u16vec2 averageRounded(u16vec2, u16vec2);"
+            "u16vec3 averageRounded(u16vec3, u16vec3);"
+            "u16vec4 averageRounded(u16vec4, u16vec4);"
+
+            "uint64_t averageRounded(uint64_t, uint64_t);"
+            "u64vec2 averageRounded(u64vec2, u64vec2);"
+            "u64vec3 averageRounded(u64vec3, u64vec3);"
+            "u64vec4 averageRounded(u64vec4, u64vec4);"
+
+            "int multiply32x16(int, int);"
+            "ivec2 multiply32x16(ivec2, ivec2);"
+            "ivec3 multiply32x16(ivec3, ivec3);"
+            "ivec4 multiply32x16(ivec4, ivec4);"
+
+            "uint multiply32x16(uint, uint);"
+            "uvec2 multiply32x16(uvec2, uvec2);"
+            "uvec3 multiply32x16(uvec3, uvec3);"
+            "uvec4 multiply32x16(uvec4, uvec4);"
+            "\n");
+    }
+
+    if ((profile != EEsProfile && version >= 450) ||
         (profile == EEsProfile && version >= 320)) {
         commonBuiltins.append(
             "struct gl_TextureFootprint2DNV {"
@@ -3895,7 +3061,6 @@
             "\n");
     }
 
-#endif // NV_EXTENSIONS
     // GL_AMD_gpu_shader_half_float/Explicit types
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append(
@@ -4780,7 +3945,7 @@
     //
     // Geometric Functions.
     //
-    if (IncludeLegacy(version, profile, spvVersion))
+    if (spvVersion.vulkan == 0 && IncludeLegacy(version, profile, spvVersion))
         stageBuiltins[EShLangVertex].append("vec4 ftransform();");
 
     //
@@ -4862,6 +4027,7 @@
             "void EndPrimitive();"
             "\n");
     }
+#endif
 
     //============================================================================
     //
@@ -4877,7 +4043,6 @@
         stageBuiltins[EShLangCompute].append(
             "void barrier();"
             );
-#ifdef NV_EXTENSIONS
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
         stageBuiltins[EShLangMeshNV].append(
             "void barrier();"
@@ -4886,23 +4051,26 @@
             "void barrier();"
             );
     }
-#endif
     if ((profile != EEsProfile && version >= 130) || esBarrier)
         commonBuiltins.append(
             "void memoryBarrier();"
             );
     if ((profile != EEsProfile && version >= 420) || esBarrier) {
         commonBuiltins.append(
-            "void memoryBarrierAtomicCounter();"
             "void memoryBarrierBuffer();"
-            "void memoryBarrierImage();"
             );
         stageBuiltins[EShLangCompute].append(
             "void memoryBarrierShared();"
             "void groupMemoryBarrier();"
             );
     }
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
+    if ((profile != EEsProfile && version >= 420) || esBarrier) {
+        if (spvVersion.vulkan == 0) {
+            commonBuiltins.append("void memoryBarrierAtomicCounter();");
+        }
+        commonBuiltins.append("void memoryBarrierImage();");
+    }
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
         stageBuiltins[EShLangMeshNV].append(
             "void memoryBarrierShared();"
@@ -4913,11 +4081,94 @@
             "void groupMemoryBarrier();"
         );
     }
-#endif
 
     commonBuiltins.append("void controlBarrier(int, int, int, int);\n"
                           "void memoryBarrier(int, int, int);\n");
 
+    commonBuiltins.append("void debugPrintfEXT();\n");
+
+    if (profile != EEsProfile && version >= 450) {
+        // coopMatStoreNV perhaps ought to have "out" on the buf parameter, but
+        // adding it introduces undesirable tempArgs on the stack. What we want
+        // is more like "buf" thought of as a pointer value being an in parameter.
+        stageBuiltins[EShLangCompute].append(
+            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent float16_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent float[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n"
+
+            "void coopMatStoreNV(fcoopmatNV m, volatile coherent float16_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(fcoopmatNV m, volatile coherent float[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(fcoopmatNV m, volatile coherent float64_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(fcoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(fcoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(fcoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(fcoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(fcoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(fcoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n"
+
+            "fcoopmatNV coopMatMulAddNV(fcoopmatNV A, fcoopmatNV B, fcoopmatNV C);\n"
+            "void coopMatLoadNV(out icoopmatNV m, volatile coherent int8_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out icoopmatNV m, volatile coherent int16_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out icoopmatNV m, volatile coherent int[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out icoopmatNV m, volatile coherent int64_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out icoopmatNV m, volatile coherent ivec2[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out icoopmatNV m, volatile coherent ivec4[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out icoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out icoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out icoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out icoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out icoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out icoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n"
+
+            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent int8_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent int16_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent int[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent int64_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent ivec2[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent ivec4[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n"
+
+            "void coopMatStoreNV(icoopmatNV m, volatile coherent int8_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(icoopmatNV m, volatile coherent int16_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(icoopmatNV m, volatile coherent int[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(icoopmatNV m, volatile coherent int64_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(icoopmatNV m, volatile coherent ivec2[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(icoopmatNV m, volatile coherent ivec4[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(icoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(icoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(icoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(icoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(icoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(icoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n"
+
+            "void coopMatStoreNV(ucoopmatNV m, volatile coherent int8_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(ucoopmatNV m, volatile coherent int16_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(ucoopmatNV m, volatile coherent int[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(ucoopmatNV m, volatile coherent int64_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(ucoopmatNV m, volatile coherent ivec2[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(ucoopmatNV m, volatile coherent ivec4[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(ucoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(ucoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(ucoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(ucoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(ucoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n"
+            "void coopMatStoreNV(ucoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n"
+
+            "icoopmatNV coopMatMulAddNV(icoopmatNV A, icoopmatNV B, icoopmatNV C);\n"
+            "ucoopmatNV coopMatMulAddNV(ucoopmatNV A, ucoopmatNV B, ucoopmatNV C);\n"
+            );
+    }
+
     //============================================================================
     //
     // Prototypes for built-in functions seen by fragment shaders only.
@@ -4960,9 +4211,6 @@
             "\n");
     }
 
-    stageBuiltins[EShLangFragment].append(derivatives);
-    stageBuiltins[EShLangFragment].append("\n");
-
     // GL_ARB_derivative_control
     if (profile != EEsProfile && version >= 400) {
         stageBuiltins[EShLangFragment].append(derivativeControls);
@@ -4991,7 +4239,14 @@
             "\n");
     }
 
-#ifdef AMD_EXTENSIONS
+    stageBuiltins[EShLangFragment].append(
+        "void beginInvocationInterlockARB(void);"
+        "void endInvocationInterlockARB(void);");
+
+    stageBuiltins[EShLangFragment].append(
+        "bool helperInvocationEXT();"
+        "\n");
+
     // GL_AMD_shader_explicit_vertex_parameter
     if (profile != EEsProfile && version >= 450) {
         stageBuiltins[EShLangFragment].append(
@@ -5042,6 +4297,16 @@
             "\n");
     }
 
+    // GL_ARB_shader_clock & GL_EXT_shader_realtime_clock
+    if (profile != EEsProfile && version >= 450) {
+        commonBuiltins.append(
+            "uvec2 clock2x32ARB();"
+            "uint64_t clockARB();"
+            "uvec2 clockRealtime2x32EXT();"
+            "uint64_t clockRealtimeEXT();"
+            "\n");
+    }
+
     // GL_AMD_shader_fragment_mask
     if (profile != EEsProfile && version >= 450 && spvVersion.vulkan > 0) {
         stageBuiltins[EShLangFragment].append(
@@ -5055,45 +4320,74 @@
 
             "\n");
         }
-#endif
 
-#ifdef NV_EXTENSIONS
-
-    // Builtins for GL_NV_ray_tracing
+    // Builtins for GL_NV_ray_tracing/GL_EXT_ray_tracing/GL_EXT_ray_query
     if (profile != EEsProfile && version >= 460) {
-        stageBuiltins[EShLangRayGenNV].append(
-            "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
-            "void executeCallableNV(uint, int);"
+         commonBuiltins.append("void rayQueryInitializeEXT(rayQueryEXT, accelerationStructureEXT, uint, uint, vec3, float, vec3, float);"
+            "void rayQueryTerminateEXT(rayQueryEXT);"
+            "void rayQueryGenerateIntersectionEXT(rayQueryEXT, float);"
+            "void rayQueryConfirmIntersectionEXT(rayQueryEXT);"
+            "bool rayQueryProceedEXT(rayQueryEXT);"
+            "uint rayQueryGetIntersectionTypeEXT(rayQueryEXT, bool);"
+            "float rayQueryGetRayTMinEXT(rayQueryEXT);"
+            "uint rayQueryGetRayFlagsEXT(rayQueryEXT);"
+            "vec3 rayQueryGetWorldRayOriginEXT(rayQueryEXT);"
+            "vec3 rayQueryGetWorldRayDirectionEXT(rayQueryEXT);"
+            "float rayQueryGetIntersectionTEXT(rayQueryEXT, bool);"
+            "int rayQueryGetIntersectionInstanceCustomIndexEXT(rayQueryEXT, bool);"
+            "int rayQueryGetIntersectionInstanceIdEXT(rayQueryEXT, bool);"
+            "uint rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQueryEXT, bool);"
+            "int rayQueryGetIntersectionGeometryIndexEXT(rayQueryEXT, bool);"
+            "int rayQueryGetIntersectionPrimitiveIndexEXT(rayQueryEXT, bool);"
+            "vec2 rayQueryGetIntersectionBarycentricsEXT(rayQueryEXT, bool);"
+            "bool rayQueryGetIntersectionFrontFaceEXT(rayQueryEXT, bool);"
+            "bool rayQueryGetIntersectionCandidateAABBOpaqueEXT(rayQueryEXT);"
+            "vec3 rayQueryGetIntersectionObjectRayDirectionEXT(rayQueryEXT, bool);"
+            "vec3 rayQueryGetIntersectionObjectRayOriginEXT(rayQueryEXT, bool);"
+            "mat4x3 rayQueryGetIntersectionObjectToWorldEXT(rayQueryEXT, bool);"
+            "mat4x3 rayQueryGetIntersectionWorldToObjectEXT(rayQueryEXT, bool);"
             "\n");
-        stageBuiltins[EShLangIntersectNV].append(
+
+        stageBuiltins[EShLangRayGen].append(
+            "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
+            "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
+            "void executeCallableNV(uint, int);"
+            "void executeCallableEXT(uint, int);"
+            "\n");
+        stageBuiltins[EShLangIntersect].append(
             "bool reportIntersectionNV(float, uint);"
+            "bool reportIntersectionEXT(float, uint);"
             "\n");
-        stageBuiltins[EShLangAnyHitNV].append(
+        stageBuiltins[EShLangAnyHit].append(
             "void ignoreIntersectionNV();"
+            "void ignoreIntersectionEXT();"
             "void terminateRayNV();"
+            "void terminateRayEXT();"
             "\n");
-        stageBuiltins[EShLangClosestHitNV].append(
+        stageBuiltins[EShLangClosestHit].append(
             "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
+            "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
             "void executeCallableNV(uint, int);"
+            "void executeCallableEXT(uint, int);"
             "\n");
-        stageBuiltins[EShLangMissNV].append(
+        stageBuiltins[EShLangMiss].append(
             "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
+            "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
             "void executeCallableNV(uint, int);"
+            "void executeCallableEXT(uint, int);"
             "\n");
-        stageBuiltins[EShLangCallableNV].append(
+        stageBuiltins[EShLangCallable].append(
             "void executeCallableNV(uint, int);"
+            "void executeCallableEXT(uint, int);"
             "\n");
     }
 
     //E_SPV_NV_compute_shader_derivatives
-    
-    stageBuiltins[EShLangCompute].append(derivatives);
-    stageBuiltins[EShLangCompute].append(derivativeControls);
-    stageBuiltins[EShLangCompute].append("\n");
-    
-
+    if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450)) {
+        stageBuiltins[EShLangCompute].append(derivativeControls);
+        stageBuiltins[EShLangCompute].append("\n");
+    }
     if (profile != EEsProfile && version >= 450) {
-
         stageBuiltins[EShLangCompute].append(derivativesAndControl16bits);
         stageBuiltins[EShLangCompute].append(derivativesAndControl64bits);
         stageBuiltins[EShLangCompute].append("\n");
@@ -5103,7 +4397,7 @@
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
         stageBuiltins[EShLangMeshNV].append(
             "void writePackedPrimitiveIndices4x8NV(uint, uint);"
-            "\n");   
+            "\n");
     }
 #endif
 
@@ -5127,11 +4421,13 @@
                 "highp float diff;"   // f - n
                 );
         } else {
+#ifndef GLSLANG_WEB
             commonBuiltins.append(
                 "float near;"  // n
                 "float far;"   // f
                 "float diff;"  // f - n
                 );
+#endif
         }
 
         commonBuiltins.append(
@@ -5140,6 +4436,7 @@
             "\n");
     }
 
+#ifndef GLSLANG_WEB
     if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) {
         //
         // Matrix state. p. 31, 32, 37, 39, 40.
@@ -5257,6 +4554,7 @@
 
             "\n");
     }
+#endif
 
     //============================================================================
     //
@@ -5286,7 +4584,7 @@
             "\n");
     }
 
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
     //============================================================================
     //
     // Define the interface to the mesh/task shader.
@@ -5347,6 +4645,9 @@
             "in highp uvec3 gl_GlobalInvocationID;"
             "in highp uint gl_LocalInvocationIndex;"
 
+            "in uint gl_MeshViewCountNV;"
+            "in uint gl_MeshViewIndicesNV[4];"
+
             "\n");
     }
 
@@ -5371,7 +4672,6 @@
                 "\n");
         }
     }
-#endif
 
     //============================================================================
     //
@@ -5505,7 +4805,6 @@
                 );
         }
 
-#ifdef NV_EXTENSIONS
         if (version >= 450)
             stageBuiltins[EShLangVertex].append(
                 "out int gl_ViewportMask[];"             // GL_NV_viewport_array2
@@ -5514,8 +4813,6 @@
                 "out vec4 gl_PositionPerViewNV[];"       // GL_NVX_multiview_per_view_attributes
                 "out int  gl_ViewportMaskPerViewNV[];"   // GL_NVX_multiview_per_view_attributes
                 );
-#endif
-
     } else {
         // ES profile
         if (version == 100) {
@@ -5530,15 +4827,19 @@
                     "in highp int gl_InstanceID;"    // needs qualifier fixed later
                     );
             if (spvVersion.vulkan > 0)
+#endif
                 stageBuiltins[EShLangVertex].append(
                     "in highp int gl_VertexIndex;"
                     "in highp int gl_InstanceIndex;"
                     );
+#ifndef GLSLANG_WEB
             if (version < 310)
+#endif
                 stageBuiltins[EShLangVertex].append(
                     "highp vec4  gl_Position;"    // needs qualifier fixed later
                     "highp float gl_PointSize;"   // needs qualifier fixed later
                     );
+#ifndef GLSLANG_WEB
             else
                 stageBuiltins[EShLangVertex].append(
                     "out gl_PerVertex {"
@@ -5590,10 +4891,8 @@
         if (version >= 450)
             stageBuiltins[EShLangGeometry].append(
                 "float gl_CullDistance[];"
-#ifdef NV_EXTENSIONS
                 "vec4 gl_SecondaryPositionNV;"   // GL_NV_stereo_view_rendering
                 "vec4 gl_PositionPerViewNV[];"   // GL_NVX_multiview_per_view_attributes
-#endif
                 );
         stageBuiltins[EShLangGeometry].append(
             "} gl_in[];"
@@ -5639,7 +4938,6 @@
             "in int gl_InvocationID;"
             );
 
-#ifdef NV_EXTENSIONS
         if (version >= 450)
             stageBuiltins[EShLangGeometry].append(
                 "out int gl_ViewportMask[];"               // GL_NV_viewport_array2
@@ -5648,7 +4946,6 @@
                 "out vec4 gl_PositionPerViewNV[];"         // GL_NVX_multiview_per_view_attributes
                 "out int  gl_ViewportMaskPerViewNV[];"     // GL_NVX_multiview_per_view_attributes
             );
-#endif
 
         stageBuiltins[EShLangGeometry].append("\n");
     } else if (profile == EEsProfile && version >= 310) {
@@ -5713,13 +5010,11 @@
         if (version >= 450)
             stageBuiltins[EShLangTessControl].append(
                 "float gl_CullDistance[];"
-#ifdef NV_EXTENSIONS
                 "int  gl_ViewportMask[];"             // GL_NV_viewport_array2
                 "vec4 gl_SecondaryPositionNV;"        // GL_NV_stereo_view_rendering
                 "int  gl_SecondaryViewportMaskNV[];"  // GL_NV_stereo_view_rendering
                 "vec4 gl_PositionPerViewNV[];"        // GL_NVX_multiview_per_view_attributes
                 "int  gl_ViewportMaskPerViewNV[];"    // GL_NVX_multiview_per_view_attributes
-#endif
                 );
         stageBuiltins[EShLangTessControl].append(
             "} gl_out[];"
@@ -5753,7 +5048,14 @@
             "patch out highp float gl_TessLevelOuter[4];"
             "patch out highp float gl_TessLevelInner[2];"
             "patch out highp vec4 gl_BoundingBoxOES[2];"
+            "patch out highp vec4 gl_BoundingBoxEXT[2];"
             "\n");
+        if (profile == EEsProfile && version >= 320) {
+            stageBuiltins[EShLangTessControl].append(
+                "patch out highp vec4 gl_BoundingBox[2];"
+                "\n"
+            );
+        }
     }
 
     if ((profile != EEsProfile && version >= 140) ||
@@ -5811,7 +5113,6 @@
                 "out int gl_Layer;"
                 "\n");
 
-#ifdef NV_EXTENSIONS
         if (version >= 450)
             stageBuiltins[EShLangTessEvaluation].append(
                 "out int  gl_ViewportMask[];"             // GL_NV_viewport_array2
@@ -5820,7 +5121,6 @@
                 "out vec4 gl_PositionPerViewNV[];"        // GL_NVX_multiview_per_view_attributes
                 "out int  gl_ViewportMaskPerViewNV[];"    // GL_NVX_multiview_per_view_attributes
                 );
-#endif
 
     } else if (profile == EEsProfile && version >= 310) {
         // Note:  "in gl_PerVertex {...} gl_in[gl_MaxPatchVertices];" is declared in initialize() below,
@@ -5914,19 +5214,25 @@
                 "flat in int gl_PrimitiveID;"
                 );
 
-        if (version >= 400) {
+        if (version >= 130) { // ARB_sample_shading
             stageBuiltins[EShLangFragment].append(
                 "flat in  int  gl_SampleID;"
                 "     in  vec2 gl_SamplePosition;"
-                "flat in  int  gl_SampleMaskIn[];"
                 "     out int  gl_SampleMask[];"
                 );
-            if (spvVersion.spv == 0)
+
+            if (spvVersion.spv == 0) {
                 stageBuiltins[EShLangFragment].append(
                     "uniform int gl_NumSamples;"
-                    );
+                );
+            }
         }
 
+        if (version >= 400)
+            stageBuiltins[EShLangFragment].append(
+                "flat in  int  gl_SampleMaskIn[];"
+            );
+
         if (version >= 430)
             stageBuiltins[EShLangFragment].append(
                 "flat in int gl_Layer;"
@@ -5945,7 +5251,6 @@
                 "flat in int   gl_FragInvocationCountEXT;"
                 );
 
-#ifdef AMD_EXTENSIONS
         if (version >= 450)
             stageBuiltins[EShLangFragment].append(
                 "in vec2 gl_BaryCoordNoPerspAMD;"
@@ -5956,9 +5261,7 @@
                 "in vec2 gl_BaryCoordSmoothSampleAMD;"
                 "in vec3 gl_BaryCoordPullModelAMD;"
                 );
-#endif
 
-#ifdef NV_EXTENSIONS
         if (version >= 430)
             stageBuiltins[EShLangFragment].append(
                 "in bool gl_FragFullyCoveredNV;"
@@ -5971,7 +5274,6 @@
                 "in vec3 gl_BaryCoordNoPerspNV;"
                 );
 
-#endif
     } else {
         // ES profile
 
@@ -5983,6 +5285,7 @@
                 "mediump vec2 gl_PointCoord;"   // needs qualifier fixed later
                 );
         }
+#endif
         if (version >= 300) {
             stageBuiltins[EShLangFragment].append(
                 "highp   vec4  gl_FragCoord;"    // needs qualifier fixed later
@@ -5991,6 +5294,7 @@
                 "highp   float gl_FragDepth;"    // needs qualifier fixed later
                 );
         }
+#ifndef GLSLANG_WEB
         if (version >= 310) {
             stageBuiltins[EShLangFragment].append(
                 "bool gl_HelperInvocation;"          // needs qualifier fixed later
@@ -6018,7 +5322,6 @@
                 "flat in ivec2 gl_FragSizeEXT;"
                 "flat in int   gl_FragInvocationCountEXT;"
             );
-#ifdef NV_EXTENSIONS
         if (version >= 320)
             stageBuiltins[EShLangFragment].append( // GL_NV_shading_rate_image
                 "flat in ivec2 gl_FragmentSizeNV;"
@@ -6029,17 +5332,19 @@
                 "in vec3 gl_BaryCoordNV;"
                 "in vec3 gl_BaryCoordNoPerspNV;"
                 );
+    }
 #endif
 
-    }
     stageBuiltins[EShLangFragment].append("\n");
 
     if (version >= 130)
         add2ndGenerationSamplingImaging(version, profile, spvVersion);
 
+#ifndef GLSLANG_WEB
+
     // 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;"
@@ -6048,7 +5353,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;"
@@ -6063,10 +5368,8 @@
         stageBuiltins[EShLangGeometry]      .append(ballotDecls);
         stageBuiltins[EShLangCompute]       .append(ballotDecls);
         stageBuiltins[EShLangFragment]      .append(fragmentBallotDecls);
-#ifdef NV_EXTENSIONS
         stageBuiltins[EShLangMeshNV]        .append(ballotDecls);
         stageBuiltins[EShLangTaskNV]        .append(ballotDecls);
-#endif
     }
 
     if ((profile != EEsProfile && version >= 140) ||
@@ -6078,8 +5381,9 @@
     }
 
     // GL_KHR_shader_subgroup
-    if (spvVersion.vulkan > 0) {
-        const char* ballotDecls = 
+    if ((profile == EEsProfile && version >= 310) ||
+        (profile != EEsProfile && version >= 140)) {
+        const char* subgroupDecls =
             "in mediump uint  gl_SubgroupSize;"
             "in mediump uint  gl_SubgroupInvocationID;"
             "in highp   uvec4 gl_SubgroupEqMask;"
@@ -6087,8 +5391,13 @@
             "in highp   uvec4 gl_SubgroupGtMask;"
             "in highp   uvec4 gl_SubgroupLeMask;"
             "in highp   uvec4 gl_SubgroupLtMask;"
+            // GL_NV_shader_sm_builtins
+            "in highp   uint  gl_WarpsPerSMNV;"
+            "in highp   uint  gl_SMCountNV;"
+            "in highp   uint  gl_WarpIDNV;"
+            "in highp   uint  gl_SMIDNV;"
             "\n";
-        const char* fragmentBallotDecls = 
+        const char* fragmentSubgroupDecls =
             "flat in mediump uint  gl_SubgroupSize;"
             "flat in mediump uint  gl_SubgroupInvocationID;"
             "flat in highp   uvec4 gl_SubgroupEqMask;"
@@ -6096,122 +5405,182 @@
             "flat in highp   uvec4 gl_SubgroupGtMask;"
             "flat in highp   uvec4 gl_SubgroupLeMask;"
             "flat in highp   uvec4 gl_SubgroupLtMask;"
+            // GL_NV_shader_sm_builtins
+            "flat in highp   uint  gl_WarpsPerSMNV;"
+            "flat in highp   uint  gl_SMCountNV;"
+            "flat in highp   uint  gl_WarpIDNV;"
+            "flat in highp   uint  gl_SMIDNV;"
             "\n";
-        stageBuiltins[EShLangVertex]        .append(ballotDecls);
-        stageBuiltins[EShLangTessControl]   .append(ballotDecls);
-        stageBuiltins[EShLangTessEvaluation].append(ballotDecls);
-        stageBuiltins[EShLangGeometry]      .append(ballotDecls);
-        stageBuiltins[EShLangCompute]       .append(ballotDecls);
-        stageBuiltins[EShLangFragment]      .append(fragmentBallotDecls);
-#ifdef NV_EXTENSIONS
-        stageBuiltins[EShLangMeshNV]        .append(ballotDecls);
-        stageBuiltins[EShLangTaskNV]        .append(ballotDecls);
-#endif
+        const char* computeSubgroupDecls =
+            "in highp   uint  gl_NumSubgroups;"
+            "in highp   uint  gl_SubgroupID;"
+            "\n";
 
-        stageBuiltins[EShLangCompute].append(
-            "highp   in uint  gl_NumSubgroups;"
-            "highp   in uint  gl_SubgroupID;"
-            "\n");
-#ifdef NV_EXTENSIONS
-        stageBuiltins[EShLangMeshNV].append(
-            "highp   in uint  gl_NumSubgroups;"
-            "highp   in uint  gl_SubgroupID;"
-            "\n");
-        stageBuiltins[EShLangTaskNV].append(
-            "highp   in uint  gl_NumSubgroups;"
-            "highp   in uint  gl_SubgroupID;"
-            "\n");
-#endif
+        stageBuiltins[EShLangVertex]        .append(subgroupDecls);
+        stageBuiltins[EShLangTessControl]   .append(subgroupDecls);
+        stageBuiltins[EShLangTessEvaluation].append(subgroupDecls);
+        stageBuiltins[EShLangGeometry]      .append(subgroupDecls);
+        stageBuiltins[EShLangCompute]       .append(subgroupDecls);
+        stageBuiltins[EShLangCompute]       .append(computeSubgroupDecls);
+        stageBuiltins[EShLangFragment]      .append(fragmentSubgroupDecls);
+        stageBuiltins[EShLangMeshNV]        .append(subgroupDecls);
+        stageBuiltins[EShLangMeshNV]        .append(computeSubgroupDecls);
+        stageBuiltins[EShLangTaskNV]        .append(subgroupDecls);
+        stageBuiltins[EShLangTaskNV]        .append(computeSubgroupDecls);
+        stageBuiltins[EShLangRayGen]        .append(subgroupDecls);
+        stageBuiltins[EShLangIntersect]     .append(subgroupDecls);
+        stageBuiltins[EShLangAnyHit]        .append(subgroupDecls);
+        stageBuiltins[EShLangClosestHit]    .append(subgroupDecls);
+        stageBuiltins[EShLangMiss]          .append(subgroupDecls);
+        stageBuiltins[EShLangCallable]      .append(subgroupDecls);
     }
 
-#ifdef NV_EXTENSIONS
-    // GL_NV_ray_tracing
+    // GL_NV_ray_tracing/GL_EXT_ray_tracing
     if (profile != EEsProfile && version >= 460) {
 
         const char *constRayFlags =
             "const uint gl_RayFlagsNoneNV = 0U;"
+            "const uint gl_RayFlagsNoneEXT = 0U;"
             "const uint gl_RayFlagsOpaqueNV = 1U;"
+            "const uint gl_RayFlagsOpaqueEXT = 1U;"
             "const uint gl_RayFlagsNoOpaqueNV = 2U;"
+            "const uint gl_RayFlagsNoOpaqueEXT = 2U;"
             "const uint gl_RayFlagsTerminateOnFirstHitNV = 4U;"
+            "const uint gl_RayFlagsTerminateOnFirstHitEXT = 4U;"
             "const uint gl_RayFlagsSkipClosestHitShaderNV = 8U;"
+            "const uint gl_RayFlagsSkipClosestHitShaderEXT = 8U;"
             "const uint gl_RayFlagsCullBackFacingTrianglesNV = 16U;"
+            "const uint gl_RayFlagsCullBackFacingTrianglesEXT = 16U;"
             "const uint gl_RayFlagsCullFrontFacingTrianglesNV = 32U;"
+            "const uint gl_RayFlagsCullFrontFacingTrianglesEXT = 32U;"
             "const uint gl_RayFlagsCullOpaqueNV = 64U;"
+            "const uint gl_RayFlagsCullOpaqueEXT = 64U;"
             "const uint gl_RayFlagsCullNoOpaqueNV = 128U;"
+            "const uint gl_RayFlagsCullNoOpaqueEXT = 128U;"
+            "const uint gl_RayFlagsSkipTrianglesEXT = 256U;"
+            "const uint gl_RayFlagsSkipAABBEXT = 512U;"
+            "const uint gl_HitKindFrontFacingTriangleEXT = 254U;"
+            "const uint gl_HitKindBackFacingTriangleEXT = 255U;"
             "\n";
+
+        const char *constRayQueryIntersection =
+            "const uint gl_RayQueryCandidateIntersectionEXT = 0U;"
+            "const uint gl_RayQueryCommittedIntersectionEXT = 1U;"
+            "const uint gl_RayQueryCommittedIntersectionNoneEXT = 0U;"
+            "const uint gl_RayQueryCommittedIntersectionTriangleEXT = 1U;"
+            "const uint gl_RayQueryCommittedIntersectionGeneratedEXT = 2U;"
+            "const uint gl_RayQueryCandidateIntersectionTriangleEXT = 0U;"
+            "const uint gl_RayQueryCandidateIntersectionAABBEXT = 1U;"
+            "\n";
+
         const char *rayGenDecls =
             "in    uvec3  gl_LaunchIDNV;"
+            "in    uvec3  gl_LaunchIDEXT;"
             "in    uvec3  gl_LaunchSizeNV;"
+            "in    uvec3  gl_LaunchSizeEXT;"
             "\n";
         const char *intersectDecls =
             "in    uvec3  gl_LaunchIDNV;"
+            "in    uvec3  gl_LaunchIDEXT;"
             "in    uvec3  gl_LaunchSizeNV;"
+            "in    uvec3  gl_LaunchSizeEXT;"
             "in     int   gl_PrimitiveID;"
             "in     int   gl_InstanceID;"
             "in     int   gl_InstanceCustomIndexNV;"
+            "in     int   gl_InstanceCustomIndexEXT;"
+            "in     int   gl_GeometryIndexEXT;"
             "in    vec3   gl_WorldRayOriginNV;"
+            "in    vec3   gl_WorldRayOriginEXT;"
             "in    vec3   gl_WorldRayDirectionNV;"
+            "in    vec3   gl_WorldRayDirectionEXT;"
             "in    vec3   gl_ObjectRayOriginNV;"
+            "in    vec3   gl_ObjectRayOriginEXT;"
             "in    vec3   gl_ObjectRayDirectionNV;"
+            "in    vec3   gl_ObjectRayDirectionEXT;"
             "in    float  gl_RayTminNV;"
+            "in    float  gl_RayTminEXT;"
             "in    float  gl_RayTmaxNV;"
+            "in    float  gl_RayTmaxEXT;"
             "in    mat4x3 gl_ObjectToWorldNV;"
+            "in    mat4x3 gl_ObjectToWorldEXT;"
+            "in    mat3x4 gl_ObjectToWorld3x4EXT;"
             "in    mat4x3 gl_WorldToObjectNV;"
+            "in    mat4x3 gl_WorldToObjectEXT;"
+            "in    mat3x4 gl_WorldToObject3x4EXT;"
             "in    uint   gl_IncomingRayFlagsNV;"
+            "in    uint   gl_IncomingRayFlagsEXT;"
             "\n";
         const char *hitDecls =
             "in    uvec3  gl_LaunchIDNV;"
+            "in    uvec3  gl_LaunchIDEXT;"
             "in    uvec3  gl_LaunchSizeNV;"
+            "in    uvec3  gl_LaunchSizeEXT;"
             "in     int   gl_PrimitiveID;"
             "in     int   gl_InstanceID;"
             "in     int   gl_InstanceCustomIndexNV;"
+            "in     int   gl_InstanceCustomIndexEXT;"
+            "in     int   gl_GeometryIndexEXT;"
             "in    vec3   gl_WorldRayOriginNV;"
+            "in    vec3   gl_WorldRayOriginEXT;"
             "in    vec3   gl_WorldRayDirectionNV;"
+            "in    vec3   gl_WorldRayDirectionEXT;"
             "in    vec3   gl_ObjectRayOriginNV;"
+            "in    vec3   gl_ObjectRayOriginEXT;"
             "in    vec3   gl_ObjectRayDirectionNV;"
+            "in    vec3   gl_ObjectRayDirectionEXT;"
             "in    float  gl_RayTminNV;"
+            "in    float  gl_RayTminEXT;"
             "in    float  gl_RayTmaxNV;"
+            "in    float  gl_RayTmaxEXT;"
             "in    float  gl_HitTNV;"
+            "in    float  gl_HitTEXT;"
             "in    uint   gl_HitKindNV;"
+            "in    uint   gl_HitKindEXT;"
             "in    mat4x3 gl_ObjectToWorldNV;"
+            "in    mat4x3 gl_ObjectToWorldEXT;"
+            "in    mat3x4 gl_ObjectToWorld3x4EXT;"
             "in    mat4x3 gl_WorldToObjectNV;"
+            "in    mat4x3 gl_WorldToObjectEXT;"
+            "in    mat3x4 gl_WorldToObject3x4EXT;"
             "in    uint   gl_IncomingRayFlagsNV;"
+            "in    uint   gl_IncomingRayFlagsEXT;"
             "\n";
         const char *missDecls =
             "in    uvec3  gl_LaunchIDNV;"
+            "in    uvec3  gl_LaunchIDEXT;"
             "in    uvec3  gl_LaunchSizeNV;"
+            "in    uvec3  gl_LaunchSizeEXT;"
             "in    vec3   gl_WorldRayOriginNV;"
+            "in    vec3   gl_WorldRayOriginEXT;"
             "in    vec3   gl_WorldRayDirectionNV;"
+            "in    vec3   gl_WorldRayDirectionEXT;"
             "in    vec3   gl_ObjectRayOriginNV;"
             "in    vec3   gl_ObjectRayDirectionNV;"
             "in    float  gl_RayTminNV;"
+            "in    float  gl_RayTminEXT;"
             "in    float  gl_RayTmaxNV;"
+            "in    float  gl_RayTmaxEXT;"
             "in    uint   gl_IncomingRayFlagsNV;"
+            "in    uint   gl_IncomingRayFlagsEXT;"
             "\n";
 
         const char *callableDecls =
             "in    uvec3  gl_LaunchIDNV;"
+            "in    uvec3  gl_LaunchIDEXT;"
             "in    uvec3  gl_LaunchSizeNV;"
-            "in    uint   gl_IncomingRayFlagsNV;"
+            "in    uvec3  gl_LaunchSizeEXT;"
             "\n";
 
-        stageBuiltins[EShLangRayGenNV].append(rayGenDecls);
-        stageBuiltins[EShLangRayGenNV].append(constRayFlags);
 
-        stageBuiltins[EShLangIntersectNV].append(intersectDecls);
-        stageBuiltins[EShLangIntersectNV].append(constRayFlags);
+        commonBuiltins.append(constRayQueryIntersection);
+        commonBuiltins.append(constRayFlags);
 
-        stageBuiltins[EShLangAnyHitNV].append(hitDecls);
-        stageBuiltins[EShLangAnyHitNV].append(constRayFlags);
-
-        stageBuiltins[EShLangClosestHitNV].append(hitDecls);
-        stageBuiltins[EShLangClosestHitNV].append(constRayFlags);
-
-        stageBuiltins[EShLangMissNV].append(missDecls);
-        stageBuiltins[EShLangMissNV].append(constRayFlags);
-
-        stageBuiltins[EShLangCallableNV].append(callableDecls);
-        stageBuiltins[EShLangCallableNV].append(constRayFlags);
+        stageBuiltins[EShLangRayGen].append(rayGenDecls);
+        stageBuiltins[EShLangIntersect].append(intersectDecls);
+        stageBuiltins[EShLangAnyHit].append(hitDecls);
+        stageBuiltins[EShLangClosestHit].append(hitDecls);
+        stageBuiltins[EShLangMiss].append(missDecls);
+        stageBuiltins[EShLangCallable].append(callableDecls);
 
     }
     if ((profile != EEsProfile && version >= 140)) {
@@ -6219,13 +5588,12 @@
             "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
             "\n";
 
-        stageBuiltins[EShLangRayGenNV].append(deviceIndex);
-        stageBuiltins[EShLangIntersectNV].append(deviceIndex);
-        stageBuiltins[EShLangAnyHitNV].append(deviceIndex);
-        stageBuiltins[EShLangClosestHitNV].append(deviceIndex);
-        stageBuiltins[EShLangMissNV].append(deviceIndex);
+        stageBuiltins[EShLangRayGen].append(deviceIndex);
+        stageBuiltins[EShLangIntersect].append(deviceIndex);
+        stageBuiltins[EShLangAnyHit].append(deviceIndex);
+        stageBuiltins[EShLangClosestHit].append(deviceIndex);
+        stageBuiltins[EShLangMiss].append(deviceIndex);
     }
-#endif
 
     if (version >= 300 /* both ES and non-ES */) {
         stageBuiltins[EShLangFragment].append(
@@ -6240,6 +5608,7 @@
         commonBuiltins.append("const int gl_ScopeSubgroup    = 3;\n");
         commonBuiltins.append("const int gl_ScopeInvocation  = 4;\n");
         commonBuiltins.append("const int gl_ScopeQueueFamily = 5;\n");
+        commonBuiltins.append("const int gl_ScopeShaderCallEXT = 6;\n");
 
         commonBuiltins.append("const int gl_SemanticsRelaxed         = 0x0;\n");
         commonBuiltins.append("const int gl_SemanticsAcquire         = 0x2;\n");
@@ -6247,6 +5616,7 @@
         commonBuiltins.append("const int gl_SemanticsAcquireRelease  = 0x8;\n");
         commonBuiltins.append("const int gl_SemanticsMakeAvailable   = 0x2000;\n");
         commonBuiltins.append("const int gl_SemanticsMakeVisible     = 0x4000;\n");
+        commonBuiltins.append("const int gl_SemanticsVolatile        = 0x8000;\n");
 
         commonBuiltins.append("const int gl_StorageSemanticsNone     = 0x0;\n");
         commonBuiltins.append("const int gl_StorageSemanticsBuffer   = 0x40;\n");
@@ -6254,6 +5624,7 @@
         commonBuiltins.append("const int gl_StorageSemanticsImage    = 0x800;\n");
         commonBuiltins.append("const int gl_StorageSemanticsOutput   = 0x1000;\n");
     }
+#endif
 
     // printf("%s\n", commonBuiltins.c_str());
     // printf("%s\n", stageBuiltins[EShLangFragment].c_str());
@@ -6269,19 +5640,27 @@
     // In this function proper, enumerate the types, then calls the next set of functions
     // to enumerate all the uses for that type.
     //
-#ifdef AMD_EXTENSIONS
-    TBasicType bTypes[4] = { EbtFloat, EbtFloat16, EbtInt, EbtUint };
-#else
-    TBasicType bTypes[3] = { EbtFloat, EbtInt, EbtUint };
-#endif
-    bool skipBuffer = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 140);
-    bool skipCubeArrayed = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 130);
 
     // enumerate all the types
-    for (int image = 0; image <= 1; ++image) { // loop over "bool" image vs sampler
-
+#ifdef GLSLANG_WEB
+    const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint };
+    bool skipBuffer = true;
+    bool skipCubeArrayed = true;
+    const int image = 0;
+#else
+    const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint, EbtFloat16 };
+    bool skipBuffer = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 140);
+    bool skipCubeArrayed = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 130);
+    for (int image = 0; image <= 1; ++image) // loop over "bool" image vs sampler
+#endif
+    {
         for (int shadow = 0; shadow <= 1; ++shadow) { // loop over "bool" shadow or not
-            for (int ms = 0; ms <=1; ++ms) {
+#ifdef GLSLANG_WEB
+            const int ms = 0;
+#else
+            for (int ms = 0; ms <= 1; ++ms) // loop over "bool" multisample or not
+#endif
+            {
                 if ((ms || image) && shadow)
                     continue;
                 if (ms && profile != EEsProfile && version < 150)
@@ -6292,7 +5671,16 @@
                     continue;
 
                 for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not
-                    for (int dim = Esd1D; dim < EsdNumDims; ++dim) { // 1D, 2D, ..., buffer
+#ifdef GLSLANG_WEB
+                    for (int dim = Esd2D; dim <= EsdCube; ++dim) { // 2D, 3D, and Cube
+#else
+                    for (int dim = Esd1D; dim < EsdNumDims; ++dim) { // 1D, ..., buffer, subpass
+                        if (dim == EsdSubpass && spvVersion.vulkan == 0)
+                            continue;
+                        if (dim == EsdSubpass && (image || shadow || arrayed))
+                            continue;
+                        if ((dim == Esd1D || dim == EsdRect) && profile == EEsProfile)
+                            continue;
                         if (dim == EsdSubpass && spvVersion.vulkan == 0)
                             continue;
                         if (dim == EsdSubpass && (image || shadow || arrayed))
@@ -6301,43 +5689,41 @@
                             continue;
                         if (dim != Esd2D && dim != EsdSubpass && ms)
                             continue;
-                        if ((dim == Esd3D || dim == EsdRect) && arrayed)
-                            continue;
-                        if (dim == Esd3D && shadow)
-                            continue;
-                        if (dim == EsdCube && arrayed && skipCubeArrayed)
-                            continue;
                         if (dim == EsdBuffer && skipBuffer)
                             continue;
                         if (dim == EsdBuffer && (shadow || arrayed || ms))
                             continue;
                         if (ms && arrayed && profile == EEsProfile && version < 310)
                             continue;
-#ifdef AMD_EXTENSIONS
-                        for (int bType = 0; bType < 4; ++bType) { // float, float16, int, uint results
+#endif
+                        if (dim == Esd3D && shadow)
+                            continue;
+                        if (dim == EsdCube && arrayed && skipCubeArrayed)
+                            continue;
+                        if ((dim == Esd3D || dim == EsdRect) && arrayed)
+                            continue;
 
-                            if (shadow && bType > 1)
+                        // Loop over the bTypes
+                        for (size_t bType = 0; bType < sizeof(bTypes)/sizeof(TBasicType); ++bType) {
+#ifndef GLSLANG_WEB
+                            if (bTypes[bType] == EbtFloat16 && (profile == EEsProfile || version < 450))
                                 continue;
-
-                            if (bTypes[bType] == EbtFloat16 && (profile == EEsProfile ||version < 450))
-                                continue;
-#else
-                        for (int bType = 0; bType < 3; ++bType) { // float, int, uint results
-
-                            if (shadow && bType > 0)
+                            if (dim == EsdRect && version < 140 && bType > 0)
                                 continue;
 #endif
-                            if (dim == EsdRect && version < 140 && bType > 0)
+                            if (shadow && (bTypes[bType] == EbtInt || bTypes[bType] == EbtUint))
                                 continue;
 
                             //
                             // Now, make all the function prototypes for the type we just built...
                             //
-
                             TSampler sampler;
+#ifndef GLSLANG_WEB
                             if (dim == EsdSubpass) {
                                 sampler.setSubpass(bTypes[bType], ms ? true : false);
-                            } else if (image) {
+                            } else
+#endif
+                            if (image) {
                                 sampler.setImage(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false,
                                                                                   shadow  ? true : false,
                                                                                   ms      ? true : false);
@@ -6349,10 +5735,12 @@
 
                             TString typeName = sampler.getString();
 
+#ifndef GLSLANG_WEB
                             if (dim == EsdSubpass) {
                                 addSubpassSampling(sampler, typeName, version, profile);
                                 continue;
                             }
+#endif
 
                             addQueryFunctions(sampler, typeName, version, profile);
 
@@ -6360,8 +5748,8 @@
                                 addImageFunctions(sampler, typeName, version, profile);
                             else {
                                 addSamplingFunctions(sampler, typeName, version, profile);
+#ifndef GLSLANG_WEB
                                 addGatherFunctions(sampler, typeName, version, profile);
-
                                 if (spvVersion.vulkan > 0 && sampler.isCombined() && !sampler.shadow) {
                                     // Base Vulkan allows texelFetch() for
                                     // textureBuffer (i.e. without sampler).
@@ -6376,6 +5764,7 @@
                                     addSamplingFunctions(sampler, textureTypeName, version, profile);
                                     addQueryFunctions(sampler, textureTypeName, version, profile);
                                 }
+#endif
                             }
                         }
                     }
@@ -6387,7 +5776,6 @@
     //
     // sparseTexelsResidentARB()
     //
-
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append("bool sparseTexelsResidentARB(int code);\n");
     }
@@ -6401,14 +5789,25 @@
 //
 void TBuiltIns::addQueryFunctions(TSampler sampler, const TString& typeName, int version, EProfile profile)
 {
-    if (sampler.image && ((profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 430)))
-        return;
-
     //
     // textureSize() and imageSize()
     //
 
     int sizeDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0) - (sampler.dim == EsdCube ? 1 : 0);
+
+#ifdef GLSLANG_WEB
+    commonBuiltins.append("highp ");
+    commonBuiltins.append("ivec");
+    commonBuiltins.append(postfixes[sizeDims]);
+    commonBuiltins.append(" textureSize(");
+    commonBuiltins.append(typeName);
+    commonBuiltins.append(",int);\n");
+    return;
+#endif
+
+    if (sampler.isImage() && ((profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 420)))
+        return;
+
     if (profile == EEsProfile)
         commonBuiltins.append("highp ");
     if (sizeDims == 1)
@@ -6417,12 +5816,12 @@
         commonBuiltins.append("ivec");
         commonBuiltins.append(postfixes[sizeDims]);
     }
-    if (sampler.image)
+    if (sampler.isImage())
         commonBuiltins.append(" imageSize(readonly writeonly volatile coherent ");
     else
         commonBuiltins.append(" textureSize(");
     commonBuiltins.append(typeName);
-    if (! sampler.image && sampler.dim != EsdRect && sampler.dim != EsdBuffer && ! sampler.ms)
+    if (! sampler.isImage() && ! sampler.isRect() && ! sampler.isBuffer() && ! sampler.isMultiSample())
         commonBuiltins.append(",int);\n");
     else
         commonBuiltins.append(");\n");
@@ -6433,9 +5832,9 @@
 
     // GL_ARB_shader_texture_image_samples
     // TODO: spec issue? there are no memory qualifiers; how to query a writeonly/readonly image, etc?
-    if (profile != EEsProfile && version >= 430 && sampler.ms) {
+    if (profile != EEsProfile && version >= 430 && sampler.isMultiSample()) {
         commonBuiltins.append("int ");
-        if (sampler.image)
+        if (sampler.isImage())
             commonBuiltins.append("imageSamples(readonly writeonly volatile coherent ");
         else
             commonBuiltins.append("textureSamples(");
@@ -6447,40 +5846,28 @@
     // textureQueryLod(), fragment stage only
     //
 
-    if (profile != EEsProfile && version >= 400 && sampler.combined && sampler.dim != EsdRect && ! sampler.ms && sampler.dim != EsdBuffer) {
-#ifdef AMD_EXTENSIONS
+    if (profile != EEsProfile && version >= 400 && sampler.isCombined() && sampler.dim != EsdRect &&
+        ! sampler.isMultiSample() && ! sampler.isBuffer()) {
         for (int f16TexAddr = 0; f16TexAddr < 2; ++f16TexAddr) {
             if (f16TexAddr && sampler.type != EbtFloat16)
                 continue;
-#endif
             stageBuiltins[EShLangFragment].append("vec2 textureQueryLod(");
             stageBuiltins[EShLangFragment].append(typeName);
             if (dimMap[sampler.dim] == 1)
-#ifdef AMD_EXTENSIONS
                 if (f16TexAddr)
                     stageBuiltins[EShLangFragment].append(", float16_t");
                 else
                     stageBuiltins[EShLangFragment].append(", float");
-#else
-                stageBuiltins[EShLangFragment].append(", float");
-#endif
             else {
-#ifdef AMD_EXTENSIONS
                 if (f16TexAddr)
                     stageBuiltins[EShLangFragment].append(", f16vec");
                 else
                     stageBuiltins[EShLangFragment].append(", vec");
-#else
-                stageBuiltins[EShLangFragment].append(", vec");
-#endif
                 stageBuiltins[EShLangFragment].append(postfixes[dimMap[sampler.dim]]);
             }
             stageBuiltins[EShLangFragment].append(");\n");
-#ifdef AMD_EXTENSIONS
         }
-#endif
 
-#ifdef NV_EXTENSIONS
         stageBuiltins[EShLangCompute].append("vec2 textureQueryLod(");
         stageBuiltins[EShLangCompute].append(typeName);
         if (dimMap[sampler.dim] == 1)
@@ -6490,14 +5877,14 @@
             stageBuiltins[EShLangCompute].append(postfixes[dimMap[sampler.dim]]);
         }
         stageBuiltins[EShLangCompute].append(");\n");
-#endif
     }
 
     //
     // textureQueryLevels()
     //
 
-    if (profile != EEsProfile && version >= 430 && ! sampler.image && sampler.dim != EsdRect && ! sampler.ms && sampler.dim != EsdBuffer) {
+    if (profile != EEsProfile && version >= 430 && ! sampler.isImage() && sampler.dim != EsdRect &&
+        ! sampler.isMultiSample() && ! sampler.isBuffer()) {
         commonBuiltins.append("int textureQueryLevels(");
         commonBuiltins.append(typeName);
         commonBuiltins.append(");\n");
@@ -6524,7 +5911,7 @@
         imageParams.append(", ivec");
         imageParams.append(postfixes[dims]);
     }
-    if (sampler.ms)
+    if (sampler.isMultiSample())
         imageParams.append(", int");
 
     if (profile == EEsProfile)
@@ -6540,7 +5927,7 @@
     commonBuiltins.append(prefixes[sampler.type]);
     commonBuiltins.append("vec4);\n");
 
-    if (sampler.dim != Esd1D && sampler.dim != EsdBuffer && profile != EEsProfile && version >= 450) {
+    if (! sampler.is1D() && ! sampler.isBuffer() && profile != EEsProfile && version >= 450) {
         commonBuiltins.append("int sparseImageLoadARB(readonly volatile coherent ");
         commonBuiltins.append(imageParams);
         commonBuiltins.append(", out ");
@@ -6617,8 +6004,7 @@
         }
     }
 
-#ifdef AMD_EXTENSIONS
-    if (sampler.dim == EsdRect || sampler.dim == EsdBuffer || sampler.shadow || sampler.ms)
+    if (sampler.dim == EsdRect || sampler.dim == EsdBuffer || sampler.shadow || sampler.isMultiSample())
         return;
 
     if (profile == EEsProfile || version < 450)
@@ -6644,7 +6030,7 @@
     commonBuiltins.append(prefixes[sampler.type]);
     commonBuiltins.append("vec4);\n");
 
-    if (sampler.dim != Esd1D) {
+    if (! sampler.is1D()) {
         commonBuiltins.append("int sparseImageLoadLodAMD(readonly volatile coherent ");
         commonBuiltins.append(imageLodParams);
         commonBuiltins.append(", out ");
@@ -6652,7 +6038,6 @@
         commonBuiltins.append("vec4");
         commonBuiltins.append(");\n");
     }
-#endif
 }
 
 //
@@ -6667,7 +6052,7 @@
     stageBuiltins[EShLangFragment].append("vec4 subpassLoad");
     stageBuiltins[EShLangFragment].append("(");
     stageBuiltins[EShLangFragment].append(typeName.c_str());
-    if (sampler.ms)
+    if (sampler.isMultiSample())
         stageBuiltins[EShLangFragment].append(", int");
     stageBuiltins[EShLangFragment].append(");\n");
 }
@@ -6680,17 +6065,23 @@
 //
 void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName, int version, EProfile profile)
 {
+#ifdef GLSLANG_WEB
+    profile = EEsProfile;
+    version = 310;
+#endif
+
     //
     // texturing
     //
     for (int proj = 0; proj <= 1; ++proj) { // loop over "bool" projective or not
 
-        if (proj && (sampler.dim == EsdCube || sampler.dim == EsdBuffer || sampler.arrayed || sampler.ms || !sampler.combined))
+        if (proj && (sampler.dim == EsdCube || sampler.isBuffer() || sampler.arrayed || sampler.isMultiSample()
+            || !sampler.isCombined()))
             continue;
 
         for (int lod = 0; lod <= 1; ++lod) {
 
-            if (lod && (sampler.dim == EsdBuffer || sampler.dim == EsdRect || sampler.ms || !sampler.combined))
+            if (lod && (sampler.isBuffer() || sampler.isRect() || sampler.isMultiSample() || !sampler.isCombined()))
                 continue;
             if (lod && sampler.dim == Esd2D && sampler.arrayed && sampler.shadow)
                 continue;
@@ -6699,18 +6090,18 @@
 
             for (int bias = 0; bias <= 1; ++bias) {
 
-                if (bias && (lod || sampler.ms || !sampler.combined))
+                if (bias && (lod || sampler.isMultiSample() || !sampler.isCombined()))
                     continue;
                 if (bias && (sampler.dim == Esd2D || sampler.dim == EsdCube) && sampler.shadow && sampler.arrayed)
                     continue;
-                if (bias && (sampler.dim == EsdRect || sampler.dim == EsdBuffer))
+                if (bias && (sampler.isRect() || sampler.isBuffer()))
                     continue;
 
                 for (int offset = 0; offset <= 1; ++offset) { // loop over "bool" offset or not
 
                     if (proj + offset + bias + lod > 3)
                         continue;
-                    if (offset && (sampler.dim == EsdCube || sampler.dim == EsdBuffer || sampler.ms))
+                    if (offset && (sampler.dim == EsdCube || sampler.isBuffer() || sampler.isMultiSample()))
                         continue;
 
                     for (int fetch = 0; fetch <= 1; ++fetch) { // loop over "bool" fetch or not
@@ -6721,14 +6112,15 @@
                             continue;
                         if (fetch && (sampler.shadow || sampler.dim == EsdCube))
                             continue;
-                        if (fetch == 0 && (sampler.ms || sampler.dim == EsdBuffer || !sampler.combined))
+                        if (fetch == 0 && (sampler.isMultiSample() || sampler.isBuffer()
+                            || !sampler.isCombined()))
                             continue;
 
                         for (int grad = 0; grad <= 1; ++grad) { // loop over "bool" grad or not
 
-                            if (grad && (lod || bias || sampler.ms || !sampler.combined))
+                            if (grad && (lod || bias || sampler.isMultiSample() || !sampler.isCombined()))
                                 continue;
-                            if (grad && sampler.dim == EsdBuffer)
+                            if (grad && sampler.isBuffer())
                                 continue;
                             if (proj + offset + fetch + grad + bias + lod > 3)
                                 continue;
@@ -6748,31 +6140,46 @@
 
                                 if (extraProj && ! proj)
                                     continue;
-                                if (extraProj && (sampler.dim == Esd3D || sampler.shadow || !sampler.combined))
+                                if (extraProj && (sampler.dim == Esd3D || sampler.shadow || !sampler.isCombined()))
                                     continue;
-#ifdef AMD_EXTENSIONS
-                                for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr) { // loop over 16-bit floating-point texel addressing
 
+                                // loop over 16-bit floating-point texel addressing
+#ifdef GLSLANG_WEB
+                                const int f16TexAddr = 0;
+#else
+                                for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr)
+#endif
+                                {
                                     if (f16TexAddr && sampler.type != EbtFloat16)
                                         continue;
                                     if (f16TexAddr && sampler.shadow && ! compare) {
                                         compare = true; // compare argument is always present
                                         totalDims--;
                                     }
+                                    // loop over "bool" lod clamp
+#ifdef GLSLANG_WEB
+                                    const int lodClamp = 0;
+#else
+                                    for (int lodClamp = 0; lodClamp <= 1 ;++lodClamp)
 #endif
-                                    for (int lodClamp = 0; lodClamp <= 1 ;++lodClamp) { // loop over "bool" lod clamp
-
+                                    {
                                         if (lodClamp && (profile == EEsProfile || version < 450))
                                             continue;
                                         if (lodClamp && (proj || lod || fetch))
                                             continue;
 
-                                        for (int sparse = 0; sparse <= 1; ++sparse) { // loop over "bool" sparse or not
-
+                                        // loop over "bool" sparse or not
+#ifdef GLSLANG_WEB
+                                        const int sparse = 0;
+#else
+                                        for (int sparse = 0; sparse <= 1; ++sparse)
+#endif
+                                        {
                                             if (sparse && (profile == EEsProfile || version < 450))
                                                 continue;
-                                            // Sparse sampling is not for 1D/1D array texture, buffer texture, and projective texture
-                                            if (sparse && (sampler.dim == Esd1D || sampler.dim == EsdBuffer || proj))
+                                            // Sparse sampling is not for 1D/1D array texture, buffer texture, and
+                                            // projective texture
+                                            if (sparse && (sampler.is1D() || sampler.isBuffer() || proj))
                                                 continue;
 
                                             TString s;
@@ -6782,14 +6189,10 @@
                                                 s.append("int ");
                                             else {
                                                 if (sampler.shadow)
-#ifdef AMD_EXTENSIONS
                                                     if (sampler.type == EbtFloat16)
                                                         s.append("float16_t ");
                                                     else
                                                         s.append("float ");
-#else
-                                                    s.append("float ");
-#endif
                                                 else {
                                                     s.append(prefixes[sampler.type]);
                                                     s.append("vec4 ");
@@ -6827,7 +6230,6 @@
 
                                             // sampler type
                                             s.append(typeName);
-#ifdef AMD_EXTENSIONS
                                             // P coordinate
                                             if (extraProj) {
                                                 if (f16TexAddr)
@@ -6845,31 +6247,15 @@
                                                     s.append(postfixes[totalDims]);
                                                 }
                                             }
-#else
-                                            // P coordinate
-                                            if (extraProj)
-                                                s.append(",vec4");
-                                            else {
-                                                s.append(",");
-                                                TBasicType t = fetch ? EbtInt : EbtFloat;
-                                                if (totalDims == 1)
-                                                    s.append(TType::getBasicString(t));
-                                                else {
-                                                    s.append(prefixes[t]);
-                                                    s.append("vec");
-                                                    s.append(postfixes[totalDims]);
-                                                }
-                                            }
-#endif
                                             // non-optional compare
                                             if (compare)
                                                 s.append(",float");
 
                                             // non-optional lod argument (lod that's not driven by lod loop) or sample
-                                            if ((fetch && sampler.dim != EsdBuffer && sampler.dim != EsdRect && !sampler.ms) ||
-                                                (sampler.ms && fetch))
+                                            if ((fetch && !sampler.isBuffer() &&
+                                                 !sampler.isRect() && !sampler.isMultiSample())
+                                                 || (sampler.isMultiSample() && fetch))
                                                 s.append(",int");
-#ifdef AMD_EXTENSIONS
                                             // non-optional lod
                                             if (lod) {
                                                 if (f16TexAddr)
@@ -6898,23 +6284,6 @@
                                                     s.append(postfixes[dimMap[sampler.dim]]);
                                                 }
                                             }
-#else
-                                            // non-optional lod
-                                            if (lod)
-                                                s.append(",float");
-
-                                            // gradient arguments
-                                            if (grad) {
-                                                if (dimMap[sampler.dim] == 1)
-                                                    s.append(",float,float");
-                                                else {
-                                                    s.append(",vec");
-                                                    s.append(postfixes[dimMap[sampler.dim]]);
-                                                    s.append(",vec");
-                                                    s.append(postfixes[dimMap[sampler.dim]]);
-                                                }
-                                            }
-#endif
                                             // offset
                                             if (offset) {
                                                 if (dimMap[sampler.dim] == 1)
@@ -6925,7 +6294,6 @@
                                                 }
                                             }
 
-#ifdef AMD_EXTENSIONS
                                             // lod clamp
                                             if (lodClamp) {
                                                 if (f16TexAddr)
@@ -6933,29 +6301,19 @@
                                                 else
                                                     s.append(",float");
                                             }
-#else
-                                            // lod clamp
-                                            if (lodClamp)
-                                                s.append(",float");
-#endif
                                             // texel out (for sparse texture)
                                             if (sparse) {
                                                 s.append(",out ");
                                                 if (sampler.shadow)
-#ifdef AMD_EXTENSIONS
                                                     if (sampler.type == EbtFloat16)
                                                         s.append("float16_t");
                                                     else
                                                         s.append("float");
-#else
-                                                    s.append("float");
-#endif
                                                 else {
                                                     s.append(prefixes[sampler.type]);
                                                     s.append("vec4");
                                                 }
                                             }
-#ifdef AMD_EXTENSIONS
                                             // optional bias
                                             if (bias) {
                                                 if (f16TexAddr)
@@ -6963,27 +6321,18 @@
                                                 else
                                                     s.append(",float");
                                             }
-#else
-                                            // optional bias
-                                            if (bias)
-                                                s.append(",float");
-#endif
                                             s.append(");\n");
 
                                             // Add to the per-language set of built-ins
                                             if (bias || lodClamp) {
                                                 stageBuiltins[EShLangFragment].append(s);
-#ifdef NV_EXTENSIONS
                                                 stageBuiltins[EShLangCompute].append(s);
-#endif
                                             } else
                                                 commonBuiltins.append(s);
 
                                         }
                                     }
-#ifdef AMD_EXTENSIONS
                                 }
-#endif
                             }
                         }
                     }
@@ -7001,6 +6350,11 @@
 //
 void TBuiltIns::addGatherFunctions(TSampler sampler, const TString& typeName, int version, EProfile profile)
 {
+#ifdef GLSLANG_WEB
+    profile = EEsProfile;
+    version = 310;
+#endif
+
     switch (sampler.dim) {
     case Esd2D:
     case EsdRect:
@@ -7010,18 +6364,16 @@
         return;
     }
 
-    if (sampler.ms)
+    if (sampler.isMultiSample())
         return;
 
     if (version < 140 && sampler.dim == EsdRect && sampler.type != EbtFloat)
         return;
 
-#ifdef AMD_EXTENSIONS
     for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr) { // loop over 16-bit floating-point texel addressing
 
         if (f16TexAddr && sampler.type != EbtFloat16)
             continue;
-#endif
         for (int offset = 0; offset < 3; ++offset) { // loop over three forms of offset in the call name:  none, Offset, and Offsets
 
             for (int comp = 0; comp < 2; ++comp) { // loop over presence of comp argument
@@ -7069,14 +6421,10 @@
                     s.append(typeName);
 
                     // P coordinate argument
-#ifdef AMD_EXTENSIONS
                     if (f16TexAddr)
                         s.append(",f16vec");
                     else
                         s.append(",vec");
-#else
-                    s.append(",vec");
-#endif
                     int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0);
                     s.append(postfixes[totalDims]);
 
@@ -7104,14 +6452,11 @@
 
                     s.append(");\n");
                     commonBuiltins.append(s);
-#ifdef AMD_EXTENSIONS
                 }
-#endif
             }
         }
     }
 
-#ifdef AMD_EXTENSIONS
     if (sampler.dim == EsdRect || sampler.shadow)
         return;
 
@@ -7237,7 +6582,6 @@
             }
         }
     }
-#endif
 }
 
 //
@@ -7249,6 +6593,11 @@
 //
 void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language)
 {
+#ifdef GLSLANG_WEB
+    version = 310;
+    profile = EEsProfile;
+#endif
+
     //
     // Initialize the context-dependent (resource-dependent) built-in strings for parsing.
     //
@@ -7260,7 +6609,7 @@
     //============================================================================
 
     TString& s = commonBuiltins;
-    const int maxSize = 80;
+    const int maxSize = 200;
     char builtInConstant[maxSize];
 
     //
@@ -7306,6 +6655,7 @@
             s.append(builtInConstant);
         }
 
+#ifndef GLSLANG_WEB
         if (version >= 310) {
             // geometry
 
@@ -7364,18 +6714,41 @@
                     "in gl_PerVertex {"
                         "highp vec4 gl_Position;"
                         "highp float gl_PointSize;"
-#ifdef NV_EXTENSIONS
                         "highp vec4 gl_SecondaryPositionNV;"  // GL_NV_stereo_view_rendering
                         "highp vec4 gl_PositionPerViewNV[];"  // GL_NVX_multiview_per_view_attributes
-#endif
                     "} gl_in[gl_MaxPatchVertices];"
                     "\n");
             }
         }
 
+        if (version >= 320) {
+            // tessellation
+
+            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlImageUniforms = %d;", resources.maxTessControlImageUniforms);
+            s.append(builtInConstant);
+            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationImageUniforms = %d;", resources.maxTessEvaluationImageUniforms);
+            s.append(builtInConstant);
+            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlAtomicCounters = %d;", resources.maxTessControlAtomicCounters);
+            s.append(builtInConstant);
+            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationAtomicCounters = %d;", resources.maxTessEvaluationAtomicCounters);
+            s.append(builtInConstant);
+            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlAtomicCounterBuffers = %d;", resources.maxTessControlAtomicCounterBuffers);
+            s.append(builtInConstant);
+            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationAtomicCounterBuffers = %d;", resources.maxTessEvaluationAtomicCounterBuffers);
+            s.append(builtInConstant);
+        }
+
     } else {
         // non-ES profile
 
+        if (version > 400) {
+            snprintf(builtInConstant, maxSize, "const int  gl_MaxVertexUniformVectors = %d;", resources.maxVertexUniformVectors);
+            s.append(builtInConstant);
+
+            snprintf(builtInConstant, maxSize, "const int  gl_MaxFragmentUniformVectors = %d;", resources.maxFragmentUniformVectors);
+            s.append(builtInConstant);
+        }
+
         snprintf(builtInConstant, maxSize, "const int  gl_MaxVertexAttribs = %d;", resources.maxVertexAttribs);
         s.append(builtInConstant);
 
@@ -7554,10 +6927,8 @@
                 if (profile != EEsProfile && version >= 450)
                     s.append(
                         "float gl_CullDistance[];"
-#ifdef NV_EXTENSIONS
                         "vec4 gl_SecondaryPositionNV;"  // GL_NV_stereo_view_rendering
                         "vec4 gl_PositionPerViewNV[];"  // GL_NVX_multiview_per_view_attributes
-#endif
                        );
                 s.append(
                     "} gl_in[gl_MaxPatchVertices];"
@@ -7591,8 +6962,29 @@
             snprintf(builtInConstant, maxSize, "const int gl_MaxTransformFeedbackInterleavedComponents = %d;", resources.maxTransformFeedbackInterleavedComponents);
             s.append(builtInConstant);
         }
+#endif
     }
 
+    // compute
+    if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 420)) {
+        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxComputeWorkGroupCount = ivec3(%d,%d,%d);", resources.maxComputeWorkGroupCountX,
+                                                                                                         resources.maxComputeWorkGroupCountY,
+                                                                                                         resources.maxComputeWorkGroupCountZ);
+        s.append(builtInConstant);
+        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxComputeWorkGroupSize = ivec3(%d,%d,%d);", resources.maxComputeWorkGroupSizeX,
+                                                                                                        resources.maxComputeWorkGroupSizeY,
+                                                                                                        resources.maxComputeWorkGroupSizeZ);
+        s.append(builtInConstant);
+
+        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeUniformComponents = %d;", resources.maxComputeUniformComponents);
+        s.append(builtInConstant);
+        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeTextureImageUnits = %d;", resources.maxComputeTextureImageUnits);
+        s.append(builtInConstant);
+
+        s.append("\n");
+    }
+
+#ifndef GLSLANG_WEB
     // images (some in compute below)
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 130)) {
@@ -7608,6 +7000,18 @@
         s.append(builtInConstant);
     }
 
+    // compute
+    if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 420)) {
+        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeImageUniforms = %d;", resources.maxComputeImageUniforms);
+        s.append(builtInConstant);
+        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeAtomicCounters = %d;", resources.maxComputeAtomicCounters);
+        s.append(builtInConstant);
+        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeAtomicCounterBuffers = %d;", resources.maxComputeAtomicCounterBuffers);
+        s.append(builtInConstant);
+
+        s.append("\n");
+    }
+
     // atomic counters (some in compute below)
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 420)) {
@@ -7645,31 +7049,6 @@
         s.append("\n");
     }
 
-    // compute
-    if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 420)) {
-        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxComputeWorkGroupCount = ivec3(%d,%d,%d);", resources.maxComputeWorkGroupCountX,
-                                                                                                         resources.maxComputeWorkGroupCountY,
-                                                                                                         resources.maxComputeWorkGroupCountZ);
-        s.append(builtInConstant);
-        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxComputeWorkGroupSize = ivec3(%d,%d,%d);", resources.maxComputeWorkGroupSizeX,
-                                                                                                        resources.maxComputeWorkGroupSizeY,
-                                                                                                        resources.maxComputeWorkGroupSizeZ);
-        s.append(builtInConstant);
-
-        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeUniformComponents = %d;", resources.maxComputeUniformComponents);
-        s.append(builtInConstant);
-        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeTextureImageUnits = %d;", resources.maxComputeTextureImageUnits);
-        s.append(builtInConstant);
-        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeImageUniforms = %d;", resources.maxComputeImageUniforms);
-        s.append(builtInConstant);
-        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeAtomicCounters = %d;", resources.maxComputeAtomicCounters);
-        s.append(builtInConstant);
-        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeAtomicCounterBuffers = %d;", resources.maxComputeAtomicCounterBuffers);
-        s.append(builtInConstant);
-
-        s.append("\n");
-    }
-
     // GL_ARB_cull_distance
     if (profile != EEsProfile && version >= 450) {
         snprintf(builtInConstant, maxSize, "const int gl_MaxCullDistances = %d;",                resources.maxCullDistances);
@@ -7685,15 +7064,6 @@
         s.append(builtInConstant);
     }
 
-#ifdef AMD_EXTENSIONS
-    // GL_AMD_gcn_shader
-    if (profile != EEsProfile && version >= 450) {
-        snprintf(builtInConstant, maxSize, "const int gl_SIMDGroupSizeAMD = 64;");
-        s.append(builtInConstant);
-    }
-#endif
-
-#ifdef NV_EXTENSIONS
     // SPV_NV_mesh_shader
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
         snprintf(builtInConstant, maxSize, "const int gl_MaxMeshOutputVerticesNV = %d;", resources.maxMeshOutputVerticesNV);
@@ -7737,11 +7107,12 @@
 static void SpecialQualifier(const char* name, TStorageQualifier qualifier, TBuiltInVariable builtIn, TSymbolTable& symbolTable)
 {
     TSymbol* symbol = symbolTable.find(name);
-    if (symbol) {
-        TQualifier& symQualifier = symbol->getWritableType().getQualifier();
-        symQualifier.storage = qualifier;
-        symQualifier.builtIn = builtIn;
-    }
+    if (symbol == nullptr)
+        return;
+
+    TQualifier& symQualifier = symbol->getWritableType().getQualifier();
+    symQualifier.storage = qualifier;
+    symQualifier.builtIn = builtIn;
 }
 
 //
@@ -7757,7 +7128,7 @@
 static void BuiltInVariable(const char* name, TBuiltInVariable builtIn, TSymbolTable& symbolTable)
 {
     TSymbol* symbol = symbolTable.find(name);
-    if (! symbol)
+    if (symbol == nullptr)
         return;
 
     TQualifier& symQualifier = symbol->getWritableType().getQualifier();
@@ -7774,7 +7145,7 @@
 static void BuiltInVariable(const char* blockName, const char* name, TBuiltInVariable builtIn, TSymbolTable& symbolTable)
 {
     TSymbol* symbol = symbolTable.find(blockName);
-    if (! symbol)
+    if (symbol == nullptr)
         return;
 
     TTypeList& structure = *symbol->getWritableType().getWritableStruct();
@@ -7796,6 +7167,11 @@
 //
 void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable)
 {
+#ifdef GLSLANG_WEB
+    version = 310;
+    profile = EEsProfile;
+#endif
+
     //
     // Tag built-in variables and functions with additional qualifier and extension information
     // that cannot be declared with the text strings.
@@ -7810,6 +7186,17 @@
 
     switch(language) {
     case EShLangVertex:
+        if (spvVersion.vulkan > 0) {
+            BuiltInVariable("gl_VertexIndex",   EbvVertexIndex,   symbolTable);
+            BuiltInVariable("gl_InstanceIndex", EbvInstanceIndex, symbolTable);
+        }
+
+#ifndef GLSLANG_WEB
+        if (spvVersion.vulkan == 0) {
+            SpecialQualifier("gl_VertexID",   EvqVertexId,   EbvVertexId,   symbolTable);
+            SpecialQualifier("gl_InstanceID", EvqInstanceId, EbvInstanceId, symbolTable);
+        }
+
         if (profile != EEsProfile) {
             if (version >= 440) {
                 symbolTable.setVariableExtensions("gl_BaseVertexARB",   1, &E_GL_ARB_shader_draw_parameters);
@@ -7836,19 +7223,6 @@
             symbolTable.setFunctionExtensions("readInvocationARB",      1, &E_GL_ARB_shader_ballot);
             symbolTable.setFunctionExtensions("readFirstInvocationARB", 1, &E_GL_ARB_shader_ballot);
 
-            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
-            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
-            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
-            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
-            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
-            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
-
-            if (spvVersion.vulkan > 0)
-                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
-                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
-            else
-                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
-
             if (version >= 430) {
                 symbolTable.setFunctionExtensions("anyInvocationARB",       1, &E_GL_ARB_shader_group_vote);
                 symbolTable.setFunctionExtensions("allInvocationsARB",      1, &E_GL_ARB_shader_group_vote);
@@ -7856,7 +7230,7 @@
             }
         }
 
-#ifdef AMD_EXTENSIONS
+
         if (profile != EEsProfile) {
             symbolTable.setFunctionExtensions("minInvocationsAMD",                1, &E_GL_AMD_shader_ballot);
             symbolTable.setFunctionExtensions("maxInvocationsAMD",                1, &E_GL_AMD_shader_ballot);
@@ -7890,6 +7264,9 @@
         }
 
         if (profile != EEsProfile) {
+            symbolTable.setVariableExtensions("gl_SIMDGroupSizeAMD", 1, &E_GL_AMD_gcn_shader);
+            SpecialQualifier("gl_SIMDGroupSizeAMD", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+
             symbolTable.setFunctionExtensions("cubeFaceIndexAMD", 1, &E_GL_AMD_gcn_shader);
             symbolTable.setFunctionExtensions("cubeFaceCoordAMD", 1, &E_GL_AMD_gcn_shader);
             symbolTable.setFunctionExtensions("timeAMD",          1, &E_GL_AMD_gcn_shader);
@@ -7899,15 +7276,21 @@
             symbolTable.setFunctionExtensions("fragmentMaskFetchAMD", 1, &E_GL_AMD_shader_fragment_mask);
             symbolTable.setFunctionExtensions("fragmentFetchAMD",     1, &E_GL_AMD_shader_fragment_mask);
         }
-#endif
 
-#ifdef NV_EXTENSIONS
+        symbolTable.setFunctionExtensions("countLeadingZeros",  1, &E_GL_INTEL_shader_integer_functions2);
+        symbolTable.setFunctionExtensions("countTrailingZeros", 1, &E_GL_INTEL_shader_integer_functions2);
+        symbolTable.setFunctionExtensions("absoluteDifference", 1, &E_GL_INTEL_shader_integer_functions2);
+        symbolTable.setFunctionExtensions("addSaturate",        1, &E_GL_INTEL_shader_integer_functions2);
+        symbolTable.setFunctionExtensions("subtractSaturate",   1, &E_GL_INTEL_shader_integer_functions2);
+        symbolTable.setFunctionExtensions("average",            1, &E_GL_INTEL_shader_integer_functions2);
+        symbolTable.setFunctionExtensions("averageRounded",     1, &E_GL_INTEL_shader_integer_functions2);
+        symbolTable.setFunctionExtensions("multiply32x16",      1, &E_GL_INTEL_shader_integer_functions2);
+
         symbolTable.setFunctionExtensions("textureFootprintNV",          1, &E_GL_NV_shader_texture_footprint);
         symbolTable.setFunctionExtensions("textureFootprintClampNV",     1, &E_GL_NV_shader_texture_footprint);
         symbolTable.setFunctionExtensions("textureFootprintLodNV",       1, &E_GL_NV_shader_texture_footprint);
         symbolTable.setFunctionExtensions("textureFootprintGradNV",      1, &E_GL_NV_shader_texture_footprint);
         symbolTable.setFunctionExtensions("textureFootprintGradClampNV", 1, &E_GL_NV_shader_texture_footprint);
-#endif
         // Compatibility variables, vertex only
         if (spvVersion.spv == 0) {
             BuiltInVariable("gl_Color",          EbvColor,          symbolTable);
@@ -7948,16 +7331,6 @@
             symbolTable.setFunctionExtensions("imageAtomicCompSwap", 1, &E_GL_OES_shader_image_atomic);
         }
 
-        if (spvVersion.vulkan == 0) {
-            SpecialQualifier("gl_VertexID",   EvqVertexId,   EbvVertexId,   symbolTable);
-            SpecialQualifier("gl_InstanceID", EvqInstanceId, EbvInstanceId, symbolTable);
-        }
-
-        if (spvVersion.vulkan > 0) {
-            BuiltInVariable("gl_VertexIndex",   EbvVertexIndex,   symbolTable);
-            BuiltInVariable("gl_InstanceIndex", EbvInstanceIndex, symbolTable);
-        }
-
         if (version >= 300 /* both ES and non-ES */) {
             symbolTable.setVariableExtensions("gl_ViewID_OVR", Num_OVR_multiview_EXTs, OVR_multiview_EXTs);
             BuiltInVariable("gl_ViewID_OVR", EbvViewIndex, symbolTable);
@@ -7967,32 +7340,41 @@
             symbolTable.setFunctionExtensions("shadow2DEXT",        1, &E_GL_EXT_shadow_samplers);
             symbolTable.setFunctionExtensions("shadow2DProjEXT",    1, &E_GL_EXT_shadow_samplers);
         }
-
         // Fall through
 
     case EShLangTessControl:
         if (profile == EEsProfile && version >= 310) {
+            BuiltInVariable("gl_BoundingBoxEXT", EbvBoundingBox, symbolTable);
+            symbolTable.setVariableExtensions("gl_BoundingBoxEXT", 1,
+                                              &E_GL_EXT_primitive_bounding_box);
             BuiltInVariable("gl_BoundingBoxOES", EbvBoundingBox, symbolTable);
-            if (version < 320)
-                symbolTable.setVariableExtensions("gl_BoundingBoxOES", Num_AEP_primitive_bounding_box,
-                                                  AEP_primitive_bounding_box);
-        }
+            symbolTable.setVariableExtensions("gl_BoundingBoxOES", 1,
+                                              &E_GL_OES_primitive_bounding_box);
 
+            if (version >= 320) {
+                BuiltInVariable("gl_BoundingBox", EbvBoundingBox, symbolTable);
+            }
+        }
         // Fall through
 
     case EShLangTessEvaluation:
     case EShLangGeometry:
+#endif
         SpecialQualifier("gl_Position",   EvqPosition,   EbvPosition,   symbolTable);
         SpecialQualifier("gl_PointSize",  EvqPointSize,  EbvPointSize,  symbolTable);
-        SpecialQualifier("gl_ClipVertex", EvqClipVertex, EbvClipVertex, symbolTable);
 
         BuiltInVariable("gl_in",  "gl_Position",     EbvPosition,     symbolTable);
         BuiltInVariable("gl_in",  "gl_PointSize",    EbvPointSize,    symbolTable);
-        BuiltInVariable("gl_in",  "gl_ClipDistance", EbvClipDistance, symbolTable);
-        BuiltInVariable("gl_in",  "gl_CullDistance", EbvCullDistance, symbolTable);
 
         BuiltInVariable("gl_out", "gl_Position",     EbvPosition,     symbolTable);
         BuiltInVariable("gl_out", "gl_PointSize",    EbvPointSize,    symbolTable);
+
+#ifndef GLSLANG_WEB
+        SpecialQualifier("gl_ClipVertex", EvqClipVertex, EbvClipVertex, symbolTable);
+
+        BuiltInVariable("gl_in",  "gl_ClipDistance", EbvClipDistance, symbolTable);
+        BuiltInVariable("gl_in",  "gl_CullDistance", EbvCullDistance, symbolTable);
+
         BuiltInVariable("gl_out", "gl_ClipDistance", EbvClipDistance, symbolTable);
         BuiltInVariable("gl_out", "gl_CullDistance", EbvCullDistance, symbolTable);
 
@@ -8004,19 +7386,10 @@
         BuiltInVariable("gl_Layer",           EbvLayer,          symbolTable);
         BuiltInVariable("gl_ViewportIndex",   EbvViewportIndex,  symbolTable);
 
-#ifdef NV_EXTENSIONS
         if (language != EShLangGeometry) {
             symbolTable.setVariableExtensions("gl_Layer",         Num_viewportEXTs, viewportEXTs);
             symbolTable.setVariableExtensions("gl_ViewportIndex", Num_viewportEXTs, viewportEXTs);
         }
-#else
-        if (language != EShLangGeometry && version >= 410) {
-            symbolTable.setVariableExtensions("gl_Layer",         1, &E_GL_ARB_shader_viewport_layer_array);
-            symbolTable.setVariableExtensions("gl_ViewportIndex", 1, &E_GL_ARB_shader_viewport_layer_array);
-        }
-#endif
-
-#ifdef NV_EXTENSIONS
         symbolTable.setVariableExtensions("gl_ViewportMask",            1, &E_GL_NV_viewport_array2);
         symbolTable.setVariableExtensions("gl_SecondaryPositionNV",     1, &E_GL_NV_stereo_view_rendering);
         symbolTable.setVariableExtensions("gl_SecondaryViewportMaskNV", 1, &E_GL_NV_stereo_view_rendering);
@@ -8029,16 +7402,24 @@
         BuiltInVariable("gl_PositionPerViewNV",         EbvPositionPerViewNV,       symbolTable);
         BuiltInVariable("gl_ViewportMaskPerViewNV",     EbvViewportMaskPerViewNV,   symbolTable);
 
-        if (language != EShLangVertex) {
+        if (language == EShLangVertex || language == EShLangGeometry) {
+            symbolTable.setVariableExtensions("gl_in", "gl_SecondaryPositionNV", 1, &E_GL_NV_stereo_view_rendering);
+            symbolTable.setVariableExtensions("gl_in", "gl_PositionPerViewNV",   1, &E_GL_NVX_multiview_per_view_attributes);
+
             BuiltInVariable("gl_in", "gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable);
             BuiltInVariable("gl_in", "gl_PositionPerViewNV",   EbvPositionPerViewNV,   symbolTable);
         }
+        symbolTable.setVariableExtensions("gl_out", "gl_ViewportMask",            1, &E_GL_NV_viewport_array2);
+        symbolTable.setVariableExtensions("gl_out", "gl_SecondaryPositionNV",     1, &E_GL_NV_stereo_view_rendering);
+        symbolTable.setVariableExtensions("gl_out", "gl_SecondaryViewportMaskNV", 1, &E_GL_NV_stereo_view_rendering);
+        symbolTable.setVariableExtensions("gl_out", "gl_PositionPerViewNV",       1, &E_GL_NVX_multiview_per_view_attributes);
+        symbolTable.setVariableExtensions("gl_out", "gl_ViewportMaskPerViewNV",   1, &E_GL_NVX_multiview_per_view_attributes);
+
         BuiltInVariable("gl_out", "gl_ViewportMask",            EbvViewportMaskNV,          symbolTable);
         BuiltInVariable("gl_out", "gl_SecondaryPositionNV",     EbvSecondaryPositionNV,     symbolTable);
         BuiltInVariable("gl_out", "gl_SecondaryViewportMaskNV", EbvSecondaryViewportMaskNV, symbolTable);
         BuiltInVariable("gl_out", "gl_PositionPerViewNV",       EbvPositionPerViewNV,       symbolTable);
         BuiltInVariable("gl_out", "gl_ViewportMaskPerViewNV",   EbvViewportMaskPerViewNV,   symbolTable);
-#endif
 
         BuiltInVariable("gl_PatchVerticesIn", EbvPatchVertices,  symbolTable);
         BuiltInVariable("gl_TessLevelOuter",  EbvTessLevelOuter, symbolTable);
@@ -8076,15 +7457,16 @@
 
         // gl_PointSize, when it needs to be tied to an extension, is always a member of a block.
         // (Sometimes with an instance name, sometimes anonymous).
-        // However, the current automatic extension scheme does not work per block member,
-        // so for now check when parsing.
-        //
-        // if (profile == EEsProfile) {
-        //    if (language == EShLangGeometry)
-        //        symbolTable.setVariableExtensions("gl_PointSize", Num_AEP_geometry_point_size, AEP_geometry_point_size);
-        //    else if (language == EShLangTessEvaluation || language == EShLangTessControl)
-        //        symbolTable.setVariableExtensions("gl_PointSize", Num_AEP_tessellation_point_size, AEP_tessellation_point_size);
-        //}
+        if (profile == EEsProfile) {
+            if (language == EShLangGeometry) {
+                symbolTable.setVariableExtensions("gl_PointSize", Num_AEP_geometry_point_size, AEP_geometry_point_size);
+                symbolTable.setVariableExtensions("gl_in", "gl_PointSize", Num_AEP_geometry_point_size, AEP_geometry_point_size);
+            } else if (language == EShLangTessEvaluation || language == EShLangTessControl) {
+                // gl_in tessellation settings of gl_PointSize are in the context-dependent paths
+                symbolTable.setVariableExtensions("gl_PointSize", Num_AEP_tessellation_point_size, AEP_tessellation_point_size);
+                symbolTable.setVariableExtensions("gl_out", "gl_PointSize", Num_AEP_tessellation_point_size, AEP_tessellation_point_size);
+            }
+        }
 
         if ((profile != EEsProfile && version >= 140) ||
             (profile == EEsProfile && version >= 310)) {
@@ -8093,9 +7475,25 @@
             symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
             BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
         }
-        
+
+	if (profile != EEsProfile) {
+            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
+            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
+
+            if (spvVersion.vulkan > 0)
+                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
+                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+            else
+                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
+        }
+
         // GL_KHR_shader_subgroup
-        if (spvVersion.vulkan > 0) {
+        if ((profile == EEsProfile && version >= 310) ||
+            (profile != EEsProfile && version >= 140)) {
             symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
             symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
             symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
@@ -8111,8 +7509,18 @@
             BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
             BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
             BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
-        }
 
+            // GL_NV_shader_sm_builtins
+            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
+            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
+            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
+            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
+            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
+        }
+#endif
         break;
 
     case EShLangFragment:
@@ -8129,6 +7537,7 @@
             }
         }
         SpecialQualifier("gl_FragDepth",        EvqFragDepth,  EbvFragDepth,        symbolTable);
+#ifndef GLSLANG_WEB
         SpecialQualifier("gl_FragDepthEXT",     EvqFragDepth,  EbvFragDepth,        symbolTable);
         SpecialQualifier("gl_HelperInvocation", EvqVaryingIn,  EbvHelperInvocation, symbolTable);
 
@@ -8141,18 +7550,57 @@
             BuiltInVariable("gl_FragStencilRefARB", EbvFragStencilRef, symbolTable);
         }
 
-        if ((profile != EEsProfile && version >= 400) ||
+        if (profile != EEsProfile && version >= 460) {
+            symbolTable.setFunctionExtensions("rayQueryInitializeEXT",                                            1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryTerminateEXT",                                             1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGenerateIntersectionEXT",                                  1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryConfirmIntersectionEXT",                                   1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryProceedEXT",                                               1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionTypeEXT",                                   1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionTEXT",                                      1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetRayFlagsEXT",                                           1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetRayTMinEXT",                                            1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionInstanceCustomIndexEXT",                    1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionInstanceIdEXT",                             1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT", 1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionGeometryIndexEXT",                          1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionPrimitiveIndexEXT",                         1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionBarycentricsEXT",                           1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionFrontFaceEXT",                              1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionCandidateAABBOpaqueEXT",                    1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionObjectRayDirectionEXT",                     1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionObjectRayOriginEXT",                        1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionObjectToWorldEXT",                          1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionWorldToObjectEXT",                          1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetWorldRayOriginEXT",                                     1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetWorldRayDirectionEXT",                                  1, &E_GL_EXT_ray_query);
+            symbolTable.setVariableExtensions("gl_RayFlagsSkipAABBEXT",                         1, &E_GL_EXT_ray_flags_primitive_culling);
+            symbolTable.setVariableExtensions("gl_RayFlagsSkipTrianglesEXT",                    1, &E_GL_EXT_ray_flags_primitive_culling);
+        }
+
+        if ((profile != EEsProfile && version >= 130) ||
             (profile == EEsProfile && version >= 310)) {
-            BuiltInVariable("gl_SampleID",        EbvSampleId,       symbolTable);
-            BuiltInVariable("gl_SamplePosition",  EbvSamplePosition, symbolTable);
-            BuiltInVariable("gl_SampleMaskIn",    EbvSampleMask,     symbolTable);
-            BuiltInVariable("gl_SampleMask",      EbvSampleMask,     symbolTable);
-            if (profile == EEsProfile && version < 320) {
-                symbolTable.setVariableExtensions("gl_SampleID",       1, &E_GL_OES_sample_variables);
-                symbolTable.setVariableExtensions("gl_SamplePosition", 1, &E_GL_OES_sample_variables);
-                symbolTable.setVariableExtensions("gl_SampleMaskIn",   1, &E_GL_OES_sample_variables);
-                symbolTable.setVariableExtensions("gl_SampleMask",     1, &E_GL_OES_sample_variables);
-                symbolTable.setVariableExtensions("gl_NumSamples",     1, &E_GL_OES_sample_variables);
+            BuiltInVariable("gl_SampleID",           EbvSampleId,       symbolTable);
+            BuiltInVariable("gl_SamplePosition",     EbvSamplePosition, symbolTable);
+            BuiltInVariable("gl_SampleMask",         EbvSampleMask,     symbolTable);
+
+            if (profile != EEsProfile && version < 400) {
+                BuiltInVariable("gl_NumSamples",     EbvSampleMask,     symbolTable);
+
+                symbolTable.setVariableExtensions("gl_SampleMask",     1, &E_GL_ARB_sample_shading);
+                symbolTable.setVariableExtensions("gl_SampleID",       1, &E_GL_ARB_sample_shading);
+                symbolTable.setVariableExtensions("gl_SamplePosition", 1, &E_GL_ARB_sample_shading);
+                symbolTable.setVariableExtensions("gl_NumSamples",     1, &E_GL_ARB_sample_shading);
+            } else {
+                BuiltInVariable("gl_SampleMaskIn",    EbvSampleMask,     symbolTable);
+
+                if (profile == EEsProfile && version < 320) {
+                    symbolTable.setVariableExtensions("gl_SampleID", 1, &E_GL_OES_sample_variables);
+                    symbolTable.setVariableExtensions("gl_SamplePosition", 1, &E_GL_OES_sample_variables);
+                    symbolTable.setVariableExtensions("gl_SampleMaskIn", 1, &E_GL_OES_sample_variables);
+                    symbolTable.setVariableExtensions("gl_SampleMask", 1, &E_GL_OES_sample_variables);
+                    symbolTable.setVariableExtensions("gl_NumSamples", 1, &E_GL_OES_sample_variables);
+                }
             }
         }
 
@@ -8283,7 +7731,6 @@
             symbolTable.setFunctionExtensions("textureGradOffsetClampARB",          1, &E_GL_ARB_sparse_texture_clamp);
         }
 
-#ifdef AMD_EXTENSIONS
         // E_GL_AMD_shader_explicit_vertex_parameter
         if (profile != EEsProfile) {
             symbolTable.setVariableExtensions("gl_BaryCoordNoPerspAMD",         1, &E_GL_AMD_shader_explicit_vertex_parameter);
@@ -8321,9 +7768,6 @@
             symbolTable.setFunctionExtensions("imageStoreLodAMD",       1, &E_GL_AMD_shader_image_load_store_lod);
             symbolTable.setFunctionExtensions("sparseImageLoadLodAMD",  1, &E_GL_AMD_shader_image_load_store_lod);
         }
-#endif
-
-#ifdef NV_EXTENSIONS
         if (profile != EEsProfile && version >= 430) {
             symbolTable.setVariableExtensions("gl_FragFullyCoveredNV", 1, &E_GL_NV_conservative_raster_underestimation);
             BuiltInVariable("gl_FragFullyCoveredNV", EbvFragFullyCoveredNV, symbolTable);
@@ -8339,20 +7783,6 @@
             BuiltInVariable("gl_BaryCoordNV",        EbvBaryCoordNV,        symbolTable);
             BuiltInVariable("gl_BaryCoordNoPerspNV", EbvBaryCoordNoPerspNV, symbolTable);
         }
-        if (((profile != EEsProfile && version >= 450) ||
-            (profile == EEsProfile && version >= 320)) &&
-            language == EShLangCompute) {
-            symbolTable.setFunctionExtensions("dFdx",                   1, &E_GL_NV_compute_shader_derivatives);
-            symbolTable.setFunctionExtensions("dFdy",                   1, &E_GL_NV_compute_shader_derivatives);
-            symbolTable.setFunctionExtensions("fwidth",                 1, &E_GL_NV_compute_shader_derivatives);
-            symbolTable.setFunctionExtensions("dFdxFine",               1, &E_GL_NV_compute_shader_derivatives);
-            symbolTable.setFunctionExtensions("dFdyFine",               1, &E_GL_NV_compute_shader_derivatives);
-            symbolTable.setFunctionExtensions("fwidthFine",             1, &E_GL_NV_compute_shader_derivatives);
-            symbolTable.setFunctionExtensions("dFdxCoarse",             1, &E_GL_NV_compute_shader_derivatives);
-            symbolTable.setFunctionExtensions("dFdyCoarse",             1, &E_GL_NV_compute_shader_derivatives);
-            symbolTable.setFunctionExtensions("fwidthCoarse",           1, &E_GL_NV_compute_shader_derivatives);
-        }
-#endif
 
         if ((profile != EEsProfile && version >= 450) ||
             (profile == EEsProfile && version >= 310)) {
@@ -8364,6 +7794,12 @@
 
         symbolTable.setVariableExtensions("gl_FragDepthEXT", 1, &E_GL_EXT_frag_depth);
 
+        symbolTable.setFunctionExtensions("clockARB",     1, &E_GL_ARB_shader_clock);
+        symbolTable.setFunctionExtensions("clock2x32ARB", 1, &E_GL_ARB_shader_clock);
+
+        symbolTable.setFunctionExtensions("clockRealtimeEXT",     1, &E_GL_EXT_shader_realtime_clock);
+        symbolTable.setFunctionExtensions("clockRealtime2x32EXT", 1, &E_GL_EXT_shader_realtime_clock);
+
         if (profile == EEsProfile && version < 320) {
             symbolTable.setVariableExtensions("gl_PrimitiveID",  Num_AEP_geometry_shader, AEP_geometry_shader);
             symbolTable.setVariableExtensions("gl_Layer",        Num_AEP_geometry_shader, AEP_geometry_shader);
@@ -8380,6 +7816,17 @@
             symbolTable.setFunctionExtensions("imageAtomicCompSwap", 1, &E_GL_OES_shader_image_atomic);
         }
 
+        if (profile != EEsProfile && version < 330 ) {
+            symbolTable.setFunctionExtensions("floatBitsToInt", 1, &E_GL_ARB_shader_bit_encoding);
+            symbolTable.setFunctionExtensions("floatBitsToUint", 1, &E_GL_ARB_shader_bit_encoding);
+            symbolTable.setFunctionExtensions("intBitsToFloat", 1, &E_GL_ARB_shader_bit_encoding);
+            symbolTable.setFunctionExtensions("uintBitsToFloat", 1, &E_GL_ARB_shader_bit_encoding);
+        }
+
+        if (profile != EEsProfile && version < 430 ) {
+            symbolTable.setFunctionExtensions("imageSize", 1, &E_GL_ARB_shader_image_size);
+        }
+
         symbolTable.setVariableExtensions("gl_DeviceIndex",  1, &E_GL_EXT_device_group);
         BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
         symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
@@ -8414,7 +7861,8 @@
         }
 
         // GL_KHR_shader_subgroup
-        if (spvVersion.vulkan > 0) {
+        if ((profile == EEsProfile && version >= 310) ||
+            (profile != EEsProfile && version >= 140)) {
             symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
             symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
             symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
@@ -8485,8 +7933,6 @@
             symbolTable.setFunctionExtensions("subgroupQuadSwapHorizontal",      1, &E_GL_KHR_shader_subgroup_quad);
             symbolTable.setFunctionExtensions("subgroupQuadSwapVertical",        1, &E_GL_KHR_shader_subgroup_quad);
             symbolTable.setFunctionExtensions("subgroupQuadSwapDiagonal",        1, &E_GL_KHR_shader_subgroup_quad);
-
-#ifdef NV_EXTENSIONS
             symbolTable.setFunctionExtensions("subgroupPartitionNV",                          1, &E_GL_NV_shader_subgroup_partitioned);
             symbolTable.setFunctionExtensions("subgroupPartitionedAddNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
             symbolTable.setFunctionExtensions("subgroupPartitionedMulNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
@@ -8509,8 +7955,16 @@
             symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveAndNV",            1, &E_GL_NV_shader_subgroup_partitioned);
             symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveOrNV",             1, &E_GL_NV_shader_subgroup_partitioned);
             symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveXorNV",            1, &E_GL_NV_shader_subgroup_partitioned);
-#endif
 
+            // GL_NV_shader_sm_builtins
+            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
+            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
+            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
+            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
+            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
         }
 
         if (profile == EEsProfile) {
@@ -8530,6 +7984,7 @@
             symbolTable.setVariableExtensions("gl_SemanticsAcquireRelease", 1, &E_GL_KHR_memory_scope_semantics);
             symbolTable.setVariableExtensions("gl_SemanticsMakeAvailable",  1, &E_GL_KHR_memory_scope_semantics);
             symbolTable.setVariableExtensions("gl_SemanticsMakeVisible",    1, &E_GL_KHR_memory_scope_semantics);
+            symbolTable.setVariableExtensions("gl_SemanticsVolatile",       1, &E_GL_KHR_memory_scope_semantics);
 
             symbolTable.setVariableExtensions("gl_StorageSemanticsNone",    1, &E_GL_KHR_memory_scope_semantics);
             symbolTable.setVariableExtensions("gl_StorageSemanticsBuffer",  1, &E_GL_KHR_memory_scope_semantics);
@@ -8537,6 +7992,9 @@
             symbolTable.setVariableExtensions("gl_StorageSemanticsImage",   1, &E_GL_KHR_memory_scope_semantics);
             symbolTable.setVariableExtensions("gl_StorageSemanticsOutput",  1, &E_GL_KHR_memory_scope_semantics);
         }
+
+        symbolTable.setFunctionExtensions("helperInvocationEXT",            1, &E_GL_EXT_demote_to_helper_invocation);
+#endif
         break;
 
     case EShLangCompute:
@@ -8546,6 +8004,15 @@
         BuiltInVariable("gl_LocalInvocationID",     EbvLocalInvocationId,    symbolTable);
         BuiltInVariable("gl_GlobalInvocationID",    EbvGlobalInvocationId,   symbolTable);
         BuiltInVariable("gl_LocalInvocationIndex",  EbvLocalInvocationIndex, symbolTable);
+        BuiltInVariable("gl_DeviceIndex",           EbvDeviceIndex,          symbolTable);
+        BuiltInVariable("gl_ViewIndex",             EbvViewIndex,            symbolTable);
+
+#ifndef GLSLANG_WEB
+        if ((profile != EEsProfile && version >= 140) ||
+            (profile == EEsProfile && version >= 310)) {
+            symbolTable.setVariableExtensions("gl_DeviceIndex",  1, &E_GL_EXT_device_group);
+            symbolTable.setVariableExtensions("gl_ViewIndex",    1, &E_GL_EXT_multiview);
+        }
 
         if (profile != EEsProfile && version < 430) {
             symbolTable.setVariableExtensions("gl_NumWorkGroups",        1, &E_GL_ARB_compute_shader);
@@ -8572,6 +8039,7 @@
         }
 
         symbolTable.setFunctionExtensions("controlBarrier",                 1, &E_GL_KHR_memory_scope_semantics);
+        symbolTable.setFunctionExtensions("debugPrintfEXT",                 1, &E_GL_EXT_debug_printf);
 
         // GL_ARB_shader_ballot
         if (profile != EEsProfile) {
@@ -8598,7 +8066,8 @@
         }
 
         // GL_KHR_shader_subgroup
-        if (spvVersion.vulkan > 0) {
+        if ((profile == EEsProfile && version >= 310) ||
+            (profile != EEsProfile && version >= 140)) {
             symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
             symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
             symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
@@ -8614,18 +8083,21 @@
             BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
             BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
             BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
-        }
 
-        if ((profile != EEsProfile && version >= 140) ||
-            (profile == EEsProfile && version >= 310)) {
-            symbolTable.setVariableExtensions("gl_DeviceIndex",  1, &E_GL_EXT_device_group);
-            BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
-            symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
-            BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
+            // GL_NV_shader_sm_builtins
+            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
+            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
+            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
+            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
+            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
         }
 
         // GL_KHR_shader_subgroup
-        if (spvVersion.vulkan > 0) {
+        if ((profile == EEsProfile && version >= 310) ||
+            (profile != EEsProfile && version >= 140)) {
             symbolTable.setVariableExtensions("gl_NumSubgroups", 1, &E_GL_KHR_shader_subgroup_basic);
             symbolTable.setVariableExtensions("gl_SubgroupID",   1, &E_GL_KHR_shader_subgroup_basic);
 
@@ -8634,74 +8106,216 @@
 
             symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
         }
+
+        {
+            const char *coopExt[2] = { E_GL_NV_cooperative_matrix, E_GL_NV_integer_cooperative_matrix };
+            symbolTable.setFunctionExtensions("coopMatLoadNV",   2, coopExt);
+            symbolTable.setFunctionExtensions("coopMatStoreNV",  2, coopExt);
+            symbolTable.setFunctionExtensions("coopMatMulAddNV", 2, coopExt);
+        }
+
+        if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
+            symbolTable.setFunctionExtensions("dFdx",                   1, &E_GL_NV_compute_shader_derivatives);
+            symbolTable.setFunctionExtensions("dFdy",                   1, &E_GL_NV_compute_shader_derivatives);
+            symbolTable.setFunctionExtensions("fwidth",                 1, &E_GL_NV_compute_shader_derivatives);
+            symbolTable.setFunctionExtensions("dFdxFine",               1, &E_GL_NV_compute_shader_derivatives);
+            symbolTable.setFunctionExtensions("dFdyFine",               1, &E_GL_NV_compute_shader_derivatives);
+            symbolTable.setFunctionExtensions("fwidthFine",             1, &E_GL_NV_compute_shader_derivatives);
+            symbolTable.setFunctionExtensions("dFdxCoarse",             1, &E_GL_NV_compute_shader_derivatives);
+            symbolTable.setFunctionExtensions("dFdyCoarse",             1, &E_GL_NV_compute_shader_derivatives);
+            symbolTable.setFunctionExtensions("fwidthCoarse",           1, &E_GL_NV_compute_shader_derivatives);
+        }
+#endif
         break;
-#ifdef NV_EXTENSIONS
-    case EShLangRayGenNV:
-    case EShLangIntersectNV:
-    case EShLangAnyHitNV:
-    case EShLangClosestHitNV:
-    case EShLangMissNV:
-    case EShLangCallableNV:
+
+#ifndef GLSLANG_WEB
+    case EShLangRayGen:
+    case EShLangIntersect:
+    case EShLangAnyHit:
+    case EShLangClosestHit:
+    case EShLangMiss:
+    case EShLangCallable:
         if (profile != EEsProfile && version >= 460) {
+            const char *rtexts[] = { E_GL_NV_ray_tracing, E_GL_EXT_ray_tracing };
             symbolTable.setVariableExtensions("gl_LaunchIDNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_LaunchIDEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_LaunchSizeNV", 1, &E_GL_NV_ray_tracing);
-            symbolTable.setVariableExtensions("gl_PrimitiveID", 1, &E_GL_NV_ray_tracing);
-            symbolTable.setVariableExtensions("gl_InstanceID", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_LaunchSizeEXT", 1, &E_GL_EXT_ray_tracing);
+            symbolTable.setVariableExtensions("gl_PrimitiveID", 2, rtexts);
+            symbolTable.setVariableExtensions("gl_InstanceID", 2, rtexts);
             symbolTable.setVariableExtensions("gl_InstanceCustomIndexNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_InstanceCustomIndexEXT", 1, &E_GL_EXT_ray_tracing);
+            symbolTable.setVariableExtensions("gl_GeometryIndexEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_WorldRayOriginNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_WorldRayOriginEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_WorldRayDirectionNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_WorldRayDirectionEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_ObjectRayOriginNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_ObjectRayOriginEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_ObjectRayDirectionNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_ObjectRayDirectionEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_RayTminNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_RayTminEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_RayTmaxNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_RayTmaxEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_HitTNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_HitTEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_HitKindNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_HitKindEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_ObjectToWorldNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_ObjectToWorldEXT", 1, &E_GL_EXT_ray_tracing);
+            symbolTable.setVariableExtensions("gl_ObjectToWorld3x4EXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_WorldToObjectNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_WorldToObjectEXT", 1, &E_GL_EXT_ray_tracing);
+            symbolTable.setVariableExtensions("gl_WorldToObject3x4EXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_IncomingRayFlagsNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_IncomingRayFlagsEXT", 1, &E_GL_EXT_ray_tracing);
 
             symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
 
-            BuiltInVariable("gl_LaunchIDNV",            EbvLaunchIdNV,           symbolTable);
-            BuiltInVariable("gl_LaunchSizeNV",          EbvLaunchSizeNV,         symbolTable);
-            BuiltInVariable("gl_PrimitiveID",           EbvPrimitiveId,          symbolTable);
-            BuiltInVariable("gl_InstanceID",            EbvInstanceId,           symbolTable);
-            BuiltInVariable("gl_InstanceCustomIndexNV", EbvInstanceCustomIndexNV,symbolTable);
-            BuiltInVariable("gl_WorldRayOriginNV",      EbvWorldRayOriginNV,     symbolTable);
-            BuiltInVariable("gl_WorldRayDirectionNV",   EbvWorldRayDirectionNV,  symbolTable);
-            BuiltInVariable("gl_ObjectRayOriginNV",     EbvObjectRayOriginNV,    symbolTable);
-            BuiltInVariable("gl_ObjectRayDirectionNV",  EbvObjectRayDirectionNV, symbolTable);
-            BuiltInVariable("gl_RayTminNV",             EbvRayTminNV,            symbolTable);
-            BuiltInVariable("gl_RayTmaxNV",             EbvRayTmaxNV,            symbolTable);
-            BuiltInVariable("gl_HitTNV",                EbvHitTNV,               symbolTable);
-            BuiltInVariable("gl_HitKindNV",             EbvHitKindNV,            symbolTable);
-            BuiltInVariable("gl_ObjectToWorldNV",       EbvObjectToWorldNV,      symbolTable);
-            BuiltInVariable("gl_WorldToObjectNV",       EbvWorldToObjectNV,      symbolTable);
-            BuiltInVariable("gl_IncomingRayFlagsNV",    EbvIncomingRayFlagsNV,   symbolTable);
-            BuiltInVariable("gl_DeviceIndex",           EbvDeviceIndex,          symbolTable);
-        } 
+
+            symbolTable.setFunctionExtensions("traceNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setFunctionExtensions("traceRayEXT", 1, &E_GL_EXT_ray_tracing);
+            symbolTable.setFunctionExtensions("reportIntersectionNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setFunctionExtensions("reportIntersectionEXT", 1, &E_GL_EXT_ray_tracing);
+            symbolTable.setFunctionExtensions("ignoreIntersectionNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setFunctionExtensions("ignoreIntersectionEXT", 1, &E_GL_EXT_ray_tracing);
+            symbolTable.setFunctionExtensions("terminateRayNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setFunctionExtensions("terminateRayEXT", 1, &E_GL_EXT_ray_tracing);
+            symbolTable.setFunctionExtensions("executeCallableNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setFunctionExtensions("executeCallableEXT", 1, &E_GL_EXT_ray_tracing);
+
+
+            BuiltInVariable("gl_LaunchIDNV",             EbvLaunchId,           symbolTable);
+            BuiltInVariable("gl_LaunchIDEXT",            EbvLaunchId,           symbolTable);
+            BuiltInVariable("gl_LaunchSizeNV",           EbvLaunchSize,         symbolTable);
+            BuiltInVariable("gl_LaunchSizeEXT",          EbvLaunchSize,         symbolTable);
+            BuiltInVariable("gl_PrimitiveID",            EbvPrimitiveId,        symbolTable);
+            BuiltInVariable("gl_InstanceID",             EbvInstanceId,         symbolTable);
+            BuiltInVariable("gl_InstanceCustomIndexNV",  EbvInstanceCustomIndex,symbolTable);
+            BuiltInVariable("gl_InstanceCustomIndexEXT", EbvInstanceCustomIndex,symbolTable);
+            BuiltInVariable("gl_GeometryIndexEXT",       EbvGeometryIndex,      symbolTable);
+            BuiltInVariable("gl_WorldRayOriginNV",       EbvWorldRayOrigin,     symbolTable);
+            BuiltInVariable("gl_WorldRayOriginEXT",      EbvWorldRayOrigin,     symbolTable);
+            BuiltInVariable("gl_WorldRayDirectionNV",    EbvWorldRayDirection,  symbolTable);
+            BuiltInVariable("gl_WorldRayDirectionEXT",   EbvWorldRayDirection,  symbolTable);
+            BuiltInVariable("gl_ObjectRayOriginNV",      EbvObjectRayOrigin,    symbolTable);
+            BuiltInVariable("gl_ObjectRayOriginEXT",     EbvObjectRayOrigin,    symbolTable);
+            BuiltInVariable("gl_ObjectRayDirectionNV",   EbvObjectRayDirection, symbolTable);
+            BuiltInVariable("gl_ObjectRayDirectionEXT",  EbvObjectRayDirection, symbolTable);
+            BuiltInVariable("gl_RayTminNV",              EbvRayTmin,            symbolTable);
+            BuiltInVariable("gl_RayTminEXT",             EbvRayTmin,            symbolTable);
+            BuiltInVariable("gl_RayTmaxNV",              EbvRayTmax,            symbolTable);
+            BuiltInVariable("gl_RayTmaxEXT",             EbvRayTmax,            symbolTable);
+            BuiltInVariable("gl_HitTNV",                 EbvHitT,               symbolTable);
+            BuiltInVariable("gl_HitTEXT",                EbvHitT,               symbolTable);
+            BuiltInVariable("gl_HitKindNV",              EbvHitKind,            symbolTable);
+            BuiltInVariable("gl_HitKindEXT",             EbvHitKind,            symbolTable);
+            BuiltInVariable("gl_ObjectToWorldNV",        EbvObjectToWorld,      symbolTable);
+            BuiltInVariable("gl_ObjectToWorldEXT",       EbvObjectToWorld,      symbolTable);
+            BuiltInVariable("gl_ObjectToWorld3x4EXT",    EbvObjectToWorld3x4,   symbolTable);
+            BuiltInVariable("gl_WorldToObjectNV",        EbvWorldToObject,      symbolTable);
+            BuiltInVariable("gl_WorldToObjectEXT",       EbvWorldToObject,      symbolTable);
+            BuiltInVariable("gl_WorldToObject3x4EXT",    EbvWorldToObject3x4,   symbolTable);
+            BuiltInVariable("gl_IncomingRayFlagsNV",     EbvIncomingRayFlags,   symbolTable);
+            BuiltInVariable("gl_IncomingRayFlagsEXT",    EbvIncomingRayFlags,   symbolTable);
+            BuiltInVariable("gl_DeviceIndex",            EbvDeviceIndex,        symbolTable);
+
+            // GL_ARB_shader_ballot
+            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
+
+            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
+            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
+
+            if (spvVersion.vulkan > 0)
+                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
+                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+            else
+                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
+
+            // GL_KHR_shader_subgroup
+            symbolTable.setVariableExtensions("gl_NumSubgroups",         1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupID",           1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+
+            BuiltInVariable("gl_NumSubgroups",         EbvNumSubgroups,        symbolTable);
+            BuiltInVariable("gl_SubgroupID",           EbvSubgroupID,          symbolTable);
+            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
+            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
+            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
+
+            // GL_NV_shader_sm_builtins
+            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
+            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
+            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
+            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
+            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
+        }
         break;
+
     case EShLangMeshNV:
         if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
-            // Per-vertex builtins
+            // per-vertex builtins
+            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_Position",     1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_PointSize",    1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_ClipDistance", 1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_CullDistance", 1, &E_GL_NV_mesh_shader);
+
             BuiltInVariable("gl_MeshVerticesNV", "gl_Position",     EbvPosition,     symbolTable);
             BuiltInVariable("gl_MeshVerticesNV", "gl_PointSize",    EbvPointSize,    symbolTable);
             BuiltInVariable("gl_MeshVerticesNV", "gl_ClipDistance", EbvClipDistance, symbolTable);
             BuiltInVariable("gl_MeshVerticesNV", "gl_CullDistance", EbvCullDistance, symbolTable);
-            // Per-view builtins
+
+            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_PositionPerViewNV",     1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_ClipDistancePerViewNV", 1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_CullDistancePerViewNV", 1, &E_GL_NV_mesh_shader);
+
             BuiltInVariable("gl_MeshVerticesNV", "gl_PositionPerViewNV",     EbvPositionPerViewNV,     symbolTable);
             BuiltInVariable("gl_MeshVerticesNV", "gl_ClipDistancePerViewNV", EbvClipDistancePerViewNV, symbolTable);
             BuiltInVariable("gl_MeshVerticesNV", "gl_CullDistancePerViewNV", EbvCullDistancePerViewNV, symbolTable);
 
-            // Per-primitive builtins
+            // per-primitive builtins
+            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_PrimitiveID",   1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_Layer",         1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_ViewportIndex", 1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_ViewportMask",  1, &E_GL_NV_mesh_shader);
+
             BuiltInVariable("gl_MeshPrimitivesNV", "gl_PrimitiveID",   EbvPrimitiveId,    symbolTable);
             BuiltInVariable("gl_MeshPrimitivesNV", "gl_Layer",         EbvLayer,          symbolTable);
             BuiltInVariable("gl_MeshPrimitivesNV", "gl_ViewportIndex", EbvViewportIndex,  symbolTable);
             BuiltInVariable("gl_MeshPrimitivesNV", "gl_ViewportMask",  EbvViewportMaskNV, symbolTable);
-            // Per-view builtins
+
+            // per-view per-primitive builtins
+            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_LayerPerViewNV",        1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_ViewportMaskPerViewNV", 1, &E_GL_NV_mesh_shader);
+
             BuiltInVariable("gl_MeshPrimitivesNV", "gl_LayerPerViewNV",        EbvLayerPerViewNV,        symbolTable);
             BuiltInVariable("gl_MeshPrimitivesNV", "gl_ViewportMaskPerViewNV", EbvViewportMaskPerViewNV, symbolTable);
 
+            // other builtins
             symbolTable.setVariableExtensions("gl_PrimitiveCountNV",     1, &E_GL_NV_mesh_shader);
             symbolTable.setVariableExtensions("gl_PrimitiveIndicesNV",   1, &E_GL_NV_mesh_shader);
             symbolTable.setVariableExtensions("gl_MeshViewCountNV",      1, &E_GL_NV_mesh_shader);
@@ -8722,11 +8336,13 @@
             BuiltInVariable("gl_GlobalInvocationID",   EbvGlobalInvocationId,   symbolTable);
             BuiltInVariable("gl_LocalInvocationIndex", EbvLocalInvocationIndex, symbolTable);
 
+            // builtin constants
             symbolTable.setVariableExtensions("gl_MaxMeshOutputVerticesNV",   1, &E_GL_NV_mesh_shader);
             symbolTable.setVariableExtensions("gl_MaxMeshOutputPrimitivesNV", 1, &E_GL_NV_mesh_shader);
             symbolTable.setVariableExtensions("gl_MaxMeshWorkGroupSizeNV",    1, &E_GL_NV_mesh_shader);
             symbolTable.setVariableExtensions("gl_MaxMeshViewCountNV",        1, &E_GL_NV_mesh_shader);
 
+            // builtin functions
             symbolTable.setFunctionExtensions("barrier",                      1, &E_GL_NV_mesh_shader);
             symbolTable.setFunctionExtensions("memoryBarrierShared",          1, &E_GL_NV_mesh_shader);
             symbolTable.setFunctionExtensions("groupMemoryBarrier",           1, &E_GL_NV_mesh_shader);
@@ -8768,7 +8384,8 @@
         }
 
         // GL_KHR_shader_subgroup
-        if (spvVersion.vulkan > 0) {
+        if ((profile == EEsProfile && version >= 310) ||
+            (profile != EEsProfile && version >= 140)) {
             symbolTable.setVariableExtensions("gl_NumSubgroups",         1, &E_GL_KHR_shader_subgroup_basic);
             symbolTable.setVariableExtensions("gl_SubgroupID",           1, &E_GL_KHR_shader_subgroup_basic);
             symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
@@ -8790,6 +8407,16 @@
             BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
 
             symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
+
+            // GL_NV_shader_sm_builtins
+            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
+            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
+            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
+            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
+            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
         }
         break;
 
@@ -8801,6 +8428,8 @@
             symbolTable.setVariableExtensions("gl_LocalInvocationID",    1, &E_GL_NV_mesh_shader);
             symbolTable.setVariableExtensions("gl_GlobalInvocationID",   1, &E_GL_NV_mesh_shader);
             symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshViewCountNV",      1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshViewIndicesNV",    1, &E_GL_NV_mesh_shader);
 
             BuiltInVariable("gl_TaskCountNV",          EbvTaskCountNV,          symbolTable);
             BuiltInVariable("gl_WorkGroupSize",        EbvWorkGroupSize,        symbolTable);
@@ -8808,8 +8437,11 @@
             BuiltInVariable("gl_LocalInvocationID",    EbvLocalInvocationId,    symbolTable);
             BuiltInVariable("gl_GlobalInvocationID",   EbvGlobalInvocationId,   symbolTable);
             BuiltInVariable("gl_LocalInvocationIndex", EbvLocalInvocationIndex, symbolTable);
+            BuiltInVariable("gl_MeshViewCountNV",      EbvMeshViewCountNV,      symbolTable);
+            BuiltInVariable("gl_MeshViewIndicesNV",    EbvMeshViewIndicesNV,    symbolTable);
 
             symbolTable.setVariableExtensions("gl_MaxTaskWorkGroupSizeNV", 1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MaxMeshViewCountNV",     1, &E_GL_NV_mesh_shader);
 
             symbolTable.setFunctionExtensions("barrier",                   1, &E_GL_NV_mesh_shader);
             symbolTable.setFunctionExtensions("memoryBarrierShared",       1, &E_GL_NV_mesh_shader);
@@ -8852,7 +8484,8 @@
         }
 
         // GL_KHR_shader_subgroup
-        if (spvVersion.vulkan > 0) {
+        if ((profile == EEsProfile && version >= 310) ||
+            (profile != EEsProfile && version >= 140)) {
             symbolTable.setVariableExtensions("gl_NumSubgroups",         1, &E_GL_KHR_shader_subgroup_basic);
             symbolTable.setVariableExtensions("gl_SubgroupID",           1, &E_GL_KHR_shader_subgroup_basic);
             symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
@@ -8874,6 +8507,16 @@
             BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
 
             symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
+
+            // GL_NV_shader_sm_builtins
+            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
+            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
+            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
+            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
+            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
+            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
         }
         break;
 #endif
@@ -8889,74 +8532,10 @@
     // expected to be resolved through a library of functions, versus as
     // operations.
     //
-    symbolTable.relateToOperator("not",              EOpVectorLogicalNot);
 
-    symbolTable.relateToOperator("matrixCompMult",   EOpMul);
-    // 120 and 150 are correct for both ES and desktop
-    if (version >= 120) {
-        symbolTable.relateToOperator("outerProduct", EOpOuterProduct);
-        symbolTable.relateToOperator("transpose", EOpTranspose);
-        if (version >= 150) {
-            symbolTable.relateToOperator("determinant", EOpDeterminant);
-            symbolTable.relateToOperator("inverse", EOpMatrixInverse);
-        }
-    }
+    relateTabledBuiltins(version, profile, spvVersion, language, symbolTable);
 
-    symbolTable.relateToOperator("mod",              EOpMod);
-    symbolTable.relateToOperator("modf",             EOpModf);
-
-    symbolTable.relateToOperator("equal",            EOpVectorEqual);
-    symbolTable.relateToOperator("notEqual",         EOpVectorNotEqual);
-    symbolTable.relateToOperator("lessThan",         EOpLessThan);
-    symbolTable.relateToOperator("greaterThan",      EOpGreaterThan);
-    symbolTable.relateToOperator("lessThanEqual",    EOpLessThanEqual);
-    symbolTable.relateToOperator("greaterThanEqual", EOpGreaterThanEqual);
-
-    symbolTable.relateToOperator("radians",      EOpRadians);
-    symbolTable.relateToOperator("degrees",      EOpDegrees);
-    symbolTable.relateToOperator("sin",          EOpSin);
-    symbolTable.relateToOperator("cos",          EOpCos);
-    symbolTable.relateToOperator("tan",          EOpTan);
-    symbolTable.relateToOperator("asin",         EOpAsin);
-    symbolTable.relateToOperator("acos",         EOpAcos);
-    symbolTable.relateToOperator("atan",         EOpAtan);
-    symbolTable.relateToOperator("sinh",         EOpSinh);
-    symbolTable.relateToOperator("cosh",         EOpCosh);
-    symbolTable.relateToOperator("tanh",         EOpTanh);
-    symbolTable.relateToOperator("asinh",        EOpAsinh);
-    symbolTable.relateToOperator("acosh",        EOpAcosh);
-    symbolTable.relateToOperator("atanh",        EOpAtanh);
-
-    symbolTable.relateToOperator("pow",          EOpPow);
-    symbolTable.relateToOperator("exp2",         EOpExp2);
-    symbolTable.relateToOperator("log",          EOpLog);
-    symbolTable.relateToOperator("exp",          EOpExp);
-    symbolTable.relateToOperator("log2",         EOpLog2);
-    symbolTable.relateToOperator("sqrt",         EOpSqrt);
-    symbolTable.relateToOperator("inversesqrt",  EOpInverseSqrt);
-
-    symbolTable.relateToOperator("abs",          EOpAbs);
-    symbolTable.relateToOperator("sign",         EOpSign);
-    symbolTable.relateToOperator("floor",        EOpFloor);
-    symbolTable.relateToOperator("trunc",        EOpTrunc);
-    symbolTable.relateToOperator("round",        EOpRound);
-    symbolTable.relateToOperator("roundEven",    EOpRoundEven);
-    symbolTable.relateToOperator("ceil",         EOpCeil);
-    symbolTable.relateToOperator("fract",        EOpFract);
-    symbolTable.relateToOperator("min",          EOpMin);
-    symbolTable.relateToOperator("max",          EOpMax);
-    symbolTable.relateToOperator("clamp",        EOpClamp);
-    symbolTable.relateToOperator("mix",          EOpMix);
-    symbolTable.relateToOperator("step",         EOpStep);
-    symbolTable.relateToOperator("smoothstep",   EOpSmoothStep);
-
-    symbolTable.relateToOperator("isnan",  EOpIsNan);
-    symbolTable.relateToOperator("isinf",  EOpIsInf);
-
-    symbolTable.relateToOperator("floatBitsToInt",  EOpFloatBitsToInt);
-    symbolTable.relateToOperator("floatBitsToUint", EOpFloatBitsToUint);
-    symbolTable.relateToOperator("intBitsToFloat",  EOpIntBitsToFloat);
-    symbolTable.relateToOperator("uintBitsToFloat", EOpUintBitsToFloat);
+#ifndef GLSLANG_WEB
     symbolTable.relateToOperator("doubleBitsToInt64",  EOpDoubleBitsToInt64);
     symbolTable.relateToOperator("doubleBitsToUint64", EOpDoubleBitsToUint64);
     symbolTable.relateToOperator("int64BitsToDouble",  EOpInt64BitsToDouble);
@@ -8971,11 +8550,6 @@
     symbolTable.relateToOperator("int16BitsToHalf",  EOpInt16BitsToFloat16);
     symbolTable.relateToOperator("uint16BitsToHalf", EOpUint16BitsToFloat16);
 
-    symbolTable.relateToOperator("packSnorm2x16",   EOpPackSnorm2x16);
-    symbolTable.relateToOperator("unpackSnorm2x16", EOpUnpackSnorm2x16);
-    symbolTable.relateToOperator("packUnorm2x16",   EOpPackUnorm2x16);
-    symbolTable.relateToOperator("unpackUnorm2x16", EOpUnpackUnorm2x16);
-
     symbolTable.relateToOperator("packSnorm4x8",    EOpPackSnorm4x8);
     symbolTable.relateToOperator("unpackSnorm4x8",  EOpUnpackSnorm4x8);
     symbolTable.relateToOperator("packUnorm4x8",    EOpPackUnorm4x8);
@@ -8984,9 +8558,6 @@
     symbolTable.relateToOperator("packDouble2x32",    EOpPackDouble2x32);
     symbolTable.relateToOperator("unpackDouble2x32",  EOpUnpackDouble2x32);
 
-    symbolTable.relateToOperator("packHalf2x16",    EOpPackHalf2x16);
-    symbolTable.relateToOperator("unpackHalf2x16",  EOpUnpackHalf2x16);
-
     symbolTable.relateToOperator("packInt2x32",     EOpPackInt2x32);
     symbolTable.relateToOperator("unpackInt2x32",   EOpUnpackInt2x32);
     symbolTable.relateToOperator("packUint2x32",    EOpPackUint2x32);
@@ -9012,33 +8583,10 @@
     symbolTable.relateToOperator("unpack16",        EOpUnpack16);
     symbolTable.relateToOperator("unpack8",         EOpUnpack8);
 
-    symbolTable.relateToOperator("length",       EOpLength);
-    symbolTable.relateToOperator("distance",     EOpDistance);
-    symbolTable.relateToOperator("dot",          EOpDot);
-    symbolTable.relateToOperator("cross",        EOpCross);
-    symbolTable.relateToOperator("normalize",    EOpNormalize);
-    symbolTable.relateToOperator("faceforward",  EOpFaceForward);
-    symbolTable.relateToOperator("reflect",      EOpReflect);
-    symbolTable.relateToOperator("refract",      EOpRefract);
-
-    symbolTable.relateToOperator("any",          EOpAny);
-    symbolTable.relateToOperator("all",          EOpAll);
-
-    symbolTable.relateToOperator("barrier",                    EOpBarrier);
     symbolTable.relateToOperator("controlBarrier",             EOpBarrier);
-    symbolTable.relateToOperator("memoryBarrier",              EOpMemoryBarrier);
     symbolTable.relateToOperator("memoryBarrierAtomicCounter", EOpMemoryBarrierAtomicCounter);
-    symbolTable.relateToOperator("memoryBarrierBuffer",        EOpMemoryBarrierBuffer);
     symbolTable.relateToOperator("memoryBarrierImage",         EOpMemoryBarrierImage);
 
-    symbolTable.relateToOperator("atomicAdd",      EOpAtomicAdd);
-    symbolTable.relateToOperator("atomicMin",      EOpAtomicMin);
-    symbolTable.relateToOperator("atomicMax",      EOpAtomicMax);
-    symbolTable.relateToOperator("atomicAnd",      EOpAtomicAnd);
-    symbolTable.relateToOperator("atomicOr",       EOpAtomicOr);
-    symbolTable.relateToOperator("atomicXor",      EOpAtomicXor);
-    symbolTable.relateToOperator("atomicExchange", EOpAtomicExchange);
-    symbolTable.relateToOperator("atomicCompSwap", EOpAtomicCompSwap);
     symbolTable.relateToOperator("atomicLoad",     EOpAtomicLoad);
     symbolTable.relateToOperator("atomicStore",    EOpAtomicStore);
 
@@ -9046,6 +8594,12 @@
     symbolTable.relateToOperator("atomicCounterDecrement", EOpAtomicCounterDecrement);
     symbolTable.relateToOperator("atomicCounter",          EOpAtomicCounter);
 
+    symbolTable.relateToOperator("clockARB",     EOpReadClockSubgroupKHR);
+    symbolTable.relateToOperator("clock2x32ARB", EOpReadClockSubgroupKHR);
+
+    symbolTable.relateToOperator("clockRealtimeEXT",     EOpReadClockDeviceKHR);
+    symbolTable.relateToOperator("clockRealtime2x32EXT", EOpReadClockDeviceKHR);
+
     if (profile != EEsProfile && version >= 460) {
         symbolTable.relateToOperator("atomicCounterAdd",      EOpAtomicCounterAdd);
         symbolTable.relateToOperator("atomicCounterSubtract", EOpAtomicCounterSubtract);
@@ -9072,6 +8626,19 @@
     symbolTable.relateToOperator("findLSB",           EOpFindLSB);
     symbolTable.relateToOperator("findMSB",           EOpFindMSB);
 
+    symbolTable.relateToOperator("helperInvocationEXT",  EOpIsHelperInvocation);
+
+    symbolTable.relateToOperator("countLeadingZeros",  EOpCountLeadingZeros);
+    symbolTable.relateToOperator("countTrailingZeros", EOpCountTrailingZeros);
+    symbolTable.relateToOperator("absoluteDifference", EOpAbsDifference);
+    symbolTable.relateToOperator("addSaturate",        EOpAddSaturate);
+    symbolTable.relateToOperator("subtractSaturate",   EOpSubSaturate);
+    symbolTable.relateToOperator("average",            EOpAverage);
+    symbolTable.relateToOperator("averageRounded",     EOpAverageRounded);
+    symbolTable.relateToOperator("multiply32x16",      EOpMul32x16);
+    symbolTable.relateToOperator("debugPrintfEXT",     EOpDebugPrintf);
+
+
     if (PureOperatorBuiltins) {
         symbolTable.relateToOperator("imageSize",               EOpImageQuerySize);
         symbolTable.relateToOperator("imageSamples",            EOpImageQuerySamples);
@@ -9091,24 +8658,6 @@
         symbolTable.relateToOperator("subpassLoad",             EOpSubpassLoad);
         symbolTable.relateToOperator("subpassLoadMS",           EOpSubpassLoadMS);
 
-        symbolTable.relateToOperator("textureSize",             EOpTextureQuerySize);
-        symbolTable.relateToOperator("textureQueryLod",         EOpTextureQueryLod);
-        symbolTable.relateToOperator("textureQueryLevels",      EOpTextureQueryLevels);
-        symbolTable.relateToOperator("textureSamples",          EOpTextureQuerySamples);
-        symbolTable.relateToOperator("texture",                 EOpTexture);
-        symbolTable.relateToOperator("textureProj",             EOpTextureProj);
-        symbolTable.relateToOperator("textureLod",              EOpTextureLod);
-        symbolTable.relateToOperator("textureOffset",           EOpTextureOffset);
-        symbolTable.relateToOperator("texelFetch",              EOpTextureFetch);
-        symbolTable.relateToOperator("texelFetchOffset",        EOpTextureFetchOffset);
-        symbolTable.relateToOperator("textureProjOffset",       EOpTextureProjOffset);
-        symbolTable.relateToOperator("textureLodOffset",        EOpTextureLodOffset);
-        symbolTable.relateToOperator("textureProjLod",          EOpTextureProjLod);
-        symbolTable.relateToOperator("textureProjLodOffset",    EOpTextureProjLodOffset);
-        symbolTable.relateToOperator("textureGrad",             EOpTextureGrad);
-        symbolTable.relateToOperator("textureGradOffset",       EOpTextureGradOffset);
-        symbolTable.relateToOperator("textureProjGrad",         EOpTextureProjGrad);
-        symbolTable.relateToOperator("textureProjGradOffset",   EOpTextureProjGradOffset);
         symbolTable.relateToOperator("textureGather",           EOpTextureGather);
         symbolTable.relateToOperator("textureGatherOffset",     EOpTextureGatherOffset);
         symbolTable.relateToOperator("textureGatherOffsets",    EOpTextureGatherOffsets);
@@ -9118,17 +8667,17 @@
         symbolTable.relateToOperator("noise3", EOpNoise);
         symbolTable.relateToOperator("noise4", EOpNoise);
 
-#ifdef NV_EXTENSIONS
         symbolTable.relateToOperator("textureFootprintNV",          EOpImageSampleFootprintNV);
         symbolTable.relateToOperator("textureFootprintClampNV",     EOpImageSampleFootprintClampNV);
         symbolTable.relateToOperator("textureFootprintLodNV",       EOpImageSampleFootprintLodNV);
         symbolTable.relateToOperator("textureFootprintGradNV",      EOpImageSampleFootprintGradNV);
         symbolTable.relateToOperator("textureFootprintGradClampNV", EOpImageSampleFootprintGradClampNV);
-#endif
+
+        if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion))
+            symbolTable.relateToOperator("ftransform", EOpFtransform);
 
         if (spvVersion.spv == 0 && (IncludeLegacy(version, profile, spvVersion) ||
             (profile == EEsProfile && version == 100))) {
-            symbolTable.relateToOperator("ftransform",               EOpFtransform);
 
             symbolTable.relateToOperator("texture1D",                EOpTexture);
             symbolTable.relateToOperator("texture1DGradARB",         EOpTextureGrad);
@@ -9220,7 +8769,6 @@
                 symbolTable.relateToOperator("allInvocations",              EOpAllInvocations);
                 symbolTable.relateToOperator("allInvocationsEqual",         EOpAllInvocationsEqual);
             }
-#ifdef AMD_EXTENSIONS
             symbolTable.relateToOperator("minInvocationsAMD",                           EOpMinInvocations);
             symbolTable.relateToOperator("maxInvocationsAMD",                           EOpMaxInvocations);
             symbolTable.relateToOperator("addInvocationsAMD",                           EOpAddInvocations);
@@ -9265,11 +8813,11 @@
 
             symbolTable.relateToOperator("fragmentMaskFetchAMD",                EOpFragmentMaskFetch);
             symbolTable.relateToOperator("fragmentFetchAMD",                    EOpFragmentFetch);
-#endif
         }
 
         // GL_KHR_shader_subgroup
-        if (spvVersion.vulkan > 0) {
+        if ((profile == EEsProfile && version >= 310) ||
+            (profile != EEsProfile && version >= 140)) {
             symbolTable.relateToOperator("subgroupBarrier",                 EOpSubgroupBarrier);
             symbolTable.relateToOperator("subgroupMemoryBarrier",           EOpSubgroupMemoryBarrier);
             symbolTable.relateToOperator("subgroupMemoryBarrierBuffer",     EOpSubgroupMemoryBarrierBuffer);
@@ -9325,7 +8873,6 @@
             symbolTable.relateToOperator("subgroupQuadSwapVertical",        EOpSubgroupQuadSwapVertical);
             symbolTable.relateToOperator("subgroupQuadSwapDiagonal",        EOpSubgroupQuadSwapDiagonal);
 
-#ifdef NV_EXTENSIONS
             symbolTable.relateToOperator("subgroupPartitionNV",                          EOpSubgroupPartition);
             symbolTable.relateToOperator("subgroupPartitionedAddNV",                     EOpSubgroupPartitionedAdd);
             symbolTable.relateToOperator("subgroupPartitionedMulNV",                     EOpSubgroupPartitionedMul);
@@ -9348,7 +8895,6 @@
             symbolTable.relateToOperator("subgroupPartitionedExclusiveAndNV",            EOpSubgroupPartitionedExclusiveAnd);
             symbolTable.relateToOperator("subgroupPartitionedExclusiveOrNV",             EOpSubgroupPartitionedExclusiveOr);
             symbolTable.relateToOperator("subgroupPartitionedExclusiveXorNV",            EOpSubgroupPartitionedExclusiveXor);
-#endif
         }
 
         if (profile == EEsProfile) {
@@ -9373,9 +8919,6 @@
         break;
 
     case EShLangFragment:
-        symbolTable.relateToOperator("dFdx",         EOpDPdx);
-        symbolTable.relateToOperator("dFdy",         EOpDPdy);
-        symbolTable.relateToOperator("fwidth",       EOpFwidth);
         if (profile != EEsProfile && version >= 400) {
             symbolTable.relateToOperator("dFdxFine",     EOpDPdxFine);
             symbolTable.relateToOperator("dFdyFine",     EOpDPdyFine);
@@ -9384,21 +8927,47 @@
             symbolTable.relateToOperator("dFdyCoarse",   EOpDPdyCoarse);
             symbolTable.relateToOperator("fwidthCoarse", EOpFwidthCoarse);
         }
+
+        if (profile != EEsProfile && version >= 460) {
+            symbolTable.relateToOperator("rayQueryInitializeEXT",                                             EOpRayQueryInitialize);
+            symbolTable.relateToOperator("rayQueryTerminateEXT",                                              EOpRayQueryTerminate);
+            symbolTable.relateToOperator("rayQueryGenerateIntersectionEXT",                                   EOpRayQueryGenerateIntersection);
+            symbolTable.relateToOperator("rayQueryConfirmIntersectionEXT",                                    EOpRayQueryConfirmIntersection);
+            symbolTable.relateToOperator("rayQueryProceedEXT",                                                EOpRayQueryProceed);
+            symbolTable.relateToOperator("rayQueryGetIntersectionTypeEXT",                                    EOpRayQueryGetIntersectionType);
+            symbolTable.relateToOperator("rayQueryGetRayTMinEXT",                                             EOpRayQueryGetRayTMin);
+            symbolTable.relateToOperator("rayQueryGetRayFlagsEXT",                                            EOpRayQueryGetRayFlags);
+            symbolTable.relateToOperator("rayQueryGetIntersectionTEXT",                                       EOpRayQueryGetIntersectionT);
+            symbolTable.relateToOperator("rayQueryGetIntersectionInstanceCustomIndexEXT",                     EOpRayQueryGetIntersectionInstanceCustomIndex);
+            symbolTable.relateToOperator("rayQueryGetIntersectionInstanceIdEXT",                              EOpRayQueryGetIntersectionInstanceId);
+            symbolTable.relateToOperator("rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT",  EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset);
+            symbolTable.relateToOperator("rayQueryGetIntersectionGeometryIndexEXT",                           EOpRayQueryGetIntersectionGeometryIndex);
+            symbolTable.relateToOperator("rayQueryGetIntersectionPrimitiveIndexEXT",                          EOpRayQueryGetIntersectionPrimitiveIndex);
+            symbolTable.relateToOperator("rayQueryGetIntersectionBarycentricsEXT",                            EOpRayQueryGetIntersectionBarycentrics);
+            symbolTable.relateToOperator("rayQueryGetIntersectionFrontFaceEXT",                               EOpRayQueryGetIntersectionFrontFace);
+            symbolTable.relateToOperator("rayQueryGetIntersectionCandidateAABBOpaqueEXT",                     EOpRayQueryGetIntersectionCandidateAABBOpaque);
+            symbolTable.relateToOperator("rayQueryGetIntersectionObjectRayDirectionEXT",                      EOpRayQueryGetIntersectionObjectRayDirection);
+            symbolTable.relateToOperator("rayQueryGetIntersectionObjectRayOriginEXT",                         EOpRayQueryGetIntersectionObjectRayOrigin);
+            symbolTable.relateToOperator("rayQueryGetWorldRayDirectionEXT",                                   EOpRayQueryGetWorldRayDirection);
+            symbolTable.relateToOperator("rayQueryGetWorldRayOriginEXT",                                      EOpRayQueryGetWorldRayOrigin);
+            symbolTable.relateToOperator("rayQueryGetIntersectionObjectToWorldEXT",                           EOpRayQueryGetIntersectionObjectToWorld);
+            symbolTable.relateToOperator("rayQueryGetIntersectionWorldToObjectEXT",                           EOpRayQueryGetIntersectionWorldToObject);
+        }
+
         symbolTable.relateToOperator("interpolateAtCentroid", EOpInterpolateAtCentroid);
         symbolTable.relateToOperator("interpolateAtSample",   EOpInterpolateAtSample);
         symbolTable.relateToOperator("interpolateAtOffset",   EOpInterpolateAtOffset);
 
-#ifdef AMD_EXTENSIONS
         if (profile != EEsProfile)
             symbolTable.relateToOperator("interpolateAtVertexAMD", EOpInterpolateAtVertex);
-#endif
+
+        symbolTable.relateToOperator("beginInvocationInterlockARB", EOpBeginInvocationInterlock);
+        symbolTable.relateToOperator("endInvocationInterlockARB",   EOpEndInvocationInterlock);
+
         break;
 
     case EShLangCompute:
-        symbolTable.relateToOperator("memoryBarrierShared",         EOpMemoryBarrierShared);
-        symbolTable.relateToOperator("groupMemoryBarrier",          EOpGroupMemoryBarrier);
         symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
-#ifdef NV_EXTENSIONS
         if ((profile != EEsProfile && version >= 450) ||
             (profile == EEsProfile && version >= 320)) {
             symbolTable.relateToOperator("dFdx",        EOpDPdx);
@@ -9411,31 +8980,39 @@
             symbolTable.relateToOperator("dFdyCoarse",  EOpDPdyCoarse);
             symbolTable.relateToOperator("fwidthCoarse",EOpFwidthCoarse);
         }
-#endif
+        symbolTable.relateToOperator("coopMatLoadNV",              EOpCooperativeMatrixLoad);
+        symbolTable.relateToOperator("coopMatStoreNV",             EOpCooperativeMatrixStore);
+        symbolTable.relateToOperator("coopMatMulAddNV",            EOpCooperativeMatrixMulAdd);
         break;
 
-#ifdef NV_EXTENSIONS
-    case EShLangRayGenNV:
-    case EShLangClosestHitNV:
-    case EShLangMissNV:
+    case EShLangRayGen:
+    case EShLangClosestHit:
+    case EShLangMiss:
         if (profile != EEsProfile && version >= 460) {
-            symbolTable.relateToOperator("traceNV", EOpTraceNV);
-            symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallableNV);
+            symbolTable.relateToOperator("traceNV", EOpTrace);
+            symbolTable.relateToOperator("traceRayEXT", EOpTrace);
+            symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallable);
+            symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallable);
         }
         break;
-    case EShLangIntersectNV:
-        if (profile != EEsProfile && version >= 460)
-            symbolTable.relateToOperator("reportIntersectionNV", EOpReportIntersectionNV);
-        break;
-    case EShLangAnyHitNV:
+    case EShLangIntersect:
         if (profile != EEsProfile && version >= 460) {
-            symbolTable.relateToOperator("ignoreIntersectionNV", EOpIgnoreIntersectionNV);
-            symbolTable.relateToOperator("terminateRayNV", EOpTerminateRayNV);
+            symbolTable.relateToOperator("reportIntersectionNV", EOpReportIntersection);
+            symbolTable.relateToOperator("reportIntersectionEXT", EOpReportIntersection);
+	}
+        break;
+    case EShLangAnyHit:
+        if (profile != EEsProfile && version >= 460) {
+            symbolTable.relateToOperator("ignoreIntersectionNV", EOpIgnoreIntersection);
+            symbolTable.relateToOperator("ignoreIntersectionEXT", EOpIgnoreIntersection);
+            symbolTable.relateToOperator("terminateRayNV", EOpTerminateRay);
+            symbolTable.relateToOperator("terminateRayEXT", EOpTerminateRay);
         }
         break;
-    case EShLangCallableNV:
+    case EShLangCallable:
         if (profile != EEsProfile && version >= 460) {
-            symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallableNV);
+            symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallable);
+            symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallable);
         }
         break;
     case EShLangMeshNV:
@@ -9447,13 +9024,14 @@
         if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
             symbolTable.relateToOperator("memoryBarrierShared", EOpMemoryBarrierShared);
             symbolTable.relateToOperator("groupMemoryBarrier", EOpGroupMemoryBarrier);
+            symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
         }
         break;
-#endif
 
     default:
         assert(false && "Language not supported");
     }
+#endif
 }
 
 //
@@ -9467,6 +9045,7 @@
 //
 void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources)
 {
+#ifndef GLSLANG_WEB
     if (profile != EEsProfile && version >= 430 && version < 440) {
         symbolTable.setVariableExtensions("gl_MaxTransformFeedbackBuffers", 1, &E_GL_ARB_enhanced_layouts);
         symbolTable.setVariableExtensions("gl_MaxTransformFeedbackInterleavedComponents", 1, &E_GL_ARB_enhanced_layouts);
@@ -9511,11 +9090,24 @@
         BuiltInVariable("gl_in", "gl_BackSecondaryColor",  EbvBackSecondaryColor,  symbolTable);
         BuiltInVariable("gl_in", "gl_TexCoord",            EbvTexCoord,            symbolTable);
         BuiltInVariable("gl_in", "gl_FogFragCoord",        EbvFogFragCoord,        symbolTable);
+
+        symbolTable.setVariableExtensions("gl_in", "gl_SecondaryPositionNV", 1, &E_GL_NV_stereo_view_rendering);
+        symbolTable.setVariableExtensions("gl_in", "gl_PositionPerViewNV",   1, &E_GL_NVX_multiview_per_view_attributes);
+
+        BuiltInVariable("gl_in", "gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable);
+        BuiltInVariable("gl_in", "gl_PositionPerViewNV",   EbvPositionPerViewNV,   symbolTable);
+
+        // extension requirements
+        if (profile == EEsProfile) {
+            symbolTable.setVariableExtensions("gl_in", "gl_PointSize", Num_AEP_tessellation_point_size, AEP_tessellation_point_size);
+        }
+
         break;
 
     default:
         break;
     }
+#endif
 }
 
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/Initialize.h b/glslang/MachineIndependent/Initialize.h
index b5de324..ac8ec33 100644
--- a/glslang/MachineIndependent/Initialize.h
+++ b/glslang/MachineIndependent/Initialize.h
@@ -91,6 +91,8 @@
     void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources);
 
 protected:
+    void addTabledBuiltins(int version, EProfile profile, const SpvVersion& spvVersion);
+    void relateTabledBuiltins(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage, TSymbolTable&);
     void add2ndGenerationSamplingImaging(int version, EProfile profile, const SpvVersion& spvVersion);
     void addSubpassSampling(TSampler, const TString& typeName, int version, EProfile profile);
     void addQueryFunctions(TSampler, const TString& typeName, int version, EProfile profile);
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index 32b38a0..f6a5e7f 100755
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -1,7 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2015 LunarG, Inc.
-// Copyright (C) 2015-2018 Google, Inc.
+// Copyright (C) 2015-2020 Google, Inc.
 // Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
@@ -119,6 +119,62 @@
     if (left->getType().getBasicType() == EbtBlock || right->getType().getBasicType() == EbtBlock)
         return nullptr;
 
+    // Convert "reference +/- int" and "reference - reference" to integer math
+    if ((op == EOpAdd || op == EOpSub) && extensionRequested(E_GL_EXT_buffer_reference2)) {
+
+        // No addressing math on struct with unsized array.
+        if ((left->isReference() && left->getType().getReferentType()->containsUnsizedArray()) ||
+            (right->isReference() && right->getType().getReferentType()->containsUnsizedArray())) {
+            return nullptr;
+        }
+
+        if (left->isReference() && isTypeInt(right->getBasicType())) {
+            const TType& referenceType = left->getType();
+            TIntermConstantUnion* size = addConstantUnion((unsigned long long)computeBufferReferenceTypeSize(left->getType()), loc, true);
+            left  = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, left, TType(EbtUint64));
+
+            right = createConversion(EbtInt64, right);
+            right = addBinaryMath(EOpMul, right, size, loc);
+
+            TIntermTyped *node = addBinaryMath(op, left, right, loc);
+            node = addBuiltInFunctionCall(loc, EOpConvUint64ToPtr, true, node, referenceType);
+            return node;
+        }
+
+        if (op == EOpAdd && right->isReference() && isTypeInt(left->getBasicType())) {
+            const TType& referenceType = right->getType();
+            TIntermConstantUnion* size = addConstantUnion((unsigned long long)computeBufferReferenceTypeSize(right->getType()), loc, true);
+            right = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, right, TType(EbtUint64));
+
+            left  = createConversion(EbtInt64, left);
+            left  = addBinaryMath(EOpMul, left, size, loc);
+
+            TIntermTyped *node = addBinaryMath(op, left, right, loc);
+            node = addBuiltInFunctionCall(loc, EOpConvUint64ToPtr, true, node, referenceType);
+            return node;
+        }
+
+        if (op == EOpSub && left->isReference() && right->isReference()) {
+            TIntermConstantUnion* size = addConstantUnion((long long)computeBufferReferenceTypeSize(left->getType()), loc, true);
+
+            left = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, left, TType(EbtUint64));
+            right = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, right, TType(EbtUint64));
+
+            left = addBuiltInFunctionCall(loc, EOpConvUint64ToInt64, true, left, TType(EbtInt64));
+            right = addBuiltInFunctionCall(loc, EOpConvUint64ToInt64, true, right, TType(EbtInt64));
+
+            left = addBinaryMath(EOpSub, left, right, loc);
+
+            TIntermTyped *node = addBinaryMath(EOpDiv, left, size, loc);
+            return node;
+        }
+
+        // No other math operators supported on references
+        if (left->isReference() || right->isReference()) {
+            return nullptr;
+        }
+    }
+
     // Try converting the children's base types to compatible types.
     auto children = addConversion(op, left, right);
     left = std::get<0>(children);
@@ -160,7 +216,7 @@
         node->getWritableType().getQualifier().makeSpecConstant();
 
     // If must propagate nonuniform, make a nonuniform.
-    if ((node->getLeft()->getQualifier().nonUniform || node->getRight()->getQualifier().nonUniform) &&
+    if ((node->getLeft()->getQualifier().isNonUniform() || node->getRight()->getQualifier().isNonUniform()) &&
             isNonuniformPropagating(node->getOp()))
         node->getWritableType().getQualifier().nonUniform = true;
 
@@ -231,6 +287,26 @@
     if (left->getType().getBasicType() == EbtBlock || right->getType().getBasicType() == EbtBlock)
         return nullptr;
 
+    // Convert "reference += int" to "reference = reference + int". We need this because the
+    // "reference + int" calculation involves a cast back to the original type, which makes it
+    // not an lvalue.
+    if ((op == EOpAddAssign || op == EOpSubAssign) && left->isReference() &&
+        extensionRequested(E_GL_EXT_buffer_reference2)) {
+
+        if (!(right->getType().isScalar() && right->getType().isIntegerDomain()))
+            return nullptr;
+
+        TIntermTyped* node = addBinaryMath(op == EOpAddAssign ? EOpAdd : EOpSub, left, right, loc);
+        if (!node)
+            return nullptr;
+
+        TIntermSymbol* symbol = left->getAsSymbolNode();
+        left = addSymbol(*symbol);
+
+        node = addAssign(EOpAssign, left, node, loc);
+        return node;
+    }
+
     //
     // Like adding binary math, except the conversion can only go
     // from right to left.
@@ -283,7 +359,7 @@
 
     switch (op) {
     case EOpLogicalNot:
-        if (source == EShSourceHlsl) {
+        if (getSource() == EShSourceHlsl) {
             break; // HLSL can promote logical not
         }
 
@@ -307,18 +383,20 @@
     //
     TBasicType newType = EbtVoid;
     switch (op) {
-    case EOpConstructInt8:   newType = EbtInt8;   break;
-    case EOpConstructUint8:  newType = EbtUint8;  break;
-    case EOpConstructInt16:  newType = EbtInt16;    break;
-    case EOpConstructUint16: newType = EbtUint16;   break;
-    case EOpConstructInt:    newType = EbtInt;    break;
-    case EOpConstructUint:   newType = EbtUint;   break;
-    case EOpConstructInt64:  newType = EbtInt64;  break;
-    case EOpConstructUint64: newType = EbtUint64; break;
     case EOpConstructBool:   newType = EbtBool;   break;
     case EOpConstructFloat:  newType = EbtFloat;  break;
+    case EOpConstructInt:    newType = EbtInt;    break;
+    case EOpConstructUint:   newType = EbtUint;   break;
+#ifndef GLSLANG_WEB
+    case EOpConstructInt8:   newType = EbtInt8;   break;
+    case EOpConstructUint8:  newType = EbtUint8;  break;
+    case EOpConstructInt16:  newType = EbtInt16;  break;
+    case EOpConstructUint16: newType = EbtUint16; break;
+    case EOpConstructInt64:  newType = EbtInt64;  break;
+    case EOpConstructUint64: newType = EbtUint64; break;
     case EOpConstructDouble: newType = EbtDouble; break;
     case EOpConstructFloat16: newType = EbtFloat16; break;
+#endif
     default: break; // some compilers want this
     }
 
@@ -373,7 +451,7 @@
         node->getWritableType().getQualifier().makeSpecConstant();
 
     // If must propagate nonuniform, make a nonuniform.
-    if (node->getOperand()->getQualifier().nonUniform && isNonuniformPropagating(node->getOp()))
+    if (node->getOperand()->getQualifier().isNonUniform() && isNonuniformPropagating(node->getOp()))
         node->getWritableType().getQualifier().nonUniform = true;
 
     return node;
@@ -410,7 +488,7 @@
 //
 // This is the safe way to change the operator on an aggregate, as it
 // does lots of error checking and fixing.  Especially for establishing
-// a function call's operation on it's set of parameters.  Sequences
+// a function call's operation on its set of parameters.  Sequences
 // of instructions are also aggregates, but they just directly set
 // their operator to EOpSequence.
 //
@@ -460,15 +538,13 @@
         return false;
     case EbtAtomicUint:
     case EbtSampler:
-#ifdef NV_EXTENSIONS
-    case EbtAccStructNV:
-#endif
+    case EbtAccStruct:
         // opaque types can be passed to functions
         if (op == EOpFunction)
             break;
 
         // HLSL can assign samplers directly (no constructor)
-        if (source == EShSourceHlsl && node->getBasicType() == EbtSampler)
+        if (getSource() == EShSourceHlsl && node->getBasicType() == EbtSampler)
             break;
 
         // samplers can get assigned via a sampler constructor
@@ -486,55 +562,50 @@
     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.
-TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped* node) const
+bool TIntermediate::buildConvertOp(TBasicType dst, TBasicType src, TOperator& newOp) const
 {
-    //
-    // Add a new newNode for the conversion.
-    //
-    TIntermUnary* newNode = nullptr;
-
-    TOperator newOp = EOpNull;
-
-    switch (convertTo) {
+    switch (dst) {
+#ifndef GLSLANG_WEB
     case EbtDouble:
-        switch (node->getBasicType()) {
+        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 EbtInt:     newOp = EOpConvIntToDouble;     break;
-        case EbtUint:    newOp = EOpConvUintToDouble;    break;
-        case EbtBool:    newOp = EOpConvBoolToDouble;    break;
-        case EbtFloat:   newOp = EOpConvFloatToDouble;   break;
         case EbtFloat16: newOp = EOpConvFloat16ToDouble; break;
         case EbtInt64:   newOp = EOpConvInt64ToDouble;   break;
         case EbtUint64:  newOp = EOpConvUint64ToDouble;  break;
         default:
-            return nullptr;
+            return false;
         }
         break;
+#endif
     case EbtFloat:
-        switch (node->getBasicType()) {
+        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 EbtInt:     newOp = EOpConvIntToFloat;     break;
-        case EbtUint:    newOp = EOpConvUintToFloat;    break;
-        case EbtBool:    newOp = EOpConvBoolToFloat;    break;
-        case EbtDouble:  newOp = EOpConvDoubleToFloat;  break;
         case EbtFloat16: newOp = EOpConvFloat16ToFloat; break;
         case EbtInt64:   newOp = EOpConvInt64ToFloat;   break;
         case EbtUint64:  newOp = EOpConvUint64ToFloat;  break;
+#endif
         default:
-            return nullptr;
+            return false;
         }
         break;
+#ifndef GLSLANG_WEB
     case EbtFloat16:
-        switch (node->getBasicType()) {
+        switch (src) {
         case EbtInt8:   newOp = EOpConvInt8ToFloat16;   break;
         case EbtUint8:  newOp = EOpConvUint8ToFloat16;  break;
         case EbtInt16:  newOp = EOpConvInt16ToFloat16;  break;
@@ -547,28 +618,32 @@
         case EbtInt64:  newOp = EOpConvInt64ToFloat16;  break;
         case EbtUint64: newOp = EOpConvUint64ToFloat16; break;
         default:
-            return nullptr;
+            return false;
         }
         break;
+#endif
     case EbtBool:
-        switch (node->getBasicType()) {
+        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 EbtInt:     newOp = EOpConvIntToBool;     break;
-        case EbtUint:    newOp = EOpConvUintToBool;    break;
-        case EbtFloat:   newOp = EOpConvFloatToBool;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToBool;  break;
         case EbtFloat16: newOp = EOpConvFloat16ToBool; break;
         case EbtInt64:   newOp = EOpConvInt64ToBool;   break;
         case EbtUint64:  newOp = EOpConvUint64ToBool;  break;
+#endif
         default:
-            return nullptr;
+            return false;
         }
         break;
+#ifndef GLSLANG_WEB
     case EbtInt8:
-        switch (node->getBasicType()) {
+        switch (src) {
         case EbtUint8:   newOp = EOpConvUint8ToInt8;   break;
         case EbtInt16:   newOp = EOpConvInt16ToInt8;   break;
         case EbtUint16:  newOp = EOpConvUint16ToInt8;  break;
@@ -581,11 +656,11 @@
         case EbtDouble:  newOp = EOpConvDoubleToInt8;  break;
         case EbtFloat16: newOp = EOpConvFloat16ToInt8; break;
         default:
-            return nullptr;
+            return false;
         }
         break;
     case EbtUint8:
-        switch (node->getBasicType()) {
+        switch (src) {
         case EbtInt8:    newOp = EOpConvInt8ToUint8;    break;
         case EbtInt16:   newOp = EOpConvInt16ToUint8;   break;
         case EbtUint16:  newOp = EOpConvUint16ToUint8;  break;
@@ -598,12 +673,12 @@
         case EbtDouble:  newOp = EOpConvDoubleToUint8;  break;
         case EbtFloat16: newOp = EOpConvFloat16ToUint8; break;
         default:
-            return nullptr;
+            return false;
         }
         break;
 
     case EbtInt16:
-        switch (node->getBasicType()) {
+        switch (src) {
         case EbtUint8:   newOp = EOpConvUint8ToInt16;   break;
         case EbtInt8:    newOp = EOpConvInt8ToInt16;    break;
         case EbtUint16:  newOp = EOpConvUint16ToInt16;  break;
@@ -616,11 +691,11 @@
         case EbtDouble:  newOp = EOpConvDoubleToInt16;  break;
         case EbtFloat16: newOp = EOpConvFloat16ToInt16; break;
         default:
-            return nullptr;
+            return false;
         }
         break;
     case EbtUint16:
-        switch (node->getBasicType()) {
+        switch (src) {
         case EbtInt8:    newOp = EOpConvInt8ToUint16;    break;
         case EbtUint8:   newOp = EOpConvUint8ToUint16;   break;
         case EbtInt16:   newOp = EOpConvInt16ToUint16;   break;
@@ -633,46 +708,52 @@
         case EbtDouble:  newOp = EOpConvDoubleToUint16;  break;
         case EbtFloat16: newOp = EOpConvFloat16ToUint16; break;
         default:
-            return nullptr;
+            return false;
         }
         break;
+#endif
 
     case EbtInt:
-        switch (node->getBasicType()) {
+        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 EbtUint:    newOp = EOpConvUintToInt;    break;
-        case EbtBool:    newOp = EOpConvBoolToInt;    break;
-        case EbtFloat:   newOp = EOpConvFloatToInt;   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;
+            return false;
         }
         break;
     case EbtUint:
-        switch (node->getBasicType()) {
+        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 EbtInt:     newOp = EOpConvIntToUint;     break;
-        case EbtBool:    newOp = EOpConvBoolToUint;    break;
-        case EbtFloat:   newOp = EOpConvFloatToUint;   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;
+            return false;
         }
         break;
+#ifndef GLSLANG_WEB
     case EbtInt64:
-        switch (node->getBasicType()) {
+        switch (src) {
         case EbtInt8:    newOp = EOpConvInt8ToInt64;    break;
         case EbtUint8:   newOp = EOpConvUint8ToInt64;   break;
         case EbtInt16:   newOp = EOpConvInt16ToInt64;   break;
@@ -685,11 +766,11 @@
         case EbtFloat16: newOp = EOpConvFloat16ToInt64; break;
         case EbtUint64:  newOp = EOpConvUint64ToInt64;  break;
         default:
-            return nullptr;
+            return false;
         }
         break;
     case EbtUint64:
-        switch (node->getBasicType()) {
+        switch (src) {
         case EbtInt8:    newOp = EOpConvInt8ToUint64;    break;
         case EbtUint8:   newOp = EOpConvUint8ToUint64;   break;
         case EbtInt16:   newOp = EOpConvInt16ToUint64;   break;
@@ -702,10 +783,64 @@
         case EbtFloat16: newOp = EOpConvFloat16ToUint64; break;
         case EbtInt64:   newOp = EOpConvInt64ToUint64;   break;
         default:
-            return nullptr;
+            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.
+TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped* node) const
+{
+    //
+    // Add a new newNode for the conversion.
+    //
+
+#ifndef GLSLANG_WEB
+    bool convertToIntTypes = (convertTo == EbtInt8  || convertTo == EbtUint8  ||
+                              convertTo == EbtInt16 || convertTo == EbtUint16 ||
+                              convertTo == EbtInt   || convertTo == EbtUint   ||
+                              convertTo == EbtInt64 || convertTo == EbtUint64);
+
+    bool convertFromIntTypes = (node->getBasicType() == EbtInt8  || node->getBasicType() == EbtUint8  ||
+                                node->getBasicType() == EbtInt16 || node->getBasicType() == EbtUint16 ||
+                                node->getBasicType() == EbtInt   || node->getBasicType() == EbtUint   ||
+                                node->getBasicType() == EbtInt64 || node->getBasicType() == EbtUint64);
+
+    bool convertToFloatTypes = (convertTo == EbtFloat16 || convertTo == EbtFloat || convertTo == EbtDouble);
+
+    bool convertFromFloatTypes = (node->getBasicType() == EbtFloat16 ||
+                                  node->getBasicType() == EbtFloat ||
+                                  node->getBasicType() == EbtDouble);
+
+    if (! getArithemeticInt8Enabled()) {
+        if (((convertTo == EbtInt8 || convertTo == EbtUint8) && ! convertFromIntTypes) ||
+            ((node->getBasicType() == EbtInt8 || node->getBasicType() == EbtUint8) && ! convertToIntTypes))
+            return nullptr;
+    }
+
+    if (! getArithemeticInt16Enabled()) {
+        if (((convertTo == EbtInt16 || convertTo == EbtUint16) && ! convertFromIntTypes) ||
+            ((node->getBasicType() == EbtInt16 || node->getBasicType() == EbtUint16) && ! convertToIntTypes))
+            return nullptr;
+    }
+
+    if (! getArithemeticFloat16Enabled()) {
+        if ((convertTo == EbtFloat16 && ! convertFromFloatTypes) ||
+            (node->getBasicType() == EbtFloat16 && ! convertToFloatTypes))
+            return nullptr;
+    }
+#endif
+
+    TIntermUnary* newNode = nullptr;
+    TOperator newOp = EOpNull;
+    if (!buildConvertOp(convertTo, node->getBasicType(), newOp)) {
         return nullptr;
     }
 
@@ -713,9 +848,18 @@
     newNode = addUnaryNode(newOp, node, node->getLoc(), newType);
 
     if (node->getAsConstantUnion()) {
-        TIntermTyped* folded = node->getAsConstantUnion()->fold(newOp, newType);
-        if (folded)
-            return folded;
+#ifndef GLSLANG_WEB
+        // 8/16-bit storage extensions don't support 8/16-bit constants, so don't fold conversions
+        // to those types
+        if ((getArithemeticInt8Enabled() || !(convertTo == EbtInt8 || convertTo == EbtUint8)) &&
+            (getArithemeticInt16Enabled() || !(convertTo == EbtInt16 || convertTo == EbtUint16)) &&
+            (getArithemeticFloat16Enabled() || !(convertTo == EbtFloat16)))
+#endif
+        {
+            TIntermTyped* folded = node->getAsConstantUnion()->fold(newOp, newType);
+            if (folded)
+                return folded;
+        }
     }
 
     // Propagate specialization-constant-ness, if allowed
@@ -725,6 +869,11 @@
     return newNode;
 }
 
+TIntermTyped* TIntermediate::addConversion(TBasicType convertTo, TIntermTyped* node) const
+{
+    return createConversion(convertTo, node);
+}
+
 // For converting a pair of operands to a binary operation to compatible
 // types with each other, relative to the operation in 'op'.
 // This does not cover assignment operations, which is asymmetric in that the
@@ -738,7 +887,7 @@
 // Returns the converted pair of nodes.
 // Returns <nullptr, nullptr> when there is no conversion.
 std::tuple<TIntermTyped*, TIntermTyped*>
-TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1) const
+TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1)
 {
     if (!isConversionAllowed(op, node0) || !isConversionAllowed(op, node1))
         return std::make_tuple(nullptr, nullptr);
@@ -751,6 +900,10 @@
         // If differing arrays, then no conversions.
         if (node0->getType().isArray() || node1->getType().isArray())
             return std::make_tuple(nullptr, nullptr);
+
+        // No implicit conversions for operations involving cooperative matrices
+        if (node0->getType().isCoopMat() || node1->getType().isCoopMat())
+            return std::make_tuple(node0, node1);
     }
 
     auto promoteTo = std::make_tuple(EbtNumTypes, EbtNumTypes);
@@ -796,7 +949,7 @@
     case EOpLogicalAnd:
     case EOpLogicalOr:
     case EOpLogicalXor:
-        if (source == EShSourceHlsl)
+        if (getSource() == EShSourceHlsl)
             promoteTo = std::make_tuple(EbtBool, EbtBool);
         else
             return std::make_tuple(node0, node1);
@@ -807,7 +960,7 @@
     // HLSL can promote bools to ints to make this work.
     case EOpLeftShift:
     case EOpRightShift:
-        if (source == EShSourceHlsl) {
+        if (getSource() == EShSourceHlsl) {
             TBasicType node0BasicType = node0->getBasicType();
             if (node0BasicType == EbtBool)
                 node0BasicType = EbtInt;
@@ -867,7 +1020,7 @@
 //
 // Return nullptr if a conversion can't be done.
 //
-TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TIntermTyped* node) const
+TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TIntermTyped* node)
 {
     if (!isConversionAllowed(op, node))
         return nullptr;
@@ -902,6 +1055,13 @@
     case EOpConstructFloat:
         promoteTo = EbtFloat;
         break;
+    case EOpConstructInt:
+        promoteTo = EbtInt;
+        break;
+    case EOpConstructUint:
+        promoteTo = EbtUint;
+        break;
+#ifndef GLSLANG_WEB
     case EOpConstructDouble:
         promoteTo = EbtDouble;
         break;
@@ -930,18 +1090,13 @@
         canPromoteConstant = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
                              extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16);
         break;
-    case EOpConstructInt:
-        promoteTo = EbtInt;
-        break;
-    case EOpConstructUint:
-        promoteTo = EbtUint;
-        break;
     case EOpConstructInt64:
         promoteTo = EbtInt64;
         break;
     case EOpConstructUint64:
         promoteTo = EbtUint64;
         break;
+#endif
 
     case EOpLogicalNot:
 
@@ -974,6 +1129,7 @@
     case EOpLit:
     case EOpMax:
     case EOpMin:
+    case EOpMod:
     case EOpModf:
     case EOpPow:
     case EOpReflect:
@@ -983,8 +1139,9 @@
 
     case EOpSequence:
     case EOpConstructStruct:
+    case EOpConstructCooperativeMatrix:
 
-        if (type.getBasicType() == EbtReference || node->getType().getBasicType() == EbtReference) {
+        if (type.isReference() || node->getType().isReference()) {
             // types must match to assign a reference
             if (type == node->getType())
                 return node;
@@ -998,7 +1155,7 @@
         if (canImplicitlyPromote(node->getBasicType(), type.getBasicType(), op))
             promoteTo = type.getBasicType();
         else
-           return nullptr;
+            return nullptr;
         break;
 
     // For GLSL, there are no conversions needed; the shift amount just needs to be an
@@ -1007,7 +1164,7 @@
     case EOpLeftShiftAssign:
     case EOpRightShiftAssign:
     {
-        if (source == EShSourceHlsl && node->getType().getBasicType() == EbtBool)
+        if (getSource() == EShSourceHlsl && node->getType().getBasicType() == EbtBool)
             promoteTo = type.getBasicType();
         else {
             if (isTypeInt(type.getBasicType()) && isTypeInt(node->getBasicType()))
@@ -1053,7 +1210,7 @@
 TIntermTyped* TIntermediate::addUniShapeConversion(TOperator op, const TType& type, TIntermTyped* node)
 {
     // some source languages don't do this
-    switch (source) {
+    switch (getSource()) {
     case EShSourceHlsl:
         break;
     case EShSourceGlsl:
@@ -1106,7 +1263,7 @@
 void TIntermediate::addBiShapeConversion(TOperator op, TIntermTyped*& lhsNode, TIntermTyped*& rhsNode)
 {
     // some source languages don't do this
-    switch (source) {
+    switch (getSource()) {
     case EShSourceHlsl:
         break;
     case EShSourceGlsl:
@@ -1209,7 +1366,7 @@
     // The new node that handles the conversion
     TOperator constructorOp = mapTypeToConstructorOp(type);
 
-    if (source == EShSourceHlsl) {
+    if (getSource() == EShSourceHlsl) {
         // HLSL rules for scalar, vector and matrix conversions:
         // 1) scalar can become anything, initializing every component with its value
         // 2) vector and matrix can become scalar, first element is used (warning: truncation)
@@ -1322,7 +1479,31 @@
 
 bool TIntermediate::isIntegralConversion(TBasicType from, TBasicType to) const
 {
+#ifdef GLSLANG_WEB
+    return false;
+#endif
+
     switch (from) {
+    case EbtInt:
+        switch(to) {
+        case EbtUint:
+            return version >= 400 || getSource() == EShSourceHlsl;
+        case EbtInt64:
+        case EbtUint64:
+            return true;
+        default:
+            break;
+        }
+        break;
+    case EbtUint:
+        switch(to) {
+        case EbtInt64:
+        case EbtUint64:
+            return true;
+        default:
+            break;
+        }
+        break;
     case EbtInt8:
         switch (to) {
         case EbtUint8:
@@ -1369,26 +1550,6 @@
             break;
         }
         break;
-    case EbtInt:
-        switch(to) {
-        case EbtUint:
-            return version >= 400 || (source == EShSourceHlsl);
-        case EbtInt64:
-        case EbtUint64:
-            return true;
-        default:
-            break;
-        }
-        break;
-    case EbtUint:
-        switch(to) {
-        case EbtInt64:
-        case EbtUint64:
-            return true;
-        default:
-            break;
-        }
-        break;
     case EbtInt64:
         if (to == EbtUint64) {
             return true;
@@ -1402,6 +1563,10 @@
 
 bool TIntermediate::isFPConversion(TBasicType from, TBasicType to) const
 {
+#ifdef GLSLANG_WEB
+    return false;
+#endif
+
     if (to == EbtFloat && from == EbtFloat16) {
         return true;
     } else {
@@ -1412,6 +1577,17 @@
 bool TIntermediate::isFPIntegralConversion(TBasicType from, TBasicType to) const
 {
     switch (from) {
+    case EbtInt:
+    case EbtUint:
+        switch(to) {
+        case EbtFloat:
+        case EbtDouble:
+            return true;
+        default:
+            break;
+        }
+        break;
+#ifndef GLSLANG_WEB
     case EbtInt8:
     case EbtUint8:
     case EbtInt16:
@@ -1425,23 +1601,13 @@
             break;
         }
         break;
-    case EbtInt:
-    case EbtUint:
-        switch(to) {
-        case EbtFloat:
-        case EbtDouble:
-            return true;
-        default:
-            break;
-        }
-        break;
     case EbtInt64:
     case EbtUint64:
         if (to == EbtDouble) {
             return true;
         }
         break;
-
+#endif
     default:
         break;
     }
@@ -1454,7 +1620,7 @@
 //
 bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperator op) const
 {
-    if (profile == EEsProfile || version == 110)
+    if (isEsProfile() || version == 110)
         return false;
 
     if (from == to)
@@ -1462,7 +1628,7 @@
 
     // TODO: Move more policies into language-specific handlers.
     // Some languages allow more general (or potentially, more specific) conversions under some conditions.
-    if (source == EShSourceHlsl) {
+    if (getSource() == EShSourceHlsl) {
         const bool fromConvertable = (from == EbtFloat || from == EbtDouble || from == EbtInt || from == EbtUint || from == EbtBool);
         const bool toConvertable = (to == EbtFloat || to == EbtDouble || to == EbtInt || to == EbtUint || to == EbtBool);
 
@@ -1529,7 +1695,7 @@
         }
 
         // hlsl supported conversions
-        if (source == EShSourceHlsl) {
+        if (getSource() == EShSourceHlsl) {
             if (from == EbtBool && (to == EbtInt || to == EbtUint || to == EbtFloat))
                 return true;
         }
@@ -1544,13 +1710,11 @@
             case EbtFloat:
             case EbtDouble:
                 return true;
-#ifdef AMD_EXTENSIONS
             case EbtInt16:
             case EbtUint16:
                 return extensionRequested(E_GL_AMD_gpu_shader_int16);
             case EbtFloat16:
                 return extensionRequested(E_GL_AMD_gpu_shader_half_float);
-#endif
             default:
                 return false;
            }
@@ -1561,34 +1725,28 @@
             case EbtFloat:
                  return true;
             case EbtBool:
-                 return (source == EShSourceHlsl);
-#ifdef AMD_EXTENSIONS
+                 return getSource() == EShSourceHlsl;
             case EbtInt16:
             case EbtUint16:
                 return extensionRequested(E_GL_AMD_gpu_shader_int16);
-#endif
             case EbtFloat16:
                 return 
-#ifdef AMD_EXTENSIONS
                     extensionRequested(E_GL_AMD_gpu_shader_half_float) ||
-#endif
-                    (source == EShSourceHlsl);
+                    getSource() == EShSourceHlsl;
             default:
                  return false;
             }
         case EbtUint:
             switch (from) {
             case EbtInt:
-                 return version >= 400 || (source == EShSourceHlsl);
+                 return version >= 400 || getSource() == EShSourceHlsl;
             case EbtUint:
                 return true;
             case EbtBool:
-                return (source == EShSourceHlsl);
-#ifdef AMD_EXTENSIONS
+                return getSource() == EShSourceHlsl;
             case EbtInt16:
             case EbtUint16:
                 return extensionRequested(E_GL_AMD_gpu_shader_int16);
-#endif
             default:
                 return false;
             }
@@ -1597,11 +1755,9 @@
             case EbtInt:
                 return true;
             case EbtBool:
-                return (source == EShSourceHlsl);
-#ifdef AMD_EXTENSIONS
+                return getSource() == EShSourceHlsl;
             case EbtInt16:
                 return extensionRequested(E_GL_AMD_gpu_shader_int16);
-#endif
             default:
                 return false;
             }
@@ -1612,11 +1768,9 @@
             case EbtInt64:
             case EbtUint64:
                 return true;
-#ifdef AMD_EXTENSIONS
             case EbtInt16:
             case EbtUint16:
                 return extensionRequested(E_GL_AMD_gpu_shader_int16);
-#endif
             default:
                 return false;
             }
@@ -1625,15 +1779,12 @@
             case EbtInt:
             case EbtInt64:
                 return true;
-#ifdef AMD_EXTENSIONS
             case EbtInt16:
                 return extensionRequested(E_GL_AMD_gpu_shader_int16);
-#endif
             default:
                 return false;
             }
         case EbtFloat16:
-#ifdef AMD_EXTENSIONS
             switch (from) {
             case EbtInt16:
             case EbtUint16:
@@ -1643,10 +1794,8 @@
             default:
                 break;
             }
-#endif
             return false;
         case EbtUint16:
-#ifdef AMD_EXTENSIONS
             switch (from) {
             case EbtInt16:
             case EbtUint16:
@@ -1654,7 +1803,6 @@
             default:
                 break;
             }
-#endif
             return false;
         default:
             return false;
@@ -1664,7 +1812,12 @@
     return false;
 }
 
-static bool canSignedIntTypeRepresentAllUnsignedValues(TBasicType sintType, TBasicType uintType) {
+static bool canSignedIntTypeRepresentAllUnsignedValues(TBasicType sintType, TBasicType uintType)
+{
+#ifdef GLSLANG_WEB
+    return false;
+#endif
+
     switch(sintType) {
     case EbtInt8:
         switch(uintType) {
@@ -1723,7 +1876,13 @@
 }
 
 
-static TBasicType getCorrespondingUnsignedType(TBasicType type) {
+static TBasicType getCorrespondingUnsignedType(TBasicType type)
+{
+#ifdef GLSLANG_WEB
+    assert(type == EbtInt);
+    return EbtUint;
+#endif
+
     switch(type) {
     case EbtInt8:
         return EbtUint8;
@@ -1772,10 +1931,10 @@
     TBasicType res0 = EbtNumTypes;
     TBasicType res1 = EbtNumTypes;
 
-    if (profile == EEsProfile || version == 110)
-        return std::make_tuple(res0, res1);;
+    if (isEsProfile() || version == 110)
+        return std::make_tuple(res0, res1);
 
-    if (source == EShSourceHlsl) {
+    if (getSource() == EShSourceHlsl) {
         if (canImplicitlyPromote(type1, type0, op)) {
             res0 = type0;
             res1 = type0;
@@ -1844,15 +2003,18 @@
 {
     TOperator op = EOpNull;
 
-    if (type.getQualifier().nonUniform)
+    if (type.getQualifier().isNonUniform())
         return EOpConstructNonuniform;
 
+    if (type.isCoopMat())
+        return EOpConstructCooperativeMatrix;
+
     switch (type.getBasicType()) {
     case EbtStruct:
         op = EOpConstructStruct;
         break;
     case EbtSampler:
-        if (type.getSampler().combined)
+        if (type.getSampler().isCombined())
             op = EOpConstructTextureSampler;
         break;
     case EbtFloat:
@@ -1894,6 +2056,121 @@
             }
         }
         break;
+    case EbtInt:
+        if (type.getMatrixCols()) {
+            switch (type.getMatrixCols()) {
+            case 2:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructIMat2x2; break;
+                case 3: op = EOpConstructIMat2x3; break;
+                case 4: op = EOpConstructIMat2x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            case 3:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructIMat3x2; break;
+                case 3: op = EOpConstructIMat3x3; break;
+                case 4: op = EOpConstructIMat3x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            case 4:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructIMat4x2; break;
+                case 3: op = EOpConstructIMat4x3; break;
+                case 4: op = EOpConstructIMat4x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            }
+        } else {
+            switch(type.getVectorSize()) {
+            case 1: op = EOpConstructInt;   break;
+            case 2: op = EOpConstructIVec2; break;
+            case 3: op = EOpConstructIVec3; break;
+            case 4: op = EOpConstructIVec4; break;
+            default: break; // some compilers want this
+            }
+        }
+        break;
+    case EbtUint:
+        if (type.getMatrixCols()) {
+            switch (type.getMatrixCols()) {
+            case 2:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructUMat2x2; break;
+                case 3: op = EOpConstructUMat2x3; break;
+                case 4: op = EOpConstructUMat2x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            case 3:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructUMat3x2; break;
+                case 3: op = EOpConstructUMat3x3; break;
+                case 4: op = EOpConstructUMat3x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            case 4:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructUMat4x2; break;
+                case 3: op = EOpConstructUMat4x3; break;
+                case 4: op = EOpConstructUMat4x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            }
+        } else {
+            switch(type.getVectorSize()) {
+            case 1: op = EOpConstructUint;  break;
+            case 2: op = EOpConstructUVec2; break;
+            case 3: op = EOpConstructUVec3; break;
+            case 4: op = EOpConstructUVec4; break;
+            default: break; // some compilers want this
+            }
+        }
+        break;
+    case EbtBool:
+        if (type.getMatrixCols()) {
+            switch (type.getMatrixCols()) {
+            case 2:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructBMat2x2; break;
+                case 3: op = EOpConstructBMat2x3; break;
+                case 4: op = EOpConstructBMat2x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            case 3:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructBMat3x2; break;
+                case 3: op = EOpConstructBMat3x3; break;
+                case 4: op = EOpConstructBMat3x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            case 4:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructBMat4x2; break;
+                case 3: op = EOpConstructBMat4x3; break;
+                case 4: op = EOpConstructBMat4x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            }
+        } else {
+            switch(type.getVectorSize()) {
+            case 1:  op = EOpConstructBool;  break;
+            case 2:  op = EOpConstructBVec2; break;
+            case 3:  op = EOpConstructBVec3; break;
+            case 4:  op = EOpConstructBVec4; break;
+            default: break; // some compilers want this
+            }
+        }
+        break;
+#ifndef GLSLANG_WEB
     case EbtDouble:
         if (type.getMatrixCols()) {
             switch (type.getMatrixCols()) {
@@ -2007,82 +2284,6 @@
         default: break; // some compilers want this
         }
         break;
-    case EbtInt:
-        if (type.getMatrixCols()) {
-            switch (type.getMatrixCols()) {
-            case 2:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructIMat2x2; break;
-                case 3: op = EOpConstructIMat2x3; break;
-                case 4: op = EOpConstructIMat2x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            case 3:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructIMat3x2; break;
-                case 3: op = EOpConstructIMat3x3; break;
-                case 4: op = EOpConstructIMat3x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            case 4:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructIMat4x2; break;
-                case 3: op = EOpConstructIMat4x3; break;
-                case 4: op = EOpConstructIMat4x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            }
-        } else {
-            switch(type.getVectorSize()) {
-            case 1: op = EOpConstructInt;   break;
-            case 2: op = EOpConstructIVec2; break;
-            case 3: op = EOpConstructIVec3; break;
-            case 4: op = EOpConstructIVec4; break;
-            default: break; // some compilers want this
-            }
-        }
-        break;
-    case EbtUint:
-        if (type.getMatrixCols()) {
-            switch (type.getMatrixCols()) {
-            case 2:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructUMat2x2; break;
-                case 3: op = EOpConstructUMat2x3; break;
-                case 4: op = EOpConstructUMat2x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            case 3:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructUMat3x2; break;
-                case 3: op = EOpConstructUMat3x3; break;
-                case 4: op = EOpConstructUMat3x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            case 4:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructUMat4x2; break;
-                case 3: op = EOpConstructUMat4x3; break;
-                case 4: op = EOpConstructUMat4x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            }
-        } else {
-            switch(type.getVectorSize()) {
-            case 1: op = EOpConstructUint;  break;
-            case 2: op = EOpConstructUVec2; break;
-            case 3: op = EOpConstructUVec3; break;
-            case 4: op = EOpConstructUVec4; break;
-            default: break; // some compilers want this
-            }
-        }
-        break;
     case EbtInt64:
         switch(type.getVectorSize()) {
         case 1: op = EOpConstructInt64;   break;
@@ -2101,47 +2302,10 @@
         default: break; // some compilers want this
         }
         break;
-    case EbtBool:
-        if (type.getMatrixCols()) {
-            switch (type.getMatrixCols()) {
-            case 2:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructBMat2x2; break;
-                case 3: op = EOpConstructBMat2x3; break;
-                case 4: op = EOpConstructBMat2x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            case 3:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructBMat3x2; break;
-                case 3: op = EOpConstructBMat3x3; break;
-                case 4: op = EOpConstructBMat3x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            case 4:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructBMat4x2; break;
-                case 3: op = EOpConstructBMat4x3; break;
-                case 4: op = EOpConstructBMat4x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            }
-        } else {
-            switch(type.getVectorSize()) {
-            case 1:  op = EOpConstructBool;  break;
-            case 2:  op = EOpConstructBVec2; break;
-            case 3:  op = EOpConstructBVec3; break;
-            case 4:  op = EOpConstructBVec4; break;
-            default: break; // some compilers want this
-            }
-        }
-        break;
     case EbtReference:
         op = EOpConstructReference;
         break;
+#endif
     default:
         break;
     }
@@ -2600,6 +2764,7 @@
     if (aggRoot && aggRoot->getOp() == EOpNull)
         aggRoot->setOperator(EOpSequence);
 
+#ifndef GLSLANG_WEB
     // Propagate 'noContraction' label in backward from 'precise' variables.
     glslang::PropagateNoContraction(*this);
 
@@ -2609,7 +2774,11 @@
     case EShTexSampTransUpgradeTextureRemoveSampler:
         performTextureUpgradeAndSamplerRemovalTransformation(root);
         break;
+    case EShTexSampTransCount:
+        assert(0);
+        break;
     }
+#endif
 
     return true;
 }
@@ -3068,10 +3237,17 @@
 
             return false;
         break;
-
     default:
-        if (operand->getBasicType() != EbtFloat)
+        // HLSL uses this path for initial function signature finding for built-ins
+        // taking a single argument, which generally don't participate in
+        // operator-based type promotion (type conversion will occur later).
+        // For now, scalar argument cases are relying on the setType() call below.
+        if (getSource() == EShSourceHlsl)
+            break;
 
+        // GLSL only allows integer arguments for the cases identified above in the
+        // case statements.
+        if (operand->getBasicType() != EbtFloat)
             return false;
     }
 
@@ -3319,6 +3495,40 @@
         break;
     }
 
+    if (left->getType().isCoopMat() || right->getType().isCoopMat()) {
+        if (left->getType().isCoopMat() && right->getType().isCoopMat() &&
+            *left->getType().getTypeParameters() != *right->getType().getTypeParameters()) {
+            return false;
+        }
+        switch (op) {
+        case EOpMul:
+        case EOpMulAssign:
+            if (left->getType().isCoopMat() && right->getType().isCoopMat()) {
+                return false;
+            }
+            if (op == EOpMulAssign && right->getType().isCoopMat()) {
+                return false;
+            }
+            node.setOp(op == EOpMulAssign ? EOpMatrixTimesScalarAssign : EOpMatrixTimesScalar);
+            if (right->getType().isCoopMat()) {
+                node.setType(right->getType());
+            }
+            return true;
+        case EOpAdd:
+        case EOpSub:
+        case EOpDiv:
+        case EOpAssign:
+            // These require both to be cooperative matrices
+            if (!left->getType().isCoopMat() || !right->getType().isCoopMat()) {
+                return false;
+            }
+            return true;
+        default:
+            break;
+        }
+        return false;
+    }
+
     // Finish handling the case, for all ops, where both operands are scalars.
     if (left->isScalar() && right->isScalar())
         return true;
@@ -3613,217 +3823,54 @@
     TConstUnionArray leftUnionArray(size);
 
     for (int i=0; i < size; i++) {
-        switch (promoteTo) {
-        case EbtFloat:
-            switch (node->getType().getBasicType()) {
-            case EbtInt:
-                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getIConst()));
-                break;
-            case EbtUint:
-                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getUConst()));
-                break;
-            case EbtInt64:
-                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getI64Const()));
-                break;
-            case EbtUint64:
-                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getU64Const()));
-                break;
-            case EbtBool:
-                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getBConst()));
-                break;
-            case EbtFloat:
-            case EbtDouble:
-            case EbtFloat16:
-                leftUnionArray[i] = rightUnionArray[i];
-                break;
-            default:
-                return node;
-            }
-            break;
-        case EbtDouble:
-            switch (node->getType().getBasicType()) {
-            case EbtInt:
-                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getIConst()));
-                break;
-            case EbtUint:
-                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getUConst()));
-                break;
-            case EbtInt64:
-                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getI64Const()));
-                break;
-            case EbtUint64:
-                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getU64Const()));
-                break;
-            case EbtBool:
-                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getBConst()));
-                break;
-            case EbtFloat:
-            case EbtDouble:
-            case EbtFloat16:
-                leftUnionArray[i] = rightUnionArray[i];
-                break;
-            default:
-                return node;
-            }
-            break;
-        case EbtFloat16:
-            switch (node->getType().getBasicType()) {
-            case EbtInt:
-                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getIConst()));
-                break;
-            case EbtUint:
-                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getUConst()));
-                break;
-            case EbtInt64:
-                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getI64Const()));
-                break;
-            case EbtUint64:
-                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getU64Const()));
-                break;
-            case EbtBool:
-                leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getBConst()));
-                break;
-            case EbtFloat:
-            case EbtDouble:
-            case EbtFloat16:
-                leftUnionArray[i] = rightUnionArray[i];
-                break;
-            default:
-                return node;
-            }
-            break;
-        case EbtInt:
-            switch (node->getType().getBasicType()) {
-            case EbtInt:
-                leftUnionArray[i] = rightUnionArray[i];
-                break;
-            case EbtUint:
-                leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getUConst()));
-                break;
-            case EbtInt64:
-                leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getI64Const()));
-                break;
-            case EbtUint64:
-                leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getU64Const()));
-                break;
-            case EbtBool:
-                leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getBConst()));
-                break;
-            case EbtFloat:
-            case EbtDouble:
-            case EbtFloat16:
-                leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getDConst()));
-                break;
-            default:
-                return node;
-            }
-            break;
-        case EbtUint:
-            switch (node->getType().getBasicType()) {
-            case EbtInt:
-                leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getIConst()));
-                break;
-            case EbtUint:
-                leftUnionArray[i] = rightUnionArray[i];
-                break;
-            case EbtInt64:
-                leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getI64Const()));
-                break;
-            case EbtUint64:
-                leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getU64Const()));
-                break;
-            case EbtBool:
-                leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getBConst()));
-                break;
-            case EbtFloat:
-            case EbtDouble:
-            case EbtFloat16:
-                leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getDConst()));
-                break;
-            default:
-                return node;
-            }
-            break;
-        case EbtBool:
-            switch (node->getType().getBasicType()) {
-            case EbtInt:
-                leftUnionArray[i].setBConst(rightUnionArray[i].getIConst() != 0);
-                break;
-            case EbtUint:
-                leftUnionArray[i].setBConst(rightUnionArray[i].getUConst() != 0);
-                break;
-            case EbtInt64:
-                leftUnionArray[i].setBConst(rightUnionArray[i].getI64Const() != 0);
-                break;
-            case EbtUint64:
-                leftUnionArray[i].setBConst(rightUnionArray[i].getU64Const() != 0);
-                break;
-            case EbtBool:
-                leftUnionArray[i] = rightUnionArray[i];
-                break;
-            case EbtFloat:
-            case EbtDouble:
-            case EbtFloat16:
-                leftUnionArray[i].setBConst(rightUnionArray[i].getDConst() != 0.0);
-                break;
-            default:
-                return node;
-            }
-            break;
-        case EbtInt64:
-            switch (node->getType().getBasicType()) {
-            case EbtInt:
-                leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getIConst()));
-                break;
-            case EbtUint:
-                leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getUConst()));
-                break;
-            case EbtInt64:
-                leftUnionArray[i] = rightUnionArray[i];
-                break;
-            case EbtUint64:
-                leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getU64Const()));
-                break;
-            case EbtBool:
-                leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getBConst()));
-                break;
-            case EbtFloat:
-            case EbtDouble:
-            case EbtFloat16:
-                leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getDConst()));
-                break;
-            default:
-                return node;
-            }
-            break;
-        case EbtUint64:
-            switch (node->getType().getBasicType()) {
-            case EbtInt:
-                leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getIConst()));
-                break;
-            case EbtUint:
-                leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getUConst()));
-                break;
-            case EbtInt64:
-                leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getI64Const()));
-                break;
-            case EbtUint64:
-                leftUnionArray[i] = rightUnionArray[i];
-                break;
-            case EbtBool:
-                leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getBConst()));
-                break;
-            case EbtFloat:
-            case EbtDouble:
-            case EbtFloat16:
-                leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getDConst()));
-                break;
-            default:
-                return node;
-            }
-            break;
-        default:
-            return node;
+
+#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
+#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
+
+#ifdef GLSLANG_WEB
+#define TO_ALL(Get)   \
+        switch (promoteTo) { \
+        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
+        case EbtInt: PROMOTE(setIConst, int, Get); break; \
+        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
+        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
+        default: return node; \
+        }
+#else
+#define TO_ALL(Get)   \
+        switch (promoteTo) { \
+        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
+        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
+        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
+        case EbtInt8: PROMOTE(setI8Const, char, Get); break; \
+        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
+        case EbtInt: PROMOTE(setIConst, int, Get); break; \
+        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
+        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
+        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
+        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
+        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
+        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
+        default: return node; \
+        }
+#endif
+
+        switch (node->getType().getBasicType()) {
+        case EbtFloat: TO_ALL(getDConst); break;
+        case EbtInt: TO_ALL(getIConst); break;
+        case EbtUint: TO_ALL(getUConst); break;
+        case EbtBool: TO_ALL(getBConst); break;
+#ifndef GLSLANG_WEB
+        case EbtFloat16: TO_ALL(getDConst); break;
+        case EbtDouble: TO_ALL(getDConst); break;
+        case EbtInt8: TO_ALL(getI8Const); break;
+        case EbtInt16: TO_ALL(getI16Const); break;
+        case EbtInt64: TO_ALL(getI64Const); break;
+        case EbtUint8: TO_ALL(getU8Const); break;
+        case EbtUint16: TO_ALL(getU16Const); break;
+        case EbtUint64: TO_ALL(getU64Const); break;
+#endif
+        default: return node;
         }
     }
 
@@ -3852,7 +3899,7 @@
 struct TextureUpgradeAndSamplerRemovalTransform : public TIntermTraverser {
     void visitSymbol(TIntermSymbol* symbol) override {
         if (symbol->getBasicType() == EbtSampler && symbol->getType().getSampler().isTexture()) {
-            symbol->getWritableType().getSampler().combined = true;
+            symbol->getWritableType().getSampler().setCombined(true);
         }
     }
     bool visitAggregate(TVisit, TIntermAggregate* ag) override {
diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp
index 7a968ce..b464009 100644
--- a/glslang/MachineIndependent/ParseContextBase.cpp
+++ b/glslang/MachineIndependent/ParseContextBase.cpp
@@ -67,6 +67,8 @@
     }
 }
 
+#if !defined(GLSLANG_WEB) || defined(GLSLANG_WEB_DEVEL)
+
 void C_DECL TParseContextBase::error(const TSourceLoc& loc, const char* szReason, const char* szToken,
                                      const char* szExtraInfoFormat, ...)
 {
@@ -113,6 +115,8 @@
     va_end(args);
 }
 
+#endif
+
 //
 // Both test and if necessary, spit out an error, to see if the node is really
 // an l-value that can be operated on this way.
@@ -149,13 +153,15 @@
     case EvqConst:          message = "can't modify a const";        break;
     case EvqConstReadOnly:  message = "can't modify a const";        break;
     case EvqUniform:        message = "can't modify a uniform";      break;
+#ifndef GLSLANG_WEB
     case EvqBuffer:
-        if (node->getQualifier().readonly)
+        if (node->getQualifier().isReadOnly())
             message = "can't modify a readonly buffer";
+        if (node->getQualifier().isShaderRecord())
+            message = "can't modify a shaderrecordnv qualified buffer";
         break;
-#ifdef NV_EXTENSIONS
-    case EvqHitAttrNV:
-        if (language != EShLangIntersectNV)
+    case EvqHitAttr:
+        if (language != EShLangIntersect)
             message = "cannot modify hitAttributeNV in this stage";
         break;
 #endif
@@ -168,16 +174,19 @@
         case EbtSampler:
             message = "can't modify a sampler";
             break;
-        case EbtAtomicUint:
-            message = "can't modify an atomic_uint";
-            break;
         case EbtVoid:
             message = "can't modify void";
             break;
-#ifdef NV_EXTENSIONS
-        case EbtAccStructNV:
+#ifndef GLSLANG_WEB
+        case EbtAtomicUint:
+            message = "can't modify an atomic_uint";
+            break;
+        case EbtAccStruct:
             message = "can't modify accelerationStructureNV";
             break;
+        case EbtRayQuery:
+            message = "can't modify rayQueryEXT";
+            break;
 #endif
         default:
             break;
@@ -230,7 +239,7 @@
     }
 
     TIntermSymbol* symNode = node->getAsSymbolNode();
-    if (symNode && symNode->getQualifier().writeonly)
+    if (symNode && symNode->getQualifier().isWriteOnly())
         error(loc, "can't read from writeonly object: ", op, symNode->getName().c_str());
 }
 
@@ -250,11 +259,17 @@
 // Give an error if not.
 void TParseContextBase::checkIndex(const TSourceLoc& loc, const TType& type, int& index)
 {
+    const auto sizeIsSpecializationExpression = [&type]() {
+        return type.containsSpecializationSize() &&
+               type.getArraySizes()->getOuterNode() != nullptr &&
+               type.getArraySizes()->getOuterNode()->getAsSymbolNode() == nullptr; };
+
     if (index < 0) {
         error(loc, "", "[", "index out of range '%d'", index);
         index = 0;
     } else if (type.isArray()) {
-        if (type.isSizedArray() && index >= type.getOuterArraySize()) {
+        if (type.isSizedArray() && !sizeIsSpecializationExpression() &&
+            index >= type.getOuterArraySize()) {
             error(loc, "", "[", "array index out of range '%d'", index);
             index = type.getOuterArraySize() - 1;
         }
@@ -564,6 +579,7 @@
         selector.push_back(0);
 }
 
+#ifdef ENABLE_HLSL
 //
 // Make the passed-in variable information become a member of the
 // global uniform block.  If this doesn't exist yet, make it.
@@ -608,6 +624,7 @@
 
     ++firstNewMember;
 }
+#endif
 
 void TParseContextBase::finish()
 {
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
old mode 100755
new mode 100644
index d16dc99..f954802
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -2,7 +2,8 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2015 LunarG, Inc.
 // Copyright (C) 2015-2018 Google, Inc.
-// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2017, 2019 ARM Limited.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -56,13 +57,16 @@
                               infoSink, forwardCompatible, messages, entryPoint),
             inMain(false),
             blockName(nullptr),
-            limits(resources.limits),
+            limits(resources.limits)
+#ifndef GLSLANG_WEB
+            ,
             atomicUintOffsets(nullptr), anyIndexLimits(false)
+#endif
 {
     // decide whether precision qualifiers should be ignored or respected
-    if (profile == EEsProfile || spvVersion.vulkan > 0) {
+    if (isEsProfile() || spvVersion.vulkan > 0) {
         precisionManager.respectPrecisionQualifiers();
-        if (! parsingBuiltins && language == EShLangFragment && profile != EEsProfile && spvVersion.vulkan > 0)
+        if (! parsingBuiltins && language == EShLangFragment && !isEsProfile() && spvVersion.vulkan > 0)
             precisionManager.warnAboutDefaults();
     }
 
@@ -83,6 +87,7 @@
     globalInputDefaults.clear();
     globalOutputDefaults.clear();
 
+#ifndef GLSLANG_WEB
     // "Shaders in the transform
     // feedback capturing mode have an initial global default of
     //     layout(xfb_buffer = 0) out;"
@@ -94,6 +99,7 @@
 
     if (language == EShLangGeometry)
         globalOutputDefaults.layoutStream = 0;
+#endif
 
     if (entryPoint != nullptr && entryPoint->size() > 0 && *entryPoint != "main")
         infoSink.info.message(EPrefixError, "Source entry point must be \"main\"");
@@ -101,7 +107,9 @@
 
 TParseContext::~TParseContext()
 {
+#ifndef GLSLANG_WEB
     delete [] atomicUintOffsets;
+#endif
 }
 
 // Set up all default precisions as needed by the current environment.
@@ -121,7 +129,7 @@
 
     // replace with real precision defaults for those that have them
     if (obeyPrecisionQualifiers()) {
-        if (profile == EEsProfile) {
+        if (isEsProfile()) {
             // Most don't have defaults, a few default to lowp.
             TSampler sampler;
             sampler.set(EbtFloat, Esd2D);
@@ -129,7 +137,7 @@
             sampler.set(EbtFloat, EsdCube);
             defaultSamplerPrecision[computeSamplerTypeIndex(sampler)] = EpqLow;
             sampler.set(EbtFloat, Esd2D);
-            sampler.external = true;
+            sampler.setExternal(true);
             defaultSamplerPrecision[computeSamplerTypeIndex(sampler)] = EpqLow;
         }
 
@@ -138,7 +146,7 @@
         // is used to resolve the precision from the supplied arguments/operands instead.
         // So, we don't actually want to replace EpqNone with a default precision for built-ins.
         if (! parsingBuiltins) {
-            if (profile == EEsProfile && language == EShLangFragment) {
+            if (isEsProfile() && language == EShLangFragment) {
                 defaultPrecision[EbtInt] = EpqMedium;
                 defaultPrecision[EbtUint] = EpqMedium;
             } else {
@@ -147,7 +155,7 @@
                 defaultPrecision[EbtFloat] = EpqHigh;
             }
 
-            if (profile != EEsProfile) {
+            if (!isEsProfile()) {
                 // Non-ES profile
                 // All sampler precisions default to highp.
                 for (int type = 0; type < maxSamplerIndex; ++type)
@@ -163,7 +171,9 @@
 void TParseContext::setLimits(const TBuiltInResource& r)
 {
     resources = r;
+    intermediate.setLimits(r);
 
+#ifndef GLSLANG_WEB
     anyIndexLimits = ! limits.generalAttributeMatrixVectorIndexing ||
                      ! limits.generalConstantMatrixVectorIndexing ||
                      ! limits.generalSamplerIndexing ||
@@ -171,7 +181,6 @@
                      ! limits.generalVariableIndexing ||
                      ! limits.generalVaryingIndexing;
 
-    intermediate.setLimits(resources);
 
     // "Each binding point tracks its own current default offset for
     // inheritance of subsequent variables using the same binding. The initial state of compilation is that all
@@ -179,6 +188,7 @@
     atomicUintOffsets = new int[resources.maxAtomicCounterBindings];
     for (int b = 0; b < resources.maxAtomicCounterBindings; ++b)
         atomicUintOffsets[b] = 0;
+#endif
 }
 
 //
@@ -213,6 +223,7 @@
 
 void TParseContext::handlePragma(const TSourceLoc& loc, const TVector<TString>& tokens)
 {
+#ifndef GLSLANG_WEB
     if (pragmaCallback)
         pragmaCallback(loc.line, tokens);
 
@@ -275,10 +286,17 @@
         if (tokens.size() != 1)
             error(loc, "extra tokens", "#pragma", "");
         intermediate.setUseVulkanMemoryModel();
+    } else if (spvVersion.spv > 0 && tokens[0].compare("use_variable_pointers") == 0) {
+        if (tokens.size() != 1)
+            error(loc, "extra tokens", "#pragma", "");
+        if (spvVersion.spv < glslang::EShTargetSpv_1_3)
+            error(loc, "requires SPIR-V 1.3", "#pragma use_variable_pointers", "");
+        intermediate.setUseVariablePointers();
     } else if (tokens[0].compare("once") == 0) {
         warn(loc, "not implemented", "#pragma once", "");
     } else if (tokens[0].compare("glslang_binary_double_output") == 0)
         intermediate.setBinaryDoubleOutput();
+#endif
 }
 
 //
@@ -292,6 +310,7 @@
     if (symbol && symbol->getNumExtensions())
         requireExtensions(loc, symbol->getNumExtensions(), symbol->getExtensions(), symbol->getName().c_str());
 
+#ifndef GLSLANG_WEB
     if (symbol && symbol->isReadOnly()) {
         // All shared things containing an unsized array must be copied up
         // on first use, so that all future references will share its array structure,
@@ -301,20 +320,23 @@
         // If this is a variable or a block, check it and all it contains, but if this
         // is a member of an anonymous block, check the whole block, as the whole block
         // will need to be copied up if it contains an unsized array.
-        if (symbol->getType().containsUnsizedArray() ||
-            (symbol->getAsAnonMember() &&
-             symbol->getAsAnonMember()->getAnonContainer().getType().containsUnsizedArray()))
-            makeEditable(symbol);
+        //
+        // This check is being done before the block-name check further down, so guard
+        // for that too.
+        if (!symbol->getType().isUnusableName()) {
+            if (symbol->getType().containsUnsizedArray() ||
+                (symbol->getAsAnonMember() &&
+                 symbol->getAsAnonMember()->getAnonContainer().getType().containsUnsizedArray()))
+                makeEditable(symbol);
+        }
     }
+#endif
 
     const TVariable* variable;
     const TAnonMember* anon = symbol ? symbol->getAsAnonMember() : nullptr;
     if (anon) {
         // It was a member of an anonymous container.
 
-        // The "getNumExtensions()" mechanism above doesn't yet work for block members
-        blockMemberExtensionCheck(loc, nullptr, *string);
-
         // Create a subtree for its dereference.
         variable = anon->getAnonContainer().getAsVariable();
         TIntermTyped* container = intermediate.addSymbol(*variable, loc);
@@ -331,8 +353,7 @@
         // See if it was a variable.
         variable = symbol ? symbol->getAsVariable() : nullptr;
         if (variable) {
-            if ((variable->getType().getBasicType() == EbtBlock ||
-                 variable->getType().getBasicType() == EbtStruct) && variable->getType().getStruct() == nullptr) {
+            if (variable->getType().isUnusableName()) {
                 error(loc, "cannot be used (maybe an instance name is needed)", string->c_str(), "");
                 variable = nullptr;
             }
@@ -354,8 +375,8 @@
     if (variable->getType().getQualifier().isIo())
         intermediate.addIoAccessed(*string);
 
-    if (variable->getType().getBasicType() == EbtReference &&
-        variable->getType().getQualifier().isMemory()) {
+    if (variable->getType().isReference() &&
+        variable->getType().getQualifier().bufferReferenceNeedsVulkanMemoryModel()) {
         intermediate.setUseVulkanMemoryModel();
     }
 
@@ -374,7 +395,8 @@
     // basic type checks...
     variableCheck(base);
 
-    if (! base->isArray() && ! base->isMatrix() && ! base->isVector()) {
+    if (! base->isArray() && ! base->isMatrix() && ! base->isVector() && ! base->getType().isCoopMat() &&
+        ! base->isReference()) {
         if (base->getAsSymbolNode())
             error(loc, " left of '[' is not of type array, matrix, or vector ", base->getAsSymbolNode()->getName().c_str(), "");
         else
@@ -385,7 +407,7 @@
     }
 
     if (!base->isArray() && base->isVector()) {
-        if (base->getType().containsBasicType(EbtFloat16))
+        if (base->getType().contains16BitFloat())
             requireFloat16Arithmetic(loc, "[", "does not operate on types containing float16");
         if (base->getType().contains16BitInt())
             requireInt16Arithmetic(loc, "[", "does not operate on types containing (u)int16");
@@ -402,16 +424,25 @@
 
     // at least one of base and index is not a front-end constant variable...
     TIntermTyped* result = nullptr;
+
+#ifndef GLSLANG_WEB
+    if (base->isReference() && ! base->isArray()) {
+        requireExtensions(loc, 1, &E_GL_EXT_buffer_reference2, "buffer reference indexing");
+        result = intermediate.addBinaryMath(EOpAdd, base, index, loc);
+        result->setType(base->getType());
+        return result;
+    }
+    if (base->getAsSymbolNode() && isIoResizeArray(base->getType()))
+        handleIoResizeArrayAccess(loc, base);
+#endif
+
     if (index->getQualifier().isFrontEndConstant())
         checkIndex(loc, base->getType(), indexValue);
 
-    if (base->getAsSymbolNode() && isIoResizeArray(base->getType()))
-        handleIoResizeArrayAccess(loc, base);
-
     if (index->getQualifier().isFrontEndConstant()) {
+#ifndef GLSLANG_WEB
         if (base->getType().isUnsizedArray()) {
             base->getWritableType().updateImplicitArraySize(indexValue + 1);
-#ifdef NV_EXTENSIONS
             // For 2D per-view builtin arrays, update the inner dimension size in parent type
             if (base->getQualifier().isPerView() && base->getQualifier().builtIn != EbvNone) {
                 TIntermBinary* binaryNode = base->getAsBinaryNode();
@@ -422,11 +453,12 @@
                     arraySizes.setDimSize(1, std::max(arraySizes.getDimSize(1), indexValue + 1));
                 }
             }
-#endif
         } else
+#endif
             checkIndex(loc, base->getType(), indexValue);
         result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
     } else {
+#ifndef GLSLANG_WEB
         if (base->getType().isUnsizedArray()) {
             // we have a variable index into an unsized array, which is okay,
             // depending on the situation
@@ -438,6 +470,7 @@
             }
             base->getWritableType().setArrayVariablyIndexed();
         }
+#endif
         if (base->getBasicType() == EbtBlock) {
             if (base->getQualifier().storage == EvqBuffer)
                 requireProfile(base->getLoc(), ~EEsProfile, "variable indexing buffer block array");
@@ -445,7 +478,7 @@
                 profileRequires(base->getLoc(), EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5,
                                 "variable indexing uniform block array");
             else {
-                // input/output blocks either don't exist or can be variable indexed
+                // input/output blocks either don't exist or can't be variably indexed
             }
         } else if (language == EShLangFragment && base->getQualifier().isPipeOutput())
             requireProfile(base->getLoc(), ~EEsProfile, "variable indexing fragment shader output array");
@@ -459,8 +492,8 @@
         result = intermediate.addIndex(EOpIndexIndirect, base, index, loc);
     }
 
-    // Insert valid dereferenced result
-    TType newType(base->getType(), 0);  // dereferenced type
+    // Insert valid dereferenced result type
+    TType newType(base->getType(), 0);
     if (base->getType().getQualifier().isConstant() && index->getQualifier().isConstant()) {
         newType.getQualifier().storage = EvqConst;
         // If base or index is a specialization constant, the result should also be a specialization constant.
@@ -468,20 +501,27 @@
             newType.getQualifier().makeSpecConstant();
         }
     } else {
-        newType.getQualifier().makePartialTemporary();
+        newType.getQualifier().storage = EvqTemporary;
+        newType.getQualifier().specConstant = false;
     }
     result->setType(newType);
 
+#ifndef GLSLANG_WEB
+    inheritMemoryQualifiers(base->getQualifier(), result->getWritableType().getQualifier());
+
     // Propagate nonuniform
     if (base->getQualifier().isNonUniform() || index->getQualifier().isNonUniform())
         result->getWritableType().getQualifier().nonUniform = true;
 
     if (anyIndexLimits)
         handleIndexLimits(loc, base, index);
+#endif
 
     return result;
 }
 
+#ifndef GLSLANG_WEB
+
 // for ES 2.0 (version 100) limitations for almost all index operations except vertex-shader uniforms
 void TParseContext::handleIndexLimits(const TSourceLoc& /*loc*/, TIntermTyped* base, TIntermTyped* index)
 {
@@ -518,14 +558,12 @@
 {
     return type.isArray() &&
            ((language == EShLangGeometry    && type.getQualifier().storage == EvqVaryingIn) ||
-            (language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut && ! type.getQualifier().patch)
-#ifdef NV_EXTENSIONS
-            ||
-            (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn &&  type.getQualifier().pervertexNV) ||
-            (language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut && !type.getQualifier().perTaskNV)
-
-#endif
-            );
+            (language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut &&
+                ! type.getQualifier().patch) ||
+            (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn &&
+                type.getQualifier().pervertexNV) ||
+            (language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut &&
+                !type.getQualifier().perTaskNV));
 }
 
 // If an array is not isIoResizeArray() but is an io array, make sure it has the right size
@@ -554,11 +592,7 @@
 void TParseContext::ioArrayCheck(const TSourceLoc& loc, const TType& type, const TString& identifier)
 {
     if (! type.isArray() && ! symbolTable.atBuiltInLevel()) {
-        if (type.getQualifier().isArrayedIo(language)
-#ifdef NV_EXTENSIONS
-            && !type.getQualifier().layoutPassthrough
-#endif
-           )
+        if (type.getQualifier().isArrayedIo(language) && !type.getQualifier().layoutPassthrough)
             error(loc, "type must be an array:", type.getStorageQualifierString(), identifier.c_str());
     }
 }
@@ -575,7 +609,7 @@
 
     // fix array size, if it can be fixed and needs to be fixed (will allow variable indexing)
     if (symbolNode->getType().isUnsizedArray()) {
-        int newSize = getIoArrayImplicitSize(symbolNode->getType().getQualifier().isPerPrimitive());
+        int newSize = getIoArrayImplicitSize(symbolNode->getType().getQualifier());
         if (newSize > 0)
             symbolNode->getWritableType().changeOuterArraySize(newSize);
     }
@@ -589,59 +623,71 @@
 // Types without an array size will be given one.
 // Types already having a size that is wrong will get an error.
 //
-void TParseContext::checkIoArraysConsistency(const TSourceLoc& loc, bool tailOnly, bool isPerPrimitive)
+void TParseContext::checkIoArraysConsistency(const TSourceLoc &loc, bool tailOnly)
 {
-    int requiredSize = getIoArrayImplicitSize(isPerPrimitive);
-    if (requiredSize == 0)
-        return;
+    int requiredSize = 0;
+    TString featureString;
+    size_t listSize = ioArraySymbolResizeList.size();
+    size_t i = 0;
 
-    const char* feature;
-    if (language == EShLangGeometry)
-        feature = TQualifier::getGeometryString(intermediate.getInputPrimitive());
-    else if (language == EShLangTessControl
-#ifdef NV_EXTENSIONS
-          || language == EShLangFragment
-#endif
-        )
-
-        feature = "vertices";
-#ifdef NV_EXTENSIONS
-     else if (language == EShLangMeshNV) {
-        feature = isPerPrimitive ? "max_primitives" : "max_vertices";
-     }
-#endif
-    else
-        feature = "unknown";
-
+    // If tailOnly = true, only check the last array symbol in the list.
     if (tailOnly) {
-        checkIoArrayConsistency(loc, requiredSize, feature, ioArraySymbolResizeList.back()->getWritableType(), ioArraySymbolResizeList.back()->getName());
-        return;
+        i = listSize - 1;
     }
+    for (bool firstIteration = true; i < listSize; ++i) {
+        TType &type = ioArraySymbolResizeList[i]->getWritableType();
 
-    for (size_t i = 0; i < ioArraySymbolResizeList.size(); ++i)
-        checkIoArrayConsistency(loc, requiredSize, feature, ioArraySymbolResizeList[i]->getWritableType(), ioArraySymbolResizeList[i]->getName());
+        // As I/O array sizes don't change, fetch requiredSize only once,
+        // except for mesh shaders which could have different I/O array sizes based on type qualifiers.
+        if (firstIteration || (language == EShLangMeshNV)) {
+            requiredSize = getIoArrayImplicitSize(type.getQualifier(), &featureString);
+            if (requiredSize == 0)
+                break;
+            firstIteration = false;
+        }
+
+        checkIoArrayConsistency(loc, requiredSize, featureString.c_str(), type,
+                                ioArraySymbolResizeList[i]->getName());
+    }
 }
 
-int TParseContext::getIoArrayImplicitSize(bool isPerPrimitive) const
+int TParseContext::getIoArrayImplicitSize(const TQualifier &qualifier, TString *featureString) const
 {
-    if (language == EShLangGeometry)
-        return TQualifier::mapGeometryToSize(intermediate.getInputPrimitive());
-    else if (language == EShLangTessControl)
-        return intermediate.getVertices() != TQualifier::layoutNotSet ? intermediate.getVertices() : 0;
-#ifdef NV_EXTENSIONS
-    else if (language == EShLangFragment)
-        return 3; //Number of vertices for Fragment shader is always three.
-    else if (language == EShLangMeshNV) {
-        if (isPerPrimitive) {
-            return intermediate.getPrimitives() != TQualifier::layoutNotSet ? intermediate.getPrimitives() : 0;
-        } else {
-            return intermediate.getVertices() != TQualifier::layoutNotSet ? intermediate.getVertices() : 0;
+    int expectedSize = 0;
+    TString str = "unknown";
+    unsigned int maxVertices = intermediate.getVertices() != TQualifier::layoutNotSet ? intermediate.getVertices() : 0;
+
+    if (language == EShLangGeometry) {
+        expectedSize = TQualifier::mapGeometryToSize(intermediate.getInputPrimitive());
+        str = TQualifier::getGeometryString(intermediate.getInputPrimitive());
+    }
+    else if (language == EShLangTessControl) {
+        expectedSize = maxVertices;
+        str = "vertices";
+    } else if (language == EShLangFragment) {
+        // Number of vertices for Fragment shader is always three.
+        expectedSize = 3;
+        str = "vertices";
+    } else if (language == EShLangMeshNV) {
+        unsigned int maxPrimitives =
+            intermediate.getPrimitives() != TQualifier::layoutNotSet ? intermediate.getPrimitives() : 0;
+        if (qualifier.builtIn == EbvPrimitiveIndicesNV) {
+            expectedSize = maxPrimitives * TQualifier::mapGeometryToSize(intermediate.getOutputPrimitive());
+            str = "max_primitives*";
+            str += TQualifier::getGeometryString(intermediate.getOutputPrimitive());
+        }
+        else if (qualifier.isPerPrimitive()) {
+            expectedSize = maxPrimitives;
+            str = "max_primitives";
+        }
+        else {
+            expectedSize = maxVertices;
+            str = "max_vertices";
         }
     }
-#endif
-
-    else
-        return 0;
+    if (featureString)
+        *featureString = str;
+    return expectedSize;
 }
 
 void TParseContext::checkIoArrayConsistency(const TSourceLoc& loc, int requiredSize, const char* feature, TType& type, const TString& name)
@@ -653,19 +699,19 @@
             error(loc, "inconsistent input primitive for array size of", feature, name.c_str());
         else if (language == EShLangTessControl)
             error(loc, "inconsistent output number of vertices for array size of", feature, name.c_str());
-#ifdef NV_EXTENSIONS
         else if (language == EShLangFragment) {
             if (type.getOuterArraySize() > requiredSize)
                 error(loc, " cannot be greater than 3 for pervertexNV", feature, name.c_str());
         }
         else if (language == EShLangMeshNV)
             error(loc, "inconsistent output array size of", feature, name.c_str());
-#endif
         else
             assert(0);
     }
 }
 
+#endif // GLSLANG_WEB
+
 // Handle seeing a binary node with a math operation.
 // Returns nullptr if not semantically allowed.
 TIntermTyped* TParseContext::handleBinaryMath(const TSourceLoc& loc, const char* str, TOperator op, TIntermTyped* left, TIntermTyped* right)
@@ -688,7 +734,7 @@
         break;
     }
 
-    if (((left->getType().containsBasicType(EbtFloat16) || right->getType().containsBasicType(EbtFloat16)) && !float16Arithmetic()) ||
+    if (((left->getType().contains16BitFloat() || right->getType().contains16BitFloat()) && !float16Arithmetic()) ||
         ((left->getType().contains16BitInt() || right->getType().contains16BitInt()) && !int16Arithmetic()) ||
         ((left->getType().contains8BitInt() || right->getType().contains8BitInt()) && !int8Arithmetic())) {
         allowed = false;
@@ -710,14 +756,13 @@
     rValueErrorCheck(loc, str, childNode);
 
     bool allowed = true;
-    if ((childNode->getType().containsBasicType(EbtFloat16) && !float16Arithmetic()) ||
+    if ((childNode->getType().contains16BitFloat() && !float16Arithmetic()) ||
         (childNode->getType().contains16BitInt() && !int16Arithmetic()) ||
         (childNode->getType().contains8BitInt() && !int8Arithmetic())) {
         allowed = false;
     }
 
     TIntermTyped* result = nullptr;
-    
     if (allowed)
         result = intermediate.addUnaryMath(op, childNode, loc);
 
@@ -749,7 +794,7 @@
             const char* feature = ".length() on vectors and matrices";
             requireProfile(loc, ~EEsProfile, feature);
             profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, feature);
-        } else {
+        } else if (!base->getType().isCoopMat()) {
             error(loc, "does not operate on this type:", field.c_str(), base->getType().getCompleteString().c_str());
 
             return base;
@@ -766,6 +811,11 @@
         return base;
     }
 
+    if (base->getType().isCoopMat()) {
+        error(loc, "cannot apply to a cooperative matrix type:", ".", field.c_str());
+        return base;
+    }
+
     // It's neither an array nor .length() if we get here,
     // leaving swizzles and struct/block dereferences.
 
@@ -781,7 +831,7 @@
         TSwizzleSelectors<TVectorSelector> selectors;
         parseSwizzleSelector(loc, field, base->getVectorSize(), selectors);
 
-        if (base->isVector() && selectors.size() != 1 && base->getType().containsBasicType(EbtFloat16))
+        if (base->isVector() && selectors.size() != 1 && base->getType().contains16BitFloat())
             requireFloat16Arithmetic(loc, ".", "can't swizzle types containing float16");
         if (base->isVector() && selectors.size() != 1 && base->getType().contains16BitInt())
             requireInt16Arithmetic(loc, ".", "can't swizzle types containing (u)int16");
@@ -816,12 +866,10 @@
             if (base->getType().getQualifier().isSpecConstant())
                 result->getWritableType().getQualifier().makeSpecConstant();
         }
-    } else if (base->getBasicType() == EbtStruct ||
-               base->getBasicType() == EbtBlock ||
-               base->getBasicType() == EbtReference) {
-        const TTypeList* fields = base->getBasicType() == EbtReference ?
-                                                            base->getType().getReferentType()->getStruct() :
-                                                            base->getType().getStruct();
+    } else if (base->isStruct() || base->isReference()) {
+        const TTypeList* fields = base->isReference() ?
+                                  base->getType().getReferentType()->getStruct() :
+                                  base->getType().getStruct();
         bool fieldFound = false;
         int member;
         for (member = 0; member < (int)fields->size(); ++member) {
@@ -834,21 +882,22 @@
             if (base->getType().getQualifier().isFrontEndConstant())
                 result = intermediate.foldDereference(base, member, loc);
             else {
-                blockMemberExtensionCheck(loc, base, field);
+                blockMemberExtensionCheck(loc, base, member, field);
                 TIntermTyped* index = intermediate.addConstantUnion(member, loc);
                 result = intermediate.addIndex(EOpIndexDirectStruct, base, index, loc);
                 result->setType(*(*fields)[member].type);
                 if ((*fields)[member].type->getQualifier().isIo())
                     intermediate.addIoAccessed(field);
             }
+            inheritMemoryQualifiers(base->getQualifier(), result->getWritableType().getQualifier());
         } else
             error(loc, "no such field in structure", field.c_str(), "");
     } else
         error(loc, "does not apply to this type:", field.c_str(), base->getType().getCompleteString().c_str());
 
     // Propagate noContraction up the dereference chain
-    if (base->getQualifier().noContraction)
-        result->getWritableType().getQualifier().noContraction = true;
+    if (base->getQualifier().isNoContraction())
+        result->getWritableType().getQualifier().setNoContraction();
 
     // Propagate nonuniform
     if (base->getQualifier().isNonUniform())
@@ -857,14 +906,30 @@
     return result;
 }
 
-void TParseContext::blockMemberExtensionCheck(const TSourceLoc& loc, const TIntermTyped* /*base*/, const TString& field)
+void TParseContext::blockMemberExtensionCheck(const TSourceLoc& loc, const TIntermTyped* base, int member, const TString& memberName)
 {
-    if (profile == EEsProfile && field == "gl_PointSize") {
-        if (language == EShLangGeometry)
-            requireExtensions(loc, Num_AEP_geometry_point_size, AEP_geometry_point_size, "gl_PointSize");
-        else if (language == EShLangTessControl || language == EShLangTessEvaluation)
-            requireExtensions(loc, Num_AEP_tessellation_point_size, AEP_tessellation_point_size, "gl_PointSize");
-    }
+    // a block that needs extension checking is either 'base', or if arrayed,
+    // one level removed to the left
+    const TIntermSymbol* baseSymbol = nullptr;
+    if (base->getAsBinaryNode() == nullptr)
+        baseSymbol = base->getAsSymbolNode();
+    else
+        baseSymbol = base->getAsBinaryNode()->getLeft()->getAsSymbolNode();
+    if (baseSymbol == nullptr)
+        return;
+    const TSymbol* symbol = symbolTable.find(baseSymbol->getName());
+    if (symbol == nullptr)
+        return;
+    const TVariable* variable = symbol->getAsVariable();
+    if (variable == nullptr)
+        return;
+    if (!variable->hasMemberExtensions())
+        return;
+
+    // We now have a variable that is the base of a dot reference
+    // with members that need extension checking.
+    if (variable->getNumMemberExtensions(member) > 0)
+        requireExtensions(loc, variable->getNumMemberExtensions(member), variable->getMemberExtensions(member), memberName.c_str());
 }
 
 //
@@ -1072,7 +1137,7 @@
             if (builtIn && fnCandidate->getNumExtensions())
                 requireExtensions(loc, fnCandidate->getNumExtensions(), fnCandidate->getExtensions(), fnCandidate->getName().c_str());
 
-            if (builtIn && fnCandidate->getType().containsBasicType(EbtFloat16))
+            if (builtIn && fnCandidate->getType().contains16BitFloat())
                 requireFloat16Arithmetic(loc, "built-in function", "float16 types can only be in uniform block or buffer storage");
             if (builtIn && fnCandidate->getType().contains16BitInt())
                 requireInt16Arithmetic(loc, "built-in function", "(u)int16 types can only be in uniform block or buffer storage");
@@ -1092,9 +1157,11 @@
                         if (lValueErrorCheck(arguments->getLoc(), "assign", arg->getAsTyped()))
                             error(arguments->getLoc(), "Non-L-value cannot be passed for 'out' or 'inout' parameters.", "out", "");
                     }
-                    TQualifier& argQualifier = arg->getAsTyped()->getQualifier();
-                    if (argQualifier.isMemory()) {
+                    const TType& argType = arg->getAsTyped()->getType();
+                    const TQualifier& argQualifier = argType.getQualifier();
+                    if (argQualifier.isMemory() && (argType.containsOpaque() || argType.isReference())) {
                         const char* message = "argument cannot drop memory qualifier when passed to formal parameter";
+#ifndef GLSLANG_WEB
                         if (argQualifier.volatil && ! formalQualifier.volatil)
                             error(arguments->getLoc(), message, "volatile", "");
                         if (argQualifier.coherent && ! (formalQualifier.devicecoherent || formalQualifier.coherent))
@@ -1111,9 +1178,19 @@
                             error(arguments->getLoc(), message, "readonly", "");
                         if (argQualifier.writeonly && ! formalQualifier.writeonly)
                             error(arguments->getLoc(), message, "writeonly", "");
+                        // Don't check 'restrict', it is different than the rest:
+                        // "...but only restrict can be taken away from a calling argument, by a formal parameter that
+                        // lacks the restrict qualifier..."
+#endif
                     }
-
-                    if (builtIn && arg->getAsTyped()->getType().containsBasicType(EbtFloat16))
+                    if (!builtIn && argQualifier.getFormat() != formalQualifier.getFormat()) {
+                        // we have mismatched formats, which should only be allowed if writeonly
+                        // and at least one format is unknown
+                        if (!formalQualifier.isWriteOnly() || (formalQualifier.getFormat() != ElfNone &&
+                                                                  argQualifier.getFormat() != ElfNone))
+                            error(arguments->getLoc(), "image formats must match", "format", "");
+                    }
+                    if (builtIn && arg->getAsTyped()->getType().contains16BitFloat())
                         requireFloat16Arithmetic(arguments->getLoc(), "built-in function", "float16 types can only be in uniform block or buffer storage");
                     if (builtIn && arg->getAsTyped()->getType().contains16BitInt())
                         requireInt16Arithmetic(arguments->getLoc(), "built-in function", "(u)int16 types can only be in uniform block or buffer storage");
@@ -1153,9 +1230,11 @@
                         intermediate.addToCallGraph(infoSink, currentCaller, fnCandidate->getMangledName());
                 }
 
+#ifndef GLSLANG_WEB
                 if (builtIn)
                     nonOpBuiltInCheck(loc, *fnCandidate, *call);
                 else
+#endif
                     userFunctionCallCheck(loc, *call);
             }
 
@@ -1170,6 +1249,13 @@
                 }
                 result = addOutputArgumentConversions(*fnCandidate, *result->getAsAggregate());
             }
+
+            if (result->getAsTyped()->getType().isCoopMat() &&
+               !result->getAsTyped()->getType().isParameterized()) {
+                assert(fnCandidate->getBuiltInOp() == EOpCooperativeMatrixMulAdd);
+
+                result->setType(result->getAsAggregate()->getSequence()[2]->getAsTyped()->getType());
+            }
         }
     }
 
@@ -1268,6 +1354,9 @@
         case EOpInterpolateAtSample:
             numArgs = 1;
             break;
+        case EOpDebugPrintf:
+            numArgs = 0;
+            break;
         default:
             break;
         }
@@ -1277,13 +1366,9 @@
             operationPrecision = std::max(operationPrecision, function[arg].type->getQualifier().precision);
         }
         // compute the result precision
-#ifdef AMD_EXTENSIONS
         if (agg->isSampling() ||
             agg->getOp() == EOpImageLoad || agg->getOp() == EOpImageStore ||
             agg->getOp() == EOpImageLoadLod || agg->getOp() == EOpImageStoreLod)
-#else
-        if (agg->isSampling() || agg->getOp() == EOpImageLoad || agg->getOp() == EOpImageStore)
-#endif
             resultPrecision = sequence[0]->getAsTyped()->getQualifier().precision;
         else if (function.getType().getBasicType() != EbtBool)
             resultPrecision = function.getType().getQualifier().precision == EpqNone ?
@@ -1304,7 +1389,9 @@
 
 TIntermNode* TParseContext::handleReturnValue(const TSourceLoc& loc, TIntermTyped* value)
 {
+#ifndef GLSLANG_WEB
     storage16BitAssignmentCheck(loc, value->getType(), "return");
+#endif
 
     functionReturnsValue = true;
     if (currentFunctionType->getBasicType() == EbtVoid) {
@@ -1329,6 +1416,7 @@
 // See if the operation is being done in an illegal location.
 void TParseContext::checkLocation(const TSourceLoc& loc, TOperator op)
 {
+#ifndef GLSLANG_WEB
     switch (op) {
     case EOpBarrier:
         if (language == EShLangTessControl) {
@@ -1340,9 +1428,48 @@
                 error(loc, "tessellation control barrier() cannot be placed after a return from main()", "", "");
         }
         break;
+    case EOpBeginInvocationInterlock:
+        if (language != EShLangFragment)
+            error(loc, "beginInvocationInterlockARB() must be in a fragment shader", "", "");
+        if (! inMain)
+            error(loc, "beginInvocationInterlockARB() must be in main()", "", "");
+        else if (postEntryPointReturn)
+            error(loc, "beginInvocationInterlockARB() cannot be placed after a return from main()", "", "");
+        if (controlFlowNestingLevel > 0)
+            error(loc, "beginInvocationInterlockARB() cannot be placed within flow control", "", "");
+
+        if (beginInvocationInterlockCount > 0)
+            error(loc, "beginInvocationInterlockARB() must only be called once", "", "");
+        if (endInvocationInterlockCount > 0)
+            error(loc, "beginInvocationInterlockARB() must be called before endInvocationInterlockARB()", "", "");
+
+        beginInvocationInterlockCount++;
+
+        // default to pixel_interlock_ordered
+        if (intermediate.getInterlockOrdering() == EioNone)
+            intermediate.setInterlockOrdering(EioPixelInterlockOrdered);
+        break;
+    case EOpEndInvocationInterlock:
+        if (language != EShLangFragment)
+            error(loc, "endInvocationInterlockARB() must be in a fragment shader", "", "");
+        if (! inMain)
+            error(loc, "endInvocationInterlockARB() must be in main()", "", "");
+        else if (postEntryPointReturn)
+            error(loc, "endInvocationInterlockARB() cannot be placed after a return from main()", "", "");
+        if (controlFlowNestingLevel > 0)
+            error(loc, "endInvocationInterlockARB() cannot be placed within flow control", "", "");
+
+        if (endInvocationInterlockCount > 0)
+            error(loc, "endInvocationInterlockARB() must only be called once", "", "");
+        if (beginInvocationInterlockCount == 0)
+            error(loc, "beginInvocationInterlockARB() must be called before endInvocationInterlockARB()", "", "");
+
+        endInvocationInterlockCount++;
+        break;
     default:
         break;
     }
+#endif
 }
 
 // Finish processing object.length(). This started earlier in handleDotDereference(), where
@@ -1360,29 +1487,28 @@
         const TType& type = intermNode->getAsTyped()->getType();
         if (type.isArray()) {
             if (type.isUnsizedArray()) {
+#ifndef GLSLANG_WEB
                 if (intermNode->getAsSymbolNode() && isIoResizeArray(type)) {
                     // We could be between a layout declaration that gives a built-in io array implicit size and
                     // a user redeclaration of that array, meaning we have to substitute its implicit size here
                     // without actually redeclaring the array.  (It is an error to use a member before the
                     // redeclaration, but not an error to use the array name itself.)
                     const TString& name = intermNode->getAsSymbolNode()->getName();
-                    if (name == "gl_in" || name == "gl_out"
-#ifdef NV_EXTENSIONS
-                        || name == "gl_MeshVerticesNV"
-                        || name == "gl_MeshPrimitivesNV"
-#endif
-                        )
-                    {
-                        length = getIoArrayImplicitSize(type.getQualifier().isPerPrimitive());
+                    if (name == "gl_in" || name == "gl_out" || name == "gl_MeshVerticesNV" ||
+                        name == "gl_MeshPrimitivesNV") {
+                        length = getIoArrayImplicitSize(type.getQualifier());
                     }
                 }
+#endif
                 if (length == 0) {
+#ifndef GLSLANG_WEB
                     if (intermNode->getAsSymbolNode() && isIoResizeArray(type))
                         error(loc, "", function->getName().c_str(), "array must first be sized by a redeclaration or layout qualifier");
                     else if (isRuntimeLength(*intermNode->getAsTyped())) {
                         // Create a unary op and let the back end handle it
                         return intermediate.addBuiltInFunctionCall(loc, EOpArrayLength, true, intermNode, TType(EbtInt));
                     } else
+#endif
                         error(loc, "", function->getName().c_str(), "array must be declared with a size before using this method");
                 }
             } else if (type.getOuterArrayNode()) {
@@ -1396,6 +1522,8 @@
             length = type.getMatrixCols();
         else if (type.isVector())
             length = type.getVectorSize();
+        else if (type.isCoopMat())
+            return intermediate.addBuiltInFunctionCall(loc, EOpArrayLength, true, intermNode, TType(EbtInt));
         else {
             // we should not get here, because earlier semantic checking should have prevented this path
             error(loc, ".length()", "unexpected use of .length()", "");
@@ -1413,6 +1541,7 @@
 //
 void TParseContext::addInputArgumentConversions(const TFunction& function, TIntermNode*& arguments) const
 {
+#ifndef GLSLANG_WEB
     TIntermAggregate* aggregate = arguments->getAsAggregate();
 
     // Process each argument's conversion
@@ -1422,7 +1551,8 @@
         // means take 'arguments' itself as the one argument.
         TIntermTyped* arg = function.getParamCount() == 1 ? arguments->getAsTyped() : (aggregate ? aggregate->getSequence()[i]->getAsTyped() : arguments->getAsTyped());
         if (*function[i].type != arg->getType()) {
-            if (function[i].type->getQualifier().isParamInput()) {
+            if (function[i].type->getQualifier().isParamInput() &&
+               !function[i].type->isCoopMat()) {
                 // In-qualified arguments just need an extra node added above the argument to
                 // convert to the correct type.
                 arg = intermediate.addConversion(EOpFunctionCall, *function[i].type, arg);
@@ -1439,6 +1569,7 @@
             }
         }
     }
+#endif
 }
 
 //
@@ -1450,6 +1581,9 @@
 //
 TIntermTyped* TParseContext::addOutputArgumentConversions(const TFunction& function, TIntermAggregate& intermNode) const
 {
+#ifdef GLSLANG_WEB
+    return &intermNode;
+#else
     TIntermSequence& arguments = intermNode.getSequence();
 
     // Will there be any output conversions?
@@ -1490,7 +1624,14 @@
             if (function[i].type->getQualifier().isParamOutput()) {
                 // Out-qualified arguments need to use the topology set up above.
                 // do the " ...(tempArg, ...), arg = tempArg" bit from above
-                TVariable* tempArg = makeInternalVariable("tempArg", *function[i].type);
+                TType paramType;
+                paramType.shallowCopy(*function[i].type);
+                if (arguments[i]->getAsTyped()->getType().isParameterized() &&
+                    !paramType.isParameterized()) {
+                    paramType.shallowCopy(arguments[i]->getAsTyped()->getType());
+                    paramType.copyTypeParameters(*arguments[i]->getAsTyped()->getType().getTypeParameters());
+                }
+                TVariable* tempArg = makeInternalVariable("tempArg", paramType);
                 tempArg->getWritableType().getQualifier().makeTemporary();
                 TIntermSymbol* tempArgNode = intermediate.addSymbol(*tempArg, intermNode.getLoc());
                 TIntermTyped* tempAssign = intermediate.addAssign(EOpAssign, arguments[i]->getAsTyped(), tempArgNode, arguments[i]->getLoc());
@@ -1510,6 +1651,7 @@
     conversionTree = intermediate.setAggregateOperator(conversionTree, EOpComma, intermNode.getType(), intermNode.getLoc());
 
     return conversionTree;
+#endif
 }
 
 void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction& fnCandidate, const TIntermOperator& callNode)
@@ -1522,6 +1664,7 @@
     const int gl_SemanticsAcquireRelease  = 0x8;
     const int gl_SemanticsMakeAvailable   = 0x2000;
     const int gl_SemanticsMakeVisible     = 0x4000;
+    const int gl_SemanticsVolatile        = 0x8000;
 
     //const int gl_StorageSemanticsNone     = 0x0;
     const int gl_StorageSemanticsBuffer   = 0x40;
@@ -1533,6 +1676,9 @@
     unsigned int semantics = 0, storageClassSemantics = 0;
     unsigned int semantics2 = 0, storageClassSemantics2 = 0;
 
+    const TIntermTyped* arg0 = (*argp)[0]->getAsTyped();
+    const bool isMS = arg0->getBasicType() == EbtSampler && arg0->getType().getSampler().isMultiSample();
+
     // Grab the semantics and storage class semantics from the operands, based on opcode
     switch (callNode.getOp()) {
     case EOpAtomicAdd:
@@ -1565,18 +1711,18 @@
     case EOpImageAtomicXor:
     case EOpImageAtomicExchange:
     case EOpImageAtomicStore:
-        storageClassSemantics = (*argp)[4]->getAsConstantUnion()->getConstArray()[0].getIConst();
-        semantics = (*argp)[5]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        storageClassSemantics = (*argp)[isMS ? 5 : 4]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics = (*argp)[isMS ? 6 : 5]->getAsConstantUnion()->getConstArray()[0].getIConst();
         break;
     case EOpImageAtomicLoad:
-        storageClassSemantics = (*argp)[3]->getAsConstantUnion()->getConstArray()[0].getIConst();
-        semantics = (*argp)[4]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        storageClassSemantics = (*argp)[isMS ? 4 : 3]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics = (*argp)[isMS ? 5 : 4]->getAsConstantUnion()->getConstArray()[0].getIConst();
         break;
     case EOpImageAtomicCompSwap:
-        storageClassSemantics = (*argp)[5]->getAsConstantUnion()->getConstArray()[0].getIConst();
-        semantics = (*argp)[6]->getAsConstantUnion()->getConstArray()[0].getIConst();
-        storageClassSemantics2 = (*argp)[7]->getAsConstantUnion()->getConstArray()[0].getIConst();
-        semantics2 = (*argp)[8]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        storageClassSemantics = (*argp)[isMS ? 6 : 5]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics = (*argp)[isMS ? 7 : 6]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        storageClassSemantics2 = (*argp)[isMS ? 8 : 7]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics2 = (*argp)[isMS ? 9 : 8]->getAsConstantUnion()->getConstArray()[0].getIConst();
         break;
 
     case EOpBarrier:
@@ -1611,7 +1757,8 @@
                                       gl_SemanticsRelease |
                                       gl_SemanticsAcquireRelease |
                                       gl_SemanticsMakeAvailable |
-                                      gl_SemanticsMakeVisible))) {
+                                      gl_SemanticsMakeVisible |
+                                      gl_SemanticsVolatile))) {
         error(loc, "Invalid semantics value", fnCandidate.getName().c_str(), "");
     }
     if (((storageClassSemantics | storageClassSemantics2) & ~(gl_StorageSemanticsBuffer |
@@ -1663,10 +1810,18 @@
         error(loc, "gl_SemanticsMakeVisible requires gl_SemanticsAcquire or gl_SemanticsAcquireRelease",
               fnCandidate.getName().c_str(), "");
     }
-
+    if ((semantics & gl_SemanticsVolatile) &&
+        (callNode.getOp() == EOpMemoryBarrier || callNode.getOp() == EOpBarrier)) {
+        error(loc, "gl_SemanticsVolatile must not be used with memoryBarrier or controlBarrier",
+              fnCandidate.getName().c_str(), "");
+    }
+    if ((callNode.getOp() == EOpAtomicCompSwap || callNode.getOp() == EOpImageAtomicCompSwap) &&
+        ((semantics ^ semantics2) & gl_SemanticsVolatile)) {
+        error(loc, "semEqual and semUnequal must either both include gl_SemanticsVolatile or neither",
+              fnCandidate.getName().c_str(), "");
+    }
 }
 
-
 //
 // Do additional checking of built-in function calls that is not caught
 // by normal semantic checks on argument type, extension tagging, etc.
@@ -1694,6 +1849,7 @@
     TString featureString;
     const char* feature = nullptr;
     switch (callNode.getOp()) {
+#ifndef GLSLANG_WEB
     case EOpTextureGather:
     case EOpTextureGatherOffset:
     case EOpTextureGatherOffsets:
@@ -1750,7 +1906,6 @@
                 error(loc, "must be a compile-time constant:", feature, "component argument");
         }
 
-#ifdef AMD_EXTENSIONS
         bool bias = false;
         if (callNode.getOp() == EOpTextureGather)
             bias = fnCandidate.getParamCount() > 3;
@@ -1765,12 +1920,8 @@
             profileRequires(loc, ~EEsProfile, 450, nullptr, feature);
             requireExtensions(loc, 1, &E_GL_AMD_texture_gather_bias_lod, feature);
         }
-#endif
-
         break;
     }
-
-#ifdef AMD_EXTENSIONS
     case EOpSparseTextureGather:
     case EOpSparseTextureGatherOffset:
     case EOpSparseTextureGatherOffsets:
@@ -1848,7 +1999,7 @@
         int arg = -1;
         switch (callNode.getOp()) {
         case EOpTextureOffset:          arg = 2;  break;
-        case EOpTextureFetchOffset:     arg = (arg0->getType().getSampler().dim != EsdRect) ? 3 : 2; break;
+        case EOpTextureFetchOffset:     arg = (arg0->getType().getSampler().isRect()) ? 2 : 3; break;
         case EOpTextureProjOffset:      arg = 2;  break;
         case EOpTextureLodOffset:       arg = 3;  break;
         case EOpTextureProjLodOffset:   arg = 3;  break;
@@ -1861,19 +2012,21 @@
 
         if (arg > 0) {
 
-#ifdef AMD_EXTENSIONS
-            bool f16ShadowCompare = (*argp)[1]->getAsTyped()->getBasicType() == EbtFloat16 && arg0->getType().getSampler().shadow;
+#ifndef GLSLANG_WEB
+            bool f16ShadowCompare = (*argp)[1]->getAsTyped()->getBasicType() == EbtFloat16 &&
+                                    arg0->getType().getSampler().shadow;
             if (f16ShadowCompare)
                 ++arg;
 #endif
-            if (! (*argp)[arg]->getAsConstantUnion())
+            if (! (*argp)[arg]->getAsTyped()->getQualifier().isConstant())
                 error(loc, "argument must be compile-time constant", "texel offset", "");
-            else {
+            else if ((*argp)[arg]->getAsConstantUnion()) {
                 const TType& type = (*argp)[arg]->getAsTyped()->getType();
                 for (int c = 0; c < type.getVectorSize(); ++c) {
                     int offset = (*argp)[arg]->getAsConstantUnion()->getConstArray()[c].getIConst();
                     if (offset > resources.maxProgramTexelOffset || offset < resources.minProgramTexelOffset)
-                        error(loc, "value is out of range:", "texel offset", "[gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]");
+                        error(loc, "value is out of range:", "texel offset",
+                              "[gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]");
                 }
             }
         }
@@ -1881,16 +2034,32 @@
         break;
     }
 
-#ifdef NV_EXTENSIONS
-    case EOpTraceNV:
+#ifndef GLSLANG_WEB
+    case EOpTrace:
         if (!(*argp)[10]->getAsConstantUnion())
             error(loc, "argument must be compile-time constant", "payload number", "");
         break;
-    case EOpExecuteCallableNV:
+    case EOpExecuteCallable:
         if (!(*argp)[1]->getAsConstantUnion())
             error(loc, "argument must be compile-time constant", "callable data number", "");
         break;
-#endif
+
+    case EOpRayQueryGetIntersectionType:
+    case EOpRayQueryGetIntersectionT:
+    case EOpRayQueryGetIntersectionInstanceCustomIndex:
+    case EOpRayQueryGetIntersectionInstanceId:
+    case EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset:
+    case EOpRayQueryGetIntersectionGeometryIndex:
+    case EOpRayQueryGetIntersectionPrimitiveIndex:
+    case EOpRayQueryGetIntersectionBarycentrics:
+    case EOpRayQueryGetIntersectionFrontFace:
+    case EOpRayQueryGetIntersectionObjectRayDirection:
+    case EOpRayQueryGetIntersectionObjectRayOrigin:
+    case EOpRayQueryGetIntersectionObjectToWorld:
+    case EOpRayQueryGetIntersectionWorldToObject:
+        if (!(*argp)[1]->getAsConstantUnion())
+            error(loc, "argument must be compile-time constant", "committed", "");
+        break;
 
     case EOpTextureQuerySamples:
     case EOpImageQuerySamples:
@@ -1912,12 +2081,12 @@
         // Make sure the image types have the correct layout() format and correct argument types
         const TType& imageType = arg0->getType();
         if (imageType.getSampler().type == EbtInt || imageType.getSampler().type == EbtUint) {
-            if (imageType.getQualifier().layoutFormat != ElfR32i && imageType.getQualifier().layoutFormat != ElfR32ui)
+            if (imageType.getQualifier().getFormat() != ElfR32i && imageType.getQualifier().getFormat() != ElfR32ui)
                 error(loc, "only supported on image with format r32i or r32ui", fnCandidate.getName().c_str(), "");
         } else {
             if (fnCandidate.getName().compare(0, 19, "imageAtomicExchange") != 0)
                 error(loc, "only supported on integer images", fnCandidate.getName().c_str(), "");
-            else if (imageType.getQualifier().layoutFormat != ElfR32f && profile == EEsProfile)
+            else if (imageType.getQualifier().getFormat() != ElfR32f && isEsProfile())
                 error(loc, "only supported on image with format r32f", fnCandidate.getName().c_str(), "");
         }
 
@@ -1945,13 +2114,9 @@
             requireExtensions(loc, 1, &E_GL_KHR_memory_scope_semantics, fnCandidate.getName().c_str());
             memorySemanticsCheck(loc, fnCandidate, callNode);
         } else if (arg0->getType().getBasicType() == EbtInt64 || arg0->getType().getBasicType() == EbtUint64) {
-#ifdef NV_EXTENSIONS
             const char* const extensions[2] = { E_GL_NV_shader_atomic_int64,
                                                 E_GL_EXT_shader_atomic_int64 };
             requireExtensions(loc, 2, extensions, fnCandidate.getName().c_str());
-#else
-            requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_int64, fnCandidate.getName().c_str());
-#endif
         }
         break;
     }
@@ -1959,9 +2124,7 @@
     case EOpInterpolateAtCentroid:
     case EOpInterpolateAtSample:
     case EOpInterpolateAtOffset:
-#ifdef AMD_EXTENSIONS
     case EOpInterpolateAtVertex:
-#endif
         // Make sure the first argument is an interpolant, or an array element of an interpolant
         if (arg0->getType().getQualifier().storage != EvqVaryingIn) {
             // It might still be an array element.
@@ -1971,13 +2134,12 @@
             //
             // ES and desktop 4.3 and earlier:  swizzles may not be used
             // desktop 4.4 and later: swizzles may be used
-            bool swizzleOkay = (profile != EEsProfile) && (version >= 440);
+            bool swizzleOkay = (!isEsProfile()) && (version >= 440);
             const TIntermTyped* base = TIntermediate::findLValueBase(arg0, swizzleOkay);
             if (base == nullptr || base->getType().getQualifier().storage != EvqVaryingIn)
                 error(loc, "first argument must be an interpolant, or interpolant-array element", fnCandidate.getName().c_str(), "");
         }
 
-#ifdef AMD_EXTENSIONS
         if (callNode.getOp() == EOpInterpolateAtVertex) {
             if (!arg0->getType().getQualifier().isExplicitInterpolation())
                 error(loc, "argument must be qualified as __explicitInterpAMD in", "interpolant", "");
@@ -1991,8 +2153,6 @@
                 }
             }
         }
-#endif
-
         break;
 
     case EOpEmitStreamVertex:
@@ -2023,9 +2183,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:
@@ -2035,6 +2198,7 @@
             memorySemanticsCheck(loc, fnCandidate, callNode);
         }
         break;
+#endif
 
     default:
         break;
@@ -2052,7 +2216,7 @@
         const TSampler& sampler = fnCandidate[0].type->getSampler();
 
         const bool isTexture = sampler.isTexture() && !sampler.isCombined();
-        const bool isBuffer = sampler.dim == EsdBuffer;
+        const bool isBuffer = sampler.isBuffer();
         const bool isFetch = callNode.getOp() == EOpTextureFetch || callNode.getOp() == EOpTextureFetchOffset;
 
         if (isTexture && (!isBuffer || !isFetch))
@@ -2065,13 +2229,39 @@
         break;
     }
 
-    if (callNode.getOp() > EOpSubgroupGuardStart && callNode.getOp() < EOpSubgroupGuardStop) {
+    if (callNode.isSubgroup()) {
         // these require SPIR-V 1.3
         if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_3)
             error(loc, "requires SPIR-V 1.3", "subgroup op", "");
+
+        // 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;
+            }
+        }
     }
 }
 
+#ifndef GLSLANG_WEB
+
 extern bool PureOperatorBuiltins;
 
 // Deprecated!  Use PureOperatorBuiltins == true instead, in which case this
@@ -2187,17 +2377,19 @@
     if (fnCandidate.getName().compare(0, 11, "imageAtomic") == 0) {
         const TType& imageType = callNode.getSequence()[0]->getAsTyped()->getType();
         if (imageType.getSampler().type == EbtInt || imageType.getSampler().type == EbtUint) {
-            if (imageType.getQualifier().layoutFormat != ElfR32i && imageType.getQualifier().layoutFormat != ElfR32ui)
+            if (imageType.getQualifier().getFormat() != ElfR32i && imageType.getQualifier().getFormat() != ElfR32ui)
                 error(loc, "only supported on image with format r32i or r32ui", fnCandidate.getName().c_str(), "");
         } else {
             if (fnCandidate.getName().compare(0, 19, "imageAtomicExchange") != 0)
                 error(loc, "only supported on integer images", fnCandidate.getName().c_str(), "");
-            else if (imageType.getQualifier().layoutFormat != ElfR32f && profile == EEsProfile)
+            else if (imageType.getQualifier().getFormat() != ElfR32f && isEsProfile())
                 error(loc, "only supported on image with format r32f", fnCandidate.getName().c_str(), "");
         }
     }
 }
 
+#endif
+
 //
 // Do any extra checking for a user function call.
 //
@@ -2345,6 +2537,7 @@
         bool errorReturn = false;
 
         switch(binaryNode->getOp()) {
+#ifndef GLSLANG_WEB
         case EOpIndexDirect:
         case EOpIndexIndirect:
             // ...  tessellation control shader ...
@@ -2360,10 +2553,8 @@
                         error(loc, "tessellation-control per-vertex output l-value must be indexed with gl_InvocationID", "[]", "");
                 }
             }
-
             break; // left node is checked by base class
-        case EOpIndexDirectStruct:
-            break; // left node is checked by base class
+#endif
         case EOpVectorSwizzle:
             errorReturn = lValueErrorCheck(loc, op, binaryNode->getLeft());
             if (!errorReturn) {
@@ -2395,8 +2586,7 @@
         }
     }
 
-    if (binaryNode && binaryNode->getOp() == EOpIndexDirectStruct &&
-        binaryNode->getLeft()->getBasicType() == EbtReference)
+    if (binaryNode && binaryNode->getOp() == EOpIndexDirectStruct && binaryNode->getLeft()->isReference())
         return false;
 
     // Let the base class check errors
@@ -2419,7 +2609,7 @@
     case EvqFragDepth:
         intermediate.setDepthReplacing();
         // "In addition, it is an error to statically write to gl_FragDepth in the fragment shader."
-        if (profile == EEsProfile && intermediate.getEarlyFragmentTests())
+        if (isEsProfile() && intermediate.getEarlyFragmentTests())
             message = "can't modify gl_FragDepth if using early_fragment_tests";
         break;
 
@@ -2456,12 +2646,10 @@
     // Let the base class check errors
     TParseContextBase::rValueErrorCheck(loc, op, node);
 
-#ifdef AMD_EXTENSIONS
     TIntermSymbol* symNode = node->getAsSymbolNode();
-    if (!(symNode && symNode->getQualifier().writeonly)) // base class checks
-        if (symNode && symNode->getQualifier().explicitInterp)
+    if (!(symNode && symNode->getQualifier().isWriteOnly())) // base class checks
+        if (symNode && symNode->getQualifier().isExplicitInterpolation())
             error(loc, "can't read from explicitly-interpolated object: ", op, symNode->getName().c_str());
-#endif
 }
 
 //
@@ -2507,14 +2695,14 @@
         if (builtInName(identifier))
             error(loc, "identifiers starting with \"gl_\" are reserved", identifier.c_str(), "");
 
-        // "__" are not supposed to be an error.  ES 310 (and desktop) added the clarification:
+        // "__" are not supposed to be an error.  ES 300 (and desktop) added the clarification:
         // "In addition, all identifiers containing two consecutive underscores (__) are
         // reserved; using such a name does not itself result in an error, but may result
         // in undefined behavior."
         // however, before that, ES tests required an error.
         if (identifier.find("__") != TString::npos) {
-            if (profile == EEsProfile && version <= 300)
-                error(loc, "identifiers containing consecutive underscores (\"__\") are reserved, and an error if version <= 300", identifier.c_str(), "");
+            if (isEsProfile() && version < 300)
+                error(loc, "identifiers containing consecutive underscores (\"__\") are reserved, and an error if version < 300", identifier.c_str(), "");
             else
                 warn(loc, "identifiers containing consecutive underscores (\"__\") are reserved", identifier.c_str(), "");
         }
@@ -2526,7 +2714,7 @@
 //
 void TParseContext::reservedPpErrorCheck(const TSourceLoc& loc, const char* identifier, const char* op)
 {
-    // "__" are not supposed to be an error.  ES 310 (and desktop) added the clarification:
+    // "__" are not supposed to be an error.  ES 300 (and desktop) added the clarification:
     // "All macro names containing two consecutive underscores ( __ ) are reserved;
     // defining such a name does not itself result in an error, but may result in
     // undefined behavior.  All macro names prefixed with "GL_" ("GL" followed by a
@@ -2538,14 +2726,14 @@
     else if (strncmp(identifier, "defined", 8) == 0)
         ppError(loc, "\"defined\" can't be (un)defined:", op,  identifier);
     else if (strstr(identifier, "__") != 0) {
-        if (profile == EEsProfile && version >= 300 &&
+        if (isEsProfile() && version >= 300 &&
             (strcmp(identifier, "__LINE__") == 0 ||
              strcmp(identifier, "__FILE__") == 0 ||
              strcmp(identifier, "__VERSION__") == 0))
             ppError(loc, "predefined names can't be (un)defined:", op,  identifier);
         else {
-            if (profile == EEsProfile && version <= 300)
-                ppError(loc, "names containing consecutive underscores are reserved, and an error if version <= 300:", op, identifier);
+            if (isEsProfile() && version < 300)
+                ppError(loc, "names containing consecutive underscores are reserved, and an error if version < 300:", op, identifier);
             else
                 ppWarn(loc, "names containing consecutive underscores are reserved:", op, identifier);
         }
@@ -2559,10 +2747,14 @@
 //
 bool TParseContext::lineContinuationCheck(const TSourceLoc& loc, bool endOfComment)
 {
+#ifdef GLSLANG_WEB
+    return true;
+#endif
+
     const char* message = "line continuation";
 
-    bool lineContinuationAllowed = (profile == EEsProfile && version >= 300) ||
-                                   (profile != EEsProfile && (version >= 420 || extensionTurnedOn(E_GL_ARB_shading_language_420pack)));
+    bool lineContinuationAllowed = (isEsProfile() && version >= 300) ||
+                                   (!isEsProfile() && (version >= 420 || extensionTurnedOn(E_GL_ARB_shading_language_420pack)));
 
     if (endOfComment) {
         if (lineContinuationAllowed)
@@ -2611,10 +2803,27 @@
 //
 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) {
+#ifndef GLSLANG_WEB
+    case EOpConstructNonuniform:
+        if (node != nullptr && node->getAsTyped() != nullptr) {
+            type.shallowCopy(node->getAsTyped()->getType());
+            type.getQualifier().makeTemporary();
+            type.getQualifier().nonUniform = true;
+        }
+        break;
+#endif
+    default:
+        type.shallowCopy(function.getType());
+        break;
+    }
 
+    // See if it's a matrix
     bool constructingMatrix = false;
-    switch(op) {
+    switch (op) {
     case EOpConstructTextureSampler:
         return constructorTextureSamplerError(loc, function);
     case EOpConstructMat2x2:
@@ -2626,6 +2835,7 @@
     case EOpConstructMat4x2:
     case EOpConstructMat4x3:
     case EOpConstructMat4x4:
+#ifndef GLSLANG_WEB
     case EOpConstructDMat2x2:
     case EOpConstructDMat2x3:
     case EOpConstructDMat2x4:
@@ -2644,6 +2854,7 @@
     case EOpConstructF16Mat4x2:
     case EOpConstructF16Mat4x3:
     case EOpConstructF16Mat4x4:
+#endif
         constructingMatrix = true;
         break;
     default:
@@ -2693,20 +2904,21 @@
         if (function[arg].type->isFloatingDomain())
             floatArgument = true;
         if (type.isStruct()) {
-            if (function[arg].type->containsBasicType(EbtFloat16)) {
+            if (function[arg].type->contains16BitFloat()) {
                 requireFloat16Arithmetic(loc, "constructor", "can't construct structure containing 16-bit type");
             }
-            if (function[arg].type->containsBasicType(EbtUint16) ||
-                function[arg].type->containsBasicType(EbtInt16)) {
+            if (function[arg].type->contains16BitInt()) {
                 requireInt16Arithmetic(loc, "constructor", "can't construct structure containing 16-bit type");
             }
-            if (function[arg].type->containsBasicType(EbtUint8) ||
-                function[arg].type->containsBasicType(EbtInt8)) {
+            if (function[arg].type->contains8BitInt()) {
                 requireInt8Arithmetic(loc, "constructor", "can't construct structure containing 8-bit type");
             }
         }
     }
+    if (op == EOpConstructNonuniform)
+        constType = false;
 
+#ifndef GLSLANG_WEB
     switch (op) {
     case EOpConstructFloat16:
     case EOpConstructF16Vec2:
@@ -2746,6 +2958,7 @@
     default:
         break;
     }
+#endif
 
     // inherit constness from children
     if (constType) {
@@ -2754,17 +2967,24 @@
         if (specConstType) {
             switch (op) {
             case EOpConstructInt8:
-            case EOpConstructUint8:
-            case EOpConstructInt16:
-            case EOpConstructUint16:
             case EOpConstructInt:
             case EOpConstructUint:
-            case EOpConstructInt64:
-            case EOpConstructUint64:
             case EOpConstructBool:
             case EOpConstructBVec2:
             case EOpConstructBVec3:
             case EOpConstructBVec4:
+            case EOpConstructIVec2:
+            case EOpConstructIVec3:
+            case EOpConstructIVec4:
+            case EOpConstructUVec2:
+            case EOpConstructUVec3:
+            case EOpConstructUVec4:
+#ifndef GLSLANG_WEB
+            case EOpConstructUint8:
+            case EOpConstructInt16:
+            case EOpConstructUint16:
+            case EOpConstructInt64:
+            case EOpConstructUint64:
             case EOpConstructI8Vec2:
             case EOpConstructI8Vec3:
             case EOpConstructI8Vec4:
@@ -2777,18 +2997,13 @@
             case EOpConstructU16Vec2:
             case EOpConstructU16Vec3:
             case EOpConstructU16Vec4:
-            case EOpConstructIVec2:
-            case EOpConstructIVec3:
-            case EOpConstructIVec4:
-            case EOpConstructUVec2:
-            case EOpConstructUVec3:
-            case EOpConstructUVec4:
             case EOpConstructI64Vec2:
             case EOpConstructI64Vec3:
             case EOpConstructI64Vec4:
             case EOpConstructU64Vec2:
             case EOpConstructU64Vec3:
             case EOpConstructU64Vec4:
+#endif
                 // This was the list of valid ones, if they aren't converting from float
                 // and aren't making an array.
                 makeSpecConst = ! floatArgument && ! type.isArray();
@@ -2879,16 +3094,26 @@
         return true;
     }
 
+    if (type.isCoopMat() && function.getParamCount() != 1) {
+        error(loc, "wrong number of arguments", "constructor", "");
+        return true;
+    }
+    if (type.isCoopMat() &&
+        !(function[0].type->isScalar() || function[0].type->isCoopMat())) {
+        error(loc, "Cooperative matrix constructor argument must be scalar or cooperative matrix", "constructor", "");
+        return true;
+    }
+
     TIntermTyped* typed = node->getAsTyped();
     if (typed == nullptr) {
         error(loc, "constructor argument does not have a type", "constructor", "");
         return true;
     }
-    if (op != EOpConstructStruct && typed->getBasicType() == EbtSampler) {
+    if (op != EOpConstructStruct && op != EOpConstructNonuniform && typed->getBasicType() == EbtSampler) {
         error(loc, "cannot convert a sampler", "constructor", "");
         return true;
     }
-    if (op != EOpConstructStruct && typed->getBasicType() == EbtAtomicUint) {
+    if (op != EOpConstructStruct && typed->isAtomic()) {
         error(loc, "cannot convert an atomic_uint", "constructor", "");
         return true;
     }
@@ -2929,15 +3154,16 @@
     if (function[0].type->getBasicType() != EbtSampler ||
         ! function[0].type->getSampler().isTexture() ||
         function[0].type->isArray()) {
-        error(loc, "sampler-constructor first argument must be a scalar textureXXX type", token, "");
+        error(loc, "sampler-constructor first argument must be a scalar *texture* type", token, "");
         return true;
     }
     // simulate the first argument's impact on the result type, so it can be compared with the encapsulated operator!=()
     TSampler texture = function.getType().getSampler();
-    texture.combined = false;
+    texture.setCombined(false);
     texture.shadow = false;
     if (texture != function[0].type->getSampler()) {
-        error(loc, "sampler-constructor first argument must match type and dimensionality of constructor type", token, "");
+        error(loc, "sampler-constructor first argument must be a *texture* type"
+                   " matching the dimensionality and sampled type of the constructor", token, "");
         return true;
     }
 
@@ -2947,7 +3173,7 @@
     if (  function[1].type->getBasicType() != EbtSampler ||
         ! function[1].type->getSampler().isPureSampler() ||
           function[1].type->isArray()) {
-        error(loc, "sampler-constructor second argument must be a scalar type 'sampler'", token, "");
+        error(loc, "sampler-constructor second argument must be a scalar sampler or samplerShadow", token, "");
         return true;
     }
 
@@ -2986,13 +3212,16 @@
 {
     // Check that the appropriate extension is enabled if external sampler is used.
     // There are two extensions. The correct one must be used based on GLSL version.
-    if (type.getBasicType() == EbtSampler && type.getSampler().external) {
+    if (type.getBasicType() == EbtSampler && type.getSampler().isExternal()) {
         if (version < 300) {
             requireExtensions(loc, 1, &E_GL_OES_EGL_image_external, "samplerExternalOES");
         } else {
             requireExtensions(loc, 1, &E_GL_OES_EGL_image_external_essl3, "samplerExternalOES");
         }
     }
+    if (type.getSampler().isYuv()) {
+        requireExtensions(loc, 1, &E_GL_EXT_YUV_target, "__samplerExternal2DY2YEXT");
+    }
 
     if (type.getQualifier().storage == EvqUniform)
         return;
@@ -3007,6 +3236,8 @@
     }
 }
 
+#ifndef GLSLANG_WEB
+
 void TParseContext::atomicUintCheck(const TSourceLoc& loc, const TType& type, const TString& identifier)
 {
     if (type.getQualifier().storage == EvqUniform)
@@ -3017,20 +3248,21 @@
     else if (type.getBasicType() == EbtAtomicUint && type.getQualifier().storage != EvqUniform)
         error(loc, "atomic_uints can only be used in uniform variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str());
 }
-#ifdef NV_EXTENSIONS
-void TParseContext::accStructNVCheck(const TSourceLoc& loc, const TType& type, const TString& identifier)
+
+void TParseContext::accStructCheck(const TSourceLoc& loc, const TType& type, const TString& identifier)
 {
     if (type.getQualifier().storage == EvqUniform)
         return;
 
-    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtAccStructNV))
+    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtAccStruct))
         error(loc, "non-uniform struct contains an accelerationStructureNV:", type.getBasicTypeString().c_str(), identifier.c_str());
-    else if (type.getBasicType() == EbtAccStructNV && type.getQualifier().storage != EvqUniform)
+    else if (type.getBasicType() == EbtAccStruct && type.getQualifier().storage != EvqUniform)
         error(loc, "accelerationStructureNV can only be used in uniform variables or function parameters:",
             type.getBasicTypeString().c_str(), identifier.c_str());
 
 }
-#endif
+
+#endif // GLSLANG_WEB
 
 void TParseContext::transparentOpaqueCheck(const TSourceLoc& loc, const TType& type, const TString& identifier)
 {
@@ -3095,7 +3327,7 @@
         break;
     }
 
-    if (!nonuniformOkay && qualifier.nonUniform)
+    if (!nonuniformOkay && qualifier.isNonUniform())
         error(loc, "for non-parameter, can only apply to 'in' or no storage qualifier", "nonuniformEXT", "");
 
     invariantCheck(loc, qualifier);
@@ -3109,7 +3341,7 @@
     if (! symbolTable.atGlobalLevel())
         return;
 
-    if (!(publicType.userDef && publicType.userDef->getBasicType() == EbtReference)) {
+    if (!(publicType.userDef && publicType.userDef->isReference())) {
         if (qualifier.isMemoryQualifierImageAndSSBOOnly() && ! publicType.isImage() && publicType.qualifier.storage != EvqBuffer) {
             error(loc, "memory qualifiers cannot be used on this type", "", "");
         } else if (qualifier.isMemory() && (publicType.basicType != EbtSampler) && !publicType.qualifier.isUniformOrBuffer()) {
@@ -3119,13 +3351,13 @@
 
     if (qualifier.storage == EvqBuffer &&
         publicType.basicType != EbtBlock &&
-        !qualifier.layoutBufferReference)
+        !qualifier.hasBufferReference())
         error(loc, "buffers can be declared only as blocks", "buffer", "");
 
     if (qualifier.storage != EvqVaryingIn && qualifier.storage != EvqVaryingOut)
         return;
 
-    if (publicType.shaderQualifiers.blendEquation)
+    if (publicType.shaderQualifiers.hasBlendEquation())
         error(loc, "can only be applied to a standalone 'out'", "blend equation", "");
 
     // now, knowing it is a shader in/out, do all the in/out semantic checks
@@ -3138,25 +3370,15 @@
     if (isTypeInt(publicType.basicType) || publicType.basicType == EbtDouble)
         profileRequires(loc, EEsProfile, 300, nullptr, "shader input/output");
 
-    if (!qualifier.flat
-#ifdef AMD_EXTENSIONS
-        && !qualifier.explicitInterp
-#endif
-#ifdef NV_EXTENSIONS
-        && !qualifier.pervertexNV
-#endif
-        ) {
+    if (!qualifier.flat && !qualifier.isExplicitInterpolation() && !qualifier.isPervertexNV()) {
         if (isTypeInt(publicType.basicType) ||
             publicType.basicType == EbtDouble ||
-            (publicType.userDef && (publicType.userDef->containsBasicType(EbtInt8)   ||
-                                    publicType.userDef->containsBasicType(EbtUint8)  ||
-                                    publicType.userDef->containsBasicType(EbtInt16)  ||
-                                    publicType.userDef->containsBasicType(EbtUint16) ||
-                                    publicType.userDef->containsBasicType(EbtInt)    ||
-                                    publicType.userDef->containsBasicType(EbtUint)   ||
-                                    publicType.userDef->containsBasicType(EbtInt64)  ||
-                                    publicType.userDef->containsBasicType(EbtUint64) ||
-                                    publicType.userDef->containsBasicType(EbtDouble)))) {
+            (publicType.userDef && (   publicType.userDef->containsBasicType(EbtInt)
+                                    || publicType.userDef->containsBasicType(EbtUint)
+                                    || publicType.userDef->contains16BitInt()
+                                    || publicType.userDef->contains8BitInt()
+                                    || publicType.userDef->contains64BitInt()
+                                    || publicType.userDef->containsDouble()))) {
             if (qualifier.storage == EvqVaryingIn && language == EShLangFragment)
                 error(loc, "must be qualified as flat", TType::getBasicString(publicType.basicType), GetStorageQualifierString(qualifier.storage));
             else if (qualifier.storage == EvqVaryingOut && language == EShLangVertex && version == 300)
@@ -3164,13 +3386,11 @@
         }
     }
 
-    if (qualifier.patch && qualifier.isInterpolation())
+    if (qualifier.isPatch() && qualifier.isInterpolation())
         error(loc, "cannot use interpolation qualifiers with patch", "patch", "");
 
-#ifdef NV_EXTENSIONS
-    if (qualifier.perTaskNV && publicType.basicType != EbtBlock)
+    if (qualifier.isTaskMemory() && publicType.basicType != EbtBlock)
         error(loc, "taskNV variables can be declared only as blocks", "taskNV", "");
-#endif
 
     if (qualifier.storage == EvqVaryingIn) {
         switch (language) {
@@ -3188,18 +3408,6 @@
             if (qualifier.isAuxiliary() || qualifier.isInterpolation() || qualifier.isMemory() || qualifier.invariant)
                 error(loc, "vertex input cannot be further qualified", "", "");
             break;
-
-        case EShLangTessControl:
-            if (qualifier.patch)
-                error(loc, "can only use on output in tessellation-control shader", "patch", "");
-            break;
-
-        case EShLangTessEvaluation:
-            break;
-
-        case EShLangGeometry:
-            break;
-
         case EShLangFragment:
             if (publicType.userDef) {
                 profileRequires(loc, EEsProfile, 300, nullptr, "fragment-shader struct input");
@@ -3210,12 +3418,16 @@
                     requireProfile(loc, ~EEsProfile, "fragment-shader struct input containing an array");
             }
             break;
-
-        case EShLangCompute:
+       case EShLangCompute:
             if (! symbolTable.atBuiltInLevel())
                 error(loc, "global storage input qualifier cannot be used in a compute shader", "in", "");
             break;
-
+#ifndef GLSLANG_WEB
+       case EShLangTessControl:
+            if (qualifier.patch)
+                error(loc, "can only use on output in tessellation-control shader", "patch", "");
+            break;
+#endif
         default:
             break;
         }
@@ -3233,18 +3445,6 @@
             }
 
             break;
-
-        case EShLangTessControl:
-            break;
-
-        case EShLangTessEvaluation:
-            if (qualifier.patch)
-                error(loc, "can only use on input in tessellation-evaluation shader", "patch", "");
-            break;
-
-        case EShLangGeometry:
-            break;
-
         case EShLangFragment:
             profileRequires(loc, EEsProfile, 300, nullptr, "fragment shader output");
             if (publicType.basicType == EbtStruct) {
@@ -3266,7 +3466,12 @@
         case EShLangCompute:
             error(loc, "global storage output qualifier cannot be used in a compute shader", "out", "");
             break;
-
+#ifndef GLSLANG_WEB
+        case EShLangTessEvaluation:
+            if (qualifier.patch)
+                error(loc, "can only use on input in tessellation-evaluation shader", "patch", "");
+            break;
+#endif
         default:
             break;
         }
@@ -3290,18 +3495,14 @@
 
     // Multiple interpolation qualifiers (mostly done later by 'individual qualifiers')
     if (src.isInterpolation() && dst.isInterpolation())
-#ifdef AMD_EXTENSIONS
         error(loc, "can only have one interpolation qualifier (flat, smooth, noperspective, __explicitInterpAMD)", "", "");
-#else
-        error(loc, "can only have one interpolation qualifier (flat, smooth, noperspective)", "", "");
-#endif
 
     // Ordering
-    if (! force && ((profile != EEsProfile && version < 420) ||
-                    (profile == EEsProfile && version < 310))
+    if (! force && ((!isEsProfile() && version < 420) ||
+                    (isEsProfile() && version < 310))
                 && ! extensionTurnedOn(E_GL_ARB_shading_language_420pack)) {
         // non-function parameters
-        if (src.noContraction && (dst.invariant || dst.isInterpolation() || dst.isAuxiliary() || dst.storage != EvqTemporary || dst.precision != EpqNone))
+        if (src.isNoContraction() && (dst.invariant || dst.isInterpolation() || dst.isAuxiliary() || dst.storage != EvqTemporary || dst.precision != EpqNone))
             error(loc, "precise qualifier must appear first", "", "");
         if (src.invariant && (dst.isInterpolation() || dst.isAuxiliary() || dst.storage != EvqTemporary || dst.precision != EpqNone))
             error(loc, "invariant qualifier must appear before interpolation, storage, and precision qualifiers ", "", "");
@@ -3313,7 +3514,7 @@
             error(loc, "precision qualifier must appear as last qualifier", "", "");
 
         // function parameters
-        if (src.noContraction && (dst.storage == EvqConst || dst.storage == EvqIn || dst.storage == EvqOut))
+        if (src.isNoContraction() && (dst.storage == EvqConst || dst.storage == EvqIn || dst.storage == EvqOut))
             error(loc, "precise qualifier must appear first", "", "");
         if (src.storage == EvqConst && (dst.storage == EvqIn || dst.storage == EvqOut))
             error(loc, "in/out must appear before const", "", "");
@@ -3338,13 +3539,17 @@
     if (dst.precision == EpqNone || (force && src.precision != EpqNone))
         dst.precision = src.precision;
 
-    if (!force && ((src.coherent && (dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent)) ||
-                   (src.devicecoherent && (dst.coherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent)) ||
-                   (src.queuefamilycoherent && (dst.coherent || dst.devicecoherent || dst.workgroupcoherent || dst.subgroupcoherent)) ||
-                   (src.workgroupcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.subgroupcoherent)) ||
-                   (src.subgroupcoherent  && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent)))) {
-        error(loc, "only one coherent/devicecoherent/queuefamilycoherent/workgroupcoherent/subgroupcoherent qualifier allowed", GetPrecisionQualifierString(src.precision), "");
+#ifndef GLSLANG_WEB
+    if (!force && ((src.coherent && (dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
+                   (src.devicecoherent && (dst.coherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
+                   (src.queuefamilycoherent && (dst.coherent || dst.devicecoherent || dst.workgroupcoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
+                   (src.workgroupcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
+                   (src.subgroupcoherent  && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.shadercallcoherent)) ||
+                   (src.shadercallcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent)))) {
+        error(loc, "only one coherent/devicecoherent/queuefamilycoherent/workgroupcoherent/subgroupcoherent/shadercallcoherent qualifier allowed", 
+            GetPrecisionQualifierString(src.precision), "");
     }
+#endif
     // Layout qualifiers
     mergeObjectLayoutQualifiers(dst, src, false);
 
@@ -3352,19 +3557,17 @@
     bool repeated = false;
     #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
     MERGE_SINGLETON(invariant);
-    MERGE_SINGLETON(noContraction);
     MERGE_SINGLETON(centroid);
     MERGE_SINGLETON(smooth);
     MERGE_SINGLETON(flat);
+    MERGE_SINGLETON(specConstant);
+#ifndef GLSLANG_WEB
+    MERGE_SINGLETON(noContraction);
     MERGE_SINGLETON(nopersp);
-#ifdef AMD_EXTENSIONS
     MERGE_SINGLETON(explicitInterp);
-#endif
-#ifdef NV_EXTENSIONS
     MERGE_SINGLETON(perPrimitiveNV);
     MERGE_SINGLETON(perViewNV);
     MERGE_SINGLETON(perTaskNV);
-#endif
     MERGE_SINGLETON(patch);
     MERGE_SINGLETON(sample);
     MERGE_SINGLETON(coherent);
@@ -3372,13 +3575,14 @@
     MERGE_SINGLETON(queuefamilycoherent);
     MERGE_SINGLETON(workgroupcoherent);
     MERGE_SINGLETON(subgroupcoherent);
+    MERGE_SINGLETON(shadercallcoherent);
     MERGE_SINGLETON(nonprivate);
     MERGE_SINGLETON(volatil);
     MERGE_SINGLETON(restrict);
     MERGE_SINGLETON(readonly);
     MERGE_SINGLETON(writeonly);
-    MERGE_SINGLETON(specConstant);
     MERGE_SINGLETON(nonUniform);
+#endif
 
     if (repeated)
         error(loc, "replicated qualifiers", "", "");
@@ -3421,11 +3625,11 @@
 // correlates with the declaration of defaultSamplerPrecision[]
 int TParseContext::computeSamplerTypeIndex(TSampler& sampler)
 {
-    int arrayIndex    = sampler.arrayed ? 1 : 0;
-    int shadowIndex   = sampler.shadow  ? 1 : 0;
-    int externalIndex = sampler.external? 1 : 0;
-    int imageIndex    = sampler.image   ? 1 : 0;
-    int msIndex       = sampler.ms      ? 1 : 0;
+    int arrayIndex    = sampler.arrayed         ? 1 : 0;
+    int shadowIndex   = sampler.shadow          ? 1 : 0;
+    int externalIndex = sampler.isExternal()    ? 1 : 0;
+    int imageIndex    = sampler.isImageClass()  ? 1 : 0;
+    int msIndex       = sampler.isMultiSample() ? 1 : 0;
 
     int flattened = EsdNumDims * (EbtNumTypes * (2 * (2 * (2 * (2 * arrayIndex + msIndex) + imageIndex) + shadowIndex) +
                                                  externalIndex) + sampler.type) + sampler.dim;
@@ -3449,8 +3653,10 @@
     if (! obeyPrecisionQualifiers() || parsingBuiltins)
         return;
 
+#ifndef GLSLANG_WEB
     if (baseType == EbtAtomicUint && qualifier.precision != EpqNone && qualifier.precision != EpqHigh)
         error(loc, "atomic counters can only be highp", "atomic_uint", "");
+#endif
 
     if (baseType == EbtFloat || baseType == EbtUint || baseType == EbtInt || baseType == EbtSampler || baseType == EbtAtomicUint) {
         if (qualifier.precision == EpqNone) {
@@ -3469,8 +3675,7 @@
 {
     if ((qualifier == EvqOut || qualifier == EvqInOut) && type.isOpaque())
         error(loc, "samplers and atomic_uints cannot be output parameters", type.getBasicTypeString().c_str(), "");
-
-    if (!parsingBuiltins && type.containsBasicType(EbtFloat16))
+    if (!parsingBuiltins && type.contains16BitFloat())
         requireFloat16Arithmetic(loc, type.getBasicTypeString().c_str(), "float16 types can only be in uniform block or buffer storage");
     if (!parsingBuiltins && type.contains16BitInt())
         requireInt16Arithmetic(loc, type.getBasicTypeString().c_str(), "(u)int16 types can only be in uniform block or buffer storage");
@@ -3497,7 +3702,7 @@
 //
 // Do size checking for an array type's size.
 //
-void TParseContext::arraySizeCheck(const TSourceLoc& loc, TIntermTyped* expr, TArraySize& sizePair)
+void TParseContext::arraySizeCheck(const TSourceLoc& loc, TIntermTyped* expr, TArraySize& sizePair, const char *sizeType)
 {
     bool isConst = false;
     sizePair.node = nullptr;
@@ -3517,18 +3722,24 @@
             TIntermSymbol* symbol = expr->getAsSymbolNode();
             if (symbol && symbol->getConstArray().size() > 0)
                 size = symbol->getConstArray()[0].getIConst();
+        } else if (expr->getAsUnaryNode() &&
+                   expr->getAsUnaryNode()->getOp() == glslang::EOpArrayLength &&
+                   expr->getAsUnaryNode()->getOperand()->getType().isCoopMat()) {
+            isConst = true;
+            size = 1;
+            sizePair.node = expr->getAsUnaryNode();
         }
     }
 
     sizePair.size = size;
 
     if (! isConst || (expr->getBasicType() != EbtInt && expr->getBasicType() != EbtUint)) {
-        error(loc, "array size must be a constant integer expression", "", "");
+        error(loc, sizeType, "", "must be a constant integer expression");
         return;
     }
 
     if (size <= 0) {
-        error(loc, "array size must be a positive integer", "", "");
+        error(loc, sizeType, "", "must be a positive integer");
         return;
     }
 }
@@ -3586,7 +3797,7 @@
 //
 void TParseContext::arraySizeRequiredCheck(const TSourceLoc& loc, const TArraySizes& arraySizes)
 {
-    if (arraySizes.hasUnsized())
+    if (!parsingBuiltins && arraySizes.hasUnsized())
         error(loc, "array size required", "", "");
 }
 
@@ -3623,54 +3834,57 @@
         arraySizes->clearInnerUnsized();
     }
 
-    if (arraySizes->isInnerSpecialization())
+    if (arraySizes->isInnerSpecialization() &&
+        (qualifier.storage != EvqTemporary && qualifier.storage != EvqGlobal && qualifier.storage != EvqShared && qualifier.storage != EvqConst))
         error(loc, "only outermost dimension of an array of arrays can be a specialization constant", "[]", "");
 
+#ifndef GLSLANG_WEB
+
     // desktop always allows outer-dimension-unsized variable arrays,
-    if (profile != EEsProfile)
+    if (!isEsProfile())
         return;
 
     // for ES, if size isn't coming from an initializer, it has to be explicitly declared now,
     // with very few exceptions
 
-    // last member of ssbo block exception:
-    if (qualifier.storage == EvqBuffer && lastMember)
-        return;
-
     // implicitly-sized io exceptions:
     switch (language) {
     case EShLangGeometry:
         if (qualifier.storage == EvqVaryingIn)
-            if ((profile == EEsProfile && version >= 320) ||
+            if ((isEsProfile() && version >= 320) ||
                 extensionsTurnedOn(Num_AEP_geometry_shader, AEP_geometry_shader))
                 return;
         break;
     case EShLangTessControl:
         if ( qualifier.storage == EvqVaryingIn ||
-            (qualifier.storage == EvqVaryingOut && ! qualifier.patch))
-            if ((profile == EEsProfile && version >= 320) ||
+            (qualifier.storage == EvqVaryingOut && ! qualifier.isPatch()))
+            if ((isEsProfile() && version >= 320) ||
                 extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))
                 return;
         break;
     case EShLangTessEvaluation:
-        if ((qualifier.storage == EvqVaryingIn && ! qualifier.patch) ||
+        if ((qualifier.storage == EvqVaryingIn && ! qualifier.isPatch()) ||
              qualifier.storage == EvqVaryingOut)
-            if ((profile == EEsProfile && version >= 320) ||
+            if ((isEsProfile() && version >= 320) ||
                 extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))
                 return;
         break;
-#ifdef NV_EXTENSIONS
     case EShLangMeshNV:
         if (qualifier.storage == EvqVaryingOut)
-            if ((profile == EEsProfile && version >= 320) ||
+            if ((isEsProfile() && version >= 320) ||
                 extensionTurnedOn(E_GL_NV_mesh_shader))
                 return;
         break;
-#endif
     default:
         break;
     }
 
+#endif
+
+    // last member of ssbo block exception:
+    if (qualifier.storage == EvqBuffer && lastMember)
+        return;
+
     arraySizeRequiredCheck(loc, *arraySizes);
 }
 
@@ -3711,13 +3925,15 @@
             if (symbolTable.atGlobalLevel())
                 trackLinkage(*symbol);
 
+#ifndef GLSLANG_WEB
             if (! symbolTable.atBuiltInLevel()) {
                 if (isIoResizeArray(type)) {
                     ioArraySymbolResizeList.push_back(symbol);
-                    checkIoArraysConsistency(loc, true, type.getQualifier().isPerPrimitive());
+                    checkIoArraysConsistency(loc, true);
                 } else
                     fixIoArraySize(loc, symbol->getWritableType());
             }
+#endif
 
             return;
         }
@@ -3755,6 +3971,7 @@
         return;
     }
 
+#ifndef GLSLANG_WEB
     if (existingType.isSizedArray()) {
         // be more leniant for input arrays to geometry shaders and tessellation control outputs, where the redeclaration is the same size
         if (! (isIoResizeArray(type) && existingType.getOuterArraySize() == type.getOuterArraySize()))
@@ -3767,9 +3984,12 @@
     existingType.updateArraySizes(type);
 
     if (isIoResizeArray(type))
-        checkIoArraysConsistency(loc, false, type.getQualifier().isPerPrimitive());
+        checkIoArraysConsistency(loc);
+#endif
 }
 
+#ifndef GLSLANG_WEB
+
 // Policy and error check for needing a runtime sized array.
 void TParseContext::checkRuntimeSizable(const TSourceLoc& loc, const TIntermTyped& base)
 {
@@ -3783,7 +4003,7 @@
         const TIntermBinary* binary = base.getAsBinaryNode();
         if (binary != nullptr &&
             binary->getOp() == EOpIndexDirectStruct &&
-            binary->getLeft()->getBasicType() == EbtReference) {
+            binary->getLeft()->isReference()) {
 
             const int index = binary->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst();
             const int memberCount = (int)binary->getLeft()->getType().getReferentType()->getStruct()->size();
@@ -3793,8 +4013,8 @@
     }
 
     // check for additional things allowed by GL_EXT_nonuniform_qualifier
-    if (base.getBasicType() == EbtSampler ||
-            (base.getBasicType() == EbtBlock && base.getType().getQualifier().isUniformOrBuffer()))
+    if (base.getBasicType() == EbtSampler || base.getBasicType() == EbtAccStruct || base.getBasicType() == EbtRayQuery ||
+        (base.getBasicType() == EbtBlock && base.getType().getQualifier().isUniformOrBuffer()))
         requireExtensions(loc, 1, &E_GL_EXT_nonuniform_qualifier, "variable index");
     else
         error(loc, "", "[", "array must be redeclared with a size before being indexed with a variable");
@@ -3810,7 +4030,7 @@
             // is it the last member?
             const int index = binary->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst();
 
-            if (binary->getLeft()->getBasicType() == EbtReference)
+            if (binary->getLeft()->isReference())
                 return false;
 
             const int memberCount = (int)binary->getLeft()->getType().getStruct()->size();
@@ -3822,27 +4042,34 @@
     return false;
 }
 
-#ifdef NV_EXTENSIONS
-// Fix mesh view output array dimension
-void TParseContext::resizeMeshViewDimension(const TSourceLoc& loc, TType& type)
+// Check if mesh perviewNV attributes have a view dimension
+// and resize it to gl_MaxMeshViewCountNV when implicitly sized.
+void TParseContext::checkAndResizeMeshViewDim(const TSourceLoc& loc, TType& type, bool isBlockMember)
 {
     // see if member is a per-view attribute
-    if (type.getQualifier().isPerView()) {
-        // since we don't have the maxMeshViewCountNV set during parsing builtins, we hardcode the value
-        int maxViewCount = parsingBuiltins ? 4 : resources.maxMeshViewCountNV;
+    if (!type.getQualifier().isPerView())
+        return;
 
-        if (! type.isArray()) {
-            error(loc, "requires an view array dimension", "perviewNV", "");
-        }
-        else if (!type.isUnsizedArray() && type.getOuterArraySize() != maxViewCount) {
+    if ((isBlockMember && type.isArray()) || (!isBlockMember && type.isArrayOfArrays())) {
+        // since we don't have the maxMeshViewCountNV set during parsing builtins, we hardcode the value.
+        int maxViewCount = parsingBuiltins ? 4 : resources.maxMeshViewCountNV;
+        // For block members, outermost array dimension is the view dimension.
+        // For non-block members, outermost array dimension is the vertex/primitive dimension
+        // and 2nd outermost is the view dimension.
+        int viewDim = isBlockMember ? 0 : 1;
+        int viewDimSize = type.getArraySizes()->getDimSize(viewDim);
+
+        if (viewDimSize != UnsizedArraySize && viewDimSize != maxViewCount)
             error(loc, "mesh view output array size must be gl_MaxMeshViewCountNV or implicitly sized", "[]", "");
-        }
-        else if (type.isUnsizedArray()) {
-            type.changeOuterArraySize(maxViewCount);
-        }
+        else if (viewDimSize == UnsizedArraySize)
+            type.getArraySizes()->setDimSize(viewDim, maxViewCount);
+    }
+    else {
+        error(loc, "requires a view array dimension", "perviewNV", "");
     }
 }
-#endif
+
+#endif // GLSLANG_WEB
 
 // Returns true if the first argument to the #line directive is the line number for the next line.
 //
@@ -3855,7 +4082,7 @@
 // source string number source-string-number.
 bool TParseContext::lineDirectiveShouldSetNextLine() const
 {
-    return profile == EEsProfile || version >= 330;
+    return isEsProfile() || version >= 330;
 }
 
 //
@@ -3886,18 +4113,19 @@
 TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TString& identifier,
                                                  const TQualifier& qualifier, const TShaderQualifiers& publicType)
 {
+#ifndef GLSLANG_WEB
     if (! builtInName(identifier) || symbolTable.atBuiltInLevel() || ! symbolTable.atGlobalLevel())
         return nullptr;
 
-    bool nonEsRedecls = (profile != EEsProfile && (version >= 130 || identifier == "gl_TexCoord"));
-    bool    esRedecls = (profile == EEsProfile &&
+    bool nonEsRedecls = (!isEsProfile() && (version >= 130 || identifier == "gl_TexCoord"));
+    bool    esRedecls = (isEsProfile() &&
                          (version >= 320 || extensionsTurnedOn(Num_AEP_shader_io_blocks, AEP_shader_io_blocks)));
     if (! esRedecls && ! nonEsRedecls)
         return nullptr;
 
     // Special case when using GL_ARB_separate_shader_objects
     bool ssoPre150 = false;  // means the only reason this variable is redeclared is due to this combination
-    if (profile != EEsProfile && version <= 140 && extensionTurnedOn(E_GL_ARB_separate_shader_objects)) {
+    if (!isEsProfile() && version <= 140 && extensionTurnedOn(E_GL_ARB_separate_shader_objects)) {
         if (identifier == "gl_Position"     ||
             identifier == "gl_PointSize"    ||
             identifier == "gl_ClipVertex"   ||
@@ -3920,10 +4148,9 @@
         (identifier == "gl_Color"               && language == EShLangFragment)                     ||
         (identifier == "gl_FragStencilRefARB"   && (nonEsRedecls && version >= 140)
                                                 && language == EShLangFragment)                     ||
-#ifdef NV_EXTENSIONS
          identifier == "gl_SampleMask"                                                              ||
          identifier == "gl_Layer"                                                                   ||
-#endif
+         identifier == "gl_PrimitiveIndicesNV"                                                      ||
          identifier == "gl_TexCoord") {
 
         // Find the existing symbol, if any.
@@ -4002,13 +4229,14 @@
                     error(loc, "all redeclarations must use the same depth layout on", "redeclaration", symbol->getName().c_str());
             }
         }
-        else if (identifier == "gl_FragStencilRefARB") {
+        else if (
+            identifier == "gl_PrimitiveIndicesNV" ||
+            identifier == "gl_FragStencilRefARB") {
             if (qualifier.hasLayout())
                 error(loc, "cannot apply layout qualifier to", "redeclaration", symbol->getName().c_str());
             if (qualifier.storage != EvqVaryingOut)
                 error(loc, "cannot change output storage qualification of", "redeclaration", symbol->getName().c_str());
         }
-#ifdef NV_EXTENSIONS
         else if (identifier == "gl_SampleMask") {
             if (!publicType.layoutOverrideCoverage) {
                 error(loc, "redeclaration only allowed for override_coverage layout", "redeclaration", symbol->getName().c_str());
@@ -4021,12 +4249,12 @@
             symbolQualifier.layoutViewportRelative = qualifier.layoutViewportRelative;
             symbolQualifier.layoutSecondaryViewportRelativeOffset = qualifier.layoutSecondaryViewportRelativeOffset;
         }
-#endif
 
         // TODO: semantics quality: separate smooth from nothing declared, then use IsInterpolation for several tests above
 
         return symbol;
     }
+#endif
 
     return nullptr;
 }
@@ -4038,16 +4266,13 @@
 void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newTypeList, const TString& blockName,
     const TString* instanceName, TArraySizes* arraySizes)
 {
+#ifndef GLSLANG_WEB
     const char* feature = "built-in block redeclaration";
     profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, feature);
     profileRequires(loc, ~EEsProfile, 410, E_GL_ARB_separate_shader_objects, feature);
 
-    if (blockName != "gl_PerVertex" && blockName != "gl_PerFragment"
-#ifdef NV_EXTENSIONS
-        && blockName != "gl_MeshPerVertexNV" && blockName != "gl_MeshPerPrimitiveNV"
-#endif
-       )
-    {
+    if (blockName != "gl_PerVertex" && blockName != "gl_PerFragment" &&
+        blockName != "gl_MeshPerVertexNV" && blockName != "gl_MeshPerPrimitiveNV") {
         error(loc, "cannot redeclare block: ", "block declaration", blockName.c_str());
         return;
     }
@@ -4106,7 +4331,6 @@
 
     TType& type = block->getWritableType();
 
-#ifdef NV_EXTENSIONS
     // if gl_PerVertex is redeclared for the purpose of passing through "gl_Position"
     // for passthrough purpose, the redeclared block should have the same qualifers as
     // the current one
@@ -4116,7 +4340,6 @@
         type.getQualifier().layoutStream = currentBlockQualifier.layoutStream;
         type.getQualifier().layoutXfbBuffer = currentBlockQualifier.layoutXfbBuffer;
     }
-#endif
 
     TTypeList::iterator member = type.getWritableStruct()->begin();
     size_t numOriginalMembersFound = 0;
@@ -4149,7 +4372,6 @@
                 error(memberLoc, "cannot change array size of redeclared block member", member->type->getFieldName().c_str(), "");
             else if (! oldType.getQualifier().isPerView() && newType.isArray())
                 arrayLimitCheck(loc, member->type->getFieldName(), newType.getOuterArraySize());
-#ifdef NV_EXTENSIONS
             if (oldType.getQualifier().isPerView() && ! newType.getQualifier().isPerView())
                 error(memberLoc, "missing perviewNV qualifier to redeclared block member", member->type->getFieldName().c_str(), "");
             else if (! oldType.getQualifier().isPerView() && newType.getQualifier().isPerView())
@@ -4169,7 +4391,6 @@
                 error(memberLoc, "missing perprimitiveNV qualifier to redeclared block member", member->type->getFieldName().c_str(), "");
             else if (! oldType.getQualifier().isPerPrimitive() && newType.getQualifier().isPerPrimitive())
                 error(memberLoc, "cannot add perprimitiveNV qualifier to redeclared block member", member->type->getFieldName().c_str(), "");
-#endif
             if (newType.getQualifier().isMemory())
                 error(memberLoc, "cannot add memory qualifier to redeclared block member", member->type->getFieldName().c_str(), "");
             if (newType.getQualifier().hasNonXfbLayout())
@@ -4254,12 +4475,13 @@
     // Tracking for implicit sizing of array
     if (isIoResizeArray(block->getType())) {
         ioArraySymbolResizeList.push_back(block);
-        checkIoArraysConsistency(loc, true, block->getType().getQualifier().isPerPrimitive());
+        checkIoArraysConsistency(loc, true);
     } else if (block->getType().isArray())
         fixIoArraySize(loc, block->getWritableType());
 
     // Save it in the AST for linker use.
     trackLinkage(*block);
+#endif // GLSLANG_WEB
 }
 
 void TParseContext::paramCheckFixStorage(const TSourceLoc& loc, const TStorageQualifier& qualifier, TType& type)
@@ -4287,6 +4509,7 @@
 
 void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& qualifier, TType& type)
 {
+#ifndef GLSLANG_WEB
     if (qualifier.isMemory()) {
         type.getQualifier().volatil   = qualifier.volatil;
         type.getQualifier().coherent  = qualifier.coherent;
@@ -4294,11 +4517,13 @@
         type.getQualifier().queuefamilycoherent  = qualifier.queuefamilycoherent;
         type.getQualifier().workgroupcoherent  = qualifier.workgroupcoherent;
         type.getQualifier().subgroupcoherent  = qualifier.subgroupcoherent;
+        type.getQualifier().shadercallcoherent = qualifier.shadercallcoherent;
         type.getQualifier().nonprivate = qualifier.nonprivate;
         type.getQualifier().readonly  = qualifier.readonly;
         type.getQualifier().writeonly = qualifier.writeonly;
         type.getQualifier().restrict  = qualifier.restrict;
     }
+#endif
 
     if (qualifier.isAuxiliary() ||
         qualifier.isInterpolation())
@@ -4307,9 +4532,9 @@
         error(loc, "cannot use layout qualifiers on a function parameter", "", "");
     if (qualifier.invariant)
         error(loc, "cannot use invariant qualifier on a function parameter", "", "");
-    if (qualifier.noContraction) {
+    if (qualifier.isNoContraction()) {
         if (qualifier.isParamOutput())
-            type.getQualifier().noContraction = true;
+            type.getQualifier().setNoContraction();
         else
             warn(loc, "qualifier has no effect on non-output parameters", "precise", "");
     }
@@ -4348,8 +4573,17 @@
         error(loc, "can't use with samplers or structs containing samplers", op, "");
 }
 
+void TParseContext::referenceCheck(const TSourceLoc& loc, const TType& type, const char* op)
+{
+#ifndef GLSLANG_WEB
+    if (containsFieldWithBasicType(type, EbtReference))
+        error(loc, "can't use with reference types", op, "");
+#endif
+}
+
 void TParseContext::storage16BitAssignmentCheck(const TSourceLoc& loc, const TType& type, const char* op)
 {
+#ifndef GLSLANG_WEB
     if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtFloat16))
         requireFloat16Arithmetic(loc, op, "can't use with structs containing float16");
 
@@ -4379,6 +4613,7 @@
 
     if (type.isArray() && type.getBasicType() == EbtUint8)
         requireInt8Arithmetic(loc, op, "can't use with arrays containing uint8");
+#endif
 }
 
 void TParseContext::specializationCheck(const TSourceLoc& loc, const TType& type, const char* op)
@@ -4430,6 +4665,7 @@
 //
 void TParseContext::inductiveLoopCheck(const TSourceLoc& loc, TIntermNode* init, TIntermLoop* loop)
 {
+#ifndef GLSLANG_WEB
     // loop index init must exist and be a declaration, which shows up in the AST as an aggregate of size 1 of the declaration
     bool badInit = false;
     if (! init || ! init->getAsAggregate() || init->getAsAggregate()->getSequence().size() != 1)
@@ -4525,8 +4761,10 @@
 
     // the body
     inductiveLoopBodyCheck(loop->getBody(), loopIndex, symbolTable);
+#endif
 }
 
+#ifndef GLSLANG_WEB
 // Do limit checks for built-in arrays.
 void TParseContext::arrayLimitCheck(const TSourceLoc& loc, const TString& identifier, int size)
 {
@@ -4536,13 +4774,12 @@
         limitCheck(loc, size, "gl_MaxClipDistances", "gl_ClipDistance array size");
     else if (identifier.compare("gl_CullDistance") == 0)
         limitCheck(loc, size, "gl_MaxCullDistances", "gl_CullDistance array size");
-#ifdef NV_EXTENSIONS
     else if (identifier.compare("gl_ClipDistancePerViewNV") == 0)
         limitCheck(loc, size, "gl_MaxClipDistances", "gl_ClipDistancePerViewNV array size");
     else if (identifier.compare("gl_CullDistancePerViewNV") == 0)
         limitCheck(loc, size, "gl_MaxCullDistances", "gl_CullDistancePerViewNV array size");
-#endif
 }
+#endif // GLSLANG_WEB
 
 // See if the provided value is less than or equal to the symbol indicated by limit,
 // which should be a constant in the symbol table.
@@ -4556,6 +4793,8 @@
         error(loc, "must be less than or equal to", feature, "%s (%d)", limit, constArray[0].getIConst());
 }
 
+#ifndef GLSLANG_WEB
+
 //
 // Do any additional error checking, etc., once we know the parsing is done.
 //
@@ -4577,33 +4816,30 @@
     // about the stage itself.
     switch (language) {
     case EShLangGeometry:
-        if (profile == EEsProfile && version == 310)
+        if (isEsProfile() && version == 310)
             requireExtensions(getCurrentLoc(), Num_AEP_geometry_shader, AEP_geometry_shader, "geometry shaders");
         break;
     case EShLangTessControl:
     case EShLangTessEvaluation:
-        if (profile == EEsProfile && version == 310)
+        if (isEsProfile() && version == 310)
             requireExtensions(getCurrentLoc(), Num_AEP_tessellation_shader, AEP_tessellation_shader, "tessellation shaders");
-        else if (profile != EEsProfile && version < 400)
+        else if (!isEsProfile() && version < 400)
             requireExtensions(getCurrentLoc(), 1, &E_GL_ARB_tessellation_shader, "tessellation shaders");
         break;
     case EShLangCompute:
-        if (profile != EEsProfile && version < 430)
+        if (!isEsProfile() && version < 430)
             requireExtensions(getCurrentLoc(), 1, &E_GL_ARB_compute_shader, "compute shaders");
         break;
-#ifdef NV_EXTENSIONS
     case EShLangTaskNV:
         requireExtensions(getCurrentLoc(), 1, &E_GL_NV_mesh_shader, "task shaders");
         break;
     case EShLangMeshNV:
         requireExtensions(getCurrentLoc(), 1, &E_GL_NV_mesh_shader, "mesh shaders");
         break;
-#endif
     default:
         break;
     }
 
-#ifdef NV_EXTENSIONS
     // Set default outputs for GL_NV_geometry_shader_passthrough
     if (language == EShLangGeometry && extensionTurnedOn(E_SPV_NV_geometry_shader_passthrough)) {
         if (intermediate.getOutputPrimitive() == ElgNone) {
@@ -4623,8 +4859,8 @@
             }
         }
     }
-#endif
 }
+#endif // GLSLANG_WEB
 
 //
 // Layout qualifier stuff.
@@ -4660,6 +4896,7 @@
         publicType.qualifier.layoutPacking = ElpStd140;
         return;
     }
+#ifndef GLSLANG_WEB
     if (id == TQualifier::getLayoutPackingString(ElpStd430)) {
         requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, "std430");
         profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, nullptr, "std430");
@@ -4699,20 +4936,12 @@
         intermediate.setUsePhysicalStorageBuffer();
         return;
     }
-    if (language == EShLangGeometry || language == EShLangTessEvaluation
-#ifdef NV_EXTENSIONS
-        || language == EShLangMeshNV
-#endif
-       ) {
+    if (language == EShLangGeometry || language == EShLangTessEvaluation || language == EShLangMeshNV) {
         if (id == TQualifier::getGeometryString(ElgTriangles)) {
             publicType.shaderQualifiers.geometry = ElgTriangles;
             return;
         }
-        if (language == EShLangGeometry
-#ifdef NV_EXTENSIONS
-            || language == EShLangMeshNV
-#endif
-           ) {
+        if (language == EShLangGeometry || language == EShLangMeshNV) {
             if (id == TQualifier::getGeometryString(ElgPoints)) {
                 publicType.shaderQualifiers.geometry = ElgPoints;
                 return;
@@ -4721,10 +4950,7 @@
                 publicType.shaderQualifiers.geometry = ElgLines;
                 return;
             }
-#ifdef NV_EXTENSIONS
-            if (language == EShLangGeometry)
-#endif
-            {
+            if (language == EShLangGeometry) {
                 if (id == TQualifier::getGeometryString(ElgLineStrip)) {
                     publicType.shaderQualifiers.geometry = ElgLineStrip;
                     return;
@@ -4741,14 +4967,12 @@
                     publicType.shaderQualifiers.geometry = ElgTriangleStrip;
                     return;
                 }
-#ifdef NV_EXTENSIONS
                 if (id == "passthrough") {
                     requireExtensions(loc, 1, &E_SPV_NV_geometry_shader_passthrough, "geometry shader passthrough");
                     publicType.qualifier.layoutPassthrough = true;
                     intermediate.setGeoPassthroughEXT();
                     return;
                 }
-#endif
             }
         } else {
             assert(language == EShLangTessEvaluation);
@@ -4831,6 +5055,17 @@
                 return;
             }
         }
+        for (TInterlockOrdering order = (TInterlockOrdering)(EioNone + 1); order < EioCount; order = (TInterlockOrdering)(order+1)) {
+            if (id == TQualifier::getInterlockOrderingString(order)) {
+                requireProfile(loc, ECoreProfile | ECompatibilityProfile, "fragment shader interlock layout qualifier");
+                profileRequires(loc, ECoreProfile | ECompatibilityProfile, 450, nullptr, "fragment shader interlock layout qualifier");
+                requireExtensions(loc, 1, &E_GL_ARB_fragment_shader_interlock, TQualifier::getInterlockOrderingString(order));
+                if (order == EioShadingRateInterlockOrdered || order == EioShadingRateInterlockUnordered)
+                    requireExtensions(loc, 1, &E_GL_NV_shading_rate_image, TQualifier::getInterlockOrderingString(order));
+                publicType.shaderQualifiers.interlockOrdering = order;
+                return;
+            }
+        }
         if (id.compare(0, 13, "blend_support") == 0) {
             bool found = false;
             for (TBlendEquationShift be = (TBlendEquationShift)0; be < EBlendCount; be = (TBlendEquationShift)(be + 1)) {
@@ -4847,7 +5082,6 @@
                 error(loc, "unknown blend equation", "blend_support", "");
             return;
         }
-#ifdef NV_EXTENSIONS
         if (id == "override_coverage") {
             requireExtensions(loc, 1, &E_GL_NV_sample_mask_override_coverage, "sample mask override coverage");
             publicType.shaderQualifiers.layoutOverrideCoverage = true;
@@ -4864,13 +5098,19 @@
             return;
         }
     } else {
-        if (language == EShLangRayGenNV || language == EShLangIntersectNV ||
-        language == EShLangAnyHitNV || language == EShLangClosestHitNV ||
-        language == EShLangMissNV || language == EShLangCallableNV) {
-            if (id == "shaderrecordnv") {
-                publicType.qualifier.layoutShaderRecordNV = true;
+        if (language == EShLangRayGen || language == EShLangIntersect ||
+        language == EShLangAnyHit || language == EShLangClosestHit ||
+        language == EShLangMiss || language == EShLangCallable) {
+            if (id == "shaderrecordnv" || id == "shaderrecordext") {
+                if (id == "shaderrecordnv") {
+                    requireExtensions(loc, 1, &E_GL_NV_ray_tracing, "shader record NV");
+                } else {
+                    requireExtensions(loc, 1, &E_GL_EXT_ray_tracing, "shader record EXT");
+                }
+                publicType.qualifier.layoutShaderRecord = true;
                 return;
             }
+
         }
     }
     if (language == EShLangCompute) {
@@ -4885,9 +5125,8 @@
             }
         }
     }
-#else
-    }
 #endif
+
     error(loc, "unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)", id.c_str(), "");
 }
 
@@ -4901,6 +5140,7 @@
     integerCheck(node, feature);
     const TIntermConstantUnion* constUnion = node->getAsConstantUnion();
     int value;
+    bool nonLiteral = false;
     if (constUnion) {
         value = constUnion->getConstArray()[0].getIConst();
         if (! constUnion->isLiteral()) {
@@ -4910,6 +5150,7 @@
     } else {
         // grammar should have give out the error message
         value = 0;
+        nonLiteral = true;
     }
 
     if (value < 0) {
@@ -4931,6 +5172,9 @@
             profileRequires(loc, EEsProfile, 310, nullptr, feature);
         }
         publicType.qualifier.layoutOffset = value;
+        publicType.qualifier.explicitOffset = true;
+        if (nonLiteral)
+            error(loc, "needs a literal integer", "offset", "");
         return;
     } else if (id == "align") {
         const char* feature = "uniform buffer-member align";
@@ -4943,15 +5187,20 @@
             error(loc, "must be a power of 2", "align", "");
         else
             publicType.qualifier.layoutAlign = value;
+        if (nonLiteral)
+            error(loc, "needs a literal integer", "align", "");
         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(), "");
         else
             publicType.qualifier.layoutLocation = value;
+        if (nonLiteral)
+            error(loc, "needs a literal integer", "location", "");
         return;
     } else if (id == "set") {
         if ((unsigned int)value >= TQualifier::layoutSetEnd)
@@ -4960,24 +5209,49 @@
             publicType.qualifier.layoutSet = value;
         if (value != 0)
             requireVulkan(loc, "descriptor set");
+        if (nonLiteral)
+            error(loc, "needs a literal integer", "set", "");
         return;
     } else if (id == "binding") {
+#ifndef GLSLANG_WEB
         profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, "binding");
         profileRequires(loc, EEsProfile, 310, nullptr, "binding");
+#endif
         if ((unsigned int)value >= TQualifier::layoutBindingEnd)
             error(loc, "binding is too large", id.c_str(), "");
         else
             publicType.qualifier.layoutBinding = value;
+        if (nonLiteral)
+            error(loc, "needs a literal integer", "binding", "");
         return;
-    } else if (id == "component") {
+    }
+    if (id == "constant_id") {
+        requireSpv(loc, "constant_id");
+        if (value >= (int)TQualifier::layoutSpecConstantIdEnd) {
+            error(loc, "specialization-constant id is too large", id.c_str(), "");
+        } else {
+            publicType.qualifier.layoutSpecConstantId = value;
+            publicType.qualifier.specConstant = true;
+            if (! intermediate.addUsedConstantId(value))
+                error(loc, "specialization-constant id already used", id.c_str(), "");
+        }
+        if (nonLiteral)
+            error(loc, "needs a literal integer", "constant_id", "");
+        return;
+    }
+#ifndef GLSLANG_WEB
+    if (id == "component") {
         requireProfile(loc, ECoreProfile | ECompatibilityProfile, "component");
         profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, "component");
         if ((unsigned)value >= TQualifier::layoutComponentEnd)
             error(loc, "component is too large", id.c_str(), "");
         else
             publicType.qualifier.layoutComponent = value;
+        if (nonLiteral)
+            error(loc, "needs a literal integer", "component", "");
         return;
-    } else if (id.compare(0, 4, "xfb_") == 0) {
+    }
+    if (id.compare(0, 4, "xfb_") == 0) {
         // "Any shader making any static use (after preprocessing) of any of these
         // *xfb_* qualifiers will cause the shader to be in a transform feedback
         // capturing mode and hence responsible for describing the transform feedback
@@ -4996,12 +5270,16 @@
                 error(loc, "buffer is too large:", id.c_str(), "internal max is %d", TQualifier::layoutXfbBufferEnd-1);
             else
                 publicType.qualifier.layoutXfbBuffer = value;
+            if (nonLiteral)
+                error(loc, "needs a literal integer", "xfb_buffer", "");
             return;
         } else if (id == "xfb_offset") {
             if (value >= (int)TQualifier::layoutXfbOffsetEnd)
                 error(loc, "offset is too large:", id.c_str(), "internal max is %d", TQualifier::layoutXfbOffsetEnd-1);
             else
                 publicType.qualifier.layoutXfbOffset = value;
+            if (nonLiteral)
+                error(loc, "needs a literal integer", "xfb_offset", "");
             return;
         } else if (id == "xfb_stride") {
             // "The resulting stride (implicit or explicit), when divided by 4, must be less than or equal to the
@@ -5014,37 +5292,28 @@
                 error(loc, "stride is too large:", id.c_str(), "internal max is %d", TQualifier::layoutXfbStrideEnd-1);
             else
                 publicType.qualifier.layoutXfbStride = value;
+            if (nonLiteral)
+                error(loc, "needs a literal integer", "xfb_stride", "");
             return;
         }
     }
-
     if (id == "input_attachment_index") {
         requireVulkan(loc, "input_attachment_index");
         if (value >= (int)TQualifier::layoutAttachmentEnd)
             error(loc, "attachment index is too large", id.c_str(), "");
         else
             publicType.qualifier.layoutAttachment = value;
-        return;
-    }
-    if (id == "constant_id") {
-        requireSpv(loc, "constant_id");
-        if (value >= (int)TQualifier::layoutSpecConstantIdEnd) {
-            error(loc, "specialization-constant id is too large", id.c_str(), "");
-        } else {
-            publicType.qualifier.layoutSpecConstantId = value;
-            publicType.qualifier.specConstant = true;
-            if (! intermediate.addUsedConstantId(value))
-                error(loc, "specialization-constant id already used", id.c_str(), "");
-        }
+        if (nonLiteral)
+            error(loc, "needs a literal integer", "input_attachment_index", "");
         return;
     }
     if (id == "num_views") {
         requireExtensions(loc, Num_OVR_multiview_EXTs, OVR_multiview_EXTs, "num_views");
         publicType.shaderQualifiers.numViews = value;
+        if (nonLiteral)
+            error(loc, "needs a literal integer", "num_views", "");
         return;
     }
-
-#if NV_EXTENSIONS
     if (language == EShLangVertex ||
         language == EShLangTessControl ||
         language == EShLangTessEvaluation ||
@@ -5052,37 +5321,38 @@
         if (id == "secondary_view_offset") {
             requireExtensions(loc, 1, &E_GL_NV_stereo_view_rendering, "stereo view rendering");
             publicType.qualifier.layoutSecondaryViewportRelativeOffset = value;
+            if (nonLiteral)
+                error(loc, "needs a literal integer", "secondary_view_offset", "");
             return;
         }
     }
-#endif
 
     if (id == "buffer_reference_align") {
         requireExtensions(loc, 1, &E_GL_EXT_buffer_reference, "buffer_reference_align");
         if (! IsPow2(value))
             error(loc, "must be a power of 2", "buffer_reference_align", "");
         else
-            publicType.qualifier.layoutBufferReferenceAlign = std::log2(value);
+            publicType.qualifier.layoutBufferReferenceAlign = (unsigned int)std::log2(value);
+        if (nonLiteral)
+            error(loc, "needs a literal integer", "buffer_reference_align", "");
         return;
     }
+#endif
 
     switch (language) {
-    case EShLangVertex:
-        break;
-
+#ifndef GLSLANG_WEB
     case EShLangTessControl:
         if (id == "vertices") {
             if (value == 0)
                 error(loc, "must be greater than 0", "vertices", "");
             else
                 publicType.shaderQualifiers.vertices = value;
+            if (nonLiteral)
+                error(loc, "needs a literal integer", "vertices", "");
             return;
         }
         break;
 
-    case EShLangTessEvaluation:
-        break;
-
     case EShLangGeometry:
         if (id == "invocations") {
             profileRequires(loc, ECompatibilityProfile | ECoreProfile, 400, nullptr, "invocations");
@@ -5090,12 +5360,16 @@
                 error(loc, "must be at least 1", "invocations", "");
             else
                 publicType.shaderQualifiers.invocations = value;
+            if (nonLiteral)
+                error(loc, "needs a literal integer", "invocations", "");
             return;
         }
         if (id == "max_vertices") {
             publicType.shaderQualifiers.vertices = value;
             if (value > resources.maxGeometryOutputVertices)
                 error(loc, "too large, must be less than gl_MaxGeometryOutputVertices", "max_vertices", "");
+            if (nonLiteral)
+                error(loc, "needs a literal integer", "max_vertices", "");
             return;
         }
         if (id == "stream") {
@@ -5103,6 +5377,8 @@
             publicType.qualifier.layoutStream = value;
             if (value > 0)
                 intermediate.setMultiStream();
+            if (nonLiteral)
+                error(loc, "needs a literal integer", "stream", "");
             return;
         }
         break;
@@ -5120,17 +5396,20 @@
             }
 
             publicType.qualifier.layoutIndex = value;
+            if (nonLiteral)
+                error(loc, "needs a literal integer", "index", "");
             return;
         }
         break;
 
-#ifdef NV_EXTENSIONS
     case EShLangMeshNV:
         if (id == "max_vertices") {
             requireExtensions(loc, 1, &E_GL_NV_mesh_shader, "max_vertices");
             publicType.shaderQualifiers.vertices = value;
             if (value > resources.maxMeshOutputVerticesNV)
                 error(loc, "too large, must be less than gl_MaxMeshOutputVerticesNV", "max_vertices", "");
+            if (nonLiteral)
+                error(loc, "needs a literal integer", "max_vertices", "");
             return;
         }
         if (id == "max_primitives") {
@@ -5138,6 +5417,8 @@
             publicType.shaderQualifiers.primitives = value;
             if (value > resources.maxMeshOutputPrimitivesNV)
                 error(loc, "too large, must be less than gl_MaxMeshOutputPrimitivesNV", "max_primitives", "");
+            if (nonLiteral)
+                error(loc, "needs a literal integer", "max_primitives", "");
             return;
         }
         // Fall through
@@ -5147,30 +5428,33 @@
 #endif
     case EShLangCompute:
         if (id.compare(0, 11, "local_size_") == 0) {
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
             if (language == EShLangMeshNV || language == EShLangTaskNV) {
                 requireExtensions(loc, 1, &E_GL_NV_mesh_shader, "gl_WorkGroupSize");
-            }
-            else
-#endif
-            {
+            } else {
                 profileRequires(loc, EEsProfile, 310, 0, "gl_WorkGroupSize");
                 profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_compute_shader, "gl_WorkGroupSize");
             }
+#endif
+            if (nonLiteral)
+                error(loc, "needs a literal integer", "local_size", "");
             if (id.size() == 12 && value == 0) {
                 error(loc, "must be at least 1", id.c_str(), "");
                 return;
             }
             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) {
@@ -5218,61 +5502,58 @@
     if (src.hasPacking())
         dst.layoutPacking = src.layoutPacking;
 
+#ifndef GLSLANG_WEB
     if (src.hasStream())
         dst.layoutStream = src.layoutStream;
-
     if (src.hasFormat())
         dst.layoutFormat = src.layoutFormat;
-
     if (src.hasXfbBuffer())
         dst.layoutXfbBuffer = src.layoutXfbBuffer;
+    if (src.hasBufferReferenceAlign())
+        dst.layoutBufferReferenceAlign = src.layoutBufferReferenceAlign;
+#endif
 
     if (src.hasAlign())
         dst.layoutAlign = src.layoutAlign;
 
-    if (src.hasBufferReferenceAlign())
-        dst.layoutBufferReferenceAlign = src.layoutBufferReferenceAlign;
-
     if (! inheritOnly) {
         if (src.hasLocation())
             dst.layoutLocation = src.layoutLocation;
-        if (src.hasComponent())
-            dst.layoutComponent = src.layoutComponent;
-        if (src.hasIndex())
-            dst.layoutIndex = src.layoutIndex;
-
         if (src.hasOffset())
             dst.layoutOffset = src.layoutOffset;
-
         if (src.hasSet())
             dst.layoutSet = src.layoutSet;
         if (src.layoutBinding != TQualifier::layoutBindingEnd)
             dst.layoutBinding = src.layoutBinding;
 
+        if (src.hasSpecConstantId())
+            dst.layoutSpecConstantId = src.layoutSpecConstantId;
+
+#ifndef GLSLANG_WEB
+        if (src.hasComponent())
+            dst.layoutComponent = src.layoutComponent;
+        if (src.hasIndex())
+            dst.layoutIndex = src.layoutIndex;
         if (src.hasXfbStride())
             dst.layoutXfbStride = src.layoutXfbStride;
         if (src.hasXfbOffset())
             dst.layoutXfbOffset = src.layoutXfbOffset;
         if (src.hasAttachment())
             dst.layoutAttachment = src.layoutAttachment;
-        if (src.hasSpecConstantId())
-            dst.layoutSpecConstantId = src.layoutSpecConstantId;
-
         if (src.layoutPushConstant)
             dst.layoutPushConstant = true;
 
         if (src.layoutBufferReference)
             dst.layoutBufferReference = true;
 
-#ifdef NV_EXTENSIONS
         if (src.layoutPassthrough)
             dst.layoutPassthrough = true;
         if (src.layoutViewportRelative)
             dst.layoutViewportRelative = true;
         if (src.layoutSecondaryViewportRelativeOffset != -2048)
             dst.layoutSecondaryViewportRelativeOffset = src.layoutSecondaryViewportRelativeOffset;
-        if (src.layoutShaderRecordNV)
-            dst.layoutShaderRecordNV = true;
+        if (src.layoutShaderRecord)
+            dst.layoutShaderRecord = true;
         if (src.pervertexNV)
             dst.pervertexNV = true;
 #endif
@@ -5333,17 +5614,15 @@
                 if (qualifier.hasPacking())
                     error(loc, "cannot specify packing on a variable declaration", "layout", "");
                 // "The offset qualifier can only be used on block members of blocks..."
-                if (qualifier.hasOffset() && type.getBasicType() != EbtAtomicUint)
+                if (qualifier.hasOffset() && !type.isAtomic())
                     error(loc, "cannot specify on a variable declaration", "offset", "");
                 // "The align qualifier can only be used on blocks or block members..."
                 if (qualifier.hasAlign())
                     error(loc, "cannot specify on a variable declaration", "align", "");
-                if (qualifier.layoutPushConstant)
+                if (qualifier.isPushConstant())
                     error(loc, "can only specify on a uniform block", "push_constant", "");
-#ifdef NV_EXTENSIONS
-                if (qualifier.layoutShaderRecordNV)
+                if (qualifier.isShaderRecord())
                     error(loc, "can only specify on a buffer block", "shaderRecordNV", "");
-#endif
             }
             break;
         default:
@@ -5407,22 +5686,20 @@
         case EvqVaryingOut:
             if (type.getBasicType() == EbtBlock)
                 profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, "location qualifier on in/out block");
-#ifdef NV_EXTENSIONS
             if (type.getQualifier().isTaskMemory())
                 error(loc, "cannot apply to taskNV in/out blocks", "location", "");
-#endif
             break;
         case EvqUniform:
         case EvqBuffer:
             if (type.getBasicType() == EbtBlock)
                 error(loc, "cannot apply to uniform or buffer block", "location", "");
             break;
-#ifdef NV_EXTENSIONS
-        case EvqPayloadNV:
-        case EvqPayloadInNV:
-        case EvqHitAttrNV:
-        case EvqCallableDataNV:
-        case EvqCallableDataInNV:
+#ifndef GLSLANG_WEB
+        case EvqPayload:
+        case EvqPayloadIn:
+        case EvqHitAttr:
+        case EvqCallableData:
+        case EvqCallableDataIn:
             break;
 #endif
         default:
@@ -5440,6 +5717,7 @@
             error(loc, "fragment outputs sharing the same location must be the same basic type", "location", "%d", repeated);
     }
 
+#ifndef GLSLANG_WEB
     if (qualifier.hasXfbOffset() && qualifier.hasXfbBuffer()) {
         int repeated = intermediate.addXfbBufferOffset(type);
         if (repeated >= 0)
@@ -5447,20 +5725,24 @@
 
         // "The offset must be a multiple of the size of the first component of the first
         // qualified variable or block member, or a compile-time error results. Further, if applied to an aggregate
-        // containing a double, the offset must also be a multiple of 8..."
-        if (type.containsBasicType(EbtDouble) && ! IsMultipleOfPow2(qualifier.layoutXfbOffset, 8))
-            error(loc, "type contains double; xfb_offset must be a multiple of 8", "xfb_offset", "");
-        // ..., if applied to an aggregate containing a float16_t, the offset must also be a multiple of 2..."
-        else if (type.containsBasicType(EbtFloat16) && !IsMultipleOfPow2(qualifier.layoutXfbOffset, 2))
-            error(loc, "type contains half float; xfb_offset must be a multiple of 2", "xfb_offset", "");
-        else if (! IsMultipleOfPow2(qualifier.layoutXfbOffset, 4))
+        // containing a double or 64-bit integer, the offset must also be a multiple of 8..."
+        if ((type.containsBasicType(EbtDouble) || type.containsBasicType(EbtInt64) || type.containsBasicType(EbtUint64)) &&
+            ! IsMultipleOfPow2(qualifier.layoutXfbOffset, 8))
+            error(loc, "type contains double or 64-bit integer; xfb_offset must be a multiple of 8", "xfb_offset", "");
+        else if ((type.containsBasicType(EbtBool) || type.containsBasicType(EbtFloat) ||
+                  type.containsBasicType(EbtInt) || type.containsBasicType(EbtUint)) &&
+                 ! IsMultipleOfPow2(qualifier.layoutXfbOffset, 4))
             error(loc, "must be a multiple of size of first component", "xfb_offset", "");
+        // ..., if applied to an aggregate containing a half float or 16-bit integer, the offset must also be a multiple of 2..."
+        else if ((type.contains16BitFloat() || type.containsBasicType(EbtInt16) || type.containsBasicType(EbtUint16)) &&
+                 !IsMultipleOfPow2(qualifier.layoutXfbOffset, 2))
+            error(loc, "type contains half float or 16-bit integer; xfb_offset must be a multiple of 2", "xfb_offset", "");
     }
-
     if (qualifier.hasXfbStride() && qualifier.hasXfbBuffer()) {
         if (! intermediate.setXfbBufferStride(qualifier.layoutXfbBuffer, qualifier.layoutXfbStride))
             error(loc, "all stride settings must match for xfb buffer", "xfb_stride", "%d", qualifier.layoutXfbBuffer);
     }
+#endif
 
     if (qualifier.hasBinding()) {
         // Binding checking, from the spec:
@@ -5483,15 +5765,19 @@
                         lastBinding += type.getCumulativeArraySize();
                     else {
                         lastBinding += 1;
+#ifndef GLSLANG_WEB
                         if (spvVersion.vulkan == 0)
                             warn(loc, "assuming binding count of one for compile-time checking of binding numbers for unsized array", "[]", "");
+#endif
                     }
                 }
             }
+#ifndef GLSLANG_WEB
             if (spvVersion.vulkan == 0 && lastBinding >= resources.maxCombinedTextureImageUnits)
                 error(loc, "sampler binding not less than gl_MaxCombinedTextureImageUnits", "binding", type.isArray() ? "(using array)" : "");
+#endif
         }
-        if (type.getBasicType() == EbtAtomicUint) {
+        if (type.isAtomic()) {
             if (qualifier.layoutBinding >= (unsigned int)resources.maxAtomicCounterBindings) {
                 error(loc, "atomic_uint binding is too large; see gl_MaxAtomicCounterBindings", "binding", "");
                 return;
@@ -5501,18 +5787,16 @@
         // some types require bindings
 
         // atomic_uint
-        if (type.getBasicType() == EbtAtomicUint)
+        if (type.isAtomic())
             error(loc, "layout(binding=X) is required", "atomic_uint", "");
 
         // SPIR-V
         if (spvVersion.spv > 0) {
             if (qualifier.isUniformOrBuffer()) {
-                if (type.getBasicType() == EbtBlock && !qualifier.layoutPushConstant &&
-#ifdef NV_EXTENSIONS
-                       !qualifier.layoutShaderRecordNV &&
-#endif
-                       !qualifier.layoutAttachment &&
-                       !qualifier.layoutBufferReference)
+                if (type.getBasicType() == EbtBlock && !qualifier.isPushConstant() &&
+                       !qualifier.isShaderRecord() &&
+                       !qualifier.hasAttachment() &&
+                       !qualifier.hasBufferReference())
                     error(loc, "uniform/buffer blocks require layout(binding=X)", "binding", "");
                 else if (spvVersion.vulkan > 0 && type.getBasicType() == EbtSampler)
                     error(loc, "sampler/texture/image requires layout(binding=X)", "binding", "");
@@ -5537,40 +5821,38 @@
     // Image format
     if (qualifier.hasFormat()) {
         if (! type.isImage())
-            error(loc, "only apply to images", TQualifier::getLayoutFormatString(qualifier.layoutFormat), "");
+            error(loc, "only apply to images", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
         else {
-            if (type.getSampler().type == EbtFloat && qualifier.layoutFormat > ElfFloatGuard)
-                error(loc, "does not apply to floating point images", TQualifier::getLayoutFormatString(qualifier.layoutFormat), "");
-            if (type.getSampler().type == EbtInt && (qualifier.layoutFormat < ElfFloatGuard || qualifier.layoutFormat > ElfIntGuard))
-                error(loc, "does not apply to signed integer images", TQualifier::getLayoutFormatString(qualifier.layoutFormat), "");
-            if (type.getSampler().type == EbtUint && qualifier.layoutFormat < ElfIntGuard)
-                error(loc, "does not apply to unsigned integer images", TQualifier::getLayoutFormatString(qualifier.layoutFormat), "");
+            if (type.getSampler().type == EbtFloat && qualifier.getFormat() > ElfFloatGuard)
+                error(loc, "does not apply to floating point images", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
+            if (type.getSampler().type == EbtInt && (qualifier.getFormat() < ElfFloatGuard || qualifier.getFormat() > ElfIntGuard))
+                error(loc, "does not apply to signed integer images", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
+            if (type.getSampler().type == EbtUint && qualifier.getFormat() < ElfIntGuard)
+                error(loc, "does not apply to unsigned integer images", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
 
-            if (profile == EEsProfile) {
+            if (isEsProfile()) {
                 // "Except for image variables qualified with the format qualifiers r32f, r32i, and r32ui, image variables must
                 // specify either memory qualifier readonly or the memory qualifier writeonly."
-                if (! (qualifier.layoutFormat == ElfR32f || qualifier.layoutFormat == ElfR32i || qualifier.layoutFormat == ElfR32ui)) {
-                    if (! qualifier.readonly && ! qualifier.writeonly)
-                        error(loc, "format requires readonly or writeonly memory qualifier", TQualifier::getLayoutFormatString(qualifier.layoutFormat), "");
+                if (! (qualifier.getFormat() == ElfR32f || qualifier.getFormat() == ElfR32i || qualifier.getFormat() == ElfR32ui)) {
+                    if (! qualifier.isReadOnly() && ! qualifier.isWriteOnly())
+                        error(loc, "format requires readonly or writeonly memory qualifier", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
                 }
             }
         }
-    } else if (type.isImage() && ! qualifier.writeonly) {
+    } else if (type.isImage() && ! qualifier.isWriteOnly()) {
         const char *explanation = "image variables not declared 'writeonly' and without a format layout qualifier";
         requireProfile(loc, ECoreProfile | ECompatibilityProfile, explanation);
         profileRequires(loc, ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shader_image_load_formatted, explanation);
     }
 
-    if (qualifier.layoutPushConstant && type.getBasicType() != EbtBlock)
+    if (qualifier.isPushConstant() && type.getBasicType() != EbtBlock)
         error(loc, "can only be used with a block", "push_constant", "");
 
-    if (qualifier.layoutBufferReference && type.getBasicType() != EbtBlock)
+    if (qualifier.hasBufferReference() && type.getBasicType() != EbtBlock)
         error(loc, "can only be used with a block", "buffer_reference", "");
 
-#ifdef NV_EXTENSIONS
-    if (qualifier.layoutShaderRecordNV && type.getBasicType() != EbtBlock)
+    if (qualifier.isShaderRecord() && type.getBasicType() != EbtBlock)
         error(loc, "can only be used with a block", "shaderRecordNV", "");
-#endif
 
     // input attachment
     if (type.isSubpass()) {
@@ -5627,10 +5909,11 @@
         // output block declarations, and output block member declarations."
 
         switch (qualifier.storage) {
+#ifndef GLSLANG_WEB
         case EvqVaryingIn:
         {
             const char* feature = "location qualifier on input";
-            if (profile == EEsProfile && version < 310)
+            if (isEsProfile() && version < 310)
                 requireStage(loc, EShLangVertex, feature);
             else
                 requireStage(loc, (EShLanguageMask)~EShLangComputeMask, feature);
@@ -5647,7 +5930,7 @@
         case EvqVaryingOut:
         {
             const char* feature = "location qualifier on output";
-            if (profile == EEsProfile && version < 310)
+            if (isEsProfile() && version < 310)
                 requireStage(loc, EShLangFragment, feature);
             else
                 requireStage(loc, (EShLanguageMask)~EShLangComputeMask, feature);
@@ -5661,12 +5944,14 @@
             }
             break;
         }
+#endif
         case EvqUniform:
         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;
         }
@@ -5701,18 +5986,17 @@
                 error(loc, "offset/align can only be used on a uniform or buffer", "layout", "");
         }
     }
-    if (qualifier.layoutPushConstant) {
+    if (qualifier.isPushConstant()) {
         if (qualifier.storage != EvqUniform)
             error(loc, "can only be used with a uniform", "push_constant", "");
         if (qualifier.hasSet())
             error(loc, "cannot be used with push_constant", "set", "");
     }
-    if (qualifier.layoutBufferReference) {
+    if (qualifier.hasBufferReference()) {
         if (qualifier.storage != EvqBuffer)
             error(loc, "can only be used with buffer", "buffer_reference", "");
     }
-#ifdef NV_EXTENSIONS
-    if (qualifier.layoutShaderRecordNV) {
+    if (qualifier.isShaderRecord()) {
         if (qualifier.storage != EvqBuffer)
             error(loc, "can only be used with a buffer", "shaderRecordNV", "");
         if (qualifier.hasBinding())
@@ -5721,15 +6005,15 @@
             error(loc, "cannot be used with shaderRecordNV", "set", "");
 
     }
-    if (qualifier.storage == EvqHitAttrNV && qualifier.hasLayout()) {
+    if (qualifier.storage == EvqHitAttr && qualifier.hasLayout()) {
         error(loc, "cannot apply layout qualifiers to hitAttributeNV variable", "hitAttributeNV", "");
     }
-#endif
 }
 
 // For places that can't have shader-level layout qualifiers
 void TParseContext::checkNoShaderLayouts(const TSourceLoc& loc, const TShaderQualifiers& shaderQualifiers)
 {
+#ifndef GLSLANG_WEB
     const char* message = "can only apply to a standalone qualifier";
 
     if (shaderQualifiers.geometry != ElgNone)
@@ -5742,10 +6026,6 @@
         error(loc, message, "point_mode", "");
     if (shaderQualifiers.invocations != TQualifier::layoutNotSet)
         error(loc, message, "invocations", "");
-    if (shaderQualifiers.earlyFragmentTests)
-        error(loc, message, "early_fragment_tests", "");
-    if (shaderQualifiers.postDepthCoverage)
-        error(loc, message, "post_depth_coverage", "");
     for (int i = 0; i < 3; ++i) {
         if (shaderQualifiers.localSize[i] > 1)
             error(loc, message, "local_size", "");
@@ -5753,36 +6033,38 @@
             error(loc, message, "local_size id", "");
     }
     if (shaderQualifiers.vertices != TQualifier::layoutNotSet) {
-        if (language == EShLangGeometry
-#ifdef NV_EXTENSIONS
-            || language == EShLangMeshNV
-#endif
-           )
+        if (language == EShLangGeometry || language == EShLangMeshNV)
             error(loc, message, "max_vertices", "");
         else if (language == EShLangTessControl)
             error(loc, message, "vertices", "");
         else
             assert(0);
     }
-#ifdef NV_EXTENSIONS
+    if (shaderQualifiers.earlyFragmentTests)
+        error(loc, message, "early_fragment_tests", "");
+    if (shaderQualifiers.postDepthCoverage)
+        error(loc, message, "post_depth_coverage", "");
     if (shaderQualifiers.primitives != TQualifier::layoutNotSet) {
         if (language == EShLangMeshNV)
             error(loc, message, "max_primitives", "");
         else
             assert(0);
     }
-#endif
-    if (shaderQualifiers.blendEquation)
+    if (shaderQualifiers.hasBlendEquation())
         error(loc, message, "blend equation", "");
     if (shaderQualifiers.numViews != TQualifier::layoutNotSet)
         error(loc, message, "num_views", "");
+    if (shaderQualifiers.interlockOrdering != EioNone)
+        error(loc, message, TQualifier::getInterlockOrderingString(shaderQualifiers.interlockOrdering), "");
+#endif
 }
 
 // Correct and/or advance an object's offset layout qualifier.
 void TParseContext::fixOffset(const TSourceLoc& loc, TSymbol& symbol)
 {
     const TQualifier& qualifier = symbol.getType().getQualifier();
-    if (symbol.getType().getBasicType() == EbtAtomicUint) {
+#ifndef GLSLANG_WEB
+    if (symbol.getType().isAtomic()) {
         if (qualifier.hasBinding() && (int)qualifier.layoutBinding < resources.maxAtomicCounterBindings) {
 
             // Set the offset
@@ -5791,6 +6073,10 @@
                 offset = qualifier.layoutOffset;
             else
                 offset = atomicUintOffsets[qualifier.layoutBinding];
+
+            if (offset % 4 != 0)
+                error(loc, "atomic counters offset should align based on 4:", "offset", "%d", offset);
+
             symbol.getWritableType().getQualifier().layoutOffset = offset;
 
             // Check for overlap
@@ -5811,6 +6097,7 @@
             atomicUintOffsets[qualifier.layoutBinding] = offset + numOffsets;
         }
     }
+#endif
 }
 
 //
@@ -5820,13 +6107,25 @@
 //
 const TFunction* TParseContext::findFunction(const TSourceLoc& loc, const TFunction& call, bool& builtIn)
 {
-    const TFunction* function = nullptr;
-
     if (symbolTable.isFunctionNameVariable(call.getName())) {
         error(loc, "can't use function syntax on variable", call.getName().c_str(), "");
         return nullptr;
     }
 
+#ifdef GLSLANG_WEB
+    return findFunctionExact(loc, call, builtIn);
+#endif
+
+    const TFunction* function = nullptr;
+
+    // debugPrintfEXT has var args and is in the symbol table as "debugPrintfEXT()",
+    // mangled to "debugPrintfEXT("
+    if (call.getName() == "debugPrintfEXT") {
+        TSymbol* symbol = symbolTable.find("debugPrintfEXT(", &builtIn);
+        if (symbol)
+            return symbol->getAsFunction();
+    }
+
     bool explicitTypesEnabled = extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
                                 extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int8) ||
                                 extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int16) ||
@@ -5836,10 +6135,10 @@
                                 extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32) ||
                                 extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64);
 
-    if (profile == EEsProfile || version < 120)
+    if (isEsProfile() || version < 120)
         function = findFunctionExact(loc, call, builtIn);
     else if (version < 400)
-        function = findFunction120(loc, call, builtIn);
+        function = extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) ? findFunction400(loc, call, builtIn) : findFunction120(loc, call, builtIn);
     else if (explicitTypesEnabled)
         function = findFunctionExplicitTypes(loc, call, builtIn);
     else
@@ -5984,11 +6283,22 @@
     symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn);
 
     // can 'from' convert to 'to'?
-    const auto convertible = [this](const TType& from, const TType& to, TOperator, int) -> bool {
+    const auto convertible = [this,builtIn](const TType& from, const TType& to, TOperator, int) -> bool {
         if (from == to)
             return true;
+        if (from.coopMatParameterOK(to))
+            return true;
+        // Allow a sized array to be passed through an unsized array parameter, for coopMatLoad/Store functions
+        if (builtIn && from.isArray() && to.isUnsizedArray()) {
+            TType fromElementType(from, 0);
+            TType toElementType(to, 0);
+            if (fromElementType == toElementType)
+                return true;
+        }
         if (from.isArray() || to.isArray() || ! from.sameElementShape(to))
             return false;
+        if (from.isCoopMat() && to.isCoopMat())
+            return from.sameCoopMatBaseType(to);
         return intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType());
     };
 
@@ -6049,11 +6359,22 @@
     symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn);
 
     // can 'from' convert to 'to'?
-    const auto convertible = [this](const TType& from, const TType& to, TOperator, int) -> bool {
+    const auto convertible = [this,builtIn](const TType& from, const TType& to, TOperator, int) -> bool {
         if (from == to)
             return true;
+        if (from.coopMatParameterOK(to))
+            return true;
+        // Allow a sized array to be passed through an unsized array parameter, for coopMatLoad/Store functions
+        if (builtIn && from.isArray() && to.isUnsizedArray()) {
+            TType fromElementType(from, 0);
+            TType toElementType(to, 0);
+            if (fromElementType == toElementType)
+                return true;
+        }
         if (from.isArray() || to.isArray() || ! from.sameElementShape(to))
             return false;
+        if (from.isCoopMat() && to.isCoopMat())
+            return from.sameCoopMatBaseType(to);
         return intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType());
     };
 
@@ -6105,21 +6426,26 @@
     return bestMatch;
 }
 
-// When a declaration includes a type, but not a variable name, it can be
+// When a declaration includes a type, but not a variable name, it can be used
 // to establish defaults.
 void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType& publicType)
 {
-    if (publicType.basicType == EbtAtomicUint && publicType.qualifier.hasBinding() && publicType.qualifier.hasOffset()) {
+#ifndef GLSLANG_WEB
+    if (publicType.basicType == EbtAtomicUint && publicType.qualifier.hasBinding()) {
         if (publicType.qualifier.layoutBinding >= (unsigned int)resources.maxAtomicCounterBindings) {
             error(loc, "atomic_uint binding is too large", "binding", "");
             return;
         }
-        atomicUintOffsets[publicType.qualifier.layoutBinding] = publicType.qualifier.layoutOffset;
+
+        if(publicType.qualifier.hasOffset()) {
+            atomicUintOffsets[publicType.qualifier.layoutBinding] = publicType.qualifier.layoutOffset;
+        }
         return;
     }
 
-    if (publicType.qualifier.hasLayout() && !publicType.qualifier.layoutBufferReference)
+    if (publicType.qualifier.hasLayout() && !publicType.qualifier.hasBufferReference())
         warn(loc, "useless application of layout qualifier", "layout", "");
+#endif
 }
 
 //
@@ -6143,6 +6469,33 @@
     type.copyArrayInnerSizes(publicType.arraySizes);
     arrayOfArrayVersionCheck(loc, type.getArraySizes());
 
+    if (type.isCoopMat()) {
+        intermediate.setUseVulkanMemoryModel();
+        intermediate.setUseStorageBuffer();
+
+        if (!publicType.typeParameters || publicType.typeParameters->getNumDims() != 4) {
+            error(loc, "expected four type parameters", identifier.c_str(), "");
+        }
+        if (publicType.typeParameters) {
+            if (isTypeFloat(publicType.basicType) &&
+                publicType.typeParameters->getDimSize(0) != 16 &&
+                publicType.typeParameters->getDimSize(0) != 32 &&
+                publicType.typeParameters->getDimSize(0) != 64) {
+                error(loc, "expected 16, 32, or 64 bits for first type parameter", identifier.c_str(), "");
+            }
+            if (isTypeInt(publicType.basicType) &&
+                publicType.typeParameters->getDimSize(0) != 8 &&
+                publicType.typeParameters->getDimSize(0) != 32) {
+                error(loc, "expected 8 or 32 bits for first type parameter", identifier.c_str(), "");
+            }
+        }
+
+    } else {
+        if (publicType.typeParameters && publicType.typeParameters->getNumDims() != 0) {
+            error(loc, "unexpected type parameters", identifier.c_str(), "");
+        }
+    }
+
     if (voidErrorCheck(loc, identifier, type.getBasicType()))
         return nullptr;
 
@@ -6152,14 +6505,18 @@
         nonInitConstCheck(loc, identifier, type);
 
     samplerCheck(loc, type, identifier, initializer);
-    atomicUintCheck(loc, type, identifier);
     transparentOpaqueCheck(loc, type, identifier);
-#ifdef NV_EXTENSIONS
-    accStructNVCheck(loc, type, identifier);
+#ifndef GLSLANG_WEB
+    atomicUintCheck(loc, type, identifier);
+    accStructCheck(loc, type, identifier);
+    checkAndResizeMeshViewDim(loc, type, /*isBlockMember*/ false);
 #endif
+    if (type.getQualifier().storage == EvqConst && type.containsReference()) {
+        error(loc, "variables with reference type can't have qualifier 'const'", "qualifier", "");
+    }
 
     if (type.getQualifier().storage != EvqUniform && type.getQualifier().storage != EvqBuffer) {
-        if (type.containsBasicType(EbtFloat16))
+        if (type.contains16BitFloat())
             requireFloat16Arithmetic(loc, "qualifier", "float16 types can only be in uniform block or buffer storage");
         if (type.contains16BitInt())
             requireInt16Arithmetic(loc, "qualifier", "(u)int16 types can only be in uniform block or buffer storage");
@@ -6167,9 +6524,12 @@
             requireInt8Arithmetic(loc, "qualifier", "(u)int8 types can only be in uniform block or buffer storage");
     }
 
+    if (type.getQualifier().storage == EvqShared && type.containsCoopMat())
+        error(loc, "qualifier", "Cooperative matrix types must not be used in shared memory", "");
+
     if (identifier != "gl_FragCoord" && (publicType.shaderQualifiers.originUpperLeft || publicType.shaderQualifiers.pixelCenterInteger))
         error(loc, "can only apply origin_upper_left and pixel_center_origin to gl_FragCoord", "layout qualifier", "");
-    if (identifier != "gl_FragDepth" && publicType.shaderQualifiers.layoutDepth != EldNone)
+    if (identifier != "gl_FragDepth" && publicType.shaderQualifiers.getDepth() != EldNone)
         error(loc, "can only apply depth layout to gl_FragDepth", "layout qualifier", "");
 
     // Check for redeclaration of built-ins and/or attempting to declare a reserved name
@@ -6219,23 +6579,20 @@
     // fix up
     fixOffset(loc, *symbol);
 
-    if (symbol->getType().getBasicType() == EbtStruct) {
-       fixXfbOffsets(symbol->getWritableType().getQualifier(),
-                     *(symbol->getWritableType().getWritableStruct()));
-    }
-
     return initNode;
 }
 
 // Pick up global defaults from the provide global defaults into dst.
 void TParseContext::inheritGlobalDefaults(TQualifier& dst) const
 {
+#ifndef GLSLANG_WEB
     if (dst.storage == EvqVaryingOut) {
         if (! dst.hasStream() && language == EShLangGeometry)
             dst.layoutStream = globalOutputDefaults.layoutStream;
         if (! dst.hasXfbBuffer())
             dst.layoutXfbBuffer = globalOutputDefaults.layoutXfbBuffer;
     }
+#endif
 }
 
 //
@@ -6264,7 +6621,9 @@
     // make a new variable
     TVariable* variable = new TVariable(&identifier, type);
 
+#ifndef GLSLANG_WEB
     ioArrayCheck(loc, type, identifier);
+#endif
 
     // add variable to symbol table
     if (symbolTable.insert(*variable)) {
@@ -6291,7 +6650,7 @@
     //
     TStorageQualifier qualifier = variable->getType().getQualifier().storage;
     if (! (qualifier == EvqTemporary || qualifier == EvqGlobal || qualifier == EvqConst ||
-           (qualifier == EvqUniform && profile != EEsProfile && version >= 120))) {
+           (qualifier == EvqUniform && !isEsProfile() && version >= 120))) {
         error(loc, " cannot initialize this type of qualifier ", variable->getType().getStorageQualifierString(), "");
         return nullptr;
     }
@@ -6309,7 +6668,9 @@
     TType skeletalType;
     skeletalType.shallowCopy(variable->getType());
     skeletalType.getQualifier().makeTemporary();
+#ifndef GLSLANG_WEB
     initializer = convertInitializerList(loc, skeletalType, initializer);
+#endif
     if (! initializer) {
         // error recovery; don't leave const without constant values
         if (qualifier == EvqConst)
@@ -6363,7 +6724,7 @@
         // qualifier any initializer must be a constant expression."
         if (symbolTable.atGlobalLevel() && ! initializer->getType().getQualifier().isConstant()) {
             const char* initFeature = "non-constant global initializer (needs GL_EXT_shader_non_constant_global_initializers)";
-            if (profile == EEsProfile) {
+            if (isEsProfile()) {
                 if (relaxedErrors() && ! extensionTurnedOn(E_GL_EXT_shader_non_constant_global_initializers))
                     warn(loc, "not allowed in this version", initFeature, "");
                 else
@@ -6614,7 +6975,7 @@
     // This avoids requesting a matrix of a new type that is going to be discarded anyway.
     // TODO: This could be generalized to more type combinations, but that would require
     // more extensive testing and full algorithm rework. For now, the need to do two changes makes
-    // the recursive call work, and avoids the most aggregious case of creating integer matrices.
+    // the recursive call work, and avoids the most egregious case of creating integer matrices.
     if (node->getType().isMatrix() && (type.isScalar() || type.isVector()) &&
             type.isFloatingDomain() != node->getType().isFloatingDomain()) {
         TType transitionType(node->getBasicType(), glslang::EvqTemporary, type.getVectorSize(), 0, 0, node->isVector());
@@ -6645,6 +7006,35 @@
         basicOp = EOpConstructFloat;
         break;
 
+    case EOpConstructIVec2:
+    case EOpConstructIVec3:
+    case EOpConstructIVec4:
+    case EOpConstructInt:
+        basicOp = EOpConstructInt;
+        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:
+        basicOp = EOpConstructUint;
+        break;
+
+    case EOpConstructBVec2:
+    case EOpConstructBVec3:
+    case EOpConstructBVec4:
+    case EOpConstructBool:
+        basicOp = EOpConstructBool;
+        break;
+
+#ifndef GLSLANG_WEB
+
     case EOpConstructDVec2:
     case EOpConstructDVec3:
     case EOpConstructDVec4:
@@ -6675,6 +7065,22 @@
     case EOpConstructF16Mat4x4:
     case EOpConstructFloat16:
         basicOp = EOpConstructFloat16;
+        // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
+        // so construct a 32-bit type and convert
+        if (!intermediate.getArithemeticFloat16Enabled()) {
+            TType tempType(EbtFloat, EvqTemporary, type.getVectorSize());
+            newNode = node;
+            if (tempType != newNode->getType()) {
+                TOperator aggregateOp;
+                if (op == EOpConstructFloat16)
+                    aggregateOp = EOpConstructFloat;
+                else
+                    aggregateOp = (TOperator)(EOpConstructVec2 + op - EOpConstructF16Vec2);
+                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
+            }
+            newNode = intermediate.addConversion(EbtFloat16, newNode);
+            return newNode;
+        }
         break;
 
     case EOpConstructI8Vec2:
@@ -6682,6 +7088,22 @@
     case EOpConstructI8Vec4:
     case EOpConstructInt8:
         basicOp = EOpConstructInt8;
+        // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
+        // so construct a 32-bit type and convert
+        if (!intermediate.getArithemeticInt8Enabled()) {
+            TType tempType(EbtInt, EvqTemporary, type.getVectorSize());
+            newNode = node;
+            if (tempType != newNode->getType()) {
+                TOperator aggregateOp;
+                if (op == EOpConstructInt8)
+                    aggregateOp = EOpConstructInt;
+                else
+                    aggregateOp = (TOperator)(EOpConstructIVec2 + op - EOpConstructI8Vec2);
+                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
+            }
+            newNode = intermediate.addConversion(EbtInt8, newNode);
+            return newNode;
+        }
         break;
 
     case EOpConstructU8Vec2:
@@ -6689,6 +7111,22 @@
     case EOpConstructU8Vec4:
     case EOpConstructUint8:
         basicOp = EOpConstructUint8;
+        // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
+        // so construct a 32-bit type and convert
+        if (!intermediate.getArithemeticInt8Enabled()) {
+            TType tempType(EbtUint, EvqTemporary, type.getVectorSize());
+            newNode = node;
+            if (tempType != newNode->getType()) {
+                TOperator aggregateOp;
+                if (op == EOpConstructUint8)
+                    aggregateOp = EOpConstructUint;
+                else
+                    aggregateOp = (TOperator)(EOpConstructUVec2 + op - EOpConstructU8Vec2);
+                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
+            }
+            newNode = intermediate.addConversion(EbtUint8, newNode);
+            return newNode;
+        }
         break;
 
     case EOpConstructI16Vec2:
@@ -6696,6 +7134,22 @@
     case EOpConstructI16Vec4:
     case EOpConstructInt16:
         basicOp = EOpConstructInt16;
+        // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
+        // so construct a 32-bit type and convert
+        if (!intermediate.getArithemeticInt16Enabled()) {
+            TType tempType(EbtInt, EvqTemporary, type.getVectorSize());
+            newNode = node;
+            if (tempType != newNode->getType()) {
+                TOperator aggregateOp;
+                if (op == EOpConstructInt16)
+                    aggregateOp = EOpConstructInt;
+                else
+                    aggregateOp = (TOperator)(EOpConstructIVec2 + op - EOpConstructI16Vec2);
+                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
+            }
+            newNode = intermediate.addConversion(EbtInt16, newNode);
+            return newNode;
+        }
         break;
 
     case EOpConstructU16Vec2:
@@ -6703,20 +7157,22 @@
     case EOpConstructU16Vec4:
     case EOpConstructUint16:
         basicOp = EOpConstructUint16;
-        break;
-
-    case EOpConstructIVec2:
-    case EOpConstructIVec3:
-    case EOpConstructIVec4:
-    case EOpConstructInt:
-        basicOp = EOpConstructInt;
-        break;
-
-    case EOpConstructUVec2:
-    case EOpConstructUVec3:
-    case EOpConstructUVec4:
-    case EOpConstructUint:
-        basicOp = EOpConstructUint;
+        // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
+        // so construct a 32-bit type and convert
+        if (!intermediate.getArithemeticInt16Enabled()) {
+            TType tempType(EbtUint, EvqTemporary, type.getVectorSize());
+            newNode = node;
+            if (tempType != newNode->getType()) {
+                TOperator aggregateOp;
+                if (op == EOpConstructUint16)
+                    aggregateOp = EOpConstructUint;
+                else
+                    aggregateOp = (TOperator)(EOpConstructUVec2 + op - EOpConstructU16Vec2);
+                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
+            }
+            newNode = intermediate.addConversion(EbtUint16, newNode);
+            return newNode;
+        }
         break;
 
     case EOpConstructI64Vec2:
@@ -6727,8 +7183,8 @@
         break;
 
     case EOpConstructUint64:
-        if (type.isScalar() && node->getType().getBasicType() == EbtReference) {
-            TIntermUnary* newNode = intermediate.addUnaryNode(EOpConvPtrToUint64, node, node->getLoc(), type);
+        if (type.isScalar() && node->getType().isReference()) {
+            TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvPtrToUint64, true, node, type);
             return newNode;
         }
         // fall through
@@ -6738,31 +7194,117 @@
         basicOp = EOpConstructUint64;
         break;
 
-    case EOpConstructBVec2:
-    case EOpConstructBVec3:
-    case EOpConstructBVec4:
-    case EOpConstructBool:
-        basicOp = EOpConstructBool;
-        break;
-
     case EOpConstructNonuniform:
-        node->getWritableType().getQualifier().nonUniform = true;
-        return node;
-        break;
+        // Make a nonuniform copy of node
+        newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpCopyObject, true, node, type);
+        return newNode;
 
     case EOpConstructReference:
         // construct reference from reference
-        if (node->getType().getBasicType() == EbtReference) {
-            newNode = intermediate.addUnaryNode(EOpConstructReference, node, node->getLoc(), type);
+        if (node->getType().isReference()) {
+            newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConstructReference, true, node, type);
             return newNode;
         // construct reference from uint64
         } else if (node->getType().isScalar() && node->getType().getBasicType() == EbtUint64) {
-            TIntermUnary* newNode = intermediate.addUnaryNode(EOpConvUint64ToPtr, node, node->getLoc(), 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;
         }
 
+    case EOpConstructCooperativeMatrix:
+        if (!node->getType().isCoopMat()) {
+            if (type.getBasicType() != node->getType().getBasicType()) {
+                node = intermediate.addConversion(type.getBasicType(), node);
+            }
+            node = intermediate.setAggregateOperator(node, EOpConstructCooperativeMatrix, type, node->getLoc());
+        } else {
+            TOperator op = EOpNull;
+            switch (type.getBasicType()) {
+            default:
+                assert(0);
+                break;
+            case EbtInt:
+                switch (node->getType().getBasicType()) {
+                    case EbtFloat:   op = EOpConvFloatToInt;    break;
+                    case EbtFloat16: op = EOpConvFloat16ToInt;  break;
+                    case EbtUint8:   op = EOpConvUint8ToInt;    break;
+                    case EbtInt8:    op = EOpConvInt8ToInt;     break;
+                    case EbtUint:    op = EOpConvUintToInt;     break;
+                    default: assert(0);
+                }
+                break;
+            case EbtUint:
+                switch (node->getType().getBasicType()) {
+                    case EbtFloat:   op = EOpConvFloatToUint;    break;
+                    case EbtFloat16: op = EOpConvFloat16ToUint;  break;
+                    case EbtUint8:   op = EOpConvUint8ToUint;    break;
+                    case EbtInt8:    op = EOpConvInt8ToUint;     break;
+                    case EbtInt:     op = EOpConvIntToUint;      break;
+                    case EbtUint:    op = EOpConvUintToInt8;     break;
+                    default: assert(0);
+                }
+                break;
+            case EbtInt8:
+                switch (node->getType().getBasicType()) {
+                    case EbtFloat:   op = EOpConvFloatToInt8;    break;
+                    case EbtFloat16: op = EOpConvFloat16ToInt8;  break;
+                    case EbtUint8:   op = EOpConvUint8ToInt8;    break;
+                    case EbtInt:     op = EOpConvIntToInt8;      break;
+                    case EbtUint:    op = EOpConvUintToInt8;     break;
+                    default: assert(0);
+                }
+                break;
+            case EbtUint8:
+                switch (node->getType().getBasicType()) {
+                    case EbtFloat:   op = EOpConvFloatToUint8;   break;
+                    case EbtFloat16: op = EOpConvFloat16ToUint8; break;
+                    case EbtInt8:    op = EOpConvInt8ToUint8;    break;
+                    case EbtInt:     op = EOpConvIntToUint8;     break;
+                    case EbtUint:    op = EOpConvUintToUint8;    break;
+                    default: assert(0);
+                }
+                break;
+            case EbtFloat:
+                switch (node->getType().getBasicType()) {
+                    case EbtFloat16: op = EOpConvFloat16ToFloat;  break;
+                    case EbtInt8:    op = EOpConvInt8ToFloat;     break;
+                    case EbtUint8:   op = EOpConvUint8ToFloat;    break;
+                    case EbtInt:     op = EOpConvIntToFloat;      break;
+                    case EbtUint:    op = EOpConvUintToFloat;     break;
+                    default: assert(0);
+                }
+                break;
+            case EbtFloat16:
+                switch (node->getType().getBasicType()) {
+                    case EbtFloat:  op = EOpConvFloatToFloat16;  break;
+                    case EbtInt8:   op = EOpConvInt8ToFloat16;   break;
+                    case EbtUint8:  op = EOpConvUint8ToFloat16;  break;
+                    case EbtInt:    op = EOpConvIntToFloat16;    break;
+                    case EbtUint:   op = EOpConvUintToFloat16;   break;
+                    default: assert(0);
+                }
+                break;
+            }
+
+            node = intermediate.addUnaryNode(op, node, node->getLoc(), type);
+            // If it's a (non-specialization) constant, it must be folded.
+            if (node->getAsUnaryNode()->getOperand()->getAsConstantUnion())
+                return node->getAsUnaryNode()->getOperand()->getAsConstantUnion()->fold(op, node->getType());
+        }
+
+        return node;
+
+#endif // GLSLANG_WEB
+
     default:
         error(loc, "unsupported construction", "", "");
 
@@ -6804,6 +7346,23 @@
     return converted;
 }
 
+// If a memory qualifier is present in 'to', also make it present in 'from'.
+void TParseContext::inheritMemoryQualifiers(const TQualifier& from, TQualifier& to)
+{
+#ifndef GLSLANG_WEB
+    if (from.isReadOnly())
+        to.readonly = from.readonly;
+    if (from.isWriteOnly())
+        to.writeonly = from.writeonly;
+    if (from.coherent)
+        to.coherent = from.coherent;
+    if (from.volatil)
+        to.volatil = from.volatil;
+    if (from.restrict)
+        to.restrict = from.restrict;
+#endif
+}
+
 //
 // Do everything needed to add an interface block.
 //
@@ -6819,7 +7378,7 @@
             requireProfile(loc, ~EEsProfile, "array-of-array of block");
     }
 
-    // fix and check for member storage qualifiers and types that don't belong within a block
+    // Inherit and check member storage qualifiers WRT to the block-level qualifier.
     for (unsigned int member = 0; member < typeList.size(); ++member) {
         TType& memberType = *typeList[member].type;
         TQualifier& memberQualifier = memberType.getQualifier();
@@ -6828,7 +7387,8 @@
         if (memberQualifier.storage != EvqTemporary && memberQualifier.storage != EvqGlobal && memberQualifier.storage != currentBlockQualifier.storage)
             error(memberLoc, "member storage qualifier cannot contradict block storage qualifier", memberType.getFieldName().c_str(), "");
         memberQualifier.storage = currentBlockQualifier.storage;
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
+        inheritMemoryQualifiers(currentBlockQualifier, memberQualifier);
         if (currentBlockQualifier.perPrimitiveNV)
             memberQualifier.perPrimitiveNV = currentBlockQualifier.perPrimitiveNV;
         if (currentBlockQualifier.perViewNV)
@@ -6849,6 +7409,9 @@
 
         if (memberType.containsOpaque())
             error(memberLoc, "member of block cannot be or contain a sampler, image, or atomic_uint type", typeList[member].type->getFieldName().c_str(), "");
+
+        if (memberType.containsCoopMat())
+            error(memberLoc, "member of block cannot be or contain a cooperative matrix type", typeList[member].type->getFieldName().c_str(), "");
     }
 
     // This might be a redeclaration of a built-in block.  If so, redeclareBuiltinBlock() will
@@ -6878,18 +7441,13 @@
 
     // Special case for "push_constant uniform", which has a default of std430,
     // contrary to normal uniform defaults, and can't have a default tracked for it.
-    if ((currentBlockQualifier.layoutPushConstant && !currentBlockQualifier.hasPacking())
-#ifdef NV_EXTENSIONS
-        || (currentBlockQualifier.layoutShaderRecordNV && !currentBlockQualifier.hasPacking())
-#endif
-       )
+    if ((currentBlockQualifier.isPushConstant() && !currentBlockQualifier.hasPacking()) ||
+        (currentBlockQualifier.isShaderRecord() && !currentBlockQualifier.hasPacking()))
         currentBlockQualifier.layoutPacking = ElpStd430;
 
-#ifdef NV_EXTENSIONS
     // Special case for "taskNV in/out", which has a default of std430,
-    if (currentBlockQualifier.perTaskNV && !currentBlockQualifier.hasPacking())
+    if (currentBlockQualifier.isTaskMemory() && !currentBlockQualifier.hasPacking())
         currentBlockQualifier.layoutPacking = ElpStd430;
-#endif
 
     // fix and check for member layout qualifiers
 
@@ -6907,12 +7465,11 @@
 
     bool memberWithLocation = false;
     bool memberWithoutLocation = false;
-#ifdef NV_EXTENSIONS
     bool memberWithPerViewQualifier = false;
-#endif
     for (unsigned int member = 0; member < typeList.size(); ++member) {
         TQualifier& memberQualifier = typeList[member].type->getQualifier();
         const TSourceLoc& memberLoc = typeList[member].loc;
+#ifndef GLSLANG_WEB
         if (memberQualifier.hasStream()) {
             if (defaultQualification.layoutStream != memberQualifier.layoutStream)
                 error(memberLoc, "member cannot contradict block", "stream", "");
@@ -6926,12 +7483,14 @@
             if (defaultQualification.layoutXfbBuffer != memberQualifier.layoutXfbBuffer)
                 error(memberLoc, "member cannot contradict block (or what block inherited from global)", "xfb_buffer", "");
         }
+#endif
 
         if (memberQualifier.hasPacking())
             error(memberLoc, "member of block cannot have a packing layout qualifier", typeList[member].type->getFieldName().c_str(), "");
         if (memberQualifier.hasLocation()) {
             const char* feature = "location on block member";
             switch (currentBlockQualifier.storage) {
+#ifndef GLSLANG_WEB
             case EvqVaryingIn:
             case EvqVaryingOut:
                 requireProfile(memberLoc, ECoreProfile | ECompatibilityProfile | EEsProfile, feature);
@@ -6939,6 +7498,7 @@
                 profileRequires(memberLoc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, feature);
                 memberWithLocation = true;
                 break;
+#endif
             default:
                 error(memberLoc, "can only use in an in/out block", feature, "");
                 break;
@@ -6955,11 +7515,9 @@
                 error(memberLoc, "can only be used with std140, std430, or scalar layout packing", "offset/align", "");
         }
 
-#ifdef NV_EXTENSIONS
         if (memberQualifier.isPerView()) {
             memberWithPerViewQualifier = true;
         }
-#endif
 
         TQualifier newMemberQualification = defaultQualification;
         mergeQualifiers(memberLoc, newMemberQualification, memberQualifier, false);
@@ -6968,6 +7526,7 @@
 
     layoutMemberLocationArrayCheck(loc, memberWithLocation, arraySizes);
 
+#ifndef GLSLANG_WEB
     // Ensure that the block has an XfbBuffer assigned. This is needed
     // because if the block has a XfbOffset assigned, then it is
     // assumed that it has implicitly assigned the current global
@@ -6977,6 +7536,7 @@
        if (!currentBlockQualifier.hasXfbBuffer() && currentBlockQualifier.hasXfbOffset())
           currentBlockQualifier.layoutXfbBuffer = globalOutputDefaults.layoutXfbBuffer;
     }
+#endif
 
     // Process the members
     fixBlockLocations(loc, currentBlockQualifier, typeList, memberWithLocation, memberWithoutLocation);
@@ -6985,10 +7545,10 @@
     for (unsigned int member = 0; member < typeList.size(); ++member)
         layoutTypeCheck(typeList[member].loc, *typeList[member].type);
 
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
     if (memberWithPerViewQualifier) {
         for (unsigned int member = 0; member < typeList.size(); ++member) {
-            resizeMeshViewDimension(typeList[member].loc, *typeList[member].type);
+            checkAndResizeMeshViewDim(typeList[member].loc, *typeList[member].type, /*isBlockMember*/ true);
         }
     }
 #endif
@@ -7004,10 +7564,11 @@
     TType blockType(&typeList, *blockName, currentBlockQualifier);
     if (arraySizes != nullptr)
         blockType.transferArraySizes(arraySizes);
-    else
-        ioArrayCheck(loc, blockType, instanceName ? *instanceName : *blockName);
 
-    if (currentBlockQualifier.layoutBufferReference) {
+#ifndef GLSLANG_WEB
+    if (arraySizes == nullptr)
+        ioArrayCheck(loc, blockType, instanceName ? *instanceName : *blockName);
+    if (currentBlockQualifier.hasBufferReference()) {
 
         if (currentBlockQualifier.storage != EvqBuffer)
             error(loc, "can only be used with buffer", "buffer_reference", "");
@@ -7019,7 +7580,7 @@
         TVariable* blockNameVar = new TVariable(blockName, blockNameType, true);
         if (! symbolTable.insert(*blockNameVar)) {
             TSymbol* existingName = symbolTable.find(*blockName);
-            if (existingName->getType().getBasicType() == EbtReference &&
+            if (existingName->getType().isReference() &&
                 existingName->getType().getReferentType()->getStruct() &&
                 existingName->getType().getReferentType()->getStruct()->size() == 0 &&
                 existingName->getType().getQualifier().storage == blockType.getQualifier().storage) {
@@ -7031,7 +7592,9 @@
         if (!instanceName) {
             return;
         }
-    } else {
+    } else
+#endif
+    {
         //
         // Don't make a user-defined type out of block name; that will cause an error
         // if the same block name gets reused in a different interface.
@@ -7079,12 +7642,14 @@
     // Check for general layout qualifier errors
     layoutObjectCheck(loc, variable);
 
+#ifndef GLSLANG_WEB
     // fix up
     if (isIoResizeArray(blockType)) {
         ioArraySymbolResizeList.push_back(&variable);
-        checkIoArraysConsistency(loc, true, blockType.getQualifier().isPerPrimitive());
+        checkIoArraysConsistency(loc, true);
     } else
         fixIoArraySize(loc, variable.getWritableType());
+#endif
 
     // Save it in the AST for linker use.
     trackLinkage(variable);
@@ -7094,11 +7659,12 @@
 // with a particular stage.
 void TParseContext::blockStageIoCheck(const TSourceLoc& loc, const TQualifier& qualifier)
 {
+    const char *extsrt[2] = { E_GL_NV_ray_tracing, E_GL_EXT_ray_tracing };
     switch (qualifier.storage) {
     case EvqUniform:
         profileRequires(loc, EEsProfile, 300, nullptr, "uniform block");
-        profileRequires(loc, ENoProfile, 140, nullptr, "uniform block");
-        if (currentBlockQualifier.layoutPacking == ElpStd430 && ! currentBlockQualifier.layoutPushConstant)
+        profileRequires(loc, ENoProfile, 140, E_GL_ARB_uniform_buffer_object, "uniform block");
+        if (currentBlockQualifier.layoutPacking == ElpStd430 && ! currentBlockQualifier.isPushConstant())
             requireExtensions(loc, 1, &E_GL_EXT_scalar_block_layout, "std430 requires the buffer storage qualifier");
         break;
     case EvqBuffer:
@@ -7110,63 +7676,50 @@
         profileRequires(loc, ~EEsProfile, 150, E_GL_ARB_separate_shader_objects, "input block");
         // It is a compile-time error to have an input block in a vertex shader or an output block in a fragment shader
         // "Compute shaders do not permit user-defined input variables..."
-        requireStage(loc, (EShLanguageMask)(EShLangTessControlMask|EShLangTessEvaluationMask|EShLangGeometryMask|EShLangFragmentMask
-#ifdef NV_EXTENSIONS
-                                            |EShLangMeshNVMask
-#endif
-                                           ), "input block");
+        requireStage(loc, (EShLanguageMask)(EShLangTessControlMask|EShLangTessEvaluationMask|EShLangGeometryMask|
+            EShLangFragmentMask|EShLangMeshNVMask), "input block");
         if (language == EShLangFragment) {
             profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "fragment input block");
-        }
-#ifdef NV_EXTENSIONS
-        else if (language == EShLangMeshNV && ! qualifier.isTaskMemory()) {
+        } else if (language == EShLangMeshNV && ! qualifier.isTaskMemory()) {
             error(loc, "input blocks cannot be used in a mesh shader", "out", "");
         }
-#endif
         break;
     case EvqVaryingOut:
         profileRequires(loc, ~EEsProfile, 150, E_GL_ARB_separate_shader_objects, "output block");
-        requireStage(loc, (EShLanguageMask)(EShLangVertexMask|EShLangTessControlMask|EShLangTessEvaluationMask|EShLangGeometryMask
-#ifdef NV_EXTENSIONS
-                                            |EShLangMeshNVMask|EShLangTaskNVMask
-#endif
-                                           ), "output block");
+        requireStage(loc, (EShLanguageMask)(EShLangVertexMask|EShLangTessControlMask|EShLangTessEvaluationMask|
+            EShLangGeometryMask|EShLangMeshNVMask|EShLangTaskNVMask), "output block");
         // ES 310 can have a block before shader_io is turned on, so skip this test for built-ins
         if (language == EShLangVertex && ! parsingBuiltins) {
             profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "vertex output block");
-        }
-#ifdef NV_EXTENSIONS
-        else if (language == EShLangMeshNV && qualifier.isTaskMemory()) {
+        } else if (language == EShLangMeshNV && qualifier.isTaskMemory()) {
             error(loc, "can only use on input blocks in mesh shader", "taskNV", "");
-        }
-        else if (language == EShLangTaskNV && ! qualifier.isTaskMemory()) {
+        } else if (language == EShLangTaskNV && ! qualifier.isTaskMemory()) {
             error(loc, "output blocks cannot be used in a task shader", "out", "");
         }
-#endif
         break;
-#ifdef NV_EXTENSIONS
-    case EvqPayloadNV:
-        profileRequires(loc, ~EEsProfile, 460, E_GL_NV_ray_tracing, "rayPayloadNV block");
-        requireStage(loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangAnyHitNVMask | EShLangClosestHitNVMask | EShLangMissNVMask),
+#ifndef GLSLANG_WEB
+    case EvqPayload:
+        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "rayPayloadNV block");
+        requireStage(loc, (EShLanguageMask)(EShLangRayGenMask | EShLangAnyHitMask | EShLangClosestHitMask | EShLangMissMask),
             "rayPayloadNV block");
         break;
-    case EvqPayloadInNV:
-        profileRequires(loc, ~EEsProfile, 460, E_GL_NV_ray_tracing, "rayPayloadInNV block");
-        requireStage(loc, (EShLanguageMask)(EShLangAnyHitNVMask | EShLangClosestHitNVMask | EShLangMissNVMask),
+    case EvqPayloadIn:
+        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "rayPayloadInNV block");
+        requireStage(loc, (EShLanguageMask)(EShLangAnyHitMask | EShLangClosestHitMask | EShLangMissMask),
             "rayPayloadInNV block");
         break;
-    case EvqHitAttrNV:
-        profileRequires(loc, ~EEsProfile, 460, E_GL_NV_ray_tracing, "hitAttributeNV block");
-        requireStage(loc, (EShLanguageMask)(EShLangIntersectNVMask | EShLangAnyHitNVMask | EShLangClosestHitNVMask), "hitAttributeNV block");
+    case EvqHitAttr:
+        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "hitAttributeNV block");
+        requireStage(loc, (EShLanguageMask)(EShLangIntersectMask | EShLangAnyHitMask | EShLangClosestHitMask), "hitAttributeNV block");
         break;
-    case EvqCallableDataNV:
-        profileRequires(loc, ~EEsProfile, 460, E_GL_NV_ray_tracing, "callableDataNV block");
-        requireStage(loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangClosestHitNVMask | EShLangMissNVMask | EShLangCallableNVMask),
+    case EvqCallableData:
+        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "callableDataNV block");
+        requireStage(loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask),
             "callableDataNV block");
         break;
-    case EvqCallableDataInNV:
-        profileRequires(loc, ~EEsProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV block");
-        requireStage(loc, (EShLanguageMask)(EShLangCallableNVMask), "callableDataInNV block");
+    case EvqCallableDataIn:
+        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "callableDataInNV block");
+        requireStage(loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV block");
         break;
 #endif
     default:
@@ -7199,18 +7752,16 @@
         error(loc, "cannot use interpolation qualifiers on an interface block", "flat/smooth/noperspective", "");
     if (qualifier.centroid)
         error(loc, "cannot use centroid qualifier on an interface block", "centroid", "");
-    if (qualifier.sample)
+    if (qualifier.isSample())
         error(loc, "cannot use sample qualifier on an interface block", "sample", "");
     if (qualifier.invariant)
         error(loc, "cannot use invariant qualifier on an interface block", "invariant", "");
-    if (qualifier.layoutPushConstant)
+    if (qualifier.isPushConstant())
         intermediate.addPushConstantCount();
-#ifdef NV_EXTENSIONS
-    if (qualifier.layoutShaderRecordNV)
-        intermediate.addShaderRecordNVCount();
-    if (qualifier.perTaskNV)
+    if (qualifier.isShaderRecord())
+        intermediate.addShaderRecordCount();
+    if (qualifier.isTaskMemory())
         intermediate.addTaskNVCount();
-#endif
 }
 
 //
@@ -7259,6 +7810,7 @@
 
 void TParseContext::fixXfbOffsets(TQualifier& qualifier, TTypeList& typeList)
 {
+#ifndef GLSLANG_WEB
     // "If a block is qualified with xfb_offset, all its
     // members are assigned transform feedback buffer offsets. If a block is not qualified with xfb_offset, any
     // members of that block not qualified with an xfb_offset will not be assigned transform feedback buffer
@@ -7270,13 +7822,19 @@
     int nextOffset = qualifier.layoutXfbOffset;
     for (unsigned int member = 0; member < typeList.size(); ++member) {
         TQualifier& memberQualifier = typeList[member].type->getQualifier();
-        bool containsDouble = false;
-        int memberSize = intermediate.computeTypeXfbSize(*typeList[member].type, containsDouble);
+        bool contains64BitType = false;
+        bool contains32BitType = false;
+        bool contains16BitType = false;
+        int memberSize = intermediate.computeTypeXfbSize(*typeList[member].type, contains64BitType, contains32BitType, contains16BitType);
         // see if we need to auto-assign an offset to this member
         if (! memberQualifier.hasXfbOffset()) {
-            // "if applied to an aggregate containing a double, the offset must also be a multiple of 8"
-            if (containsDouble)
+            // "if applied to an aggregate containing a double or 64-bit integer, the offset must also be a multiple of 8"
+            if (contains64BitType)
                 RoundToPow2(nextOffset, 8);
+            else if (contains32BitType)
+                RoundToPow2(nextOffset, 4);
+            else if (contains16BitType)
+                RoundToPow2(nextOffset, 2);
             memberQualifier.layoutXfbOffset = nextOffset;
         } else
             nextOffset = memberQualifier.layoutXfbOffset;
@@ -7286,6 +7844,7 @@
     // The above gave all block members an offset, so we can take it off the block now,
     // which will avoid double counting the offset usage.
     qualifier.layoutXfbOffset = TQualifier::layoutXfbOffsetEnd;
+#endif
 }
 
 // Calculate and save the offset of each block member, using the recursively
@@ -7362,7 +7921,7 @@
     // a qualifier to an existing symbol. Detect this and create the block reference
     // type with an empty type list, which will be filled in later in
     // TParseContext::declareBlock.
-    if (!symbol && qualifier.layoutBufferReference) {
+    if (!symbol && qualifier.hasBufferReference()) {
         TTypeList typeList;
         TType blockType(&typeList, identifier, qualifier);;
         TType blockNameType(EbtReference, blockType, identifier);
@@ -7402,10 +7961,10 @@
             error(loc, "cannot change qualification after use", "invariant", "");
         symbol->getWritableType().getQualifier().invariant = true;
         invariantCheck(loc, symbol->getType().getQualifier());
-    } else if (qualifier.noContraction) {
+    } else if (qualifier.isNoContraction()) {
         if (intermediate.inIoAccessed(identifier))
             error(loc, "cannot change qualification after use", "precise", "");
-        symbol->getWritableType().getQualifier().noContraction = true;
+        symbol->getWritableType().getQualifier().setNoContraction();
     } else if (qualifier.specConstant) {
         symbol->getWritableType().getQualifier().makeSpecConstant();
         if (qualifier.hasSpecConstantId())
@@ -7428,7 +7987,7 @@
 
     bool pipeOut = qualifier.isPipeOutput();
     bool pipeIn = qualifier.isPipeInput();
-    if (version >= 300 || (profile != EEsProfile && version >= 420)) {
+    if (version >= 300 || (!isEsProfile() && version >= 420)) {
         if (! pipeOut)
             error(loc, "can only apply to an output", "invariant", "");
     } else {
@@ -7443,12 +8002,9 @@
 //
 void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, const TPublicType& publicType)
 {
+#ifndef GLSLANG_WEB
     if (publicType.shaderQualifiers.vertices != TQualifier::layoutNotSet) {
-#ifdef NV_EXTENSIONS
         assert(language == EShLangTessControl || language == EShLangGeometry || language == EShLangMeshNV);
-#else
-        assert(language == EShLangTessControl || language == EShLangGeometry);
-#endif
         const char* id = (language == EShLangTessControl) ? "vertices" : "max_vertices";
 
         if (publicType.qualifier.storage != EvqVaryingOut)
@@ -7459,7 +8015,6 @@
         if (language == EShLangTessControl)
             checkIoArraysConsistency(loc);
     }
-#ifdef NV_EXTENSIONS
     if (publicType.shaderQualifiers.primitives != TQualifier::layoutNotSet) {
         assert(language == EShLangMeshNV);
         const char* id = "max_primitives";
@@ -7469,7 +8024,6 @@
         if (! intermediate.setPrimitives(publicType.shaderQualifiers.primitives))
             error(loc, "cannot change previously set layout value", id, "");
     }
-#endif
     if (publicType.shaderQualifiers.invocations != TQualifier::layoutNotSet) {
         if (publicType.qualifier.storage != EvqVaryingIn)
             error(loc, "can only apply to 'in'", "invocations", "");
@@ -7486,12 +8040,10 @@
             case ElgTrianglesAdjacency:
             case ElgQuads:
             case ElgIsolines:
-#ifdef NV_EXTENSIONS
                 if (language == EShLangMeshNV) {
                     error(loc, "cannot apply to input", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
                     break;
                 }
-#endif
                 if (intermediate.setInputPrimitive(publicType.shaderQualifiers.geometry)) {
                     if (language == EShLangGeometry)
                         checkIoArraysConsistency(loc);
@@ -7503,14 +8055,12 @@
             }
         } else if (publicType.qualifier.storage == EvqVaryingOut) {
             switch (publicType.shaderQualifiers.geometry) {
-#ifdef NV_EXTENSIONS
             case ElgLines:
             case ElgTriangles:
                 if (language != EShLangMeshNV) {
                     error(loc, "cannot apply to 'out'", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
                     break;
                 }
-#endif
                 // Fall through
             case ElgPoints:
             case ElgLineStrip:
@@ -7544,8 +8094,9 @@
         else
             error(loc, "can only apply to 'in'", "point_mode", "");
     }
+#endif
     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", "");
@@ -7561,7 +8112,7 @@
                         if (intermediate.getLocalSize(i) > (unsigned int)max)
                             error(loc, "too large; see gl_MaxComputeWorkGroupSize", "local_size", "");
                     }
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
                     else if (language == EShLangMeshNV) {
                         switch (i) {
                         case 0: max = resources.maxMeshWorkGroupSizeX_NV; break;
@@ -7571,8 +8122,7 @@
                         }
                         if (intermediate.getLocalSize(i) > (unsigned int)max)
                             error(loc, "too large; see gl_MaxMeshWorkGroupSizeNV", "local_size", "");
-                    }
-                    else if (language == EShLangTaskNV) {
+                    } else if (language == EShLangTaskNV) {
                         switch (i) {
                         case 0: max = resources.maxTaskWorkGroupSizeX_NV; break;
                         case 1: max = resources.maxTaskWorkGroupSizeY_NV; break;
@@ -7607,6 +8157,8 @@
                 workGroupSize->getWritableType().getQualifier().specConstant = true;
         }
     }
+
+#ifndef GLSLANG_WEB
     if (publicType.shaderQualifiers.earlyFragmentTests) {
         if (publicType.qualifier.storage == EvqVaryingIn)
             intermediate.setEarlyFragmentTests();
@@ -7619,12 +8171,19 @@
         else
             error(loc, "can only apply to 'in'", "post_coverage_coverage", "");
     }
-    if (publicType.shaderQualifiers.blendEquation) {
+    if (publicType.shaderQualifiers.hasBlendEquation()) {
         if (publicType.qualifier.storage != EvqVaryingOut)
             error(loc, "can only apply to 'out'", "blend equation", "");
     }
+    if (publicType.shaderQualifiers.interlockOrdering) {
+        if (publicType.qualifier.storage == EvqVaryingIn) {
+            if (!intermediate.setInterlockOrdering(publicType.shaderQualifiers.interlockOrdering))
+                error(loc, "cannot change previously set fragment shader interlock ordering", TQualifier::getInterlockOrderingString(publicType.shaderQualifiers.interlockOrdering), "");
+        }
+        else
+            error(loc, "can only apply to 'in'", TQualifier::getInterlockOrderingString(publicType.shaderQualifiers.interlockOrdering), "");
+    }
 
-#ifdef NV_EXTENSIONS
     if (publicType.shaderQualifiers.layoutDerivativeGroupQuads &&
         publicType.shaderQualifiers.layoutDerivativeGroupLinear) {
         error(loc, "cannot be both specified", "derivative_group_quadsNV and derivative_group_linearNV", "");
@@ -7653,6 +8212,14 @@
         else
             error(loc, "can only apply to 'in'", "derivative_group_linearNV", "");
     }
+    // Check mesh out array sizes, once all the necessary out qualifiers are defined.
+    if ((language == EShLangMeshNV) &&
+        (intermediate.getVertices() != TQualifier::layoutNotSet) &&
+        (intermediate.getPrimitives() != TQualifier::layoutNotSet) &&
+        (intermediate.getOutputPrimitive() != ElgNone))
+    {
+        checkIoArraysConsistency(loc);
+    }
 #endif 
     const TQualifier& qualifier = publicType.qualifier;
 
@@ -7661,6 +8228,7 @@
         qualifier.isInterpolation() ||
         qualifier.precision != EpqNone)
         error(loc, "cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type)", "qualifier", "");
+
     // "The offset qualifier can only be used on block members of blocks..."
     // "The align qualifier can only be used on blocks or block members..."
     if (qualifier.hasOffset() ||
@@ -7685,6 +8253,7 @@
     case EvqVaryingIn:
         break;
     case EvqVaryingOut:
+#ifndef GLSLANG_WEB
         if (qualifier.hasStream())
             globalOutputDefaults.layoutStream = qualifier.layoutStream;
         if (qualifier.hasXfbBuffer())
@@ -7693,6 +8262,7 @@
             if (! intermediate.setXfbBufferStride(globalOutputDefaults.layoutXfbBuffer, qualifier.layoutXfbStride))
                 error(loc, "all stride settings must match for xfb buffer", "xfb_stride", "%d", qualifier.layoutXfbBuffer);
         }
+#endif
         break;
     default:
         error(loc, "default qualifier requires 'uniform', 'buffer', 'in', or 'out' storage qualification", "", "");
@@ -7705,16 +8275,14 @@
         error(loc, "cannot declare a default, use a full declaration", "location/component/index", "");
     if (qualifier.hasXfbOffset())
         error(loc, "cannot declare a default, use a full declaration", "xfb_offset", "");
-    if (qualifier.layoutPushConstant)
+    if (qualifier.isPushConstant())
         error(loc, "cannot declare a default, can only be used on a block", "push_constant", "");
-    if (qualifier.layoutBufferReference)
+    if (qualifier.hasBufferReference())
         error(loc, "cannot declare a default, can only be used on a block", "buffer_reference", "");
     if (qualifier.hasSpecConstantId())
         error(loc, "cannot declare a default, can only be used on a scalar", "constant_id", "");
-#ifdef NV_EXTENSIONS
-    if (qualifier.layoutShaderRecordNV)
+    if (qualifier.isShaderRecord())
         error(loc, "cannot declare a default, can only be used on a block", "shaderRecordNV", "");
-#endif
 }
 
 //
@@ -7781,7 +8349,7 @@
         // "it is an error to have no statement between a label and the end of the switch statement."
         // The specifications were updated to remove this (being ill-defined what a "statement" was),
         // so, this became a warning.  However, 3.0 tests still check for the error.
-        if (profile == EEsProfile && version <= 300 && ! relaxedErrors())
+        if (isEsProfile() && version <= 300 && ! relaxedErrors())
             error(loc, "last case/default label not followed by statements", "switch", "");
         else
             warn(loc, "last case/default label not followed by statements", "switch", "");
@@ -7803,3 +8371,4 @@
 }
 
 } // end namespace glslang
+
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
old mode 100755
new mode 100644
index 768a241..20df640
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -85,6 +85,7 @@
             statementNestingLevel(0), loopNestingLevel(0), structNestingLevel(0), controlFlowNestingLevel(0),
             postEntryPointReturn(false),
             contextPragma(true, false),
+            beginInvocationInterlockCount(0), endInvocationInterlockCount(0),
             parsingBuiltins(parsingBuiltins), scanContext(nullptr), ppContext(nullptr),
             limits(resources.limits),
             globalUniformBlock(nullptr),
@@ -96,6 +97,7 @@
     }
     virtual ~TParseContextBase() { }
 
+#if !defined(GLSLANG_WEB) || defined(GLSLANG_WEB_DEVEL)
     virtual void C_DECL   error(const TSourceLoc&, const char* szReason, const char* szToken,
                                 const char* szExtraInfoFormat, ...);
     virtual void C_DECL    warn(const TSourceLoc&, const char* szReason, const char* szToken,
@@ -104,6 +106,7 @@
                                 const char* szExtraInfoFormat, ...);
     virtual void C_DECL  ppWarn(const TSourceLoc&, const char* szReason, const char* szToken,
                                 const char* szExtraInfoFormat, ...);
+#endif
 
     virtual void setLimits(const TBuiltInResource&) = 0;
 
@@ -149,8 +152,10 @@
             extensionCallback(line, extension, behavior);
     }
 
+#ifdef ENABLE_HLSL
     // Manage the global uniform block (default uniforms in GLSL, $Global in HLSL)
     virtual void growGlobalUniformBlock(const TSourceLoc&, TType&, const TString& memberName, TTypeList* typeList = nullptr);
+#endif
 
     // Potentially rename shader entry point function
     void renameShaderFunction(TString*& name) const
@@ -182,6 +187,8 @@
     // the statementNestingLevel the current switch statement is at, which must match the level of its case statements
     TList<int> switchLevel;
     struct TPragma contextPragma;
+    int beginInvocationInterlockCount;
+    int endInvocationInterlockCount;
 
 protected:
     TParseContextBase(TParseContextBase&);
@@ -276,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;
@@ -294,19 +301,21 @@
     TIntermTyped* handleBracketDereference(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index);
     void handleIndexLimits(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index);
 
+#ifndef GLSLANG_WEB
     void makeEditable(TSymbol*&) override;
+    void ioArrayCheck(const TSourceLoc&, const TType&, const TString& identifier);
+#endif
     bool isIoResizeArray(const TType&) const;
     void fixIoArraySize(const TSourceLoc&, TType&);
-    void ioArrayCheck(const TSourceLoc&, const TType&, const TString& identifier);
     void handleIoResizeArrayAccess(const TSourceLoc&, TIntermTyped* base);
-    void checkIoArraysConsistency(const TSourceLoc&, bool tailOnly = false, bool isPerPrimitive = false);
-    int getIoArrayImplicitSize(bool isPerPrimitive = false) const;
+    void checkIoArraysConsistency(const TSourceLoc&, bool tailOnly = false);
+    int getIoArrayImplicitSize(const TQualifier&, TString* featureString = nullptr) const;
     void checkIoArrayConsistency(const TSourceLoc&, int requiredSize, const char* feature, TType&, const TString&);
 
     TIntermTyped* handleBinaryMath(const TSourceLoc&, const char* str, TOperator op, TIntermTyped* left, TIntermTyped* right);
     TIntermTyped* handleUnaryMath(const TSourceLoc&, const char* str, TOperator op, TIntermTyped* childNode);
     TIntermTyped* handleDotDereference(const TSourceLoc&, TIntermTyped* base, const TString& field);
-    void blockMemberExtensionCheck(const TSourceLoc&, const TIntermTyped* base, const TString& field);
+    void blockMemberExtensionCheck(const TSourceLoc&, const TIntermTyped* base, int member, const TString& memberName);
     TFunction* handleFunctionDeclarator(const TSourceLoc&, TFunction& function, bool prototype);
     TIntermAggregate* handleFunctionDefinition(const TSourceLoc&, TFunction&);
     TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermNode*);
@@ -337,7 +346,7 @@
     void globalCheck(const TSourceLoc&, const char* token);
     bool constructorError(const TSourceLoc&, TIntermNode*, TFunction&, TOperator, TType&);
     bool constructorTextureSamplerError(const TSourceLoc&, const TFunction&);
-    void arraySizeCheck(const TSourceLoc&, TIntermTyped* expr, TArraySize&);
+    void arraySizeCheck(const TSourceLoc&, TIntermTyped* expr, TArraySize&, const char *sizeType);
     bool arrayQualifierError(const TSourceLoc&, const TQualifier&);
     bool arrayError(const TSourceLoc&, const TType&);
     void arraySizeRequiredCheck(const TSourceLoc&, const TArraySizes&);
@@ -349,7 +358,7 @@
     void boolCheck(const TSourceLoc&, const TPublicType&);
     void samplerCheck(const TSourceLoc&, const TType&, const TString& identifier, TIntermTyped* initializer);
     void atomicUintCheck(const TSourceLoc&, const TType&, const TString& identifier);
-    void accStructNVCheck(const TSourceLoc & loc, const TType & type, const TString & identifier);
+    void accStructCheck(const TSourceLoc & loc, const TType & type, const TString & identifier);
     void transparentOpaqueCheck(const TSourceLoc&, const TType&, const TString& identifier);
     void memberQualifierCheck(glslang::TPublicType&);
     void globalQualifierFixCheck(const TSourceLoc&, TQualifier&);
@@ -370,6 +379,7 @@
     void nestedStructCheck(const TSourceLoc&);
     void arrayObjectCheck(const TSourceLoc&, const TType&, const char* op);
     void opaqueCheck(const TSourceLoc&, const TType&, const char* op);
+    void referenceCheck(const TSourceLoc&, const TType&, const char* op);
     void storage16BitAssignmentCheck(const TSourceLoc&, const TType&, const char* op);
     void specializationCheck(const TSourceLoc&, const TType&, const char* op);
     void structTypeCheck(const TSourceLoc&, TPublicType&);
@@ -400,6 +410,7 @@
     TIntermTyped* addConstructor(const TSourceLoc&, TIntermNode*, const TType&);
     TIntermTyped* constructAggregate(TIntermNode*, const TType&, int, const TSourceLoc&);
     TIntermTyped* constructBuiltIn(const TType&, TOperator, TIntermTyped*, const TSourceLoc&, bool subset);
+    void inheritMemoryQualifiers(const TQualifier& from, TQualifier& to);
     void declareBlock(const TSourceLoc&, TTypeList& typeList, const TString* instanceName = 0, TArraySizes* arraySizes = 0);
     void blockStageIoCheck(const TSourceLoc&, const TQualifier&);
     void blockQualifierCheck(const TSourceLoc&, const TQualifier&, bool instanceName);
@@ -413,6 +424,7 @@
     void wrapupSwitchSubsequence(TIntermAggregate* statements, TIntermNode* branchNode);
     TIntermNode* addSwitch(const TSourceLoc&, TIntermTyped* expression, TIntermAggregate* body);
 
+#ifndef GLSLANG_WEB
     TAttributeType attributeFromName(const TString& name) const;
     TAttributes* makeAttributes(const TString& identifier) const;
     TAttributes* makeAttributes(const TString& identifier, TIntermNode* node) const;
@@ -421,11 +433,11 @@
     // Determine selection control from attributes
     void handleSelectionAttributes(const TAttributes& attributes, TIntermNode*);
     void handleSwitchAttributes(const TAttributes& attributes, TIntermNode*);
-
     // Determine loop control from attributes
     void handleLoopAttributes(const TAttributes& attributes, TIntermNode*);
+#endif
 
-    void resizeMeshViewDimension(const TSourceLoc&, TType&);
+    void checkAndResizeMeshViewDim(const TSourceLoc&, TType&, bool isBlockMember);
 
 protected:
     void nonInitConstCheck(const TSourceLoc&, TString& identifier, TType& type);
@@ -437,7 +449,9 @@
     bool isRuntimeLength(const TIntermTyped&) const;
     TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable);
     TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer);
+#ifndef GLSLANG_WEB
     void finish() override;
+#endif
 
 public:
     //
@@ -463,10 +477,11 @@
     TQualifier globalUniformDefaults;
     TQualifier globalInputDefaults;
     TQualifier globalOutputDefaults;
-    int* atomicUintOffsets;       // to become an array of the right size to hold an offset per binding point
     TString currentCaller;        // name of last function body entered (not valid when at global scope)
-    TIdSetType inductiveLoopIds;
+#ifndef GLSLANG_WEB
+    int* atomicUintOffsets;       // to become an array of the right size to hold an offset per binding point
     bool anyIndexLimits;
+    TIdSetType inductiveLoopIds;
     TVector<TIntermTyped*> needsIndexLimitationChecking;
 
     //
@@ -502,6 +517,7 @@
     //    array-sizing declarations
     //
     TVector<TSymbol*> ioArraySymbolResizeList;
+#endif
 };
 
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp
index 2ec26c6..656daaf 100644
--- a/glslang/MachineIndependent/Scan.cpp
+++ b/glslang/MachineIndependent/Scan.cpp
@@ -2,6 +2,8 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2013 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2020 Google, Inc.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -187,17 +189,15 @@
         if (lookingInMiddle) {
             notFirstToken = true;
             // make forward progress by finishing off the current line plus extra new lines
-            if (peek() == '\n' || peek() == '\r') {
-                while (peek() == '\n' || peek() == '\r')
-                    get();
-            } else
+            if (peek() != '\n' && peek() != '\r') {
                 do {
                     c = get();
                 } while (c != EndOfInput && c != '\n' && c != '\r');
-                while (peek() == '\n' || peek() == '\r')
-                    get();
-                if (peek() == EndOfInput)
-                    return true;
+            }
+            while (peek() == '\n' || peek() == '\r')
+                get();
+            if (peek() == EndOfInput)
+                return true;
         }
         lookingInMiddle = true;
 
@@ -324,7 +324,9 @@
 // A single global usable by all threads, by all versions, by all languages.
 // After a single process-level initialization, this is read only and thread safe
 std::unordered_map<const char*, int, str_hash, str_eq>* KeywordMap = nullptr;
+#ifndef GLSLANG_WEB
 std::unordered_set<const char*, str_hash, str_eq>* ReservedSet = nullptr;
+#endif
 
 };
 
@@ -341,9 +343,15 @@
 
     (*KeywordMap)["const"] =                   CONST;
     (*KeywordMap)["uniform"] =                 UNIFORM;
-    (*KeywordMap)["nonuniformEXT"] =           NONUNIFORM;
+    (*KeywordMap)["buffer"] =                  BUFFER;
     (*KeywordMap)["in"] =                      IN;
     (*KeywordMap)["out"] =                     OUT;
+    (*KeywordMap)["smooth"] =                  SMOOTH;
+    (*KeywordMap)["flat"] =                    FLAT;
+    (*KeywordMap)["centroid"] =                CENTROID;
+    (*KeywordMap)["invariant"] =               INVARIANT;
+    (*KeywordMap)["packed"] =                  PACKED;
+    (*KeywordMap)["resource"] =                RESOURCE;
     (*KeywordMap)["inout"] =                   INOUT;
     (*KeywordMap)["struct"] =                  STRUCT;
     (*KeywordMap)["break"] =                   BREAK;
@@ -376,28 +384,12 @@
     (*KeywordMap)["mat4"] =                    MAT4;
     (*KeywordMap)["true"] =                    BOOLCONSTANT;
     (*KeywordMap)["false"] =                   BOOLCONSTANT;
-    (*KeywordMap)["attribute"] =               ATTRIBUTE;
-    (*KeywordMap)["varying"] =                 VARYING;
-    (*KeywordMap)["buffer"] =                  BUFFER;
-    (*KeywordMap)["coherent"] =                COHERENT;
-    (*KeywordMap)["devicecoherent"] =          DEVICECOHERENT;
-    (*KeywordMap)["queuefamilycoherent"] =     QUEUEFAMILYCOHERENT;
-    (*KeywordMap)["workgroupcoherent"] =       WORKGROUPCOHERENT;
-    (*KeywordMap)["subgroupcoherent"] =        SUBGROUPCOHERENT;
-    (*KeywordMap)["nonprivate"] =              NONPRIVATE;
-    (*KeywordMap)["restrict"] =                RESTRICT;
-    (*KeywordMap)["readonly"] =                READONLY;
-    (*KeywordMap)["writeonly"] =               WRITEONLY;
-    (*KeywordMap)["atomic_uint"] =             ATOMIC_UINT;
-    (*KeywordMap)["volatile"] =                VOLATILE;
     (*KeywordMap)["layout"] =                  LAYOUT;
     (*KeywordMap)["shared"] =                  SHARED;
-    (*KeywordMap)["patch"] =                   PATCH;
-    (*KeywordMap)["sample"] =                  SAMPLE;
-    (*KeywordMap)["subroutine"] =              SUBROUTINE;
     (*KeywordMap)["highp"] =                   HIGH_PRECISION;
     (*KeywordMap)["mediump"] =                 MEDIUM_PRECISION;
     (*KeywordMap)["lowp"] =                    LOW_PRECISION;
+    (*KeywordMap)["superp"] =                  SUPERP;
     (*KeywordMap)["precision"] =               PRECISION;
     (*KeywordMap)["mat2x2"] =                  MAT2X2;
     (*KeywordMap)["mat2x3"] =                  MAT2X3;
@@ -408,6 +400,32 @@
     (*KeywordMap)["mat4x2"] =                  MAT4X2;
     (*KeywordMap)["mat4x3"] =                  MAT4X3;
     (*KeywordMap)["mat4x4"] =                  MAT4X4;
+    (*KeywordMap)["uint"] =                    UINT;
+    (*KeywordMap)["uvec2"] =                   UVEC2;
+    (*KeywordMap)["uvec3"] =                   UVEC3;
+    (*KeywordMap)["uvec4"] =                   UVEC4;
+
+#ifndef GLSLANG_WEB
+    (*KeywordMap)["nonuniformEXT"] =           NONUNIFORM;
+    (*KeywordMap)["demote"] =                  DEMOTE;
+    (*KeywordMap)["attribute"] =               ATTRIBUTE;
+    (*KeywordMap)["varying"] =                 VARYING;
+    (*KeywordMap)["noperspective"] =           NOPERSPECTIVE;
+    (*KeywordMap)["coherent"] =                COHERENT;
+    (*KeywordMap)["devicecoherent"] =          DEVICECOHERENT;
+    (*KeywordMap)["queuefamilycoherent"] =     QUEUEFAMILYCOHERENT;
+    (*KeywordMap)["workgroupcoherent"] =       WORKGROUPCOHERENT;
+    (*KeywordMap)["subgroupcoherent"] =        SUBGROUPCOHERENT;
+    (*KeywordMap)["shadercallcoherent"] =      SHADERCALLCOHERENT;
+    (*KeywordMap)["nonprivate"] =              NONPRIVATE;
+    (*KeywordMap)["restrict"] =                RESTRICT;
+    (*KeywordMap)["readonly"] =                READONLY;
+    (*KeywordMap)["writeonly"] =               WRITEONLY;
+    (*KeywordMap)["atomic_uint"] =             ATOMIC_UINT;
+    (*KeywordMap)["volatile"] =                VOLATILE;
+    (*KeywordMap)["patch"] =                   PATCH;
+    (*KeywordMap)["sample"] =                  SAMPLE;
+    (*KeywordMap)["subroutine"] =              SUBROUTINE;
     (*KeywordMap)["dmat2"] =                   DMAT2;
     (*KeywordMap)["dmat3"] =                   DMAT3;
     (*KeywordMap)["dmat4"] =                   DMAT4;
@@ -457,11 +475,6 @@
     (*KeywordMap)["dvec2"] =                   DVEC2;
     (*KeywordMap)["dvec3"] =                   DVEC3;
     (*KeywordMap)["dvec4"] =                   DVEC4;
-    (*KeywordMap)["uint"] =                    UINT;
-    (*KeywordMap)["uvec2"] =                   UVEC2;
-    (*KeywordMap)["uvec3"] =                   UVEC3;
-    (*KeywordMap)["uvec4"] =                   UVEC4;
-
     (*KeywordMap)["int64_t"] =                 INT64_T;
     (*KeywordMap)["uint64_t"] =                UINT64_T;
     (*KeywordMap)["i64vec2"] =                 I64VEC2;
@@ -548,19 +561,10 @@
     (*KeywordMap)["f64mat4x2"] =               F64MAT4X2;
     (*KeywordMap)["f64mat4x3"] =               F64MAT4X3;
     (*KeywordMap)["f64mat4x4"] =               F64MAT4X4;
+#endif
 
     (*KeywordMap)["sampler2D"] =               SAMPLER2D;
     (*KeywordMap)["samplerCube"] =             SAMPLERCUBE;
-    (*KeywordMap)["samplerCubeArray"] =        SAMPLERCUBEARRAY;
-    (*KeywordMap)["samplerCubeArrayShadow"] =  SAMPLERCUBEARRAYSHADOW;
-    (*KeywordMap)["isamplerCubeArray"] =       ISAMPLERCUBEARRAY;
-    (*KeywordMap)["usamplerCubeArray"] =       USAMPLERCUBEARRAY;
-    (*KeywordMap)["sampler1DArrayShadow"] =    SAMPLER1DARRAYSHADOW;
-    (*KeywordMap)["isampler1DArray"] =         ISAMPLER1DARRAY;
-    (*KeywordMap)["usampler1D"] =              USAMPLER1D;
-    (*KeywordMap)["isampler1D"] =              ISAMPLER1D;
-    (*KeywordMap)["usampler1DArray"] =         USAMPLER1DARRAY;
-    (*KeywordMap)["samplerBuffer"] =           SAMPLERBUFFER;
     (*KeywordMap)["samplerCubeShadow"] =       SAMPLERCUBESHADOW;
     (*KeywordMap)["sampler2DArray"] =          SAMPLER2DARRAY;
     (*KeywordMap)["sampler2DArrayShadow"] =    SAMPLER2DARRAYSHADOW;
@@ -572,6 +576,39 @@
     (*KeywordMap)["usampler3D"] =              USAMPLER3D;
     (*KeywordMap)["usamplerCube"] =            USAMPLERCUBE;
     (*KeywordMap)["usampler2DArray"] =         USAMPLER2DARRAY;
+    (*KeywordMap)["sampler3D"] =               SAMPLER3D;
+    (*KeywordMap)["sampler2DShadow"] =         SAMPLER2DSHADOW;
+
+    (*KeywordMap)["texture2D"] =               TEXTURE2D;
+    (*KeywordMap)["textureCube"] =             TEXTURECUBE;
+    (*KeywordMap)["texture2DArray"] =          TEXTURE2DARRAY;
+    (*KeywordMap)["itexture2D"] =              ITEXTURE2D;
+    (*KeywordMap)["itexture3D"] =              ITEXTURE3D;
+    (*KeywordMap)["itextureCube"] =            ITEXTURECUBE;
+    (*KeywordMap)["itexture2DArray"] =         ITEXTURE2DARRAY;
+    (*KeywordMap)["utexture2D"] =              UTEXTURE2D;
+    (*KeywordMap)["utexture3D"] =              UTEXTURE3D;
+    (*KeywordMap)["utextureCube"] =            UTEXTURECUBE;
+    (*KeywordMap)["utexture2DArray"] =         UTEXTURE2DARRAY;
+    (*KeywordMap)["texture3D"] =               TEXTURE3D;
+
+    (*KeywordMap)["sampler"] =                 SAMPLER;
+    (*KeywordMap)["samplerShadow"] =           SAMPLERSHADOW;
+
+#ifndef GLSLANG_WEB
+    (*KeywordMap)["textureCubeArray"] =        TEXTURECUBEARRAY;
+    (*KeywordMap)["itextureCubeArray"] =       ITEXTURECUBEARRAY;
+    (*KeywordMap)["utextureCubeArray"] =       UTEXTURECUBEARRAY;
+    (*KeywordMap)["samplerCubeArray"] =        SAMPLERCUBEARRAY;
+    (*KeywordMap)["samplerCubeArrayShadow"] =  SAMPLERCUBEARRAYSHADOW;
+    (*KeywordMap)["isamplerCubeArray"] =       ISAMPLERCUBEARRAY;
+    (*KeywordMap)["usamplerCubeArray"] =       USAMPLERCUBEARRAY;
+    (*KeywordMap)["sampler1DArrayShadow"] =    SAMPLER1DARRAYSHADOW;
+    (*KeywordMap)["isampler1DArray"] =         ISAMPLER1DARRAY;
+    (*KeywordMap)["usampler1D"] =              USAMPLER1D;
+    (*KeywordMap)["isampler1D"] =              ISAMPLER1D;
+    (*KeywordMap)["usampler1DArray"] =         USAMPLER1DARRAY;
+    (*KeywordMap)["samplerBuffer"] =           SAMPLERBUFFER;
     (*KeywordMap)["isampler2DRect"] =          ISAMPLER2DRECT;
     (*KeywordMap)["usampler2DRect"] =          USAMPLER2DRECT;
     (*KeywordMap)["isamplerBuffer"] =          ISAMPLERBUFFER;
@@ -584,36 +621,19 @@
     (*KeywordMap)["usampler2DMSArray"] =       USAMPLER2DMSARRAY;
     (*KeywordMap)["sampler1D"] =               SAMPLER1D;
     (*KeywordMap)["sampler1DShadow"] =         SAMPLER1DSHADOW;
-    (*KeywordMap)["sampler3D"] =               SAMPLER3D;
-    (*KeywordMap)["sampler2DShadow"] =         SAMPLER2DSHADOW;
     (*KeywordMap)["sampler2DRect"] =           SAMPLER2DRECT;
     (*KeywordMap)["sampler2DRectShadow"] =     SAMPLER2DRECTSHADOW;
     (*KeywordMap)["sampler1DArray"] =          SAMPLER1DARRAY;
 
     (*KeywordMap)["samplerExternalOES"] =      SAMPLEREXTERNALOES; // GL_OES_EGL_image_external
 
-    (*KeywordMap)["sampler"] =                 SAMPLER;
-    (*KeywordMap)["samplerShadow"] =           SAMPLERSHADOW;
+    (*KeywordMap)["__samplerExternal2DY2YEXT"] = SAMPLEREXTERNAL2DY2YEXT; // GL_EXT_YUV_target
 
-    (*KeywordMap)["texture2D"] =               TEXTURE2D;
-    (*KeywordMap)["textureCube"] =             TEXTURECUBE;
-    (*KeywordMap)["textureCubeArray"] =        TEXTURECUBEARRAY;
-    (*KeywordMap)["itextureCubeArray"] =       ITEXTURECUBEARRAY;
-    (*KeywordMap)["utextureCubeArray"] =       UTEXTURECUBEARRAY;
     (*KeywordMap)["itexture1DArray"] =         ITEXTURE1DARRAY;
     (*KeywordMap)["utexture1D"] =              UTEXTURE1D;
     (*KeywordMap)["itexture1D"] =              ITEXTURE1D;
     (*KeywordMap)["utexture1DArray"] =         UTEXTURE1DARRAY;
     (*KeywordMap)["textureBuffer"] =           TEXTUREBUFFER;
-    (*KeywordMap)["texture2DArray"] =          TEXTURE2DARRAY;
-    (*KeywordMap)["itexture2D"] =              ITEXTURE2D;
-    (*KeywordMap)["itexture3D"] =              ITEXTURE3D;
-    (*KeywordMap)["itextureCube"] =            ITEXTURECUBE;
-    (*KeywordMap)["itexture2DArray"] =         ITEXTURE2DARRAY;
-    (*KeywordMap)["utexture2D"] =              UTEXTURE2D;
-    (*KeywordMap)["utexture3D"] =              UTEXTURE3D;
-    (*KeywordMap)["utextureCube"] =            UTEXTURECUBE;
-    (*KeywordMap)["utexture2DArray"] =         UTEXTURE2DARRAY;
     (*KeywordMap)["itexture2DRect"] =          ITEXTURE2DRECT;
     (*KeywordMap)["utexture2DRect"] =          UTEXTURE2DRECT;
     (*KeywordMap)["itextureBuffer"] =          ITEXTUREBUFFER;
@@ -625,7 +645,6 @@
     (*KeywordMap)["itexture2DMSArray"] =       ITEXTURE2DMSARRAY;
     (*KeywordMap)["utexture2DMSArray"] =       UTEXTURE2DMSARRAY;
     (*KeywordMap)["texture1D"] =               TEXTURE1D;
-    (*KeywordMap)["texture3D"] =               TEXTURE3D;
     (*KeywordMap)["texture2DRect"] =           TEXTURE2DRECT;
     (*KeywordMap)["texture1DArray"] =          TEXTURE1DARRAY;
 
@@ -636,7 +655,6 @@
     (*KeywordMap)["usubpassInput"] =           USUBPASSINPUT;
     (*KeywordMap)["usubpassInputMS"] =         USUBPASSINPUTMS;
 
-#ifdef AMD_EXTENSIONS
     (*KeywordMap)["f16sampler1D"] =                 F16SAMPLER1D;
     (*KeywordMap)["f16sampler2D"] =                 F16SAMPLER2D;
     (*KeywordMap)["f16sampler3D"] =                 F16SAMPLER3D;
@@ -682,35 +700,30 @@
 
     (*KeywordMap)["f16subpassInput"] =              F16SUBPASSINPUT;
     (*KeywordMap)["f16subpassInputMS"] =            F16SUBPASSINPUTMS;
-#endif
-
-    (*KeywordMap)["noperspective"] =           NOPERSPECTIVE;
-    (*KeywordMap)["smooth"] =                  SMOOTH;
-    (*KeywordMap)["flat"] =                    FLAT;
-#ifdef AMD_EXTENSIONS
     (*KeywordMap)["__explicitInterpAMD"] =     EXPLICITINTERPAMD;
-#endif
-    (*KeywordMap)["centroid"] =                CENTROID;
-#ifdef NV_EXTENSIONS
     (*KeywordMap)["pervertexNV"] =             PERVERTEXNV;
-#endif
     (*KeywordMap)["precise"] =                 PRECISE;
-    (*KeywordMap)["invariant"] =               INVARIANT;
-    (*KeywordMap)["packed"] =                  PACKED;
-    (*KeywordMap)["resource"] =                RESOURCE;
-    (*KeywordMap)["superp"] =                  SUPERP;
 
-#ifdef NV_EXTENSIONS
     (*KeywordMap)["rayPayloadNV"] =            PAYLOADNV;
+    (*KeywordMap)["rayPayloadEXT"] =           PAYLOADEXT;
     (*KeywordMap)["rayPayloadInNV"] =          PAYLOADINNV;
+    (*KeywordMap)["rayPayloadInEXT"] =         PAYLOADINEXT;
     (*KeywordMap)["hitAttributeNV"] =          HITATTRNV;
+    (*KeywordMap)["hitAttributeEXT"] =         HITATTREXT;
     (*KeywordMap)["callableDataNV"] =          CALLDATANV;
+    (*KeywordMap)["callableDataEXT"] =         CALLDATAEXT;
     (*KeywordMap)["callableDataInNV"] =        CALLDATAINNV;
+    (*KeywordMap)["callableDataInEXT"] =       CALLDATAINEXT;
     (*KeywordMap)["accelerationStructureNV"] = ACCSTRUCTNV;
+    (*KeywordMap)["accelerationStructureEXT"]   = ACCSTRUCTEXT;
+    (*KeywordMap)["rayQueryEXT"] =              RAYQUERYEXT;
     (*KeywordMap)["perprimitiveNV"] =          PERPRIMITIVENV;
     (*KeywordMap)["perviewNV"] =               PERVIEWNV;
     (*KeywordMap)["taskNV"] =                  PERTASKNV;
-#endif
+
+    (*KeywordMap)["fcoopmatNV"] =              FCOOPMATNV;
+    (*KeywordMap)["icoopmatNV"] =              ICOOPMATNV;
+    (*KeywordMap)["ucoopmatNV"] =              UCOOPMATNV;
 
     ReservedSet = new std::unordered_set<const char*, str_hash, str_eq>;
 
@@ -751,14 +764,17 @@
     ReservedSet->insert("cast");
     ReservedSet->insert("namespace");
     ReservedSet->insert("using");
+#endif
 }
 
 void TScanContext::deleteKeywordMap()
 {
     delete KeywordMap;
     KeywordMap = nullptr;
+#ifndef GLSLANG_WEB
     delete ReservedSet;
     ReservedSet = nullptr;
+#endif
 }
 
 // Called by yylex to get the next token.
@@ -835,15 +851,18 @@
             parseContext.error(loc, "not supported", "::", "");
             break;
 
+        case PpAtomConstString:        parserToken->sType.lex.string = NewPoolTString(tokenText);     return STRING_LITERAL;
         case PpAtomConstInt:           parserToken->sType.lex.i    = ppToken.ival;       return INTCONSTANT;
         case PpAtomConstUint:          parserToken->sType.lex.i    = ppToken.ival;       return UINTCONSTANT;
+        case PpAtomConstFloat:         parserToken->sType.lex.d    = ppToken.dval;       return FLOATCONSTANT;
+#ifndef GLSLANG_WEB
         case PpAtomConstInt16:         parserToken->sType.lex.i    = ppToken.ival;       return INT16CONSTANT;
         case PpAtomConstUint16:        parserToken->sType.lex.i    = ppToken.ival;       return UINT16CONSTANT;
         case PpAtomConstInt64:         parserToken->sType.lex.i64  = ppToken.i64val;     return INT64CONSTANT;
         case PpAtomConstUint64:        parserToken->sType.lex.i64  = ppToken.i64val;     return UINT64CONSTANT;
-        case PpAtomConstFloat:         parserToken->sType.lex.d    = ppToken.dval;       return FLOATCONSTANT;
         case PpAtomConstDouble:        parserToken->sType.lex.d    = ppToken.dval;       return DOUBLECONSTANT;
         case PpAtomConstFloat16:       parserToken->sType.lex.d    = ppToken.dval;       return FLOAT16CONSTANT;
+#endif
         case PpAtomIdentifier:
         {
             int token = tokenizeIdentifier();
@@ -865,8 +884,10 @@
 
 int TScanContext::tokenizeIdentifier()
 {
+#ifndef GLSLANG_WEB
     if (ReservedSet->find(tokenText) != ReservedSet->end())
         return reservedWord();
+#endif
 
     auto it = KeywordMap->find(tokenText);
     if (it == KeywordMap->end()) {
@@ -893,20 +914,21 @@
     case CASE:
         return keyword;
 
+    case BUFFER:
+        afterBuffer = true;
+        if ((parseContext.isEsProfile() && parseContext.version < 310) ||
+            (!parseContext.isEsProfile() && parseContext.version < 430))
+            return identifierOrType();
+        return keyword;
+
     case STRUCT:
         afterStruct = true;
         return keyword;
 
-    case NONUNIFORM:
-        if (parseContext.extensionTurnedOn(E_GL_EXT_nonuniform_qualifier))
-            return keyword;
-        else
-            return identifierOrType();
-
     case SWITCH:
     case DEFAULT:
-        if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
-            (parseContext.profile != EEsProfile && parseContext.version < 130))
+        if ((parseContext.isEsProfile() && parseContext.version < 300) ||
+            (!parseContext.isEsProfile() && parseContext.version < 130))
             reservedWord();
         return keyword;
 
@@ -938,20 +960,59 @@
             parserToken->sType.lex.b = false;
         return keyword;
 
-    case ATTRIBUTE:
-    case VARYING:
-        if (parseContext.profile == EEsProfile && parseContext.version >= 300)
-            reservedWord();
-        return keyword;
-
-    case BUFFER:
-        afterBuffer = true;
-        if ((parseContext.profile == EEsProfile && parseContext.version < 310) ||
-            (parseContext.profile != EEsProfile && parseContext.version < 430))
+    case SMOOTH:
+        if ((parseContext.isEsProfile() && parseContext.version < 300) ||
+            (!parseContext.isEsProfile() && parseContext.version < 130))
             return identifierOrType();
         return keyword;
+    case FLAT:
+        if (parseContext.isEsProfile() && parseContext.version < 300)
+            reservedWord();
+        else if (!parseContext.isEsProfile() && parseContext.version < 130)
+            return identifierOrType();
+        return keyword;
+    case CENTROID:
+        if (parseContext.version < 120)
+            return identifierOrType();
+        return keyword;
+    case INVARIANT:
+        if (!parseContext.isEsProfile() && parseContext.version < 120)
+            return identifierOrType();
+        return keyword;
+    case PACKED:
+        if ((parseContext.isEsProfile() && parseContext.version < 300) ||
+            (!parseContext.isEsProfile() && parseContext.version < 330))
+            return reservedWord();
+        return identifierOrType();
 
-#ifdef NV_EXTENSIONS
+    case RESOURCE:
+    {
+        bool reserved = (parseContext.isEsProfile() && parseContext.version >= 300) ||
+                        (!parseContext.isEsProfile() && parseContext.version >= 420);
+        return identifierOrReserved(reserved);
+    }
+    case SUPERP:
+    {
+        bool reserved = parseContext.isEsProfile() || parseContext.version >= 130;
+        return identifierOrReserved(reserved);
+    }
+
+#ifndef GLSLANG_WEB
+    case NOPERSPECTIVE:
+        if (parseContext.extensionTurnedOn(E_GL_NV_shader_noperspective_interpolation))
+            return keyword;
+        return es30ReservedFromGLSL(130);
+
+    case NONUNIFORM:
+        if (parseContext.extensionTurnedOn(E_GL_EXT_nonuniform_qualifier))
+            return keyword;
+        else
+            return identifierOrType();
+    case ATTRIBUTE:
+    case VARYING:
+        if (parseContext.isEsProfile() && parseContext.version >= 300)
+            reservedWord();
+        return keyword;
     case PAYLOADNV:
     case PAYLOADINNV:
     case HITATTRNV:
@@ -959,14 +1020,28 @@
     case CALLDATAINNV:
     case ACCSTRUCTNV:
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (parseContext.profile != EEsProfile && parseContext.version >= 460
-                 && parseContext.extensionTurnedOn(E_GL_NV_ray_tracing)))
+            parseContext.extensionTurnedOn(E_GL_NV_ray_tracing))
             return keyword;
         return identifierOrType();
-#endif
-
+    case PAYLOADEXT:
+    case PAYLOADINEXT:
+    case HITATTREXT:
+    case CALLDATAEXT:
+    case CALLDATAINEXT:
+    case ACCSTRUCTEXT:
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            parseContext.extensionTurnedOn(E_GL_EXT_ray_tracing) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_ray_query))
+            return keyword;
+        return identifierOrType();
+    case RAYQUERYEXT:
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            (!parseContext.isEsProfile() && parseContext.version >= 460
+                 && parseContext.extensionTurnedOn(E_GL_EXT_ray_query)))
+            return keyword;
+        return identifierOrType();
     case ATOMIC_UINT:
-        if ((parseContext.profile == EEsProfile && parseContext.version >= 310) ||
+        if ((parseContext.isEsProfile() && parseContext.version >= 310) ||
             parseContext.extensionTurnedOn(E_GL_ARB_shader_atomic_counters))
             return keyword;
         return es30ReservedFromGLSL(420);
@@ -976,57 +1051,56 @@
     case QUEUEFAMILYCOHERENT:
     case WORKGROUPCOHERENT:
     case SUBGROUPCOHERENT:
+    case SHADERCALLCOHERENT:
     case NONPRIVATE:
     case RESTRICT:
     case READONLY:
     case WRITEONLY:
-        if (parseContext.profile == EEsProfile && parseContext.version >= 310)
+        if (parseContext.isEsProfile() && parseContext.version >= 310)
             return keyword;
         return es30ReservedFromGLSL(parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store) ? 130 : 420);
-
     case VOLATILE:
-        if (parseContext.profile == EEsProfile && parseContext.version >= 310)
+        if (parseContext.isEsProfile() && parseContext.version >= 310)
             return keyword;
-        if (! parseContext.symbolTable.atBuiltInLevel() && (parseContext.profile == EEsProfile ||
+        if (! parseContext.symbolTable.atBuiltInLevel() && (parseContext.isEsProfile() ||
             (parseContext.version < 420 && ! parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))))
             reservedWord();
         return keyword;
-
-    case LAYOUT:
-    {
-        const int numLayoutExts = 2;
-        const char* layoutExts[numLayoutExts] = { E_GL_ARB_shading_language_420pack,
-                                                  E_GL_ARB_explicit_attrib_location };
-        if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
-            (parseContext.profile != EEsProfile && parseContext.version < 140 &&
-            ! parseContext.extensionsTurnedOn(numLayoutExts, layoutExts)))
-            return identifierOrType();
-        return keyword;
-    }
-    case SHARED:
-        if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
-            (parseContext.profile != EEsProfile && parseContext.version < 140))
-            return identifierOrType();
-        return keyword;
-
     case PATCH:
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (parseContext.profile == EEsProfile &&
+            (parseContext.isEsProfile() &&
              (parseContext.version >= 320 ||
               parseContext.extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))) ||
-            (parseContext.profile != EEsProfile && parseContext.extensionTurnedOn(E_GL_ARB_tessellation_shader)))
+            (!parseContext.isEsProfile() && parseContext.extensionTurnedOn(E_GL_ARB_tessellation_shader)))
             return keyword;
 
         return es30ReservedFromGLSL(400);
 
     case SAMPLE:
-        if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
             parseContext.extensionsTurnedOn(1, &E_GL_OES_shader_multisample_interpolation))
             return keyword;
         return es30ReservedFromGLSL(400);
 
     case SUBROUTINE:
         return es30ReservedFromGLSL(400);
+#endif
+    case SHARED:
+        if ((parseContext.isEsProfile() && parseContext.version < 300) ||
+            (!parseContext.isEsProfile() && parseContext.version < 140))
+            return identifierOrType();
+        return keyword;
+    case LAYOUT:
+    {
+        const int numLayoutExts = 2;
+        const char* layoutExts[numLayoutExts] = { E_GL_ARB_shading_language_420pack,
+                                                  E_GL_ARB_explicit_attrib_location };
+        if ((parseContext.isEsProfile() && parseContext.version < 300) ||
+            (!parseContext.isEsProfile() && parseContext.version < 140 &&
+            ! parseContext.extensionsTurnedOn(numLayoutExts, layoutExts)))
+            return identifierOrType();
+        return keyword;
+    }
 
     case HIGH_PRECISION:
     case MEDIUM_PRECISION:
@@ -1045,6 +1119,7 @@
     case MAT4X4:
         return matNxM();
 
+#ifndef GLSLANG_WEB
     case DMAT2:
     case DMAT3:
     case DMAT4:
@@ -1075,7 +1150,7 @@
     case IIMAGEBUFFER:
     case UIMAGEBUFFER:
         afterType = true;
-        if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
             parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
             return keyword;
         return firstGenerationImage(false);
@@ -1099,7 +1174,7 @@
     case IIMAGECUBEARRAY:
     case UIMAGECUBEARRAY:
         afterType = true;
-        if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
             parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
             return keyword;
         return secondGenerationImage();
@@ -1118,7 +1193,10 @@
     case DVEC3:
     case DVEC4:
         afterType = true;
-        if (parseContext.profile == EEsProfile || parseContext.version < 400)
+        if (parseContext.isEsProfile() || parseContext.version < 150 ||
+            (!parseContext.symbolTable.atBuiltInLevel() &&
+              parseContext.version < 400 &&
+             !parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_fp64)))
             reservedWord();
         return keyword;
 
@@ -1132,10 +1210,9 @@
     case U64VEC4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
-             (parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int64))))
+            parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int64))
             return keyword;
         return identifierOrType();
 
@@ -1149,10 +1226,9 @@
     case U8VEC4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            ((parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_8bit_storage) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int8)) &&
-              parseContext.profile != EEsProfile && parseContext.version >= 450))
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_8bit_storage) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int8))
             return keyword;
         return identifierOrType();
 
@@ -1166,14 +1242,10 @@
     case U16VEC4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
-             (
-#ifdef AMD_EXTENSIONS
-              parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) ||
-#endif
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int16))))
+            parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int16))
             return keyword;
         return identifierOrType();
     case INT32_T:
@@ -1186,9 +1258,8 @@
     case U32VEC4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-           ((parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
-             parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int32)) &&
-             parseContext.profile != EEsProfile && parseContext.version >= 450))
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int32))
             return keyword;
         return identifierOrType();
     case FLOAT32_T:
@@ -1209,9 +1280,8 @@
     case F32MAT4X4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            ((parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32)) &&
-              parseContext.profile != EEsProfile && parseContext.version >= 450))
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32))
             return keyword;
         return identifierOrType();
 
@@ -1233,9 +1303,8 @@
     case F64MAT4X4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            ((parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64)) &&
-              parseContext.profile != EEsProfile && parseContext.version >= 450))
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64))
             return keyword;
         return identifierOrType();
 
@@ -1245,14 +1314,10 @@
     case F16VEC4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
-             (
-#ifdef AMD_EXTENSIONS
-              parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
-#endif
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16))))
+            parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16))
             return keyword;
 
         return identifierOrType();
@@ -1271,13 +1336,9 @@
     case F16MAT4X4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
-             (
-#ifdef AMD_EXTENSIONS
-              parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
-#endif
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16))))
+            parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16))
             return keyword;
 
         return identifierOrType();
@@ -1287,20 +1348,21 @@
     case ISAMPLERCUBEARRAY:
     case USAMPLERCUBEARRAY:
         afterType = true;
-        if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
             parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
             return keyword;
-        if (parseContext.profile == EEsProfile || (parseContext.version < 400 && ! parseContext.extensionTurnedOn(E_GL_ARB_texture_cube_map_array)))
+        if (parseContext.isEsProfile() || (parseContext.version < 400 && ! parseContext.extensionTurnedOn(E_GL_ARB_texture_cube_map_array)))
             reservedWord();
         return keyword;
 
-    case ISAMPLER1D:
-    case ISAMPLER1DARRAY:
-    case SAMPLER1DARRAYSHADOW:
-    case USAMPLER1D:
-    case USAMPLER1DARRAY:
-        afterType = true;
-        return es30ReservedFromGLSL(130);
+    case TEXTURECUBEARRAY:
+    case ITEXTURECUBEARRAY:
+    case UTEXTURECUBEARRAY:
+        if (parseContext.spvVersion.vulkan > 0)
+            return keyword;
+        else
+            return identifierOrType();
+#endif
 
     case UINT:
     case UVEC2:
@@ -1320,6 +1382,49 @@
         afterType = true;
         return nonreservedKeyword(300, 130);
 
+    case SAMPLER3D:
+        afterType = true;
+        if (parseContext.isEsProfile() && parseContext.version < 300) {
+            if (!parseContext.extensionTurnedOn(E_GL_OES_texture_3D))
+                reservedWord();
+        }
+        return keyword;
+
+    case SAMPLER2DSHADOW:
+        afterType = true;
+        if (parseContext.isEsProfile() && parseContext.version < 300) {
+            if (!parseContext.extensionTurnedOn(E_GL_EXT_shadow_samplers))
+                reservedWord();
+        }
+        return keyword;
+
+    case TEXTURE2D:
+    case TEXTURECUBE:
+    case TEXTURE2DARRAY:
+    case ITEXTURE2D:
+    case ITEXTURE3D:
+    case ITEXTURECUBE:
+    case ITEXTURE2DARRAY:
+    case UTEXTURE2D:
+    case UTEXTURE3D:
+    case UTEXTURECUBE:
+    case UTEXTURE2DARRAY:
+    case TEXTURE3D:
+    case SAMPLER:
+    case SAMPLERSHADOW:
+        if (parseContext.spvVersion.vulkan > 0)
+            return keyword;
+        else
+            return identifierOrType();
+
+#ifndef GLSLANG_WEB
+    case ISAMPLER1D:
+    case ISAMPLER1DARRAY:
+    case SAMPLER1DARRAYSHADOW:
+    case USAMPLER1D:
+    case USAMPLER1DARRAY:
+        afterType = true;
+        return es30ReservedFromGLSL(130);
     case ISAMPLER2DRECT:
     case USAMPLER2DRECT:
         afterType = true;
@@ -1327,7 +1432,7 @@
 
     case SAMPLERBUFFER:
         afterType = true;
-        if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
             parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
             return keyword;
         return es30ReservedFromGLSL(130);
@@ -1335,7 +1440,7 @@
     case ISAMPLERBUFFER:
     case USAMPLERBUFFER:
         afterType = true;
-        if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
             parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
             return keyword;
         return es30ReservedFromGLSL(140);
@@ -1344,7 +1449,10 @@
     case ISAMPLER2DMS:
     case USAMPLER2DMS:
         afterType = true;
-        if (parseContext.profile == EEsProfile && parseContext.version >= 310)
+        if (parseContext.isEsProfile() && parseContext.version >= 310)
+            return keyword;
+        if (!parseContext.isEsProfile() && (parseContext.version > 140 ||
+            (parseContext.version == 140 && parseContext.extensionsTurnedOn(1, &E_GL_ARB_texture_multisample))))
             return keyword;
         return es30ReservedFromGLSL(150);
 
@@ -1352,38 +1460,25 @@
     case ISAMPLER2DMSARRAY:
     case USAMPLER2DMSARRAY:
         afterType = true;
-        if ((parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
             parseContext.extensionsTurnedOn(1, &E_GL_OES_texture_storage_multisample_2d_array))
             return keyword;
+        if (!parseContext.isEsProfile() && (parseContext.version > 140 ||
+            (parseContext.version == 140 && parseContext.extensionsTurnedOn(1, &E_GL_ARB_texture_multisample))))
+            return keyword;
         return es30ReservedFromGLSL(150);
 
     case SAMPLER1D:
     case SAMPLER1DSHADOW:
         afterType = true;
-        if (parseContext.profile == EEsProfile)
+        if (parseContext.isEsProfile())
             reservedWord();
         return keyword;
 
-    case SAMPLER3D:
-        afterType = true;
-        if (parseContext.profile == EEsProfile && parseContext.version < 300) {
-            if (!parseContext.extensionTurnedOn(E_GL_OES_texture_3D))
-                reservedWord();
-        }
-        return keyword;
-
-    case SAMPLER2DSHADOW:
-        afterType = true;
-        if (parseContext.profile == EEsProfile && parseContext.version < 300) {
-            if (!parseContext.extensionTurnedOn(E_GL_EXT_shadow_samplers))
-                reservedWord();
-        }
-        return keyword;
-
     case SAMPLER2DRECT:
     case SAMPLER2DRECTSHADOW:
         afterType = true;
-        if (parseContext.profile == EEsProfile)
+        if (parseContext.isEsProfile())
             reservedWord();
         else if (parseContext.version < 140 && ! parseContext.symbolTable.atBuiltInLevel() && ! parseContext.extensionTurnedOn(E_GL_ARB_texture_rectangle)) {
             if (parseContext.relaxedErrors())
@@ -1395,10 +1490,10 @@
 
     case SAMPLER1DARRAY:
         afterType = true;
-        if (parseContext.profile == EEsProfile && parseContext.version == 300)
+        if (parseContext.isEsProfile() && parseContext.version == 300)
             reservedWord();
-        else if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
-                 (parseContext.profile != EEsProfile && parseContext.version < 130))
+        else if ((parseContext.isEsProfile() && parseContext.version < 300) ||
+                 (!parseContext.isEsProfile() && parseContext.version < 130))
             return identifierOrType();
         return keyword;
 
@@ -1410,25 +1505,18 @@
             return keyword;
         return identifierOrType();
 
-    case TEXTURE2D:
-    case TEXTURECUBE:
-    case TEXTURECUBEARRAY:
-    case ITEXTURECUBEARRAY:
-    case UTEXTURECUBEARRAY:
+    case SAMPLEREXTERNAL2DY2YEXT:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            parseContext.extensionTurnedOn(E_GL_EXT_YUV_target))
+            return keyword;
+        return identifierOrType();
+
     case ITEXTURE1DARRAY:
     case UTEXTURE1D:
     case ITEXTURE1D:
     case UTEXTURE1DARRAY:
     case TEXTUREBUFFER:
-    case TEXTURE2DARRAY:
-    case ITEXTURE2D:
-    case ITEXTURE3D:
-    case ITEXTURECUBE:
-    case ITEXTURE2DARRAY:
-    case UTEXTURE2D:
-    case UTEXTURE3D:
-    case UTEXTURECUBE:
-    case UTEXTURE2DARRAY:
     case ITEXTURE2DRECT:
     case UTEXTURE2DRECT:
     case ITEXTUREBUFFER:
@@ -1440,11 +1528,8 @@
     case ITEXTURE2DMSARRAY:
     case UTEXTURE2DMSARRAY:
     case TEXTURE1D:
-    case TEXTURE3D:
     case TEXTURE2DRECT:
     case TEXTURE1DARRAY:
-    case SAMPLER:
-    case SAMPLERSHADOW:
         if (parseContext.spvVersion.vulkan > 0)
             return keyword;
         else
@@ -1461,7 +1546,6 @@
         else
             return identifierOrType();
 
-#ifdef AMD_EXTENSIONS
     case F16SAMPLER1D:
     case F16SAMPLER2D:
     case F16SAMPLER3D:
@@ -1509,98 +1593,61 @@
     case F16SUBPASSINPUTMS:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float_fetch) &&
-             parseContext.profile != EEsProfile && parseContext.version >= 450))
+            parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float_fetch))
             return keyword;
         return identifierOrType();
-#endif
 
-    case NOPERSPECTIVE:
-#ifdef NV_EXTENSIONS
-        if (parseContext.profile == EEsProfile && parseContext.version >= 300 &&
-            parseContext.extensionTurnedOn(E_GL_NV_shader_noperspective_interpolation))
-            return keyword;
-#endif
-        return es30ReservedFromGLSL(130);
-
-    case SMOOTH:
-        if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
-            (parseContext.profile != EEsProfile && parseContext.version < 130))
-            return identifierOrType();
-        return keyword;
-
-#ifdef AMD_EXTENSIONS
     case EXPLICITINTERPAMD:
-        if (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
-            parseContext.extensionTurnedOn(E_GL_AMD_shader_explicit_vertex_parameter))
+        if (parseContext.extensionTurnedOn(E_GL_AMD_shader_explicit_vertex_parameter))
             return keyword;
         return identifierOrType();
-#endif
 
-#ifdef NV_EXTENSIONS
     case PERVERTEXNV:
-        if (((parseContext.profile != EEsProfile && parseContext.version >= 450) ||
-            (parseContext.profile == EEsProfile && parseContext.version >= 320)) &&
+        if ((!parseContext.isEsProfile() && parseContext.version >= 450) ||
             parseContext.extensionTurnedOn(E_GL_NV_fragment_shader_barycentric))
             return keyword;
         return identifierOrType();
-#endif
-
-    case FLAT:
-        if (parseContext.profile == EEsProfile && parseContext.version < 300)
-            reservedWord();
-        else if (parseContext.profile != EEsProfile && parseContext.version < 130)
-            return identifierOrType();
-        return keyword;
-
-    case CENTROID:
-        if (parseContext.version < 120)
-            return identifierOrType();
-        return keyword;
 
     case PRECISE:
-        if ((parseContext.profile == EEsProfile &&
+        if ((parseContext.isEsProfile() &&
              (parseContext.version >= 320 || parseContext.extensionsTurnedOn(Num_AEP_gpu_shader5, AEP_gpu_shader5))) ||
-            (parseContext.profile != EEsProfile && parseContext.version >= 400))
+            (!parseContext.isEsProfile() && parseContext.version >= 400))
             return keyword;
-        if (parseContext.profile == EEsProfile && parseContext.version == 310) {
+        if (parseContext.isEsProfile() && parseContext.version == 310) {
             reservedWord();
             return keyword;
         }
         return identifierOrType();
 
-    case INVARIANT:
-        if (parseContext.profile != EEsProfile && parseContext.version < 120)
-            return identifierOrType();
-        return keyword;
-
-    case PACKED:
-        if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
-            (parseContext.profile != EEsProfile && parseContext.version < 330))
-            return reservedWord();
-        return identifierOrType();
-
-    case RESOURCE:
-    {
-        bool reserved = (parseContext.profile == EEsProfile && parseContext.version >= 300) ||
-                        (parseContext.profile != EEsProfile && parseContext.version >= 420);
-        return identifierOrReserved(reserved);
-    }
-    case SUPERP:
-    {
-        bool reserved = parseContext.profile == EEsProfile || parseContext.version >= 130;
-        return identifierOrReserved(reserved);
-    }
-
-#ifdef NV_EXTENSIONS
     case PERPRIMITIVENV:
     case PERVIEWNV:
     case PERTASKNV:
-        if ((parseContext.profile != EEsProfile && parseContext.version >= 450) ||
-            (parseContext.profile == EEsProfile && parseContext.version >= 320) ||
+        if ((!parseContext.isEsProfile() && parseContext.version >= 450) ||
+            (parseContext.isEsProfile() && parseContext.version >= 320) ||
             parseContext.extensionTurnedOn(E_GL_NV_mesh_shader))
             return keyword;
         return identifierOrType();
+
+    case FCOOPMATNV:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            parseContext.extensionTurnedOn(E_GL_NV_cooperative_matrix))
+            return keyword;
+        return identifierOrType();
+
+    case UCOOPMATNV:
+    case ICOOPMATNV:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            parseContext.extensionTurnedOn(E_GL_NV_integer_cooperative_matrix))
+            return keyword;
+        return identifierOrType();
+
+    case DEMOTE:
+        if (parseContext.extensionTurnedOn(E_GL_EXT_demote_to_helper_invocation))
+            return keyword;
+        else
+            return identifierOrType();
 #endif
 
     default:
@@ -1620,7 +1667,7 @@
         if (const TVariable* variable = parserToken->sType.lex.symbol->getAsVariable()) {
             if (variable->isUserType() &&
                 // treat redeclaration of forward-declared buffer/uniform reference as an identifier
-                !(variable->getType().getBasicType() == EbtReference && afterBuffer)) {
+                !(variable->getType().isReference() && afterBuffer)) {
                 afterType = true;
 
                 return TYPE_NAME;
@@ -1650,7 +1697,7 @@
         return 0;
     }
 
-    if (parseContext.forwardCompatible)
+    if (parseContext.isForwardCompatible())
         parseContext.warn(loc, "using future reserved keyword", tokenText, "");
 
     return identifierOrType();
@@ -1663,13 +1710,13 @@
     if (parseContext.symbolTable.atBuiltInLevel())
         return keyword;
 
-    if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
-        (parseContext.profile != EEsProfile && parseContext.version < version)) {
-            if (parseContext.forwardCompatible)
+    if ((parseContext.isEsProfile() && parseContext.version < 300) ||
+        (!parseContext.isEsProfile() && parseContext.version < version)) {
+            if (parseContext.isForwardCompatible())
                 parseContext.warn(loc, "future reserved word in ES 300 and keyword in GLSL", tokenText, "");
 
             return identifierOrType();
-    } else if (parseContext.profile == EEsProfile && parseContext.version >= 300)
+    } else if (parseContext.isEsProfile() && parseContext.version >= 300)
         reservedWord();
 
     return keyword;
@@ -1679,9 +1726,9 @@
 // showed up, both in an es version and a non-ES version.
 int TScanContext::nonreservedKeyword(int esVersion, int nonEsVersion)
 {
-    if ((parseContext.profile == EEsProfile && parseContext.version < esVersion) ||
-        (parseContext.profile != EEsProfile && parseContext.version < nonEsVersion)) {
-        if (parseContext.forwardCompatible)
+    if ((parseContext.isEsProfile() && parseContext.version < esVersion) ||
+        (!parseContext.isEsProfile() && parseContext.version < nonEsVersion)) {
+        if (parseContext.isForwardCompatible())
             parseContext.warn(loc, "using future keyword", tokenText, "");
 
         return identifierOrType();
@@ -1692,10 +1739,10 @@
 
 int TScanContext::precisionKeyword()
 {
-    if (parseContext.profile == EEsProfile || parseContext.version >= 130)
+    if (parseContext.isEsProfile() || parseContext.version >= 130)
         return keyword;
 
-    if (parseContext.forwardCompatible)
+    if (parseContext.isForwardCompatible())
         parseContext.warn(loc, "using ES precision qualifier keyword", tokenText, "");
 
     return identifierOrType();
@@ -1708,7 +1755,7 @@
     if (parseContext.version > 110)
         return keyword;
 
-    if (parseContext.forwardCompatible)
+    if (parseContext.isForwardCompatible())
         parseContext.warn(loc, "using future non-square matrix type keyword", tokenText, "");
 
     return identifierOrType();
@@ -1718,16 +1765,18 @@
 {
     afterType = true;
 
-    if (parseContext.profile == EEsProfile && parseContext.version >= 300) {
+    if (parseContext.isEsProfile() && parseContext.version >= 300) {
         reservedWord();
 
         return keyword;
     }
 
-    if (parseContext.profile != EEsProfile && parseContext.version >= 400)
+    if (!parseContext.isEsProfile() && (parseContext.version >= 400 ||
+        parseContext.symbolTable.atBuiltInLevel() ||
+        (parseContext.version >= 150 && parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_fp64))))
         return keyword;
 
-    if (parseContext.forwardCompatible)
+    if (parseContext.isForwardCompatible())
         parseContext.warn(loc, "using future type keyword", tokenText, "");
 
     return identifierOrType();
@@ -1736,19 +1785,19 @@
 int TScanContext::firstGenerationImage(bool inEs310)
 {
     if (parseContext.symbolTable.atBuiltInLevel() ||
-        (parseContext.profile != EEsProfile && (parseContext.version >= 420 ||
+        (!parseContext.isEsProfile() && (parseContext.version >= 420 ||
          parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))) ||
-        (inEs310 && parseContext.profile == EEsProfile && parseContext.version >= 310))
+        (inEs310 && parseContext.isEsProfile() && parseContext.version >= 310))
         return keyword;
 
-    if ((parseContext.profile == EEsProfile && parseContext.version >= 300) ||
-        (parseContext.profile != EEsProfile && parseContext.version >= 130)) {
+    if ((parseContext.isEsProfile() && parseContext.version >= 300) ||
+        (!parseContext.isEsProfile() && parseContext.version >= 130)) {
         reservedWord();
 
         return keyword;
     }
 
-    if (parseContext.forwardCompatible)
+    if (parseContext.isForwardCompatible())
         parseContext.warn(loc, "using future type keyword", tokenText, "");
 
     return identifierOrType();
@@ -1756,17 +1805,17 @@
 
 int TScanContext::secondGenerationImage()
 {
-    if (parseContext.profile == EEsProfile && parseContext.version >= 310) {
+    if (parseContext.isEsProfile() && parseContext.version >= 310) {
         reservedWord();
         return keyword;
     }
 
     if (parseContext.symbolTable.atBuiltInLevel() ||
-        (parseContext.profile != EEsProfile &&
+        (!parseContext.isEsProfile() &&
          (parseContext.version >= 420 || parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))))
         return keyword;
 
-    if (parseContext.forwardCompatible)
+    if (parseContext.isForwardCompatible())
         parseContext.warn(loc, "using future type keyword", tokenText, "");
 
     return identifierOrType();
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
old mode 100755
new mode 100644
index 3d93aa2..a1392db
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -1,7 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2013-2016 LunarG, Inc.
-// Copyright (C) 2015-2018 Google, Inc.
+// Copyright (C) 2015-2020 Google, Inc.
 //
 // All rights reserved.
 //
@@ -288,6 +288,11 @@
                                 EShLanguage language, EShSource source, TInfoSink& infoSink, TSymbolTable** commonTable,
                                 TSymbolTable** symbolTables)
 {
+#ifdef GLSLANG_WEB
+    profile = EEsProfile;
+    version = 310;
+#endif
+
     (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]);
     InitializeSymbolTable(builtInParseables.getStageString(language), version, profile, spvVersion, language, source,
                           infoSink, *symbolTables[language]);
@@ -304,6 +309,11 @@
 //
 bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable,  TSymbolTable** symbolTables, int version, EProfile profile, const SpvVersion& spvVersion, EShSource source)
 {
+#ifdef GLSLANG_WEB
+    profile = EEsProfile;
+    version = 310;
+#endif
+
     std::unique_ptr<TBuiltInParseables> builtInParseables(CreateBuiltInParseables(infoSink, source));
 
     if (builtInParseables == nullptr)
@@ -326,6 +336,7 @@
     InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangFragment, source,
                                infoSink, commonTable, symbolTables);
 
+#ifndef GLSLANG_WEB
     // check for tessellation
     if ((profile != EEsProfile && version >= 150) ||
         (profile == EEsProfile && version >= 310)) {
@@ -340,6 +351,7 @@
         (profile == EEsProfile && version >= 310))
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangGeometry, source,
                                    infoSink, commonTable, symbolTables);
+#endif
 
     // check for compute
     if ((profile != EEsProfile && version >= 420) ||
@@ -347,20 +359,19 @@
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, source,
                                    infoSink, commonTable, symbolTables);
 
-#ifdef NV_EXTENSIONS
     // check for ray tracing stages
     if (profile != EEsProfile && version >= 450) {
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangRayGenNV, source,
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangRayGen, source,
             infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangIntersectNV, source,
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangIntersect, source,
             infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangAnyHitNV, source,
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangAnyHit, source,
             infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangClosestHitNV, source,
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangClosestHit, source,
             infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMissNV, source,
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMiss, source,
             infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCallableNV, source,
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCallable, source,
             infoSink, commonTable, symbolTables);
     }
 
@@ -375,7 +386,6 @@
         (profile == EEsProfile && version >= 320))
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTaskNV, source,
                                    infoSink, commonTable, symbolTables);
-#endif
 
     return true;
 }
@@ -474,6 +484,18 @@
     glslang::ReleaseGlobalLock();
 }
 
+// Function to Print all builtins
+void DumpBuiltinSymbolTable(TInfoSink& infoSink, const TSymbolTable& symbolTable)
+{
+#ifndef GLSLANG_WEB
+    infoSink.debug << "BuiltinSymbolTable {\n";
+
+    symbolTable.dump(infoSink, true);
+
+    infoSink.debug << "}\n";
+#endif
+}
+
 // Return true if the shader was correctly specified for version/profile/stage.
 bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNotFirst, int defaultVersion,
                           EShSource source, int& version, EProfile& profile, const SpvVersion& spvVersion)
@@ -569,6 +591,7 @@
         break;
     }
 
+#ifndef GLSLANG_WEB
     // Correct for stage type...
     switch (stage) {
     case EShLangGeometry:
@@ -600,13 +623,12 @@
             version = profile == EEsProfile ? 310 : 420;
         }
         break;
-#ifdef NV_EXTENSIONS
-    case EShLangRayGenNV:
-    case EShLangIntersectNV:
-    case EShLangAnyHitNV:
-    case EShLangClosestHitNV:
-    case EShLangMissNV:
-    case EShLangCallableNV:
+    case EShLangRayGen:
+    case EShLangIntersect:
+    case EShLangAnyHit:
+    case EShLangClosestHit:
+    case EShLangMiss:
+    case EShLangCallable:
         if (profile == EEsProfile || version < 460) {
             correct = false;
             infoSink.info.message(EPrefixError, "#version: ray tracing shaders require non-es profile with version 460 or above");
@@ -621,7 +643,6 @@
             infoSink.info.message(EPrefixError, "#version: mesh/task shaders require es profile with version 320 or above, or non-es profile with version 450 or above");
             version = profile == EEsProfile ? 320 : 450;
         }
-#endif
     default:
         break;
     }
@@ -634,15 +655,10 @@
     // Check for SPIR-V compatibility
     if (spvVersion.spv != 0) {
         switch (profile) {
-        case  EEsProfile:
-            if (spvVersion.vulkan > 0 && version < 310) {
+        case EEsProfile:
+            if (version < 310) {
                 correct = false;
-                infoSink.info.message(EPrefixError, "#version: ES shaders for Vulkan SPIR-V require version 310 or higher");
-                version = 310;
-            }
-            if (spvVersion.openGl >= 100) {
-                correct = false;
-                infoSink.info.message(EPrefixError, "#version: ES shaders for OpenGL SPIR-V are not supported");
+                infoSink.info.message(EPrefixError, "#version: ES shaders for SPIR-V require version 310 or higher");
                 version = 310;
             }
             break;
@@ -663,6 +679,7 @@
             break;
         }
     }
+#endif
 
     return correct;
 }
@@ -699,6 +716,9 @@
             case EShClientOpenGL:
                 spvVersion.openGl = environment->input.dialectVersion;
                 break;
+            case EShClientCount:
+                assert(0);
+                break;
             }
             switch (environment->input.languageFamily) {
             case EShSourceNone:
@@ -711,6 +731,9 @@
                 source = EShSourceHlsl;
                 messages = static_cast<EShMessages>(messages | EShMsgReadHlsl);
                 break;
+            case EShSourceCount:
+                assert(0);
+                break;
             }
         }
 
@@ -821,13 +844,17 @@
 
     // Get all the stages, languages, clients, and other environment
     // stuff sorted out.
-    EShSource source = (messages & EShMsgReadHlsl) != 0 ? EShSourceHlsl : EShSourceGlsl;
+    EShSource sourceGuess = (messages & EShMsgReadHlsl) != 0 ? EShSourceHlsl : EShSourceGlsl;
     SpvVersion spvVersion;
     EShLanguage stage = compiler->getLanguage();
-    TranslateEnvironment(environment, messages, source, stage, spvVersion);
+    TranslateEnvironment(environment, messages, sourceGuess, stage, spvVersion);
+#ifdef ENABLE_HLSL
+    EShSource source = sourceGuess;
     if (environment != nullptr && environment->target.hlslFunctionality1)
         intermediate.setHlslFunctionality1();
-
+#else
+    const EShSource source = EShSourceGlsl;
+#endif
     // First, without using the preprocessor or parser, find the #version, so we know what
     // symbol tables, processing rules, etc. to set up.  This does not need the extra strings
     // outlined above, just the user shader, after the system and user preambles.
@@ -840,6 +867,7 @@
                                 : userInput.scanVersion(version, profile, versionNotFirstToken);
     bool versionNotFound = version == 0;
     if (forceDefaultVersionAndProfile && source == EShSourceGlsl) {
+#ifndef GLSLANG_WEB
         if (! (messages & EShMsgSuppressWarnings) && ! versionNotFound &&
             (version != defaultVersion || profile != defaultProfile)) {
             compiler->infoSink.info << "Warning, (version, profile) forced to be ("
@@ -847,7 +875,7 @@
                                     << "), while in source code it is ("
                                     << version << ", " << ProfileName(profile) << ")\n";
         }
-
+#endif
         if (versionNotFound) {
             versionNotFirstToken = false;
             versionNotFirst = false;
@@ -859,7 +887,13 @@
 
     bool goodVersion = DeduceVersionProfile(compiler->infoSink, stage,
                                             versionNotFirst, defaultVersion, source, version, profile, spvVersion);
+#ifdef GLSLANG_WEB
+    profile = EEsProfile;
+    version = 310;
+#endif
+
     bool versionWillBeError = (versionNotFound || (profile == EEsProfile && version >= 300 && versionNotFirst));
+#ifndef GLSLANG_WEB
     bool warnVersionNotFirst = false;
     if (! versionWillBeError && versionNotFirstToken) {
         if (messages & EShMsgRelaxedErrors)
@@ -867,6 +901,7 @@
         else
             versionWillBeError = true;
     }
+#endif
 
     intermediate.setSource(source);
     intermediate.setVersion(version);
@@ -875,8 +910,10 @@
     RecordProcesses(intermediate, messages, sourceEntryPointName);
     if (spvVersion.vulkan > 0)
         intermediate.setOriginUpperLeft();
+#ifdef ENABLE_HLSL
     if ((messages & EShMsgHlslOffsets) || source == EShSourceHlsl)
         intermediate.setHlslOffsets();
+#endif
     if (messages & EShMsgDebugInfo) {
         intermediate.setSourceFile(names[numPre]);
         for (int s = 0; s < numStrings; ++s) {
@@ -905,6 +942,9 @@
         return false;
     }
 
+    if (messages & EShMsgBuiltinSymbolTable)
+        DumpBuiltinSymbolTable(compiler->infoSink, *symbolTable);
+
     //
     // Now we can process the full shader under proper symbols and rules.
     //
@@ -923,11 +963,13 @@
     parseContext->setLimits(*resources);
     if (! goodVersion)
         parseContext->addError();
+#ifndef GLSLANG_WEB
     if (warnVersionNotFirst) {
         TSourceLoc loc;
         loc.init();
         parseContext->warn(loc, "Illegal to have non-comment, non-whitespace tokens before #version", "#version", "");
     }
+#endif
 
     parseContext->initializeExtensionBehavior();
 
@@ -958,6 +1000,8 @@
     return success;
 }
 
+#ifndef GLSLANG_WEB
+
 // Responsible for keeping track of the most recent source string and line in
 // the preprocessor and outputting newlines appropriately if the source string
 // or line changes.
@@ -1154,6 +1198,8 @@
     std::string* outputString;
 };
 
+#endif
+
 // DoFullParse is a valid ProcessingConext template argument for fully
 // parsing the shader.  It populates the "intermediate" with the AST.
 struct DoFullParse{
@@ -1184,6 +1230,7 @@
     }
 };
 
+#ifndef GLSLANG_WEB
 // Take a single compilation unit, and run the preprocessor on it.
 // Return: True if there were no issues found in preprocessing,
 //         False if during preprocessing any unknown version, pragmas or
@@ -1216,6 +1263,7 @@
                            forwardCompatible, messages, intermediate, parser,
                            false, includer);
 }
+#endif
 
 //
 // do a partial compile on the given strings for a single compilation unit
@@ -1335,7 +1383,7 @@
 //
 // Cleanup symbol tables
 //
-int __fastcall ShFinalize()
+int ShFinalize()
 {
     glslang::GetGlobalLock();
     --NumberOfClients;
@@ -1729,11 +1777,18 @@
     sourceEntryPointName = name;
 }
 
+// Log initial settings and transforms.
+// See comment for class TProcesses.
 void TShader::addProcesses(const std::vector<std::string>& p)
 {
     intermediate->addProcesses(p);
 }
 
+void TShader::setInvertY(bool invert)                   { intermediate->setInvertY(invert); }
+void TShader::setNanMinMaxClamp(bool useNonNan)         { intermediate->setNanMinMaxClamp(useNonNan); }
+
+#ifndef GLSLANG_WEB
+
 // Set binding base for given resource type
 void TShader::setShiftBinding(TResourceType res, unsigned int base) {
     intermediate->setShiftBinding(res, base);
@@ -1761,7 +1816,7 @@
 // Enables binding automapping using TIoMapper
 void TShader::setAutoMapBindings(bool map)              { intermediate->setAutoMapBindings(map); }
 // Enables position.Y output negation in vertex shader
-void TShader::setInvertY(bool invert)                   { intermediate->setInvertY(invert); }
+
 // Fragile: currently within one stage: simple auto-assignment of location
 void TShader::setAutoMapLocations(bool map)             { intermediate->setAutoMapLocations(map); }
 void TShader::addUniformLocationOverride(const char* name, int loc)
@@ -1772,12 +1827,16 @@
 {
     intermediate->setUniformLocationBase(base);
 }
-// See comment above TDefaultHlslIoMapper in iomapper.cpp:
-void TShader::setHlslIoMapping(bool hlslIoMap)          { intermediate->setHlslIoMapping(hlslIoMap); }
-void TShader::setFlattenUniformArrays(bool flatten)     { intermediate->setFlattenUniformArrays(flatten); }
 void TShader::setNoStorageFormat(bool useUnknownFormat) { intermediate->setNoStorageFormat(useUnknownFormat); }
 void TShader::setResourceSetBinding(const std::vector<std::string>& base)   { intermediate->setResourceSetBinding(base); }
 void TShader::setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { intermediate->setTextureSamplerTransformMode(mode); }
+#endif
+
+#ifdef ENABLE_HLSL
+// See comment above TDefaultHlslIoMapper in iomapper.cpp:
+void TShader::setHlslIoMapping(bool hlslIoMap)          { intermediate->setHlslIoMapping(hlslIoMap); }
+void TShader::setFlattenUniformArrays(bool flatten)     { intermediate->setFlattenUniformArrays(flatten); }
+#endif
 
 //
 // Turn the shader strings into a parse tree in the TIntermediate.
@@ -1801,6 +1860,7 @@
                            &environment);
 }
 
+#ifndef GLSLANG_WEB
 // Fill in a string with the result of preprocessing ShaderStrings
 // Returns true if all extensions, pragmas and version strings were valid.
 //
@@ -1825,6 +1885,7 @@
                               defaultProfile, forceDefaultVersionAndProfile,
                               forwardCompatible, message, includer, *intermediate, output_string);
 }
+#endif
 
 const char* TShader::getInfoLog()
 {
@@ -1836,7 +1897,11 @@
     return infoSink->debug.c_str();
 }
 
-TProgram::TProgram() : reflection(0), ioMapper(nullptr), linked(false)
+TProgram::TProgram() :
+#ifndef GLSLANG_WEB
+    reflection(0),
+#endif
+    linked(false)
 {
     pool = new TPoolAllocator;
     infoSink = new TInfoSink;
@@ -1848,9 +1913,10 @@
 
 TProgram::~TProgram()
 {
-    delete ioMapper;
     delete infoSink;
+#ifndef GLSLANG_WEB
     delete reflection;
+#endif
 
     for (int s = 0; s < EShLangCount; ++s)
         if (newedIntermediate[s])
@@ -1895,6 +1961,7 @@
     if (stages[stage].size() == 0)
         return true;
 
+#ifndef GLSLANG_WEB
     int numEsShaders = 0, numNonEsShaders = 0;
     for (auto it = stages[stage].begin(); it != stages[stage].end(); ++it) {
         if ((*it)->intermediate->getProfile() == EEsProfile) {
@@ -1943,7 +2010,9 @@
         for (it = stages[stage].begin(); it != stages[stage].end(); ++it)
             intermediate[stage]->merge(*infoSink, *(*it)->intermediate);
     }
-
+#else
+    intermediate[stage] = stages[stage].front()->intermediate;
+#endif
     intermediate[stage]->finalCheck(*infoSink, (messages & EShMsgKeepUncalled) != 0);
 
     if (messages & EShMsgAST)
@@ -1962,16 +2031,33 @@
     return infoSink->debug.c_str();
 }
 
+#ifndef GLSLANG_WEB
+
 //
 // Reflection implementation.
 //
 
-bool TProgram::buildReflection()
+bool TProgram::buildReflection(int opts)
 {
-    if (! linked || reflection)
+    if (! linked || reflection != nullptr)
         return false;
 
-    reflection = new TReflection;
+    int firstStage = EShLangVertex, lastStage = EShLangFragment;
+
+    if (opts & EShReflectionIntermediateIO) {
+        // if we're reflecting intermediate I/O, determine the first and last stage linked and use those as the
+        // boundaries for which stages generate pipeline inputs/outputs
+        firstStage = EShLangCount;
+        lastStage = 0;
+        for (int s = 0; s < EShLangCount; ++s) {
+            if (intermediate[s]) {
+                firstStage = std::min(firstStage, s);
+                lastStage = std::max(lastStage, s);
+            }
+        }
+    }
+
+    reflection = new TReflection((EShReflectionOptions)opts, (EShLanguage)firstStage, (EShLanguage)lastStage);
 
     for (int s = 0; s < EShLangCount; ++s) {
         if (intermediate[s]) {
@@ -1983,48 +2069,50 @@
     return true;
 }
 
-int TProgram::getNumLiveUniformVariables() const             { return reflection->getNumUniforms(); }
-int TProgram::getNumLiveUniformBlocks() const                { return reflection->getNumUniformBlocks(); }
-const char* TProgram::getUniformName(int index) const        { return reflection->getUniform(index).name.c_str(); }
-const char* TProgram::getUniformBlockName(int index) const   { return reflection->getUniformBlock(index).name.c_str(); }
-int TProgram::getUniformBlockSize(int index) const           { return reflection->getUniformBlock(index).size; }
-int TProgram::getUniformIndex(const char* name) const        { return reflection->getIndex(name); }
-int TProgram::getUniformBinding(int index) const             { return reflection->getUniform(index).getBinding(); }
-EShLanguageMask TProgram::getUniformStages(int index) const  { return reflection->getUniform(index).stages; }
-int TProgram::getUniformBlockBinding(int index) const        { return reflection->getUniformBlock(index).getBinding(); }
-int TProgram::getUniformBlockIndex(int index) const          { return reflection->getUniform(index).index; }
-int TProgram::getUniformBlockCounterIndex(int index) const   { return reflection->getUniformBlock(index).counterIndex; }
-int TProgram::getUniformType(int index) const                { return reflection->getUniform(index).glDefineType; }
-int TProgram::getUniformBufferOffset(int index) const        { return reflection->getUniform(index).offset; }
-int TProgram::getUniformArraySize(int index) const           { return reflection->getUniform(index).size; }
-int TProgram::getNumLiveAttributes() const                   { return reflection->getNumAttributes(); }
-const char* TProgram::getAttributeName(int index) const      { return reflection->getAttribute(index).name.c_str(); }
-int TProgram::getAttributeType(int index) const              { return reflection->getAttribute(index).glDefineType; }
-const TType* TProgram::getAttributeTType(int index) const    { return reflection->getAttribute(index).getType(); }
-const TType* TProgram::getUniformTType(int index) const      { return reflection->getUniform(index).getType(); }
-const TType* TProgram::getUniformBlockTType(int index) const { return reflection->getUniformBlock(index).getType(); }
-unsigned TProgram::getLocalSize(int dim) const               { return reflection->getLocalSize(dim); }
+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); }
 
-void TProgram::dumpReflection()                      { reflection->dump(); }
+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(); }
+const TObjectReflection& TProgram::getUniformBlock(int index) const   { return reflection->getUniformBlock(index); }
+int TProgram::getNumPipeInputs() const                                { return reflection->getNumPipeInputs(); }
+const TObjectReflection& TProgram::getPipeInput(int index) const      { return reflection->getPipeInput(index); }
+int TProgram::getNumPipeOutputs() const                               { return reflection->getNumPipeOutputs(); }
+const TObjectReflection& TProgram::getPipeOutput(int index) const     { return reflection->getPipeOutput(index); }
+int TProgram::getNumBufferVariables() const                           { return reflection->getNumBufferVariables(); }
+const TObjectReflection& TProgram::getBufferVariable(int index) const { return reflection->getBufferVariable(index); }
+int TProgram::getNumBufferBlocks() const                              { return reflection->getNumStorageBuffers(); }
+const TObjectReflection& TProgram::getBufferBlock(int index) const    { return reflection->getStorageBufferBlock(index); }
+int TProgram::getNumAtomicCounters() const                            { return reflection->getNumAtomicCounters(); }
+const TObjectReflection& TProgram::getAtomicCounter(int index) const  { return reflection->getAtomicCounter(index); }
+void TProgram::dumpReflection() { if (reflection != nullptr) reflection->dump(); }
 
 //
 // I/O mapping implementation.
 //
-bool TProgram::mapIO(TIoMapResolver* resolver)
+bool TProgram::mapIO(TIoMapResolver* pResolver, TIoMapper* pIoMapper)
 {
-    if (! linked || ioMapper)
+    if (! linked)
         return false;
-
-    ioMapper = new TIoMapper;
-
+    TIoMapper* ioMapper = nullptr;
+    TIoMapper defaultIOMapper;
+    if (pIoMapper == nullptr)
+        ioMapper = &defaultIOMapper;
+    else
+        ioMapper = pIoMapper;
     for (int s = 0; s < EShLangCount; ++s) {
         if (intermediate[s]) {
-            if (! ioMapper->addStage((EShLanguage)s, *intermediate[s], *infoSink, resolver))
+            if (! ioMapper->addStage((EShLanguage)s, *intermediate[s], *infoSink, pResolver))
                 return false;
         }
     }
 
-    return true;
+    return ioMapper->doMap(pResolver, *infoSink);
 }
 
+#endif // GLSLANG_WEB
+
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp
old mode 100755
new mode 100644
index c164ac8..06b5a81
--- a/glslang/MachineIndependent/SymbolTable.cpp
+++ b/glslang/MachineIndependent/SymbolTable.cpp
@@ -3,6 +3,7 @@
 // Copyright (C) 2012-2013 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
 // Copyright (C) 2015-2018 Google, Inc.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -61,61 +62,67 @@
 
     switch (basicType) {
     case EbtFloat:              mangledName += 'f';      break;
-    case EbtDouble:             mangledName += 'd';      break;
-    case EbtFloat16:            mangledName += "f16";    break;
     case EbtInt:                mangledName += 'i';      break;
     case EbtUint:               mangledName += 'u';      break;
+    case EbtBool:               mangledName += 'b';      break;
+#ifndef GLSLANG_WEB
+    case EbtDouble:             mangledName += 'd';      break;
+    case EbtFloat16:            mangledName += "f16";    break;
     case EbtInt8:               mangledName += "i8";     break;
     case EbtUint8:              mangledName += "u8";     break;
     case EbtInt16:              mangledName += "i16";    break;
     case EbtUint16:             mangledName += "u16";    break;
     case EbtInt64:              mangledName += "i64";    break;
     case EbtUint64:             mangledName += "u64";    break;
-    case EbtBool:               mangledName += 'b';      break;
     case EbtAtomicUint:         mangledName += "au";     break;
-#ifdef NV_EXTENSIONS
-    case EbtAccStructNV:        mangledName += "asnv";   break;
+    case EbtAccStruct:          mangledName += "as";     break;
+    case EbtRayQuery:           mangledName += "rq";     break;
 #endif
     case EbtSampler:
         switch (sampler.type) {
-#ifdef AMD_EXTENSIONS
+#ifndef GLSLANG_WEB
         case EbtFloat16: mangledName += "f16"; break;
 #endif
         case EbtInt:   mangledName += "i"; break;
         case EbtUint:  mangledName += "u"; break;
         default: break; // some compilers want this
         }
-        if (sampler.image)
-            mangledName += "I";  // a normal image
-        else if (sampler.sampler)
+        if (sampler.isImageClass())
+            mangledName += "I";  // a normal image or subpass
+        else if (sampler.isPureSampler())
             mangledName += "p";  // a "pure" sampler
-        else if (!sampler.combined)
+        else if (!sampler.isCombined())
             mangledName += "t";  // a "pure" texture
         else
             mangledName += "s";  // traditional combined sampler
-        if (sampler.arrayed)
+        if (sampler.isArrayed())
             mangledName += "A";
-        if (sampler.shadow)
+        if (sampler.isShadow())
             mangledName += "S";
-        if (sampler.external)
+        if (sampler.isExternal())
             mangledName += "E";
+        if (sampler.isYuv())
+            mangledName += "Y";
         switch (sampler.dim) {
-        case Esd1D:       mangledName += "1";  break;
         case Esd2D:       mangledName += "2";  break;
         case Esd3D:       mangledName += "3";  break;
         case EsdCube:     mangledName += "C";  break;
+#ifndef GLSLANG_WEB
+        case Esd1D:       mangledName += "1";  break;
         case EsdRect:     mangledName += "R2"; break;
         case EsdBuffer:   mangledName += "B";  break;
         case EsdSubpass:  mangledName += "P";  break;
+#endif
         default: break; // some compilers want this
         }
 
+#ifdef ENABLE_HLSL
         if (sampler.hasReturnStruct()) {
             // Name mangle for sampler return struct uses struct table index.
             mangledName += "-tx-struct";
 
             char text[16]; // plenty enough space for the small integers.
-            snprintf(text, sizeof(text), "%d-", sampler.structReturnIndex);
+            snprintf(text, sizeof(text), "%u-", sampler.getStructReturnIndex());
             mangledName += text;
         } else {
             switch (sampler.getVectorSize()) {
@@ -125,8 +132,9 @@
             case 4: break; // default to prior name mangle behavior
             }
         }
+#endif
 
-        if (sampler.ms)
+        if (sampler.isMultiSample())
             mangledName += "M";
         break;
     case EbtStruct:
@@ -170,44 +178,88 @@
     }
 }
 
+#ifndef GLSLANG_WEB
+
 //
 // Dump functions.
 //
 
-void TVariable::dump(TInfoSink& infoSink) const
+void TSymbol::dumpExtensions(TInfoSink& infoSink) const
 {
-    infoSink.debug << getName().c_str() << ": " << type.getStorageQualifierString() << " " << type.getBasicTypeString();
-    if (type.isArray()) {
-        infoSink.debug << "[0]";
+    int numExtensions = getNumExtensions();
+    if (numExtensions) {
+        infoSink.debug << " <";
+
+        for (int i = 0; i < numExtensions; i++)
+            infoSink.debug << getExtensions()[i] << ",";
+
+        infoSink.debug << ">";
     }
+}
+
+void TVariable::dump(TInfoSink& infoSink, bool complete) const
+{
+    if (complete) {
+        infoSink.debug << getName().c_str() << ": " << type.getCompleteString();
+        dumpExtensions(infoSink);
+    } else {
+        infoSink.debug << getName().c_str() << ": " << type.getStorageQualifierString() << " "
+                       << type.getBasicTypeString();
+
+        if (type.isArray())
+            infoSink.debug << "[0]";
+    }
+
     infoSink.debug << "\n";
 }
 
-void TFunction::dump(TInfoSink& infoSink) const
+void TFunction::dump(TInfoSink& infoSink, bool complete) const
 {
-    infoSink.debug << getName().c_str() << ": " <<  returnType.getBasicTypeString() << " " << getMangledName().c_str() << "\n";
+    if (complete) {
+        infoSink.debug << getName().c_str() << ": " << returnType.getCompleteString() << " " << getName().c_str()
+                       << "(";
+
+        int numParams = getParamCount();
+        for (int i = 0; i < numParams; i++) {
+            const TParameter &param = parameters[i];
+            infoSink.debug << param.type->getCompleteString() << " "
+                           << (param.type->isStruct() ? "of " + param.type->getTypeName() + " " : "")
+                           << (param.name ? *param.name : "") << (i < numParams - 1 ? "," : "");
+        }
+
+        infoSink.debug << ")";
+        dumpExtensions(infoSink);
+    } else {
+        infoSink.debug << getName().c_str() << ": " << returnType.getBasicTypeString() << " "
+                       << getMangledName().c_str() << "n";
+    }
+
+    infoSink.debug << "\n";
 }
 
-void TAnonMember::dump(TInfoSink& TInfoSink) const
+void TAnonMember::dump(TInfoSink& TInfoSink, bool) const
 {
-    TInfoSink.debug << "anonymous member " << getMemberNumber() << " of " << getAnonContainer().getName().c_str() << "\n";
+    TInfoSink.debug << "anonymous member " << getMemberNumber() << " of " << getAnonContainer().getName().c_str()
+                    << "\n";
 }
 
-void TSymbolTableLevel::dump(TInfoSink &infoSink) const
+void TSymbolTableLevel::dump(TInfoSink& infoSink, bool complete) const
 {
     tLevel::const_iterator it;
     for (it = level.begin(); it != level.end(); ++it)
-        (*it).second->dump(infoSink);
+        (*it).second->dump(infoSink, complete);
 }
 
-void TSymbolTable::dump(TInfoSink &infoSink) const
+void TSymbolTable::dump(TInfoSink& infoSink, bool complete) const
 {
     for (int level = currentLevel(); level >= 0; --level) {
         infoSink.debug << "LEVEL " << level << "\n";
-        table[level]->dump(infoSink);
+        table[level]->dump(infoSink, complete);
     }
 }
 
+#endif
+
 //
 // Functions have buried pointers to delete.
 //
@@ -287,19 +339,25 @@
 {
     type.deepCopy(copyOf.type);
     userType = copyOf.userType;
-    numExtensions = 0;
-    extensions = 0;
-    if (copyOf.numExtensions != 0)
-        setExtensions(copyOf.numExtensions, copyOf.extensions);
+
+    // we don't support specialization-constant subtrees in cloned tables, only extensions
+    constSubtree = nullptr;
+    extensions = nullptr;
+    memberExtensions = nullptr;
+    if (copyOf.getNumExtensions() > 0)
+        setExtensions(copyOf.getNumExtensions(), copyOf.getExtensions());
+    if (copyOf.hasMemberExtensions()) {
+        for (int m = 0; m < (int)copyOf.type.getStruct()->size(); ++m) {
+            if (copyOf.getNumMemberExtensions(m) > 0)
+                setMemberExtensions(m, copyOf.getNumMemberExtensions(m), copyOf.getMemberExtensions(m));
+        }
+    }
 
     if (! copyOf.constArray.empty()) {
         assert(! copyOf.type.isStruct());
         TConstUnionArray newArray(copyOf.constArray, 0, copyOf.constArray.size());
         constArray = newArray;
     }
-
-    // don't support specialization-constant subtrees in cloned tables
-    constSubtree = nullptr;
 }
 
 TVariable* TVariable::clone() const
@@ -317,10 +375,9 @@
         parameters.back().copyParam(copyOf.parameters[i]);
     }
 
-    numExtensions = 0;
-    extensions = 0;
-    if (copyOf.extensions != 0)
-        setExtensions(copyOf.numExtensions, copyOf.extensions);
+    extensions = nullptr;
+    if (copyOf.getNumExtensions() > 0)
+        setExtensions(copyOf.getNumExtensions(), copyOf.getExtensions());
     returnType.deepCopy(copyOf.returnType);
     mangledName = copyOf.mangledName;
     op = copyOf.op;
@@ -359,12 +416,12 @@
         const TAnonMember* anon = iter->second->getAsAnonMember();
         if (anon) {
             // Insert all the anonymous members of this same container at once,
-            // avoid inserting the other members in the future, once this has been done,
+            // avoid inserting the remaining members in the future, once this has been done,
             // allowing them to all be part of the same new container.
             if (! containerCopied[anon->getAnonId()]) {
                 TVariable* container = anon->getAnonContainer().clone();
                 container->changeName(NewPoolTString(""));
-                // insert the whole container
+                // insert the container and all its members
                 symTableLevel->insert(*container, false);
                 containerCopied[anon->getAnonId()] = true;
             }
diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h
old mode 100755
new mode 100644
index a69d87e..40ca3da
--- a/glslang/MachineIndependent/SymbolTable.h
+++ b/glslang/MachineIndependent/SymbolTable.h
@@ -79,10 +79,12 @@
 class TFunction;
 class TAnonMember;
 
+typedef TVector<const char*> TExtensionList;
+
 class TSymbol {
 public:
     POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator())
-    explicit TSymbol(const TString *n) :  name(n), numExtensions(0), extensions(0), writable(true) { }
+    explicit TSymbol(const TString *n) :  name(n), extensions(0), writable(true) { }
     virtual TSymbol* clone() const = 0;
     virtual ~TSymbol() { }  // rely on all symbol owned memory coming from the pool
 
@@ -104,18 +106,21 @@
     virtual TType& getWritableType() = 0;
     virtual void setUniqueId(int id) { uniqueId = id; }
     virtual int getUniqueId() const { return uniqueId; }
-    virtual void setExtensions(int num, const char* const exts[])
+    virtual void setExtensions(int numExts, const char* const exts[])
     {
         assert(extensions == 0);
-        assert(num > 0);
-        numExtensions = num;
-        extensions = NewPoolObject(exts[0], num);
-        for (int e = 0; e < num; ++e)
-            extensions[e] = exts[e];
+        assert(numExts > 0);
+        extensions = NewPoolObject(extensions);
+        for (int e = 0; e < numExts; ++e)
+            extensions->push_back(exts[e]);
     }
-    virtual int getNumExtensions() const { return numExtensions; }
-    virtual const char** getExtensions() const { return extensions; }
-    virtual void dump(TInfoSink &infoSink) const = 0;
+    virtual int getNumExtensions() const { return extensions == nullptr ? 0 : (int)extensions->size(); }
+    virtual const char** getExtensions() const { return extensions->data(); }
+
+#ifndef GLSLANG_WEB
+    virtual void dump(TInfoSink& infoSink, bool complete = false) const = 0;
+    void dumpExtensions(TInfoSink& infoSink) const;
+#endif
 
     virtual bool isReadOnly() const { return ! writable; }
     virtual void makeReadOnly() { writable = false; }
@@ -129,8 +134,7 @@
 
     // For tracking what extensions must be present
     // (don't use if correct version/profile is present).
-    int numExtensions;
-    const char** extensions; // an array of pointers to existing constant char strings
+    TExtensionList* extensions; // an array of pointers to existing constant char strings
 
     //
     // N.B.: Non-const functions that will be generally used should assert on this,
@@ -155,7 +159,9 @@
         : TSymbol(name),
           userType(uT),
           constSubtree(nullptr),
-          anonId(-1) { type.shallowCopy(t); }
+          memberExtensions(nullptr),
+          anonId(-1)
+        { type.shallowCopy(t); }
     virtual TVariable* clone() const;
     virtual ~TVariable() { }
 
@@ -172,7 +178,27 @@
     virtual void setAnonId(int i) { anonId = i; }
     virtual int getAnonId() const { return anonId; }
 
-    virtual void dump(TInfoSink &infoSink) const;
+    virtual void setMemberExtensions(int member, int numExts, const char* const exts[])
+    {
+        assert(type.isStruct());
+        assert(numExts > 0);
+        if (memberExtensions == nullptr) {
+            memberExtensions = NewPoolObject(memberExtensions);
+            memberExtensions->resize(type.getStruct()->size());
+        }
+        for (int e = 0; e < numExts; ++e)
+            (*memberExtensions)[member].push_back(exts[e]);
+    }
+    virtual bool hasMemberExtensions() const { return memberExtensions != nullptr; }
+    virtual int getNumMemberExtensions(int member) const 
+    {
+        return memberExtensions == nullptr ? 0 : (int)(*memberExtensions)[member].size();
+    }
+    virtual const char** getMemberExtensions(int member) const { return (*memberExtensions)[member].data(); }
+
+#ifndef GLSLANG_WEB
+    virtual void dump(TInfoSink& infoSink, bool complete = false) const;
+#endif
 
 protected:
     explicit TVariable(const TVariable&);
@@ -180,15 +206,14 @@
 
     TType type;
     bool userType;
+
     // we are assuming that Pool Allocator will free the memory allocated to unionArray
     // when this object is destroyed
 
-    // TODO: these two should be a union
-    // A variable could be a compile-time constant, or a specialization
-    // constant, or neither, but never both.
-    TConstUnionArray constArray;  // for compile-time constant value
-    TIntermTyped* constSubtree;   // for specialization constant computation
-    int anonId;                   // the ID used for anonymous blocks: TODO: see if uniqueId could serve a dual purpose
+    TConstUnionArray constArray;               // for compile-time constant value
+    TIntermTyped* constSubtree;                // for specialization constant computation
+    TVector<TExtensionList>* memberExtensions; // per-member extension list, allocated only when needed
+    int anonId; // the ID used for anonymous blocks: TODO: see if uniqueId could serve a dual purpose
 };
 
 //
@@ -294,7 +319,9 @@
     virtual TParameter& operator[](int i) { assert(writable); return parameters[i]; }
     virtual const TParameter& operator[](int i) const { return parameters[i]; }
 
-    virtual void dump(TInfoSink &infoSink) const override;
+#ifndef GLSLANG_WEB
+    virtual void dump(TInfoSink& infoSink, bool complete = false) const override;
+#endif
 
 protected:
     explicit TFunction(const TFunction&);
@@ -325,35 +352,44 @@
 //
 class TAnonMember : public TSymbol {
 public:
-    TAnonMember(const TString* n, unsigned int m, const TVariable& a, int an) : TSymbol(n), anonContainer(a), memberNumber(m), anonId(an) { }
-    virtual TAnonMember* clone() const;
+    TAnonMember(const TString* n, unsigned int m, TVariable& a, int an) : TSymbol(n), anonContainer(a), memberNumber(m), anonId(an) { }
+    virtual TAnonMember* clone() const override;
     virtual ~TAnonMember() { }
 
-    virtual const TAnonMember* getAsAnonMember() const { return this; }
+    virtual const TAnonMember* getAsAnonMember() const override { return this; }
     virtual const TVariable& getAnonContainer() const { return anonContainer; }
     virtual unsigned int getMemberNumber() const { return memberNumber; }
 
-    virtual const TType& getType() const
+    virtual const TType& getType() const override
     {
         const TTypeList& types = *anonContainer.getType().getStruct();
         return *types[memberNumber].type;
     }
 
-    virtual TType& getWritableType()
+    virtual TType& getWritableType() override
     {
         assert(writable);
         const TTypeList& types = *anonContainer.getType().getStruct();
         return *types[memberNumber].type;
     }
 
+    virtual void setExtensions(int numExts, const char* const exts[]) override
+    {
+        anonContainer.setMemberExtensions(memberNumber, numExts, exts);
+    }
+    virtual int getNumExtensions() const override { return anonContainer.getNumMemberExtensions(memberNumber); }
+    virtual const char** getExtensions() const override { return anonContainer.getMemberExtensions(memberNumber); }
+
     virtual int getAnonId() const { return anonId; }
-    virtual void dump(TInfoSink &infoSink) const;
+#ifndef GLSLANG_WEB
+    virtual void dump(TInfoSink& infoSink, bool complete = false) const override;
+#endif
 
 protected:
     explicit TAnonMember(const TAnonMember&);
     TAnonMember& operator=(const TAnonMember&);
 
-    const TVariable& anonContainer;
+    TVariable& anonContainer;
     unsigned int memberNumber;
     int anonId;
 };
@@ -515,7 +551,9 @@
 
     void relateToOperator(const char* name, TOperator op);
     void setFunctionExtensions(const char* name, int num, const char* const extensions[]);
-    void dump(TInfoSink &infoSink) const;
+#ifndef GLSLANG_WEB
+    void dump(TInfoSink& infoSink, bool complete = false) const;
+#endif
     TSymbolTableLevel* clone() const;
     void readOnly();
 
@@ -789,15 +827,36 @@
             table[level]->setFunctionExtensions(name, num, extensions);
     }
 
-    void setVariableExtensions(const char* name, int num, const char* const extensions[])
+    void setVariableExtensions(const char* name, int numExts, const char* const extensions[])
     {
         TSymbol* symbol = find(TString(name));
-        if (symbol)
-            symbol->setExtensions(num, extensions);
+        if (symbol == nullptr)
+            return;
+
+        symbol->setExtensions(numExts, extensions);
+    }
+
+    void setVariableExtensions(const char* blockName, const char* name, int numExts, const char* const extensions[])
+    {
+        TSymbol* symbol = find(TString(blockName));
+        if (symbol == nullptr)
+            return;
+        TVariable* variable = symbol->getAsVariable();
+        assert(variable != nullptr);
+
+        const TTypeList& structure = *variable->getAsVariable()->getType().getStruct();
+        for (int member = 0; member < (int)structure.size(); ++member) {
+            if (structure[member].type->getFieldName().compare(name) == 0) {
+                variable->setMemberExtensions(member, numExts, extensions);
+                return;
+            }
+        }
     }
 
     int getMaxSymbolId() { return uniqueId; }
-    void dump(TInfoSink &infoSink) const;
+#ifndef GLSLANG_WEB
+    void dump(TInfoSink& infoSink, bool complete = false) const;
+#endif
     void copyTable(const TSymbolTable& copyOf);
 
     void setPreviousDefaultPrecisions(TPrecisionQualifier *p) { table[currentLevel()]->setPreviousDefaultPrecisions(p); }
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
old mode 100755
new mode 100644
index 8088845..a01f69b
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -2,7 +2,8 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
-// Copyright (C) 2015-2018 Google, Inc.
+// Copyright (C) 2015-2020 Google, Inc.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -145,6 +146,8 @@
 
 namespace glslang {
 
+#ifndef GLSLANG_WEB
+
 //
 // Initialize all extensions, almost always to 'disable', as once their features
 // are incorporated into a core version, their features are supported through allowing that
@@ -157,6 +160,7 @@
     extensionBehavior[E_GL_EXT_frag_depth]                   = EBhDisable;
     extensionBehavior[E_GL_OES_EGL_image_external]           = EBhDisable;
     extensionBehavior[E_GL_OES_EGL_image_external_essl3]     = EBhDisable;
+    extensionBehavior[E_GL_EXT_YUV_target]                   = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_texture_lod]           = EBhDisable;
     extensionBehavior[E_GL_EXT_shadow_samplers]              = EBhDisable;
     extensionBehavior[E_GL_ARB_texture_rectangle]            = EBhDisable;
@@ -169,8 +173,10 @@
     extensionBehavior[E_GL_ARB_tessellation_shader]          = EBhDisable;
     extensionBehavior[E_GL_ARB_enhanced_layouts]             = EBhDisable;
     extensionBehavior[E_GL_ARB_texture_cube_map_array]       = EBhDisable;
+    extensionBehavior[E_GL_ARB_texture_multisample]          = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_texture_lod]           = EBhDisable;
     extensionBehavior[E_GL_ARB_explicit_attrib_location]     = EBhDisable;
+    extensionBehavior[E_GL_ARB_explicit_uniform_location]    = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_image_load_store]      = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_atomic_counters]       = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_draw_parameters]       = EBhDisable;
@@ -179,6 +185,7 @@
     extensionBehavior[E_GL_ARB_shader_texture_image_samples] = EBhDisable;
     extensionBehavior[E_GL_ARB_viewport_array]               = EBhDisable;
     extensionBehavior[E_GL_ARB_gpu_shader_int64]             = EBhDisable;
+    extensionBehavior[E_GL_ARB_gpu_shader_fp64]              = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_ballot]                = EBhDisable;
     extensionBehavior[E_GL_ARB_sparse_texture2]              = EBhDisable;
     extensionBehavior[E_GL_ARB_sparse_texture_clamp]         = EBhDisable;
@@ -186,6 +193,12 @@
 //    extensionBehavior[E_GL_ARB_cull_distance]                = EBhDisable;    // present for 4.5, but need extension control over block members
     extensionBehavior[E_GL_ARB_post_depth_coverage]          = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_viewport_layer_array]  = EBhDisable;
+    extensionBehavior[E_GL_ARB_fragment_shader_interlock]    = EBhDisable;
+    extensionBehavior[E_GL_ARB_shader_clock]                 = EBhDisable;
+    extensionBehavior[E_GL_ARB_uniform_buffer_object]        = EBhDisable;
+    extensionBehavior[E_GL_ARB_sample_shading]               = EBhDisable;
+    extensionBehavior[E_GL_ARB_shader_bit_encoding]          = EBhDisable;
+    extensionBehavior[E_GL_ARB_shader_image_size]            = EBhDisable;
 
     extensionBehavior[E_GL_KHR_shader_subgroup_basic]            = EBhDisable;
     extensionBehavior[E_GL_KHR_shader_subgroup_vote]             = EBhDisable;
@@ -208,6 +221,10 @@
     extensionBehavior[E_GL_EXT_scalar_block_layout]                     = EBhDisable;
     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_debug_printf]                            = EBhDisable;
 
     extensionBehavior[E_GL_EXT_shader_16bit_storage]                    = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_8bit_storage]                     = EBhDisable;
@@ -216,7 +233,6 @@
     extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive]          = EBhDisable;
     extensionBehavior[E_GL_GOOGLE_include_directive]                 = EBhDisable;
 
-#ifdef AMD_EXTENSIONS
     extensionBehavior[E_GL_AMD_shader_ballot]                        = EBhDisable;
     extensionBehavior[E_GL_AMD_shader_trinary_minmax]                = EBhDisable;
     extensionBehavior[E_GL_AMD_shader_explicit_vertex_parameter]     = EBhDisable;
@@ -227,9 +243,9 @@
     extensionBehavior[E_GL_AMD_shader_image_load_store_lod]          = EBhDisable;
     extensionBehavior[E_GL_AMD_shader_fragment_mask]                 = EBhDisable;
     extensionBehavior[E_GL_AMD_gpu_shader_half_float_fetch]          = EBhDisable;
-#endif
 
-#ifdef NV_EXTENSIONS
+    extensionBehavior[E_GL_INTEL_shader_integer_functions2]          = EBhDisable;
+
     extensionBehavior[E_GL_NV_sample_mask_override_coverage]         = EBhDisable;
     extensionBehavior[E_SPV_NV_geometry_shader_passthrough]          = EBhDisable;
     extensionBehavior[E_GL_NV_viewport_array2]                       = EBhDisable;
@@ -245,7 +261,10 @@
     extensionBehavior[E_GL_NV_compute_shader_derivatives]            = EBhDisable;
     extensionBehavior[E_GL_NV_shader_texture_footprint]              = EBhDisable;
     extensionBehavior[E_GL_NV_mesh_shader]                           = EBhDisable;
-#endif
+
+    extensionBehavior[E_GL_NV_cooperative_matrix]                    = EBhDisable;
+    extensionBehavior[E_GL_NV_shader_sm_builtins]                    = EBhDisable;
+    extensionBehavior[E_GL_NV_integer_cooperative_matrix]            = EBhDisable;
 
     // AEP
     extensionBehavior[E_GL_ANDROID_extension_pack_es31a]             = EBhDisable;
@@ -276,8 +295,12 @@
     extensionBehavior[E_GL_OES_texture_cube_map_array]   = EBhDisable;
 
     // EXT extensions
-    extensionBehavior[E_GL_EXT_device_group]             = EBhDisable;
-    extensionBehavior[E_GL_EXT_multiview]                = EBhDisable;
+    extensionBehavior[E_GL_EXT_device_group]                = EBhDisable;
+    extensionBehavior[E_GL_EXT_multiview]                   = EBhDisable;
+    extensionBehavior[E_GL_EXT_shader_realtime_clock]       = EBhDisable;
+    extensionBehavior[E_GL_EXT_ray_tracing]                 = EBhDisable;
+    extensionBehavior[E_GL_EXT_ray_query]                   = EBhDisable;
+    extensionBehavior[E_GL_EXT_ray_flags_primitive_culling] = EBhDisable;
 
     // OVR extensions
     extensionBehavior[E_GL_OVR_multiview]                = EBhDisable;
@@ -292,27 +315,37 @@
     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
 
 // Get code that is not part of a shared symbol table, is specific to this shader,
 // or needed by the preprocessor (which does not use a shared symbol table).
 void TParseVersions::getPreamble(std::string& preamble)
 {
-    if (profile == EEsProfile) {
+    if (isEsProfile()) {
         preamble =
             "#define GL_ES 1\n"
             "#define GL_FRAGMENT_PRECISION_HIGH 1\n"
+#ifdef GLSLANG_WEB
+            ;
+#else
             "#define GL_OES_texture_3D 1\n"
             "#define GL_OES_standard_derivatives 1\n"
             "#define GL_EXT_frag_depth 1\n"
             "#define GL_OES_EGL_image_external 1\n"
             "#define GL_OES_EGL_image_external_essl3 1\n"
+            "#define GL_EXT_YUV_target 1\n"
             "#define GL_EXT_shader_texture_lod 1\n"
             "#define GL_EXT_shadow_samplers 1\n"
 
             // AEP
             "#define GL_ANDROID_extension_pack_es31a 1\n"
-            "#define GL_KHR_blend_equation_advanced 1\n"
             "#define GL_OES_sample_variables 1\n"
             "#define GL_OES_shader_image_atomic 1\n"
             "#define GL_OES_shader_multisample_interpolation 1\n"
@@ -340,11 +373,9 @@
             "#define GL_EXT_shader_non_constant_global_initializers 1\n"
             ;
 
-#ifdef NV_EXTENSIONS
-            if (profile == EEsProfile && version >= 300) {
+            if (isEsProfile() && version >= 300) {
                 preamble += "#define GL_NV_shader_noperspective_interpolation 1\n";
             }
-#endif
 
     } else {
         preamble =
@@ -358,8 +389,10 @@
             "#define GL_ARB_tessellation_shader 1\n"
             "#define GL_ARB_enhanced_layouts 1\n"
             "#define GL_ARB_texture_cube_map_array 1\n"
+            "#define GL_ARB_texture_multisample 1\n"
             "#define GL_ARB_shader_texture_lod 1\n"
             "#define GL_ARB_explicit_attrib_location 1\n"
+            "#define GL_ARB_explicit_uniform_location 1\n"
             "#define GL_ARB_shader_image_load_store 1\n"
             "#define GL_ARB_shader_atomic_counters 1\n"
             "#define GL_ARB_shader_draw_parameters 1\n"
@@ -368,12 +401,18 @@
             "#define GL_ARB_shader_texture_image_samples 1\n"
             "#define GL_ARB_viewport_array 1\n"
             "#define GL_ARB_gpu_shader_int64 1\n"
+            "#define GL_ARB_gpu_shader_fp64 1\n"
             "#define GL_ARB_shader_ballot 1\n"
             "#define GL_ARB_sparse_texture2 1\n"
             "#define GL_ARB_sparse_texture_clamp 1\n"
             "#define GL_ARB_shader_stencil_export 1\n"
+            "#define GL_ARB_sample_shading 1\n"
+            "#define GL_ARB_shader_image_size 1\n"
 //            "#define GL_ARB_cull_distance 1\n"    // present for 4.5, but need extension control over block members
             "#define GL_ARB_post_depth_coverage 1\n"
+            "#define GL_ARB_fragment_shader_interlock 1\n"
+            "#define GL_ARB_uniform_buffer_object 1\n"
+            "#define GL_ARB_shader_bit_encoding 1\n"
             "#define GL_EXT_shader_non_constant_global_initializers 1\n"
             "#define GL_EXT_shader_image_load_formatted 1\n"
             "#define GL_EXT_post_depth_coverage 1\n"
@@ -385,6 +424,10 @@
             "#define GL_EXT_scalar_block_layout 1\n"
             "#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"
+            "#define GL_EXT_debug_printf 1\n"
 
             // GL_KHR_shader_subgroup
             "#define GL_KHR_shader_subgroup_basic 1\n"
@@ -397,8 +440,11 @@
             "#define GL_KHR_shader_subgroup_quad 1\n"
 
             "#define E_GL_EXT_shader_atomic_int64 1\n"
+            "#define E_GL_EXT_shader_realtime_clock 1\n"
+            "#define E_GL_EXT_ray_tracing 1\n"
+            "#define E_GL_EXT_ray_query 1\n"
+            "#define E_GL_EXT_ray_flags_primitive_culling 1\n"
 
-#ifdef AMD_EXTENSIONS
             "#define GL_AMD_shader_ballot 1\n"
             "#define GL_AMD_shader_trinary_minmax 1\n"
             "#define GL_AMD_shader_explicit_vertex_parameter 1\n"
@@ -409,9 +455,9 @@
             "#define GL_AMD_shader_image_load_store_lod 1\n"
             "#define GL_AMD_shader_fragment_mask 1\n"
             "#define GL_AMD_gpu_shader_half_float_fetch 1\n"
-#endif
 
-#ifdef NV_EXTENSIONS
+            "#define GL_INTEL_shader_integer_functions2 1\n"
+
             "#define GL_NV_sample_mask_override_coverage 1\n"
             "#define GL_NV_geometry_shader_passthrough 1\n"
             "#define GL_NV_viewport_array2 1\n"
@@ -424,7 +470,9 @@
             "#define GL_NV_compute_shader_derivatives 1\n"
             "#define GL_NV_shader_texture_footprint 1\n"
             "#define GL_NV_mesh_shader 1\n"
-#endif
+            "#define GL_NV_cooperative_matrix 1\n"
+            "#define GL_NV_integer_cooperative_matrix 1\n"
+
             "#define GL_EXT_shader_explicit_arithmetic_types 1\n"
             "#define GL_EXT_shader_explicit_arithmetic_types_int8 1\n"
             "#define GL_EXT_shader_explicit_arithmetic_types_int16 1\n"
@@ -433,6 +481,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) {
@@ -442,13 +495,16 @@
             if (profile == ECompatibilityProfile)
                 preamble += "#define GL_compatibility_profile 1\n";
         }
+#endif // GLSLANG_WEB
     }
 
-    if ((profile != EEsProfile && version >= 140) ||
-        (profile == EEsProfile && version >= 310)) {
+#ifndef GLSLANG_WEB
+    if ((!isEsProfile() && version >= 140) ||
+        (isEsProfile() && version >= 310)) {
         preamble +=
             "#define GL_EXT_device_group 1\n"
             "#define GL_EXT_multiview 1\n"
+            "#define GL_NV_shader_sm_builtins 1\n"
             ;
     }
 
@@ -463,7 +519,9 @@
     preamble +=
             "#define GL_GOOGLE_cpp_style_line_directive 1\n"
             "#define GL_GOOGLE_include_directive 1\n"
+            "#define GL_KHR_blend_equation_advanced 1\n"
             ;
+#endif
 
     // #define VULKAN XXXX
     const int numberBufSize = 12;
@@ -474,6 +532,8 @@
         preamble += numberBuf;
         preamble += "\n";
     }
+
+#ifndef GLSLANG_WEB
     // #define GL_SPIRV XXXX
     if (spvVersion.openGl > 0) {
         preamble += "#define GL_SPIRV ";
@@ -481,22 +541,7 @@
         preamble += numberBuf;
         preamble += "\n";
     }
-
-}
-
-//
-// When to use requireProfile():
-//
-//     Use if only some profiles support a feature.  However, if within a profile the feature
-//     is version or extension specific, follow this call with calls to profileRequires().
-//
-// Operation:  If the current profile is not one of the profileMask,
-// give an error message.
-//
-void TParseVersions::requireProfile(const TSourceLoc& loc, int profileMask, const char* featureDesc)
-{
-    if (! (profile & profileMask))
-        error(loc, "not supported with this profile:", featureDesc, ProfileName(profile));
+#endif
 }
 
 //
@@ -506,18 +551,18 @@
 {
     switch(stage) {
     case EShLangVertex:         return "vertex";
+    case EShLangFragment:       return "fragment";
+    case EShLangCompute:        return "compute";
+#ifndef GLSLANG_WEB
     case EShLangTessControl:    return "tessellation control";
     case EShLangTessEvaluation: return "tessellation evaluation";
     case EShLangGeometry:       return "geometry";
-    case EShLangFragment:       return "fragment";
-    case EShLangCompute:        return "compute";
-#ifdef NV_EXTENSIONS
-    case EShLangRayGenNV:       return "ray-generation";
-    case EShLangIntersectNV:    return "intersection";
-    case EShLangAnyHitNV:       return "any-hit";
-    case EShLangClosestHitNV:   return "closest-hit";
-    case EShLangMissNV:         return "miss";
-    case EShLangCallableNV:     return "callable";
+    case EShLangRayGen:         return "ray-generation";
+    case EShLangIntersect:      return "intersection";
+    case EShLangAnyHit:         return "any-hit";
+    case EShLangClosestHit:     return "closest-hit";
+    case EShLangMiss:           return "miss";
+    case EShLangCallable:       return "callable";
     case EShLangMeshNV:         return "mesh";
     case EShLangTaskNV:         return "task";
 #endif
@@ -526,53 +571,6 @@
 }
 
 //
-// When to use profileRequires():
-//
-//     If a set of profiles have the same requirements for what version or extensions
-//     are needed to support a feature.
-//
-//     It must be called for each profile that needs protection.  Use requireProfile() first
-//     to reduce that set of profiles.
-//
-// Operation: Will issue warnings/errors based on the current profile, version, and extension
-// behaviors.  It only checks extensions when the current profile is one of the profileMask.
-//
-// A minVersion of 0 means no version of the profileMask support this in core,
-// the extension must be present.
-//
-
-// entry point that takes multiple extensions
-void TParseVersions::profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, int numExtensions, const char* const extensions[], const char* featureDesc)
-{
-    if (profile & profileMask) {
-        bool okay = false;
-        if (minVersion > 0 && version >= minVersion)
-            okay = true;
-        for (int i = 0; i < numExtensions; ++i) {
-            switch (getExtensionBehavior(extensions[i])) {
-            case EBhWarn:
-                infoSink.info.message(EPrefixWarning, ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(), loc);
-                // fall through
-            case EBhRequire:
-            case EBhEnable:
-                okay = true;
-                break;
-            default: break; // some compilers want this
-            }
-        }
-
-        if (! okay)
-            error(loc, "not supported for this version or the enabled extensions", featureDesc, "");
-    }
-}
-
-// entry point for the above that takes a single extension
-void TParseVersions::profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, const char* extension, const char* featureDesc)
-{
-    profileRequires(loc, profileMask, minVersion, extension ? 1 : 0, &extension, featureDesc);
-}
-
-//
 // When to use requireStage()
 //
 //     If only some stages support a feature.
@@ -592,6 +590,75 @@
     requireStage(loc, static_cast<EShLanguageMask>(1 << stage), featureDesc);
 }
 
+#ifndef GLSLANG_WEB
+//
+// When to use requireProfile():
+//
+//     Use if only some profiles support a feature.  However, if within a profile the feature
+//     is version or extension specific, follow this call with calls to profileRequires().
+//
+// Operation:  If the current profile is not one of the profileMask,
+// give an error message.
+//
+void TParseVersions::requireProfile(const TSourceLoc& loc, int profileMask, const char* featureDesc)
+{
+    if (! (profile & profileMask))
+        error(loc, "not supported with this profile:", featureDesc, ProfileName(profile));
+}
+
+//
+// When to use profileRequires():
+//
+//     If a set of profiles have the same requirements for what version or extensions
+//     are needed to support a feature.
+//
+//     It must be called for each profile that needs protection.  Use requireProfile() first
+//     to reduce that set of profiles.
+//
+// Operation: Will issue warnings/errors based on the current profile, version, and extension
+// behaviors.  It only checks extensions when the current profile is one of the profileMask.
+//
+// A minVersion of 0 means no version of the profileMask support this in core,
+// the extension must be present.
+//
+
+// entry point that takes multiple extensions
+void TParseVersions::profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, int numExtensions,
+    const char* const extensions[], const char* featureDesc)
+{
+    if (profile & profileMask) {
+        bool okay = minVersion > 0 && version >= minVersion;
+#ifndef GLSLANG_WEB
+        for (int i = 0; i < numExtensions; ++i) {
+            switch (getExtensionBehavior(extensions[i])) {
+            case EBhWarn:
+                infoSink.info.message(EPrefixWarning, ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(), loc);
+                // fall through
+            case EBhRequire:
+            case EBhEnable:
+                okay = true;
+                break;
+            default: break; // some compilers want this
+            }
+        }
+#endif
+        if (! okay)
+            error(loc, "not supported for this version or the enabled extensions", featureDesc, "");
+    }
+}
+
+// entry point for the above that takes a single extension
+void TParseVersions::profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, const char* extension,
+    const char* featureDesc)
+{
+    profileRequires(loc, profileMask, minVersion, extension ? 1 : 0, &extension, featureDesc);
+}
+
+void TParseVersions::unimplemented(const TSourceLoc& loc, const char* featureDesc)
+{
+    error(loc, "feature not yet implemented", featureDesc, "");
+}
+
 //
 // Within a set of profiles, see if a feature is deprecated and give an error or warning based on whether
 // a future compatibility context is being use.
@@ -625,11 +692,6 @@
     }
 }
 
-void TParseVersions::unimplemented(const TSourceLoc& loc, const char* featureDesc)
-{
-    error(loc, "feature not yet implemented", featureDesc, "");
-}
-
 // Returns true if at least one of the extensions in the extensions parameter is requested. Otherwise, returns false.
 // Warns appropriately if the requested behavior of an extension is "warn".
 bool TParseVersions::checkExtensionsRequested(const TSourceLoc& loc, int numExtensions, const char* const extensions[], const char* featureDesc)
@@ -798,10 +860,22 @@
         updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
     else if (strcmp(extension, "GL_KHR_shader_subgroup_quad") == 0)
         updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
-#ifdef NV_EXTENSIONS
     else if (strcmp(extension, "GL_NV_shader_subgroup_partitioned") == 0)
         updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
-#endif
+    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)
@@ -847,7 +921,6 @@
 // Check if extension is used with correct shader stage.
 void TParseVersions::checkExtensionStage(const TSourceLoc& loc, const char * const extension)
 {
-#ifdef NV_EXTENSIONS
     // GL_NV_mesh_shader extension is only allowed in task/mesh shaders
     if (strcmp(extension, "GL_NV_mesh_shader") == 0) {
         requireStage(loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask | EShLangFragmentMask),
@@ -855,7 +928,6 @@
         profileRequires(loc, ECoreProfile, 450, 0, "#extension GL_NV_mesh_shader");
         profileRequires(loc, EEsProfile, 320, 0, "#extension GL_NV_mesh_shader");
     }
-#endif
 }
 
 // Call for any operation needing full GLSL integer data-type support.
@@ -868,8 +940,8 @@
 // Call for any operation needing GLSL double data-type support.
 void TParseVersions::doubleCheck(const TSourceLoc& loc, const char* op)
 {
-    requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
-    profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op);
+    //requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
+    profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader_fp64, op);
 }
 
 // Call for any operation needing GLSL float16 data-type support.
@@ -877,9 +949,7 @@
 {
     if (!builtIn) {
         const char* const extensions[] = {
-#if AMD_EXTENSIONS
                                            E_GL_AMD_gpu_shader_half_float,
-#endif
                                            E_GL_EXT_shader_explicit_arithmetic_types,
                                            E_GL_EXT_shader_explicit_arithmetic_types_float16};
         requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
@@ -889,9 +959,7 @@
 bool TParseVersions::float16Arithmetic()
 {
     const char* const extensions[] = {
-#if AMD_EXTENSIONS
                                        E_GL_AMD_gpu_shader_half_float,
-#endif
                                        E_GL_EXT_shader_explicit_arithmetic_types,
                                        E_GL_EXT_shader_explicit_arithmetic_types_float16};
     return extensionsTurnedOn(sizeof(extensions)/sizeof(extensions[0]), extensions);
@@ -900,9 +968,7 @@
 bool TParseVersions::int16Arithmetic()
 {
     const char* const extensions[] = {
-#if AMD_EXTENSIONS
                                        E_GL_AMD_gpu_shader_int16,
-#endif
                                        E_GL_EXT_shader_explicit_arithmetic_types,
                                        E_GL_EXT_shader_explicit_arithmetic_types_int16};
     return extensionsTurnedOn(sizeof(extensions)/sizeof(extensions[0]), extensions);
@@ -924,9 +990,7 @@
     combined += featureDesc;
 
     const char* const extensions[] = {
-#if AMD_EXTENSIONS
                                        E_GL_AMD_gpu_shader_half_float,
-#endif
                                        E_GL_EXT_shader_explicit_arithmetic_types,
                                        E_GL_EXT_shader_explicit_arithmetic_types_float16};
     requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, combined.c_str());
@@ -940,9 +1004,7 @@
     combined += featureDesc;
 
     const char* const extensions[] = {
-#if AMD_EXTENSIONS
                                        E_GL_AMD_gpu_shader_int16,
-#endif
                                        E_GL_EXT_shader_explicit_arithmetic_types,
                                        E_GL_EXT_shader_explicit_arithmetic_types_int16};
     requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, combined.c_str());
@@ -965,9 +1027,7 @@
 {
     if (!builtIn) {
         const char* const extensions[] = {
-#if AMD_EXTENSIONS
                                            E_GL_AMD_gpu_shader_half_float,
-#endif
                                            E_GL_EXT_shader_16bit_storage,
                                            E_GL_EXT_shader_explicit_arithmetic_types,
                                            E_GL_EXT_shader_explicit_arithmetic_types_float16};
@@ -1007,7 +1067,6 @@
     }
 }
 
-#ifdef AMD_EXTENSIONS
 // Call for any operation needing GLSL float16 opaque-type support
 void TParseVersions::float16OpaqueCheck(const TSourceLoc& loc, const char* op, bool builtIn)
 {
@@ -1017,16 +1076,13 @@
         profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op);
     }
 }
-#endif
 
 // Call for any operation needing GLSL explicit int16 data-type support.
 void TParseVersions::explicitInt16Check(const TSourceLoc& loc, const char* op, bool builtIn)
 {
     if (! builtIn) {
-    	const char* const extensions[] = {
-#if AMD_EXTENSIONS
+        const char* const extensions[] = {
                                            E_GL_AMD_gpu_shader_int16,
-#endif
                                            E_GL_EXT_shader_explicit_arithmetic_types,
                                            E_GL_EXT_shader_explicit_arithmetic_types_int16};
         requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
@@ -1037,9 +1093,7 @@
 {
     if (! builtIn) {
     	const char* const extensions[] = {
-#if AMD_EXTENSIONS
                                            E_GL_AMD_gpu_shader_int16,
-#endif
                                            E_GL_EXT_shader_16bit_storage,
                                            E_GL_EXT_shader_explicit_arithmetic_types,
                                            E_GL_EXT_shader_explicit_arithmetic_types_int16};
@@ -1081,6 +1135,22 @@
     }
 }
 
+void TParseVersions::fcoopmatCheck(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+    if (!builtIn) {
+        const char* const extensions[] = {E_GL_NV_cooperative_matrix};
+        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
+    }
+}
+
+void TParseVersions::intcoopmatCheck(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+    if (!builtIn) {
+        const char* const extensions[] = {E_GL_NV_integer_cooperative_matrix};
+        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
+    }
+}
+#endif // GLSLANG_WEB
 // Call for any operation removed because SPIR-V is in use.
 void TParseVersions::spvRemoved(const TSourceLoc& loc, const char* op)
 {
@@ -1098,15 +1168,19 @@
 // Call for any operation that requires Vulkan.
 void TParseVersions::requireVulkan(const TSourceLoc& loc, const char* op)
 {
+#ifndef GLSLANG_WEB
     if (spvVersion.vulkan == 0)
         error(loc, "only allowed when using GLSL for Vulkan", op, "");
+#endif
 }
 
 // Call for any operation that requires SPIR-V.
 void TParseVersions::requireSpv(const TSourceLoc& loc, const char* op)
 {
+#ifndef GLSLANG_WEB
     if (spvVersion.spv == 0)
         error(loc, "only allowed when generating SPIR-V", op, "");
+#endif
 }
 
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
old mode 100755
new mode 100644
index 0606e8e..65c6bb6
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -3,6 +3,7 @@
 // Copyright (C) 2012-2013 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
 // Copyright (C) 2015-2018 Google, Inc.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -38,6 +39,8 @@
 #ifndef _VERSIONS_INCLUDED_
 #define _VERSIONS_INCLUDED_
 
+#define LAST_ELEMENT_MARKER(x) x
+
 //
 // Help manage multiple profiles, versions, extensions etc.
 //
@@ -54,7 +57,8 @@
     ENoProfile            = (1 << 0), // only for desktop, before profiles showed up
     ECoreProfile          = (1 << 1),
     ECompatibilityProfile = (1 << 2),
-    EEsProfile            = (1 << 3)
+    EEsProfile            = (1 << 3),
+    LAST_ELEMENT_MARKER(EProfileCount),
 } EProfile;
 
 namespace glslang {
@@ -74,7 +78,7 @@
 }
 
 //
-// What source rules, validation rules, target language, etc. are needed
+// What source rules, validation rules, target language, etc. are needed or
 // desired for SPIR-V?
 //
 // 0 means a target or rule set is not enabled (ignore rules from that entity).
@@ -110,6 +114,7 @@
 const char* const E_GL_EXT_frag_depth                   = "GL_EXT_frag_depth";
 const char* const E_GL_OES_EGL_image_external           = "GL_OES_EGL_image_external";
 const char* const E_GL_OES_EGL_image_external_essl3     = "GL_OES_EGL_image_external_essl3";
+const char* const E_GL_EXT_YUV_target                   = "GL_EXT_YUV_target";
 const char* const E_GL_EXT_shader_texture_lod           = "GL_EXT_shader_texture_lod";
 const char* const E_GL_EXT_shadow_samplers              = "GL_EXT_shadow_samplers";
 
@@ -123,8 +128,10 @@
 const char* const E_GL_ARB_tessellation_shader          = "GL_ARB_tessellation_shader";
 const char* const E_GL_ARB_enhanced_layouts             = "GL_ARB_enhanced_layouts";
 const char* const E_GL_ARB_texture_cube_map_array       = "GL_ARB_texture_cube_map_array";
+const char* const E_GL_ARB_texture_multisample          = "GL_ARB_texture_multisample";
 const char* const E_GL_ARB_shader_texture_lod           = "GL_ARB_shader_texture_lod";
 const char* const E_GL_ARB_explicit_attrib_location     = "GL_ARB_explicit_attrib_location";
+const char* const E_GL_ARB_explicit_uniform_location    = "GL_ARB_explicit_uniform_location";
 const char* const E_GL_ARB_shader_image_load_store      = "GL_ARB_shader_image_load_store";
 const char* const E_GL_ARB_shader_atomic_counters       = "GL_ARB_shader_atomic_counters";
 const char* const E_GL_ARB_shader_draw_parameters       = "GL_ARB_shader_draw_parameters";
@@ -133,6 +140,7 @@
 const char* const E_GL_ARB_shader_texture_image_samples = "GL_ARB_shader_texture_image_samples";
 const char* const E_GL_ARB_viewport_array               = "GL_ARB_viewport_array";
 const char* const E_GL_ARB_gpu_shader_int64             = "GL_ARB_gpu_shader_int64";
+const char* const E_GL_ARB_gpu_shader_fp64              = "GL_ARB_gpu_shader_fp64";
 const char* const E_GL_ARB_shader_ballot                = "GL_ARB_shader_ballot";
 const char* const E_GL_ARB_sparse_texture2              = "GL_ARB_sparse_texture2";
 const char* const E_GL_ARB_sparse_texture_clamp         = "GL_ARB_sparse_texture_clamp";
@@ -140,6 +148,12 @@
 // const char* const E_GL_ARB_cull_distance            = "GL_ARB_cull_distance";  // present for 4.5, but need extension control over block members
 const char* const E_GL_ARB_post_depth_coverage          = "GL_ARB_post_depth_coverage";
 const char* const E_GL_ARB_shader_viewport_layer_array  = "GL_ARB_shader_viewport_layer_array";
+const char* const E_GL_ARB_fragment_shader_interlock    = "GL_ARB_fragment_shader_interlock";
+const char* const E_GL_ARB_shader_clock                 = "GL_ARB_shader_clock";
+const char* const E_GL_ARB_uniform_buffer_object        = "GL_ARB_uniform_buffer_object";
+const char* const E_GL_ARB_sample_shading               = "GL_ARB_sample_shading";
+const char* const E_GL_ARB_shader_bit_encoding          = "GL_ARB_shader_bit_encoding";
+const char* const E_GL_ARB_shader_image_size            = "GL_ARB_shader_image_size";
 
 const char* const E_GL_KHR_shader_subgroup_basic            = "GL_KHR_shader_subgroup_basic";
 const char* const E_GL_KHR_shader_subgroup_vote             = "GL_KHR_shader_subgroup_vote";
@@ -170,6 +184,14 @@
 const char* const E_GL_EXT_scalar_block_layout              = "GL_EXT_scalar_block_layout";
 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";
+const char* const E_GL_EXT_debug_printf                     = "GL_EXT_debug_printf";
+const char* const E_GL_EXT_ray_tracing                      = "GL_EXT_ray_tracing";
+const char* const E_GL_EXT_ray_query                        = "GL_EXT_ray_query";
+const char* const E_GL_EXT_ray_flags_primitive_culling      = "GL_EXT_ray_flags_primitive_culling";
 
 // Arrays of extensions for the above viewportEXTs duplications
 
@@ -187,7 +209,6 @@
 const char* const E_GL_GOOGLE_cpp_style_line_directive          = "GL_GOOGLE_cpp_style_line_directive";
 const char* const E_GL_GOOGLE_include_directive                 = "GL_GOOGLE_include_directive";
 
-#ifdef AMD_EXTENSIONS
 const char* const E_GL_AMD_shader_ballot                        = "GL_AMD_shader_ballot";
 const char* const E_GL_AMD_shader_trinary_minmax                = "GL_AMD_shader_trinary_minmax";
 const char* const E_GL_AMD_shader_explicit_vertex_parameter     = "GL_AMD_shader_explicit_vertex_parameter";
@@ -198,9 +219,8 @@
 const char* const E_GL_AMD_shader_image_load_store_lod          = "GL_AMD_shader_image_load_store_lod";
 const char* const E_GL_AMD_shader_fragment_mask                 = "GL_AMD_shader_fragment_mask";
 const char* const E_GL_AMD_gpu_shader_half_float_fetch          = "GL_AMD_gpu_shader_half_float_fetch";
-#endif
 
-#ifdef NV_EXTENSIONS
+const char* const E_GL_INTEL_shader_integer_functions2          = "GL_INTEL_shader_integer_functions2";
 
 const char* const E_GL_NV_sample_mask_override_coverage         = "GL_NV_sample_mask_override_coverage";
 const char* const E_SPV_NV_geometry_shader_passthrough          = "GL_NV_geometry_shader_passthrough";
@@ -222,7 +242,10 @@
 
 const char* const viewportEXTs[] = { E_GL_ARB_shader_viewport_layer_array, E_GL_NV_viewport_array2 };
 const int Num_viewportEXTs = sizeof(viewportEXTs) / sizeof(viewportEXTs[0]);
-#endif
+
+const char* const E_GL_NV_cooperative_matrix                    = "GL_NV_cooperative_matrix";
+const char* const E_GL_NV_shader_sm_builtins                    = "GL_NV_shader_sm_builtins";
+const char* const E_GL_NV_integer_cooperative_matrix            = "GL_NV_integer_cooperative_matrix";
 
 // AEP
 const char* const E_GL_ANDROID_extension_pack_es31a             = "GL_ANDROID_extension_pack_es31a";
@@ -252,7 +275,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";
@@ -262,6 +285,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.cpp b/glslang/MachineIndependent/attribute.cpp
index 73b665d..9585518 100644
--- a/glslang/MachineIndependent/attribute.cpp
+++ b/glslang/MachineIndependent/attribute.cpp
@@ -34,6 +34,8 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
+#ifndef GLSLANG_WEB
+
 #include "attribute.h"
 #include "../Include/intermediate.h"
 #include "ParseHelper.h"
@@ -52,6 +54,7 @@
     return true;
 }
 
+
 // extract strings out of attribute arguments stored in attribute aggregate.
 // convert to lower case if converToLower is true (for case-insensitive compare convenience)
 bool TAttributeArgs::getString(TString& value, int argNum, bool convertToLower) const 
@@ -85,6 +88,9 @@
     if (argNum >= (int)args->getSequence().size())
         return nullptr;
 
+    if (args->getSequence()[argNum]->getAsConstantUnion() == nullptr)
+        return nullptr;
+
     const TConstUnion* constVal = &args->getSequence()[argNum]->getAsConstantUnion()->getConstArray()[0];
     if (constVal == nullptr || constVal->getType() != basicType)
         return nullptr;
@@ -107,6 +113,16 @@
         return EatDependencyInfinite;
     else if (name == "dependency_length")
         return EatDependencyLength;
+    else if (name == "min_iterations")
+        return EatMinIterations;
+    else if (name == "max_iterations")
+        return EatMaxIterations;
+    else if (name == "iteration_multiple")
+        return EatIterationMultiple;
+    else if (name == "peel_count")
+        return EatPeelCount;
+    else if (name == "partial_count")
+        return EatPartialCount;
     else
         return EatNone;
 }
@@ -222,29 +238,101 @@
     }
 
     for (auto it = attributes.begin(); it != attributes.end(); ++it) {
-        if (it->name != EatDependencyLength && it->size() > 0) {
-            warn(node->getLoc(), "attribute with arguments not recognized, skipping", "", "");
-            continue;
-        }
 
-        int value;
+        const auto noArgument = [&](const char* feature) {
+            if (it->size() > 0) {
+                warn(node->getLoc(), "expected no arguments", feature, "");
+                return false;
+            }
+            return true;
+        };
+
+        const auto positiveSignedArgument = [&](const char* feature, int& value) {
+            if (it->size() == 1 && it->getInt(value)) {
+                if (value <= 0) {
+                    error(node->getLoc(), "must be positive", feature, "");
+                    return false;
+                }
+            } else {
+                warn(node->getLoc(), "expected a single integer argument", feature, "");
+                return false;
+            }
+            return true;
+        };
+
+        const auto unsignedArgument = [&](const char* feature, unsigned int& uiValue) {
+            int value;
+            if (!(it->size() == 1 && it->getInt(value))) {
+                warn(node->getLoc(), "expected a single integer argument", feature, "");
+                return false;
+            }
+            uiValue = (unsigned int)value;
+            return true;
+        };
+
+        const auto positiveUnsignedArgument = [&](const char* feature, unsigned int& uiValue) {
+            int value;
+            if (it->size() == 1 && it->getInt(value)) {
+                if (value == 0) {
+                    error(node->getLoc(), "must be greater than or equal to 1", feature, "");
+                    return false;
+                }
+            } else {
+                warn(node->getLoc(), "expected a single integer argument", feature, "");
+                return false;
+            }
+            uiValue = (unsigned int)value;
+            return true;
+        };
+
+        const auto spirv14 = [&](const char* feature) {
+            if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_4)
+                warn(node->getLoc(), "attribute requires a SPIR-V 1.4 target-env", feature, "");
+        };
+
+        int value = 0;
+        unsigned uiValue = 0;
         switch (it->name) {
         case EatUnroll:
-            loop->setUnroll();
+            if (noArgument("unroll"))
+                loop->setUnroll();
             break;
         case EatLoop:
-            loop->setDontUnroll();
+            if (noArgument("dont_unroll"))
+                loop->setDontUnroll();
             break;
         case EatDependencyInfinite:
-            loop->setLoopDependency(TIntermLoop::dependencyInfinite);
+            if (noArgument("dependency_infinite"))
+                loop->setLoopDependency(TIntermLoop::dependencyInfinite);
             break;
         case EatDependencyLength:
-            if (it->size() == 1 && it->getInt(value)) {
-                if (value <= 0)
-                    error(node->getLoc(), "must be positive", "dependency_length", "");
+            if (positiveSignedArgument("dependency_length", value))
                 loop->setLoopDependency(value);
-            } else
-                warn(node->getLoc(), "expected a single integer argument", "dependency_length", "");
+            break;
+        case EatMinIterations:
+            spirv14("min_iterations");
+            if (unsignedArgument("min_iterations", uiValue))
+                loop->setMinIterations(uiValue);
+            break;
+        case EatMaxIterations:
+            spirv14("max_iterations");
+            if (unsignedArgument("max_iterations", uiValue))
+                loop->setMaxIterations(uiValue);
+            break;
+        case EatIterationMultiple:
+            spirv14("iteration_multiple");
+            if (positiveUnsignedArgument("iteration_multiple", uiValue))
+                loop->setIterationMultiple(uiValue);
+            break;
+        case EatPeelCount:
+            spirv14("peel_count");
+            if (unsignedArgument("peel_count", uiValue))
+                loop->setPeelCount(uiValue);
+            break;
+        case EatPartialCount:
+            spirv14("partial_count");
+            if (unsignedArgument("partial_count", uiValue))
+                loop->setPartialCount(uiValue);
             break;
         default:
             warn(node->getLoc(), "attribute does not apply to a loop", "", "");
@@ -253,5 +341,6 @@
     }
 }
 
-
 } // end namespace glslang
+
+#endif // GLSLANG_WEB
diff --git a/glslang/MachineIndependent/attribute.h b/glslang/MachineIndependent/attribute.h
index 8d0c5bc..38a943d 100644
--- a/glslang/MachineIndependent/attribute.h
+++ b/glslang/MachineIndependent/attribute.h
@@ -71,7 +71,54 @@
         EatPushConstant,
         EatConstantId,
         EatDependencyInfinite,
-        EatDependencyLength
+        EatDependencyLength,
+        EatMinIterations,
+        EatMaxIterations,
+        EatIterationMultiple,
+        EatPeelCount,
+        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/gl_types.h b/glslang/MachineIndependent/gl_types.h
index c9fee9e..b6f613b 100644
--- a/glslang/MachineIndependent/gl_types.h
+++ b/glslang/MachineIndependent/gl_types.h
@@ -78,7 +78,6 @@
 #define GL_DOUBLE_MAT4x2                  0x8F4D
 #define GL_DOUBLE_MAT4x3                  0x8F4E
 
-#ifdef AMD_EXTENSIONS
 // Those constants are borrowed from extension NV_gpu_shader5
 #define GL_FLOAT16_NV                     0x8FF8
 #define GL_FLOAT16_VEC2_NV                0x8FF9
@@ -94,7 +93,6 @@
 #define GL_FLOAT16_MAT3x4_AMD             0x91CB
 #define GL_FLOAT16_MAT4x2_AMD             0x91CC
 #define GL_FLOAT16_MAT4x3_AMD             0x91CD
-#endif
 
 #define GL_SAMPLER_1D                     0x8B5D
 #define GL_SAMPLER_2D                     0x8B5E
@@ -117,7 +115,6 @@
 #define GL_SAMPLER_CUBE_MAP_ARRAY_ARB     0x900C
 #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D
 
-#ifdef AMD_EXTENSIONS
 #define GL_FLOAT16_SAMPLER_1D_AMD                       0x91CE
 #define GL_FLOAT16_SAMPLER_2D_AMD                       0x91CF
 #define GL_FLOAT16_SAMPLER_3D_AMD                       0x91D0
@@ -149,7 +146,6 @@
 #define GL_FLOAT16_IMAGE_BUFFER_AMD                     0x91E8
 #define GL_FLOAT16_IMAGE_2D_MULTISAMPLE_AMD             0x91E9
 #define GL_FLOAT16_IMAGE_2D_MULTISAMPLE_ARRAY_AMD       0x91EA
-#endif
 
 #define GL_INT_SAMPLER_1D                 0x8DC9
 #define GL_INT_SAMPLER_2D                 0x8DCA
diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4
new file mode 100644
index 0000000..1432bf6
--- /dev/null
+++ b/glslang/MachineIndependent/glslang.m4
@@ -0,0 +1,3887 @@
+//
+// Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
+// Copyright (C) 2012-2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2015-2019 Google, Inc.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//    Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+//    Redistributions in binary form must reproduce the above
+//    copyright notice, this list of conditions and the following
+//    disclaimer in the documentation and/or other materials provided
+//    with the distribution.
+//
+//    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
+//    contributors may be used to endorse or promote products derived
+//    from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+
+//
+// Do not edit the .y file, only edit the .m4 file.
+// The .y bison file is not a source file, it is a derivative of the .m4 file.
+// The m4 file needs to be processed by m4 to generate the .y bison file.
+//
+// Code sandwiched between a pair:
+//
+//    GLSLANG_WEB_EXCLUDE_ON
+//      ...
+//      ...
+//      ...
+//    GLSLANG_WEB_EXCLUDE_OFF
+//
+// Will be excluded from the grammar when m4 is executed as:
+//
+//    m4 -P -DGLSLANG_WEB
+//
+// It will be included when m4 is executed as:
+//
+//    m4 -P
+//
+
+m4_define(`GLSLANG_WEB_EXCLUDE_ON', `m4_ifdef(`GLSLANG_WEB', `m4_divert(`-1')')')
+m4_define(`GLSLANG_WEB_EXCLUDE_OFF', `m4_ifdef(`GLSLANG_WEB', `m4_divert')')
+
+/**
+ * This is bison grammar and productions for parsing all versions of the
+ * GLSL shading languages.
+ */
+%{
+
+/* Based on:
+ANSI C Yacc grammar
+
+In 1985, Jeff Lee published his Yacc grammar (which is accompanied by a
+matching Lex specification) for the April 30, 1985 draft version of the
+ANSI C standard.  Tom Stockfisch reposted it to net.sources in 1987; that
+original, as mentioned in the answer to question 17.25 of the comp.lang.c
+FAQ, can be ftp'ed from ftp.uu.net, file usenet/net.sources/ansi.c.grammar.Z.
+
+I intend to keep this version as close to the current C Standard grammar as
+possible; please let me know if you discover discrepancies.
+
+Jutta Degener, 1995
+*/
+
+#include "SymbolTable.h"
+#include "ParseHelper.h"
+#include "../Public/ShaderLang.h"
+#include "attribute.h"
+
+using namespace glslang;
+
+%}
+
+%define parse.error verbose
+
+%union {
+    struct {
+        glslang::TSourceLoc loc;
+        union {
+            glslang::TString *string;
+            int i;
+            unsigned int u;
+            long long i64;
+            unsigned long long u64;
+            bool b;
+            double d;
+        };
+        glslang::TSymbol* symbol;
+    } lex;
+    struct {
+        glslang::TSourceLoc loc;
+        glslang::TOperator op;
+        union {
+            TIntermNode* intermNode;
+            glslang::TIntermNodePair nodePair;
+            glslang::TIntermTyped* intermTypedNode;
+            glslang::TAttributes* attributes;
+        };
+        union {
+            glslang::TPublicType type;
+            glslang::TFunction* function;
+            glslang::TParameter param;
+            glslang::TTypeLoc typeLine;
+            glslang::TTypeList* typeList;
+            glslang::TArraySizes* arraySizes;
+            glslang::TIdentifierList* identifierList;
+        };
+        glslang::TArraySizes* typeParameters;
+    } interm;
+}
+
+%{
+
+/* windows only pragma */
+#ifdef _MSC_VER
+    #pragma warning(disable : 4065)
+    #pragma warning(disable : 4127)
+    #pragma warning(disable : 4244)
+#endif
+
+#define parseContext (*pParseContext)
+#define yyerror(context, msg) context->parserError(msg)
+
+extern int yylex(YYSTYPE*, TParseContext&);
+
+%}
+
+%parse-param {glslang::TParseContext* pParseContext}
+%lex-param {parseContext}
+%pure-parser  // enable thread safety
+%expect 1     // One shift reduce conflict because of if | else
+
+%token <lex> CONST BOOL INT UINT FLOAT
+%token <lex> BVEC2 BVEC3 BVEC4
+%token <lex> IVEC2 IVEC3 IVEC4
+%token <lex> UVEC2 UVEC3 UVEC4
+%token <lex> VEC2 VEC3 VEC4
+%token <lex> MAT2 MAT3 MAT4
+%token <lex> MAT2X2 MAT2X3 MAT2X4
+%token <lex> MAT3X2 MAT3X3 MAT3X4
+%token <lex> MAT4X2 MAT4X3 MAT4X4
+
+// combined image/sampler
+%token <lex> SAMPLER2D SAMPLER3D SAMPLERCUBE SAMPLER2DSHADOW
+%token <lex> SAMPLERCUBESHADOW SAMPLER2DARRAY
+%token <lex> SAMPLER2DARRAYSHADOW ISAMPLER2D ISAMPLER3D ISAMPLERCUBE
+%token <lex> ISAMPLER2DARRAY USAMPLER2D USAMPLER3D
+%token <lex> USAMPLERCUBE USAMPLER2DARRAY
+
+// separate image/sampler
+%token <lex> SAMPLER SAMPLERSHADOW
+%token <lex>  TEXTURE2D  TEXTURE3D  TEXTURECUBE  TEXTURE2DARRAY
+%token <lex> ITEXTURE2D ITEXTURE3D ITEXTURECUBE ITEXTURE2DARRAY
+%token <lex> UTEXTURE2D UTEXTURE3D UTEXTURECUBE UTEXTURE2DARRAY
+
+GLSLANG_WEB_EXCLUDE_ON
+
+%token <lex> ATTRIBUTE VARYING
+%token <lex> FLOAT16_T FLOAT32_T DOUBLE FLOAT64_T
+%token <lex> INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T
+%token <lex> I64VEC2 I64VEC3 I64VEC4
+%token <lex> U64VEC2 U64VEC3 U64VEC4
+%token <lex> I32VEC2 I32VEC3 I32VEC4
+%token <lex> U32VEC2 U32VEC3 U32VEC4
+%token <lex> I16VEC2 I16VEC3 I16VEC4
+%token <lex> U16VEC2 U16VEC3 U16VEC4
+%token <lex> I8VEC2  I8VEC3  I8VEC4
+%token <lex> U8VEC2  U8VEC3  U8VEC4
+%token <lex> DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4
+%token <lex> F16VEC2 F16VEC3 F16VEC4 F16MAT2 F16MAT3 F16MAT4
+%token <lex> F32VEC2 F32VEC3 F32VEC4 F32MAT2 F32MAT3 F32MAT4
+%token <lex> F64VEC2 F64VEC3 F64VEC4 F64MAT2 F64MAT3 F64MAT4
+%token <lex> DMAT2X2 DMAT2X3 DMAT2X4
+%token <lex> DMAT3X2 DMAT3X3 DMAT3X4
+%token <lex> DMAT4X2 DMAT4X3 DMAT4X4
+%token <lex> F16MAT2X2 F16MAT2X3 F16MAT2X4
+%token <lex> F16MAT3X2 F16MAT3X3 F16MAT3X4
+%token <lex> F16MAT4X2 F16MAT4X3 F16MAT4X4
+%token <lex> F32MAT2X2 F32MAT2X3 F32MAT2X4
+%token <lex> F32MAT3X2 F32MAT3X3 F32MAT3X4
+%token <lex> F32MAT4X2 F32MAT4X3 F32MAT4X4
+%token <lex> F64MAT2X2 F64MAT2X3 F64MAT2X4
+%token <lex> F64MAT3X2 F64MAT3X3 F64MAT3X4
+%token <lex> F64MAT4X2 F64MAT4X3 F64MAT4X4
+%token <lex> ATOMIC_UINT
+%token <lex> ACCSTRUCTNV
+%token <lex> ACCSTRUCTEXT
+%token <lex> RAYQUERYEXT
+%token <lex> FCOOPMATNV ICOOPMATNV UCOOPMATNV
+
+// combined image/sampler
+%token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
+%token <lex> ISAMPLERCUBEARRAY USAMPLERCUBEARRAY
+%token <lex> SAMPLER1D SAMPLER1DARRAY SAMPLER1DARRAYSHADOW ISAMPLER1D SAMPLER1DSHADOW
+%token <lex> SAMPLER2DRECT SAMPLER2DRECTSHADOW ISAMPLER2DRECT USAMPLER2DRECT
+%token <lex> SAMPLERBUFFER ISAMPLERBUFFER USAMPLERBUFFER
+%token <lex> SAMPLER2DMS ISAMPLER2DMS USAMPLER2DMS
+%token <lex> SAMPLER2DMSARRAY ISAMPLER2DMSARRAY USAMPLER2DMSARRAY
+%token <lex> SAMPLEREXTERNALOES
+%token <lex> SAMPLEREXTERNAL2DY2YEXT
+%token <lex> ISAMPLER1DARRAY USAMPLER1D USAMPLER1DARRAY 
+%token <lex> F16SAMPLER1D F16SAMPLER2D F16SAMPLER3D F16SAMPLER2DRECT F16SAMPLERCUBE
+%token <lex> F16SAMPLER1DARRAY F16SAMPLER2DARRAY F16SAMPLERCUBEARRAY
+%token <lex> F16SAMPLERBUFFER F16SAMPLER2DMS F16SAMPLER2DMSARRAY
+%token <lex> F16SAMPLER1DSHADOW F16SAMPLER2DSHADOW F16SAMPLER1DARRAYSHADOW F16SAMPLER2DARRAYSHADOW
+%token <lex> F16SAMPLER2DRECTSHADOW F16SAMPLERCUBESHADOW F16SAMPLERCUBEARRAYSHADOW
+
+// images
+%token <lex> IMAGE1D IIMAGE1D UIMAGE1D IMAGE2D IIMAGE2D
+%token <lex> UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D
+%token <lex> IMAGE2DRECT IIMAGE2DRECT UIMAGE2DRECT
+%token <lex> IMAGECUBE IIMAGECUBE UIMAGECUBE
+%token <lex> IMAGEBUFFER IIMAGEBUFFER UIMAGEBUFFER
+%token <lex> IMAGE1DARRAY IIMAGE1DARRAY UIMAGE1DARRAY
+%token <lex> IMAGE2DARRAY IIMAGE2DARRAY UIMAGE2DARRAY
+%token <lex> IMAGECUBEARRAY IIMAGECUBEARRAY UIMAGECUBEARRAY
+%token <lex> IMAGE2DMS IIMAGE2DMS UIMAGE2DMS
+%token <lex> IMAGE2DMSARRAY IIMAGE2DMSARRAY UIMAGE2DMSARRAY
+
+%token <lex> F16IMAGE1D F16IMAGE2D F16IMAGE3D F16IMAGE2DRECT
+%token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
+%token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
+
+// texture without sampler
+%token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
+%token <lex> TEXTURE1D ITEXTURE1D UTEXTURE1D
+%token <lex> TEXTURE1DARRAY ITEXTURE1DARRAY UTEXTURE1DARRAY
+%token <lex> TEXTURE2DRECT ITEXTURE2DRECT UTEXTURE2DRECT
+%token <lex> TEXTUREBUFFER ITEXTUREBUFFER UTEXTUREBUFFER
+%token <lex> TEXTURE2DMS ITEXTURE2DMS UTEXTURE2DMS
+%token <lex> TEXTURE2DMSARRAY ITEXTURE2DMSARRAY UTEXTURE2DMSARRAY
+
+%token <lex> F16TEXTURE1D F16TEXTURE2D F16TEXTURE3D F16TEXTURE2DRECT F16TEXTURECUBE
+%token <lex> F16TEXTURE1DARRAY F16TEXTURE2DARRAY F16TEXTURECUBEARRAY
+%token <lex> F16TEXTUREBUFFER F16TEXTURE2DMS F16TEXTURE2DMSARRAY
+
+// input attachments
+%token <lex> SUBPASSINPUT SUBPASSINPUTMS ISUBPASSINPUT ISUBPASSINPUTMS USUBPASSINPUT USUBPASSINPUTMS
+%token <lex> F16SUBPASSINPUT F16SUBPASSINPUTMS
+
+GLSLANG_WEB_EXCLUDE_OFF
+
+%token <lex> LEFT_OP RIGHT_OP
+%token <lex> INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_OP
+%token <lex> AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN
+%token <lex> MOD_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN XOR_ASSIGN OR_ASSIGN
+%token <lex> SUB_ASSIGN
+%token <lex> STRING_LITERAL
+
+%token <lex> LEFT_PAREN RIGHT_PAREN LEFT_BRACKET RIGHT_BRACKET LEFT_BRACE RIGHT_BRACE DOT
+%token <lex> COMMA COLON EQUAL SEMICOLON BANG DASH TILDE PLUS STAR SLASH PERCENT
+%token <lex> LEFT_ANGLE RIGHT_ANGLE VERTICAL_BAR CARET AMPERSAND QUESTION
+
+%token <lex> INVARIANT
+%token <lex> HIGH_PRECISION MEDIUM_PRECISION LOW_PRECISION PRECISION
+%token <lex> PACKED RESOURCE SUPERP
+
+%token <lex> FLOATCONSTANT INTCONSTANT UINTCONSTANT BOOLCONSTANT
+%token <lex> IDENTIFIER TYPE_NAME
+%token <lex> CENTROID IN OUT INOUT
+%token <lex> STRUCT VOID WHILE
+%token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT
+%token <lex> UNIFORM SHARED BUFFER
+%token <lex> FLAT SMOOTH LAYOUT
+
+GLSLANG_WEB_EXCLUDE_ON
+%token <lex> DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT FLOAT16CONSTANT INT32CONSTANT UINT32CONSTANT
+%token <lex> INT64CONSTANT UINT64CONSTANT
+%token <lex> SUBROUTINE DEMOTE
+%token <lex> PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV
+%token <lex> PAYLOADEXT PAYLOADINEXT HITATTREXT CALLDATAEXT CALLDATAINEXT
+%token <lex> PATCH SAMPLE NONUNIFORM
+%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
+%token <lex> SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT
+%token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
+%token <lex> PRECISE
+GLSLANG_WEB_EXCLUDE_OFF
+
+%type <interm> assignment_operator unary_operator
+%type <interm.intermTypedNode> variable_identifier primary_expression postfix_expression
+%type <interm.intermTypedNode> expression integer_expression assignment_expression
+%type <interm.intermTypedNode> unary_expression multiplicative_expression additive_expression
+%type <interm.intermTypedNode> relational_expression equality_expression
+%type <interm.intermTypedNode> conditional_expression constant_expression
+%type <interm.intermTypedNode> logical_or_expression logical_xor_expression logical_and_expression
+%type <interm.intermTypedNode> shift_expression and_expression exclusive_or_expression inclusive_or_expression
+%type <interm.intermTypedNode> function_call initializer condition conditionopt
+
+%type <interm.intermNode> translation_unit function_definition
+%type <interm.intermNode> statement simple_statement
+%type <interm.intermNode> statement_list switch_statement_list compound_statement
+%type <interm.intermNode> declaration_statement selection_statement selection_statement_nonattributed expression_statement
+%type <interm.intermNode> switch_statement switch_statement_nonattributed case_label
+%type <interm.intermNode> declaration external_declaration
+%type <interm.intermNode> for_init_statement compound_statement_no_new_scope
+%type <interm.nodePair> selection_rest_statement for_rest_statement
+%type <interm.intermNode> iteration_statement iteration_statement_nonattributed jump_statement statement_no_new_scope statement_scoped
+%type <interm> single_declaration init_declarator_list
+
+%type <interm> parameter_declaration parameter_declarator parameter_type_specifier
+
+%type <interm> array_specifier
+%type <interm.type> invariant_qualifier interpolation_qualifier storage_qualifier precision_qualifier
+%type <interm.type> layout_qualifier layout_qualifier_id_list layout_qualifier_id
+
+%type <interm.typeParameters> type_parameter_specifier
+%type <interm.typeParameters> type_parameter_specifier_opt
+%type <interm.typeParameters> type_parameter_specifier_list
+
+%type <interm.type> type_qualifier fully_specified_type type_specifier
+%type <interm.type> single_type_qualifier
+%type <interm.type> type_specifier_nonarray
+%type <interm.type> struct_specifier
+%type <interm.typeLine> struct_declarator
+%type <interm.typeList> struct_declarator_list struct_declaration struct_declaration_list
+%type <interm> block_structure
+%type <interm.function> function_header function_declarator
+%type <interm.function> function_header_with_parameters
+%type <interm> function_call_header_with_parameters function_call_header_no_parameters function_call_generic function_prototype
+%type <interm> function_call_or_method function_identifier function_call_header
+
+%type <interm.identifierList> identifier_list
+
+GLSLANG_WEB_EXCLUDE_ON
+%type <interm.type> precise_qualifier non_uniform_qualifier
+%type <interm.typeList> type_name_list
+%type <interm.attributes> attribute attribute_list single_attribute
+%type <interm.intermNode> demote_statement
+%type <interm.intermTypedNode> initializer_list
+GLSLANG_WEB_EXCLUDE_OFF
+
+%start translation_unit
+%%
+
+variable_identifier
+    : IDENTIFIER {
+        $$ = parseContext.handleVariable($1.loc, $1.symbol, $1.string);
+    }
+    ;
+
+primary_expression
+    : variable_identifier {
+        $$ = $1;
+    }
+    | LEFT_PAREN expression RIGHT_PAREN {
+        $$ = $2;
+        if ($$->getAsConstantUnion())
+            $$->getAsConstantUnion()->setExpression();
+    }
+    | FLOATCONSTANT {
+        $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true);
+    }
+    | INTCONSTANT {
+        $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
+    }
+    | UINTCONSTANT {
+        parseContext.fullIntegerCheck($1.loc, "unsigned literal");
+        $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true);
+    }
+    | BOOLCONSTANT {
+        $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
+    }
+GLSLANG_WEB_EXCLUDE_ON
+    | STRING_LITERAL {
+        $$ = parseContext.intermediate.addConstantUnion($1.string, $1.loc, true);
+    }
+    | INT32CONSTANT {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
+        $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
+    }
+    | UINT32CONSTANT {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
+        $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true);
+    }
+    | INT64CONSTANT {
+        parseContext.int64Check($1.loc, "64-bit integer literal");
+        $$ = parseContext.intermediate.addConstantUnion($1.i64, $1.loc, true);
+    }
+    | UINT64CONSTANT {
+        parseContext.int64Check($1.loc, "64-bit unsigned integer literal");
+        $$ = parseContext.intermediate.addConstantUnion($1.u64, $1.loc, true);
+    }
+    | INT16CONSTANT {
+        parseContext.explicitInt16Check($1.loc, "16-bit integer literal");
+        $$ = parseContext.intermediate.addConstantUnion((short)$1.i, $1.loc, true);
+    }
+    | UINT16CONSTANT {
+        parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer literal");
+        $$ = parseContext.intermediate.addConstantUnion((unsigned short)$1.u, $1.loc, true);
+    }
+    | DOUBLECONSTANT {
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double literal");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double literal");
+        $$ = parseContext.intermediate.addConstantUnion($1.d, EbtDouble, $1.loc, true);
+    }
+    | FLOAT16CONSTANT {
+        parseContext.float16Check($1.loc, "half float literal");
+        $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
+    }
+GLSLANG_WEB_EXCLUDE_OFF
+    ;
+
+postfix_expression
+    : primary_expression {
+        $$ = $1;
+    }
+    | postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET {
+        $$ = parseContext.handleBracketDereference($2.loc, $1, $3);
+    }
+    | function_call {
+        $$ = $1;
+    }
+    | postfix_expression DOT IDENTIFIER {
+        $$ = parseContext.handleDotDereference($3.loc, $1, *$3.string);
+    }
+    | postfix_expression INC_OP {
+        parseContext.variableCheck($1);
+        parseContext.lValueErrorCheck($2.loc, "++", $1);
+        $$ = parseContext.handleUnaryMath($2.loc, "++", EOpPostIncrement, $1);
+    }
+    | postfix_expression DEC_OP {
+        parseContext.variableCheck($1);
+        parseContext.lValueErrorCheck($2.loc, "--", $1);
+        $$ = parseContext.handleUnaryMath($2.loc, "--", EOpPostDecrement, $1);
+    }
+    ;
+
+integer_expression
+    : expression {
+        parseContext.integerCheck($1, "[]");
+        $$ = $1;
+    }
+    ;
+
+function_call
+    : function_call_or_method {
+        $$ = parseContext.handleFunctionCall($1.loc, $1.function, $1.intermNode);
+        delete $1.function;
+    }
+    ;
+
+function_call_or_method
+    : function_call_generic {
+        $$ = $1;
+    }
+    ;
+
+function_call_generic
+    : function_call_header_with_parameters RIGHT_PAREN {
+        $$ = $1;
+        $$.loc = $2.loc;
+    }
+    | function_call_header_no_parameters RIGHT_PAREN {
+        $$ = $1;
+        $$.loc = $2.loc;
+    }
+    ;
+
+function_call_header_no_parameters
+    : function_call_header VOID {
+        $$ = $1;
+    }
+    | function_call_header {
+        $$ = $1;
+    }
+    ;
+
+function_call_header_with_parameters
+    : function_call_header assignment_expression {
+        TParameter param = { 0, new TType };
+        param.type->shallowCopy($2->getType());
+        $1.function->addParameter(param);
+        $$.function = $1.function;
+        $$.intermNode = $2;
+    }
+    | function_call_header_with_parameters COMMA assignment_expression {
+        TParameter param = { 0, new TType };
+        param.type->shallowCopy($3->getType());
+        $1.function->addParameter(param);
+        $$.function = $1.function;
+        $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, $3, $2.loc);
+    }
+    ;
+
+function_call_header
+    : function_identifier LEFT_PAREN {
+        $$ = $1;
+    }
+    ;
+
+// Grammar Note:  Constructors look like functions, but are recognized as types.
+
+function_identifier
+    : type_specifier {
+        // Constructor
+        $$.intermNode = 0;
+        $$.function = parseContext.handleConstructorCall($1.loc, $1);
+    }
+    | postfix_expression {
+        //
+        // Should be a method or subroutine call, but we haven't recognized the arguments yet.
+        //
+        $$.function = 0;
+        $$.intermNode = 0;
+
+        TIntermMethod* method = $1->getAsMethodNode();
+        if (method) {
+            $$.function = new TFunction(&method->getMethodName(), TType(EbtInt), EOpArrayLength);
+            $$.intermNode = method->getObject();
+        } else {
+            TIntermSymbol* symbol = $1->getAsSymbolNode();
+            if (symbol) {
+                parseContext.reservedErrorCheck(symbol->getLoc(), symbol->getName());
+                TFunction *function = new TFunction(&symbol->getName(), TType(EbtVoid));
+                $$.function = function;
+            } else
+                parseContext.error($1->getLoc(), "function call, method, or subroutine call expected", "", "");
+        }
+
+        if ($$.function == 0) {
+            // error recover
+            TString* empty = NewPoolTString("");
+            $$.function = new TFunction(empty, TType(EbtVoid), EOpNull);
+        }
+    }
+GLSLANG_WEB_EXCLUDE_ON
+    | non_uniform_qualifier {
+        // Constructor
+        $$.intermNode = 0;
+        $$.function = parseContext.handleConstructorCall($1.loc, $1);
+    }
+GLSLANG_WEB_EXCLUDE_OFF
+    ;
+
+unary_expression
+    : postfix_expression {
+        parseContext.variableCheck($1);
+        $$ = $1;
+        if (TIntermMethod* method = $1->getAsMethodNode())
+            parseContext.error($1->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
+    }
+    | INC_OP unary_expression {
+        parseContext.lValueErrorCheck($1.loc, "++", $2);
+        $$ = parseContext.handleUnaryMath($1.loc, "++", EOpPreIncrement, $2);
+    }
+    | DEC_OP unary_expression {
+        parseContext.lValueErrorCheck($1.loc, "--", $2);
+        $$ = parseContext.handleUnaryMath($1.loc, "--", EOpPreDecrement, $2);
+    }
+    | unary_operator unary_expression {
+        if ($1.op != EOpNull) {
+            char errorOp[2] = {0, 0};
+            switch($1.op) {
+            case EOpNegative:   errorOp[0] = '-'; break;
+            case EOpLogicalNot: errorOp[0] = '!'; break;
+            case EOpBitwiseNot: errorOp[0] = '~'; break;
+            default: break; // some compilers want this
+            }
+            $$ = parseContext.handleUnaryMath($1.loc, errorOp, $1.op, $2);
+        } else {
+            $$ = $2;
+            if ($$->getAsConstantUnion())
+                $$->getAsConstantUnion()->setExpression();
+        }
+    }
+    ;
+// Grammar Note:  No traditional style type casts.
+
+unary_operator
+    : PLUS  { $$.loc = $1.loc; $$.op = EOpNull; }
+    | DASH  { $$.loc = $1.loc; $$.op = EOpNegative; }
+    | BANG  { $$.loc = $1.loc; $$.op = EOpLogicalNot; }
+    | TILDE { $$.loc = $1.loc; $$.op = EOpBitwiseNot;
+              parseContext.fullIntegerCheck($1.loc, "bitwise not"); }
+    ;
+// Grammar Note:  No '*' or '&' unary ops.  Pointers are not supported.
+
+multiplicative_expression
+    : unary_expression { $$ = $1; }
+    | multiplicative_expression STAR unary_expression {
+        $$ = parseContext.handleBinaryMath($2.loc, "*", EOpMul, $1, $3);
+        if ($$ == 0)
+            $$ = $1;
+    }
+    | multiplicative_expression SLASH unary_expression {
+        $$ = parseContext.handleBinaryMath($2.loc, "/", EOpDiv, $1, $3);
+        if ($$ == 0)
+            $$ = $1;
+    }
+    | multiplicative_expression PERCENT unary_expression {
+        parseContext.fullIntegerCheck($2.loc, "%");
+        $$ = parseContext.handleBinaryMath($2.loc, "%", EOpMod, $1, $3);
+        if ($$ == 0)
+            $$ = $1;
+    }
+    ;
+
+additive_expression
+    : multiplicative_expression { $$ = $1; }
+    | additive_expression PLUS multiplicative_expression {
+        $$ = parseContext.handleBinaryMath($2.loc, "+", EOpAdd, $1, $3);
+        if ($$ == 0)
+            $$ = $1;
+    }
+    | additive_expression DASH multiplicative_expression {
+        $$ = parseContext.handleBinaryMath($2.loc, "-", EOpSub, $1, $3);
+        if ($$ == 0)
+            $$ = $1;
+    }
+    ;
+
+shift_expression
+    : additive_expression { $$ = $1; }
+    | shift_expression LEFT_OP additive_expression {
+        parseContext.fullIntegerCheck($2.loc, "bit shift left");
+        $$ = parseContext.handleBinaryMath($2.loc, "<<", EOpLeftShift, $1, $3);
+        if ($$ == 0)
+            $$ = $1;
+    }
+    | shift_expression RIGHT_OP additive_expression {
+        parseContext.fullIntegerCheck($2.loc, "bit shift right");
+        $$ = parseContext.handleBinaryMath($2.loc, ">>", EOpRightShift, $1, $3);
+        if ($$ == 0)
+            $$ = $1;
+    }
+    ;
+
+relational_expression
+    : shift_expression { $$ = $1; }
+    | relational_expression LEFT_ANGLE shift_expression {
+        $$ = parseContext.handleBinaryMath($2.loc, "<", EOpLessThan, $1, $3);
+        if ($$ == 0)
+            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
+    }
+    | relational_expression RIGHT_ANGLE shift_expression  {
+        $$ = parseContext.handleBinaryMath($2.loc, ">", EOpGreaterThan, $1, $3);
+        if ($$ == 0)
+            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
+    }
+    | relational_expression LE_OP shift_expression  {
+        $$ = parseContext.handleBinaryMath($2.loc, "<=", EOpLessThanEqual, $1, $3);
+        if ($$ == 0)
+            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
+    }
+    | relational_expression GE_OP shift_expression  {
+        $$ = parseContext.handleBinaryMath($2.loc, ">=", EOpGreaterThanEqual, $1, $3);
+        if ($$ == 0)
+            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
+    }
+    ;
+
+equality_expression
+    : relational_expression { $$ = $1; }
+    | equality_expression EQ_OP relational_expression  {
+        parseContext.arrayObjectCheck($2.loc, $1->getType(), "array comparison");
+        parseContext.opaqueCheck($2.loc, $1->getType(), "==");
+        parseContext.specializationCheck($2.loc, $1->getType(), "==");
+        parseContext.referenceCheck($2.loc, $1->getType(), "==");
+        $$ = parseContext.handleBinaryMath($2.loc, "==", EOpEqual, $1, $3);
+        if ($$ == 0)
+            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
+    }
+    | equality_expression NE_OP relational_expression {
+        parseContext.arrayObjectCheck($2.loc, $1->getType(), "array comparison");
+        parseContext.opaqueCheck($2.loc, $1->getType(), "!=");
+        parseContext.specializationCheck($2.loc, $1->getType(), "!=");
+        parseContext.referenceCheck($2.loc, $1->getType(), "!=");
+        $$ = parseContext.handleBinaryMath($2.loc, "!=", EOpNotEqual, $1, $3);
+        if ($$ == 0)
+            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
+    }
+    ;
+
+and_expression
+    : equality_expression { $$ = $1; }
+    | and_expression AMPERSAND equality_expression {
+        parseContext.fullIntegerCheck($2.loc, "bitwise and");
+        $$ = parseContext.handleBinaryMath($2.loc, "&", EOpAnd, $1, $3);
+        if ($$ == 0)
+            $$ = $1;
+    }
+    ;
+
+exclusive_or_expression
+    : and_expression { $$ = $1; }
+    | exclusive_or_expression CARET and_expression {
+        parseContext.fullIntegerCheck($2.loc, "bitwise exclusive or");
+        $$ = parseContext.handleBinaryMath($2.loc, "^", EOpExclusiveOr, $1, $3);
+        if ($$ == 0)
+            $$ = $1;
+    }
+    ;
+
+inclusive_or_expression
+    : exclusive_or_expression { $$ = $1; }
+    | inclusive_or_expression VERTICAL_BAR exclusive_or_expression {
+        parseContext.fullIntegerCheck($2.loc, "bitwise inclusive or");
+        $$ = parseContext.handleBinaryMath($2.loc, "|", EOpInclusiveOr, $1, $3);
+        if ($$ == 0)
+            $$ = $1;
+    }
+    ;
+
+logical_and_expression
+    : inclusive_or_expression { $$ = $1; }
+    | logical_and_expression AND_OP inclusive_or_expression {
+        $$ = parseContext.handleBinaryMath($2.loc, "&&", EOpLogicalAnd, $1, $3);
+        if ($$ == 0)
+            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
+    }
+    ;
+
+logical_xor_expression
+    : logical_and_expression { $$ = $1; }
+    | logical_xor_expression XOR_OP logical_and_expression  {
+        $$ = parseContext.handleBinaryMath($2.loc, "^^", EOpLogicalXor, $1, $3);
+        if ($$ == 0)
+            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
+    }
+    ;
+
+logical_or_expression
+    : logical_xor_expression { $$ = $1; }
+    | logical_or_expression OR_OP logical_xor_expression  {
+        $$ = parseContext.handleBinaryMath($2.loc, "||", EOpLogicalOr, $1, $3);
+        if ($$ == 0)
+            $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
+    }
+    ;
+
+conditional_expression
+    : logical_or_expression { $$ = $1; }
+    | logical_or_expression QUESTION {
+        ++parseContext.controlFlowNestingLevel;
+    }
+      expression COLON assignment_expression {
+        --parseContext.controlFlowNestingLevel;
+        parseContext.boolCheck($2.loc, $1);
+        parseContext.rValueErrorCheck($2.loc, "?", $1);
+        parseContext.rValueErrorCheck($5.loc, ":", $4);
+        parseContext.rValueErrorCheck($5.loc, ":", $6);
+        $$ = parseContext.intermediate.addSelection($1, $4, $6, $2.loc);
+        if ($$ == 0) {
+            parseContext.binaryOpError($2.loc, ":", $4->getCompleteString(), $6->getCompleteString());
+            $$ = $6;
+        }
+    }
+    ;
+
+assignment_expression
+    : conditional_expression { $$ = $1; }
+    | unary_expression assignment_operator assignment_expression {
+        parseContext.arrayObjectCheck($2.loc, $1->getType(), "array assignment");
+        parseContext.opaqueCheck($2.loc, $1->getType(), "=");
+        parseContext.storage16BitAssignmentCheck($2.loc, $1->getType(), "=");
+        parseContext.specializationCheck($2.loc, $1->getType(), "=");
+        parseContext.lValueErrorCheck($2.loc, "assign", $1);
+        parseContext.rValueErrorCheck($2.loc, "assign", $3);
+        $$ = parseContext.intermediate.addAssign($2.op, $1, $3, $2.loc);
+        if ($$ == 0) {
+            parseContext.assignError($2.loc, "assign", $1->getCompleteString(), $3->getCompleteString());
+            $$ = $1;
+        }
+    }
+    ;
+
+assignment_operator
+    : EQUAL {
+        $$.loc = $1.loc;
+        $$.op = EOpAssign;
+    }
+    | MUL_ASSIGN {
+        $$.loc = $1.loc;
+        $$.op = EOpMulAssign;
+    }
+    | DIV_ASSIGN {
+        $$.loc = $1.loc;
+        $$.op = EOpDivAssign;
+    }
+    | MOD_ASSIGN {
+        parseContext.fullIntegerCheck($1.loc, "%=");
+        $$.loc = $1.loc;
+        $$.op = EOpModAssign;
+    }
+    | ADD_ASSIGN {
+        $$.loc = $1.loc;
+        $$.op = EOpAddAssign;
+    }
+    | SUB_ASSIGN {
+        $$.loc = $1.loc;
+        $$.op = EOpSubAssign;
+    }
+    | LEFT_ASSIGN {
+        parseContext.fullIntegerCheck($1.loc, "bit-shift left assign");
+        $$.loc = $1.loc; $$.op = EOpLeftShiftAssign;
+    }
+    | RIGHT_ASSIGN {
+        parseContext.fullIntegerCheck($1.loc, "bit-shift right assign");
+        $$.loc = $1.loc; $$.op = EOpRightShiftAssign;
+    }
+    | AND_ASSIGN {
+        parseContext.fullIntegerCheck($1.loc, "bitwise-and assign");
+        $$.loc = $1.loc; $$.op = EOpAndAssign;
+    }
+    | XOR_ASSIGN {
+        parseContext.fullIntegerCheck($1.loc, "bitwise-xor assign");
+        $$.loc = $1.loc; $$.op = EOpExclusiveOrAssign;
+    }
+    | OR_ASSIGN {
+        parseContext.fullIntegerCheck($1.loc, "bitwise-or assign");
+        $$.loc = $1.loc; $$.op = EOpInclusiveOrAssign;
+    }
+    ;
+
+expression
+    : assignment_expression {
+        $$ = $1;
+    }
+    | expression COMMA assignment_expression {
+        parseContext.samplerConstructorLocationCheck($2.loc, ",", $3);
+        $$ = parseContext.intermediate.addComma($1, $3, $2.loc);
+        if ($$ == 0) {
+            parseContext.binaryOpError($2.loc, ",", $1->getCompleteString(), $3->getCompleteString());
+            $$ = $3;
+        }
+    }
+    ;
+
+constant_expression
+    : conditional_expression {
+        parseContext.constantValueCheck($1, "");
+        $$ = $1;
+    }
+    ;
+
+declaration
+    : function_prototype SEMICOLON {
+        parseContext.handleFunctionDeclarator($1.loc, *$1.function, true /* prototype */);
+        $$ = 0;
+        // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
+    }
+    | init_declarator_list SEMICOLON {
+        if ($1.intermNode && $1.intermNode->getAsAggregate())
+            $1.intermNode->getAsAggregate()->setOperator(EOpSequence);
+        $$ = $1.intermNode;
+    }
+    | PRECISION precision_qualifier type_specifier SEMICOLON {
+        parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "precision statement");
+        // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope
+        parseContext.symbolTable.setPreviousDefaultPrecisions(&parseContext.defaultPrecision[0]);
+        parseContext.setDefaultPrecision($1.loc, $3, $2.qualifier.precision);
+        $$ = 0;
+    }
+    | block_structure SEMICOLON {
+        parseContext.declareBlock($1.loc, *$1.typeList);
+        $$ = 0;
+    }
+    | block_structure IDENTIFIER SEMICOLON {
+        parseContext.declareBlock($1.loc, *$1.typeList, $2.string);
+        $$ = 0;
+    }
+    | block_structure IDENTIFIER array_specifier SEMICOLON {
+        parseContext.declareBlock($1.loc, *$1.typeList, $2.string, $3.arraySizes);
+        $$ = 0;
+    }
+    | type_qualifier SEMICOLON {
+        parseContext.globalQualifierFixCheck($1.loc, $1.qualifier);
+        parseContext.updateStandaloneQualifierDefaults($1.loc, $1);
+        $$ = 0;
+    }
+    | type_qualifier IDENTIFIER SEMICOLON {
+        parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers);
+        parseContext.addQualifierToExisting($1.loc, $1.qualifier, *$2.string);
+        $$ = 0;
+    }
+    | type_qualifier IDENTIFIER identifier_list SEMICOLON {
+        parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers);
+        $3->push_back($2.string);
+        parseContext.addQualifierToExisting($1.loc, $1.qualifier, *$3);
+        $$ = 0;
+    }
+    ;
+
+block_structure
+    : type_qualifier IDENTIFIER LEFT_BRACE { parseContext.nestedBlockCheck($1.loc); } struct_declaration_list RIGHT_BRACE {
+        --parseContext.structNestingLevel;
+        parseContext.blockName = $2.string;
+        parseContext.globalQualifierFixCheck($1.loc, $1.qualifier);
+        parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers);
+        parseContext.currentBlockQualifier = $1.qualifier;
+        $$.loc = $1.loc;
+        $$.typeList = $5;
+    }
+
+identifier_list
+    : COMMA IDENTIFIER {
+        $$ = new TIdentifierList;
+        $$->push_back($2.string);
+    }
+    | identifier_list COMMA IDENTIFIER {
+        $$ = $1;
+        $$->push_back($3.string);
+    }
+    ;
+
+function_prototype
+    : function_declarator RIGHT_PAREN  {
+        $$.function = $1;
+        $$.loc = $2.loc;
+    }
+    ;
+
+function_declarator
+    : function_header {
+        $$ = $1;
+    }
+    | function_header_with_parameters {
+        $$ = $1;
+    }
+    ;
+
+
+function_header_with_parameters
+    : function_header parameter_declaration {
+        // Add the parameter
+        $$ = $1;
+        if ($2.param.type->getBasicType() != EbtVoid)
+            $1->addParameter($2.param);
+        else
+            delete $2.param.type;
+    }
+    | function_header_with_parameters COMMA parameter_declaration {
+        //
+        // Only first parameter of one-parameter functions can be void
+        // The check for named parameters not being void is done in parameter_declarator
+        //
+        if ($3.param.type->getBasicType() == EbtVoid) {
+            //
+            // This parameter > first is void
+            //
+            parseContext.error($2.loc, "cannot be an argument type except for '(void)'", "void", "");
+            delete $3.param.type;
+        } else {
+            // Add the parameter
+            $$ = $1;
+            $1->addParameter($3.param);
+        }
+    }
+    ;
+
+function_header
+    : fully_specified_type IDENTIFIER LEFT_PAREN {
+        if ($1.qualifier.storage != EvqGlobal && $1.qualifier.storage != EvqTemporary) {
+            parseContext.error($2.loc, "no qualifiers allowed for function return",
+                               GetStorageQualifierString($1.qualifier.storage), "");
+        }
+        if ($1.arraySizes)
+            parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes);
+
+        // Add the function as a prototype after parsing it (we do not support recursion)
+        TFunction *function;
+        TType type($1);
+
+        // Potentially rename shader entry point function.  No-op most of the time.
+        parseContext.renameShaderFunction($2.string);
+
+        // Make the function
+        function = new TFunction($2.string, type);
+        $$ = function;
+    }
+    ;
+
+parameter_declarator
+    // Type + name
+    : type_specifier IDENTIFIER {
+        if ($1.arraySizes) {
+            parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+            parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type");
+            parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes);
+        }
+        if ($1.basicType == EbtVoid) {
+            parseContext.error($2.loc, "illegal use of type 'void'", $2.string->c_str(), "");
+        }
+        parseContext.reservedErrorCheck($2.loc, *$2.string);
+
+        TParameter param = {$2.string, new TType($1)};
+        $$.loc = $2.loc;
+        $$.param = param;
+    }
+    | type_specifier IDENTIFIER array_specifier {
+        if ($1.arraySizes) {
+            parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+            parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type");
+            parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes);
+        }
+        TType* type = new TType($1);
+        type->transferArraySizes($3.arraySizes);
+        type->copyArrayInnerSizes($1.arraySizes);
+
+        parseContext.arrayOfArrayVersionCheck($2.loc, type->getArraySizes());
+        parseContext.arraySizeRequiredCheck($3.loc, *$3.arraySizes);
+        parseContext.reservedErrorCheck($2.loc, *$2.string);
+
+        TParameter param = { $2.string, type };
+
+        $$.loc = $2.loc;
+        $$.param = param;
+    }
+    ;
+
+parameter_declaration
+    //
+    // With name
+    //
+    : type_qualifier parameter_declarator {
+        $$ = $2;
+        if ($1.qualifier.precision != EpqNone)
+            $$.param.type->getQualifier().precision = $1.qualifier.precision;
+        parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier());
+
+        parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers);
+        parseContext.parameterTypeCheck($2.loc, $1.qualifier.storage, *$$.param.type);
+        parseContext.paramCheckFix($1.loc, $1.qualifier, *$$.param.type);
+
+    }
+    | parameter_declarator {
+        $$ = $1;
+
+        parseContext.parameterTypeCheck($1.loc, EvqIn, *$1.param.type);
+        parseContext.paramCheckFixStorage($1.loc, EvqTemporary, *$$.param.type);
+        parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier());
+    }
+    //
+    // Without name
+    //
+    | type_qualifier parameter_type_specifier {
+        $$ = $2;
+        if ($1.qualifier.precision != EpqNone)
+            $$.param.type->getQualifier().precision = $1.qualifier.precision;
+        parseContext.precisionQualifierCheck($1.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier());
+
+        parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers);
+        parseContext.parameterTypeCheck($2.loc, $1.qualifier.storage, *$$.param.type);
+        parseContext.paramCheckFix($1.loc, $1.qualifier, *$$.param.type);
+    }
+    | parameter_type_specifier {
+        $$ = $1;
+
+        parseContext.parameterTypeCheck($1.loc, EvqIn, *$1.param.type);
+        parseContext.paramCheckFixStorage($1.loc, EvqTemporary, *$$.param.type);
+        parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier());
+    }
+    ;
+
+parameter_type_specifier
+    : type_specifier {
+        TParameter param = { 0, new TType($1) };
+        $$.param = param;
+        if ($1.arraySizes)
+            parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes);
+    }
+    ;
+
+init_declarator_list
+    : single_declaration {
+        $$ = $1;
+    }
+    | init_declarator_list COMMA IDENTIFIER {
+        $$ = $1;
+        parseContext.declareVariable($3.loc, *$3.string, $1.type);
+    }
+    | init_declarator_list COMMA IDENTIFIER array_specifier {
+        $$ = $1;
+        parseContext.declareVariable($3.loc, *$3.string, $1.type, $4.arraySizes);
+    }
+    | init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer {
+        $$.type = $1.type;
+        TIntermNode* initNode = parseContext.declareVariable($3.loc, *$3.string, $1.type, $4.arraySizes, $6);
+        $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, initNode, $5.loc);
+    }
+    | init_declarator_list COMMA IDENTIFIER EQUAL initializer {
+        $$.type = $1.type;
+        TIntermNode* initNode = parseContext.declareVariable($3.loc, *$3.string, $1.type, 0, $5);
+        $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, initNode, $4.loc);
+    }
+    ;
+
+single_declaration
+    : fully_specified_type {
+        $$.type = $1;
+        $$.intermNode = 0;
+GLSLANG_WEB_EXCLUDE_ON
+        parseContext.declareTypeDefaults($$.loc, $$.type);
+GLSLANG_WEB_EXCLUDE_OFF
+    }
+    | fully_specified_type IDENTIFIER {
+        $$.type = $1;
+        $$.intermNode = 0;
+        parseContext.declareVariable($2.loc, *$2.string, $1);
+    }
+    | fully_specified_type IDENTIFIER array_specifier {
+        $$.type = $1;
+        $$.intermNode = 0;
+        parseContext.declareVariable($2.loc, *$2.string, $1, $3.arraySizes);
+    }
+    | fully_specified_type IDENTIFIER array_specifier EQUAL initializer {
+        $$.type = $1;
+        TIntermNode* initNode = parseContext.declareVariable($2.loc, *$2.string, $1, $3.arraySizes, $5);
+        $$.intermNode = parseContext.intermediate.growAggregate(0, initNode, $4.loc);
+    }
+    | fully_specified_type IDENTIFIER EQUAL initializer {
+        $$.type = $1;
+        TIntermNode* initNode = parseContext.declareVariable($2.loc, *$2.string, $1, 0, $4);
+        $$.intermNode = parseContext.intermediate.growAggregate(0, initNode, $3.loc);
+    }
+
+// Grammar Note:  No 'enum', or 'typedef'.
+
+fully_specified_type
+    : type_specifier {
+        $$ = $1;
+
+        parseContext.globalQualifierTypeCheck($1.loc, $1.qualifier, $$);
+        if ($1.arraySizes) {
+            parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+            parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type");
+        }
+        parseContext.precisionQualifierCheck($$.loc, $$.basicType, $$.qualifier);
+    }
+    | type_qualifier type_specifier  {
+        parseContext.globalQualifierFixCheck($1.loc, $1.qualifier);
+        parseContext.globalQualifierTypeCheck($1.loc, $1.qualifier, $2);
+
+        if ($2.arraySizes) {
+            parseContext.profileRequires($2.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+            parseContext.profileRequires($2.loc, EEsProfile, 300, 0, "arrayed type");
+        }
+
+        if ($2.arraySizes && parseContext.arrayQualifierError($2.loc, $1.qualifier))
+            $2.arraySizes = nullptr;
+
+        parseContext.checkNoShaderLayouts($2.loc, $1.shaderQualifiers);
+        $2.shaderQualifiers.merge($1.shaderQualifiers);
+        parseContext.mergeQualifiers($2.loc, $2.qualifier, $1.qualifier, true);
+        parseContext.precisionQualifierCheck($2.loc, $2.basicType, $2.qualifier);
+
+        $$ = $2;
+
+        if (! $$.qualifier.isInterpolation() &&
+            ((parseContext.language == EShLangVertex   && $$.qualifier.storage == EvqVaryingOut) ||
+             (parseContext.language == EShLangFragment && $$.qualifier.storage == EvqVaryingIn)))
+            $$.qualifier.smooth = true;
+    }
+    ;
+
+invariant_qualifier
+    : INVARIANT {
+        parseContext.globalCheck($1.loc, "invariant");
+        parseContext.profileRequires($$.loc, ENoProfile, 120, 0, "invariant");
+        $$.init($1.loc);
+        $$.qualifier.invariant = true;
+    }
+    ;
+
+interpolation_qualifier
+    : SMOOTH {
+        parseContext.globalCheck($1.loc, "smooth");
+        parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "smooth");
+        parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "smooth");
+        $$.init($1.loc);
+        $$.qualifier.smooth = true;
+    }
+    | FLAT {
+        parseContext.globalCheck($1.loc, "flat");
+        parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "flat");
+        parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "flat");
+        $$.init($1.loc);
+        $$.qualifier.flat = true;
+    }
+GLSLANG_WEB_EXCLUDE_ON
+    | NOPERSPECTIVE {
+        parseContext.globalCheck($1.loc, "noperspective");
+        parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective");
+        parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "noperspective");
+        $$.init($1.loc);
+        $$.qualifier.nopersp = true;
+    }
+    | EXPLICITINTERPAMD {
+        parseContext.globalCheck($1.loc, "__explicitInterpAMD");
+        parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
+        parseContext.profileRequires($1.loc, ECompatibilityProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
+        $$.init($1.loc);
+        $$.qualifier.explicitInterp = true;
+    }
+    | PERVERTEXNV {
+        parseContext.globalCheck($1.loc, "pervertexNV");
+        parseContext.profileRequires($1.loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
+        parseContext.profileRequires($1.loc, ECompatibilityProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
+        parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
+        $$.init($1.loc);
+        $$.qualifier.pervertexNV = true;
+    }
+    | PERPRIMITIVENV {
+        // No need for profile version or extension check. Shader stage already checks both.
+        parseContext.globalCheck($1.loc, "perprimitiveNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV");
+        // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
+        if (parseContext.language == EShLangFragment)
+            parseContext.requireExtensions($1.loc, 1, &E_GL_NV_mesh_shader, "perprimitiveNV");
+        $$.init($1.loc);
+        $$.qualifier.perPrimitiveNV = true;
+    }
+    | PERVIEWNV {
+        // No need for profile version or extension check. Shader stage already checks both.
+        parseContext.globalCheck($1.loc, "perviewNV");
+        parseContext.requireStage($1.loc, EShLangMeshNV, "perviewNV");
+        $$.init($1.loc);
+        $$.qualifier.perViewNV = true;
+    }
+    | PERTASKNV {
+        // No need for profile version or extension check. Shader stage already checks both.
+        parseContext.globalCheck($1.loc, "taskNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV");
+        $$.init($1.loc);
+        $$.qualifier.perTaskNV = true;
+    }
+GLSLANG_WEB_EXCLUDE_OFF
+    ;
+
+layout_qualifier
+    : LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN {
+        $$ = $3;
+    }
+    ;
+
+layout_qualifier_id_list
+    : layout_qualifier_id {
+        $$ = $1;
+    }
+    | layout_qualifier_id_list COMMA layout_qualifier_id {
+        $$ = $1;
+        $$.shaderQualifiers.merge($3.shaderQualifiers);
+        parseContext.mergeObjectLayoutQualifiers($$.qualifier, $3.qualifier, false);
+    }
+
+layout_qualifier_id
+    : IDENTIFIER {
+        $$.init($1.loc);
+        parseContext.setLayoutQualifier($1.loc, $$, *$1.string);
+    }
+    | IDENTIFIER EQUAL constant_expression {
+        $$.init($1.loc);
+        parseContext.setLayoutQualifier($1.loc, $$, *$1.string, $3);
+    }
+    | SHARED { // because "shared" is both an identifier and a keyword
+        $$.init($1.loc);
+        TString strShared("shared");
+        parseContext.setLayoutQualifier($1.loc, $$, strShared);
+    }
+    ;
+
+GLSLANG_WEB_EXCLUDE_ON
+precise_qualifier
+    : PRECISE {
+        parseContext.profileRequires($$.loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
+        parseContext.profileRequires($1.loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
+        $$.init($1.loc);
+        $$.qualifier.noContraction = true;
+    }
+    ;
+GLSLANG_WEB_EXCLUDE_OFF
+
+type_qualifier
+    : single_type_qualifier {
+        $$ = $1;
+    }
+    | type_qualifier single_type_qualifier {
+        $$ = $1;
+        if ($$.basicType == EbtVoid)
+            $$.basicType = $2.basicType;
+
+        $$.shaderQualifiers.merge($2.shaderQualifiers);
+        parseContext.mergeQualifiers($$.loc, $$.qualifier, $2.qualifier, false);
+    }
+    ;
+
+single_type_qualifier
+    : storage_qualifier {
+        $$ = $1;
+    }
+    | layout_qualifier {
+        $$ = $1;
+    }
+    | precision_qualifier {
+        parseContext.checkPrecisionQualifier($1.loc, $1.qualifier.precision);
+        $$ = $1;
+    }
+    | interpolation_qualifier {
+        // allow inheritance of storage qualifier from block declaration
+        $$ = $1;
+    }
+    | invariant_qualifier {
+        // allow inheritance of storage qualifier from block declaration
+        $$ = $1;
+    }
+GLSLANG_WEB_EXCLUDE_ON
+    | precise_qualifier {
+        // allow inheritance of storage qualifier from block declaration
+        $$ = $1;
+    }
+    | non_uniform_qualifier {
+        $$ = $1;
+    }
+GLSLANG_WEB_EXCLUDE_OFF
+    ;
+
+storage_qualifier
+    : CONST {
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqConst;  // will later turn into EvqConstReadOnly, if the initializer is not constant
+    }
+    | INOUT {
+        parseContext.globalCheck($1.loc, "inout");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqInOut;
+    }
+    | IN {
+        parseContext.globalCheck($1.loc, "in");
+        $$.init($1.loc);
+        // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
+        $$.qualifier.storage = EvqIn;
+    }
+    | OUT {
+        parseContext.globalCheck($1.loc, "out");
+        $$.init($1.loc);
+        // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
+        $$.qualifier.storage = EvqOut;
+    }
+    | CENTROID {
+        parseContext.profileRequires($1.loc, ENoProfile, 120, 0, "centroid");
+        parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "centroid");
+        parseContext.globalCheck($1.loc, "centroid");
+        $$.init($1.loc);
+        $$.qualifier.centroid = true;
+    }
+    | UNIFORM {
+        parseContext.globalCheck($1.loc, "uniform");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqUniform;
+    }
+    | SHARED {
+        parseContext.globalCheck($1.loc, "shared");
+        parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
+        parseContext.profileRequires($1.loc, EEsProfile, 310, 0, "shared");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqShared;
+    }
+    | BUFFER {
+        parseContext.globalCheck($1.loc, "buffer");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqBuffer;
+    }
+GLSLANG_WEB_EXCLUDE_ON
+    | ATTRIBUTE {
+        parseContext.requireStage($1.loc, EShLangVertex, "attribute");
+        parseContext.checkDeprecated($1.loc, ECoreProfile, 130, "attribute");
+        parseContext.checkDeprecated($1.loc, ENoProfile, 130, "attribute");
+        parseContext.requireNotRemoved($1.loc, ECoreProfile, 420, "attribute");
+        parseContext.requireNotRemoved($1.loc, EEsProfile, 300, "attribute");
+
+        parseContext.globalCheck($1.loc, "attribute");
+
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqVaryingIn;
+    }
+    | VARYING {
+        parseContext.checkDeprecated($1.loc, ENoProfile, 130, "varying");
+        parseContext.checkDeprecated($1.loc, ECoreProfile, 130, "varying");
+        parseContext.requireNotRemoved($1.loc, ECoreProfile, 420, "varying");
+        parseContext.requireNotRemoved($1.loc, EEsProfile, 300, "varying");
+
+        parseContext.globalCheck($1.loc, "varying");
+
+        $$.init($1.loc);
+        if (parseContext.language == EShLangVertex)
+            $$.qualifier.storage = EvqVaryingOut;
+        else
+            $$.qualifier.storage = EvqVaryingIn;
+    }
+    | PATCH {
+        parseContext.globalCheck($1.loc, "patch");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
+        $$.init($1.loc);
+        $$.qualifier.patch = true;
+    }
+    | SAMPLE {
+        parseContext.globalCheck($1.loc, "sample");
+        $$.init($1.loc);
+        $$.qualifier.sample = true;
+    }
+    | HITATTRNV {
+        parseContext.globalCheck($1.loc, "hitAttributeNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
+            | EShLangAnyHitMask), "hitAttributeNV");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "hitAttributeNV");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqHitAttr;
+    }
+    | HITATTREXT {
+        parseContext.globalCheck($1.loc, "hitAttributeEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
+            | EShLangAnyHitMask), "hitAttributeEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "hitAttributeNV");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqHitAttr;
+    }
+    | PAYLOADNV {
+        parseContext.globalCheck($1.loc, "rayPayloadNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadNV");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadNV");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqPayload;
+    }
+    | PAYLOADEXT {
+        parseContext.globalCheck($1.loc, "rayPayloadEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadEXT");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqPayload;
+    }
+    | PAYLOADINNV {
+        parseContext.globalCheck($1.loc, "rayPayloadInNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadInNV");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadInNV");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqPayloadIn;
+    }
+    | PAYLOADINEXT {
+        parseContext.globalCheck($1.loc, "rayPayloadInEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadInEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadInEXT");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqPayloadIn;
+    }
+    | CALLDATANV {
+        parseContext.globalCheck($1.loc, "callableDataNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask |
+            EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataNV");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataNV");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqCallableData;
+    }
+    | CALLDATAEXT {
+        parseContext.globalCheck($1.loc, "callableDataEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask |
+            EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataEXT");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqCallableData;
+    }
+    | CALLDATAINNV {
+        parseContext.globalCheck($1.loc, "callableDataInNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqCallableDataIn;
+    }
+    | CALLDATAINEXT {
+        parseContext.globalCheck($1.loc, "callableDataInEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataInEXT");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqCallableDataIn;
+    }
+    | COHERENT {
+        $$.init($1.loc);
+        $$.qualifier.coherent = true;
+    }
+    | DEVICECOHERENT {
+        $$.init($1.loc);
+        parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
+        $$.qualifier.devicecoherent = true;
+    }
+    | QUEUEFAMILYCOHERENT {
+        $$.init($1.loc);
+        parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent");
+        $$.qualifier.queuefamilycoherent = true;
+    }
+    | WORKGROUPCOHERENT {
+        $$.init($1.loc);
+        parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent");
+        $$.qualifier.workgroupcoherent = true;
+    }
+    | SUBGROUPCOHERENT {
+        $$.init($1.loc);
+        parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent");
+        $$.qualifier.subgroupcoherent = true;
+    }
+    | NONPRIVATE {
+        $$.init($1.loc);
+        parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate");
+        $$.qualifier.nonprivate = true;
+    }
+    | SHADERCALLCOHERENT {
+        $$.init($1.loc);
+        parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent");
+        $$.qualifier.shadercallcoherent = true;
+    }
+    | VOLATILE {
+        $$.init($1.loc);
+        $$.qualifier.volatil = true;
+    }
+    | RESTRICT {
+        $$.init($1.loc);
+        $$.qualifier.restrict = true;
+    }
+    | READONLY {
+        $$.init($1.loc);
+        $$.qualifier.readonly = true;
+    }
+    | WRITEONLY {
+        $$.init($1.loc);
+        $$.qualifier.writeonly = true;
+    }
+    | SUBROUTINE {
+        parseContext.spvRemoved($1.loc, "subroutine");
+        parseContext.globalCheck($1.loc, "subroutine");
+        parseContext.unimplemented($1.loc, "subroutine");
+        $$.init($1.loc);
+    }
+    | SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN {
+        parseContext.spvRemoved($1.loc, "subroutine");
+        parseContext.globalCheck($1.loc, "subroutine");
+        parseContext.unimplemented($1.loc, "subroutine");
+        $$.init($1.loc);
+    }
+GLSLANG_WEB_EXCLUDE_OFF
+    ;
+
+GLSLANG_WEB_EXCLUDE_ON
+non_uniform_qualifier
+    : NONUNIFORM {
+        $$.init($1.loc);
+        $$.qualifier.nonUniform = true;
+    }
+    ;
+
+type_name_list
+    : IDENTIFIER {
+        // TODO
+    }
+    | type_name_list COMMA IDENTIFIER {
+        // TODO: 4.0 semantics: subroutines
+        // 1) make sure each identifier is a type declared earlier with SUBROUTINE
+        // 2) save all of the identifiers for future comparison with the declared function
+    }
+    ;
+GLSLANG_WEB_EXCLUDE_OFF
+
+type_specifier
+    : type_specifier_nonarray type_parameter_specifier_opt {
+        $$ = $1;
+        $$.qualifier.precision = parseContext.getDefaultPrecision($$);
+        $$.typeParameters = $2;
+    }
+    | type_specifier_nonarray type_parameter_specifier_opt array_specifier {
+        parseContext.arrayOfArrayVersionCheck($3.loc, $3.arraySizes);
+        $$ = $1;
+        $$.qualifier.precision = parseContext.getDefaultPrecision($$);
+        $$.typeParameters = $2;
+        $$.arraySizes = $3.arraySizes;
+    }
+    ;
+
+array_specifier
+    : LEFT_BRACKET RIGHT_BRACKET {
+        $$.loc = $1.loc;
+        $$.arraySizes = new TArraySizes;
+        $$.arraySizes->addInnerSize();
+    }
+    | LEFT_BRACKET conditional_expression RIGHT_BRACKET {
+        $$.loc = $1.loc;
+        $$.arraySizes = new TArraySizes;
+
+        TArraySize size;
+        parseContext.arraySizeCheck($2->getLoc(), $2, size, "array size");
+        $$.arraySizes->addInnerSize(size);
+    }
+    | array_specifier LEFT_BRACKET RIGHT_BRACKET {
+        $$ = $1;
+        $$.arraySizes->addInnerSize();
+    }
+    | array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET {
+        $$ = $1;
+
+        TArraySize size;
+        parseContext.arraySizeCheck($3->getLoc(), $3, size, "array size");
+        $$.arraySizes->addInnerSize(size);
+    }
+    ;
+
+type_parameter_specifier_opt
+    : type_parameter_specifier {
+        $$ = $1;
+    }
+    | /* May be null */ {
+        $$ = 0;
+    }
+    ;
+
+type_parameter_specifier
+    : LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE {
+        $$ = $2;
+    }
+    ;
+
+type_parameter_specifier_list
+    : unary_expression {
+        $$ = new TArraySizes;
+
+        TArraySize size;
+        parseContext.arraySizeCheck($1->getLoc(), $1, size, "type parameter");
+        $$->addInnerSize(size);
+    }
+    | type_parameter_specifier_list COMMA unary_expression {
+        $$ = $1;
+
+        TArraySize size;
+        parseContext.arraySizeCheck($3->getLoc(), $3, size, "type parameter");
+        $$->addInnerSize(size);
+    }
+    ;
+
+type_specifier_nonarray
+    : VOID {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtVoid;
+    }
+    | FLOAT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+    }
+    | INT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+    }
+    | UINT {
+        parseContext.fullIntegerCheck($1.loc, "unsigned integer");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+    }
+    | BOOL {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtBool;
+    }
+    | VEC2 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setVector(2);
+    }
+    | VEC3 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setVector(3);
+    }
+    | VEC4 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setVector(4);
+    }
+    | BVEC2 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtBool;
+        $$.setVector(2);
+    }
+    | BVEC3 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtBool;
+        $$.setVector(3);
+    }
+    | BVEC4 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtBool;
+        $$.setVector(4);
+    }
+    | IVEC2 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+        $$.setVector(2);
+    }
+    | IVEC3 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+        $$.setVector(3);
+    }
+    | IVEC4 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+        $$.setVector(4);
+    }
+    | UVEC2 {
+        parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+        $$.setVector(2);
+    }
+    | UVEC3 {
+        parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+        $$.setVector(3);
+    }
+    | UVEC4 {
+        parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+        $$.setVector(4);
+    }
+    | MAT2 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(2, 2);
+    }
+    | MAT3 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(3, 3);
+    }
+    | MAT4 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(4, 4);
+    }
+    | MAT2X2 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(2, 2);
+    }
+    | MAT2X3 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(2, 3);
+    }
+    | MAT2X4 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(2, 4);
+    }
+    | MAT3X2 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(3, 2);
+    }
+    | MAT3X3 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(3, 3);
+    }
+    | MAT3X4 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(3, 4);
+    }
+    | MAT4X2 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(4, 2);
+    }
+    | MAT4X3 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(4, 3);
+    }
+    | MAT4X4 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(4, 4);
+    }
+GLSLANG_WEB_EXCLUDE_ON
+    | DOUBLE {
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+    }
+    | FLOAT16_T {
+        parseContext.float16ScalarVectorCheck($1.loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+    }
+    | FLOAT32_T {
+        parseContext.explicitFloat32Check($1.loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+    }
+    | FLOAT64_T {
+        parseContext.explicitFloat64Check($1.loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+    }
+    | INT8_T {
+        parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt8;
+    }
+    | UINT8_T {
+        parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint8;
+    }
+    | INT16_T {
+        parseContext.int16ScalarVectorCheck($1.loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt16;
+    }
+    | UINT16_T {
+        parseContext.int16ScalarVectorCheck($1.loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint16;
+    }
+    | INT32_T {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+    }
+    | UINT32_T {
+        parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+    }
+    | INT64_T {
+        parseContext.int64Check($1.loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt64;
+    }
+    | UINT64_T {
+        parseContext.int64Check($1.loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint64;
+    }
+    | DVEC2 {
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double vector");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setVector(2);
+    }
+    | DVEC3 {
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double vector");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setVector(3);
+    }
+    | DVEC4 {
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double vector");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setVector(4);
+    }
+    | F16VEC2 {
+        parseContext.float16ScalarVectorCheck($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setVector(2);
+    }
+    | F16VEC3 {
+        parseContext.float16ScalarVectorCheck($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setVector(3);
+    }
+    | F16VEC4 {
+        parseContext.float16ScalarVectorCheck($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setVector(4);
+    }
+    | F32VEC2 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setVector(2);
+    }
+    | F32VEC3 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setVector(3);
+    }
+    | F32VEC4 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setVector(4);
+    }
+    | F64VEC2 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setVector(2);
+    }
+    | F64VEC3 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setVector(3);
+    }
+    | F64VEC4 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setVector(4);
+    }
+    | I8VEC2 {
+        parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt8;
+        $$.setVector(2);
+    }
+    | I8VEC3 {
+        parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt8;
+        $$.setVector(3);
+    }
+    | I8VEC4 {
+        parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt8;
+        $$.setVector(4);
+    }
+    | I16VEC2 {
+        parseContext.int16ScalarVectorCheck($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt16;
+        $$.setVector(2);
+    }
+    | I16VEC3 {
+        parseContext.int16ScalarVectorCheck($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt16;
+        $$.setVector(3);
+    }
+    | I16VEC4 {
+        parseContext.int16ScalarVectorCheck($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt16;
+        $$.setVector(4);
+    }
+    | I32VEC2 {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+        $$.setVector(2);
+    }
+    | I32VEC3 {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+        $$.setVector(3);
+    }
+    | I32VEC4 {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+        $$.setVector(4);
+    }
+    | I64VEC2 {
+        parseContext.int64Check($1.loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt64;
+        $$.setVector(2);
+    }
+    | I64VEC3 {
+        parseContext.int64Check($1.loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt64;
+        $$.setVector(3);
+    }
+    | I64VEC4 {
+        parseContext.int64Check($1.loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt64;
+        $$.setVector(4);
+    }
+    | U8VEC2 {
+        parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint8;
+        $$.setVector(2);
+    }
+    | U8VEC3 {
+        parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint8;
+        $$.setVector(3);
+    }
+    | U8VEC4 {
+        parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint8;
+        $$.setVector(4);
+    }
+    | U16VEC2 {
+        parseContext.int16ScalarVectorCheck($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint16;
+        $$.setVector(2);
+    }
+    | U16VEC3 {
+        parseContext.int16ScalarVectorCheck($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint16;
+        $$.setVector(3);
+    }
+    | U16VEC4 {
+        parseContext.int16ScalarVectorCheck($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint16;
+        $$.setVector(4);
+    }
+    | U32VEC2 {
+        parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+        $$.setVector(2);
+    }
+    | U32VEC3 {
+        parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+        $$.setVector(3);
+    }
+    | U32VEC4 {
+        parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+        $$.setVector(4);
+    }
+    | U64VEC2 {
+        parseContext.int64Check($1.loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint64;
+        $$.setVector(2);
+    }
+    | U64VEC3 {
+        parseContext.int64Check($1.loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint64;
+        $$.setVector(3);
+    }
+    | U64VEC4 {
+        parseContext.int64Check($1.loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint64;
+        $$.setVector(4);
+    }
+    | DMAT2 {
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(2, 2);
+    }
+    | DMAT3 {
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(3, 3);
+    }
+    | DMAT4 {
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(4, 4);
+    }
+    | DMAT2X2 {
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(2, 2);
+    }
+    | DMAT2X3 {
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(2, 3);
+    }
+    | DMAT2X4 {
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(2, 4);
+    }
+    | DMAT3X2 {
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(3, 2);
+    }
+    | DMAT3X3 {
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(3, 3);
+    }
+    | DMAT3X4 {
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(3, 4);
+    }
+    | DMAT4X2 {
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(4, 2);
+    }
+    | DMAT4X3 {
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(4, 3);
+    }
+    | DMAT4X4 {
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(4, 4);
+    }
+    | F16MAT2 {
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(2, 2);
+    }
+    | F16MAT3 {
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(3, 3);
+    }
+    | F16MAT4 {
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(4, 4);
+    }
+    | F16MAT2X2 {
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(2, 2);
+    }
+    | F16MAT2X3 {
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(2, 3);
+    }
+    | F16MAT2X4 {
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(2, 4);
+    }
+    | F16MAT3X2 {
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(3, 2);
+    }
+    | F16MAT3X3 {
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(3, 3);
+    }
+    | F16MAT3X4 {
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(3, 4);
+    }
+    | F16MAT4X2 {
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(4, 2);
+    }
+    | F16MAT4X3 {
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(4, 3);
+    }
+    | F16MAT4X4 {
+        parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat16;
+        $$.setMatrix(4, 4);
+    }
+    | F32MAT2 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(2, 2);
+    }
+    | F32MAT3 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(3, 3);
+    }
+    | F32MAT4 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(4, 4);
+    }
+    | F32MAT2X2 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(2, 2);
+    }
+    | F32MAT2X3 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(2, 3);
+    }
+    | F32MAT2X4 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(2, 4);
+    }
+    | F32MAT3X2 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(3, 2);
+    }
+    | F32MAT3X3 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(3, 3);
+    }
+    | F32MAT3X4 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(3, 4);
+    }
+    | F32MAT4X2 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(4, 2);
+    }
+    | F32MAT4X3 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(4, 3);
+    }
+    | F32MAT4X4 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(4, 4);
+    }
+    | F64MAT2 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(2, 2);
+    }
+    | F64MAT3 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(3, 3);
+    }
+    | F64MAT4 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(4, 4);
+    }
+    | F64MAT2X2 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(2, 2);
+    }
+    | F64MAT2X3 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(2, 3);
+    }
+    | F64MAT2X4 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(2, 4);
+    }
+    | F64MAT3X2 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(3, 2);
+    }
+    | F64MAT3X3 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(3, 3);
+    }
+    | F64MAT3X4 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(3, 4);
+    }
+    | F64MAT4X2 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(4, 2);
+    }
+    | F64MAT4X3 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(4, 3);
+    }
+    | F64MAT4X4 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(4, 4);
+    }
+    | ACCSTRUCTNV {
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtAccStruct;
+    }
+    | ACCSTRUCTEXT {
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtAccStruct;
+    }
+    | RAYQUERYEXT {
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtRayQuery;
+    }
+    | ATOMIC_UINT {
+        parseContext.vulkanRemoved($1.loc, "atomic counter types");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtAtomicUint;
+    }
+    | SAMPLER1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd1D);
+    }
+GLSLANG_WEB_EXCLUDE_OFF
+    | SAMPLER2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd2D);
+    }
+    | SAMPLER3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd3D);
+    }
+    | SAMPLERCUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, EsdCube);
+    }
+    | SAMPLER2DSHADOW {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd2D, false, true);
+    }
+    | SAMPLERCUBESHADOW {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, EsdCube, false, true);
+    }
+    | SAMPLER2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd2D, true);
+    }
+    | SAMPLER2DARRAYSHADOW {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd2D, true, true);
+    }
+GLSLANG_WEB_EXCLUDE_ON
+    | SAMPLER1DSHADOW {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd1D, false, true);
+    }
+    | SAMPLER1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd1D, true);
+    }
+    | SAMPLER1DARRAYSHADOW {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd1D, true, true);
+    }
+    | SAMPLERCUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, EsdCube, true);
+    }
+    | SAMPLERCUBEARRAYSHADOW {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, EsdCube, true, true);
+    }
+    | F16SAMPLER1D {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd1D);
+    }
+    | F16SAMPLER2D {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd2D);
+    }
+    | F16SAMPLER3D {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd3D);
+    }
+    | F16SAMPLERCUBE {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdCube);
+    }
+    | F16SAMPLER1DSHADOW {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd1D, false, true);
+    }
+    | F16SAMPLER2DSHADOW {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd2D, false, true);
+    }
+    | F16SAMPLERCUBESHADOW {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdCube, false, true);
+    }
+    | F16SAMPLER1DARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd1D, true);
+    }
+    | F16SAMPLER2DARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd2D, true);
+    }
+    | F16SAMPLER1DARRAYSHADOW {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd1D, true, true);
+    }
+    | F16SAMPLER2DARRAYSHADOW {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd2D, true, true);
+    }
+    | F16SAMPLERCUBEARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdCube, true);
+    }
+    | F16SAMPLERCUBEARRAYSHADOW {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdCube, true, true);
+    }
+    | ISAMPLER1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, Esd1D);
+    }
+GLSLANG_WEB_EXCLUDE_OFF
+    | ISAMPLER2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, Esd2D);
+    }
+    | ISAMPLER3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, Esd3D);
+    }
+    | ISAMPLERCUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, EsdCube);
+    }
+    | ISAMPLER2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, Esd2D, true);
+    }
+    | USAMPLER2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, Esd2D);
+    }
+    | USAMPLER3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, Esd3D);
+    }
+    | USAMPLERCUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, EsdCube);
+    }
+GLSLANG_WEB_EXCLUDE_ON
+    | ISAMPLER1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, Esd1D, true);
+    }
+    | ISAMPLERCUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, EsdCube, true);
+    }
+    | USAMPLER1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, Esd1D);
+    }
+    | USAMPLER1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, Esd1D, true);
+    }
+    | USAMPLERCUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, EsdCube, true);
+    }
+    | TEXTURECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, EsdCube, true);
+    }
+    | ITEXTURECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, EsdCube, true);
+    }
+    | UTEXTURECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, EsdCube, true);
+    }
+GLSLANG_WEB_EXCLUDE_OFF
+    | USAMPLER2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, Esd2D, true);
+    }
+    | TEXTURE2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, Esd2D);
+    }
+    | TEXTURE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, Esd3D);
+    }
+    | TEXTURE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, Esd2D, true);
+    }
+    | TEXTURECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, EsdCube);
+    }
+    | ITEXTURE2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd2D);
+    }
+    | ITEXTURE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd3D);
+    }
+    | ITEXTURECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, EsdCube);
+    }
+    | ITEXTURE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd2D, true);
+    }
+    | UTEXTURE2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd2D);
+    }
+    | UTEXTURE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd3D);
+    }
+    | UTEXTURECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, EsdCube);
+    }
+    | UTEXTURE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd2D, true);
+    }
+    | SAMPLER {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setPureSampler(false);
+    }
+    | SAMPLERSHADOW {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setPureSampler(true);
+    }
+GLSLANG_WEB_EXCLUDE_ON
+    | SAMPLER2DRECT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, EsdRect);
+    }
+    | SAMPLER2DRECTSHADOW {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, EsdRect, false, true);
+    }
+    | F16SAMPLER2DRECT {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdRect);
+    }
+    | F16SAMPLER2DRECTSHADOW {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdRect, false, true);
+    }
+    | ISAMPLER2DRECT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, EsdRect);
+    }
+    | USAMPLER2DRECT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, EsdRect);
+    }
+    | SAMPLERBUFFER {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, EsdBuffer);
+    }
+    | F16SAMPLERBUFFER {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdBuffer);
+    }
+    | ISAMPLERBUFFER {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, EsdBuffer);
+    }
+    | USAMPLERBUFFER {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, EsdBuffer);
+    }
+    | SAMPLER2DMS {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd2D, false, false, true);
+    }
+    | F16SAMPLER2DMS {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd2D, false, false, true);
+    }
+    | ISAMPLER2DMS {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, Esd2D, false, false, true);
+    }
+    | USAMPLER2DMS {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, Esd2D, false, false, true);
+    }
+    | SAMPLER2DMSARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd2D, true, false, true);
+    }
+    | F16SAMPLER2DMSARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd2D, true, false, true);
+    }
+    | ISAMPLER2DMSARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, Esd2D, true, false, true);
+    }
+    | USAMPLER2DMSARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, Esd2D, true, false, true);
+    }
+    | TEXTURE1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, Esd1D);
+    }
+    | F16TEXTURE1D {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd1D);
+    }
+    | F16TEXTURE2D {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd2D);
+    }
+    | F16TEXTURE3D {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd3D);
+    }
+    | F16TEXTURECUBE {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, EsdCube);
+    }
+    | TEXTURE1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, Esd1D, true);
+    }
+    | F16TEXTURE1DARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd1D, true);
+    }
+    | F16TEXTURE2DARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd2D, true);
+    }
+    | F16TEXTURECUBEARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, EsdCube, true);
+    }
+    | ITEXTURE1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd1D);
+    }
+    | ITEXTURE1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd1D, true);
+    }
+    | UTEXTURE1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd1D);
+    }
+    | UTEXTURE1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd1D, true);
+    }
+    | TEXTURE2DRECT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, EsdRect);
+    }
+    | F16TEXTURE2DRECT {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, EsdRect);
+    }
+    | ITEXTURE2DRECT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, EsdRect);
+    }
+    | UTEXTURE2DRECT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, EsdRect);
+    }
+    | TEXTUREBUFFER {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, EsdBuffer);
+    }
+    | F16TEXTUREBUFFER {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, EsdBuffer);
+    }
+    | ITEXTUREBUFFER {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, EsdBuffer);
+    }
+    | UTEXTUREBUFFER {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, EsdBuffer);
+    }
+    | TEXTURE2DMS {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, Esd2D, false, false, true);
+    }
+    | F16TEXTURE2DMS {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
+    }
+    | ITEXTURE2DMS {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd2D, false, false, true);
+    }
+    | UTEXTURE2DMS {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd2D, false, false, true);
+    }
+    | TEXTURE2DMSARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, Esd2D, true, false, true);
+    }
+    | F16TEXTURE2DMSARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
+    }
+    | ITEXTURE2DMSARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd2D, true, false, true);
+    }
+    | UTEXTURE2DMSARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd2D, true, false, true);
+    }
+    | IMAGE1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat, Esd1D);
+    }
+    | F16IMAGE1D {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd1D);
+    }
+    | IIMAGE1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt, Esd1D);
+    }
+    | UIMAGE1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint, Esd1D);
+    }
+    | IMAGE2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat, Esd2D);
+    }
+    | F16IMAGE2D {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd2D);
+    }
+    | IIMAGE2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt, Esd2D);
+    }
+    | UIMAGE2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint, Esd2D);
+    }
+    | IMAGE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat, Esd3D);
+    }
+    | F16IMAGE3D {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd3D);
+    }
+    | IIMAGE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt, Esd3D);
+    }
+    | UIMAGE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint, Esd3D);
+    }
+    | IMAGE2DRECT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat, EsdRect);
+    }
+    | F16IMAGE2DRECT {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, EsdRect);
+    }
+    | IIMAGE2DRECT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt, EsdRect);
+    }
+    | UIMAGE2DRECT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint, EsdRect);
+    }
+    | IMAGECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat, EsdCube);
+    }
+    | F16IMAGECUBE {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, EsdCube);
+    }
+    | IIMAGECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt, EsdCube);
+    }
+    | UIMAGECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint, EsdCube);
+    }
+    | IMAGEBUFFER {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat, EsdBuffer);
+    }
+    | F16IMAGEBUFFER {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, EsdBuffer);
+    }
+    | IIMAGEBUFFER {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt, EsdBuffer);
+    }
+    | UIMAGEBUFFER {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint, EsdBuffer);
+    }
+    | IMAGE1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat, Esd1D, true);
+    }
+    | F16IMAGE1DARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd1D, true);
+    }
+    | IIMAGE1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt, Esd1D, true);
+    }
+    | UIMAGE1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint, Esd1D, true);
+    }
+    | IMAGE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat, Esd2D, true);
+    }
+    | F16IMAGE2DARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd2D, true);
+    }
+    | IIMAGE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt, Esd2D, true);
+    }
+    | UIMAGE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint, Esd2D, true);
+    }
+    | IMAGECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat, EsdCube, true);
+    }
+    | F16IMAGECUBEARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, EsdCube, true);
+    }
+    | IIMAGECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt, EsdCube, true);
+    }
+    | UIMAGECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint, EsdCube, true);
+    }
+    | IMAGE2DMS {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat, Esd2D, false, false, true);
+    }
+    | F16IMAGE2DMS {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd2D, false, false, true);
+    }
+    | IIMAGE2DMS {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt, Esd2D, false, false, true);
+    }
+    | UIMAGE2DMS {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint, Esd2D, false, false, true);
+    }
+    | IMAGE2DMSARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat, Esd2D, true, false, true);
+    }
+    | F16IMAGE2DMSARRAY {
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd2D, true, false, true);
+    }
+    | IIMAGE2DMSARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtInt, Esd2D, true, false, true);
+    }
+    | UIMAGE2DMSARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtUint, Esd2D, true, false, true);
+    }
+    | SAMPLEREXTERNALOES {  // GL_OES_EGL_image_external
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd2D);
+        $$.sampler.external = true;
+    }
+    | SAMPLEREXTERNAL2DY2YEXT { // GL_EXT_YUV_target
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd2D);
+        $$.sampler.yuv = true;
+    }
+    | SUBPASSINPUT {
+        parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setSubpass(EbtFloat);
+    }
+    | SUBPASSINPUTMS {
+        parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setSubpass(EbtFloat, true);
+    }
+    | F16SUBPASSINPUT {
+        parseContext.float16OpaqueCheck($1.loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setSubpass(EbtFloat16);
+    }
+    | F16SUBPASSINPUTMS {
+        parseContext.float16OpaqueCheck($1.loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setSubpass(EbtFloat16, true);
+    }
+    | ISUBPASSINPUT {
+        parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setSubpass(EbtInt);
+    }
+    | ISUBPASSINPUTMS {
+        parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setSubpass(EbtInt, true);
+    }
+    | USUBPASSINPUT {
+        parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setSubpass(EbtUint);
+    }
+    | USUBPASSINPUTMS {
+        parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setSubpass(EbtUint, true);
+    }
+    | FCOOPMATNV {
+        parseContext.fcoopmatCheck($1.loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.coopmat = true;
+    }
+    | ICOOPMATNV {
+        parseContext.intcoopmatCheck($1.loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+        $$.coopmat = true;
+    }
+    | UCOOPMATNV {
+        parseContext.intcoopmatCheck($1.loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+        $$.coopmat = true;
+    }
+GLSLANG_WEB_EXCLUDE_OFF
+    | struct_specifier {
+        $$ = $1;
+        $$.qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        parseContext.structTypeCheck($$.loc, $$);
+    }
+    | TYPE_NAME {
+        //
+        // This is for user defined type names.  The lexical phase looked up the
+        // type.
+        //
+        if (const TVariable* variable = ($1.symbol)->getAsVariable()) {
+            const TType& structure = variable->getType();
+            $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+            $$.basicType = EbtStruct;
+            $$.userDef = &structure;
+        } else
+            parseContext.error($1.loc, "expected type name", $1.string->c_str(), "");
+    }
+    ;
+
+precision_qualifier
+    : HIGH_PRECISION {
+        parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "highp precision qualifier");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.handlePrecisionQualifier($1.loc, $$.qualifier, EpqHigh);
+    }
+    | MEDIUM_PRECISION {
+        parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "mediump precision qualifier");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.handlePrecisionQualifier($1.loc, $$.qualifier, EpqMedium);
+    }
+    | LOW_PRECISION {
+        parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "lowp precision qualifier");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        parseContext.handlePrecisionQualifier($1.loc, $$.qualifier, EpqLow);
+    }
+    ;
+
+struct_specifier
+    : STRUCT IDENTIFIER LEFT_BRACE { parseContext.nestedStructCheck($1.loc); } struct_declaration_list RIGHT_BRACE {
+        TType* structure = new TType($5, *$2.string);
+        parseContext.structArrayCheck($2.loc, *structure);
+        TVariable* userTypeDef = new TVariable($2.string, *structure, true);
+        if (! parseContext.symbolTable.insert(*userTypeDef))
+            parseContext.error($2.loc, "redefinition", $2.string->c_str(), "struct");
+        $$.init($1.loc);
+        $$.basicType = EbtStruct;
+        $$.userDef = structure;
+        --parseContext.structNestingLevel;
+    }
+    | STRUCT LEFT_BRACE { parseContext.nestedStructCheck($1.loc); } struct_declaration_list RIGHT_BRACE {
+        TType* structure = new TType($4, TString(""));
+        $$.init($1.loc);
+        $$.basicType = EbtStruct;
+        $$.userDef = structure;
+        --parseContext.structNestingLevel;
+    }
+    ;
+
+struct_declaration_list
+    : struct_declaration {
+        $$ = $1;
+    }
+    | struct_declaration_list struct_declaration {
+        $$ = $1;
+        for (unsigned int i = 0; i < $2->size(); ++i) {
+            for (unsigned int j = 0; j < $$->size(); ++j) {
+                if ((*$$)[j].type->getFieldName() == (*$2)[i].type->getFieldName())
+                    parseContext.error((*$2)[i].loc, "duplicate member name:", "", (*$2)[i].type->getFieldName().c_str());
+            }
+            $$->push_back((*$2)[i]);
+        }
+    }
+    ;
+
+struct_declaration
+    : type_specifier struct_declarator_list SEMICOLON {
+        if ($1.arraySizes) {
+            parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+            parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type");
+            if (parseContext.isEsProfile())
+                parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes);
+        }
+
+        $$ = $2;
+
+        parseContext.voidErrorCheck($1.loc, (*$2)[0].type->getFieldName(), $1.basicType);
+        parseContext.precisionQualifierCheck($1.loc, $1.basicType, $1.qualifier);
+
+        for (unsigned int i = 0; i < $$->size(); ++i) {
+            TType type($1);
+            type.setFieldName((*$$)[i].type->getFieldName());
+            type.transferArraySizes((*$$)[i].type->getArraySizes());
+            type.copyArrayInnerSizes($1.arraySizes);
+            parseContext.arrayOfArrayVersionCheck((*$$)[i].loc, type.getArraySizes());
+            (*$$)[i].type->shallowCopy(type);
+        }
+    }
+    | type_qualifier type_specifier struct_declarator_list SEMICOLON {
+        if ($2.arraySizes) {
+            parseContext.profileRequires($2.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
+            parseContext.profileRequires($2.loc, EEsProfile, 300, 0, "arrayed type");
+            if (parseContext.isEsProfile())
+                parseContext.arraySizeRequiredCheck($2.loc, *$2.arraySizes);
+        }
+
+        $$ = $3;
+
+        parseContext.memberQualifierCheck($1);
+        parseContext.voidErrorCheck($2.loc, (*$3)[0].type->getFieldName(), $2.basicType);
+        parseContext.mergeQualifiers($2.loc, $2.qualifier, $1.qualifier, true);
+        parseContext.precisionQualifierCheck($2.loc, $2.basicType, $2.qualifier);
+
+        for (unsigned int i = 0; i < $$->size(); ++i) {
+            TType type($2);
+            type.setFieldName((*$$)[i].type->getFieldName());
+            type.transferArraySizes((*$$)[i].type->getArraySizes());
+            type.copyArrayInnerSizes($2.arraySizes);
+            parseContext.arrayOfArrayVersionCheck((*$$)[i].loc, type.getArraySizes());
+            (*$$)[i].type->shallowCopy(type);
+        }
+    }
+    ;
+
+struct_declarator_list
+    : struct_declarator {
+        $$ = new TTypeList;
+        $$->push_back($1);
+    }
+    | struct_declarator_list COMMA struct_declarator {
+        $$->push_back($3);
+    }
+    ;
+
+struct_declarator
+    : IDENTIFIER {
+        $$.type = new TType(EbtVoid);
+        $$.loc = $1.loc;
+        $$.type->setFieldName(*$1.string);
+    }
+    | IDENTIFIER array_specifier {
+        parseContext.arrayOfArrayVersionCheck($1.loc, $2.arraySizes);
+
+        $$.type = new TType(EbtVoid);
+        $$.loc = $1.loc;
+        $$.type->setFieldName(*$1.string);
+        $$.type->transferArraySizes($2.arraySizes);
+    }
+    ;
+
+initializer
+    : assignment_expression {
+        $$ = $1;
+    }
+GLSLANG_WEB_EXCLUDE_ON
+    | LEFT_BRACE initializer_list RIGHT_BRACE {
+        const char* initFeature = "{ } style initializers";
+        parseContext.requireProfile($1.loc, ~EEsProfile, initFeature);
+        parseContext.profileRequires($1.loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
+        $$ = $2;
+    }
+    | LEFT_BRACE initializer_list COMMA RIGHT_BRACE {
+        const char* initFeature = "{ } style initializers";
+        parseContext.requireProfile($1.loc, ~EEsProfile, initFeature);
+        parseContext.profileRequires($1.loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
+        $$ = $2;
+    }
+GLSLANG_WEB_EXCLUDE_OFF
+    ;
+
+GLSLANG_WEB_EXCLUDE_ON
+initializer_list
+    : initializer {
+        $$ = parseContext.intermediate.growAggregate(0, $1, $1->getLoc());
+    }
+    | initializer_list COMMA initializer {
+        $$ = parseContext.intermediate.growAggregate($1, $3);
+    }
+    ;
+GLSLANG_WEB_EXCLUDE_OFF
+
+declaration_statement
+    : declaration { $$ = $1; }
+    ;
+
+statement
+    : compound_statement  { $$ = $1; }
+    | simple_statement    { $$ = $1; }
+    ;
+
+// Grammar Note:  labeled statements for switch statements only; 'goto' is not supported.
+
+simple_statement
+    : declaration_statement { $$ = $1; }
+    | expression_statement  { $$ = $1; }
+    | selection_statement   { $$ = $1; }
+    | switch_statement      { $$ = $1; }
+    | case_label            { $$ = $1; }
+    | iteration_statement   { $$ = $1; }
+    | jump_statement        { $$ = $1; }
+GLSLANG_WEB_EXCLUDE_ON
+    | demote_statement      { $$ = $1; }
+GLSLANG_WEB_EXCLUDE_OFF
+    ;
+
+GLSLANG_WEB_EXCLUDE_ON
+demote_statement
+    : DEMOTE SEMICOLON {
+        parseContext.requireStage($1.loc, EShLangFragment, "demote");
+        parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_demote_to_helper_invocation, "demote");
+        $$ = parseContext.intermediate.addBranch(EOpDemote, $1.loc);
+    }
+    ;
+GLSLANG_WEB_EXCLUDE_OFF
+
+compound_statement
+    : LEFT_BRACE RIGHT_BRACE { $$ = 0; }
+    | LEFT_BRACE {
+        parseContext.symbolTable.push();
+        ++parseContext.statementNestingLevel;
+    }
+      statement_list {
+        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
+        --parseContext.statementNestingLevel;
+    }
+      RIGHT_BRACE {
+        if ($3 && $3->getAsAggregate())
+            $3->getAsAggregate()->setOperator(EOpSequence);
+        $$ = $3;
+    }
+    ;
+
+statement_no_new_scope
+    : compound_statement_no_new_scope { $$ = $1; }
+    | simple_statement                { $$ = $1; }
+    ;
+
+statement_scoped
+    : {
+        ++parseContext.controlFlowNestingLevel;
+    }
+      compound_statement  {
+        --parseContext.controlFlowNestingLevel;
+        $$ = $2;
+    }
+    | {
+        parseContext.symbolTable.push();
+        ++parseContext.statementNestingLevel;
+        ++parseContext.controlFlowNestingLevel;
+    }
+      simple_statement {
+        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
+        --parseContext.statementNestingLevel;
+        --parseContext.controlFlowNestingLevel;
+        $$ = $2;
+    }
+
+compound_statement_no_new_scope
+    // Statement that doesn't create a new scope, for selection_statement, iteration_statement
+    : LEFT_BRACE RIGHT_BRACE {
+        $$ = 0;
+    }
+    | LEFT_BRACE statement_list RIGHT_BRACE {
+        if ($2 && $2->getAsAggregate())
+            $2->getAsAggregate()->setOperator(EOpSequence);
+        $$ = $2;
+    }
+    ;
+
+statement_list
+    : statement {
+        $$ = parseContext.intermediate.makeAggregate($1);
+        if ($1 && $1->getAsBranchNode() && ($1->getAsBranchNode()->getFlowOp() == EOpCase ||
+                                            $1->getAsBranchNode()->getFlowOp() == EOpDefault)) {
+            parseContext.wrapupSwitchSubsequence(0, $1);
+            $$ = 0;  // start a fresh subsequence for what's after this case
+        }
+    }
+    | statement_list statement {
+        if ($2 && $2->getAsBranchNode() && ($2->getAsBranchNode()->getFlowOp() == EOpCase ||
+                                            $2->getAsBranchNode()->getFlowOp() == EOpDefault)) {
+            parseContext.wrapupSwitchSubsequence($1 ? $1->getAsAggregate() : 0, $2);
+            $$ = 0;  // start a fresh subsequence for what's after this case
+        } else
+            $$ = parseContext.intermediate.growAggregate($1, $2);
+    }
+    ;
+
+expression_statement
+    : SEMICOLON  { $$ = 0; }
+    | expression SEMICOLON  { $$ = static_cast<TIntermNode*>($1); }
+    ;
+
+selection_statement
+    : selection_statement_nonattributed {
+        $$ = $1;
+    }
+GLSLANG_WEB_EXCLUDE_ON
+    | attribute selection_statement_nonattributed {
+        parseContext.handleSelectionAttributes(*$1, $2);
+        $$ = $2;
+    }
+GLSLANG_WEB_EXCLUDE_OFF
+
+selection_statement_nonattributed
+    : IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement {
+        parseContext.boolCheck($1.loc, $3);
+        $$ = parseContext.intermediate.addSelection($3, $5, $1.loc);
+    }
+    ;
+
+selection_rest_statement
+    : statement_scoped ELSE statement_scoped {
+        $$.node1 = $1;
+        $$.node2 = $3;
+    }
+    | statement_scoped {
+        $$.node1 = $1;
+        $$.node2 = 0;
+    }
+    ;
+
+condition
+    // In 1996 c++ draft, conditions can include single declarations
+    : expression {
+        $$ = $1;
+        parseContext.boolCheck($1->getLoc(), $1);
+    }
+    | fully_specified_type IDENTIFIER EQUAL initializer {
+        parseContext.boolCheck($2.loc, $1);
+
+        TType type($1);
+        TIntermNode* initNode = parseContext.declareVariable($2.loc, *$2.string, $1, 0, $4);
+        if (initNode)
+            $$ = initNode->getAsTyped();
+        else
+            $$ = 0;
+    }
+    ;
+
+switch_statement
+    : switch_statement_nonattributed {
+        $$ = $1;
+    }
+GLSLANG_WEB_EXCLUDE_ON
+    | attribute switch_statement_nonattributed {
+        parseContext.handleSwitchAttributes(*$1, $2);
+        $$ = $2;
+    }
+GLSLANG_WEB_EXCLUDE_OFF
+
+switch_statement_nonattributed
+    : SWITCH LEFT_PAREN expression RIGHT_PAREN {
+        // start new switch sequence on the switch stack
+        ++parseContext.controlFlowNestingLevel;
+        ++parseContext.statementNestingLevel;
+        parseContext.switchSequenceStack.push_back(new TIntermSequence);
+        parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
+        parseContext.symbolTable.push();
+    }
+    LEFT_BRACE switch_statement_list RIGHT_BRACE {
+        $$ = parseContext.addSwitch($1.loc, $3, $7 ? $7->getAsAggregate() : 0);
+        delete parseContext.switchSequenceStack.back();
+        parseContext.switchSequenceStack.pop_back();
+        parseContext.switchLevel.pop_back();
+        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
+        --parseContext.statementNestingLevel;
+        --parseContext.controlFlowNestingLevel;
+    }
+    ;
+
+switch_statement_list
+    : /* nothing */ {
+        $$ = 0;
+    }
+    | statement_list {
+        $$ = $1;
+    }
+    ;
+
+case_label
+    : CASE expression COLON {
+        $$ = 0;
+        if (parseContext.switchLevel.size() == 0)
+            parseContext.error($1.loc, "cannot appear outside switch statement", "case", "");
+        else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
+            parseContext.error($1.loc, "cannot be nested inside control flow", "case", "");
+        else {
+            parseContext.constantValueCheck($2, "case");
+            parseContext.integerCheck($2, "case");
+            $$ = parseContext.intermediate.addBranch(EOpCase, $2, $1.loc);
+        }
+    }
+    | DEFAULT COLON {
+        $$ = 0;
+        if (parseContext.switchLevel.size() == 0)
+            parseContext.error($1.loc, "cannot appear outside switch statement", "default", "");
+        else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
+            parseContext.error($1.loc, "cannot be nested inside control flow", "default", "");
+        else
+            $$ = parseContext.intermediate.addBranch(EOpDefault, $1.loc);
+    }
+    ;
+
+iteration_statement
+    : iteration_statement_nonattributed {
+        $$ = $1;
+    }
+GLSLANG_WEB_EXCLUDE_ON
+    | attribute iteration_statement_nonattributed {
+        parseContext.handleLoopAttributes(*$1, $2);
+        $$ = $2;
+    }
+GLSLANG_WEB_EXCLUDE_OFF
+
+iteration_statement_nonattributed
+    : WHILE LEFT_PAREN {
+        if (! parseContext.limits.whileLoops)
+            parseContext.error($1.loc, "while loops not available", "limitation", "");
+        parseContext.symbolTable.push();
+        ++parseContext.loopNestingLevel;
+        ++parseContext.statementNestingLevel;
+        ++parseContext.controlFlowNestingLevel;
+    }
+      condition RIGHT_PAREN statement_no_new_scope {
+        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
+        $$ = parseContext.intermediate.addLoop($6, $4, 0, true, $1.loc);
+        --parseContext.loopNestingLevel;
+        --parseContext.statementNestingLevel;
+        --parseContext.controlFlowNestingLevel;
+    }
+    | DO {
+        ++parseContext.loopNestingLevel;
+        ++parseContext.statementNestingLevel;
+        ++parseContext.controlFlowNestingLevel;
+    }
+      statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON {
+        if (! parseContext.limits.whileLoops)
+            parseContext.error($1.loc, "do-while loops not available", "limitation", "");
+
+        parseContext.boolCheck($8.loc, $6);
+
+        $$ = parseContext.intermediate.addLoop($3, $6, 0, false, $4.loc);
+        --parseContext.loopNestingLevel;
+        --parseContext.statementNestingLevel;
+        --parseContext.controlFlowNestingLevel;
+    }
+    | FOR LEFT_PAREN {
+        parseContext.symbolTable.push();
+        ++parseContext.loopNestingLevel;
+        ++parseContext.statementNestingLevel;
+        ++parseContext.controlFlowNestingLevel;
+    }
+      for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope {
+        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
+        $$ = parseContext.intermediate.makeAggregate($4, $2.loc);
+        TIntermLoop* forLoop = parseContext.intermediate.addLoop($7, reinterpret_cast<TIntermTyped*>($5.node1), reinterpret_cast<TIntermTyped*>($5.node2), true, $1.loc);
+        if (! parseContext.limits.nonInductiveForLoops)
+            parseContext.inductiveLoopCheck($1.loc, $4, forLoop);
+        $$ = parseContext.intermediate.growAggregate($$, forLoop, $1.loc);
+        $$->getAsAggregate()->setOperator(EOpSequence);
+        --parseContext.loopNestingLevel;
+        --parseContext.statementNestingLevel;
+        --parseContext.controlFlowNestingLevel;
+    }
+    ;
+
+for_init_statement
+    : expression_statement {
+        $$ = $1;
+    }
+    | declaration_statement {
+        $$ = $1;
+    }
+    ;
+
+conditionopt
+    : condition {
+        $$ = $1;
+    }
+    | /* May be null */ {
+        $$ = 0;
+    }
+    ;
+
+for_rest_statement
+    : conditionopt SEMICOLON {
+        $$.node1 = $1;
+        $$.node2 = 0;
+    }
+    | conditionopt SEMICOLON expression  {
+        $$.node1 = $1;
+        $$.node2 = $3;
+    }
+    ;
+
+jump_statement
+    : CONTINUE SEMICOLON {
+        if (parseContext.loopNestingLevel <= 0)
+            parseContext.error($1.loc, "continue statement only allowed in loops", "", "");
+        $$ = parseContext.intermediate.addBranch(EOpContinue, $1.loc);
+    }
+    | BREAK SEMICOLON {
+        if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
+            parseContext.error($1.loc, "break statement only allowed in switch and loops", "", "");
+        $$ = parseContext.intermediate.addBranch(EOpBreak, $1.loc);
+    }
+    | RETURN SEMICOLON {
+        $$ = parseContext.intermediate.addBranch(EOpReturn, $1.loc);
+        if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
+            parseContext.error($1.loc, "non-void function must return a value", "return", "");
+        if (parseContext.inMain)
+            parseContext.postEntryPointReturn = true;
+    }
+    | RETURN expression SEMICOLON {
+        $$ = parseContext.handleReturnValue($1.loc, $2);
+    }
+    | DISCARD SEMICOLON {
+        parseContext.requireStage($1.loc, EShLangFragment, "discard");
+        $$ = parseContext.intermediate.addBranch(EOpKill, $1.loc);
+    }
+    ;
+
+// Grammar Note:  No 'goto'.  Gotos are not supported.
+
+translation_unit
+    : external_declaration {
+        $$ = $1;
+        parseContext.intermediate.setTreeRoot($$);
+    }
+    | translation_unit external_declaration {
+        if ($2 != nullptr) {
+            $$ = parseContext.intermediate.growAggregate($1, $2);
+            parseContext.intermediate.setTreeRoot($$);
+        }
+    }
+    ;
+
+external_declaration
+    : function_definition {
+        $$ = $1;
+    }
+    | declaration {
+        $$ = $1;
+    }
+GLSLANG_WEB_EXCLUDE_ON
+    | SEMICOLON {
+        parseContext.requireProfile($1.loc, ~EEsProfile, "extraneous semicolon");
+        parseContext.profileRequires($1.loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
+        $$ = nullptr;
+    }
+GLSLANG_WEB_EXCLUDE_OFF
+    ;
+
+function_definition
+    : function_prototype {
+        $1.function = parseContext.handleFunctionDeclarator($1.loc, *$1.function, false /* not prototype */);
+        $1.intermNode = parseContext.handleFunctionDefinition($1.loc, *$1.function);
+    }
+    compound_statement_no_new_scope {
+        //   May be best done as post process phase on intermediate code
+        if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
+            parseContext.error($1.loc, "function does not return a value:", "", $1.function->getName().c_str());
+        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
+        $$ = parseContext.intermediate.growAggregate($1.intermNode, $3);
+        parseContext.intermediate.setAggregateOperator($$, EOpFunction, $1.function->getType(), $1.loc);
+        $$->getAsAggregate()->setName($1.function->getMangledName().c_str());
+
+        // store the pragma information for debug and optimize and other vendor specific
+        // information. This information can be queried from the parse tree
+        $$->getAsAggregate()->setOptimize(parseContext.contextPragma.optimize);
+        $$->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
+        $$->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
+    }
+    ;
+
+GLSLANG_WEB_EXCLUDE_ON
+attribute
+    : LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET {
+        $$ = $3;
+        parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_control_flow_attributes, "attribute");
+    }
+
+attribute_list
+    : single_attribute {
+        $$ = $1;
+    }
+    | attribute_list COMMA single_attribute {
+        $$ = parseContext.mergeAttributes($1, $3);
+    }
+
+single_attribute
+    : IDENTIFIER {
+        $$ = parseContext.makeAttributes(*$1.string);
+    }
+    | IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN {
+        $$ = parseContext.makeAttributes(*$1.string, $3);
+    }
+GLSLANG_WEB_EXCLUDE_OFF
+
+%%
diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
old mode 100755
new mode 100644
index afa2115..e33d7d1
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -2,7 +2,8 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
-// Copyright (C) 2015-2018 Google, Inc.
+// Copyright (C) 2015-2019 Google, Inc.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -36,6 +37,31 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
+//
+// Do not edit the .y file, only edit the .m4 file.
+// The .y bison file is not a source file, it is a derivative of the .m4 file.
+// The m4 file needs to be processed by m4 to generate the .y bison file.
+//
+// Code sandwiched between a pair:
+//
+//    GLSLANG_WEB_EXCLUDE_ON
+//      ...
+//      ...
+//      ...
+//    GLSLANG_WEB_EXCLUDE_OFF
+//
+// Will be excluded from the grammar when m4 is executed as:
+//
+//    m4 -P -DGLSLANG_WEB
+//
+// It will be included when m4 is executed as:
+//
+//    m4 -P
+//
+
+
+
+
 /**
  * This is bison grammar and productions for parsing all versions of the
  * GLSL shading languages.
@@ -100,6 +126,7 @@
             glslang::TArraySizes* arraySizes;
             glslang::TIdentifierList* identifierList;
         };
+        glslang::TArraySizes* typeParameters;
     } interm;
 }
 
@@ -124,13 +151,34 @@
 %pure-parser  // enable thread safety
 %expect 1     // One shift reduce conflict because of if | else
 
-%token <lex> ATTRIBUTE VARYING
-%token <lex> FLOAT16_T FLOAT FLOAT32_T DOUBLE FLOAT64_T
-%token <lex> CONST BOOL INT UINT INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T
-%token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT SUBROUTINE
+%token <lex> CONST BOOL INT UINT FLOAT
 %token <lex> BVEC2 BVEC3 BVEC4
 %token <lex> IVEC2 IVEC3 IVEC4
 %token <lex> UVEC2 UVEC3 UVEC4
+%token <lex> VEC2 VEC3 VEC4
+%token <lex> MAT2 MAT3 MAT4
+%token <lex> MAT2X2 MAT2X3 MAT2X4
+%token <lex> MAT3X2 MAT3X3 MAT3X4
+%token <lex> MAT4X2 MAT4X3 MAT4X4
+
+// combined image/sampler
+%token <lex> SAMPLER2D SAMPLER3D SAMPLERCUBE SAMPLER2DSHADOW
+%token <lex> SAMPLERCUBESHADOW SAMPLER2DARRAY
+%token <lex> SAMPLER2DARRAYSHADOW ISAMPLER2D ISAMPLER3D ISAMPLERCUBE
+%token <lex> ISAMPLER2DARRAY USAMPLER2D USAMPLER3D
+%token <lex> USAMPLERCUBE USAMPLER2DARRAY
+
+// separate image/sampler
+%token <lex> SAMPLER SAMPLERSHADOW
+%token <lex>  TEXTURE2D  TEXTURE3D  TEXTURECUBE  TEXTURE2DARRAY
+%token <lex> ITEXTURE2D ITEXTURE3D ITEXTURECUBE ITEXTURE2DARRAY
+%token <lex> UTEXTURE2D UTEXTURE3D UTEXTURECUBE UTEXTURE2DARRAY
+
+
+
+%token <lex> ATTRIBUTE VARYING
+%token <lex> FLOAT16_T FLOAT32_T DOUBLE FLOAT64_T
+%token <lex> INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T
 %token <lex> I64VEC2 I64VEC3 I64VEC4
 %token <lex> U64VEC2 U64VEC3 U64VEC4
 %token <lex> I32VEC2 I32VEC3 I32VEC4
@@ -139,19 +187,10 @@
 %token <lex> U16VEC2 U16VEC3 U16VEC4
 %token <lex> I8VEC2  I8VEC3  I8VEC4
 %token <lex> U8VEC2  U8VEC3  U8VEC4
-%token <lex> VEC2 VEC3 VEC4
-%token <lex> MAT2 MAT3 MAT4 CENTROID IN OUT INOUT
-%token <lex> UNIFORM PATCH SAMPLE BUFFER SHARED NONUNIFORM PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV
-%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT SUBGROUPCOHERENT NONPRIVATE
 %token <lex> DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4
 %token <lex> F16VEC2 F16VEC3 F16VEC4 F16MAT2 F16MAT3 F16MAT4
 %token <lex> F32VEC2 F32VEC3 F32VEC4 F32MAT2 F32MAT3 F32MAT4
 %token <lex> F64VEC2 F64VEC3 F64VEC4 F64MAT2 F64MAT3 F64MAT4
-%token <lex> NOPERSPECTIVE FLAT SMOOTH LAYOUT EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
-
-%token <lex> MAT2X2 MAT2X3 MAT2X4
-%token <lex> MAT3X2 MAT3X3 MAT3X4
-%token <lex> MAT4X2 MAT4X3 MAT4X4
 %token <lex> DMAT2X2 DMAT2X3 DMAT2X4
 %token <lex> DMAT3X2 DMAT3X3 DMAT3X4
 %token <lex> DMAT4X2 DMAT4X3 DMAT4X4
@@ -166,50 +205,28 @@
 %token <lex> F64MAT4X2 F64MAT4X3 F64MAT4X4
 %token <lex> ATOMIC_UINT
 %token <lex> ACCSTRUCTNV
+%token <lex> ACCSTRUCTEXT
+%token <lex> RAYQUERYEXT
+%token <lex> FCOOPMATNV ICOOPMATNV UCOOPMATNV
 
 // combined image/sampler
-%token <lex> SAMPLER1D SAMPLER2D SAMPLER3D SAMPLERCUBE SAMPLER1DSHADOW SAMPLER2DSHADOW
-%token <lex> SAMPLERCUBESHADOW SAMPLER1DARRAY SAMPLER2DARRAY SAMPLER1DARRAYSHADOW
-%token <lex> SAMPLER2DARRAYSHADOW ISAMPLER1D ISAMPLER2D ISAMPLER3D ISAMPLERCUBE
-%token <lex> ISAMPLER1DARRAY ISAMPLER2DARRAY USAMPLER1D USAMPLER2D USAMPLER3D
-%token <lex> USAMPLERCUBE USAMPLER1DARRAY USAMPLER2DARRAY
-%token <lex> SAMPLER2DRECT SAMPLER2DRECTSHADOW ISAMPLER2DRECT USAMPLER2DRECT
-%token <lex> SAMPLERBUFFER ISAMPLERBUFFER USAMPLERBUFFER
 %token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
 %token <lex> ISAMPLERCUBEARRAY USAMPLERCUBEARRAY
+%token <lex> SAMPLER1D SAMPLER1DARRAY SAMPLER1DARRAYSHADOW ISAMPLER1D SAMPLER1DSHADOW
+%token <lex> SAMPLER2DRECT SAMPLER2DRECTSHADOW ISAMPLER2DRECT USAMPLER2DRECT
+%token <lex> SAMPLERBUFFER ISAMPLERBUFFER USAMPLERBUFFER
 %token <lex> SAMPLER2DMS ISAMPLER2DMS USAMPLER2DMS
 %token <lex> SAMPLER2DMSARRAY ISAMPLER2DMSARRAY USAMPLER2DMSARRAY
 %token <lex> SAMPLEREXTERNALOES
-
+%token <lex> SAMPLEREXTERNAL2DY2YEXT
+%token <lex> ISAMPLER1DARRAY USAMPLER1D USAMPLER1DARRAY 
 %token <lex> F16SAMPLER1D F16SAMPLER2D F16SAMPLER3D F16SAMPLER2DRECT F16SAMPLERCUBE
 %token <lex> F16SAMPLER1DARRAY F16SAMPLER2DARRAY F16SAMPLERCUBEARRAY
 %token <lex> F16SAMPLERBUFFER F16SAMPLER2DMS F16SAMPLER2DMSARRAY
 %token <lex> F16SAMPLER1DSHADOW F16SAMPLER2DSHADOW F16SAMPLER1DARRAYSHADOW F16SAMPLER2DARRAYSHADOW
 %token <lex> F16SAMPLER2DRECTSHADOW F16SAMPLERCUBESHADOW F16SAMPLERCUBEARRAYSHADOW
 
-// pure sampler
-%token <lex> SAMPLER SAMPLERSHADOW
-
-// texture without sampler
-%token <lex> TEXTURE1D TEXTURE2D TEXTURE3D TEXTURECUBE
-%token <lex> TEXTURE1DARRAY TEXTURE2DARRAY
-%token <lex> ITEXTURE1D ITEXTURE2D ITEXTURE3D ITEXTURECUBE
-%token <lex> ITEXTURE1DARRAY ITEXTURE2DARRAY UTEXTURE1D UTEXTURE2D UTEXTURE3D
-%token <lex> UTEXTURECUBE UTEXTURE1DARRAY UTEXTURE2DARRAY
-%token <lex> TEXTURE2DRECT ITEXTURE2DRECT UTEXTURE2DRECT
-%token <lex> TEXTUREBUFFER ITEXTUREBUFFER UTEXTUREBUFFER
-%token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
-%token <lex> TEXTURE2DMS ITEXTURE2DMS UTEXTURE2DMS
-%token <lex> TEXTURE2DMSARRAY ITEXTURE2DMSARRAY UTEXTURE2DMSARRAY
-
-%token <lex> F16TEXTURE1D F16TEXTURE2D F16TEXTURE3D F16TEXTURE2DRECT F16TEXTURECUBE
-%token <lex> F16TEXTURE1DARRAY F16TEXTURE2DARRAY F16TEXTURECUBEARRAY
-%token <lex> F16TEXTUREBUFFER F16TEXTURE2DMS F16TEXTURE2DMSARRAY
-
-// input attachments
-%token <lex> SUBPASSINPUT SUBPASSINPUTMS ISUBPASSINPUT ISUBPASSINPUTMS USUBPASSINPUT USUBPASSINPUTMS
-%token <lex> F16SUBPASSINPUT F16SUBPASSINPUTMS
-
+// images
 %token <lex> IMAGE1D IIMAGE1D UIMAGE1D IMAGE2D IIMAGE2D
 %token <lex> UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D
 %token <lex> IMAGE2DRECT IIMAGE2DRECT UIMAGE2DRECT
@@ -225,25 +242,61 @@
 %token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
 %token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
 
-%token <lex> STRUCT VOID WHILE
+// texture without sampler
+%token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
+%token <lex> TEXTURE1D ITEXTURE1D UTEXTURE1D
+%token <lex> TEXTURE1DARRAY ITEXTURE1DARRAY UTEXTURE1DARRAY
+%token <lex> TEXTURE2DRECT ITEXTURE2DRECT UTEXTURE2DRECT
+%token <lex> TEXTUREBUFFER ITEXTUREBUFFER UTEXTUREBUFFER
+%token <lex> TEXTURE2DMS ITEXTURE2DMS UTEXTURE2DMS
+%token <lex> TEXTURE2DMSARRAY ITEXTURE2DMSARRAY UTEXTURE2DMSARRAY
 
-%token <lex> IDENTIFIER TYPE_NAME
-%token <lex> FLOATCONSTANT DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT INT32CONSTANT UINT32CONSTANT INTCONSTANT UINTCONSTANT INT64CONSTANT UINT64CONSTANT BOOLCONSTANT FLOAT16CONSTANT
+%token <lex> F16TEXTURE1D F16TEXTURE2D F16TEXTURE3D F16TEXTURE2DRECT F16TEXTURECUBE
+%token <lex> F16TEXTURE1DARRAY F16TEXTURE2DARRAY F16TEXTURECUBEARRAY
+%token <lex> F16TEXTUREBUFFER F16TEXTURE2DMS F16TEXTURE2DMSARRAY
+
+// input attachments
+%token <lex> SUBPASSINPUT SUBPASSINPUTMS ISUBPASSINPUT ISUBPASSINPUTMS USUBPASSINPUT USUBPASSINPUTMS
+%token <lex> F16SUBPASSINPUT F16SUBPASSINPUTMS
+
+
+
 %token <lex> LEFT_OP RIGHT_OP
 %token <lex> INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_OP
 %token <lex> AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN
 %token <lex> MOD_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN XOR_ASSIGN OR_ASSIGN
 %token <lex> SUB_ASSIGN
+%token <lex> STRING_LITERAL
 
 %token <lex> LEFT_PAREN RIGHT_PAREN LEFT_BRACKET RIGHT_BRACKET LEFT_BRACE RIGHT_BRACE DOT
 %token <lex> COMMA COLON EQUAL SEMICOLON BANG DASH TILDE PLUS STAR SLASH PERCENT
 %token <lex> LEFT_ANGLE RIGHT_ANGLE VERTICAL_BAR CARET AMPERSAND QUESTION
 
-%token <lex> INVARIANT PRECISE
+%token <lex> INVARIANT
 %token <lex> HIGH_PRECISION MEDIUM_PRECISION LOW_PRECISION PRECISION
-
 %token <lex> PACKED RESOURCE SUPERP
 
+%token <lex> FLOATCONSTANT INTCONSTANT UINTCONSTANT BOOLCONSTANT
+%token <lex> IDENTIFIER TYPE_NAME
+%token <lex> CENTROID IN OUT INOUT
+%token <lex> STRUCT VOID WHILE
+%token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT
+%token <lex> UNIFORM SHARED BUFFER
+%token <lex> FLAT SMOOTH LAYOUT
+
+
+%token <lex> DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT FLOAT16CONSTANT INT32CONSTANT UINT32CONSTANT
+%token <lex> INT64CONSTANT UINT64CONSTANT
+%token <lex> SUBROUTINE DEMOTE
+%token <lex> PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV
+%token <lex> PAYLOADEXT PAYLOADINEXT HITATTREXT CALLDATAEXT CALLDATAINEXT
+%token <lex> PATCH SAMPLE NONUNIFORM
+%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
+%token <lex> SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT
+%token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
+%token <lex> PRECISE
+
+
 %type <interm> assignment_operator unary_operator
 %type <interm.intermTypedNode> variable_identifier primary_expression postfix_expression
 %type <interm.intermTypedNode> expression integer_expression assignment_expression
@@ -252,7 +305,7 @@
 %type <interm.intermTypedNode> conditional_expression constant_expression
 %type <interm.intermTypedNode> logical_or_expression logical_xor_expression logical_and_expression
 %type <interm.intermTypedNode> shift_expression and_expression exclusive_or_expression inclusive_or_expression
-%type <interm.intermTypedNode> function_call initializer initializer_list condition conditionopt
+%type <interm.intermTypedNode> function_call initializer condition conditionopt
 
 %type <interm.intermNode> translation_unit function_definition
 %type <interm.intermNode> statement simple_statement
@@ -268,16 +321,19 @@
 %type <interm> parameter_declaration parameter_declarator parameter_type_specifier
 
 %type <interm> array_specifier
-%type <interm.type> precise_qualifier invariant_qualifier interpolation_qualifier storage_qualifier precision_qualifier
+%type <interm.type> invariant_qualifier interpolation_qualifier storage_qualifier precision_qualifier
 %type <interm.type> layout_qualifier layout_qualifier_id_list layout_qualifier_id
-%type <interm.type> non_uniform_qualifier
+
+%type <interm.typeParameters> type_parameter_specifier
+%type <interm.typeParameters> type_parameter_specifier_opt
+%type <interm.typeParameters> type_parameter_specifier_list
 
 %type <interm.type> type_qualifier fully_specified_type type_specifier
 %type <interm.type> single_type_qualifier
 %type <interm.type> type_specifier_nonarray
 %type <interm.type> struct_specifier
 %type <interm.typeLine> struct_declarator
-%type <interm.typeList> struct_declarator_list struct_declaration struct_declaration_list type_name_list
+%type <interm.typeList> struct_declarator_list struct_declaration struct_declaration_list
 %type <interm> block_structure
 %type <interm.function> function_header function_declarator
 %type <interm.function> function_header_with_parameters
@@ -286,7 +342,13 @@
 
 %type <interm.identifierList> identifier_list
 
+
+%type <interm.type> precise_qualifier non_uniform_qualifier
+%type <interm.typeList> type_name_list
 %type <interm.attributes> attribute attribute_list single_attribute
+%type <interm.intermNode> demote_statement
+%type <interm.intermTypedNode> initializer_list
+
 
 %start translation_unit
 %%
@@ -301,13 +363,13 @@
     : variable_identifier {
         $$ = $1;
     }
-    | INT32CONSTANT {
-        parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
-        $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
+    | LEFT_PAREN expression RIGHT_PAREN {
+        $$ = $2;
+        if ($$->getAsConstantUnion())
+            $$->getAsConstantUnion()->setExpression();
     }
-    | UINT32CONSTANT {
-        parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
-        $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true);
+    | FLOATCONSTANT {
+        $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true);
     }
     | INTCONSTANT {
         $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
@@ -316,6 +378,21 @@
         parseContext.fullIntegerCheck($1.loc, "unsigned literal");
         $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true);
     }
+    | BOOLCONSTANT {
+        $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
+    }
+
+    | STRING_LITERAL {
+        $$ = parseContext.intermediate.addConstantUnion($1.string, $1.loc, true);
+    }
+    | INT32CONSTANT {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
+        $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
+    }
+    | UINT32CONSTANT {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
+        $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true);
+    }
     | INT64CONSTANT {
         parseContext.int64Check($1.loc, "64-bit integer literal");
         $$ = parseContext.intermediate.addConstantUnion($1.i64, $1.loc, true);
@@ -332,25 +409,17 @@
         parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer literal");
         $$ = parseContext.intermediate.addConstantUnion((unsigned short)$1.u, $1.loc, true);
     }
-    | FLOATCONSTANT {
-        $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true);
-    }
     | DOUBLECONSTANT {
-        parseContext.doubleCheck($1.loc, "double literal");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double literal");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double literal");
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtDouble, $1.loc, true);
     }
     | FLOAT16CONSTANT {
         parseContext.float16Check($1.loc, "half float literal");
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
     }
-    | BOOLCONSTANT {
-        $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
-    }
-    | LEFT_PAREN expression RIGHT_PAREN {
-        $$ = $2;
-        if ($$->getAsConstantUnion())
-            $$->getAsConstantUnion()->setExpression();
-    }
+
     ;
 
 postfix_expression
@@ -472,15 +541,17 @@
 
         if ($$.function == 0) {
             // error recover
-            TString empty("");
-            $$.function = new TFunction(&empty, TType(EbtVoid), EOpNull);
+            TString* empty = NewPoolTString("");
+            $$.function = new TFunction(empty, TType(EbtVoid), EOpNull);
         }
     }
+
     | non_uniform_qualifier {
         // Constructor
         $$.intermNode = 0;
         $$.function = parseContext.handleConstructorCall($1.loc, $1);
     }
+
     ;
 
 unary_expression
@@ -606,6 +677,7 @@
         parseContext.arrayObjectCheck($2.loc, $1->getType(), "array comparison");
         parseContext.opaqueCheck($2.loc, $1->getType(), "==");
         parseContext.specializationCheck($2.loc, $1->getType(), "==");
+        parseContext.referenceCheck($2.loc, $1->getType(), "==");
         $$ = parseContext.handleBinaryMath($2.loc, "==", EOpEqual, $1, $3);
         if ($$ == 0)
             $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
@@ -614,6 +686,7 @@
         parseContext.arrayObjectCheck($2.loc, $1->getType(), "array comparison");
         parseContext.opaqueCheck($2.loc, $1->getType(), "!=");
         parseContext.specializationCheck($2.loc, $1->getType(), "!=");
+        parseContext.referenceCheck($2.loc, $1->getType(), "!=");
         $$ = parseContext.handleBinaryMath($2.loc, "!=", EOpNotEqual, $1, $3);
         if ($$ == 0)
             $$ = parseContext.intermediate.addConstantUnion(false, $2.loc);
@@ -795,7 +868,6 @@
     }
     | PRECISION precision_qualifier type_specifier SEMICOLON {
         parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "precision statement");
-
         // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope
         parseContext.symbolTable.setPreviousDefaultPrecisions(&parseContext.defaultPrecision[0]);
         parseContext.setDefaultPrecision($1.loc, $3, $2.qualifier.precision);
@@ -1039,7 +1111,9 @@
     : fully_specified_type {
         $$.type = $1;
         $$.intermNode = 0;
+
         parseContext.declareTypeDefaults($$.loc, $$.type);
+
     }
     | fully_specified_type IDENTIFIER {
         $$.type = $1;
@@ -1073,7 +1147,6 @@
             parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
             parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type");
         }
-
         parseContext.precisionQualifierCheck($$.loc, $$.basicType, $$.qualifier);
     }
     | type_qualifier type_specifier  {
@@ -1126,38 +1199,30 @@
         $$.init($1.loc);
         $$.qualifier.flat = true;
     }
+
     | NOPERSPECTIVE {
         parseContext.globalCheck($1.loc, "noperspective");
-#ifdef NV_EXTENSIONS
         parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective");
-#else
-        parseContext.requireProfile($1.loc, ~EEsProfile, "noperspective");
-#endif
         parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "noperspective");
         $$.init($1.loc);
         $$.qualifier.nopersp = true;
     }
     | EXPLICITINTERPAMD {
-#ifdef AMD_EXTENSIONS
         parseContext.globalCheck($1.loc, "__explicitInterpAMD");
         parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
         parseContext.profileRequires($1.loc, ECompatibilityProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
         $$.init($1.loc);
         $$.qualifier.explicitInterp = true;
-#endif
     }
     | PERVERTEXNV {
-#ifdef NV_EXTENSIONS
         parseContext.globalCheck($1.loc, "pervertexNV");
         parseContext.profileRequires($1.loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
         parseContext.profileRequires($1.loc, ECompatibilityProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
         parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
         $$.init($1.loc);
         $$.qualifier.pervertexNV = true;
-#endif
     }
     | PERPRIMITIVENV {
-#ifdef NV_EXTENSIONS
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck($1.loc, "perprimitiveNV");
         parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV");
@@ -1166,26 +1231,22 @@
             parseContext.requireExtensions($1.loc, 1, &E_GL_NV_mesh_shader, "perprimitiveNV");
         $$.init($1.loc);
         $$.qualifier.perPrimitiveNV = true;
-#endif
     }
     | PERVIEWNV {
-#ifdef NV_EXTENSIONS
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck($1.loc, "perviewNV");
         parseContext.requireStage($1.loc, EShLangMeshNV, "perviewNV");
         $$.init($1.loc);
         $$.qualifier.perViewNV = true;
-#endif
     }
     | PERTASKNV {
-#ifdef NV_EXTENSIONS
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck($1.loc, "taskNV");
         parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV");
         $$.init($1.loc);
         $$.qualifier.perTaskNV = true;
-#endif
     }
+
     ;
 
 layout_qualifier
@@ -1220,6 +1281,7 @@
     }
     ;
 
+
 precise_qualifier
     : PRECISE {
         parseContext.profileRequires($$.loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
@@ -1229,6 +1291,7 @@
     }
     ;
 
+
 type_qualifier
     : single_type_qualifier {
         $$ = $1;
@@ -1262,6 +1325,7 @@
         // allow inheritance of storage qualifier from block declaration
         $$ = $1;
     }
+
     | precise_qualifier {
         // allow inheritance of storage qualifier from block declaration
         $$ = $1;
@@ -1269,6 +1333,7 @@
     | non_uniform_qualifier {
         $$ = $1;
     }
+
     ;
 
 storage_qualifier
@@ -1276,6 +1341,49 @@
         $$.init($1.loc);
         $$.qualifier.storage = EvqConst;  // will later turn into EvqConstReadOnly, if the initializer is not constant
     }
+    | INOUT {
+        parseContext.globalCheck($1.loc, "inout");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqInOut;
+    }
+    | IN {
+        parseContext.globalCheck($1.loc, "in");
+        $$.init($1.loc);
+        // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
+        $$.qualifier.storage = EvqIn;
+    }
+    | OUT {
+        parseContext.globalCheck($1.loc, "out");
+        $$.init($1.loc);
+        // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
+        $$.qualifier.storage = EvqOut;
+    }
+    | CENTROID {
+        parseContext.profileRequires($1.loc, ENoProfile, 120, 0, "centroid");
+        parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "centroid");
+        parseContext.globalCheck($1.loc, "centroid");
+        $$.init($1.loc);
+        $$.qualifier.centroid = true;
+    }
+    | UNIFORM {
+        parseContext.globalCheck($1.loc, "uniform");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqUniform;
+    }
+    | SHARED {
+        parseContext.globalCheck($1.loc, "shared");
+        parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
+        parseContext.profileRequires($1.loc, EEsProfile, 310, 0, "shared");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqShared;
+    }
+    | BUFFER {
+        parseContext.globalCheck($1.loc, "buffer");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqBuffer;
+    }
+
     | ATTRIBUTE {
         parseContext.requireStage($1.loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated($1.loc, ECoreProfile, 130, "attribute");
@@ -1302,30 +1410,6 @@
         else
             $$.qualifier.storage = EvqVaryingIn;
     }
-    | INOUT {
-        parseContext.globalCheck($1.loc, "inout");
-        $$.init($1.loc);
-        $$.qualifier.storage = EvqInOut;
-    }
-    | IN {
-        parseContext.globalCheck($1.loc, "in");
-        $$.init($1.loc);
-        // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
-        $$.qualifier.storage = EvqIn;
-    }
-    | OUT {
-        parseContext.globalCheck($1.loc, "out");
-        $$.init($1.loc);
-        // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
-        $$.qualifier.storage = EvqOut;
-    }
-    | CENTROID {
-        parseContext.profileRequires($1.loc, ENoProfile, 120, 0, "centroid");
-        parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "centroid");
-        parseContext.globalCheck($1.loc, "centroid");
-        $$.init($1.loc);
-        $$.qualifier.centroid = true;
-    }
     | PATCH {
         parseContext.globalCheck($1.loc, "patch");
         parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
@@ -1337,76 +1421,83 @@
         $$.init($1.loc);
         $$.qualifier.sample = true;
     }
-    | UNIFORM {
-        parseContext.globalCheck($1.loc, "uniform");
-        $$.init($1.loc);
-        $$.qualifier.storage = EvqUniform;
-    }
-    | BUFFER {
-        parseContext.globalCheck($1.loc, "buffer");
-        $$.init($1.loc);
-        $$.qualifier.storage = EvqBuffer;
-    }
     | HITATTRNV {
-#ifdef NV_EXTENSIONS
         parseContext.globalCheck($1.loc, "hitAttributeNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectNVMask | EShLangClosestHitNVMask
-            | EShLangAnyHitNVMask), "hitAttributeNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
+            | EShLangAnyHitMask), "hitAttributeNV");
         parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "hitAttributeNV");
         $$.init($1.loc);
-        $$.qualifier.storage = EvqHitAttrNV;
-#endif
+        $$.qualifier.storage = EvqHitAttr;
+    }
+    | HITATTREXT {
+        parseContext.globalCheck($1.loc, "hitAttributeEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
+            | EShLangAnyHitMask), "hitAttributeEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "hitAttributeNV");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqHitAttr;
     }
     | PAYLOADNV {
-#ifdef NV_EXTENSIONS
         parseContext.globalCheck($1.loc, "rayPayloadNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangClosestHitNVMask |
-            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadNV");
         parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadNV");
         $$.init($1.loc);
-        $$.qualifier.storage = EvqPayloadNV;
-#endif
+        $$.qualifier.storage = EvqPayload;
+    }
+    | PAYLOADEXT {
+        parseContext.globalCheck($1.loc, "rayPayloadEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadEXT");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqPayload;
     }
     | PAYLOADINNV {
-#ifdef NV_EXTENSIONS
         parseContext.globalCheck($1.loc, "rayPayloadInNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangClosestHitNVMask |
-            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadInNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadInNV");
         parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadInNV");
         $$.init($1.loc);
-        $$.qualifier.storage = EvqPayloadInNV;
-#endif
+        $$.qualifier.storage = EvqPayloadIn;
+    }
+    | PAYLOADINEXT {
+        parseContext.globalCheck($1.loc, "rayPayloadInEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadInEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadInEXT");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqPayloadIn;
     }
     | CALLDATANV {
-#ifdef NV_EXTENSIONS
         parseContext.globalCheck($1.loc, "callableDataNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenNVMask |
-            EShLangClosestHitNVMask | EShLangMissNVMask | EShLangCallableNVMask), "callableDataNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask |
+            EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataNV");
         parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataNV");
         $$.init($1.loc);
-        $$.qualifier.storage = EvqCallableDataNV;
-#endif
+        $$.qualifier.storage = EvqCallableData;
+    }
+    | CALLDATAEXT {
+        parseContext.globalCheck($1.loc, "callableDataEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask |
+            EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataEXT");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqCallableData;
     }
     | CALLDATAINNV {
-#ifdef NV_EXTENSIONS
         parseContext.globalCheck($1.loc, "callableDataInNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangCallableNVMask), "callableDataInNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV");
         parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV");
         $$.init($1.loc);
-        $$.qualifier.storage = EvqCallableDataInNV;
-#endif
+        $$.qualifier.storage = EvqCallableDataIn;
     }
-    | SHARED {
-        parseContext.globalCheck($1.loc, "shared");
-        parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
-        parseContext.profileRequires($1.loc, EEsProfile, 310, 0, "shared");
-#ifdef NV_EXTENSIONS
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
-#else
-        parseContext.requireStage($1.loc, EShLangCompute, "shared");
-#endif
+    | CALLDATAINEXT {
+        parseContext.globalCheck($1.loc, "callableDataInEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataInEXT");
         $$.init($1.loc);
-        $$.qualifier.storage = EvqShared;
+        $$.qualifier.storage = EvqCallableDataIn;
     }
     | COHERENT {
         $$.init($1.loc);
@@ -1437,6 +1528,11 @@
         parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate");
         $$.qualifier.nonprivate = true;
     }
+    | SHADERCALLCOHERENT {
+        $$.init($1.loc);
+        parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent");
+        $$.qualifier.shadercallcoherent = true;
+    }
     | VOLATILE {
         $$.init($1.loc);
         $$.qualifier.volatil = true;
@@ -1465,8 +1561,10 @@
         parseContext.unimplemented($1.loc, "subroutine");
         $$.init($1.loc);
     }
+
     ;
 
+
 non_uniform_qualifier
     : NONUNIFORM {
         $$.init($1.loc);
@@ -1485,16 +1583,19 @@
     }
     ;
 
+
 type_specifier
-    : type_specifier_nonarray {
+    : type_specifier_nonarray type_parameter_specifier_opt {
         $$ = $1;
         $$.qualifier.precision = parseContext.getDefaultPrecision($$);
+        $$.typeParameters = $2;
     }
-    | type_specifier_nonarray array_specifier {
-        parseContext.arrayOfArrayVersionCheck($2.loc, $2.arraySizes);
+    | type_specifier_nonarray type_parameter_specifier_opt array_specifier {
+        parseContext.arrayOfArrayVersionCheck($3.loc, $3.arraySizes);
         $$ = $1;
         $$.qualifier.precision = parseContext.getDefaultPrecision($$);
-        $$.arraySizes = $2.arraySizes;
+        $$.typeParameters = $2;
+        $$.arraySizes = $3.arraySizes;
     }
     ;
 
@@ -1509,7 +1610,7 @@
         $$.arraySizes = new TArraySizes;
 
         TArraySize size;
-        parseContext.arraySizeCheck($2->getLoc(), $2, size);
+        parseContext.arraySizeCheck($2->getLoc(), $2, size, "array size");
         $$.arraySizes->addInnerSize(size);
     }
     | array_specifier LEFT_BRACKET RIGHT_BRACKET {
@@ -1520,11 +1621,43 @@
         $$ = $1;
 
         TArraySize size;
-        parseContext.arraySizeCheck($3->getLoc(), $3, size);
+        parseContext.arraySizeCheck($3->getLoc(), $3, size, "array size");
         $$.arraySizes->addInnerSize(size);
     }
     ;
 
+type_parameter_specifier_opt
+    : type_parameter_specifier {
+        $$ = $1;
+    }
+    | /* May be null */ {
+        $$ = 0;
+    }
+    ;
+
+type_parameter_specifier
+    : LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE {
+        $$ = $2;
+    }
+    ;
+
+type_parameter_specifier_list
+    : unary_expression {
+        $$ = new TArraySizes;
+
+        TArraySize size;
+        parseContext.arraySizeCheck($1->getLoc(), $1, size, "type parameter");
+        $$->addInnerSize(size);
+    }
+    | type_parameter_specifier_list COMMA unary_expression {
+        $$ = $1;
+
+        TArraySize size;
+        parseContext.arraySizeCheck($3->getLoc(), $3, size, "type parameter");
+        $$->addInnerSize(size);
+    }
+    ;
+
 type_specifier_nonarray
     : VOID {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1534,8 +1667,147 @@
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat;
     }
+    | INT {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+    }
+    | UINT {
+        parseContext.fullIntegerCheck($1.loc, "unsigned integer");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+    }
+    | BOOL {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtBool;
+    }
+    | VEC2 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setVector(2);
+    }
+    | VEC3 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setVector(3);
+    }
+    | VEC4 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setVector(4);
+    }
+    | BVEC2 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtBool;
+        $$.setVector(2);
+    }
+    | BVEC3 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtBool;
+        $$.setVector(3);
+    }
+    | BVEC4 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtBool;
+        $$.setVector(4);
+    }
+    | IVEC2 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+        $$.setVector(2);
+    }
+    | IVEC3 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+        $$.setVector(3);
+    }
+    | IVEC4 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+        $$.setVector(4);
+    }
+    | UVEC2 {
+        parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+        $$.setVector(2);
+    }
+    | UVEC3 {
+        parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+        $$.setVector(3);
+    }
+    | UVEC4 {
+        parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+        $$.setVector(4);
+    }
+    | MAT2 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(2, 2);
+    }
+    | MAT3 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(3, 3);
+    }
+    | MAT4 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(4, 4);
+    }
+    | MAT2X2 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(2, 2);
+    }
+    | MAT2X3 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(2, 3);
+    }
+    | MAT2X4 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(2, 4);
+    }
+    | MAT3X2 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(3, 2);
+    }
+    | MAT3X3 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(3, 3);
+    }
+    | MAT3X4 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(3, 4);
+    }
+    | MAT4X2 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(4, 2);
+    }
+    | MAT4X3 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(4, 3);
+    }
+    | MAT4X4 {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(4, 4);
+    }
+
     | DOUBLE {
-        parseContext.doubleCheck($1.loc, "double");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
     }
@@ -1554,15 +1826,6 @@
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
     }
-    | INT {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtInt;
-    }
-    | UINT {
-        parseContext.fullIntegerCheck($1.loc, "unsigned integer");
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtUint;
-    }
     | INT8_T {
         parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1603,39 +1866,26 @@
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtUint64;
     }
-    | BOOL {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtBool;
-    }
-    | VEC2 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setVector(2);
-    }
-    | VEC3 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setVector(3);
-    }
-    | VEC4 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setVector(4);
-    }
     | DVEC2 {
-        parseContext.doubleCheck($1.loc, "double vector");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double vector");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setVector(2);
     }
     | DVEC3 {
-        parseContext.doubleCheck($1.loc, "double vector");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double vector");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setVector(3);
     }
     | DVEC4 {
-        parseContext.doubleCheck($1.loc, "double vector");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double vector");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setVector(4);
@@ -1694,36 +1944,6 @@
         $$.basicType = EbtDouble;
         $$.setVector(4);
     }
-    | BVEC2 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtBool;
-        $$.setVector(2);
-    }
-    | BVEC3 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtBool;
-        $$.setVector(3);
-    }
-    | BVEC4 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtBool;
-        $$.setVector(4);
-    }
-    | IVEC2 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtInt;
-        $$.setVector(2);
-    }
-    | IVEC3 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtInt;
-        $$.setVector(3);
-    }
-    | IVEC4 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtInt;
-        $$.setVector(4);
-    }
     | I8VEC2 {
         parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1796,24 +2016,6 @@
         $$.basicType = EbtInt64;
         $$.setVector(4);
     }
-    | UVEC2 {
-        parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtUint;
-        $$.setVector(2);
-    }
-    | UVEC3 {
-        parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtUint;
-        $$.setVector(3);
-    }
-    | UVEC4 {
-        parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtUint;
-        $$.setVector(4);
-    }
     | U8VEC2 {
         parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1886,134 +2088,98 @@
         $$.basicType = EbtUint64;
         $$.setVector(4);
     }
-    | MAT2 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(2, 2);
-    }
-    | MAT3 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(3, 3);
-    }
-    | MAT4 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(4, 4);
-    }
-    | MAT2X2 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(2, 2);
-    }
-    | MAT2X3 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(2, 3);
-    }
-    | MAT2X4 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(2, 4);
-    }
-    | MAT3X2 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(3, 2);
-    }
-    | MAT3X3 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(3, 3);
-    }
-    | MAT3X4 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(3, 4);
-    }
-    | MAT4X2 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(4, 2);
-    }
-    | MAT4X3 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(4, 3);
-    }
-    | MAT4X4 {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtFloat;
-        $$.setMatrix(4, 4);
-    }
     | DMAT2 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(2, 2);
     }
     | DMAT3 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(3, 3);
     }
     | DMAT4 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(4, 4);
     }
     | DMAT2X2 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(2, 2);
     }
     | DMAT2X3 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(2, 3);
     }
     | DMAT2X4 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(2, 4);
     }
     | DMAT3X2 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(3, 2);
     }
     | DMAT3X3 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(3, 3);
     }
     | DMAT3X4 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(3, 4);
     }
     | DMAT4X2 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(4, 2);
     }
     | DMAT4X3 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(4, 3);
     }
     | DMAT4X4 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(4, 4);
@@ -2235,10 +2401,16 @@
         $$.setMatrix(4, 4);
     }
     | ACCSTRUCTNV {
-#ifdef NV_EXTENSIONS
        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-       $$.basicType = EbtAccStructNV;
-#endif
+       $$.basicType = EbtAccStruct;
+    }
+    | ACCSTRUCTEXT {
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtAccStruct;
+    }
+    | RAYQUERYEXT {
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtRayQuery;
     }
     | ATOMIC_UINT {
         parseContext.vulkanRemoved($1.loc, "atomic counter types");
@@ -2250,6 +2422,7 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, Esd1D);
     }
+
     | SAMPLER2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2265,11 +2438,6 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, EsdCube);
     }
-    | SAMPLER1DSHADOW {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, Esd1D, false, true);
-    }
     | SAMPLER2DSHADOW {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2280,26 +2448,32 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, EsdCube, false, true);
     }
-    | SAMPLER1DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, Esd1D, true);
-    }
     | SAMPLER2DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, Esd2D, true);
     }
-    | SAMPLER1DARRAYSHADOW {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, Esd1D, true, true);
-    }
     | SAMPLER2DARRAYSHADOW {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, Esd2D, true, true);
     }
+
+    | SAMPLER1DSHADOW {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd1D, false, true);
+    }
+    | SAMPLER1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd1D, true);
+    }
+    | SAMPLER1DARRAYSHADOW {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd1D, true, true);
+    }
     | SAMPLERCUBEARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2311,114 +2485,89 @@
         $$.sampler.set(EbtFloat, EsdCube, true, true);
     }
     | F16SAMPLER1D {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, Esd1D);
-#endif
     }
     | F16SAMPLER2D {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, Esd2D);
-#endif
     }
     | F16SAMPLER3D {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, Esd3D);
-#endif
     }
     | F16SAMPLERCUBE {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, EsdCube);
-#endif
     }
     | F16SAMPLER1DSHADOW {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, Esd1D, false, true);
-#endif
     }
     | F16SAMPLER2DSHADOW {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, Esd2D, false, true);
-#endif
     }
     | F16SAMPLERCUBESHADOW {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, EsdCube, false, true);
-#endif
     }
     | F16SAMPLER1DARRAY {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, Esd1D, true);
-#endif
     }
     | F16SAMPLER2DARRAY {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, Esd2D, true);
-#endif
     }
     | F16SAMPLER1DARRAYSHADOW {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, Esd1D, true, true);
-#endif
     }
     | F16SAMPLER2DARRAYSHADOW {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, Esd2D, true, true);
-#endif
     }
     | F16SAMPLERCUBEARRAY {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, EsdCube, true);
-#endif
     }
     | F16SAMPLERCUBEARRAYSHADOW {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, EsdCube, true, true);
-#endif
     }
     | ISAMPLER1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtInt, Esd1D);
     }
+
     | ISAMPLER2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2434,26 +2583,11 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtInt, EsdCube);
     }
-    | ISAMPLER1DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtInt, Esd1D, true);
-    }
     | ISAMPLER2DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtInt, Esd2D, true);
     }
-    | ISAMPLERCUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtInt, EsdCube, true);
-    }
-    | USAMPLER1D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, Esd1D);
-    }
     | USAMPLER2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2469,21 +2603,124 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtUint, EsdCube);
     }
+
+    | ISAMPLER1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, Esd1D, true);
+    }
+    | ISAMPLERCUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, EsdCube, true);
+    }
+    | USAMPLER1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, Esd1D);
+    }
     | USAMPLER1DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtUint, Esd1D, true);
     }
-    | USAMPLER2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, Esd2D, true);
-    }
     | USAMPLERCUBEARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtUint, EsdCube, true);
     }
+    | TEXTURECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, EsdCube, true);
+    }
+    | ITEXTURECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, EsdCube, true);
+    }
+    | UTEXTURECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, EsdCube, true);
+    }
+
+    | USAMPLER2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, Esd2D, true);
+    }
+    | TEXTURE2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, Esd2D);
+    }
+    | TEXTURE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, Esd3D);
+    }
+    | TEXTURE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, Esd2D, true);
+    }
+    | TEXTURECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, EsdCube);
+    }
+    | ITEXTURE2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd2D);
+    }
+    | ITEXTURE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd3D);
+    }
+    | ITEXTURECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, EsdCube);
+    }
+    | ITEXTURE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd2D, true);
+    }
+    | UTEXTURE2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd2D);
+    }
+    | UTEXTURE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd3D);
+    }
+    | UTEXTURECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, EsdCube);
+    }
+    | UTEXTURE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd2D, true);
+    }
+    | SAMPLER {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setPureSampler(false);
+    }
+    | SAMPLERSHADOW {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setPureSampler(true);
+    }
+
     | SAMPLER2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2495,20 +2732,16 @@
         $$.sampler.set(EbtFloat, EsdRect, false, true);
     }
     | F16SAMPLER2DRECT {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, EsdRect);
-#endif
     }
     | F16SAMPLER2DRECTSHADOW {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, EsdRect, false, true);
-#endif
     }
     | ISAMPLER2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2526,12 +2759,10 @@
         $$.sampler.set(EbtFloat, EsdBuffer);
     }
     | F16SAMPLERBUFFER {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, EsdBuffer);
-#endif
     }
     | ISAMPLERBUFFER {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2549,12 +2780,10 @@
         $$.sampler.set(EbtFloat, Esd2D, false, false, true);
     }
     | F16SAMPLER2DMS {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, Esd2D, false, false, true);
-#endif
     }
     | ISAMPLER2DMS {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2572,12 +2801,10 @@
         $$.sampler.set(EbtFloat, Esd2D, true, false, true);
     }
     | F16SAMPLER2DMSARRAY {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat16, Esd2D, true, false, true);
-#endif
     }
     | ISAMPLER2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2589,67 +2816,34 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtUint, Esd2D, true, false, true);
     }
-    | SAMPLER {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setPureSampler(false);
-    }
-    | SAMPLERSHADOW {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setPureSampler(true);
-    }
     | TEXTURE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, Esd1D);
     }
     | F16TEXTURE1D {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, Esd1D);
-#endif
-    }
-    | TEXTURE2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd2D);
     }
     | F16TEXTURE2D {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, Esd2D);
-#endif
-    }
-    | TEXTURE3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd3D);
     }
     | F16TEXTURE3D {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, Esd3D);
-#endif
-    }
-    | TEXTURECUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, EsdCube);
     }
     | F16TEXTURECUBE {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, EsdCube);
-#endif
     }
     | TEXTURE1DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2657,121 +2851,53 @@
         $$.sampler.setTexture(EbtFloat, Esd1D, true);
     }
     | F16TEXTURE1DARRAY {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, Esd1D, true);
-#endif
-    }
-    | TEXTURE2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd2D, true);
     }
     | F16TEXTURE2DARRAY {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, Esd2D, true);
-#endif
-    }
-    | TEXTURECUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, EsdCube, true);
     }
     | F16TEXTURECUBEARRAY {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, EsdCube, true);
-#endif
     }
     | ITEXTURE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtInt, Esd1D);
     }
-    | ITEXTURE2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd2D);
-    }
-    | ITEXTURE3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd3D);
-    }
-    | ITEXTURECUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, EsdCube);
-    }
     | ITEXTURE1DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtInt, Esd1D, true);
     }
-    | ITEXTURE2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd2D, true);
-    }
-    | ITEXTURECUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, EsdCube, true);
-    }
     | UTEXTURE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtUint, Esd1D);
     }
-    | UTEXTURE2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd2D);
-    }
-    | UTEXTURE3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd3D);
-    }
-    | UTEXTURECUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, EsdCube);
-    }
     | UTEXTURE1DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtUint, Esd1D, true);
     }
-    | UTEXTURE2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd2D, true);
-    }
-    | UTEXTURECUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, EsdCube, true);
-    }
     | TEXTURE2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, EsdRect);
     }
     | F16TEXTURE2DRECT {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, EsdRect);
-#endif
     }
     | ITEXTURE2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2789,12 +2915,10 @@
         $$.sampler.setTexture(EbtFloat, EsdBuffer);
     }
     | F16TEXTUREBUFFER {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, EsdBuffer);
-#endif
     }
     | ITEXTUREBUFFER {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2812,12 +2936,10 @@
         $$.sampler.setTexture(EbtFloat, Esd2D, false, false, true);
     }
     | F16TEXTURE2DMS {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
-#endif
     }
     | ITEXTURE2DMS {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2835,12 +2957,10 @@
         $$.sampler.setTexture(EbtFloat, Esd2D, true, false, true);
     }
     | F16TEXTURE2DMSARRAY {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
-#endif
     }
     | ITEXTURE2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2858,12 +2978,10 @@
         $$.sampler.setImage(EbtFloat, Esd1D);
     }
     | F16IMAGE1D {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat16, Esd1D);
-#endif
     }
     | IIMAGE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2881,12 +2999,10 @@
         $$.sampler.setImage(EbtFloat, Esd2D);
     }
     | F16IMAGE2D {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat16, Esd2D);
-#endif
     }
     | IIMAGE2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2904,12 +3020,10 @@
         $$.sampler.setImage(EbtFloat, Esd3D);
     }
     | F16IMAGE3D {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat16, Esd3D);
-#endif
     }
     | IIMAGE3D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2927,12 +3041,10 @@
         $$.sampler.setImage(EbtFloat, EsdRect);
     }
     | F16IMAGE2DRECT {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat16, EsdRect);
-#endif
     }
     | IIMAGE2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2950,12 +3062,10 @@
         $$.sampler.setImage(EbtFloat, EsdCube);
     }
     | F16IMAGECUBE {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat16, EsdCube);
-#endif
     }
     | IIMAGECUBE {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2973,12 +3083,10 @@
         $$.sampler.setImage(EbtFloat, EsdBuffer);
     }
     | F16IMAGEBUFFER {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat16, EsdBuffer);
-#endif
     }
     | IIMAGEBUFFER {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2996,12 +3104,10 @@
         $$.sampler.setImage(EbtFloat, Esd1D, true);
     }
     | F16IMAGE1DARRAY {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat16, Esd1D, true);
-#endif
     }
     | IIMAGE1DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3019,12 +3125,10 @@
         $$.sampler.setImage(EbtFloat, Esd2D, true);
     }
     | F16IMAGE2DARRAY {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat16, Esd2D, true);
-#endif
     }
     | IIMAGE2DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3042,12 +3146,10 @@
         $$.sampler.setImage(EbtFloat, EsdCube, true);
     }
     | F16IMAGECUBEARRAY {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat16, EsdCube, true);
-#endif
     }
     | IIMAGECUBEARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3065,12 +3167,10 @@
         $$.sampler.setImage(EbtFloat, Esd2D, false, false, true);
     }
     | F16IMAGE2DMS {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat16, Esd2D, false, false, true);
-#endif
     }
     | IIMAGE2DMS {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3088,12 +3188,10 @@
         $$.sampler.setImage(EbtFloat, Esd2D, true, false, true);
     }
     | F16IMAGE2DMSARRAY {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat16, Esd2D, true, false, true);
-#endif
     }
     | IIMAGE2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3111,6 +3209,12 @@
         $$.sampler.set(EbtFloat, Esd2D);
         $$.sampler.external = true;
     }
+    | SAMPLEREXTERNAL2DY2YEXT { // GL_EXT_YUV_target
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd2D);
+        $$.sampler.yuv = true;
+    }
     | SUBPASSINPUT {
         parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3124,22 +3228,18 @@
         $$.sampler.setSubpass(EbtFloat, true);
     }
     | F16SUBPASSINPUT {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
         parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setSubpass(EbtFloat16);
-#endif
     }
     | F16SUBPASSINPUTMS {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck($1.loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
         parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setSubpass(EbtFloat16, true);
-#endif
     }
     | ISUBPASSINPUT {
         parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
@@ -3165,6 +3265,25 @@
         $$.basicType = EbtSampler;
         $$.sampler.setSubpass(EbtUint, true);
     }
+    | FCOOPMATNV {
+        parseContext.fcoopmatCheck($1.loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.coopmat = true;
+    }
+    | ICOOPMATNV {
+        parseContext.intcoopmatCheck($1.loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+        $$.coopmat = true;
+    }
+    | UCOOPMATNV {
+        parseContext.intcoopmatCheck($1.loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+        $$.coopmat = true;
+    }
+
     | struct_specifier {
         $$ = $1;
         $$.qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3245,7 +3364,7 @@
         if ($1.arraySizes) {
             parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
             parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type");
-            if (parseContext.profile == EEsProfile)
+            if (parseContext.isEsProfile())
                 parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes);
         }
 
@@ -3267,7 +3386,7 @@
         if ($2.arraySizes) {
             parseContext.profileRequires($2.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
             parseContext.profileRequires($2.loc, EEsProfile, 300, 0, "arrayed type");
-            if (parseContext.profile == EEsProfile)
+            if (parseContext.isEsProfile())
                 parseContext.arraySizeRequiredCheck($2.loc, *$2.arraySizes);
         }
 
@@ -3319,6 +3438,7 @@
     : assignment_expression {
         $$ = $1;
     }
+
     | LEFT_BRACE initializer_list RIGHT_BRACE {
         const char* initFeature = "{ } style initializers";
         parseContext.requireProfile($1.loc, ~EEsProfile, initFeature);
@@ -3331,8 +3451,10 @@
         parseContext.profileRequires($1.loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
         $$ = $2;
     }
+
     ;
 
+
 initializer_list
     : initializer {
         $$ = parseContext.intermediate.growAggregate(0, $1, $1->getLoc());
@@ -3342,6 +3464,7 @@
     }
     ;
 
+
 declaration_statement
     : declaration { $$ = $1; }
     ;
@@ -3361,8 +3484,21 @@
     | case_label            { $$ = $1; }
     | iteration_statement   { $$ = $1; }
     | jump_statement        { $$ = $1; }
+
+    | demote_statement      { $$ = $1; }
+
     ;
 
+
+demote_statement
+    : DEMOTE SEMICOLON {
+        parseContext.requireStage($1.loc, EShLangFragment, "demote");
+        parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_demote_to_helper_invocation, "demote");
+        $$ = parseContext.intermediate.addBranch(EOpDemote, $1.loc);
+    }
+    ;
+
+
 compound_statement
     : LEFT_BRACE RIGHT_BRACE { $$ = 0; }
     | LEFT_BRACE {
@@ -3445,11 +3581,13 @@
     : selection_statement_nonattributed {
         $$ = $1;
     }
+
     | attribute selection_statement_nonattributed {
         parseContext.handleSelectionAttributes(*$1, $2);
         $$ = $2;
     }
 
+
 selection_statement_nonattributed
     : IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement {
         parseContext.boolCheck($1.loc, $3);
@@ -3490,11 +3628,13 @@
     : switch_statement_nonattributed {
         $$ = $1;
     }
+
     | attribute switch_statement_nonattributed {
         parseContext.handleSwitchAttributes(*$1, $2);
         $$ = $2;
     }
 
+
 switch_statement_nonattributed
     : SWITCH LEFT_PAREN expression RIGHT_PAREN {
         // start new switch sequence on the switch stack
@@ -3552,11 +3692,13 @@
     : iteration_statement_nonattributed {
         $$ = $1;
     }
+
     | attribute iteration_statement_nonattributed {
         parseContext.handleLoopAttributes(*$1, $2);
         $$ = $2;
     }
 
+
 iteration_statement_nonattributed
     : WHILE LEFT_PAREN {
         if (! parseContext.limits.whileLoops)
@@ -3687,11 +3829,13 @@
     | declaration {
         $$ = $1;
     }
+
     | SEMICOLON {
         parseContext.requireProfile($1.loc, ~EEsProfile, "extraneous semicolon");
         parseContext.profileRequires($1.loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
         $$ = nullptr;
     }
+
     ;
 
 function_definition
@@ -3716,6 +3860,7 @@
     }
     ;
 
+
 attribute
     : LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET {
         $$ = $3;
@@ -3738,4 +3883,6 @@
         $$ = parseContext.makeAttributes(*$1.string, $3);
     }
 
+
 %%
+
diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp
index e57edb5..69f7f8e 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -62,7 +62,7 @@
 
 
 /* Copy the first part of user declarations.  */
-#line 42 "MachineIndependent/glslang.y" /* yacc.c:339  */
+#line 69 "glslang.y" /* yacc.c:339  */
 
 
 /* Based on:
@@ -88,7 +88,7 @@
 using namespace glslang;
 
 
-#line 92 "MachineIndependent/glslang_tab.cpp" /* yacc.c:339  */
+#line 92 "glslang_tab.cpp" /* yacc.c:339  */
 
 # ifndef YY_NULLPTR
 #  if defined __cplusplus && 201103L <= __cplusplus
@@ -108,8 +108,8 @@
 
 /* In a future release of Bison, this section will be replaced
    by #include "glslang_tab.cpp.h".  */
-#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
-# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
+#ifndef YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
+# define YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 1
@@ -123,409 +123,423 @@
 # define YYTOKENTYPE
   enum yytokentype
   {
-    ATTRIBUTE = 258,
-    VARYING = 259,
-    FLOAT16_T = 260,
-    FLOAT = 261,
-    FLOAT32_T = 262,
-    DOUBLE = 263,
-    FLOAT64_T = 264,
-    CONST = 265,
-    BOOL = 266,
-    INT = 267,
-    UINT = 268,
-    INT64_T = 269,
-    UINT64_T = 270,
-    INT32_T = 271,
-    UINT32_T = 272,
-    INT16_T = 273,
-    UINT16_T = 274,
-    INT8_T = 275,
-    UINT8_T = 276,
-    BREAK = 277,
-    CONTINUE = 278,
-    DO = 279,
-    ELSE = 280,
-    FOR = 281,
-    IF = 282,
-    DISCARD = 283,
-    RETURN = 284,
-    SWITCH = 285,
-    CASE = 286,
-    DEFAULT = 287,
-    SUBROUTINE = 288,
-    BVEC2 = 289,
-    BVEC3 = 290,
-    BVEC4 = 291,
-    IVEC2 = 292,
-    IVEC3 = 293,
-    IVEC4 = 294,
-    UVEC2 = 295,
-    UVEC3 = 296,
-    UVEC4 = 297,
-    I64VEC2 = 298,
-    I64VEC3 = 299,
-    I64VEC4 = 300,
-    U64VEC2 = 301,
-    U64VEC3 = 302,
-    U64VEC4 = 303,
-    I32VEC2 = 304,
-    I32VEC3 = 305,
-    I32VEC4 = 306,
-    U32VEC2 = 307,
-    U32VEC3 = 308,
-    U32VEC4 = 309,
-    I16VEC2 = 310,
-    I16VEC3 = 311,
-    I16VEC4 = 312,
-    U16VEC2 = 313,
-    U16VEC3 = 314,
-    U16VEC4 = 315,
-    I8VEC2 = 316,
-    I8VEC3 = 317,
-    I8VEC4 = 318,
-    U8VEC2 = 319,
-    U8VEC3 = 320,
-    U8VEC4 = 321,
-    VEC2 = 322,
-    VEC3 = 323,
-    VEC4 = 324,
-    MAT2 = 325,
-    MAT3 = 326,
-    MAT4 = 327,
-    CENTROID = 328,
-    IN = 329,
-    OUT = 330,
-    INOUT = 331,
-    UNIFORM = 332,
-    PATCH = 333,
-    SAMPLE = 334,
-    BUFFER = 335,
-    SHARED = 336,
-    NONUNIFORM = 337,
-    PAYLOADNV = 338,
-    PAYLOADINNV = 339,
-    HITATTRNV = 340,
-    CALLDATANV = 341,
-    CALLDATAINNV = 342,
-    COHERENT = 343,
-    VOLATILE = 344,
-    RESTRICT = 345,
-    READONLY = 346,
-    WRITEONLY = 347,
-    DEVICECOHERENT = 348,
-    QUEUEFAMILYCOHERENT = 349,
-    WORKGROUPCOHERENT = 350,
-    SUBGROUPCOHERENT = 351,
-    NONPRIVATE = 352,
-    DVEC2 = 353,
-    DVEC3 = 354,
-    DVEC4 = 355,
-    DMAT2 = 356,
-    DMAT3 = 357,
-    DMAT4 = 358,
-    F16VEC2 = 359,
-    F16VEC3 = 360,
-    F16VEC4 = 361,
-    F16MAT2 = 362,
-    F16MAT3 = 363,
-    F16MAT4 = 364,
-    F32VEC2 = 365,
-    F32VEC3 = 366,
-    F32VEC4 = 367,
-    F32MAT2 = 368,
-    F32MAT3 = 369,
-    F32MAT4 = 370,
-    F64VEC2 = 371,
-    F64VEC3 = 372,
-    F64VEC4 = 373,
-    F64MAT2 = 374,
-    F64MAT3 = 375,
-    F64MAT4 = 376,
-    NOPERSPECTIVE = 377,
-    FLAT = 378,
-    SMOOTH = 379,
-    LAYOUT = 380,
-    EXPLICITINTERPAMD = 381,
-    PERVERTEXNV = 382,
-    PERPRIMITIVENV = 383,
-    PERVIEWNV = 384,
-    PERTASKNV = 385,
-    MAT2X2 = 386,
-    MAT2X3 = 387,
-    MAT2X4 = 388,
-    MAT3X2 = 389,
-    MAT3X3 = 390,
-    MAT3X4 = 391,
-    MAT4X2 = 392,
-    MAT4X3 = 393,
-    MAT4X4 = 394,
-    DMAT2X2 = 395,
-    DMAT2X3 = 396,
-    DMAT2X4 = 397,
-    DMAT3X2 = 398,
-    DMAT3X3 = 399,
-    DMAT3X4 = 400,
-    DMAT4X2 = 401,
-    DMAT4X3 = 402,
-    DMAT4X4 = 403,
-    F16MAT2X2 = 404,
-    F16MAT2X3 = 405,
-    F16MAT2X4 = 406,
-    F16MAT3X2 = 407,
-    F16MAT3X3 = 408,
-    F16MAT3X4 = 409,
-    F16MAT4X2 = 410,
-    F16MAT4X3 = 411,
-    F16MAT4X4 = 412,
-    F32MAT2X2 = 413,
-    F32MAT2X3 = 414,
-    F32MAT2X4 = 415,
-    F32MAT3X2 = 416,
-    F32MAT3X3 = 417,
-    F32MAT3X4 = 418,
-    F32MAT4X2 = 419,
-    F32MAT4X3 = 420,
-    F32MAT4X4 = 421,
-    F64MAT2X2 = 422,
-    F64MAT2X3 = 423,
-    F64MAT2X4 = 424,
-    F64MAT3X2 = 425,
-    F64MAT3X3 = 426,
-    F64MAT3X4 = 427,
-    F64MAT4X2 = 428,
-    F64MAT4X3 = 429,
-    F64MAT4X4 = 430,
-    ATOMIC_UINT = 431,
-    ACCSTRUCTNV = 432,
-    SAMPLER1D = 433,
-    SAMPLER2D = 434,
-    SAMPLER3D = 435,
-    SAMPLERCUBE = 436,
-    SAMPLER1DSHADOW = 437,
-    SAMPLER2DSHADOW = 438,
-    SAMPLERCUBESHADOW = 439,
-    SAMPLER1DARRAY = 440,
-    SAMPLER2DARRAY = 441,
-    SAMPLER1DARRAYSHADOW = 442,
-    SAMPLER2DARRAYSHADOW = 443,
-    ISAMPLER1D = 444,
-    ISAMPLER2D = 445,
-    ISAMPLER3D = 446,
-    ISAMPLERCUBE = 447,
-    ISAMPLER1DARRAY = 448,
-    ISAMPLER2DARRAY = 449,
-    USAMPLER1D = 450,
-    USAMPLER2D = 451,
-    USAMPLER3D = 452,
-    USAMPLERCUBE = 453,
-    USAMPLER1DARRAY = 454,
-    USAMPLER2DARRAY = 455,
-    SAMPLER2DRECT = 456,
-    SAMPLER2DRECTSHADOW = 457,
-    ISAMPLER2DRECT = 458,
-    USAMPLER2DRECT = 459,
-    SAMPLERBUFFER = 460,
-    ISAMPLERBUFFER = 461,
-    USAMPLERBUFFER = 462,
-    SAMPLERCUBEARRAY = 463,
-    SAMPLERCUBEARRAYSHADOW = 464,
-    ISAMPLERCUBEARRAY = 465,
-    USAMPLERCUBEARRAY = 466,
-    SAMPLER2DMS = 467,
-    ISAMPLER2DMS = 468,
-    USAMPLER2DMS = 469,
-    SAMPLER2DMSARRAY = 470,
-    ISAMPLER2DMSARRAY = 471,
-    USAMPLER2DMSARRAY = 472,
-    SAMPLEREXTERNALOES = 473,
-    F16SAMPLER1D = 474,
-    F16SAMPLER2D = 475,
-    F16SAMPLER3D = 476,
-    F16SAMPLER2DRECT = 477,
-    F16SAMPLERCUBE = 478,
-    F16SAMPLER1DARRAY = 479,
-    F16SAMPLER2DARRAY = 480,
-    F16SAMPLERCUBEARRAY = 481,
-    F16SAMPLERBUFFER = 482,
-    F16SAMPLER2DMS = 483,
-    F16SAMPLER2DMSARRAY = 484,
-    F16SAMPLER1DSHADOW = 485,
-    F16SAMPLER2DSHADOW = 486,
-    F16SAMPLER1DARRAYSHADOW = 487,
-    F16SAMPLER2DARRAYSHADOW = 488,
-    F16SAMPLER2DRECTSHADOW = 489,
-    F16SAMPLERCUBESHADOW = 490,
-    F16SAMPLERCUBEARRAYSHADOW = 491,
-    SAMPLER = 492,
-    SAMPLERSHADOW = 493,
-    TEXTURE1D = 494,
-    TEXTURE2D = 495,
-    TEXTURE3D = 496,
-    TEXTURECUBE = 497,
-    TEXTURE1DARRAY = 498,
-    TEXTURE2DARRAY = 499,
-    ITEXTURE1D = 500,
-    ITEXTURE2D = 501,
-    ITEXTURE3D = 502,
-    ITEXTURECUBE = 503,
-    ITEXTURE1DARRAY = 504,
-    ITEXTURE2DARRAY = 505,
-    UTEXTURE1D = 506,
-    UTEXTURE2D = 507,
-    UTEXTURE3D = 508,
-    UTEXTURECUBE = 509,
-    UTEXTURE1DARRAY = 510,
-    UTEXTURE2DARRAY = 511,
-    TEXTURE2DRECT = 512,
-    ITEXTURE2DRECT = 513,
-    UTEXTURE2DRECT = 514,
-    TEXTUREBUFFER = 515,
-    ITEXTUREBUFFER = 516,
-    UTEXTUREBUFFER = 517,
-    TEXTURECUBEARRAY = 518,
-    ITEXTURECUBEARRAY = 519,
-    UTEXTURECUBEARRAY = 520,
-    TEXTURE2DMS = 521,
-    ITEXTURE2DMS = 522,
-    UTEXTURE2DMS = 523,
-    TEXTURE2DMSARRAY = 524,
-    ITEXTURE2DMSARRAY = 525,
-    UTEXTURE2DMSARRAY = 526,
-    F16TEXTURE1D = 527,
-    F16TEXTURE2D = 528,
-    F16TEXTURE3D = 529,
-    F16TEXTURE2DRECT = 530,
-    F16TEXTURECUBE = 531,
-    F16TEXTURE1DARRAY = 532,
-    F16TEXTURE2DARRAY = 533,
-    F16TEXTURECUBEARRAY = 534,
-    F16TEXTUREBUFFER = 535,
-    F16TEXTURE2DMS = 536,
-    F16TEXTURE2DMSARRAY = 537,
-    SUBPASSINPUT = 538,
-    SUBPASSINPUTMS = 539,
-    ISUBPASSINPUT = 540,
-    ISUBPASSINPUTMS = 541,
-    USUBPASSINPUT = 542,
-    USUBPASSINPUTMS = 543,
-    F16SUBPASSINPUT = 544,
-    F16SUBPASSINPUTMS = 545,
-    IMAGE1D = 546,
-    IIMAGE1D = 547,
-    UIMAGE1D = 548,
-    IMAGE2D = 549,
-    IIMAGE2D = 550,
-    UIMAGE2D = 551,
-    IMAGE3D = 552,
-    IIMAGE3D = 553,
-    UIMAGE3D = 554,
-    IMAGE2DRECT = 555,
-    IIMAGE2DRECT = 556,
-    UIMAGE2DRECT = 557,
-    IMAGECUBE = 558,
-    IIMAGECUBE = 559,
-    UIMAGECUBE = 560,
-    IMAGEBUFFER = 561,
-    IIMAGEBUFFER = 562,
-    UIMAGEBUFFER = 563,
-    IMAGE1DARRAY = 564,
-    IIMAGE1DARRAY = 565,
-    UIMAGE1DARRAY = 566,
-    IMAGE2DARRAY = 567,
-    IIMAGE2DARRAY = 568,
-    UIMAGE2DARRAY = 569,
-    IMAGECUBEARRAY = 570,
-    IIMAGECUBEARRAY = 571,
-    UIMAGECUBEARRAY = 572,
-    IMAGE2DMS = 573,
-    IIMAGE2DMS = 574,
-    UIMAGE2DMS = 575,
-    IMAGE2DMSARRAY = 576,
-    IIMAGE2DMSARRAY = 577,
-    UIMAGE2DMSARRAY = 578,
-    F16IMAGE1D = 579,
-    F16IMAGE2D = 580,
-    F16IMAGE3D = 581,
-    F16IMAGE2DRECT = 582,
-    F16IMAGECUBE = 583,
-    F16IMAGE1DARRAY = 584,
-    F16IMAGE2DARRAY = 585,
-    F16IMAGECUBEARRAY = 586,
-    F16IMAGEBUFFER = 587,
-    F16IMAGE2DMS = 588,
-    F16IMAGE2DMSARRAY = 589,
-    STRUCT = 590,
-    VOID = 591,
-    WHILE = 592,
-    IDENTIFIER = 593,
-    TYPE_NAME = 594,
-    FLOATCONSTANT = 595,
-    DOUBLECONSTANT = 596,
-    INT16CONSTANT = 597,
-    UINT16CONSTANT = 598,
-    INT32CONSTANT = 599,
-    UINT32CONSTANT = 600,
-    INTCONSTANT = 601,
-    UINTCONSTANT = 602,
-    INT64CONSTANT = 603,
-    UINT64CONSTANT = 604,
-    BOOLCONSTANT = 605,
-    FLOAT16CONSTANT = 606,
-    LEFT_OP = 607,
-    RIGHT_OP = 608,
-    INC_OP = 609,
-    DEC_OP = 610,
-    LE_OP = 611,
-    GE_OP = 612,
-    EQ_OP = 613,
-    NE_OP = 614,
-    AND_OP = 615,
-    OR_OP = 616,
-    XOR_OP = 617,
-    MUL_ASSIGN = 618,
-    DIV_ASSIGN = 619,
-    ADD_ASSIGN = 620,
-    MOD_ASSIGN = 621,
-    LEFT_ASSIGN = 622,
-    RIGHT_ASSIGN = 623,
-    AND_ASSIGN = 624,
-    XOR_ASSIGN = 625,
-    OR_ASSIGN = 626,
-    SUB_ASSIGN = 627,
-    LEFT_PAREN = 628,
-    RIGHT_PAREN = 629,
-    LEFT_BRACKET = 630,
-    RIGHT_BRACKET = 631,
-    LEFT_BRACE = 632,
-    RIGHT_BRACE = 633,
-    DOT = 634,
-    COMMA = 635,
-    COLON = 636,
-    EQUAL = 637,
-    SEMICOLON = 638,
-    BANG = 639,
-    DASH = 640,
-    TILDE = 641,
-    PLUS = 642,
-    STAR = 643,
-    SLASH = 644,
-    PERCENT = 645,
-    LEFT_ANGLE = 646,
-    RIGHT_ANGLE = 647,
-    VERTICAL_BAR = 648,
-    CARET = 649,
-    AMPERSAND = 650,
-    QUESTION = 651,
-    INVARIANT = 652,
-    PRECISE = 653,
-    HIGH_PRECISION = 654,
-    MEDIUM_PRECISION = 655,
-    LOW_PRECISION = 656,
-    PRECISION = 657,
-    PACKED = 658,
-    RESOURCE = 659,
-    SUPERP = 660
+    CONST = 258,
+    BOOL = 259,
+    INT = 260,
+    UINT = 261,
+    FLOAT = 262,
+    BVEC2 = 263,
+    BVEC3 = 264,
+    BVEC4 = 265,
+    IVEC2 = 266,
+    IVEC3 = 267,
+    IVEC4 = 268,
+    UVEC2 = 269,
+    UVEC3 = 270,
+    UVEC4 = 271,
+    VEC2 = 272,
+    VEC3 = 273,
+    VEC4 = 274,
+    MAT2 = 275,
+    MAT3 = 276,
+    MAT4 = 277,
+    MAT2X2 = 278,
+    MAT2X3 = 279,
+    MAT2X4 = 280,
+    MAT3X2 = 281,
+    MAT3X3 = 282,
+    MAT3X4 = 283,
+    MAT4X2 = 284,
+    MAT4X3 = 285,
+    MAT4X4 = 286,
+    SAMPLER2D = 287,
+    SAMPLER3D = 288,
+    SAMPLERCUBE = 289,
+    SAMPLER2DSHADOW = 290,
+    SAMPLERCUBESHADOW = 291,
+    SAMPLER2DARRAY = 292,
+    SAMPLER2DARRAYSHADOW = 293,
+    ISAMPLER2D = 294,
+    ISAMPLER3D = 295,
+    ISAMPLERCUBE = 296,
+    ISAMPLER2DARRAY = 297,
+    USAMPLER2D = 298,
+    USAMPLER3D = 299,
+    USAMPLERCUBE = 300,
+    USAMPLER2DARRAY = 301,
+    SAMPLER = 302,
+    SAMPLERSHADOW = 303,
+    TEXTURE2D = 304,
+    TEXTURE3D = 305,
+    TEXTURECUBE = 306,
+    TEXTURE2DARRAY = 307,
+    ITEXTURE2D = 308,
+    ITEXTURE3D = 309,
+    ITEXTURECUBE = 310,
+    ITEXTURE2DARRAY = 311,
+    UTEXTURE2D = 312,
+    UTEXTURE3D = 313,
+    UTEXTURECUBE = 314,
+    UTEXTURE2DARRAY = 315,
+    ATTRIBUTE = 316,
+    VARYING = 317,
+    FLOAT16_T = 318,
+    FLOAT32_T = 319,
+    DOUBLE = 320,
+    FLOAT64_T = 321,
+    INT64_T = 322,
+    UINT64_T = 323,
+    INT32_T = 324,
+    UINT32_T = 325,
+    INT16_T = 326,
+    UINT16_T = 327,
+    INT8_T = 328,
+    UINT8_T = 329,
+    I64VEC2 = 330,
+    I64VEC3 = 331,
+    I64VEC4 = 332,
+    U64VEC2 = 333,
+    U64VEC3 = 334,
+    U64VEC4 = 335,
+    I32VEC2 = 336,
+    I32VEC3 = 337,
+    I32VEC4 = 338,
+    U32VEC2 = 339,
+    U32VEC3 = 340,
+    U32VEC4 = 341,
+    I16VEC2 = 342,
+    I16VEC3 = 343,
+    I16VEC4 = 344,
+    U16VEC2 = 345,
+    U16VEC3 = 346,
+    U16VEC4 = 347,
+    I8VEC2 = 348,
+    I8VEC3 = 349,
+    I8VEC4 = 350,
+    U8VEC2 = 351,
+    U8VEC3 = 352,
+    U8VEC4 = 353,
+    DVEC2 = 354,
+    DVEC3 = 355,
+    DVEC4 = 356,
+    DMAT2 = 357,
+    DMAT3 = 358,
+    DMAT4 = 359,
+    F16VEC2 = 360,
+    F16VEC3 = 361,
+    F16VEC4 = 362,
+    F16MAT2 = 363,
+    F16MAT3 = 364,
+    F16MAT4 = 365,
+    F32VEC2 = 366,
+    F32VEC3 = 367,
+    F32VEC4 = 368,
+    F32MAT2 = 369,
+    F32MAT3 = 370,
+    F32MAT4 = 371,
+    F64VEC2 = 372,
+    F64VEC3 = 373,
+    F64VEC4 = 374,
+    F64MAT2 = 375,
+    F64MAT3 = 376,
+    F64MAT4 = 377,
+    DMAT2X2 = 378,
+    DMAT2X3 = 379,
+    DMAT2X4 = 380,
+    DMAT3X2 = 381,
+    DMAT3X3 = 382,
+    DMAT3X4 = 383,
+    DMAT4X2 = 384,
+    DMAT4X3 = 385,
+    DMAT4X4 = 386,
+    F16MAT2X2 = 387,
+    F16MAT2X3 = 388,
+    F16MAT2X4 = 389,
+    F16MAT3X2 = 390,
+    F16MAT3X3 = 391,
+    F16MAT3X4 = 392,
+    F16MAT4X2 = 393,
+    F16MAT4X3 = 394,
+    F16MAT4X4 = 395,
+    F32MAT2X2 = 396,
+    F32MAT2X3 = 397,
+    F32MAT2X4 = 398,
+    F32MAT3X2 = 399,
+    F32MAT3X3 = 400,
+    F32MAT3X4 = 401,
+    F32MAT4X2 = 402,
+    F32MAT4X3 = 403,
+    F32MAT4X4 = 404,
+    F64MAT2X2 = 405,
+    F64MAT2X3 = 406,
+    F64MAT2X4 = 407,
+    F64MAT3X2 = 408,
+    F64MAT3X3 = 409,
+    F64MAT3X4 = 410,
+    F64MAT4X2 = 411,
+    F64MAT4X3 = 412,
+    F64MAT4X4 = 413,
+    ATOMIC_UINT = 414,
+    ACCSTRUCTNV = 415,
+    ACCSTRUCTEXT = 416,
+    RAYQUERYEXT = 417,
+    FCOOPMATNV = 418,
+    ICOOPMATNV = 419,
+    UCOOPMATNV = 420,
+    SAMPLERCUBEARRAY = 421,
+    SAMPLERCUBEARRAYSHADOW = 422,
+    ISAMPLERCUBEARRAY = 423,
+    USAMPLERCUBEARRAY = 424,
+    SAMPLER1D = 425,
+    SAMPLER1DARRAY = 426,
+    SAMPLER1DARRAYSHADOW = 427,
+    ISAMPLER1D = 428,
+    SAMPLER1DSHADOW = 429,
+    SAMPLER2DRECT = 430,
+    SAMPLER2DRECTSHADOW = 431,
+    ISAMPLER2DRECT = 432,
+    USAMPLER2DRECT = 433,
+    SAMPLERBUFFER = 434,
+    ISAMPLERBUFFER = 435,
+    USAMPLERBUFFER = 436,
+    SAMPLER2DMS = 437,
+    ISAMPLER2DMS = 438,
+    USAMPLER2DMS = 439,
+    SAMPLER2DMSARRAY = 440,
+    ISAMPLER2DMSARRAY = 441,
+    USAMPLER2DMSARRAY = 442,
+    SAMPLEREXTERNALOES = 443,
+    SAMPLEREXTERNAL2DY2YEXT = 444,
+    ISAMPLER1DARRAY = 445,
+    USAMPLER1D = 446,
+    USAMPLER1DARRAY = 447,
+    F16SAMPLER1D = 448,
+    F16SAMPLER2D = 449,
+    F16SAMPLER3D = 450,
+    F16SAMPLER2DRECT = 451,
+    F16SAMPLERCUBE = 452,
+    F16SAMPLER1DARRAY = 453,
+    F16SAMPLER2DARRAY = 454,
+    F16SAMPLERCUBEARRAY = 455,
+    F16SAMPLERBUFFER = 456,
+    F16SAMPLER2DMS = 457,
+    F16SAMPLER2DMSARRAY = 458,
+    F16SAMPLER1DSHADOW = 459,
+    F16SAMPLER2DSHADOW = 460,
+    F16SAMPLER1DARRAYSHADOW = 461,
+    F16SAMPLER2DARRAYSHADOW = 462,
+    F16SAMPLER2DRECTSHADOW = 463,
+    F16SAMPLERCUBESHADOW = 464,
+    F16SAMPLERCUBEARRAYSHADOW = 465,
+    IMAGE1D = 466,
+    IIMAGE1D = 467,
+    UIMAGE1D = 468,
+    IMAGE2D = 469,
+    IIMAGE2D = 470,
+    UIMAGE2D = 471,
+    IMAGE3D = 472,
+    IIMAGE3D = 473,
+    UIMAGE3D = 474,
+    IMAGE2DRECT = 475,
+    IIMAGE2DRECT = 476,
+    UIMAGE2DRECT = 477,
+    IMAGECUBE = 478,
+    IIMAGECUBE = 479,
+    UIMAGECUBE = 480,
+    IMAGEBUFFER = 481,
+    IIMAGEBUFFER = 482,
+    UIMAGEBUFFER = 483,
+    IMAGE1DARRAY = 484,
+    IIMAGE1DARRAY = 485,
+    UIMAGE1DARRAY = 486,
+    IMAGE2DARRAY = 487,
+    IIMAGE2DARRAY = 488,
+    UIMAGE2DARRAY = 489,
+    IMAGECUBEARRAY = 490,
+    IIMAGECUBEARRAY = 491,
+    UIMAGECUBEARRAY = 492,
+    IMAGE2DMS = 493,
+    IIMAGE2DMS = 494,
+    UIMAGE2DMS = 495,
+    IMAGE2DMSARRAY = 496,
+    IIMAGE2DMSARRAY = 497,
+    UIMAGE2DMSARRAY = 498,
+    F16IMAGE1D = 499,
+    F16IMAGE2D = 500,
+    F16IMAGE3D = 501,
+    F16IMAGE2DRECT = 502,
+    F16IMAGECUBE = 503,
+    F16IMAGE1DARRAY = 504,
+    F16IMAGE2DARRAY = 505,
+    F16IMAGECUBEARRAY = 506,
+    F16IMAGEBUFFER = 507,
+    F16IMAGE2DMS = 508,
+    F16IMAGE2DMSARRAY = 509,
+    TEXTURECUBEARRAY = 510,
+    ITEXTURECUBEARRAY = 511,
+    UTEXTURECUBEARRAY = 512,
+    TEXTURE1D = 513,
+    ITEXTURE1D = 514,
+    UTEXTURE1D = 515,
+    TEXTURE1DARRAY = 516,
+    ITEXTURE1DARRAY = 517,
+    UTEXTURE1DARRAY = 518,
+    TEXTURE2DRECT = 519,
+    ITEXTURE2DRECT = 520,
+    UTEXTURE2DRECT = 521,
+    TEXTUREBUFFER = 522,
+    ITEXTUREBUFFER = 523,
+    UTEXTUREBUFFER = 524,
+    TEXTURE2DMS = 525,
+    ITEXTURE2DMS = 526,
+    UTEXTURE2DMS = 527,
+    TEXTURE2DMSARRAY = 528,
+    ITEXTURE2DMSARRAY = 529,
+    UTEXTURE2DMSARRAY = 530,
+    F16TEXTURE1D = 531,
+    F16TEXTURE2D = 532,
+    F16TEXTURE3D = 533,
+    F16TEXTURE2DRECT = 534,
+    F16TEXTURECUBE = 535,
+    F16TEXTURE1DARRAY = 536,
+    F16TEXTURE2DARRAY = 537,
+    F16TEXTURECUBEARRAY = 538,
+    F16TEXTUREBUFFER = 539,
+    F16TEXTURE2DMS = 540,
+    F16TEXTURE2DMSARRAY = 541,
+    SUBPASSINPUT = 542,
+    SUBPASSINPUTMS = 543,
+    ISUBPASSINPUT = 544,
+    ISUBPASSINPUTMS = 545,
+    USUBPASSINPUT = 546,
+    USUBPASSINPUTMS = 547,
+    F16SUBPASSINPUT = 548,
+    F16SUBPASSINPUTMS = 549,
+    LEFT_OP = 550,
+    RIGHT_OP = 551,
+    INC_OP = 552,
+    DEC_OP = 553,
+    LE_OP = 554,
+    GE_OP = 555,
+    EQ_OP = 556,
+    NE_OP = 557,
+    AND_OP = 558,
+    OR_OP = 559,
+    XOR_OP = 560,
+    MUL_ASSIGN = 561,
+    DIV_ASSIGN = 562,
+    ADD_ASSIGN = 563,
+    MOD_ASSIGN = 564,
+    LEFT_ASSIGN = 565,
+    RIGHT_ASSIGN = 566,
+    AND_ASSIGN = 567,
+    XOR_ASSIGN = 568,
+    OR_ASSIGN = 569,
+    SUB_ASSIGN = 570,
+    STRING_LITERAL = 571,
+    LEFT_PAREN = 572,
+    RIGHT_PAREN = 573,
+    LEFT_BRACKET = 574,
+    RIGHT_BRACKET = 575,
+    LEFT_BRACE = 576,
+    RIGHT_BRACE = 577,
+    DOT = 578,
+    COMMA = 579,
+    COLON = 580,
+    EQUAL = 581,
+    SEMICOLON = 582,
+    BANG = 583,
+    DASH = 584,
+    TILDE = 585,
+    PLUS = 586,
+    STAR = 587,
+    SLASH = 588,
+    PERCENT = 589,
+    LEFT_ANGLE = 590,
+    RIGHT_ANGLE = 591,
+    VERTICAL_BAR = 592,
+    CARET = 593,
+    AMPERSAND = 594,
+    QUESTION = 595,
+    INVARIANT = 596,
+    HIGH_PRECISION = 597,
+    MEDIUM_PRECISION = 598,
+    LOW_PRECISION = 599,
+    PRECISION = 600,
+    PACKED = 601,
+    RESOURCE = 602,
+    SUPERP = 603,
+    FLOATCONSTANT = 604,
+    INTCONSTANT = 605,
+    UINTCONSTANT = 606,
+    BOOLCONSTANT = 607,
+    IDENTIFIER = 608,
+    TYPE_NAME = 609,
+    CENTROID = 610,
+    IN = 611,
+    OUT = 612,
+    INOUT = 613,
+    STRUCT = 614,
+    VOID = 615,
+    WHILE = 616,
+    BREAK = 617,
+    CONTINUE = 618,
+    DO = 619,
+    ELSE = 620,
+    FOR = 621,
+    IF = 622,
+    DISCARD = 623,
+    RETURN = 624,
+    SWITCH = 625,
+    CASE = 626,
+    DEFAULT = 627,
+    UNIFORM = 628,
+    SHARED = 629,
+    BUFFER = 630,
+    FLAT = 631,
+    SMOOTH = 632,
+    LAYOUT = 633,
+    DOUBLECONSTANT = 634,
+    INT16CONSTANT = 635,
+    UINT16CONSTANT = 636,
+    FLOAT16CONSTANT = 637,
+    INT32CONSTANT = 638,
+    UINT32CONSTANT = 639,
+    INT64CONSTANT = 640,
+    UINT64CONSTANT = 641,
+    SUBROUTINE = 642,
+    DEMOTE = 643,
+    PAYLOADNV = 644,
+    PAYLOADINNV = 645,
+    HITATTRNV = 646,
+    CALLDATANV = 647,
+    CALLDATAINNV = 648,
+    PAYLOADEXT = 649,
+    PAYLOADINEXT = 650,
+    HITATTREXT = 651,
+    CALLDATAEXT = 652,
+    CALLDATAINEXT = 653,
+    PATCH = 654,
+    SAMPLE = 655,
+    NONUNIFORM = 656,
+    COHERENT = 657,
+    VOLATILE = 658,
+    RESTRICT = 659,
+    READONLY = 660,
+    WRITEONLY = 661,
+    DEVICECOHERENT = 662,
+    QUEUEFAMILYCOHERENT = 663,
+    WORKGROUPCOHERENT = 664,
+    SUBGROUPCOHERENT = 665,
+    NONPRIVATE = 666,
+    SHADERCALLCOHERENT = 667,
+    NOPERSPECTIVE = 668,
+    EXPLICITINTERPAMD = 669,
+    PERVERTEXNV = 670,
+    PERPRIMITIVENV = 671,
+    PERVIEWNV = 672,
+    PERTASKNV = 673,
+    PRECISE = 674
   };
 #endif
 
@@ -534,7 +548,7 @@
 
 union YYSTYPE
 {
-#line 70 "MachineIndependent/glslang.y" /* yacc.c:355  */
+#line 97 "glslang.y" /* yacc.c:355  */
 
     struct {
         glslang::TSourceLoc loc;
@@ -567,9 +581,10 @@
             glslang::TArraySizes* arraySizes;
             glslang::TIdentifierList* identifierList;
         };
+        glslang::TArraySizes* typeParameters;
     } interm;
 
-#line 573 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
+#line 588 "glslang_tab.cpp" /* yacc.c:355  */
 };
 
 typedef union YYSTYPE YYSTYPE;
@@ -581,10 +596,10 @@
 
 int yyparse (glslang::TParseContext* pParseContext);
 
-#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED  */
+#endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED  */
 
 /* Copy the second part of user declarations.  */
-#line 105 "MachineIndependent/glslang.y" /* yacc.c:358  */
+#line 133 "glslang.y" /* yacc.c:358  */
 
 
 /* windows only pragma */
@@ -600,7 +615,7 @@
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
+#line 619 "glslang_tab.cpp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -840,23 +855,23 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  381
+#define YYFINAL  394
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   9294
+#define YYLAST   9550
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  406
+#define YYNTOKENS  420
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  107
+#define YYNNTS  111
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  571
+#define YYNRULES  591
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  712
+#define YYNSTATES  736
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   660
+#define YYMAXUTOK   674
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -931,71 +946,74 @@
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
-     405
+     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
+     415,   416,   417,   418,   419
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   294,   294,   300,   303,   307,   311,   314,   318,   322,
-     326,   330,   334,   337,   341,   345,   348,   356,   359,   362,
-     365,   368,   373,   381,   388,   395,   401,   405,   412,   415,
-     421,   428,   438,   446,   451,   478,   486,   492,   496,   500,
-     520,   521,   522,   523,   529,   530,   535,   540,   549,   550,
-     555,   563,   564,   570,   579,   580,   585,   590,   595,   603,
-     604,   612,   623,   624,   633,   634,   643,   644,   653,   654,
-     662,   663,   671,   672,   680,   681,   681,   699,   700,   716,
-     720,   724,   728,   733,   737,   741,   745,   749,   753,   757,
-     764,   767,   778,   785,   790,   795,   803,   807,   811,   815,
-     820,   825,   834,   834,   845,   849,   856,   863,   866,   873,
-     881,   901,   924,   939,   964,   975,   985,   995,  1005,  1014,
-    1017,  1021,  1025,  1030,  1038,  1043,  1048,  1053,  1058,  1067,
-    1078,  1105,  1114,  1121,  1128,  1139,  1148,  1158,  1170,  1179,
-    1191,  1197,  1200,  1207,  1211,  1215,  1223,  1232,  1235,  1246,
-    1249,  1252,  1256,  1260,  1264,  1268,  1274,  1278,  1290,  1304,
-    1309,  1315,  1321,  1328,  1334,  1339,  1344,  1349,  1359,  1369,
-    1379,  1389,  1398,  1410,  1414,  1419,  1424,  1429,  1434,  1439,
-    1443,  1447,  1451,  1455,  1461,  1470,  1477,  1480,  1488,  1492,
-    1501,  1506,  1514,  1518,  1528,  1532,  1536,  1541,  1546,  1551,
-    1556,  1560,  1565,  1570,  1575,  1580,  1585,  1590,  1595,  1600,
-    1605,  1609,  1614,  1619,  1624,  1630,  1636,  1642,  1648,  1654,
-    1660,  1666,  1672,  1678,  1684,  1690,  1696,  1701,  1706,  1711,
-    1716,  1721,  1726,  1732,  1738,  1744,  1750,  1756,  1762,  1768,
-    1774,  1780,  1786,  1792,  1798,  1804,  1810,  1816,  1822,  1828,
-    1834,  1840,  1846,  1852,  1858,  1864,  1870,  1876,  1882,  1888,
-    1893,  1898,  1903,  1908,  1913,  1918,  1923,  1928,  1933,  1938,
-    1943,  1948,  1954,  1960,  1966,  1972,  1978,  1984,  1990,  1996,
-    2002,  2008,  2014,  2020,  2026,  2032,  2038,  2044,  2050,  2056,
-    2062,  2068,  2074,  2080,  2086,  2092,  2098,  2104,  2110,  2116,
-    2122,  2128,  2134,  2140,  2146,  2152,  2158,  2164,  2170,  2176,
-    2182,  2188,  2194,  2200,  2206,  2212,  2218,  2224,  2230,  2236,
-    2242,  2247,  2252,  2257,  2262,  2267,  2272,  2277,  2282,  2287,
-    2292,  2297,  2302,  2307,  2312,  2320,  2328,  2336,  2344,  2352,
-    2360,  2368,  2376,  2384,  2392,  2400,  2408,  2416,  2421,  2426,
-    2431,  2436,  2441,  2446,  2451,  2456,  2461,  2466,  2471,  2476,
-    2481,  2486,  2491,  2496,  2504,  2512,  2517,  2522,  2527,  2535,
-    2540,  2545,  2550,  2558,  2563,  2568,  2573,  2581,  2586,  2591,
-    2596,  2601,  2606,  2614,  2619,  2627,  2632,  2640,  2645,  2653,
-    2658,  2666,  2671,  2679,  2684,  2692,  2697,  2702,  2707,  2712,
-    2717,  2722,  2727,  2732,  2737,  2742,  2747,  2752,  2757,  2762,
-    2767,  2775,  2780,  2785,  2790,  2798,  2803,  2808,  2813,  2821,
-    2826,  2831,  2836,  2844,  2849,  2854,  2859,  2867,  2872,  2877,
-    2882,  2890,  2895,  2900,  2905,  2913,  2918,  2923,  2928,  2936,
-    2941,  2946,  2951,  2959,  2964,  2969,  2974,  2982,  2987,  2992,
-    2997,  3005,  3010,  3015,  3020,  3028,  3033,  3038,  3043,  3051,
-    3056,  3061,  3066,  3074,  3079,  3084,  3089,  3097,  3102,  3107,
-    3113,  3119,  3125,  3134,  3143,  3149,  3155,  3161,  3167,  3172,
-    3188,  3193,  3198,  3206,  3206,  3217,  3217,  3227,  3230,  3243,
-    3265,  3292,  3296,  3302,  3307,  3318,  3321,  3327,  3336,  3339,
-    3345,  3349,  3350,  3356,  3357,  3358,  3359,  3360,  3361,  3362,
-    3366,  3367,  3371,  3367,  3383,  3384,  3388,  3388,  3395,  3395,
-    3409,  3412,  3420,  3428,  3439,  3440,  3444,  3447,  3453,  3460,
-    3464,  3472,  3476,  3489,  3492,  3498,  3498,  3518,  3521,  3527,
-    3539,  3551,  3554,  3560,  3560,  3575,  3575,  3591,  3591,  3612,
-    3615,  3621,  3624,  3630,  3634,  3641,  3646,  3651,  3658,  3661,
-    3670,  3674,  3683,  3686,  3689,  3697,  3697,  3719,  3725,  3728,
-    3733,  3736
+       0,   357,   357,   363,   366,   371,   374,   377,   381,   385,
+     388,   392,   396,   400,   404,   408,   412,   418,   426,   429,
+     432,   435,   438,   443,   451,   458,   465,   471,   475,   482,
+     485,   491,   498,   508,   516,   521,   549,   558,   564,   568,
+     572,   592,   593,   594,   595,   601,   602,   607,   612,   621,
+     622,   627,   635,   636,   642,   651,   652,   657,   662,   667,
+     675,   676,   685,   697,   698,   707,   708,   717,   718,   727,
+     728,   736,   737,   745,   746,   754,   755,   755,   773,   774,
+     790,   794,   798,   802,   807,   811,   815,   819,   823,   827,
+     831,   838,   841,   852,   859,   864,   869,   876,   880,   884,
+     888,   893,   898,   907,   907,   918,   922,   929,   936,   939,
+     946,   954,   974,   997,  1012,  1037,  1048,  1058,  1068,  1078,
+    1087,  1090,  1094,  1098,  1103,  1111,  1118,  1123,  1128,  1133,
+    1142,  1152,  1179,  1188,  1195,  1203,  1210,  1217,  1225,  1235,
+    1242,  1253,  1259,  1262,  1269,  1273,  1277,  1286,  1296,  1299,
+    1310,  1313,  1316,  1320,  1324,  1329,  1333,  1340,  1344,  1349,
+    1355,  1361,  1368,  1373,  1381,  1387,  1399,  1413,  1419,  1424,
+    1432,  1440,  1448,  1456,  1464,  1472,  1480,  1488,  1495,  1502,
+    1506,  1511,  1516,  1521,  1526,  1531,  1536,  1540,  1544,  1548,
+    1552,  1558,  1569,  1576,  1579,  1588,  1593,  1603,  1608,  1616,
+    1620,  1630,  1633,  1639,  1645,  1652,  1662,  1666,  1670,  1674,
+    1679,  1683,  1688,  1693,  1698,  1703,  1708,  1713,  1718,  1723,
+    1728,  1734,  1740,  1746,  1751,  1756,  1761,  1766,  1771,  1776,
+    1781,  1786,  1791,  1796,  1801,  1807,  1814,  1819,  1824,  1829,
+    1834,  1839,  1844,  1849,  1854,  1859,  1864,  1869,  1877,  1885,
+    1893,  1899,  1905,  1911,  1917,  1923,  1929,  1935,  1941,  1947,
+    1953,  1959,  1965,  1971,  1977,  1983,  1989,  1995,  2001,  2007,
+    2013,  2019,  2025,  2031,  2037,  2043,  2049,  2055,  2061,  2067,
+    2073,  2079,  2085,  2091,  2099,  2107,  2115,  2123,  2131,  2139,
+    2147,  2155,  2163,  2171,  2179,  2187,  2193,  2199,  2205,  2211,
+    2217,  2223,  2229,  2235,  2241,  2247,  2253,  2259,  2265,  2271,
+    2277,  2283,  2289,  2295,  2301,  2307,  2313,  2319,  2325,  2331,
+    2337,  2343,  2349,  2355,  2361,  2367,  2373,  2379,  2385,  2391,
+    2397,  2403,  2407,  2411,  2415,  2420,  2426,  2431,  2436,  2441,
+    2446,  2451,  2456,  2462,  2467,  2472,  2477,  2482,  2487,  2493,
+    2499,  2505,  2511,  2517,  2523,  2529,  2535,  2541,  2547,  2553,
+    2559,  2565,  2571,  2576,  2581,  2586,  2591,  2596,  2601,  2607,
+    2612,  2617,  2622,  2627,  2632,  2637,  2642,  2648,  2653,  2658,
+    2663,  2668,  2673,  2678,  2683,  2688,  2693,  2698,  2703,  2708,
+    2713,  2718,  2724,  2729,  2734,  2740,  2746,  2751,  2756,  2761,
+    2767,  2772,  2777,  2782,  2788,  2793,  2798,  2803,  2809,  2814,
+    2819,  2824,  2830,  2836,  2842,  2848,  2853,  2859,  2865,  2871,
+    2876,  2881,  2886,  2891,  2896,  2902,  2907,  2912,  2917,  2923,
+    2928,  2933,  2938,  2944,  2949,  2954,  2959,  2965,  2970,  2975,
+    2980,  2986,  2991,  2996,  3001,  3007,  3012,  3017,  3022,  3028,
+    3033,  3038,  3043,  3049,  3054,  3059,  3064,  3070,  3075,  3080,
+    3085,  3091,  3096,  3101,  3106,  3112,  3117,  3122,  3127,  3133,
+    3138,  3143,  3148,  3154,  3159,  3164,  3169,  3175,  3180,  3185,
+    3190,  3196,  3201,  3206,  3212,  3218,  3224,  3230,  3237,  3244,
+    3250,  3256,  3262,  3268,  3274,  3280,  3287,  3292,  3308,  3313,
+    3318,  3326,  3326,  3337,  3337,  3347,  3350,  3363,  3385,  3412,
+    3416,  3422,  3427,  3438,  3442,  3448,  3459,  3462,  3469,  3473,
+    3474,  3480,  3481,  3482,  3483,  3484,  3485,  3486,  3488,  3494,
+    3503,  3504,  3508,  3504,  3520,  3521,  3525,  3525,  3532,  3532,
+    3546,  3549,  3557,  3565,  3576,  3577,  3581,  3585,  3592,  3599,
+    3603,  3611,  3615,  3628,  3632,  3639,  3639,  3659,  3662,  3668,
+    3680,  3692,  3696,  3703,  3703,  3718,  3718,  3734,  3734,  3755,
+    3758,  3764,  3767,  3773,  3777,  3784,  3789,  3794,  3801,  3804,
+    3813,  3817,  3826,  3829,  3833,  3842,  3842,  3865,  3871,  3874,
+    3879,  3882
 };
 #endif
 
@@ -1004,95 +1022,99 @@
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
 {
-  "$end", "error", "$undefined", "ATTRIBUTE", "VARYING", "FLOAT16_T",
-  "FLOAT", "FLOAT32_T", "DOUBLE", "FLOAT64_T", "CONST", "BOOL", "INT",
-  "UINT", "INT64_T", "UINT64_T", "INT32_T", "UINT32_T", "INT16_T",
-  "UINT16_T", "INT8_T", "UINT8_T", "BREAK", "CONTINUE", "DO", "ELSE",
-  "FOR", "IF", "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT",
-  "SUBROUTINE", "BVEC2", "BVEC3", "BVEC4", "IVEC2", "IVEC3", "IVEC4",
-  "UVEC2", "UVEC3", "UVEC4", "I64VEC2", "I64VEC3", "I64VEC4", "U64VEC2",
-  "U64VEC3", "U64VEC4", "I32VEC2", "I32VEC3", "I32VEC4", "U32VEC2",
-  "U32VEC3", "U32VEC4", "I16VEC2", "I16VEC3", "I16VEC4", "U16VEC2",
-  "U16VEC3", "U16VEC4", "I8VEC2", "I8VEC3", "I8VEC4", "U8VEC2", "U8VEC3",
-  "U8VEC4", "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", "CENTROID",
-  "IN", "OUT", "INOUT", "UNIFORM", "PATCH", "SAMPLE", "BUFFER", "SHARED",
-  "NONUNIFORM", "PAYLOADNV", "PAYLOADINNV", "HITATTRNV", "CALLDATANV",
-  "CALLDATAINNV", "COHERENT", "VOLATILE", "RESTRICT", "READONLY",
-  "WRITEONLY", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT",
-  "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", "NONPRIVATE", "DVEC2", "DVEC3",
-  "DVEC4", "DMAT2", "DMAT3", "DMAT4", "F16VEC2", "F16VEC3", "F16VEC4",
-  "F16MAT2", "F16MAT3", "F16MAT4", "F32VEC2", "F32VEC3", "F32VEC4",
-  "F32MAT2", "F32MAT3", "F32MAT4", "F64VEC2", "F64VEC3", "F64VEC4",
-  "F64MAT2", "F64MAT3", "F64MAT4", "NOPERSPECTIVE", "FLAT", "SMOOTH",
-  "LAYOUT", "EXPLICITINTERPAMD", "PERVERTEXNV", "PERPRIMITIVENV",
-  "PERVIEWNV", "PERTASKNV", "MAT2X2", "MAT2X3", "MAT2X4", "MAT3X2",
-  "MAT3X3", "MAT3X4", "MAT4X2", "MAT4X3", "MAT4X4", "DMAT2X2", "DMAT2X3",
-  "DMAT2X4", "DMAT3X2", "DMAT3X3", "DMAT3X4", "DMAT4X2", "DMAT4X3",
-  "DMAT4X4", "F16MAT2X2", "F16MAT2X3", "F16MAT2X4", "F16MAT3X2",
-  "F16MAT3X3", "F16MAT3X4", "F16MAT4X2", "F16MAT4X3", "F16MAT4X4",
-  "F32MAT2X2", "F32MAT2X3", "F32MAT2X4", "F32MAT3X2", "F32MAT3X3",
-  "F32MAT3X4", "F32MAT4X2", "F32MAT4X3", "F32MAT4X4", "F64MAT2X2",
-  "F64MAT2X3", "F64MAT2X4", "F64MAT3X2", "F64MAT3X3", "F64MAT3X4",
-  "F64MAT4X2", "F64MAT4X3", "F64MAT4X4", "ATOMIC_UINT", "ACCSTRUCTNV",
-  "SAMPLER1D", "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE", "SAMPLER1DSHADOW",
-  "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW", "SAMPLER1DARRAY",
-  "SAMPLER2DARRAY", "SAMPLER1DARRAYSHADOW", "SAMPLER2DARRAYSHADOW",
-  "ISAMPLER1D", "ISAMPLER2D", "ISAMPLER3D", "ISAMPLERCUBE",
-  "ISAMPLER1DARRAY", "ISAMPLER2DARRAY", "USAMPLER1D", "USAMPLER2D",
-  "USAMPLER3D", "USAMPLERCUBE", "USAMPLER1DARRAY", "USAMPLER2DARRAY",
-  "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW", "ISAMPLER2DRECT",
-  "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER", "USAMPLERBUFFER",
-  "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY",
-  "USAMPLERCUBEARRAY", "SAMPLER2DMS", "ISAMPLER2DMS", "USAMPLER2DMS",
+  "$end", "error", "$undefined", "CONST", "BOOL", "INT", "UINT", "FLOAT",
+  "BVEC2", "BVEC3", "BVEC4", "IVEC2", "IVEC3", "IVEC4", "UVEC2", "UVEC3",
+  "UVEC4", "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", "MAT2X2",
+  "MAT2X3", "MAT2X4", "MAT3X2", "MAT3X3", "MAT3X4", "MAT4X2", "MAT4X3",
+  "MAT4X4", "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE", "SAMPLER2DSHADOW",
+  "SAMPLERCUBESHADOW", "SAMPLER2DARRAY", "SAMPLER2DARRAYSHADOW",
+  "ISAMPLER2D", "ISAMPLER3D", "ISAMPLERCUBE", "ISAMPLER2DARRAY",
+  "USAMPLER2D", "USAMPLER3D", "USAMPLERCUBE", "USAMPLER2DARRAY", "SAMPLER",
+  "SAMPLERSHADOW", "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE",
+  "TEXTURE2DARRAY", "ITEXTURE2D", "ITEXTURE3D", "ITEXTURECUBE",
+  "ITEXTURE2DARRAY", "UTEXTURE2D", "UTEXTURE3D", "UTEXTURECUBE",
+  "UTEXTURE2DARRAY", "ATTRIBUTE", "VARYING", "FLOAT16_T", "FLOAT32_T",
+  "DOUBLE", "FLOAT64_T", "INT64_T", "UINT64_T", "INT32_T", "UINT32_T",
+  "INT16_T", "UINT16_T", "INT8_T", "UINT8_T", "I64VEC2", "I64VEC3",
+  "I64VEC4", "U64VEC2", "U64VEC3", "U64VEC4", "I32VEC2", "I32VEC3",
+  "I32VEC4", "U32VEC2", "U32VEC3", "U32VEC4", "I16VEC2", "I16VEC3",
+  "I16VEC4", "U16VEC2", "U16VEC3", "U16VEC4", "I8VEC2", "I8VEC3", "I8VEC4",
+  "U8VEC2", "U8VEC3", "U8VEC4", "DVEC2", "DVEC3", "DVEC4", "DMAT2",
+  "DMAT3", "DMAT4", "F16VEC2", "F16VEC3", "F16VEC4", "F16MAT2", "F16MAT3",
+  "F16MAT4", "F32VEC2", "F32VEC3", "F32VEC4", "F32MAT2", "F32MAT3",
+  "F32MAT4", "F64VEC2", "F64VEC3", "F64VEC4", "F64MAT2", "F64MAT3",
+  "F64MAT4", "DMAT2X2", "DMAT2X3", "DMAT2X4", "DMAT3X2", "DMAT3X3",
+  "DMAT3X4", "DMAT4X2", "DMAT4X3", "DMAT4X4", "F16MAT2X2", "F16MAT2X3",
+  "F16MAT2X4", "F16MAT3X2", "F16MAT3X3", "F16MAT3X4", "F16MAT4X2",
+  "F16MAT4X3", "F16MAT4X4", "F32MAT2X2", "F32MAT2X3", "F32MAT2X4",
+  "F32MAT3X2", "F32MAT3X3", "F32MAT3X4", "F32MAT4X2", "F32MAT4X3",
+  "F32MAT4X4", "F64MAT2X2", "F64MAT2X3", "F64MAT2X4", "F64MAT3X2",
+  "F64MAT3X3", "F64MAT3X4", "F64MAT4X2", "F64MAT4X3", "F64MAT4X4",
+  "ATOMIC_UINT", "ACCSTRUCTNV", "ACCSTRUCTEXT", "RAYQUERYEXT",
+  "FCOOPMATNV", "ICOOPMATNV", "UCOOPMATNV", "SAMPLERCUBEARRAY",
+  "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY", "USAMPLERCUBEARRAY",
+  "SAMPLER1D", "SAMPLER1DARRAY", "SAMPLER1DARRAYSHADOW", "ISAMPLER1D",
+  "SAMPLER1DSHADOW", "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW",
+  "ISAMPLER2DRECT", "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER",
+  "USAMPLERBUFFER", "SAMPLER2DMS", "ISAMPLER2DMS", "USAMPLER2DMS",
   "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY", "USAMPLER2DMSARRAY",
-  "SAMPLEREXTERNALOES", "F16SAMPLER1D", "F16SAMPLER2D", "F16SAMPLER3D",
-  "F16SAMPLER2DRECT", "F16SAMPLERCUBE", "F16SAMPLER1DARRAY",
-  "F16SAMPLER2DARRAY", "F16SAMPLERCUBEARRAY", "F16SAMPLERBUFFER",
-  "F16SAMPLER2DMS", "F16SAMPLER2DMSARRAY", "F16SAMPLER1DSHADOW",
-  "F16SAMPLER2DSHADOW", "F16SAMPLER1DARRAYSHADOW",
+  "SAMPLEREXTERNALOES", "SAMPLEREXTERNAL2DY2YEXT", "ISAMPLER1DARRAY",
+  "USAMPLER1D", "USAMPLER1DARRAY", "F16SAMPLER1D", "F16SAMPLER2D",
+  "F16SAMPLER3D", "F16SAMPLER2DRECT", "F16SAMPLERCUBE",
+  "F16SAMPLER1DARRAY", "F16SAMPLER2DARRAY", "F16SAMPLERCUBEARRAY",
+  "F16SAMPLERBUFFER", "F16SAMPLER2DMS", "F16SAMPLER2DMSARRAY",
+  "F16SAMPLER1DSHADOW", "F16SAMPLER2DSHADOW", "F16SAMPLER1DARRAYSHADOW",
   "F16SAMPLER2DARRAYSHADOW", "F16SAMPLER2DRECTSHADOW",
-  "F16SAMPLERCUBESHADOW", "F16SAMPLERCUBEARRAYSHADOW", "SAMPLER",
-  "SAMPLERSHADOW", "TEXTURE1D", "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE",
-  "TEXTURE1DARRAY", "TEXTURE2DARRAY", "ITEXTURE1D", "ITEXTURE2D",
-  "ITEXTURE3D", "ITEXTURECUBE", "ITEXTURE1DARRAY", "ITEXTURE2DARRAY",
-  "UTEXTURE1D", "UTEXTURE2D", "UTEXTURE3D", "UTEXTURECUBE",
-  "UTEXTURE1DARRAY", "UTEXTURE2DARRAY", "TEXTURE2DRECT", "ITEXTURE2DRECT",
-  "UTEXTURE2DRECT", "TEXTUREBUFFER", "ITEXTUREBUFFER", "UTEXTUREBUFFER",
-  "TEXTURECUBEARRAY", "ITEXTURECUBEARRAY", "UTEXTURECUBEARRAY",
-  "TEXTURE2DMS", "ITEXTURE2DMS", "UTEXTURE2DMS", "TEXTURE2DMSARRAY",
-  "ITEXTURE2DMSARRAY", "UTEXTURE2DMSARRAY", "F16TEXTURE1D", "F16TEXTURE2D",
-  "F16TEXTURE3D", "F16TEXTURE2DRECT", "F16TEXTURECUBE",
-  "F16TEXTURE1DARRAY", "F16TEXTURE2DARRAY", "F16TEXTURECUBEARRAY",
-  "F16TEXTUREBUFFER", "F16TEXTURE2DMS", "F16TEXTURE2DMSARRAY",
-  "SUBPASSINPUT", "SUBPASSINPUTMS", "ISUBPASSINPUT", "ISUBPASSINPUTMS",
-  "USUBPASSINPUT", "USUBPASSINPUTMS", "F16SUBPASSINPUT",
-  "F16SUBPASSINPUTMS", "IMAGE1D", "IIMAGE1D", "UIMAGE1D", "IMAGE2D",
-  "IIMAGE2D", "UIMAGE2D", "IMAGE3D", "IIMAGE3D", "UIMAGE3D", "IMAGE2DRECT",
-  "IIMAGE2DRECT", "UIMAGE2DRECT", "IMAGECUBE", "IIMAGECUBE", "UIMAGECUBE",
-  "IMAGEBUFFER", "IIMAGEBUFFER", "UIMAGEBUFFER", "IMAGE1DARRAY",
-  "IIMAGE1DARRAY", "UIMAGE1DARRAY", "IMAGE2DARRAY", "IIMAGE2DARRAY",
-  "UIMAGE2DARRAY", "IMAGECUBEARRAY", "IIMAGECUBEARRAY", "UIMAGECUBEARRAY",
-  "IMAGE2DMS", "IIMAGE2DMS", "UIMAGE2DMS", "IMAGE2DMSARRAY",
-  "IIMAGE2DMSARRAY", "UIMAGE2DMSARRAY", "F16IMAGE1D", "F16IMAGE2D",
-  "F16IMAGE3D", "F16IMAGE2DRECT", "F16IMAGECUBE", "F16IMAGE1DARRAY",
-  "F16IMAGE2DARRAY", "F16IMAGECUBEARRAY", "F16IMAGEBUFFER", "F16IMAGE2DMS",
-  "F16IMAGE2DMSARRAY", "STRUCT", "VOID", "WHILE", "IDENTIFIER",
-  "TYPE_NAME", "FLOATCONSTANT", "DOUBLECONSTANT", "INT16CONSTANT",
-  "UINT16CONSTANT", "INT32CONSTANT", "UINT32CONSTANT", "INTCONSTANT",
-  "UINTCONSTANT", "INT64CONSTANT", "UINT64CONSTANT", "BOOLCONSTANT",
-  "FLOAT16CONSTANT", "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP",
+  "F16SAMPLERCUBESHADOW", "F16SAMPLERCUBEARRAYSHADOW", "IMAGE1D",
+  "IIMAGE1D", "UIMAGE1D", "IMAGE2D", "IIMAGE2D", "UIMAGE2D", "IMAGE3D",
+  "IIMAGE3D", "UIMAGE3D", "IMAGE2DRECT", "IIMAGE2DRECT", "UIMAGE2DRECT",
+  "IMAGECUBE", "IIMAGECUBE", "UIMAGECUBE", "IMAGEBUFFER", "IIMAGEBUFFER",
+  "UIMAGEBUFFER", "IMAGE1DARRAY", "IIMAGE1DARRAY", "UIMAGE1DARRAY",
+  "IMAGE2DARRAY", "IIMAGE2DARRAY", "UIMAGE2DARRAY", "IMAGECUBEARRAY",
+  "IIMAGECUBEARRAY", "UIMAGECUBEARRAY", "IMAGE2DMS", "IIMAGE2DMS",
+  "UIMAGE2DMS", "IMAGE2DMSARRAY", "IIMAGE2DMSARRAY", "UIMAGE2DMSARRAY",
+  "F16IMAGE1D", "F16IMAGE2D", "F16IMAGE3D", "F16IMAGE2DRECT",
+  "F16IMAGECUBE", "F16IMAGE1DARRAY", "F16IMAGE2DARRAY",
+  "F16IMAGECUBEARRAY", "F16IMAGEBUFFER", "F16IMAGE2DMS",
+  "F16IMAGE2DMSARRAY", "TEXTURECUBEARRAY", "ITEXTURECUBEARRAY",
+  "UTEXTURECUBEARRAY", "TEXTURE1D", "ITEXTURE1D", "UTEXTURE1D",
+  "TEXTURE1DARRAY", "ITEXTURE1DARRAY", "UTEXTURE1DARRAY", "TEXTURE2DRECT",
+  "ITEXTURE2DRECT", "UTEXTURE2DRECT", "TEXTUREBUFFER", "ITEXTUREBUFFER",
+  "UTEXTUREBUFFER", "TEXTURE2DMS", "ITEXTURE2DMS", "UTEXTURE2DMS",
+  "TEXTURE2DMSARRAY", "ITEXTURE2DMSARRAY", "UTEXTURE2DMSARRAY",
+  "F16TEXTURE1D", "F16TEXTURE2D", "F16TEXTURE3D", "F16TEXTURE2DRECT",
+  "F16TEXTURECUBE", "F16TEXTURE1DARRAY", "F16TEXTURE2DARRAY",
+  "F16TEXTURECUBEARRAY", "F16TEXTUREBUFFER", "F16TEXTURE2DMS",
+  "F16TEXTURE2DMSARRAY", "SUBPASSINPUT", "SUBPASSINPUTMS", "ISUBPASSINPUT",
+  "ISUBPASSINPUTMS", "USUBPASSINPUT", "USUBPASSINPUTMS", "F16SUBPASSINPUT",
+  "F16SUBPASSINPUTMS", "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP",
   "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN",
   "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN",
-  "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "LEFT_PAREN",
-  "RIGHT_PAREN", "LEFT_BRACKET", "RIGHT_BRACKET", "LEFT_BRACE",
-  "RIGHT_BRACE", "DOT", "COMMA", "COLON", "EQUAL", "SEMICOLON", "BANG",
-  "DASH", "TILDE", "PLUS", "STAR", "SLASH", "PERCENT", "LEFT_ANGLE",
-  "RIGHT_ANGLE", "VERTICAL_BAR", "CARET", "AMPERSAND", "QUESTION",
-  "INVARIANT", "PRECISE", "HIGH_PRECISION", "MEDIUM_PRECISION",
-  "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE", "SUPERP", "$accept",
-  "variable_identifier", "primary_expression", "postfix_expression",
-  "integer_expression", "function_call", "function_call_or_method",
-  "function_call_generic", "function_call_header_no_parameters",
+  "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "STRING_LITERAL",
+  "LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACKET", "RIGHT_BRACKET",
+  "LEFT_BRACE", "RIGHT_BRACE", "DOT", "COMMA", "COLON", "EQUAL",
+  "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS", "STAR", "SLASH", "PERCENT",
+  "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR", "CARET", "AMPERSAND",
+  "QUESTION", "INVARIANT", "HIGH_PRECISION", "MEDIUM_PRECISION",
+  "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE", "SUPERP",
+  "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT",
+  "IDENTIFIER", "TYPE_NAME", "CENTROID", "IN", "OUT", "INOUT", "STRUCT",
+  "VOID", "WHILE", "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF",
+  "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", "UNIFORM", "SHARED",
+  "BUFFER", "FLAT", "SMOOTH", "LAYOUT", "DOUBLECONSTANT", "INT16CONSTANT",
+  "UINT16CONSTANT", "FLOAT16CONSTANT", "INT32CONSTANT", "UINT32CONSTANT",
+  "INT64CONSTANT", "UINT64CONSTANT", "SUBROUTINE", "DEMOTE", "PAYLOADNV",
+  "PAYLOADINNV", "HITATTRNV", "CALLDATANV", "CALLDATAINNV", "PAYLOADEXT",
+  "PAYLOADINEXT", "HITATTREXT", "CALLDATAEXT", "CALLDATAINEXT", "PATCH",
+  "SAMPLE", "NONUNIFORM", "COHERENT", "VOLATILE", "RESTRICT", "READONLY",
+  "WRITEONLY", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT",
+  "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", "NONPRIVATE",
+  "SHADERCALLCOHERENT", "NOPERSPECTIVE", "EXPLICITINTERPAMD",
+  "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV", "PERTASKNV", "PRECISE",
+  "$accept", "variable_identifier", "primary_expression",
+  "postfix_expression", "integer_expression", "function_call",
+  "function_call_or_method", "function_call_generic",
+  "function_call_header_no_parameters",
   "function_call_header_with_parameters", "function_call_header",
   "function_identifier", "unary_expression", "unary_operator",
   "multiplicative_expression", "additive_expression", "shift_expression",
@@ -1110,13 +1132,14 @@
   "layout_qualifier", "layout_qualifier_id_list", "layout_qualifier_id",
   "precise_qualifier", "type_qualifier", "single_type_qualifier",
   "storage_qualifier", "non_uniform_qualifier", "type_name_list",
-  "type_specifier", "array_specifier", "type_specifier_nonarray",
-  "precision_qualifier", "struct_specifier", "$@3", "$@4",
-  "struct_declaration_list", "struct_declaration",
+  "type_specifier", "array_specifier", "type_parameter_specifier_opt",
+  "type_parameter_specifier", "type_parameter_specifier_list",
+  "type_specifier_nonarray", "precision_qualifier", "struct_specifier",
+  "$@3", "$@4", "struct_declaration_list", "struct_declaration",
   "struct_declarator_list", "struct_declarator", "initializer",
   "initializer_list", "declaration_statement", "statement",
-  "simple_statement", "compound_statement", "$@5", "$@6",
-  "statement_no_new_scope", "statement_scoped", "$@7", "$@8",
+  "simple_statement", "demote_statement", "compound_statement", "$@5",
+  "$@6", "statement_no_new_scope", "statement_scoped", "$@7", "$@8",
   "compound_statement_no_new_scope", "statement_list",
   "expression_statement", "selection_statement",
   "selection_statement_nonattributed", "selection_rest_statement",
@@ -1175,16 +1198,17 @@
      625,   626,   627,   628,   629,   630,   631,   632,   633,   634,
      635,   636,   637,   638,   639,   640,   641,   642,   643,   644,
      645,   646,   647,   648,   649,   650,   651,   652,   653,   654,
-     655,   656,   657,   658,   659,   660
+     655,   656,   657,   658,   659,   660,   661,   662,   663,   664,
+     665,   666,   667,   668,   669,   670,   671,   672,   673,   674
 };
 # endif
 
-#define YYPACT_NINF -649
+#define YYPACT_NINF -457
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-649)))
+  (!!((Yystate) == (-457)))
 
-#define YYTABLE_NINF -517
+#define YYTABLE_NINF -537
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -1193,78 +1217,80 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    3511,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -326,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -310,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -316,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -256,  -649,  -317,  -357,  -305,  -269,  5906,  -315,  -649,
-    -225,  -649,  -649,  -649,  -649,  4310,  -649,  -649,  -649,  -649,
-    -234,  -649,  -649,   711,  -649,  -649,  -204,   -69,  -222,  -649,
-    8955,  -335,  -649,  -649,  -218,  -649,  5906,  -649,  -649,  -649,
-    5906,  -170,  -169,  -649,  -339,  -303,  -649,  -649,  -649,  6657,
-    -205,  -649,  -649,  -649,  -307,  -649,  -211,  -302,  -649,  -649,
-    5906,  -210,  -649,  -321,  1111,  -649,  -649,  -649,  -649,  -234,
-    -340,  -649,  7040,  -325,  -649,  -166,  -649,  -292,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  8189,  8189,  8189,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -324,  -649,  -649,  -649,  -200,  -298,  8572,  -198,  -649,
-    8189,  -242,  -278,  -314,  -333,  -209,  -219,  -217,  -215,  -180,
-    -181,  -336,  -194,  -649,  -649,  7423,  -649,  -155,  8189,  -649,
-     -69,  5906,  5906,  -154,  4709,  -649,  -649,  -649,  -197,  -195,
-    -649,  -188,  -184,  -193,  7806,  -179,  8189,  -189,  -178,  -182,
-    -177,  -649,  -649,  -267,  -649,  -649,  -252,  -649,  -357,  -176,
-    -173,  -649,  -649,  -649,  -649,  1511,  -649,  -649,  -649,  -649,
-    -649,  -649,  -649,  -649,  -649,   -19,  -205,  7040,  -311,  7040,
-    -649,  -649,  7040,  5906,  -649,  -142,  -649,  -649,  -649,  -293,
-    -649,  -649,  8189,  -136,  -649,  -649,  8189,  -171,  -649,  -649,
-    -649,  8189,  8189,  8189,  8189,  8189,  8189,  8189,  8189,  8189,
-    8189,  8189,  8189,  8189,  8189,  8189,  8189,  8189,  8189,  8189,
-    -649,  -649,  -649,  -172,  -649,  -649,  -649,  -649,  5108,  -154,
-    -234,  -251,  -649,  -649,  -649,  -649,  -649,  1911,  -649,  8189,
-    -649,  -649,  -245,  8189,  -228,  -649,  -649,  -133,  -649,  1911,
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  8189,  8189,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    7040,  -649,  -285,  -649,  5507,  -649,  -649,  -168,  -165,  -649,
-    -649,  -649,  -649,  -649,  -242,  -242,  -278,  -278,  -314,  -314,
-    -314,  -314,  -333,  -333,  -209,  -219,  -217,  -215,  -180,  -181,
-    8189,  -649,  -649,  -241,  -205,  -154,  -649,  -128,  3111,  -290,
-    -649,  -268,  -649,  3911,  -163,  -297,  -649,  1911,  -649,  -649,
-    -649,  -649,  6274,  -649,  -649,  -223,  -649,  -649,  -162,  -649,
-    -649,  3911,  -161,  -649,  -165,  -126,  5906,  -160,  8189,  -159,
-    -133,  -158,  -649,  -649,  8189,  8189,  -649,  -164,  -156,   196,
-    -151,  2711,  -649,  -131,  -135,  2311,  -152,  -649,  -649,  -649,
-    -649,  -254,  8189,  2311,  -161,  -649,  -649,  1911,  7040,  -649,
-    -649,  -649,  -649,  -134,  -165,  -649,  -649,  1911,  -127,  -649,
-    -649,  -649
+    4075,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,   132,  -457,
+    -457,  -457,  -457,  -457,    -1,  -457,  -457,  -457,  -457,  -457,
+    -457,  -301,  -298,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,    11,  -249,    17,    30,  6160,
+      20,  -457,    28,  -457,  -457,  -457,  -457,  4492,  -457,  -457,
+    -457,  -457,    50,  -457,  -457,   739,  -457,  -457,    16,  -457,
+      81,   -29,    69,  -457,  -313,  -457,   111,  -457,  6160,  -457,
+    -457,  -457,  6160,   103,   106,  -457,  -314,  -457,    72,  -457,
+    -457,  8566,   142,  -457,  -457,  -457,   136,  6160,  -457,   144,
+    -457,    53,  -457,  -457,    76,  6974,  -457,  -312,  1156,  -457,
+    -457,  -457,  -457,   142,  -309,  -457,  7372,  -308,  -457,   119,
+    -457,    65,  8566,  8566,  -457,  8566,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,    36,  -457,  -457,  -457,   171,
+      85,  8964,   173,  -457,  8566,  -457,  -457,  -323,   174,  -457,
+    6160,   139,  4909,  -457,  6160,  8566,  -457,   -29,  -457,   141,
+    -457,  -457,   145,    99,    35,    26,    71,   156,   159,   161,
+     196,   195,    23,   181,  7770,  -457,   183,   182,  -457,  -457,
+     186,   179,   180,  -457,   191,   192,   187,  8168,   193,  8566,
+     188,   189,   127,  -457,  -457,    96,  -457,  -249,   200,   201,
+    -457,  -457,  -457,  -457,  -457,  1573,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,   -24,   174,  7372,    13,  7372,
+    -457,  -457,  7372,  6160,  -457,   166,  -457,  -457,  -457,    86,
+    -457,  -457,  8566,   168,  -457,  -457,  8566,   205,  -457,  -457,
+    -457,  8566,  -457,   139,   142,   124,  -457,  -457,  -457,  5326,
+    -457,  -457,  -457,  -457,  8566,  8566,  8566,  8566,  8566,  8566,
+    8566,  8566,  8566,  8566,  8566,  8566,  8566,  8566,  8566,  8566,
+    8566,  8566,  8566,  -457,  -457,  -457,   206,   172,  -457,  1990,
+    -457,  -457,  -457,  1990,  -457,  8566,  -457,  -457,   130,  8566,
+     125,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  8566,  8566,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  7372,  -457,    94,  -457,  5743,  -457,  -457,
+     207,   204,  -457,  -457,  -457,   131,   174,   139,  -457,  -457,
+    -457,  -457,  -457,   145,   145,    99,    99,    35,    35,    35,
+      35,    26,    26,    71,   156,   159,   161,   196,   195,  8566,
+    -457,   212,    60,  -457,  1990,  3658,   169,  3241,    87,  -457,
+      89,  -457,  -457,  -457,  -457,  -457,  6576,  -457,  -457,  -457,
+    -457,   143,  8566,   211,   172,   210,   204,   184,  6160,   217,
+     219,  -457,  -457,  3658,   218,  -457,  -457,  -457,  8566,   220,
+    -457,  -457,  -457,   214,  2407,  8566,  -457,   216,   223,   185,
+     224,  2824,  -457,   225,  -457,  -457,  7372,  -457,  -457,  -457,
+      97,  8566,  2407,   218,  -457,  -457,  1990,  -457,   222,   204,
+    -457,  -457,  1990,   229,  -457,  -457
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1272,110 +1298,114 @@
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,   157,   158,   197,   195,   198,   196,   199,   156,   210,
-     200,   201,   208,   209,   206,   207,   204,   205,   202,   203,
-     183,   226,   227,   228,   229,   230,   231,   244,   245,   246,
-     241,   242,   243,   256,   257,   258,   238,   239,   240,   253,
-     254,   255,   235,   236,   237,   250,   251,   252,   232,   233,
-     234,   247,   248,   249,   211,   212,   213,   259,   260,   261,
-     162,   160,   161,   159,   165,   163,   164,   166,   172,   185,
-     168,   169,   167,   170,   171,   173,   179,   180,   181,   182,
-     174,   175,   176,   177,   178,   214,   215,   216,   271,   272,
-     273,   217,   218,   219,   283,   284,   285,   220,   221,   222,
-     295,   296,   297,   223,   224,   225,   307,   308,   309,   134,
-     133,   132,     0,   135,   136,   137,   138,   139,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   286,   287,   288,   289,
-     290,   291,   292,   293,   294,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   320,   319,   321,   322,   323,   324,   325,
-     326,   327,   328,   329,   330,   331,   347,   348,   349,   350,
-     351,   352,   354,   355,   356,   357,   358,   359,   361,   362,
-     365,   366,   367,   369,   370,   332,   333,   353,   360,   371,
-     373,   374,   375,   377,   378,   469,   334,   335,   336,   363,
-     337,   341,   342,   345,   368,   372,   376,   338,   339,   343,
-     344,   364,   340,   346,   379,   380,   381,   383,   385,   387,
-     389,   391,   395,   396,   397,   398,   399,   400,   402,   403,
-     404,   405,   406,   407,   409,   411,   412,   413,   415,   416,
-     393,   401,   408,   417,   419,   420,   421,   423,   424,   382,
-     384,   386,   410,   388,   390,   392,   394,   414,   418,   422,
-     470,   471,   474,   475,   476,   477,   472,   473,   425,   427,
-     428,   429,   431,   432,   433,   435,   436,   437,   439,   440,
-     441,   443,   444,   445,   447,   448,   449,   451,   452,   453,
-     455,   456,   457,   459,   460,   461,   463,   464,   465,   467,
-     468,   426,   430,   434,   438,   442,   450,   454,   458,   446,
-     462,   466,     0,   194,   479,   564,   131,   146,   480,   481,
-     482,     0,   563,     0,   565,     0,   108,   107,     0,   119,
-     124,   153,   152,   150,   154,     0,   147,   149,   155,   129,
-     188,   151,   478,     0,   560,   562,     0,     0,     0,   485,
-       0,     0,    96,    93,     0,   106,     0,   115,   109,   117,
-       0,   118,     0,    94,   125,     0,    99,   148,   130,     0,
-     189,     1,   561,   186,     0,   145,   143,     0,   141,   483,
-       0,     0,    97,     0,     0,   566,   110,   114,   116,   112,
-     120,   111,     0,   126,   102,     0,   100,     0,     2,    12,
-      13,    10,    11,     4,     5,     6,     7,     8,     9,    15,
-      14,     0,     0,     0,   190,    42,    41,    43,    40,     3,
-      17,    36,    19,    24,    25,     0,     0,    29,     0,    44,
-       0,    48,    51,    54,    59,    62,    64,    66,    68,    70,
-      72,    74,     0,    35,    33,     0,   184,     0,     0,   140,
-       0,     0,     0,     0,     0,   487,    95,    98,     0,     0,
-     545,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     511,   520,   524,    44,    77,    90,     0,   500,     0,   155,
-     129,   503,   522,   502,   501,     0,   504,   505,   526,   506,
-     533,   507,   508,   541,   509,     0,   113,     0,   121,     0,
-     495,   128,     0,     0,   104,     0,   101,    37,    38,     0,
-      21,    22,     0,     0,    27,    26,     0,   194,    30,    32,
-      39,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   157,   210,   208,   209,   207,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   211,   212,   213,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     336,   337,   338,   339,   340,   341,   342,   362,   363,   364,
+     365,   366,   367,   368,   377,   390,   391,   378,   379,   381,
+     380,   382,   383,   384,   385,   386,   387,   388,   389,   165,
+     166,   236,   237,   235,   238,   245,   246,   243,   244,   241,
+     242,   239,   240,   268,   269,   270,   280,   281,   282,   265,
+     266,   267,   277,   278,   279,   262,   263,   264,   274,   275,
+     276,   259,   260,   261,   271,   272,   273,   247,   248,   249,
+     283,   284,   285,   250,   251,   252,   295,   296,   297,   253,
+     254,   255,   307,   308,   309,   256,   257,   258,   319,   320,
+     321,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   310,
+     311,   312,   313,   314,   315,   316,   317,   318,   322,   323,
+     324,   325,   326,   327,   328,   329,   330,   334,   331,   332,
+     333,   493,   494,   495,   346,   347,   370,   373,   335,   344,
+     345,   361,   343,   392,   393,   396,   397,   398,   400,   401,
+     402,   404,   405,   406,   408,   409,   483,   484,   369,   371,
+     372,   348,   349,   350,   394,   351,   355,   356,   359,   399,
+     403,   407,   352,   353,   357,   358,   395,   354,   360,   439,
+     441,   442,   443,   445,   446,   447,   449,   450,   451,   453,
+     454,   455,   457,   458,   459,   461,   462,   463,   465,   466,
+     467,   469,   470,   471,   473,   474,   475,   477,   478,   479,
+     481,   482,   440,   444,   448,   452,   456,   464,   468,   472,
+     460,   476,   480,   374,   375,   376,   410,   419,   421,   415,
+     420,   422,   423,   425,   426,   427,   429,   430,   431,   433,
+     434,   435,   437,   438,   411,   412,   413,   424,   414,   416,
+     417,   418,   428,   432,   436,   485,   486,   489,   490,   491,
+     492,   487,   488,   584,   132,   498,   499,   500,     0,   497,
+     161,   159,   160,   158,     0,   206,   162,   163,   164,   134,
+     133,     0,   190,   171,   173,   169,   175,   177,   172,   174,
+     170,   176,   178,   167,   168,   192,   179,   186,   187,   188,
+     189,   180,   181,   182,   183,   184,   185,   135,   136,   137,
+     138,   139,   140,   147,   583,     0,   585,     0,   109,   108,
+       0,   120,   125,   154,   153,   151,   155,     0,   148,   150,
+     156,   130,   202,   152,   496,     0,   580,   582,     0,   503,
+       0,     0,     0,    97,     0,    94,     0,   107,     0,   116,
+     110,   118,     0,   119,     0,    95,   126,   100,     0,   149,
+     131,     0,   195,   201,     1,   581,     0,     0,   501,   144,
+     146,     0,   142,   193,     0,     0,    98,     0,     0,   586,
+     111,   115,   117,   113,   121,   112,     0,   127,   103,     0,
+     101,     0,     0,     0,     9,     0,    43,    42,    44,    41,
+       5,     6,     7,     8,     2,    16,    14,    15,    17,    10,
+      11,    12,    13,     3,    18,    37,    20,    25,    26,     0,
+       0,    30,     0,   204,     0,    36,    34,     0,   196,    96,
+       0,     0,     0,   505,     0,     0,   141,     0,   191,     0,
+     197,    45,    49,    52,    55,    60,    63,    65,    67,    69,
+      71,    73,    75,     0,     0,    99,     0,   531,   540,   544,
+       0,     0,     0,   565,     0,     0,     0,     0,     0,     0,
+       0,     0,    45,    78,    91,     0,   518,     0,   156,   130,
+     521,   542,   520,   528,   519,     0,   522,   523,   546,   524,
+     553,   525,   526,   561,   527,     0,   114,     0,   122,     0,
+     513,   129,     0,     0,   105,     0,   102,    38,    39,     0,
+      22,    23,     0,     0,    28,    27,     0,   206,    31,    33,
+      40,     0,   203,     0,   511,     0,   509,   504,   506,     0,
+      93,   145,   143,   194,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      75,   191,   192,     0,   187,    92,   144,   142,     0,     0,
-     493,     0,   491,   486,   488,   556,   555,     0,   547,     0,
-     559,   557,     0,     0,     0,   540,   543,     0,   510,     0,
-      80,    81,    83,    82,    85,    86,    87,    88,    89,    84,
-      79,     0,     0,   525,   521,   523,   527,   534,   542,   123,
-       0,   498,     0,   127,     0,   105,    16,     0,    23,    20,
-      31,    45,    46,    47,    50,    49,    52,    53,    57,    58,
-      55,    56,    60,    61,    63,    65,    67,    69,    71,    73,
-       0,   193,   484,     0,   494,     0,   489,     0,     0,     0,
-     558,     0,   539,     0,   570,     0,   568,   512,    78,    91,
-     122,   496,     0,   103,    18,     0,   490,   492,     0,   550,
-     549,   552,   518,   535,   531,     0,     0,     0,     0,     0,
-       0,     0,   497,   499,     0,     0,   551,     0,     0,   530,
-       0,     0,   528,     0,     0,     0,     0,   567,   569,   513,
-      76,     0,   553,     0,   518,   517,   519,   537,     0,   515,
-     544,   514,   571,     0,   554,   548,   529,   538,     0,   532,
-     546,   536
+       0,     0,     0,    76,   198,   199,     0,     0,   530,     0,
+     563,   576,   575,     0,   567,     0,   579,   577,     0,     0,
+       0,   560,   529,    81,    82,    84,    83,    86,    87,    88,
+      89,    90,    85,    80,     0,     0,   545,   541,   543,   547,
+     554,   562,   124,     0,   516,     0,   128,     0,   106,     4,
+       0,    24,    21,    32,   205,     0,   512,     0,   507,   502,
+      46,    47,    48,    51,    50,    53,    54,    58,    59,    56,
+      57,    61,    62,    64,    66,    68,    70,    72,    74,     0,
+     200,   590,     0,   588,   532,     0,     0,     0,     0,   578,
+       0,   559,    79,    92,   123,   514,     0,   104,    19,   508,
+     510,     0,     0,     0,     0,     0,   551,     0,     0,     0,
+       0,   570,   569,   572,   538,   555,   515,   517,     0,     0,
+     587,   589,   533,     0,     0,     0,   571,     0,     0,   550,
+       0,     0,   548,     0,    77,   591,     0,   535,   564,   534,
+       0,   573,     0,   538,   537,   539,   557,   552,     0,   574,
+     568,   549,   558,     0,   566,   556
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,  -649,  -304,  -649,  -373,  -370,  -416,  -379,  -294,  -322,
-    -291,  -295,  -288,  -296,  -649,  -369,  -649,  -393,  -649,  -382,
-    -414,     1,  -649,  -649,  -649,     2,  -649,  -649,  -649,  -114,
-    -109,  -112,  -649,  -649,  -615,  -649,  -649,  -649,  -649,  -196,
-    -649,  -334,  -341,  -649,     6,  -649,     0,  -347,  -649,   -68,
-    -649,  -649,  -649,  -443,  -448,  -287,  -368,  -492,  -649,  -376,
-    -482,  -648,  -415,  -649,  -649,  -427,  -426,  -649,  -649,   -93,
-    -560,  -365,  -649,  -231,  -649,  -386,  -649,  -229,  -649,  -649,
-    -649,  -649,  -227,  -649,  -649,  -649,  -649,  -649,  -649,  -649,
-    -649,   -76,  -649,  -649,  -649,  -649,  -390
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  8868,  -457,   -87,   -84,  -127,   -93,   -33,   -31,
+     -27,   -25,   -28,   -26,  -457,   -86,  -457,  -103,  -457,  -111,
+    -125,     2,  -457,  -457,  -457,     4,  -457,  -457,  -457,   176,
+     194,   178,  -457,  -457,  -337,  -457,  -457,  -457,  -457,    95,
+    -457,   -37,   -46,  -457,     9,  -457,     0,   -63,  -457,  -457,
+    -457,  -457,   263,  -457,  -457,  -457,  -456,  -140,    10,   -73,
+    -211,  -457,  -102,  -198,  -321,  -457,  -144,  -457,  -457,  -155,
+    -154,  -457,  -457,   198,  -274,   -97,  -457,    46,  -457,  -118,
+    -457,    51,  -457,  -457,  -457,  -457,    52,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,   213,  -457,  -457,  -457,  -457,
+    -105
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   429,   430,   431,   607,   432,   433,   434,   435,   436,
-     437,   438,   483,   440,   441,   442,   443,   444,   445,   446,
-     447,   448,   449,   450,   451,   484,   630,   485,   591,   486,
-     556,   487,   333,   513,   407,   488,   335,   336,   337,   367,
-     368,   369,   338,   339,   340,   341,   342,   343,   387,   388,
-     344,   345,   346,   347,   453,   384,   454,   380,   350,   351,
-     352,   461,   390,   464,   465,   561,   562,   511,   602,   491,
-     492,   493,   494,   579,   671,   700,   679,   680,   681,   701,
-     495,   496,   497,   498,   682,   667,   499,   500,   683,   708,
-     501,   502,   503,   643,   567,   638,   661,   677,   678,   504,
-     353,   354,   355,   364,   505,   645,   646
+      -1,   443,   444,   445,   630,   446,   447,   448,   449,   450,
+     451,   452,   502,   454,   472,   473,   474,   475,   476,   477,
+     478,   479,   480,   481,   482,   503,   659,   504,   614,   505,
+     561,   506,   345,   533,   421,   507,   347,   348,   349,   379,
+     380,   381,   350,   351,   352,   353,   354,   355,   401,   402,
+     356,   357,   358,   359,   455,   404,   456,   407,   392,   393,
+     457,   362,   363,   364,   464,   397,   462,   463,   555,   556,
+     531,   625,   510,   511,   512,   513,   514,   589,   685,   718,
+     709,   710,   711,   719,   515,   516,   517,   518,   712,   689,
+     519,   520,   713,   733,   521,   522,   523,   665,   593,   667,
+     693,   707,   708,   524,   365,   366,   367,   376,   525,   662,
+     663
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1383,521 +1413,83 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     349,   332,   334,   370,   377,   470,   348,   471,   472,   510,
-     452,   475,   385,   595,   393,   599,   564,   601,   558,   647,
-     603,   361,   358,   538,   539,   549,   363,   403,   665,   377,
-     520,   521,   370,   696,   401,   379,   379,   699,   536,   537,
-     379,   519,   507,   402,   528,   699,   665,   356,   392,   -34,
-     455,   522,   506,   508,   455,   523,   462,   512,   540,   541,
-     550,   359,   467,   357,   455,   372,   362,   456,   373,   365,
-     604,   600,   459,   457,   404,   439,   525,   405,   460,   669,
-     406,   606,   526,   670,   662,   637,   553,   592,   515,   555,
-     592,   516,   572,   651,   574,   652,   580,   581,   582,   583,
-     584,   585,   586,   587,   588,   589,   663,   534,   650,   535,
-     564,   366,   592,   374,   510,   590,   510,   517,   518,   510,
-     703,   377,   618,   619,   620,   621,   592,   462,   592,   635,
-     462,   593,   636,   610,   383,   592,   530,   707,   640,   635,
-     608,   379,   656,   328,   329,   330,   531,   532,   533,   542,
-     543,   439,   592,   642,   439,   389,   564,   592,   674,   394,
-     673,   614,   615,   622,   623,   595,   616,   617,   399,   400,
-     455,   458,   514,   466,   524,   529,   544,   545,   546,   462,
-     547,   548,   551,   554,   560,   568,   565,   639,   566,   569,
-     570,   641,   575,   577,   573,   576,   605,   -35,   648,   649,
-     -33,   578,   609,   -28,   631,   644,   709,   510,   654,   658,
-     668,   675,   684,   634,   685,   592,  -516,   687,   693,   692,
-     689,   694,   702,   625,   462,   595,   480,   611,   612,   613,
-     439,   439,   439,   439,   439,   439,   439,   439,   439,   439,
-     439,   439,   439,   439,   439,   439,   697,   698,   655,   710,
-     624,   711,   627,   629,   686,   626,   397,   396,   398,   510,
-     628,   664,   659,   360,   557,   695,   705,   657,   706,   386,
-     462,   395,   633,   660,   596,   676,   597,   382,   598,   664,
-     688,   690,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   691,     0,     0,     0,     0,     0,   555,
-       0,     0,     0,     0,     0,   510,     0,     0,     0,   666,
-     704,     0,     0,     0,     0,     0,     0,     0,   478,     0,
-       0,     0,     0,     0,     0,   377,     0,   666,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   371,     0,     0,
-       0,     0,     0,   348,     0,   378,     0,     0,     0,     0,
-       0,   348,     0,   349,   332,   334,     0,     0,     0,   348,
-     391,     0,     0,     0,   439,     0,   371,     0,     0,     0,
-     371,     0,   348,     0,     0,     0,   348,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     463,     0,     0,     0,   490,     0,   348,     0,     0,     0,
-     489,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   463,   559,     0,   463,     0,     0,   348,   348,     0,
-     348,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   490,     0,     0,     0,     0,
-       0,   489,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   463,     0,     0,     0,     0,     0,   348,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   463,     0,
-       0,     0,     0,     0,   348,     0,     0,   490,     0,     0,
-       0,     0,     0,   489,     0,     0,     0,     0,     0,   490,
-       0,     0,     0,     0,     0,   489,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   463,     0,     0,     0,     0,     0,
-     348,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   490,     0,
-       0,     0,     0,   490,   489,     0,     0,   490,     0,   489,
-       0,     0,     0,   489,     0,     0,     0,     0,     0,     0,
-       0,   490,     0,     0,     0,     0,   378,   489,     0,     0,
-       0,     0,   348,     0,     0,     0,     0,     0,     0,     0,
-       0,   490,     0,     0,     0,   490,     0,   489,     0,     0,
-       0,   489,     0,   490,     0,     0,     0,   490,     0,   489,
-       0,     0,     0,   489,     0,     0,     0,   490,     0,     0,
-       0,   381,     0,   489,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,     0,     0,
-     324,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   325,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   326,   327,
-     328,   329,   330,   331,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,   468,   469,   470,     0,   471,   472,   473,
-     474,   475,   476,   477,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,   478,   408,
-     324,   409,   410,   411,   412,   413,   414,   415,   416,   417,
-     418,   419,   420,     0,     0,   421,   422,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   423,     0,   479,     0,   480,   481,
-       0,     0,     0,     0,   482,   425,   426,   427,   428,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   326,   327,
-     328,   329,   330,   331,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,   468,   469,   470,     0,   471,   472,   473,
-     474,   475,   476,   477,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,   478,   408,
-     324,   409,   410,   411,   412,   413,   414,   415,   416,   417,
-     418,   419,   420,     0,     0,   421,   422,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   423,     0,   479,     0,   480,   594,
-       0,     0,     0,     0,   482,   425,   426,   427,   428,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   326,   327,
-     328,   329,   330,   331,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,   468,   469,   470,     0,   471,   472,   473,
-     474,   475,   476,   477,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,   478,   408,
-     324,   409,   410,   411,   412,   413,   414,   415,   416,   417,
-     418,   419,   420,     0,     0,   421,   422,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   423,     0,   479,     0,   480,     0,
-       0,     0,     0,     0,   482,   425,   426,   427,   428,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   326,   327,
-     328,   329,   330,   331,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,   468,   469,   470,     0,   471,   472,   473,
-     474,   475,   476,   477,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,   478,   408,
-     324,   409,   410,   411,   412,   413,   414,   415,   416,   417,
-     418,   419,   420,     0,     0,   421,   422,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   423,     0,   479,     0,   394,     0,
-       0,     0,     0,     0,   482,   425,   426,   427,   428,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   326,   327,
-     328,   329,   330,   331,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,   468,   469,   470,     0,   471,   472,   473,
-     474,   475,   476,   477,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,   478,   408,
-     324,   409,   410,   411,   412,   413,   414,   415,   416,   417,
-     418,   419,   420,     0,     0,   421,   422,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   423,     0,   479,     0,     0,     0,
-       0,     0,     0,     0,   482,   425,   426,   427,   428,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   326,   327,
-     328,   329,   330,   331,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,     0,   408,
-     324,   409,   410,   411,   412,   413,   414,   415,   416,   417,
-     418,   419,   420,     0,     0,   421,   422,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   423,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   482,   425,   426,   427,   428,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   326,   327,
-     328,   329,   330,   331,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,     0,     0,
-     324,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   325,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   326,   327,
-     328,   329,   330,   331,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,     0,   408,
-     324,   409,   410,   411,   412,   413,   414,   415,   416,   417,
-     418,   419,   420,     0,     0,   421,   422,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   423,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   425,   426,   427,   428,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   326,   327,
-     328,   329,   330,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,     0,   375,   324,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   376,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   326,   327,   328,
-     329,   330,     1,     2,     3,     4,     5,     6,     7,     8,
+     361,   551,   344,   415,   346,   405,   405,   484,   559,   360,
+     405,   484,   416,   552,   406,   485,   371,   527,   532,   372,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,   627,   375,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   389,   382,   530,   539,   664,   622,   618,   624,   483,
+     369,   626,   558,   417,   399,   571,   572,   582,   687,   458,
+     569,   570,   484,   540,   541,   377,   389,   490,   373,   623,
+     493,   382,   494,   495,   384,   400,   498,   385,   548,   383,
+     526,   528,   370,   -35,   378,   542,   687,   390,   360,   543,
+     460,   573,   574,   583,   374,   361,   360,   344,   396,   346,
+     299,   466,   575,   576,   360,   304,   305,   467,   383,   560,
+     683,   386,   383,   717,   684,   391,   598,   360,   600,   535,
+     725,   360,   536,   418,   468,   666,   419,   461,   586,   420,
+     469,   717,   398,   545,   629,   694,   360,   695,   509,   546,
+     615,   615,   674,   615,   389,   728,   675,   508,   676,   558,
+     615,   615,   403,   616,   530,   460,   530,   460,   567,   530,
+     568,   631,   408,   603,   604,   605,   606,   607,   608,   609,
+     610,   611,   612,   633,   647,   648,   649,   650,   637,   615,
+     671,   638,   732,   613,   615,   637,   413,   669,   679,   414,
+     553,   405,   461,   459,   461,   697,   618,   615,   698,   360,
+     465,   360,   534,   360,   295,   296,   297,   564,   565,   566,
+     643,   644,   651,   652,   668,   645,   646,   558,   670,   544,
+     549,   636,   554,   484,   563,   577,   460,   578,   579,   580,
+     581,   584,   587,   590,   588,   727,   591,   592,   594,   595,
+     599,   672,   673,   601,   596,   509,   602,   -36,   -34,   628,
+     530,   632,   460,   -29,   508,   661,   660,   678,   615,   682,
+     690,   700,   702,   461,   618,   704,   705,   703,   715,  -536,
+     716,   722,   360,   721,   653,   487,   726,   654,   681,   734,
+     723,   735,   655,   657,   686,   656,   658,   699,   411,   461,
+     412,   368,   562,   635,   680,   691,   724,   730,   360,   731,
+     692,   619,   410,   530,   409,   706,   620,   621,   395,   701,
+       0,     0,   686,     0,     0,     0,     0,     0,     0,   509,
+     460,     0,     0,   509,   720,   714,   560,     0,   508,     0,
+       0,     0,   508,     0,     0,     0,     0,     0,     0,     0,
+     729,     0,     0,   530,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   461,   688,     0,
+       0,     0,     0,     0,     0,     0,   360,     0,     0,     0,
+       0,     0,   389,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   688,     0,     0,     0,
+       0,     0,     0,     0,   509,   509,     0,   509,     0,     0,
+       0,     0,     0,   508,   508,     0,   508,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   390,     0,
+       0,     0,     0,   509,     0,     0,     0,   360,     0,     0,
+       0,     0,   508,     0,   509,     0,     0,     0,     0,     0,
+       0,   509,     0,   508,     0,     0,     0,     0,     0,     0,
+     508,     0,   509,     0,     0,     0,   509,     0,     0,     0,
+       0,   508,   509,     0,     0,   508,     0,     0,     0,   394,
+       0,   508,     1,     2,     3,     4,     5,     6,     7,     8,
        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
-     318,   319,   320,   321,   322,   323,     0,     0,   324,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   563,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   326,   327,   328,   329,
-     330,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
       39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
@@ -1924,19 +1516,271 @@
      259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
      269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
      279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,     0,     0,   324,     0,     0,
+     289,   290,   291,   292,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   632,     0,     0,     0,
+     294,   295,   296,   297,   298,     0,     0,     0,     0,     0,
+       0,     0,     0,   299,   300,   301,   302,   303,   304,   305,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   326,   327,   328,   329,   330,
+       0,     0,   306,   307,   308,   309,   310,   311,     0,     0,
+       0,     0,     0,     0,     0,     0,   312,     0,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,     0,     0,   422,   423,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   424,   425,     0,   486,     0,   487,   488,     0,
+       0,     0,     0,   489,   426,   427,   428,   429,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   294,   295,   296,
+     297,   298,     0,     0,     0,   430,   431,   432,   433,   434,
+     299,   300,   301,   302,   303,   304,   305,   490,   491,   492,
+     493,     0,   494,   495,   496,   497,   498,   499,   500,   306,
+     307,   308,   309,   310,   311,   435,   436,   437,   438,   439,
+     440,   441,   442,   312,   501,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
+     328,   329,   330,   331,   332,   333,   334,   335,   336,   337,
+     338,   339,   340,   341,   342,   343,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,     0,     0,
+     422,   423,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   424,
+     425,     0,   486,     0,   487,   617,     0,     0,     0,     0,
+     489,   426,   427,   428,   429,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   294,   295,   296,   297,   298,     0,
+       0,     0,   430,   431,   432,   433,   434,   299,   300,   301,
+     302,   303,   304,   305,   490,   491,   492,   493,     0,   494,
+     495,   496,   497,   498,   499,   500,   306,   307,   308,   309,
+     310,   311,   435,   436,   437,   438,   439,   440,   441,   442,
+     312,   501,   313,   314,   315,   316,   317,   318,   319,   320,
+     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   334,   335,   336,   337,   338,   339,   340,
+     341,   342,   343,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,     0,     0,   422,   423,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   424,   425,     0,   486,
+       0,   487,     0,     0,     0,     0,     0,   489,   426,   427,
+     428,   429,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   294,   295,   296,   297,   298,     0,     0,     0,   430,
+     431,   432,   433,   434,   299,   300,   301,   302,   303,   304,
+     305,   490,   491,   492,   493,     0,   494,   495,   496,   497,
+     498,   499,   500,   306,   307,   308,   309,   310,   311,   435,
+     436,   437,   438,   439,   440,   441,   442,   312,   501,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
+     334,   335,   336,   337,   338,   339,   340,   341,   342,   343,
        1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,     0,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,     0,     0,   422,   423,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   424,   425,     0,   486,     0,   408,     0,
+       0,     0,     0,     0,   489,   426,   427,   428,   429,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   294,   295,
+     296,   297,   298,     0,     0,     0,   430,   431,   432,   433,
+     434,   299,   300,   301,   302,   303,   304,   305,   490,   491,
+     492,   493,     0,   494,   495,   496,   497,   498,   499,   500,
+     306,   307,   308,   309,   310,   311,   435,   436,   437,   438,
+     439,   440,   441,   442,   312,   501,   313,   314,   315,   316,
+     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
+     327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
+     337,   338,   339,   340,   341,   342,   343,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,     0,
+       0,   422,   423,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     424,   425,     0,   486,     0,     0,     0,     0,     0,     0,
+       0,   489,   426,   427,   428,   429,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   294,   295,   296,   297,   298,
+       0,     0,     0,   430,   431,   432,   433,   434,   299,   300,
+     301,   302,   303,   304,   305,   490,   491,   492,   493,     0,
+     494,   495,   496,   497,   498,   499,   500,   306,   307,   308,
+     309,   310,   311,   435,   436,   437,   438,   439,   440,   441,
+     442,   312,   501,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
+     330,   331,   332,   333,   334,   335,   336,   337,   338,   339,
+     340,   341,   342,   343,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,     0,     0,   422,   423,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   424,   425,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   489,   426,
+     427,   428,   429,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   294,   295,   296,   297,   298,     0,     0,     0,
+     430,   431,   432,   433,   434,   299,   300,   301,   302,   303,
+     304,   305,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   306,   307,   308,   309,   310,   311,
+     435,   436,   437,   438,   439,   440,   441,   442,   312,     0,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,   335,   336,   337,   338,   339,   340,   341,   342,
+     343,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
@@ -1964,913 +1808,22 @@
      260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
      270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
      280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
-     320,   321,   322,   323,     0,     0,   324,     0,     0,     0,
+     290,   291,   292,     0,     0,   422,   423,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   424,   425,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   426,   427,   428,   429,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
+     295,   296,   297,     0,     0,     0,     0,   430,   431,   432,
+     433,   434,   299,   300,   301,   302,   303,   304,   305,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   653,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   326,   327,   328,   329,   330,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,     0,     0,   324,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     3,
-       4,     5,     6,     7,     0,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,     0,     0,     0,     0,
-       0,     0,     0,   326,   327,   328,   329,   330,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    69,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,     0,   408,   324,   409,   410,   411,   412,   413,   414,
-     415,   416,   417,   418,   419,   420,     0,     0,   421,   422,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   423,     0,     0,
-       0,   509,   672,     0,     0,     0,     0,     0,   425,   426,
-     427,   428,     3,     4,     5,     6,     7,     0,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    69,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
-     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
-     320,   321,   322,   323,     0,   408,   324,   409,   410,   411,
-     412,   413,   414,   415,   416,   417,   418,   419,   420,     0,
-       0,   421,   422,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     423,     0,     0,   424,     0,     0,     0,     0,     0,     0,
-       0,   425,   426,   427,   428,     3,     4,     5,     6,     7,
-       0,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    69,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,     0,   408,   324,
-     409,   410,   411,   412,   413,   414,   415,   416,   417,   418,
-     419,   420,     0,     0,   421,   422,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   423,     0,     0,     0,   509,     0,     0,
-       0,     0,     0,     0,   425,   426,   427,   428,     3,     4,
-       5,     6,     7,     0,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    69,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-       0,   408,   324,   409,   410,   411,   412,   413,   414,   415,
-     416,   417,   418,   419,   420,     0,     0,   421,   422,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   423,     0,     0,   552,
-       0,     0,     0,     0,     0,     0,     0,   425,   426,   427,
-     428,     3,     4,     5,     6,     7,     0,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    69,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,     0,   408,   324,   409,   410,   411,   412,
-     413,   414,   415,   416,   417,   418,   419,   420,     0,     0,
-     421,   422,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   423,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   571,
-     425,   426,   427,   428,     3,     4,     5,     6,     7,     0,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    69,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
-     318,   319,   320,   321,   322,   323,     0,   408,   324,   409,
-     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
-     420,     0,     0,   421,   422,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   423,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   425,   426,   427,   428,     3,     4,     5,
-       6,     7,     0,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    69,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   527,     0,
-     408,   324,   409,   410,   411,   412,   413,   414,   415,   416,
-     417,   418,   419,   420,     0,     0,   421,   422,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   423,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   425,   426,   427,   428,
-       3,     4,     5,     6,     7,     0,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
-     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
-     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
-     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
-     322,   323,     0,     0,   324
-};
-
-static const yytype_int16 yycheck[] =
-{
-       0,     0,     0,   337,   345,    24,     0,    26,    27,   402,
-     379,    30,    81,   495,   361,   507,   464,   509,   461,   579,
-     512,   338,   338,   356,   357,   361,   383,   374,   643,   370,
-     354,   355,   366,   681,   373,   375,   375,   685,   352,   353,
-     375,   423,   382,   382,   437,   693,   661,   373,   383,   373,
-     375,   375,   399,   400,   375,   379,   390,   382,   391,   392,
-     396,   377,   383,   373,   375,   380,   383,   374,   383,   374,
-     513,   382,   374,   380,   377,   379,   374,   380,   380,   376,
-     383,   374,   380,   380,   374,   567,   455,   380,   380,   458,
-     380,   383,   474,   378,   476,   380,   363,   364,   365,   366,
-     367,   368,   369,   370,   371,   372,   374,   385,   600,   387,
-     558,   380,   380,   338,   507,   382,   509,   421,   422,   512,
-     374,   462,   538,   539,   540,   541,   380,   461,   380,   380,
-     464,   383,   383,   526,   338,   380,   440,   697,   383,   380,
-     522,   375,   383,   399,   400,   401,   388,   389,   390,   358,
-     359,   455,   380,   381,   458,   377,   604,   380,   381,   377,
-     652,   534,   535,   542,   543,   647,   536,   537,   338,   338,
-     375,   382,   338,   383,   374,   373,   395,   394,   393,   513,
-     360,   362,   376,   338,   338,   373,   383,   569,   383,   373,
-     383,   573,   381,   375,   373,   373,   338,   373,   591,   592,
-     373,   378,   338,   374,   376,   338,   698,   600,   376,   337,
-     373,   373,   338,   560,   374,   380,   377,   376,   374,   383,
-     378,    25,   374,   545,   558,   707,   377,   531,   532,   533,
-     534,   535,   536,   537,   538,   539,   540,   541,   542,   543,
-     544,   545,   546,   547,   548,   549,   377,   382,   630,   383,
-     544,   378,   547,   549,   668,   546,   370,   366,   370,   652,
-     548,   643,   638,   331,   460,   680,   693,   635,   694,   338,
-     604,   364,   559,   638,   505,   661,   505,   353,   505,   661,
-     670,   674,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   675,    -1,    -1,    -1,    -1,    -1,   668,
-      -1,    -1,    -1,    -1,    -1,   698,    -1,    -1,    -1,   643,
-     692,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   337,    -1,
-      -1,    -1,    -1,    -1,    -1,   666,    -1,   661,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   337,    -1,    -1,
-      -1,    -1,    -1,   337,    -1,   345,    -1,    -1,    -1,    -1,
-      -1,   345,    -1,   353,   353,   353,    -1,    -1,    -1,   353,
-     360,    -1,    -1,    -1,   668,    -1,   366,    -1,    -1,    -1,
-     370,    -1,   366,    -1,    -1,    -1,   370,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     390,    -1,    -1,    -1,   394,    -1,   390,    -1,    -1,    -1,
-     394,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   461,   462,    -1,   464,    -1,    -1,   461,   462,    -1,
-     464,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   495,    -1,    -1,    -1,    -1,
-      -1,   495,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   513,    -1,    -1,    -1,    -1,    -1,   513,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   558,    -1,
-      -1,    -1,    -1,    -1,   558,    -1,    -1,   567,    -1,    -1,
-      -1,    -1,    -1,   567,    -1,    -1,    -1,    -1,    -1,   579,
-      -1,    -1,    -1,    -1,    -1,   579,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   604,    -1,    -1,    -1,    -1,    -1,
-     604,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   638,    -1,
-      -1,    -1,    -1,   643,   638,    -1,    -1,   647,    -1,   643,
-      -1,    -1,    -1,   647,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   661,    -1,    -1,    -1,    -1,   666,   661,    -1,    -1,
-      -1,    -1,   666,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   681,    -1,    -1,    -1,   685,    -1,   681,    -1,    -1,
-      -1,   685,    -1,   693,    -1,    -1,    -1,   697,    -1,   693,
-      -1,    -1,    -1,   697,    -1,    -1,    -1,   707,    -1,    -1,
-      -1,     0,    -1,   707,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,    -1,    -1,
-     339,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   383,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   397,   398,
-     399,   400,   401,   402,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,   337,   338,
-     339,   340,   341,   342,   343,   344,   345,   346,   347,   348,
-     349,   350,   351,    -1,    -1,   354,   355,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   373,    -1,   375,    -1,   377,   378,
-      -1,    -1,    -1,    -1,   383,   384,   385,   386,   387,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   397,   398,
-     399,   400,   401,   402,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,   337,   338,
-     339,   340,   341,   342,   343,   344,   345,   346,   347,   348,
-     349,   350,   351,    -1,    -1,   354,   355,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   373,    -1,   375,    -1,   377,   378,
-      -1,    -1,    -1,    -1,   383,   384,   385,   386,   387,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   397,   398,
-     399,   400,   401,   402,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,   337,   338,
-     339,   340,   341,   342,   343,   344,   345,   346,   347,   348,
-     349,   350,   351,    -1,    -1,   354,   355,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   373,    -1,   375,    -1,   377,    -1,
-      -1,    -1,    -1,    -1,   383,   384,   385,   386,   387,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   397,   398,
-     399,   400,   401,   402,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,   337,   338,
-     339,   340,   341,   342,   343,   344,   345,   346,   347,   348,
-     349,   350,   351,    -1,    -1,   354,   355,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   373,    -1,   375,    -1,   377,    -1,
-      -1,    -1,    -1,    -1,   383,   384,   385,   386,   387,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   397,   398,
-     399,   400,   401,   402,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,   337,   338,
-     339,   340,   341,   342,   343,   344,   345,   346,   347,   348,
-     349,   350,   351,    -1,    -1,   354,   355,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   373,    -1,   375,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   383,   384,   385,   386,   387,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   397,   398,
-     399,   400,   401,   402,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,    -1,   338,
-     339,   340,   341,   342,   343,   344,   345,   346,   347,   348,
-     349,   350,   351,    -1,    -1,   354,   355,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   373,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   383,   384,   385,   386,   387,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   397,   398,
-     399,   400,   401,   402,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,    -1,    -1,
-     339,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   383,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   397,   398,
-     399,   400,   401,   402,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,    -1,   338,
-     339,   340,   341,   342,   343,   344,   345,   346,   347,   348,
-     349,   350,   351,    -1,    -1,   354,   355,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   373,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   384,   385,   386,   387,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   397,   398,
-     399,   400,   401,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
-     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
-     320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     330,   331,   332,   333,   334,   335,   336,    -1,   338,   339,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   383,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   397,   398,   399,
-     400,   401,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
-     331,   332,   333,   334,   335,   336,    -1,    -1,   339,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   378,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   397,   398,   399,   400,
-     401,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
-     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
-     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
-     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
-     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
-     332,   333,   334,   335,   336,    -1,    -1,   339,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   378,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   397,   398,   399,   400,   401,
+       0,   306,   307,   308,   309,   310,   311,   435,   436,   437,
+     438,   439,   440,   441,   442,   312,     0,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     326,   327,   328,   329,   330,   331,   332,   333,   334,   335,
+     336,   337,   338,   339,   340,   341,   342,   343,     1,     2,
        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
@@ -2897,20 +1850,648 @@
      263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
      273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
      283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
-     333,   334,   335,   336,    -1,    -1,   339,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   378,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   397,   398,   399,   400,   401,     3,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   293,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   294,   295,   296,   297,
+     298,     0,     0,     0,     0,     0,     0,     0,     0,   299,
+     300,   301,   302,   303,   304,   305,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   306,   307,
+     308,   309,   310,   311,     0,     0,     0,     0,     0,     0,
+       0,     0,   312,     0,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,   332,   333,   334,   335,   336,   337,   338,
+     339,   340,   341,   342,   343,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   387,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   294,   295,   296,   297,     0,     0,     0,
+       0,     0,     0,     0,     0,   388,   299,   300,   301,   302,
+     303,   304,   305,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   306,   307,   308,   309,   310,
+     311,     0,     0,     0,     0,     0,     0,     0,     0,   312,
+       0,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+     332,   333,   334,   335,   336,   337,   338,   339,   340,   341,
+     342,   343,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   557,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     294,   295,   296,   297,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   299,   300,   301,   302,   303,   304,   305,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   306,   307,   308,   309,   310,   311,     0,     0,
+       0,     0,     0,     0,     0,     0,   312,     0,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   639,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   294,   295,   296,
+     297,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     299,   300,   301,   302,   303,   304,   305,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   306,
+     307,   308,   309,   310,   311,     0,     0,     0,     0,     0,
+       0,     0,     0,   312,     0,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
+     328,   329,   330,   331,   332,   333,   334,   335,   336,   337,
+     338,   339,   340,   341,   342,   343,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   677,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   294,   295,   296,   297,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   299,   300,   301,
+     302,   303,   304,   305,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   306,   307,   308,   309,
+     310,   311,     0,     0,     0,     0,     0,     0,     0,     0,
+     312,     0,   313,   314,   315,   316,   317,   318,   319,   320,
+     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   334,   335,   336,   337,   338,   339,   340,
+     341,   342,   343,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   294,   295,   296,   297,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   299,   300,   301,   302,   303,   304,
+     305,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   306,   307,   308,   309,   310,   311,     0,
+       0,     0,     0,     0,     0,     0,     0,   312,     0,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
+     334,   335,   336,   337,   338,   339,   340,   341,   342,   343,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,     0,     0,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,     0,     0,   422,   423,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   424,   425,     0,     0,     0,   529,   696,     0,
+       0,     0,     0,     0,   426,   427,   428,   429,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   430,   431,   432,   433,   434,
+     299,     0,     0,     0,     0,   304,   305,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   435,   436,   437,   438,   439,
+     440,   441,   442,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   325,     2,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,     0,     0,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,     0,
+       0,   422,   423,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     424,   425,     0,     0,   470,     0,     0,     0,     0,     0,
+       0,     0,   426,   427,   428,   429,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   430,   431,   432,   433,   434,   299,     0,
+       0,     0,     0,   304,   305,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   435,   436,   437,   438,   439,   440,   441,
+     442,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   325,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,     0,     0,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,     0,     0,   422,
+     423,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   424,   425,
+       0,     0,     0,   529,     0,     0,     0,     0,     0,     0,
+     426,   427,   428,   429,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   430,   431,   432,   433,   434,   299,     0,     0,     0,
+       0,   304,   305,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   435,   436,   437,   438,   439,   440,   441,   442,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   325,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,     0,     0,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,     0,     0,   422,   423,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   424,   425,     0,     0,
+     585,     0,     0,     0,     0,     0,     0,     0,   426,   427,
+     428,   429,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   430,
+     431,   432,   433,   434,   299,     0,     0,     0,     0,   304,
+     305,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   435,
+     436,   437,   438,   439,   440,   441,   442,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   325,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,     0,
+       0,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,     0,     0,   422,   423,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   424,   425,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   597,   426,   427,   428,   429,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   430,   431,   432,
+     433,   434,   299,     0,     0,     0,     0,   304,   305,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   435,   436,   437,
+     438,   439,   440,   441,   442,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   325,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,     0,     0,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,     0,     0,   422,   423,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   424,   425,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   426,   427,   428,   429,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   430,   431,   432,   433,   434,
+     299,     0,     0,     0,     0,   304,   305,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   435,   436,   437,   438,   439,
+     440,   441,   442,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   325,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,     0,     0,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   453,
+       0,   422,   423,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   471,     0,     0,     0,     0,     0,     0,
+     424,   425,     0,     0,     0,     0,     0,     0,     0,     0,
+     537,   538,   426,   427,   428,   429,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   430,   431,   432,   433,   434,   299,     0,
+       0,     0,   550,   304,   547,     0,     0,     0,     0,     0,
+       0,     0,     0,   471,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   435,   436,   437,   438,   439,   440,   441,
+     442,     0,   471,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   325,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   634,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   640,   641,   642,   471,   471,   471,   471,   471,
+     471,   471,   471,   471,   471,   471,   471,   471,   471,   471,
+     471,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     471
+};
+
+static const yytype_int16 yycheck[] =
+{
+       0,   324,     0,   317,     0,   319,   319,   319,   464,     0,
+     319,   319,   326,   336,   327,   327,   317,   326,   326,   317,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,   533,   327,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   357,   349,   416,   425,   589,   527,   515,   529,   405,
+     321,   532,   462,   386,   353,   299,   300,   304,   665,   392,
+     295,   296,   319,   297,   298,   318,   382,   361,   327,   326,
+     364,   378,   366,   367,   324,   374,   370,   327,   451,   349,
+     413,   414,   353,   317,   324,   319,   693,   357,   349,   323,
+     397,   335,   336,   340,   353,   365,   357,   365,   368,   365,
+     354,   318,   301,   302,   365,   359,   360,   324,   378,   465,
+     320,   353,   382,   704,   324,   335,   497,   378,   499,   324,
+     711,   382,   327,   321,   318,   593,   324,   397,   484,   327,
+     324,   722,   321,   318,   318,   318,   397,   318,   408,   324,
+     324,   324,   623,   324,   460,   318,   322,   408,   324,   559,
+     324,   324,   353,   327,   527,   462,   529,   464,   329,   532,
+     331,   542,   321,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   546,   571,   572,   573,   574,   324,   324,
+     325,   327,   726,   326,   324,   324,   353,   327,   327,   353,
+     460,   319,   462,   327,   464,   676,   664,   324,   325,   460,
+     326,   462,   353,   464,   342,   343,   344,   332,   333,   334,
+     567,   568,   575,   576,   595,   569,   570,   627,   599,   318,
+     317,   554,   353,   319,   353,   339,   533,   338,   337,   303,
+     305,   320,   319,   317,   322,   716,   327,   327,   317,   317,
+     317,   614,   615,   325,   327,   515,   327,   317,   317,   353,
+     623,   353,   559,   318,   515,   353,   320,   320,   324,   317,
+     361,   320,   322,   533,   732,   318,   317,   353,   318,   321,
+     326,   318,   533,   327,   577,   321,   321,   578,   659,   327,
+     365,   322,   579,   581,   665,   580,   582,   682,   382,   559,
+     382,   298,   467,   553,   637,   667,   710,   722,   559,   723,
+     667,   525,   378,   676,   376,   693,   525,   525,   365,   684,
+      -1,    -1,   693,    -1,    -1,    -1,    -1,    -1,    -1,   589,
+     627,    -1,    -1,   593,   705,   698,   682,    -1,   589,    -1,
+      -1,    -1,   593,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     721,    -1,    -1,   716,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   627,   665,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   627,    -1,    -1,    -1,
+      -1,    -1,   688,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   693,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   664,   665,    -1,   667,    -1,    -1,
+      -1,    -1,    -1,   664,   665,    -1,   667,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   688,    -1,
+      -1,    -1,    -1,   693,    -1,    -1,    -1,   688,    -1,    -1,
+      -1,    -1,   693,    -1,   704,    -1,    -1,    -1,    -1,    -1,
+      -1,   711,    -1,   704,    -1,    -1,    -1,    -1,    -1,    -1,
+     711,    -1,   722,    -1,    -1,    -1,   726,    -1,    -1,    -1,
+      -1,   722,   732,    -1,    -1,   726,    -1,    -1,    -1,     0,
+      -1,   732,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   327,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     341,   342,   343,   344,   345,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   354,   355,   356,   357,   358,   359,   360,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   373,   374,   375,   376,   377,   378,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   387,    -1,   389,   390,
+     391,   392,   393,   394,   395,   396,   397,   398,   399,   400,
+     401,   402,   403,   404,   405,   406,   407,   408,   409,   410,
+     411,   412,   413,   414,   415,   416,   417,   418,   419,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
@@ -2937,142 +2518,32 @@
      264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
      274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
      284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
-     334,   335,   336,    -1,    -1,   339,    -1,    -1,    -1,    -1,
+     294,    -1,    -1,   297,   298,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,
-       6,     7,     8,     9,    -1,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   397,   398,   399,   400,   401,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
-     326,   327,   328,   329,   330,   331,   332,   333,   334,   335,
-     336,    -1,   338,   339,   340,   341,   342,   343,   344,   345,
-     346,   347,   348,   349,   350,   351,    -1,    -1,   354,   355,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,    -1,    -1,
-      -1,   377,   378,    -1,    -1,    -1,    -1,    -1,   384,   385,
-     386,   387,     5,     6,     7,     8,     9,    -1,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
-     333,   334,   335,   336,    -1,   338,   339,   340,   341,   342,
-     343,   344,   345,   346,   347,   348,   349,   350,   351,    -1,
-      -1,   354,   355,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     373,    -1,    -1,   376,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   384,   385,   386,   387,     5,     6,     7,     8,     9,
-      -1,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
-     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
-     320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     330,   331,   332,   333,   334,   335,   336,    -1,   338,   339,
-     340,   341,   342,   343,   344,   345,   346,   347,   348,   349,
-     350,   351,    -1,    -1,   354,   355,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   373,    -1,    -1,    -1,   377,    -1,    -1,
-      -1,    -1,    -1,    -1,   384,   385,   386,   387,     5,     6,
-       7,     8,     9,    -1,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,    35,    36,
+      -1,    -1,   316,   317,    -1,   319,    -1,   321,   322,    -1,
+      -1,    -1,    -1,   327,   328,   329,   330,   331,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   341,   342,   343,
+     344,   345,    -1,    -1,    -1,   349,   350,   351,   352,   353,
+     354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
+     364,    -1,   366,   367,   368,   369,   370,   371,   372,   373,
+     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
+     384,   385,   386,   387,   388,   389,   390,   391,   392,   393,
+     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
+     404,   405,   406,   407,   408,   409,   410,   411,   412,   413,
+     414,   415,   416,   417,   418,   419,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
      107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   131,   132,   133,   134,   135,   136,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
      137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
      147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
      157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
@@ -3088,173 +2559,64 @@
      257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
      267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
      277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
-      -1,   338,   339,   340,   341,   342,   343,   344,   345,   346,
-     347,   348,   349,   350,   351,    -1,    -1,   354,   355,    -1,
+     287,   288,   289,   290,   291,   292,   293,   294,    -1,    -1,
+     297,   298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   316,
+     317,    -1,   319,    -1,   321,   322,    -1,    -1,    -1,    -1,
+     327,   328,   329,   330,   331,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   341,   342,   343,   344,   345,    -1,
+      -1,    -1,   349,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,    -1,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,   385,   386,
+     387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+     397,   398,   399,   400,   401,   402,   403,   404,   405,   406,
+     407,   408,   409,   410,   411,   412,   413,   414,   415,   416,
+     417,   418,   419,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,    -1,    -1,   297,   298,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   373,    -1,    -1,   376,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   384,   385,   386,
-     387,     5,     6,     7,     8,     9,    -1,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
-     334,   335,   336,    -1,   338,   339,   340,   341,   342,   343,
-     344,   345,   346,   347,   348,   349,   350,   351,    -1,    -1,
-     354,   355,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   383,
-     384,   385,   386,   387,     5,     6,     7,     8,     9,    -1,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
-     331,   332,   333,   334,   335,   336,    -1,   338,   339,   340,
-     341,   342,   343,   344,   345,   346,   347,   348,   349,   350,
-     351,    -1,    -1,   354,   355,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   373,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   384,   385,   386,   387,     5,     6,     7,
-       8,     9,    -1,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
-     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-     328,   329,   330,   331,   332,   333,   334,   335,   336,    -1,
-     338,   339,   340,   341,   342,   343,   344,   345,   346,   347,
-     348,   349,   350,   351,    -1,    -1,   354,   355,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   373,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   384,   385,   386,   387,
-       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,    -1,    -1,   339
-};
-
-  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-     symbol of state STATE-NUM.  */
-static const yytype_uint16 yystos[] =
-{
-       0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      -1,    -1,    -1,    -1,    -1,    -1,   316,   317,    -1,   319,
+      -1,   321,    -1,    -1,    -1,    -1,    -1,   327,   328,   329,
+     330,   331,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   341,   342,   343,   344,   345,    -1,    -1,    -1,   349,
+     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
+     360,   361,   362,   363,   364,    -1,   366,   367,   368,   369,
+     370,   371,   372,   373,   374,   375,   376,   377,   378,   379,
+     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
+     390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
+     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
@@ -3281,138 +2643,863 @@
      263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
      273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
      283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
-     333,   334,   335,   336,   339,   383,   397,   398,   399,   400,
-     401,   402,   437,   438,   441,   442,   443,   444,   448,   449,
-     450,   451,   452,   453,   456,   457,   458,   459,   460,   462,
-     464,   465,   466,   506,   507,   508,   373,   373,   338,   377,
-     465,   338,   383,   383,   509,   374,   380,   445,   446,   447,
-     457,   462,   380,   383,   338,   338,   383,   458,   462,   375,
-     463,     0,   507,   338,   461,    81,   338,   454,   455,   377,
-     468,   462,   383,   463,   377,   485,   446,   445,   447,   338,
-     338,   373,   382,   463,   377,   380,   383,   440,   338,   340,
-     341,   342,   343,   344,   345,   346,   347,   348,   349,   350,
-     351,   354,   355,   373,   376,   384,   385,   386,   387,   407,
-     408,   409,   411,   412,   413,   414,   415,   416,   417,   418,
-     419,   420,   421,   422,   423,   424,   425,   426,   427,   428,
-     429,   430,   431,   460,   462,   375,   374,   380,   382,   374,
-     380,   467,   457,   462,   469,   470,   383,   383,    22,    23,
-      24,    26,    27,    28,    29,    30,    31,    32,   337,   375,
-     377,   378,   383,   418,   431,   433,   435,   437,   441,   460,
-     462,   475,   476,   477,   478,   486,   487,   488,   489,   492,
-     493,   496,   497,   498,   505,   510,   463,   382,   463,   377,
-     433,   473,   382,   439,   338,   380,   383,   418,   418,   435,
-     354,   355,   375,   379,   374,   374,   380,   336,   433,   373,
-     418,   388,   389,   390,   385,   387,   352,   353,   356,   357,
-     391,   392,   358,   359,   395,   394,   393,   360,   362,   361,
-     396,   376,   376,   431,   338,   431,   436,   455,   469,   462,
-     338,   471,   472,   378,   470,   383,   383,   500,   373,   373,
-     383,   383,   435,   373,   435,   381,   373,   375,   378,   479,
-     363,   364,   365,   366,   367,   368,   369,   370,   371,   372,
-     382,   434,   380,   383,   378,   476,   489,   493,   498,   473,
-     382,   473,   474,   473,   469,   338,   374,   410,   435,   338,
-     433,   418,   418,   418,   420,   420,   421,   421,   422,   422,
-     422,   422,   423,   423,   424,   425,   426,   427,   428,   429,
-     432,   376,   378,   471,   463,   380,   383,   476,   501,   435,
-     383,   435,   381,   499,   338,   511,   512,   486,   433,   433,
-     473,   378,   380,   378,   376,   435,   383,   472,   337,   475,
-     487,   502,   374,   374,   435,   450,   457,   491,   373,   376,
-     380,   480,   378,   473,   381,   373,   491,   503,   504,   482,
-     483,   484,   490,   494,   338,   374,   436,   376,   512,   378,
-     433,   435,   383,   374,    25,   478,   477,   377,   382,   477,
-     481,   485,   374,   374,   435,   481,   482,   486,   495,   473,
-     383,   378
+     293,   294,    -1,    -1,   297,   298,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   316,   317,    -1,   319,    -1,   321,    -1,
+      -1,    -1,    -1,    -1,   327,   328,   329,   330,   331,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   341,   342,
+     343,   344,   345,    -1,    -1,    -1,   349,   350,   351,   352,
+     353,   354,   355,   356,   357,   358,   359,   360,   361,   362,
+     363,   364,    -1,   366,   367,   368,   369,   370,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,   385,   386,   387,   388,   389,   390,   391,   392,
+     393,   394,   395,   396,   397,   398,   399,   400,   401,   402,
+     403,   404,   405,   406,   407,   408,   409,   410,   411,   412,
+     413,   414,   415,   416,   417,   418,   419,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,    -1,
+      -1,   297,   298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     316,   317,    -1,   319,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   327,   328,   329,   330,   331,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   341,   342,   343,   344,   345,
+      -1,    -1,    -1,   349,   350,   351,   352,   353,   354,   355,
+     356,   357,   358,   359,   360,   361,   362,   363,   364,    -1,
+     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
+     376,   377,   378,   379,   380,   381,   382,   383,   384,   385,
+     386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,   414,   415,
+     416,   417,   418,   419,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,    -1,    -1,   297,   298,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   316,   317,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   327,   328,
+     329,   330,   331,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   341,   342,   343,   344,   345,    -1,    -1,    -1,
+     349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
+     359,   360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,   385,   386,   387,    -1,
+     389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+     399,   400,   401,   402,   403,   404,   405,   406,   407,   408,
+     409,   410,   411,   412,   413,   414,   415,   416,   417,   418,
+     419,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,    -1,    -1,   297,   298,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   316,   317,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   328,   329,   330,   331,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   341,
+     342,   343,   344,    -1,    -1,    -1,    -1,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   373,   374,   375,   376,   377,   378,   379,   380,   381,
+     382,   383,   384,   385,   386,   387,    -1,   389,   390,   391,
+     392,   393,   394,   395,   396,   397,   398,   399,   400,   401,
+     402,   403,   404,   405,   406,   407,   408,   409,   410,   411,
+     412,   413,   414,   415,   416,   417,   418,   419,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   327,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   341,   342,   343,   344,
+     345,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,
+     355,   356,   357,   358,   359,   360,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
+     375,   376,   377,   378,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   387,    -1,   389,   390,   391,   392,   393,   394,
+     395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
+     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
+     415,   416,   417,   418,   419,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   327,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   341,   342,   343,   344,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   353,   354,   355,   356,   357,
+     358,   359,   360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,   377,
+     378,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   387,
+      -1,   389,   390,   391,   392,   393,   394,   395,   396,   397,
+     398,   399,   400,   401,   402,   403,   404,   405,   406,   407,
+     408,   409,   410,   411,   412,   413,   414,   415,   416,   417,
+     418,   419,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   322,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     341,   342,   343,   344,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   354,   355,   356,   357,   358,   359,   360,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   373,   374,   375,   376,   377,   378,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   387,    -1,   389,   390,
+     391,   392,   393,   394,   395,   396,   397,   398,   399,   400,
+     401,   402,   403,   404,   405,   406,   407,   408,   409,   410,
+     411,   412,   413,   414,   415,   416,   417,   418,   419,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   322,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   341,   342,   343,
+     344,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     354,   355,   356,   357,   358,   359,   360,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,
+     374,   375,   376,   377,   378,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   387,    -1,   389,   390,   391,   392,   393,
+     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
+     404,   405,   406,   407,   408,   409,   410,   411,   412,   413,
+     414,   415,   416,   417,   418,   419,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   322,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   341,   342,   343,   344,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,   355,   356,
+     357,   358,   359,   360,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,
+     377,   378,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     387,    -1,   389,   390,   391,   392,   393,   394,   395,   396,
+     397,   398,   399,   400,   401,   402,   403,   404,   405,   406,
+     407,   408,   409,   410,   411,   412,   413,   414,   415,   416,
+     417,   418,   419,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   341,   342,   343,   344,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   354,   355,   356,   357,   358,   359,
+     360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   373,   374,   375,   376,   377,   378,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   387,    -1,   389,
+     390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
+     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    -1,    -1,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,    -1,    -1,   297,   298,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   316,   317,    -1,    -1,    -1,   321,   322,    -1,
+      -1,    -1,    -1,    -1,   328,   329,   330,   331,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   349,   350,   351,   352,   353,
+     354,    -1,    -1,    -1,    -1,   359,   360,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   379,   380,   381,   382,   383,
+     384,   385,   386,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   401,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    -1,    -1,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,    -1,
+      -1,   297,   298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     316,   317,    -1,    -1,   320,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   328,   329,   330,   331,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   349,   350,   351,   352,   353,   354,    -1,
+      -1,    -1,    -1,   359,   360,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   379,   380,   381,   382,   383,   384,   385,
+     386,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   401,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    -1,    -1,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,    -1,    -1,   297,
+     298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   316,   317,
+      -1,    -1,    -1,   321,    -1,    -1,    -1,    -1,    -1,    -1,
+     328,   329,   330,   331,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   349,   350,   351,   352,   353,   354,    -1,    -1,    -1,
+      -1,   359,   360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   379,   380,   381,   382,   383,   384,   385,   386,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   401,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,    -1,    -1,   297,   298,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   316,   317,    -1,    -1,
+     320,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   328,   329,
+     330,   331,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   349,
+     350,   351,   352,   353,   354,    -1,    -1,    -1,    -1,   359,
+     360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,
+     380,   381,   382,   383,   384,   385,   386,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   401,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
+      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,    -1,    -1,   297,   298,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   316,   317,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   327,   328,   329,   330,   331,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   349,   350,   351,
+     352,   353,   354,    -1,    -1,    -1,    -1,   359,   360,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,   380,   381,
+     382,   383,   384,   385,   386,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   401,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    -1,    -1,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,    -1,    -1,   297,   298,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   316,   317,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   328,   329,   330,   331,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   349,   350,   351,   352,   353,
+     354,    -1,    -1,    -1,    -1,   359,   360,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   379,   380,   381,   382,   383,
+     384,   385,   386,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   401,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    -1,    -1,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   391,
+      -1,   297,   298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   405,    -1,    -1,    -1,    -1,    -1,    -1,
+     316,   317,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     422,   423,   328,   329,   330,   331,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   349,   350,   351,   352,   353,   354,    -1,
+      -1,    -1,   454,   359,   360,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   465,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   379,   380,   381,   382,   383,   384,   385,
+     386,    -1,   484,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   401,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   551,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   564,   565,   566,   567,   568,   569,   570,   571,
+     572,   573,   574,   575,   576,   577,   578,   579,   580,   581,
+     582,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     682
+};
+
+  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
+static const yytype_uint16 yystos[] =
+{
+       0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   327,   341,   342,   343,   344,   345,   354,
+     355,   356,   357,   358,   359,   360,   373,   374,   375,   376,
+     377,   378,   387,   389,   390,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,   414,   415,
+     416,   417,   418,   419,   451,   452,   455,   456,   457,   458,
+     462,   463,   464,   465,   466,   467,   470,   471,   472,   473,
+     474,   476,   481,   482,   483,   524,   525,   526,   482,   321,
+     353,   317,   317,   327,   353,   327,   527,   318,   324,   459,
+     460,   461,   471,   476,   324,   327,   353,   327,   353,   472,
+     476,   335,   478,   479,     0,   525,   476,   485,   321,   353,
+     374,   468,   469,   353,   475,   319,   327,   477,   321,   503,
+     460,   459,   461,   353,   353,   317,   326,   477,   321,   324,
+     327,   454,   297,   298,   316,   317,   328,   329,   330,   331,
+     349,   350,   351,   352,   353,   379,   380,   381,   382,   383,
+     384,   385,   386,   421,   422,   423,   425,   426,   427,   428,
+     429,   430,   431,   432,   433,   474,   476,   480,   477,   327,
+     471,   476,   486,   487,   484,   326,   318,   324,   318,   324,
+     320,   432,   434,   435,   436,   437,   438,   439,   440,   441,
+     442,   443,   444,   445,   319,   327,   319,   321,   322,   327,
+     361,   362,   363,   364,   366,   367,   368,   369,   370,   371,
+     372,   388,   432,   445,   447,   449,   451,   455,   474,   476,
+     492,   493,   494,   495,   496,   504,   505,   506,   507,   510,
+     511,   514,   515,   516,   523,   528,   477,   326,   477,   321,
+     447,   490,   326,   453,   353,   324,   327,   432,   432,   449,
+     297,   298,   319,   323,   318,   318,   324,   360,   447,   317,
+     432,   324,   336,   476,   353,   488,   489,   322,   487,   486,
+     445,   450,   469,   353,   332,   333,   334,   329,   331,   295,
+     296,   299,   300,   335,   336,   301,   302,   339,   338,   337,
+     303,   305,   304,   340,   320,   320,   445,   319,   322,   497,
+     317,   327,   327,   518,   317,   317,   327,   327,   449,   317,
+     449,   325,   327,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   326,   448,   324,   327,   322,   493,   507,
+     511,   516,   490,   326,   490,   491,   490,   486,   353,   318,
+     424,   449,   353,   447,   432,   488,   477,   324,   327,   322,
+     432,   432,   432,   434,   434,   435,   435,   436,   436,   436,
+     436,   437,   437,   438,   439,   440,   441,   442,   443,   446,
+     320,   353,   529,   530,   504,   517,   493,   519,   449,   327,
+     449,   325,   447,   447,   490,   322,   324,   322,   320,   327,
+     489,   449,   317,   320,   324,   498,   449,   464,   471,   509,
+     361,   492,   505,   520,   318,   318,   322,   490,   325,   450,
+     320,   530,   322,   353,   318,   317,   509,   521,   522,   500,
+     501,   502,   508,   512,   447,   318,   326,   494,   499,   503,
+     449,   327,   318,   365,   496,   494,   321,   490,   318,   449,
+     499,   500,   504,   513,   327,   322
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   406,   407,   408,   408,   408,   408,   408,   408,   408,
-     408,   408,   408,   408,   408,   408,   408,   409,   409,   409,
-     409,   409,   409,   410,   411,   412,   413,   413,   414,   414,
-     415,   415,   416,   417,   417,   417,   418,   418,   418,   418,
-     419,   419,   419,   419,   420,   420,   420,   420,   421,   421,
-     421,   422,   422,   422,   423,   423,   423,   423,   423,   424,
-     424,   424,   425,   425,   426,   426,   427,   427,   428,   428,
-     429,   429,   430,   430,   431,   432,   431,   433,   433,   434,
-     434,   434,   434,   434,   434,   434,   434,   434,   434,   434,
-     435,   435,   436,   437,   437,   437,   437,   437,   437,   437,
-     437,   437,   439,   438,   440,   440,   441,   442,   442,   443,
-     443,   444,   445,   445,   446,   446,   446,   446,   447,   448,
-     448,   448,   448,   448,   449,   449,   449,   449,   449,   450,
-     450,   451,   452,   452,   452,   452,   452,   452,   452,   452,
-     453,   454,   454,   455,   455,   455,   456,   457,   457,   458,
-     458,   458,   458,   458,   458,   458,   459,   459,   459,   459,
-     459,   459,   459,   459,   459,   459,   459,   459,   459,   459,
-     459,   459,   459,   459,   459,   459,   459,   459,   459,   459,
-     459,   459,   459,   459,   459,   460,   461,   461,   462,   462,
-     463,   463,   463,   463,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     465,   465,   465,   467,   466,   468,   466,   469,   469,   470,
-     470,   471,   471,   472,   472,   473,   473,   473,   474,   474,
-     475,   476,   476,   477,   477,   477,   477,   477,   477,   477,
-     478,   479,   480,   478,   481,   481,   483,   482,   484,   482,
-     485,   485,   486,   486,   487,   487,   488,   488,   489,   490,
-     490,   491,   491,   492,   492,   494,   493,   495,   495,   496,
-     496,   497,   497,   499,   498,   500,   498,   501,   498,   502,
-     502,   503,   503,   504,   504,   505,   505,   505,   505,   505,
-     506,   506,   507,   507,   507,   509,   508,   510,   511,   511,
-     512,   512
+       0,   420,   421,   422,   422,   422,   422,   422,   422,   422,
+     422,   422,   422,   422,   422,   422,   422,   422,   423,   423,
+     423,   423,   423,   423,   424,   425,   426,   427,   427,   428,
+     428,   429,   429,   430,   431,   431,   431,   432,   432,   432,
+     432,   433,   433,   433,   433,   434,   434,   434,   434,   435,
+     435,   435,   436,   436,   436,   437,   437,   437,   437,   437,
+     438,   438,   438,   439,   439,   440,   440,   441,   441,   442,
+     442,   443,   443,   444,   444,   445,   446,   445,   447,   447,
+     448,   448,   448,   448,   448,   448,   448,   448,   448,   448,
+     448,   449,   449,   450,   451,   451,   451,   451,   451,   451,
+     451,   451,   451,   453,   452,   454,   454,   455,   456,   456,
+     457,   457,   458,   459,   459,   460,   460,   460,   460,   461,
+     462,   462,   462,   462,   462,   463,   463,   463,   463,   463,
+     464,   464,   465,   466,   466,   466,   466,   466,   466,   466,
+     466,   467,   468,   468,   469,   469,   469,   470,   471,   471,
+     472,   472,   472,   472,   472,   472,   472,   473,   473,   473,
+     473,   473,   473,   473,   473,   473,   473,   473,   473,   473,
+     473,   473,   473,   473,   473,   473,   473,   473,   473,   473,
+     473,   473,   473,   473,   473,   473,   473,   473,   473,   473,
+     473,   473,   474,   475,   475,   476,   476,   477,   477,   477,
+     477,   478,   478,   479,   480,   480,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   482,   482,
+     482,   484,   483,   485,   483,   486,   486,   487,   487,   488,
+     488,   489,   489,   490,   490,   490,   491,   491,   492,   493,
+     493,   494,   494,   494,   494,   494,   494,   494,   494,   495,
+     496,   497,   498,   496,   499,   499,   501,   500,   502,   500,
+     503,   503,   504,   504,   505,   505,   506,   506,   507,   508,
+     508,   509,   509,   510,   510,   512,   511,   513,   513,   514,
+     514,   515,   515,   517,   516,   518,   516,   519,   516,   520,
+     520,   521,   521,   522,   522,   523,   523,   523,   523,   523,
+     524,   524,   525,   525,   525,   527,   526,   528,   529,   529,
+     530,   530
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
-       0,     2,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     3,     1,     4,     1,
-       3,     2,     2,     1,     1,     1,     2,     2,     2,     1,
-       2,     3,     2,     1,     1,     1,     1,     2,     2,     2,
-       1,     1,     1,     1,     1,     3,     3,     3,     1,     3,
-       3,     1,     3,     3,     1,     3,     3,     3,     3,     1,
-       3,     3,     1,     3,     1,     3,     1,     3,     1,     3,
-       1,     3,     1,     3,     1,     0,     6,     1,     3,     1,
+       0,     2,     1,     1,     3,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     4,
+       1,     3,     2,     2,     1,     1,     1,     2,     2,     2,
+       1,     2,     3,     2,     1,     1,     1,     1,     2,     2,
+       2,     1,     1,     1,     1,     1,     3,     3,     3,     1,
+       3,     3,     1,     3,     3,     1,     3,     3,     3,     3,
+       1,     3,     3,     1,     3,     1,     3,     1,     3,     1,
+       3,     1,     3,     1,     3,     1,     0,     6,     1,     3,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     3,     1,     2,     2,     4,     2,     3,     4,     2,
-       3,     4,     0,     6,     2,     3,     2,     1,     1,     2,
-       3,     3,     2,     3,     2,     1,     2,     1,     1,     1,
-       3,     4,     6,     5,     1,     2,     3,     5,     4,     1,
-       2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       4,     1,     3,     1,     3,     1,     1,     1,     2,     1,
+       1,     1,     3,     1,     2,     2,     4,     2,     3,     4,
+       2,     3,     4,     0,     6,     2,     3,     2,     1,     1,
+       2,     3,     3,     2,     3,     2,     1,     2,     1,     1,
+       1,     3,     4,     6,     5,     1,     2,     3,     5,     4,
+       1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     4,     1,     3,     1,     3,     1,     1,     1,     2,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     4,     1,     1,     3,     1,     2,
-       2,     3,     3,     4,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     4,     1,     1,     3,     2,     3,     2,     3,     3,
+       4,     1,     0,     3,     1,     3,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
@@ -3441,9 +3528,10 @@
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     6,     0,     5,     1,     2,     3,
-       4,     1,     3,     1,     2,     1,     3,     4,     1,     3,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     0,     6,     0,     5,     1,     2,     3,     4,     1,
+       3,     1,     2,     1,     3,     4,     1,     3,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
        2,     0,     0,     5,     1,     1,     0,     2,     0,     2,
        2,     3,     1,     2,     1,     2,     1,     2,     5,     3,
        1,     1,     4,     1,     2,     0,     8,     0,     1,     3,
@@ -4133,250 +4221,260 @@
   switch (yyn)
     {
         case 2:
-#line 294 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 357 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
     }
-#line 4141 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4229 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 3:
-#line 300 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 363 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4237 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 4:
-#line 303 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
-    }
-#line 4158 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 5:
-#line 307 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
-    }
-#line 4167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 6:
-#line 311 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
-    }
-#line 4175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 7:
-#line 314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
-    }
-#line 4184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 8:
-#line 318 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
-    }
-#line 4193 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 9:
-#line 322 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
-    }
-#line 4202 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 10:
-#line 326 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
-    }
-#line 4211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 11:
-#line 330 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
-    }
-#line 4220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 12:
-#line 334 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
-    }
-#line 4228 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 13:
-#line 337 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
-    }
-#line 4237 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 14:
-#line 341 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
-    }
-#line 4246 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 15:
-#line 345 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
-    }
-#line 4254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 16:
-#line 348 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 366 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
         if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
             (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 4264 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4247 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 5:
+#line 371 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
+    }
+#line 4255 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 6:
+#line 374 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
+    }
+#line 4263 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 7:
+#line 377 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
+    }
+#line 4272 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 8:
+#line 381 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
+    }
+#line 4280 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 9:
+#line 385 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
+    }
+#line 4288 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 10:
+#line 388 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
+    }
+#line 4297 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 11:
+#line 392 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
+    }
+#line 4306 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 12:
+#line 396 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
+    }
+#line 4315 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 13:
+#line 400 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
+    }
+#line 4324 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 14:
+#line 404 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
+    }
+#line 4333 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 15:
+#line 408 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
+    }
+#line 4342 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 16:
+#line 412 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double literal");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
+    }
+#line 4353 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 17:
-#line 356 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 418 "glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
     }
-#line 4272 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4362 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 18:
-#line 359 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
-    }
-#line 4280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 19:
-#line 362 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 426 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4370 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 19:
+#line 429 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
+    }
+#line 4378 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 20:
-#line 365 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 432 "glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
+        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4386 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 21:
-#line 368 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 435 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
+    }
+#line 4394 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 22:
+#line 438 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4404 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 22:
-#line 373 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 23:
+#line 443 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4316 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4414 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 23:
-#line 381 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 24:
+#line 451 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4423 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 24:
-#line 388 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 25:
+#line 458 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
         delete (yyvsp[0].interm).function;
     }
-#line 4334 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 25:
-#line 395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[0].interm);
-    }
-#line 4342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4432 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 26:
-#line 401 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[-1].interm);
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-    }
-#line 4351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 27:
-#line 405 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[-1].interm);
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-    }
-#line 4360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 28:
-#line 412 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[-1].interm);
-    }
-#line 4368 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 29:
-#line 415 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 465 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4440 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 27:
+#line 471 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[-1].interm);
+        (yyval.interm).loc = (yyvsp[0].lex).loc;
+    }
+#line 4449 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 28:
+#line 475 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[-1].interm);
+        (yyval.interm).loc = (yyvsp[0].lex).loc;
+    }
+#line 4458 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 29:
+#line 482 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[-1].interm);
+    }
+#line 4466 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 30:
-#line 421 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 485 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[0].interm);
+    }
+#line 4474 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 31:
+#line 491 "glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -4384,11 +4482,11 @@
         (yyval.interm).function = (yyvsp[-1].interm).function;
         (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4388 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4486 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 31:
-#line 428 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 32:
+#line 498 "glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -4396,29 +4494,29 @@
         (yyval.interm).function = (yyvsp[-2].interm).function;
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
     }
-#line 4400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 32:
-#line 438 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[-1].interm);
-    }
-#line 4408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4498 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 33:
-#line 446 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 508 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[-1].interm);
+    }
+#line 4506 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 34:
+#line 516 "glslang.y" /* yacc.c:1646  */
     {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 4418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4516 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 34:
-#line 451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 35:
+#line 521 "glslang.y" /* yacc.c:1646  */
     {
         //
         // Should be a method or subroutine call, but we haven't recognized the arguments yet.
@@ -4442,54 +4540,54 @@
 
         if ((yyval.interm).function == 0) {
             // error recover
-            TString empty("");
-            (yyval.interm).function = new TFunction(&empty, TType(EbtVoid), EOpNull);
+            TString* empty = NewPoolTString("");
+            (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 4450 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4548 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 35:
-#line 478 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 36:
+#line 549 "glslang.y" /* yacc.c:1646  */
     {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 4460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4558 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 36:
-#line 486 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 37:
+#line 558 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
     }
-#line 4471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4569 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 37:
-#line 492 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 38:
+#line 564 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 4480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4578 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 38:
-#line 496 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 39:
+#line 568 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 4489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4587 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 39:
-#line 500 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 40:
+#line 572 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm).op != EOpNull) {
             char errorOp[2] = {0, 0};
@@ -4506,318 +4604,320 @@
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#line 4510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 40:
-#line 520 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
-#line 4516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4608 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 41:
-#line 521 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
-#line 4522 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 592 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
+#line 4614 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 42:
-#line 522 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 4528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 593 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
+#line 4620 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 43:
-#line 523 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
-              parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
-#line 4535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 594 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
+#line 4626 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 44:
-#line 529 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 595 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
+              parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
+#line 4633 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 45:
-#line 530 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 601 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4639 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 46:
+#line 602 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4649 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 46:
-#line 535 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 47:
+#line 607 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4659 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 47:
-#line 540 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 48:
+#line 612 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 48:
-#line 549 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4670 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 49:
-#line 550 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 621 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4676 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 50:
+#line 622 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4686 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 50:
-#line 555 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 51:
+#line 627 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4598 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 51:
-#line 563 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4696 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 52:
-#line 564 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 635 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4702 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 53:
+#line 636 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4615 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4713 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 53:
-#line 570 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 54:
+#line 642 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 54:
-#line 579 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4724 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 55:
-#line 580 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 651 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4730 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 56:
+#line 652 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4642 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4740 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 56:
-#line 585 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 57:
+#line 657 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4750 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 57:
-#line 590 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 58:
+#line 662 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4760 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 58:
-#line 595 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 59:
+#line 667 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 59:
-#line 603 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4770 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 60:
-#line 604 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 675 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4776 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 61:
+#line 676 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
         parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
+        parseContext.referenceCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "==", EOpEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4790 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 61:
-#line 612 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 62:
+#line 685 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
         parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
+        parseContext.referenceCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "!=", EOpNotEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4704 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 62:
-#line 623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4804 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 63:
-#line 624 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 697 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4810 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 64:
+#line 698 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4721 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 64:
-#line 633 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4821 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 65:
-#line 634 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 707 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4827 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 66:
+#line 708 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 66:
-#line 643 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4838 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 67:
-#line 644 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 717 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4844 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 68:
+#line 718 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4755 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 68:
-#line 653 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4761 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4855 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 69:
-#line 654 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 727 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4861 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 70:
+#line 728 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4771 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 70:
-#line 662 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4777 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4871 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 71:
-#line 663 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 736 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4877 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 72:
+#line 737 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4787 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 72:
-#line 671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4887 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 73:
-#line 672 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 745 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4893 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 74:
+#line 746 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4803 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 74:
-#line 680 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4903 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 75:
-#line 681 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        ++parseContext.controlFlowNestingLevel;
-    }
-#line 4817 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 754 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4909 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 76:
-#line 684 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 755 "glslang.y" /* yacc.c:1646  */
+    {
+        ++parseContext.controlFlowNestingLevel;
+    }
+#line 4917 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 77:
+#line 758 "glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
@@ -4830,17 +4930,17 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4834 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 77:
-#line 699 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4934 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 78:
-#line 700 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 773 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4940 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 79:
+#line 774 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment");
         parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
@@ -4854,119 +4954,119 @@
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 4858 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4958 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 79:
-#line 716 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 80:
+#line 790 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 4867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4967 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 80:
-#line 720 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 81:
+#line 794 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 4876 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4976 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 81:
-#line 724 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 82:
+#line 798 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 4885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4985 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 82:
-#line 728 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 83:
+#line 802 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 4895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4995 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 83:
-#line 733 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 84:
+#line 807 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 4904 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5004 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 84:
-#line 737 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 85:
+#line 811 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 4913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5013 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 85:
-#line 741 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 86:
+#line 815 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
     }
-#line 4922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5022 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 86:
-#line 745 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 87:
+#line 819 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
     }
-#line 4931 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5031 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 87:
-#line 749 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 88:
+#line 823 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
     }
-#line 4940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5040 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 88:
-#line 753 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 89:
+#line 827 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
     }
-#line 4949 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5049 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 89:
-#line 757 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 90:
+#line 831 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
     }
-#line 4958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 90:
-#line 764 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 4966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5058 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 91:
-#line 767 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 838 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+    }
+#line 5066 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 92:
+#line 841 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
@@ -4975,117 +5075,116 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5079 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 92:
-#line 778 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 93:
+#line 852 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4988 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5088 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 93:
-#line 785 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 94:
+#line 859 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */);
         (yyval.interm.intermNode) = 0;
         // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
     }
-#line 4998 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5098 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 94:
-#line 790 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 95:
+#line 864 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm).intermNode && (yyvsp[-1].interm).intermNode->getAsAggregate())
             (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode;
     }
-#line 5008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5108 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 95:
-#line 795 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 96:
+#line 869 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
-
         // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope
         parseContext.symbolTable.setPreviousDefaultPrecisions(&parseContext.defaultPrecision[0]);
         parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
         (yyval.interm.intermNode) = 0;
     }
-#line 5021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5120 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 96:
-#line 803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 97:
+#line 876 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 5030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5129 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 97:
-#line 807 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 98:
+#line 880 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 5039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5138 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 98:
-#line 811 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 99:
+#line 884 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
         (yyval.interm.intermNode) = 0;
     }
-#line 5048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5147 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 99:
-#line 815 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 100:
+#line 888 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
         (yyval.interm.intermNode) = 0;
     }
-#line 5058 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5157 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 100:
-#line 820 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 101:
+#line 893 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers);
         parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 5068 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5167 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 101:
-#line 825 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 102:
+#line 898 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers);
         (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string);
         parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
         (yyval.interm.intermNode) = 0;
     }
-#line 5079 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 102:
-#line 834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 5085 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5178 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 103:
-#line 834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 907 "glslang.y" /* yacc.c:1646  */
+    { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
+#line 5184 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 104:
+#line 907 "glslang.y" /* yacc.c:1646  */
     {
         --parseContext.structNestingLevel;
         parseContext.blockName = (yyvsp[-4].lex).string;
@@ -5095,54 +5194,54 @@
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 5099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5198 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 104:
-#line 845 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 105:
+#line 918 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 5108 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5207 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 105:
-#line 849 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 106:
+#line 922 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 5117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5216 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 106:
-#line 856 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 107:
+#line 929 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 5126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 107:
-#line 863 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.function) = (yyvsp[0].interm.function);
-    }
-#line 5134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5225 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 108:
-#line 866 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 936 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 5142 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5233 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 109:
-#line 873 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 939 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.function) = (yyvsp[0].interm.function);
+    }
+#line 5241 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 110:
+#line 946 "glslang.y" /* yacc.c:1646  */
     {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[-1].interm.function);
@@ -5151,11 +5250,11 @@
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 5155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5254 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 110:
-#line 881 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 111:
+#line 954 "glslang.y" /* yacc.c:1646  */
     {
         //
         // Only first parameter of one-parameter functions can be void
@@ -5173,11 +5272,11 @@
             (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
         }
     }
-#line 5177 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5276 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 111:
-#line 901 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 112:
+#line 974 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) {
             parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return",
@@ -5197,11 +5296,11 @@
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 5201 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5300 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 112:
-#line 924 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 113:
+#line 997 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -5217,11 +5316,11 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5320 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 113:
-#line 939 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 114:
+#line 1012 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -5241,11 +5340,11 @@
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5245 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5344 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 114:
-#line 964 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 115:
+#line 1037 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -5257,11 +5356,11 @@
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 5261 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5360 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 115:
-#line 975 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 116:
+#line 1048 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -5269,11 +5368,11 @@
         parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 5273 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5372 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 116:
-#line 985 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 117:
+#line 1058 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -5284,11 +5383,11 @@
         parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
     }
-#line 5288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5387 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 117:
-#line 995 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 118:
+#line 1068 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -5296,118 +5395,120 @@
         parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 5300 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5399 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 118:
-#line 1005 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 119:
+#line 1078 "glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType((yyvsp[0].interm.type)) };
         (yyval.interm).param = param;
         if ((yyvsp[0].interm.type).arraySizes)
             parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes);
     }
-#line 5311 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 119:
-#line 1014 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[0].interm);
-    }
-#line 5319 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5410 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 120:
-#line 1017 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1087 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[0].interm);
+    }
+#line 5418 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 121:
+#line 1090 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
     }
-#line 5328 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5427 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 121:
-#line 1021 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 122:
+#line 1094 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
     }
-#line 5337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5436 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 122:
-#line 1025 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 123:
+#line 1098 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-5].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5347 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5446 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 123:
-#line 1030 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 124:
+#line 1103 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-4].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 124:
-#line 1038 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm).type = (yyvsp[0].interm.type);
-        (yyval.interm).intermNode = 0;
-        parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
-    }
-#line 5367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5456 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 125:
-#line 1043 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1111 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm).type = (yyvsp[0].interm.type);
+        (yyval.interm).intermNode = 0;
+
+        parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
+
+    }
+#line 5468 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 126:
+#line 1118 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-1].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
     }
-#line 5377 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5478 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 126:
-#line 1048 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 127:
+#line 1123 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-2].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes);
     }
-#line 5387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5488 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 127:
-#line 1053 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 128:
+#line 1128 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-4].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5498 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 128:
-#line 1058 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 129:
+#line 1133 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-3].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5407 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5508 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 129:
-#line 1067 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 130:
+#line 1142 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
 
@@ -5416,14 +5517,13 @@
             parseContext.profileRequires((yyvsp[0].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
             parseContext.profileRequires((yyvsp[0].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
         }
-
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 5423 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5523 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 130:
-#line 1078 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 131:
+#line 1152 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type));
@@ -5448,22 +5548,22 @@
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 5452 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5552 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 131:
-#line 1105 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 132:
+#line 1179 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "invariant");
         parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.invariant = true;
     }
-#line 5463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5563 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 132:
-#line 1114 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 133:
+#line 1188 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
@@ -5471,11 +5571,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.smooth = true;
     }
-#line 5475 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5575 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 133:
-#line 1121 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 134:
+#line 1195 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
@@ -5483,58 +5583,49 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.flat = true;
     }
-#line 5487 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5587 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 134:
-#line 1128 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 135:
+#line 1203 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
-#ifdef NV_EXTENSIONS
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective");
-#else
-        parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "noperspective");
-#endif
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "noperspective");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nopersp = true;
     }
-#line 5503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5599 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 135:
-#line 1139 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 136:
+#line 1210 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.explicitInterp = true;
-#endif
     }
-#line 5517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5611 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 136:
-#line 1148 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 137:
+#line 1217 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef NV_EXTENSIONS
         parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.pervertexNV = true;
-#endif
     }
-#line 5532 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5624 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 137:
-#line 1158 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 138:
+#line 1225 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef NV_EXTENSIONS
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV");
@@ -5543,114 +5634,109 @@
             parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_NV_mesh_shader, "perprimitiveNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perPrimitiveNV = true;
-#endif
     }
-#line 5549 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5639 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 138:
-#line 1170 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 139:
+#line 1235 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef NV_EXTENSIONS
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV");
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangMeshNV, "perviewNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perViewNV = true;
-#endif
     }
-#line 5563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5651 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 139:
-#line 1179 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 140:
+#line 1242 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef NV_EXTENSIONS
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perTaskNV = true;
-#endif
     }
-#line 5577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 140:
-#line 1191 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[-1].interm.type);
-    }
-#line 5585 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5663 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 141:
-#line 1197 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1253 "glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
+        (yyval.interm.type) = (yyvsp[-1].interm.type);
     }
-#line 5593 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5671 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 142:
-#line 1200 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1259 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5679 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 143:
+#line 1262 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-2].interm.type);
         (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
         parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
     }
-#line 5603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5689 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 143:
-#line 1207 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 144:
+#line 1269 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
     }
-#line 5612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5698 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 144:
-#line 1211 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 145:
+#line 1273 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[-2].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode));
     }
-#line 5621 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5707 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 145:
-#line 1215 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 146:
+#line 1277 "glslang.y" /* yacc.c:1646  */
     { // because "shared" is both an identifier and a keyword
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         TString strShared("shared");
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared);
     }
-#line 5631 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5717 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 146:
-#line 1223 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 147:
+#line 1286 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.noContraction = true;
     }
-#line 5642 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 147:
-#line 1232 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5728 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 148:
-#line 1235 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1296 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5736 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 149:
+#line 1299 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
@@ -5659,80 +5745,157 @@
         (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
         parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
     }
-#line 5663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 149:
-#line 1246 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5671 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5749 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 150:
-#line 1249 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1310 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5679 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5757 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 151:
-#line 1252 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1313 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5765 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 152:
+#line 1316 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5688 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 152:
-#line 1256 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5774 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 153:
-#line 1260 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1320 "glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5706 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5783 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 154:
-#line 1264 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1324 "glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5715 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5792 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 155:
-#line 1268 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1329 "glslang.y" /* yacc.c:1646  */
     {
+        // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5723 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5801 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 156:
-#line 1274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1333 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5809 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 157:
+#line 1340 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqConst;  // will later turn into EvqConstReadOnly, if the initializer is not constant
     }
-#line 5732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5818 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 157:
-#line 1278 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 158:
+#line 1344 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqInOut;
+    }
+#line 5828 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 159:
+#line 1349 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "in");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
+        (yyval.interm.type).qualifier.storage = EvqIn;
+    }
+#line 5839 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 160:
+#line 1355 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "out");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
+        (yyval.interm.type).qualifier.storage = EvqOut;
+    }
+#line 5850 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 161:
+#line 1361 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
+        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
+        parseContext.globalCheck((yyvsp[0].lex).loc, "centroid");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.centroid = true;
+    }
+#line 5862 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 162:
+#line 1368 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqUniform;
+    }
+#line 5872 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 163:
+#line 1373 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "shared");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
+        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 310, 0, "shared");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqShared;
+    }
+#line 5885 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 164:
+#line 1381 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqBuffer;
+    }
+#line 5895 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 165:
+#line 1387 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
@@ -5745,11 +5908,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5912 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 158:
-#line 1290 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 166:
+#line 1399 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
@@ -5764,3464 +5927,3505 @@
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5768 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5931 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 159:
-#line 1304 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqInOut;
-    }
-#line 5778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 160:
-#line 1309 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "in");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
-        (yyval.interm.type).qualifier.storage = EvqIn;
-    }
-#line 5789 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 161:
-#line 1315 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "out");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
-        (yyval.interm.type).qualifier.storage = EvqOut;
-    }
-#line 5800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 162:
-#line 1321 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
-        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
-        parseContext.globalCheck((yyvsp[0].lex).loc, "centroid");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.centroid = true;
-    }
-#line 5812 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 163:
-#line 1328 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 167:
+#line 1413 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "patch");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.patch = true;
     }
-#line 5823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5942 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 164:
-#line 1334 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 168:
+#line 1419 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.sample = true;
     }
-#line 5833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 165:
-#line 1339 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqUniform;
-    }
-#line 5843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 166:
-#line 1344 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqBuffer;
-    }
-#line 5853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 167:
-#line 1349 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef NV_EXTENSIONS
-        parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectNVMask | EShLangClosestHitNVMask
-            | EShLangAnyHitNVMask), "hitAttributeNV");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "hitAttributeNV");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqHitAttrNV;
-#endif
-    }
-#line 5868 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 168:
-#line 1359 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef NV_EXTENSIONS
-        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangClosestHitNVMask |
-            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadNV");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadNV");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqPayloadNV;
-#endif
-    }
-#line 5883 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5952 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 169:
-#line 1369 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1424 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef NV_EXTENSIONS
-        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitNVMask |
-            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadInNV");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadInNV");
+        parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
+            | EShLangAnyHitMask), "hitAttributeNV");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "hitAttributeNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqPayloadInNV;
-#endif
+        (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 5898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5965 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 170:
-#line 1379 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1432 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef NV_EXTENSIONS
-        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenNVMask |
-            EShLangClosestHitNVMask | EShLangMissNVMask | EShLangCallableNVMask), "callableDataNV");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataNV");
+        parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
+            | EShLangAnyHitMask), "hitAttributeEXT");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "hitAttributeNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqCallableDataNV;
-#endif
+        (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 5913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5978 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 171:
-#line 1389 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1440 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef NV_EXTENSIONS
-        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableNVMask), "callableDataInNV");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV");
+        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadNV");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqCallableDataInNV;
-#endif
+        (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 5927 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5991 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 172:
-#line 1398 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1448 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "shared");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
-        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 310, 0, "shared");
-#ifdef NV_EXTENSIONS
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
-#else
-        parseContext.requireStage((yyvsp[0].lex).loc, EShLangCompute, "shared");
-#endif
+        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadEXT");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadEXT");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqShared;
+        (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 5944 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6004 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 173:
-#line 1410 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1456 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadInNV");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadInNV");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqPayloadIn;
+    }
+#line 6017 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 174:
+#line 1464 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadInEXT");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadInEXT");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqPayloadIn;
+    }
+#line 6030 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 175:
+#line 1472 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
+            EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataNV");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataNV");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqCallableData;
+    }
+#line 6043 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 176:
+#line 1480 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
+            EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataEXT");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataEXT");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqCallableData;
+    }
+#line 6056 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 177:
+#line 1488 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
+    }
+#line 6068 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 178:
+#line 1495 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataInEXT");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
+    }
+#line 6080 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 179:
+#line 1502 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.coherent = true;
     }
-#line 5953 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6089 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 174:
-#line 1414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 180:
+#line 1506 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
         (yyval.interm.type).qualifier.devicecoherent = true;
     }
-#line 5963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6099 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 175:
-#line 1419 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 181:
+#line 1511 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent");
         (yyval.interm.type).qualifier.queuefamilycoherent = true;
     }
-#line 5973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6109 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 176:
-#line 1424 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 182:
+#line 1516 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent");
         (yyval.interm.type).qualifier.workgroupcoherent = true;
     }
-#line 5983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6119 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 177:
-#line 1429 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 183:
+#line 1521 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent");
         (yyval.interm.type).qualifier.subgroupcoherent = true;
     }
-#line 5993 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6129 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 178:
-#line 1434 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 184:
+#line 1526 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate");
         (yyval.interm.type).qualifier.nonprivate = true;
     }
-#line 6003 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6139 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 179:
-#line 1439 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 185:
+#line 1531 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent");
+        (yyval.interm.type).qualifier.shadercallcoherent = true;
+    }
+#line 6149 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 186:
+#line 1536 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.volatil = true;
     }
-#line 6012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6158 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 180:
-#line 1443 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 187:
+#line 1540 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.restrict = true;
     }
-#line 6021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6167 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 181:
-#line 1447 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 188:
+#line 1544 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.readonly = true;
     }
-#line 6030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6176 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 182:
-#line 1451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 189:
+#line 1548 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.writeonly = true;
     }
-#line 6039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6185 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 183:
-#line 1455 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 190:
+#line 1552 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
     }
-#line 6050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6196 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 184:
-#line 1461 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 191:
+#line 1558 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[-3].lex).loc);
     }
-#line 6061 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6207 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 185:
-#line 1470 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 192:
+#line 1569 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nonUniform = true;
     }
-#line 6070 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6216 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 186:
-#line 1477 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 193:
+#line 1576 "glslang.y" /* yacc.c:1646  */
     {
         // TODO
     }
-#line 6078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6224 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 187:
-#line 1480 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 194:
+#line 1579 "glslang.y" /* yacc.c:1646  */
     {
         // TODO: 4.0 semantics: subroutines
         // 1) make sure each identifier is a type declared earlier with SUBROUTINE
         // 2) save all of the identifiers for future comparison with the declared function
     }
-#line 6088 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6234 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 188:
-#line 1488 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 195:
+#line 1588 "glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-        (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
-    }
-#line 6097 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 189:
-#line 1492 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes);
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
-        (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
+        (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters);
     }
-#line 6108 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6244 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 190:
-#line 1501 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 196:
+#line 1593 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes);
+        (yyval.interm.type) = (yyvsp[-2].interm.type);
+        (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
+        (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters);
+        (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
+    }
+#line 6256 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 197:
+#line 1603 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 6118 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6266 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 191:
-#line 1506 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 198:
+#line 1608 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
 
         TArraySize size;
-        parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
+        parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 6131 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6279 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 192:
-#line 1514 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 199:
+#line 1616 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 6140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6288 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 193:
-#line 1518 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 200:
+#line 1620 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
 
         TArraySize size;
-        parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
+        parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 6152 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6300 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 194:
-#line 1528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 201:
+#line 1630 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters);
+    }
+#line 6308 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 202:
+#line 1633 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.typeParameters) = 0;
+    }
+#line 6316 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 203:
+#line 1639 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters);
+    }
+#line 6324 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 204:
+#line 1645 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.typeParameters) = new TArraySizes;
+
+        TArraySize size;
+        parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter");
+        (yyval.interm.typeParameters)->addInnerSize(size);
+    }
+#line 6336 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 205:
+#line 1652 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters);
+
+        TArraySize size;
+        parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter");
+        (yyval.interm.typeParameters)->addInnerSize(size);
+    }
+#line 6348 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 206:
+#line 1662 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 6161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6357 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 195:
-#line 1532 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 207:
+#line 1666 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 6170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6366 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 196:
-#line 1536 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-    }
-#line 6180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 197:
-#line 1541 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-    }
-#line 6190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 198:
-#line 1546 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-    }
-#line 6200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 199:
-#line 1551 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-    }
-#line 6210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 200:
-#line 1556 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 208:
+#line 1670 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 6219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6375 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 201:
-#line 1560 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 209:
+#line 1674 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 6229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6385 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 202:
-#line 1565 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 210:
+#line 1679 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtBool;
+    }
+#line 6394 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 211:
+#line 1683 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6404 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 212:
+#line 1688 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6414 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 213:
+#line 1693 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6424 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 214:
+#line 1698 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6434 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 215:
+#line 1703 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6444 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 216:
+#line 1708 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6454 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 217:
+#line 1713 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6464 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 218:
+#line 1718 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6474 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 219:
+#line 1723 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6484 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 220:
+#line 1728 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6495 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 221:
+#line 1734 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6506 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 222:
+#line 1740 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6517 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 223:
+#line 1746 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 6527 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 224:
+#line 1751 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 6537 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 225:
+#line 1756 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 6547 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 226:
+#line 1761 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 6557 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 227:
+#line 1766 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 3);
+    }
+#line 6567 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 228:
+#line 1771 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 4);
+    }
+#line 6577 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 229:
+#line 1776 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 2);
+    }
+#line 6587 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 230:
+#line 1781 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 6597 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 231:
+#line 1786 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 4);
+    }
+#line 6607 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 232:
+#line 1791 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 2);
+    }
+#line 6617 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 233:
+#line 1796 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 3);
+    }
+#line 6627 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 234:
+#line 1801 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 6637 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 235:
+#line 1807 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+    }
+#line 6649 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 236:
+#line 1814 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+    }
+#line 6659 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 237:
+#line 1819 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+    }
+#line 6669 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 238:
+#line 1824 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+    }
+#line 6679 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 239:
+#line 1829 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
     }
-#line 6239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6689 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 203:
-#line 1570 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 240:
+#line 1834 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
     }
-#line 6249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6699 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 204:
-#line 1575 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 241:
+#line 1839 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
     }
-#line 6259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6709 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 205:
-#line 1580 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 242:
+#line 1844 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
     }
-#line 6269 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6719 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 206:
-#line 1585 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 243:
+#line 1849 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 6279 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6729 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 207:
-#line 1590 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 244:
+#line 1854 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 6289 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6739 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 208:
-#line 1595 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 245:
+#line 1859 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
     }
-#line 6299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6749 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 209:
-#line 1600 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 246:
+#line 1864 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
     }
-#line 6309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 210:
-#line 1605 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-    }
-#line 6318 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 211:
-#line 1609 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6328 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 212:
-#line 1614 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6338 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 213:
-#line 1619 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 214:
-#line 1624 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6359 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 215:
-#line 1630 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 216:
-#line 1636 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 217:
-#line 1642 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 218:
-#line 1648 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 219:
-#line 1654 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 220:
-#line 1660 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 221:
-#line 1666 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 222:
-#line 1672 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 223:
-#line 1678 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 224:
-#line 1684 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 225:
-#line 1690 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 226:
-#line 1696 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 227:
-#line 1701 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6500 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 228:
-#line 1706 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 229:
-#line 1711 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 230:
-#line 1716 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6530 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 231:
-#line 1721 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 232:
-#line 1726 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt8;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 233:
-#line 1732 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt8;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6562 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 234:
-#line 1738 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt8;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6573 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 235:
-#line 1744 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt16;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 236:
-#line 1750 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt16;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6595 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 237:
-#line 1756 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt16;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6606 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 238:
-#line 1762 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6617 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 239:
-#line 1768 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 240:
-#line 1774 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 241:
-#line 1780 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt64;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 242:
-#line 1786 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt64;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6661 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 243:
-#line 1792 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt64;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 244:
-#line 1798 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6683 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 245:
-#line 1804 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6694 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 246:
-#line 1810 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6705 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6759 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 247:
-#line 1816 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1869 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint8;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
-#line 6716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6772 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 248:
-#line 1822 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1877 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint8;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
-#line 6727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6785 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 249:
-#line 1828 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1885 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6798 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 250:
+#line 1893 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6809 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 251:
+#line 1899 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6820 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 252:
+#line 1905 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6831 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 253:
+#line 1911 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6842 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 254:
+#line 1917 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6853 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 255:
+#line 1923 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6864 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 256:
+#line 1929 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6875 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 257:
+#line 1935 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6886 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 258:
+#line 1941 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6897 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 259:
+#line 1947 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt8;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6908 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 260:
+#line 1953 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt8;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6919 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 261:
+#line 1959 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt8;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6930 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 262:
+#line 1965 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt16;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6941 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 263:
+#line 1971 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt16;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6952 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 264:
+#line 1977 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt16;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6963 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 265:
+#line 1983 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6974 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 266:
+#line 1989 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6985 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 267:
+#line 1995 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6996 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 268:
+#line 2001 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt64;
+        (yyval.interm.type).setVector(2);
+    }
+#line 7007 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 269:
+#line 2007 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt64;
+        (yyval.interm.type).setVector(3);
+    }
+#line 7018 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 270:
+#line 2013 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt64;
+        (yyval.interm.type).setVector(4);
+    }
+#line 7029 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 271:
+#line 2019 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint8;
+        (yyval.interm.type).setVector(2);
+    }
+#line 7040 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 272:
+#line 2025 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint8;
+        (yyval.interm.type).setVector(3);
+    }
+#line 7051 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 273:
+#line 2031 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(4);
     }
-#line 6738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 250:
-#line 1834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint16;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 251:
-#line 1840 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint16;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 252:
-#line 1846 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint16;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6771 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 253:
-#line 1852 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6782 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 254:
-#line 1858 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 255:
-#line 1864 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 256:
-#line 1870 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint64;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 257:
-#line 1876 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint64;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6826 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 258:
-#line 1882 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint64;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6837 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 259:
-#line 1888 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 6847 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 260:
-#line 1893 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 3);
-    }
-#line 6857 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 261:
-#line 1898 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 4);
-    }
-#line 6867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 262:
-#line 1903 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 6877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 263:
-#line 1908 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 3);
-    }
-#line 6887 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 264:
-#line 1913 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 4);
-    }
-#line 6897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 265:
-#line 1918 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 2);
-    }
-#line 6907 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 266:
-#line 1923 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 3);
-    }
-#line 6917 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 267:
-#line 1928 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 4);
-    }
-#line 6927 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 268:
-#line 1933 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 2);
-    }
-#line 6937 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 269:
-#line 1938 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 3);
-    }
-#line 6947 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 270:
-#line 1943 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 4);
-    }
-#line 6957 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 271:
-#line 1948 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 6968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 272:
-#line 1954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(3, 3);
-    }
-#line 6979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 273:
-#line 1960 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(4, 4);
-    }
-#line 6990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7062 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 274:
-#line 1966 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2037 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(2, 2);
+        (yyval.interm.type).basicType = EbtUint16;
+        (yyval.interm.type).setVector(2);
     }
-#line 7001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7073 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 275:
-#line 1972 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2043 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(2, 3);
+        (yyval.interm.type).basicType = EbtUint16;
+        (yyval.interm.type).setVector(3);
     }
-#line 7012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7084 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 276:
-#line 1978 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2049 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(2, 4);
+        (yyval.interm.type).basicType = EbtUint16;
+        (yyval.interm.type).setVector(4);
     }
-#line 7023 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7095 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 277:
-#line 1984 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2055 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(3, 2);
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(2);
     }
-#line 7034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7106 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 278:
-#line 1990 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2061 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(3, 3);
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(3);
     }
-#line 7045 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7117 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 279:
-#line 1996 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2067 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(3, 4);
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(4);
     }
-#line 7056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7128 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 280:
-#line 2002 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2073 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(4, 2);
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(2);
     }
-#line 7067 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7139 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 281:
-#line 2008 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2079 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(4, 3);
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(3);
     }
-#line 7078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7150 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 282:
-#line 2014 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2085 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(4, 4);
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(4);
     }
-#line 7089 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7161 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 283:
-#line 2020 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2091 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7174 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 284:
-#line 2026 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2099 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7187 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 285:
-#line 2032 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2107 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7122 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7200 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 286:
-#line 2038 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2115 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7133 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7213 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 287:
-#line 2044 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2123 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7144 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7226 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 288:
-#line 2050 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2131 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7239 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 289:
-#line 2056 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2139 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7252 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 290:
-#line 2062 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2147 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7177 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7265 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 291:
-#line 2068 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2155 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7278 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 292:
-#line 2074 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2163 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7291 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 293:
-#line 2080 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2171 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7304 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 294:
-#line 2086 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2179 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 7317 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 295:
+#line 2187 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 7328 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 296:
+#line 2193 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 7339 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 297:
+#line 2199 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 295:
-#line 2092 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 7232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 296:
-#line 2098 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 3);
-    }
-#line 7243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 297:
-#line 2104 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 4);
-    }
-#line 7254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7350 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 298:
-#line 2110 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2205 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7361 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 299:
-#line 2116 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2211 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7372 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 300:
-#line 2122 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2217 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(2, 4);
+    }
+#line 7383 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 301:
+#line 2223 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(3, 2);
+    }
+#line 7394 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 302:
+#line 2229 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 7405 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 303:
+#line 2235 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(3, 4);
+    }
+#line 7416 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 304:
+#line 2241 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(4, 2);
+    }
+#line 7427 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 305:
+#line 2247 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(4, 3);
+    }
+#line 7438 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 306:
+#line 2253 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 7449 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 307:
+#line 2259 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 7460 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 308:
+#line 2265 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 7471 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 309:
+#line 2271 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 7482 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 310:
+#line 2277 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 7493 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 311:
+#line 2283 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 3);
+    }
+#line 7504 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 312:
+#line 2289 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7287 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7515 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 301:
-#line 2128 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 313:
+#line 2295 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7526 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 302:
-#line 2134 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 314:
+#line 2301 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7537 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 303:
-#line 2140 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 315:
+#line 2307 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7548 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 304:
-#line 2146 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 316:
+#line 2313 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7559 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 305:
-#line 2152 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 317:
+#line 2319 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7570 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 306:
-#line 2158 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 318:
+#line 2325 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7353 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7581 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 307:
-#line 2164 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 319:
+#line 2331 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7592 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 308:
-#line 2170 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 320:
+#line 2337 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7603 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 309:
-#line 2176 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 321:
+#line 2343 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7386 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7614 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 310:
-#line 2182 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 322:
+#line 2349 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7625 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 311:
-#line 2188 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 323:
+#line 2355 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7636 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 312:
-#line 2194 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 324:
+#line 2361 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7419 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7647 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 313:
-#line 2200 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 325:
+#line 2367 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7430 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7658 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 314:
-#line 2206 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 326:
+#line 2373 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7669 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 315:
-#line 2212 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 327:
+#line 2379 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7452 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7680 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 316:
-#line 2218 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 328:
+#line 2385 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7691 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 317:
-#line 2224 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 329:
+#line 2391 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7702 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 318:
-#line 2230 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 330:
+#line 2397 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7713 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 319:
-#line 2236 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 331:
+#line 2403 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef NV_EXTENSIONS
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-       (yyval.interm.type).basicType = EbtAccStructNV;
-#endif
+       (yyval.interm.type).basicType = EbtAccStruct;
     }
-#line 7496 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7722 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 320:
-#line 2242 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 332:
+#line 2407 "glslang.y" /* yacc.c:1646  */
+    {
+       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+       (yyval.interm.type).basicType = EbtAccStruct;
+    }
+#line 7731 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 333:
+#line 2411 "glslang.y" /* yacc.c:1646  */
+    {
+       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+       (yyval.interm.type).basicType = EbtRayQuery;
+    }
+#line 7740 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 334:
+#line 2415 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtAtomicUint;
     }
-#line 7506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7750 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 321:
-#line 2247 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 335:
+#line 2420 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D);
     }
-#line 7516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7760 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 322:
-#line 2252 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 336:
+#line 2426 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
     }
-#line 7526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7770 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 323:
-#line 2257 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 337:
+#line 2431 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd3D);
     }
-#line 7536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7780 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 324:
-#line 2262 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 338:
+#line 2436 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube);
     }
-#line 7546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7790 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 325:
-#line 2267 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
-    }
-#line 7556 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 326:
-#line 2272 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 339:
+#line 2441 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
     }
-#line 7566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7800 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 327:
-#line 2277 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 340:
+#line 2446 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
     }
-#line 7576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7810 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 328:
-#line 2282 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
-    }
-#line 7586 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 329:
-#line 2287 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 341:
+#line 2451 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
     }
-#line 7596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7820 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 330:
-#line 2292 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
-    }
-#line 7606 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 331:
-#line 2297 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 342:
+#line 2456 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true);
     }
-#line 7616 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7830 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 332:
-#line 2302 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 343:
+#line 2462 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
+    }
+#line 7840 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 344:
+#line 2467 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
+    }
+#line 7850 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 345:
+#line 2472 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
+    }
+#line 7860 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 346:
+#line 2477 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true);
     }
-#line 7626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7870 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 333:
-#line 2307 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 347:
+#line 2482 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
     }
-#line 7636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7880 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 334:
-#line 2312 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 348:
+#line 2487 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D);
-#endif
     }
-#line 7649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7891 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 335:
-#line 2320 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 349:
+#line 2493 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D);
-#endif
     }
-#line 7662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7902 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 336:
-#line 2328 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 350:
+#line 2499 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd3D);
-#endif
     }
-#line 7675 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7913 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 337:
-#line 2336 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 351:
+#line 2505 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube);
-#endif
     }
-#line 7688 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7924 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 338:
-#line 2344 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 352:
+#line 2511 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true);
-#endif
     }
-#line 7701 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7935 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 339:
-#line 2352 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 353:
+#line 2517 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true);
-#endif
     }
-#line 7714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7946 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 340:
-#line 2360 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 354:
+#line 2523 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true);
-#endif
     }
-#line 7727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7957 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 341:
-#line 2368 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 355:
+#line 2529 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true);
-#endif
     }
-#line 7740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7968 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 342:
-#line 2376 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 356:
+#line 2535 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true);
-#endif
     }
-#line 7753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7979 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 343:
-#line 2384 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 357:
+#line 2541 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true);
-#endif
     }
-#line 7766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7990 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 344:
-#line 2392 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 358:
+#line 2547 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true);
-#endif
     }
-#line 7779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8001 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 345:
-#line 2400 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 359:
+#line 2553 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true);
-#endif
     }
-#line 7792 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8012 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 346:
-#line 2408 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 360:
+#line 2559 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true);
-#endif
     }
-#line 7805 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8023 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 347:
-#line 2416 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 361:
+#line 2565 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D);
     }
-#line 7815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8033 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 348:
-#line 2421 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 362:
+#line 2571 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D);
     }
-#line 7825 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8043 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 349:
-#line 2426 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 363:
+#line 2576 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd3D);
     }
-#line 7835 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8053 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 350:
-#line 2431 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 364:
+#line 2581 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube);
     }
-#line 7845 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8063 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 351:
-#line 2436 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
-    }
-#line 7855 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 352:
-#line 2441 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 365:
+#line 2586 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true);
     }
-#line 7865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8073 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 353:
-#line 2446 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
-    }
-#line 7875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 354:
-#line 2451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, Esd1D);
-    }
-#line 7885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 355:
-#line 2456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 366:
+#line 2591 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D);
     }
-#line 7895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8083 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 356:
-#line 2461 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 367:
+#line 2596 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd3D);
     }
-#line 7905 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8093 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 357:
-#line 2466 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 368:
+#line 2601 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube);
     }
-#line 7915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8103 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 358:
-#line 2471 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 369:
+#line 2607 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
+    }
+#line 8113 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 370:
+#line 2612 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
+    }
+#line 8123 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 371:
+#line 2617 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtUint, Esd1D);
+    }
+#line 8133 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 372:
+#line 2622 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D, true);
     }
-#line 7925 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8143 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 359:
-#line 2476 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
-    }
-#line 7935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 360:
-#line 2481 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 373:
+#line 2627 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube, true);
     }
-#line 7945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 361:
-#line 2486 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
-    }
-#line 7955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 362:
-#line 2491 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
-    }
-#line 7965 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 363:
-#line 2496 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat16, EsdRect);
-#endif
-    }
-#line 7978 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 364:
-#line 2504 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true);
-#endif
-    }
-#line 7991 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 365:
-#line 2512 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, EsdRect);
-    }
-#line 8001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 366:
-#line 2517 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, EsdRect);
-    }
-#line 8011 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 367:
-#line 2522 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
-    }
-#line 8021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 368:
-#line 2527 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer);
-#endif
-    }
-#line 8034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 369:
-#line 2535 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
-    }
-#line 8044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 370:
-#line 2540 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
-    }
-#line 8054 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 371:
-#line 2545 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true);
-    }
-#line 8064 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 372:
-#line 2550 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true);
-#endif
-    }
-#line 8077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 373:
-#line 2558 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true);
-    }
-#line 8087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8153 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 374:
-#line 2563 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true);
-    }
-#line 8097 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 375:
-#line 2568 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true);
-    }
-#line 8107 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 376:
-#line 2573 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true);
-#endif
-    }
-#line 8120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 377:
-#line 2581 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true);
-    }
-#line 8130 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 378:
-#line 2586 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true);
-    }
-#line 8140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 379:
-#line 2591 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setPureSampler(false);
-    }
-#line 8150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 380:
-#line 2596 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setPureSampler(true);
-    }
-#line 8160 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 381:
-#line 2601 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D);
-    }
-#line 8170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 382:
-#line 2606 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D);
-#endif
-    }
-#line 8183 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 383:
-#line 2614 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
-    }
-#line 8193 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 384:
-#line 2619 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D);
-#endif
-    }
-#line 8206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 385:
-#line 2627 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
-    }
-#line 8216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 386:
-#line 2632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D);
-#endif
-    }
-#line 8229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 387:
-#line 2640 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
-    }
-#line 8239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 388:
-#line 2645 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube);
-#endif
-    }
-#line 8252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 389:
-#line 2653 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true);
-    }
-#line 8262 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 390:
-#line 2658 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true);
-#endif
-    }
-#line 8275 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 391:
-#line 2666 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true);
-    }
-#line 8285 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 392:
-#line 2671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true);
-#endif
-    }
-#line 8298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 393:
-#line 2679 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2632 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true);
     }
-#line 8308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8163 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 394:
-#line 2684 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true);
-#endif
-    }
-#line 8321 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 395:
-#line 2692 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
-    }
-#line 8331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 396:
-#line 2697 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
-    }
-#line 8341 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 397:
-#line 2702 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
-    }
-#line 8351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 398:
-#line 2707 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
-    }
-#line 8361 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 399:
-#line 2712 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true);
-    }
-#line 8371 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 400:
-#line 2717 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true);
-    }
-#line 8381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 401:
-#line 2722 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 375:
+#line 2637 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true);
     }
-#line 8391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8173 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 402:
-#line 2727 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
-    }
-#line 8401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 403:
-#line 2732 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
-    }
-#line 8411 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 404:
-#line 2737 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
-    }
-#line 8421 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 405:
-#line 2742 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
-    }
-#line 8431 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 406:
-#line 2747 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true);
-    }
-#line 8441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 407:
-#line 2752 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true);
-    }
-#line 8451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 408:
-#line 2757 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 376:
+#line 2642 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true);
     }
-#line 8461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8183 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 377:
+#line 2648 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
+    }
+#line 8193 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 378:
+#line 2653 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
+    }
+#line 8203 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 379:
+#line 2658 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
+    }
+#line 8213 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 380:
+#line 2663 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true);
+    }
+#line 8223 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 381:
+#line 2668 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
+    }
+#line 8233 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 382:
+#line 2673 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
+    }
+#line 8243 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 383:
+#line 2678 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
+    }
+#line 8253 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 384:
+#line 2683 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
+    }
+#line 8263 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 385:
+#line 2688 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true);
+    }
+#line 8273 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 386:
+#line 2693 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
+    }
+#line 8283 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 387:
+#line 2698 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
+    }
+#line 8293 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 388:
+#line 2703 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
+    }
+#line 8303 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 389:
+#line 2708 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true);
+    }
+#line 8313 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 390:
+#line 2713 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setPureSampler(false);
+    }
+#line 8323 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 391:
+#line 2718 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setPureSampler(true);
+    }
+#line 8333 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 392:
+#line 2724 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
+    }
+#line 8343 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 393:
+#line 2729 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
+    }
+#line 8353 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 394:
+#line 2734 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, EsdRect);
+    }
+#line 8364 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 395:
+#line 2740 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true);
+    }
+#line 8375 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 396:
+#line 2746 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtInt, EsdRect);
+    }
+#line 8385 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 397:
+#line 2751 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtUint, EsdRect);
+    }
+#line 8395 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 398:
+#line 2756 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
+    }
+#line 8405 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 399:
+#line 2761 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer);
+    }
+#line 8416 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 400:
+#line 2767 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
+    }
+#line 8426 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 401:
+#line 2772 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
+    }
+#line 8436 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 402:
+#line 2777 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true);
+    }
+#line 8446 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 403:
+#line 2782 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true);
+    }
+#line 8457 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 404:
+#line 2788 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true);
+    }
+#line 8467 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 405:
+#line 2793 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true);
+    }
+#line 8477 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 406:
+#line 2798 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true);
+    }
+#line 8487 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 407:
+#line 2803 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true);
+    }
+#line 8498 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 408:
+#line 2809 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true);
+    }
+#line 8508 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 409:
-#line 2762 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2814 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true);
+    }
+#line 8518 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 410:
+#line 2819 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D);
+    }
+#line 8528 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 411:
+#line 2824 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D);
+    }
+#line 8539 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 412:
+#line 2830 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D);
+    }
+#line 8550 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 413:
+#line 2836 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D);
+    }
+#line 8561 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 414:
+#line 2842 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube);
+    }
+#line 8572 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 415:
+#line 2848 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true);
+    }
+#line 8582 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 416:
+#line 2853 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true);
+    }
+#line 8593 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 417:
+#line 2859 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true);
+    }
+#line 8604 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 418:
+#line 2865 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true);
+    }
+#line 8615 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 419:
+#line 2871 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
+    }
+#line 8625 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 420:
+#line 2876 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true);
+    }
+#line 8635 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 421:
+#line 2881 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
+    }
+#line 8645 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 422:
+#line 2886 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true);
+    }
+#line 8655 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 423:
+#line 2891 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect);
     }
-#line 8471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8665 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 410:
-#line 2767 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 424:
+#line 2896 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect);
-#endif
     }
-#line 8484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8676 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 411:
-#line 2775 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 425:
+#line 2902 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect);
     }
-#line 8494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8686 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 412:
-#line 2780 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 426:
+#line 2907 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect);
     }
-#line 8504 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8696 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 413:
-#line 2785 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 427:
+#line 2912 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer);
     }
-#line 8514 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8706 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 414:
-#line 2790 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 428:
+#line 2917 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer);
-#endif
     }
-#line 8527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8717 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 415:
-#line 2798 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 429:
+#line 2923 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer);
     }
-#line 8537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8727 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 416:
-#line 2803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 430:
+#line 2928 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer);
     }
-#line 8547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8737 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 417:
-#line 2808 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 431:
+#line 2933 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true);
     }
-#line 8557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8747 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 418:
-#line 2813 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 432:
+#line 2938 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
-#endif
     }
-#line 8570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8758 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 419:
-#line 2821 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 433:
+#line 2944 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true);
     }
-#line 8580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8768 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 420:
-#line 2826 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 434:
+#line 2949 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true);
     }
-#line 8590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8778 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 421:
-#line 2831 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 435:
+#line 2954 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true);
     }
-#line 8600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8788 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 422:
-#line 2836 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 436:
+#line 2959 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
-#endif
     }
-#line 8613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8799 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 423:
-#line 2844 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 437:
+#line 2965 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true);
     }
-#line 8623 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8809 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 424:
-#line 2849 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 438:
+#line 2970 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true);
     }
-#line 8633 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8819 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 425:
-#line 2854 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 439:
+#line 2975 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D);
     }
-#line 8643 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8829 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 426:
-#line 2859 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 440:
+#line 2980 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D);
-#endif
     }
-#line 8656 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8840 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 427:
-#line 2867 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 441:
+#line 2986 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D);
     }
-#line 8666 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8850 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 428:
-#line 2872 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 442:
+#line 2991 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D);
     }
-#line 8676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8860 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 429:
-#line 2877 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 443:
+#line 2996 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D);
     }
-#line 8686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8870 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 430:
-#line 2882 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 444:
+#line 3001 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D);
-#endif
     }
-#line 8699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8881 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 431:
-#line 2890 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 445:
+#line 3007 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D);
     }
-#line 8709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8891 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 432:
-#line 2895 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 446:
+#line 3012 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D);
     }
-#line 8719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8901 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 433:
-#line 2900 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 447:
+#line 3017 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D);
     }
-#line 8729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8911 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 434:
-#line 2905 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 448:
+#line 3022 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D);
-#endif
     }
-#line 8742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8922 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 435:
-#line 2913 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 449:
+#line 3028 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd3D);
     }
-#line 8752 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8932 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 436:
-#line 2918 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 450:
+#line 3033 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd3D);
     }
-#line 8762 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8942 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 437:
-#line 2923 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 451:
+#line 3038 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect);
     }
-#line 8772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8952 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 438:
-#line 2928 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 452:
+#line 3043 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect);
-#endif
     }
-#line 8785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8963 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 439:
-#line 2936 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 453:
+#line 3049 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdRect);
     }
-#line 8795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8973 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 440:
-#line 2941 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 454:
+#line 3054 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdRect);
     }
-#line 8805 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8983 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 441:
-#line 2946 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 455:
+#line 3059 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube);
     }
-#line 8815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8993 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 442:
-#line 2951 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 456:
+#line 3064 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube);
-#endif
     }
-#line 8828 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9004 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 443:
-#line 2959 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 457:
+#line 3070 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube);
     }
-#line 8838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9014 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 444:
-#line 2964 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 458:
+#line 3075 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube);
     }
-#line 8848 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9024 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 445:
-#line 2969 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 459:
+#line 3080 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer);
     }
-#line 8858 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9034 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 446:
-#line 2974 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 460:
+#line 3085 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer);
-#endif
     }
-#line 8871 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9045 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 447:
-#line 2982 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 461:
+#line 3091 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer);
     }
-#line 8881 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9055 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 448:
-#line 2987 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 462:
+#line 3096 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer);
     }
-#line 8891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9065 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 449:
-#line 2992 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 463:
+#line 3101 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true);
     }
-#line 8901 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9075 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 450:
-#line 2997 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 464:
+#line 3106 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true);
-#endif
     }
-#line 8914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9086 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 451:
-#line 3005 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 465:
+#line 3112 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true);
     }
-#line 8924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9096 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 452:
-#line 3010 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 466:
+#line 3117 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true);
     }
-#line 8934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9106 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 453:
-#line 3015 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 467:
+#line 3122 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true);
     }
-#line 8944 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9116 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 454:
-#line 3020 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 468:
+#line 3127 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true);
-#endif
     }
-#line 8957 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9127 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 455:
-#line 3028 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 469:
+#line 3133 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true);
     }
-#line 8967 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9137 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 456:
-#line 3033 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 470:
+#line 3138 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true);
     }
-#line 8977 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9147 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 457:
-#line 3038 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 471:
+#line 3143 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true);
     }
-#line 8987 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9157 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 458:
-#line 3043 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 472:
+#line 3148 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true);
-#endif
     }
-#line 9000 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9168 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 459:
-#line 3051 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 473:
+#line 3154 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true);
     }
-#line 9010 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9178 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 460:
-#line 3056 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 474:
+#line 3159 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true);
     }
-#line 9020 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9188 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 461:
-#line 3061 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 475:
+#line 3164 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true);
     }
-#line 9030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9198 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 462:
-#line 3066 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 476:
+#line 3169 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true);
-#endif
     }
-#line 9043 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9209 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 463:
-#line 3074 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 477:
+#line 3175 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true);
     }
-#line 9053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9219 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 464:
-#line 3079 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 478:
+#line 3180 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true);
     }
-#line 9063 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9229 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 465:
-#line 3084 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 479:
+#line 3185 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true);
     }
-#line 9073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9239 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 466:
-#line 3089 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 480:
+#line 3190 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true);
-#endif
     }
-#line 9086 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9250 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 467:
-#line 3097 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 481:
+#line 3196 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true);
     }
-#line 9096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9260 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 468:
-#line 3102 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 482:
+#line 3201 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true);
     }
-#line 9106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9270 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 469:
-#line 3107 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 483:
+#line 3206 "glslang.y" /* yacc.c:1646  */
     {  // GL_OES_EGL_image_external
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
         (yyval.interm.type).sampler.external = true;
     }
-#line 9117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9281 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 470:
-#line 3113 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 484:
+#line 3212 "glslang.y" /* yacc.c:1646  */
+    { // GL_EXT_YUV_target
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
+        (yyval.interm.type).sampler.yuv = true;
+    }
+#line 9292 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 485:
+#line 3218 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat);
     }
-#line 9128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9303 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 471:
-#line 3119 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 486:
+#line 3224 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat, true);
     }
-#line 9139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9314 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 472:
-#line 3125 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 487:
+#line 3230 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat16);
-#endif
     }
-#line 9153 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9326 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 473:
-#line 3134 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 488:
+#line 3237 "glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat16, true);
-#endif
     }
-#line 9167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9338 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 474:
-#line 3143 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 489:
+#line 3244 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt);
     }
-#line 9178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9349 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 475:
-#line 3149 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 490:
+#line 3250 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt, true);
     }
-#line 9189 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9360 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 476:
-#line 3155 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 491:
+#line 3256 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint);
     }
-#line 9200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9371 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 477:
-#line 3161 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 492:
+#line 3262 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint, true);
     }
-#line 9211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9382 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 478:
-#line 3167 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 493:
+#line 3268 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.fcoopmatCheck((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).coopmat = true;
+    }
+#line 9393 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 494:
+#line 3274 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).coopmat = true;
+    }
+#line 9404 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 495:
+#line 3280 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).coopmat = true;
+    }
+#line 9415 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 496:
+#line 3287 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type));
     }
-#line 9221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9425 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 479:
-#line 3172 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 497:
+#line 3292 "glslang.y" /* yacc.c:1646  */
     {
         //
         // This is for user defined type names.  The lexical phase looked up the
@@ -9235,47 +9439,47 @@
         } else
             parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
     }
-#line 9239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9443 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 480:
-#line 3188 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 498:
+#line 3308 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh);
     }
-#line 9249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9453 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 481:
-#line 3193 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 499:
+#line 3313 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium);
     }
-#line 9259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9463 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 482:
-#line 3198 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 500:
+#line 3318 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow);
     }
-#line 9269 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9473 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 483:
-#line 3206 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 501:
+#line 3326 "glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 9275 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9479 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 484:
-#line 3206 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 502:
+#line 3326 "glslang.y" /* yacc.c:1646  */
     {
         TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
         parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
@@ -9287,17 +9491,17 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 9291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9495 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 485:
-#line 3217 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 503:
+#line 3337 "glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 9297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9501 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 486:
-#line 3217 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 504:
+#line 3337 "glslang.y" /* yacc.c:1646  */
     {
         TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
         (yyval.interm.type).init((yyvsp[-4].lex).loc);
@@ -9305,19 +9509,19 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 9309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9513 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 487:
-#line 3227 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 505:
+#line 3347 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
     }
-#line 9317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9521 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 488:
-#line 3230 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 506:
+#line 3350 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
         for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
@@ -9328,16 +9532,16 @@
             (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
         }
     }
-#line 9332 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9536 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 489:
-#line 3243 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 507:
+#line 3363 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
-            if (parseContext.profile == EEsProfile)
+            if (parseContext.isEsProfile())
                 parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
         }
 
@@ -9355,16 +9559,16 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 9359 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9563 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 490:
-#line 3265 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 508:
+#line 3385 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
-            if (parseContext.profile == EEsProfile)
+            if (parseContext.isEsProfile())
                 parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
         }
 
@@ -9384,38 +9588,38 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 9388 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9592 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 491:
-#line 3292 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 509:
+#line 3412 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = new TTypeList;
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 9397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9601 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 492:
-#line 3296 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 510:
+#line 3416 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 9405 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9609 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 493:
-#line 3302 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 511:
+#line 3422 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeLine).type = new TType(EbtVoid);
         (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc;
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string);
     }
-#line 9415 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9619 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 494:
-#line 3307 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 512:
+#line 3427 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes);
 
@@ -9424,219 +9628,235 @@
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
         (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes);
     }
-#line 9428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9632 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 495:
-#line 3318 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 513:
+#line 3438 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 9436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9640 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 496:
-#line 3321 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 514:
+#line 3442 "glslang.y" /* yacc.c:1646  */
     {
         const char* initFeature = "{ } style initializers";
         parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature);
         parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
     }
-#line 9447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9651 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 497:
-#line 3327 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 515:
+#line 3448 "glslang.y" /* yacc.c:1646  */
     {
         const char* initFeature = "{ } style initializers";
         parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature);
         parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
         (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 9458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9662 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 498:
-#line 3336 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 516:
+#line 3459 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
     }
-#line 9466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9670 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 499:
-#line 3339 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 517:
+#line 3462 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
     }
-#line 9474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9678 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 500:
-#line 3345 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 518:
+#line 3469 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9684 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 501:
-#line 3349 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 519:
+#line 3473 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9486 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9690 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 502:
-#line 3350 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 520:
+#line 3474 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9492 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9696 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 503:
-#line 3356 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 521:
+#line 3480 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9702 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 504:
-#line 3357 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 522:
+#line 3481 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9504 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9708 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 505:
-#line 3358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 523:
+#line 3482 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9714 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 506:
-#line 3359 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 524:
+#line 3483 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9720 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 507:
-#line 3360 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 525:
+#line 3484 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9522 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9726 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 508:
-#line 3361 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 526:
+#line 3485 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9732 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 509:
-#line 3362 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 527:
+#line 3486 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9534 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9738 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 510:
-#line 3366 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 528:
+#line 3488 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9744 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 529:
+#line 3494 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "demote");
+        parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_demote_to_helper_invocation, "demote");
+        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDemote, (yyvsp[-1].lex).loc);
+    }
+#line 9754 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 530:
+#line 3503 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = 0; }
-#line 9540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9760 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 511:
-#line 3367 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 531:
+#line 3504 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 9549 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9769 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 512:
-#line 3371 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 532:
+#line 3508 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 9558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9778 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 513:
-#line 3375 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 533:
+#line 3512 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate())
             (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
     }
-#line 9568 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9788 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 514:
-#line 3383 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 534:
+#line 3520 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9574 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9794 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 515:
-#line 3384 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 535:
+#line 3521 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9800 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 516:
-#line 3388 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 536:
+#line 3525 "glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9808 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 517:
-#line 3391 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 537:
+#line 3528 "glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9817 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 518:
-#line 3395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 538:
+#line 3532 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9827 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 519:
-#line 3400 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 539:
+#line 3537 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9618 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9838 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 520:
-#line 3409 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 540:
+#line 3546 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 9626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9846 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 521:
-#line 3412 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 541:
+#line 3549 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate())
             (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode);
     }
-#line 9636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9856 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 522:
-#line 3420 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 542:
+#line 3557 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
@@ -9645,11 +9865,11 @@
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 9649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9869 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 523:
-#line 3428 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 543:
+#line 3565 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
                                             (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
@@ -9658,76 +9878,76 @@
         } else
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 9662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9882 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 524:
-#line 3439 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 544:
+#line 3576 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = 0; }
-#line 9668 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9888 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 525:
-#line 3440 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 545:
+#line 3577 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 9674 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9894 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 526:
-#line 3444 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 546:
+#line 3581 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9902 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 527:
-#line 3447 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 547:
+#line 3585 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9911 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 528:
-#line 3453 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 548:
+#line 3592 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-2].interm.intermTypedNode));
         (yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yyvsp[-4].lex).loc);
     }
-#line 9700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9920 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 529:
-#line 3460 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 549:
+#line 3599 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
     }
-#line 9709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9929 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 530:
-#line 3464 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 550:
+#line 3603 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 9718 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9938 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 531:
-#line 3472 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 551:
+#line 3611 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
     }
-#line 9727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9947 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 532:
-#line 3476 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 552:
+#line 3615 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
 
@@ -9738,28 +9958,28 @@
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 9742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9962 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 533:
-#line 3489 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 553:
+#line 3628 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9970 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 534:
-#line 3492 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 554:
+#line 3632 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9979 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 535:
-#line 3498 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 555:
+#line 3639 "glslang.y" /* yacc.c:1646  */
     {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
@@ -9768,11 +9988,11 @@
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 9772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9992 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 536:
-#line 3506 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 556:
+#line 3647 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0);
         delete parseContext.switchSequenceStack.back();
@@ -9782,27 +10002,27 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9786 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10006 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 537:
-#line 3518 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 557:
+#line 3659 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 9794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10014 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 538:
-#line 3521 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 558:
+#line 3662 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10022 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 539:
-#line 3527 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 559:
+#line 3668 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -9815,11 +10035,11 @@
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
         }
     }
-#line 9819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10039 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 540:
-#line 3539 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 560:
+#line 3680 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -9829,28 +10049,28 @@
         else
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
     }
-#line 9833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10053 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 541:
-#line 3551 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 561:
+#line 3692 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9841 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10061 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 542:
-#line 3554 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 562:
+#line 3696 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10070 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 543:
-#line 3560 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 563:
+#line 3703 "glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
@@ -9859,11 +10079,11 @@
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10083 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 544:
-#line 3568 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 564:
+#line 3711 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, true, (yyvsp[-5].lex).loc);
@@ -9871,21 +10091,21 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10095 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 545:
-#line 3575 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 565:
+#line 3718 "glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10105 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 546:
-#line 3580 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 566:
+#line 3723 "glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@@ -9897,22 +10117,22 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9901 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10121 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 547:
-#line 3591 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 567:
+#line 3734 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9912 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10132 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 548:
-#line 3597 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 568:
+#line 3740 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
@@ -9925,81 +10145,81 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10149 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 549:
-#line 3612 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 569:
+#line 3755 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9937 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10157 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 550:
-#line 3615 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 570:
+#line 3758 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10165 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 551:
-#line 3621 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 571:
+#line 3764 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 9953 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10173 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 552:
-#line 3624 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 572:
+#line 3767 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = 0;
     }
-#line 9961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10181 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 553:
-#line 3630 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 573:
+#line 3773 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 9970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10190 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 554:
-#line 3634 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 574:
+#line 3777 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
     }
-#line 9979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10199 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 555:
-#line 3641 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 575:
+#line 3784 "glslang.y" /* yacc.c:1646  */
     {
         if (parseContext.loopNestingLevel <= 0)
             parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", "");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc);
     }
-#line 9989 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10209 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 556:
-#line 3646 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 576:
+#line 3789 "glslang.y" /* yacc.c:1646  */
     {
         if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
             parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", "");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc);
     }
-#line 9999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10219 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 557:
-#line 3651 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 577:
+#line 3794 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@@ -10007,83 +10227,83 @@
         if (parseContext.inMain)
             parseContext.postEntryPointReturn = true;
     }
-#line 10011 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10231 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 558:
-#line 3658 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 578:
+#line 3801 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 10019 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10239 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 559:
-#line 3661 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 579:
+#line 3804 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
     }
-#line 10028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10248 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 560:
-#line 3670 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 580:
+#line 3813 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 10037 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10257 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 561:
-#line 3674 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 581:
+#line 3817 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[0].interm.intermNode) != nullptr) {
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
             parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
         }
     }
-#line 10048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10268 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 562:
-#line 3683 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 582:
+#line 3826 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10276 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 563:
-#line 3686 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 583:
+#line 3829 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10064 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10284 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 564:
-#line 3689 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 584:
+#line 3833 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon");
         parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
         (yyval.interm.intermNode) = nullptr;
     }
-#line 10074 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10294 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 565:
-#line 3697 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 585:
+#line 3842 "glslang.y" /* yacc.c:1646  */
     {
         (yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */);
         (yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function);
     }
-#line 10083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10303 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 566:
-#line 3701 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 586:
+#line 3846 "glslang.y" /* yacc.c:1646  */
     {
         //   May be best done as post process phase on intermediate code
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@@ -10099,52 +10319,52 @@
         (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
         (yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
     }
-#line 10103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10323 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 567:
-#line 3719 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 587:
+#line 3865 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
         parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute");
     }
-#line 10112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10332 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 568:
-#line 3725 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 588:
+#line 3871 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = (yyvsp[0].interm.attributes);
     }
-#line 10120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10340 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 569:
-#line 3728 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 589:
+#line 3874 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
     }
-#line 10128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10348 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 570:
-#line 3733 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 590:
+#line 3879 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
     }
-#line 10136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10356 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 571:
-#line 3736 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 591:
+#line 3882 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 10144 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10364 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
 
-#line 10148 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10368 "glslang_tab.cpp" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -10372,5 +10592,6 @@
 #endif
   return yyresult;
 }
-#line 3740 "MachineIndependent/glslang.y" /* yacc.c:1906  */
+#line 3887 "glslang.y" /* yacc.c:1906  */
+
 
diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h
index 50bbcfc..31c8f90 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp.h
+++ b/glslang/MachineIndependent/glslang_tab.cpp.h
@@ -30,8 +30,8 @@
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
-#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
-# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
+#ifndef YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
+# define YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 1
@@ -45,409 +45,423 @@
 # define YYTOKENTYPE
   enum yytokentype
   {
-    ATTRIBUTE = 258,
-    VARYING = 259,
-    FLOAT16_T = 260,
-    FLOAT = 261,
-    FLOAT32_T = 262,
-    DOUBLE = 263,
-    FLOAT64_T = 264,
-    CONST = 265,
-    BOOL = 266,
-    INT = 267,
-    UINT = 268,
-    INT64_T = 269,
-    UINT64_T = 270,
-    INT32_T = 271,
-    UINT32_T = 272,
-    INT16_T = 273,
-    UINT16_T = 274,
-    INT8_T = 275,
-    UINT8_T = 276,
-    BREAK = 277,
-    CONTINUE = 278,
-    DO = 279,
-    ELSE = 280,
-    FOR = 281,
-    IF = 282,
-    DISCARD = 283,
-    RETURN = 284,
-    SWITCH = 285,
-    CASE = 286,
-    DEFAULT = 287,
-    SUBROUTINE = 288,
-    BVEC2 = 289,
-    BVEC3 = 290,
-    BVEC4 = 291,
-    IVEC2 = 292,
-    IVEC3 = 293,
-    IVEC4 = 294,
-    UVEC2 = 295,
-    UVEC3 = 296,
-    UVEC4 = 297,
-    I64VEC2 = 298,
-    I64VEC3 = 299,
-    I64VEC4 = 300,
-    U64VEC2 = 301,
-    U64VEC3 = 302,
-    U64VEC4 = 303,
-    I32VEC2 = 304,
-    I32VEC3 = 305,
-    I32VEC4 = 306,
-    U32VEC2 = 307,
-    U32VEC3 = 308,
-    U32VEC4 = 309,
-    I16VEC2 = 310,
-    I16VEC3 = 311,
-    I16VEC4 = 312,
-    U16VEC2 = 313,
-    U16VEC3 = 314,
-    U16VEC4 = 315,
-    I8VEC2 = 316,
-    I8VEC3 = 317,
-    I8VEC4 = 318,
-    U8VEC2 = 319,
-    U8VEC3 = 320,
-    U8VEC4 = 321,
-    VEC2 = 322,
-    VEC3 = 323,
-    VEC4 = 324,
-    MAT2 = 325,
-    MAT3 = 326,
-    MAT4 = 327,
-    CENTROID = 328,
-    IN = 329,
-    OUT = 330,
-    INOUT = 331,
-    UNIFORM = 332,
-    PATCH = 333,
-    SAMPLE = 334,
-    BUFFER = 335,
-    SHARED = 336,
-    NONUNIFORM = 337,
-    PAYLOADNV = 338,
-    PAYLOADINNV = 339,
-    HITATTRNV = 340,
-    CALLDATANV = 341,
-    CALLDATAINNV = 342,
-    COHERENT = 343,
-    VOLATILE = 344,
-    RESTRICT = 345,
-    READONLY = 346,
-    WRITEONLY = 347,
-    DEVICECOHERENT = 348,
-    QUEUEFAMILYCOHERENT = 349,
-    WORKGROUPCOHERENT = 350,
-    SUBGROUPCOHERENT = 351,
-    NONPRIVATE = 352,
-    DVEC2 = 353,
-    DVEC3 = 354,
-    DVEC4 = 355,
-    DMAT2 = 356,
-    DMAT3 = 357,
-    DMAT4 = 358,
-    F16VEC2 = 359,
-    F16VEC3 = 360,
-    F16VEC4 = 361,
-    F16MAT2 = 362,
-    F16MAT3 = 363,
-    F16MAT4 = 364,
-    F32VEC2 = 365,
-    F32VEC3 = 366,
-    F32VEC4 = 367,
-    F32MAT2 = 368,
-    F32MAT3 = 369,
-    F32MAT4 = 370,
-    F64VEC2 = 371,
-    F64VEC3 = 372,
-    F64VEC4 = 373,
-    F64MAT2 = 374,
-    F64MAT3 = 375,
-    F64MAT4 = 376,
-    NOPERSPECTIVE = 377,
-    FLAT = 378,
-    SMOOTH = 379,
-    LAYOUT = 380,
-    EXPLICITINTERPAMD = 381,
-    PERVERTEXNV = 382,
-    PERPRIMITIVENV = 383,
-    PERVIEWNV = 384,
-    PERTASKNV = 385,
-    MAT2X2 = 386,
-    MAT2X3 = 387,
-    MAT2X4 = 388,
-    MAT3X2 = 389,
-    MAT3X3 = 390,
-    MAT3X4 = 391,
-    MAT4X2 = 392,
-    MAT4X3 = 393,
-    MAT4X4 = 394,
-    DMAT2X2 = 395,
-    DMAT2X3 = 396,
-    DMAT2X4 = 397,
-    DMAT3X2 = 398,
-    DMAT3X3 = 399,
-    DMAT3X4 = 400,
-    DMAT4X2 = 401,
-    DMAT4X3 = 402,
-    DMAT4X4 = 403,
-    F16MAT2X2 = 404,
-    F16MAT2X3 = 405,
-    F16MAT2X4 = 406,
-    F16MAT3X2 = 407,
-    F16MAT3X3 = 408,
-    F16MAT3X4 = 409,
-    F16MAT4X2 = 410,
-    F16MAT4X3 = 411,
-    F16MAT4X4 = 412,
-    F32MAT2X2 = 413,
-    F32MAT2X3 = 414,
-    F32MAT2X4 = 415,
-    F32MAT3X2 = 416,
-    F32MAT3X3 = 417,
-    F32MAT3X4 = 418,
-    F32MAT4X2 = 419,
-    F32MAT4X3 = 420,
-    F32MAT4X4 = 421,
-    F64MAT2X2 = 422,
-    F64MAT2X3 = 423,
-    F64MAT2X4 = 424,
-    F64MAT3X2 = 425,
-    F64MAT3X3 = 426,
-    F64MAT3X4 = 427,
-    F64MAT4X2 = 428,
-    F64MAT4X3 = 429,
-    F64MAT4X4 = 430,
-    ATOMIC_UINT = 431,
-    ACCSTRUCTNV = 432,
-    SAMPLER1D = 433,
-    SAMPLER2D = 434,
-    SAMPLER3D = 435,
-    SAMPLERCUBE = 436,
-    SAMPLER1DSHADOW = 437,
-    SAMPLER2DSHADOW = 438,
-    SAMPLERCUBESHADOW = 439,
-    SAMPLER1DARRAY = 440,
-    SAMPLER2DARRAY = 441,
-    SAMPLER1DARRAYSHADOW = 442,
-    SAMPLER2DARRAYSHADOW = 443,
-    ISAMPLER1D = 444,
-    ISAMPLER2D = 445,
-    ISAMPLER3D = 446,
-    ISAMPLERCUBE = 447,
-    ISAMPLER1DARRAY = 448,
-    ISAMPLER2DARRAY = 449,
-    USAMPLER1D = 450,
-    USAMPLER2D = 451,
-    USAMPLER3D = 452,
-    USAMPLERCUBE = 453,
-    USAMPLER1DARRAY = 454,
-    USAMPLER2DARRAY = 455,
-    SAMPLER2DRECT = 456,
-    SAMPLER2DRECTSHADOW = 457,
-    ISAMPLER2DRECT = 458,
-    USAMPLER2DRECT = 459,
-    SAMPLERBUFFER = 460,
-    ISAMPLERBUFFER = 461,
-    USAMPLERBUFFER = 462,
-    SAMPLERCUBEARRAY = 463,
-    SAMPLERCUBEARRAYSHADOW = 464,
-    ISAMPLERCUBEARRAY = 465,
-    USAMPLERCUBEARRAY = 466,
-    SAMPLER2DMS = 467,
-    ISAMPLER2DMS = 468,
-    USAMPLER2DMS = 469,
-    SAMPLER2DMSARRAY = 470,
-    ISAMPLER2DMSARRAY = 471,
-    USAMPLER2DMSARRAY = 472,
-    SAMPLEREXTERNALOES = 473,
-    F16SAMPLER1D = 474,
-    F16SAMPLER2D = 475,
-    F16SAMPLER3D = 476,
-    F16SAMPLER2DRECT = 477,
-    F16SAMPLERCUBE = 478,
-    F16SAMPLER1DARRAY = 479,
-    F16SAMPLER2DARRAY = 480,
-    F16SAMPLERCUBEARRAY = 481,
-    F16SAMPLERBUFFER = 482,
-    F16SAMPLER2DMS = 483,
-    F16SAMPLER2DMSARRAY = 484,
-    F16SAMPLER1DSHADOW = 485,
-    F16SAMPLER2DSHADOW = 486,
-    F16SAMPLER1DARRAYSHADOW = 487,
-    F16SAMPLER2DARRAYSHADOW = 488,
-    F16SAMPLER2DRECTSHADOW = 489,
-    F16SAMPLERCUBESHADOW = 490,
-    F16SAMPLERCUBEARRAYSHADOW = 491,
-    SAMPLER = 492,
-    SAMPLERSHADOW = 493,
-    TEXTURE1D = 494,
-    TEXTURE2D = 495,
-    TEXTURE3D = 496,
-    TEXTURECUBE = 497,
-    TEXTURE1DARRAY = 498,
-    TEXTURE2DARRAY = 499,
-    ITEXTURE1D = 500,
-    ITEXTURE2D = 501,
-    ITEXTURE3D = 502,
-    ITEXTURECUBE = 503,
-    ITEXTURE1DARRAY = 504,
-    ITEXTURE2DARRAY = 505,
-    UTEXTURE1D = 506,
-    UTEXTURE2D = 507,
-    UTEXTURE3D = 508,
-    UTEXTURECUBE = 509,
-    UTEXTURE1DARRAY = 510,
-    UTEXTURE2DARRAY = 511,
-    TEXTURE2DRECT = 512,
-    ITEXTURE2DRECT = 513,
-    UTEXTURE2DRECT = 514,
-    TEXTUREBUFFER = 515,
-    ITEXTUREBUFFER = 516,
-    UTEXTUREBUFFER = 517,
-    TEXTURECUBEARRAY = 518,
-    ITEXTURECUBEARRAY = 519,
-    UTEXTURECUBEARRAY = 520,
-    TEXTURE2DMS = 521,
-    ITEXTURE2DMS = 522,
-    UTEXTURE2DMS = 523,
-    TEXTURE2DMSARRAY = 524,
-    ITEXTURE2DMSARRAY = 525,
-    UTEXTURE2DMSARRAY = 526,
-    F16TEXTURE1D = 527,
-    F16TEXTURE2D = 528,
-    F16TEXTURE3D = 529,
-    F16TEXTURE2DRECT = 530,
-    F16TEXTURECUBE = 531,
-    F16TEXTURE1DARRAY = 532,
-    F16TEXTURE2DARRAY = 533,
-    F16TEXTURECUBEARRAY = 534,
-    F16TEXTUREBUFFER = 535,
-    F16TEXTURE2DMS = 536,
-    F16TEXTURE2DMSARRAY = 537,
-    SUBPASSINPUT = 538,
-    SUBPASSINPUTMS = 539,
-    ISUBPASSINPUT = 540,
-    ISUBPASSINPUTMS = 541,
-    USUBPASSINPUT = 542,
-    USUBPASSINPUTMS = 543,
-    F16SUBPASSINPUT = 544,
-    F16SUBPASSINPUTMS = 545,
-    IMAGE1D = 546,
-    IIMAGE1D = 547,
-    UIMAGE1D = 548,
-    IMAGE2D = 549,
-    IIMAGE2D = 550,
-    UIMAGE2D = 551,
-    IMAGE3D = 552,
-    IIMAGE3D = 553,
-    UIMAGE3D = 554,
-    IMAGE2DRECT = 555,
-    IIMAGE2DRECT = 556,
-    UIMAGE2DRECT = 557,
-    IMAGECUBE = 558,
-    IIMAGECUBE = 559,
-    UIMAGECUBE = 560,
-    IMAGEBUFFER = 561,
-    IIMAGEBUFFER = 562,
-    UIMAGEBUFFER = 563,
-    IMAGE1DARRAY = 564,
-    IIMAGE1DARRAY = 565,
-    UIMAGE1DARRAY = 566,
-    IMAGE2DARRAY = 567,
-    IIMAGE2DARRAY = 568,
-    UIMAGE2DARRAY = 569,
-    IMAGECUBEARRAY = 570,
-    IIMAGECUBEARRAY = 571,
-    UIMAGECUBEARRAY = 572,
-    IMAGE2DMS = 573,
-    IIMAGE2DMS = 574,
-    UIMAGE2DMS = 575,
-    IMAGE2DMSARRAY = 576,
-    IIMAGE2DMSARRAY = 577,
-    UIMAGE2DMSARRAY = 578,
-    F16IMAGE1D = 579,
-    F16IMAGE2D = 580,
-    F16IMAGE3D = 581,
-    F16IMAGE2DRECT = 582,
-    F16IMAGECUBE = 583,
-    F16IMAGE1DARRAY = 584,
-    F16IMAGE2DARRAY = 585,
-    F16IMAGECUBEARRAY = 586,
-    F16IMAGEBUFFER = 587,
-    F16IMAGE2DMS = 588,
-    F16IMAGE2DMSARRAY = 589,
-    STRUCT = 590,
-    VOID = 591,
-    WHILE = 592,
-    IDENTIFIER = 593,
-    TYPE_NAME = 594,
-    FLOATCONSTANT = 595,
-    DOUBLECONSTANT = 596,
-    INT16CONSTANT = 597,
-    UINT16CONSTANT = 598,
-    INT32CONSTANT = 599,
-    UINT32CONSTANT = 600,
-    INTCONSTANT = 601,
-    UINTCONSTANT = 602,
-    INT64CONSTANT = 603,
-    UINT64CONSTANT = 604,
-    BOOLCONSTANT = 605,
-    FLOAT16CONSTANT = 606,
-    LEFT_OP = 607,
-    RIGHT_OP = 608,
-    INC_OP = 609,
-    DEC_OP = 610,
-    LE_OP = 611,
-    GE_OP = 612,
-    EQ_OP = 613,
-    NE_OP = 614,
-    AND_OP = 615,
-    OR_OP = 616,
-    XOR_OP = 617,
-    MUL_ASSIGN = 618,
-    DIV_ASSIGN = 619,
-    ADD_ASSIGN = 620,
-    MOD_ASSIGN = 621,
-    LEFT_ASSIGN = 622,
-    RIGHT_ASSIGN = 623,
-    AND_ASSIGN = 624,
-    XOR_ASSIGN = 625,
-    OR_ASSIGN = 626,
-    SUB_ASSIGN = 627,
-    LEFT_PAREN = 628,
-    RIGHT_PAREN = 629,
-    LEFT_BRACKET = 630,
-    RIGHT_BRACKET = 631,
-    LEFT_BRACE = 632,
-    RIGHT_BRACE = 633,
-    DOT = 634,
-    COMMA = 635,
-    COLON = 636,
-    EQUAL = 637,
-    SEMICOLON = 638,
-    BANG = 639,
-    DASH = 640,
-    TILDE = 641,
-    PLUS = 642,
-    STAR = 643,
-    SLASH = 644,
-    PERCENT = 645,
-    LEFT_ANGLE = 646,
-    RIGHT_ANGLE = 647,
-    VERTICAL_BAR = 648,
-    CARET = 649,
-    AMPERSAND = 650,
-    QUESTION = 651,
-    INVARIANT = 652,
-    PRECISE = 653,
-    HIGH_PRECISION = 654,
-    MEDIUM_PRECISION = 655,
-    LOW_PRECISION = 656,
-    PRECISION = 657,
-    PACKED = 658,
-    RESOURCE = 659,
-    SUPERP = 660
+    CONST = 258,
+    BOOL = 259,
+    INT = 260,
+    UINT = 261,
+    FLOAT = 262,
+    BVEC2 = 263,
+    BVEC3 = 264,
+    BVEC4 = 265,
+    IVEC2 = 266,
+    IVEC3 = 267,
+    IVEC4 = 268,
+    UVEC2 = 269,
+    UVEC3 = 270,
+    UVEC4 = 271,
+    VEC2 = 272,
+    VEC3 = 273,
+    VEC4 = 274,
+    MAT2 = 275,
+    MAT3 = 276,
+    MAT4 = 277,
+    MAT2X2 = 278,
+    MAT2X3 = 279,
+    MAT2X4 = 280,
+    MAT3X2 = 281,
+    MAT3X3 = 282,
+    MAT3X4 = 283,
+    MAT4X2 = 284,
+    MAT4X3 = 285,
+    MAT4X4 = 286,
+    SAMPLER2D = 287,
+    SAMPLER3D = 288,
+    SAMPLERCUBE = 289,
+    SAMPLER2DSHADOW = 290,
+    SAMPLERCUBESHADOW = 291,
+    SAMPLER2DARRAY = 292,
+    SAMPLER2DARRAYSHADOW = 293,
+    ISAMPLER2D = 294,
+    ISAMPLER3D = 295,
+    ISAMPLERCUBE = 296,
+    ISAMPLER2DARRAY = 297,
+    USAMPLER2D = 298,
+    USAMPLER3D = 299,
+    USAMPLERCUBE = 300,
+    USAMPLER2DARRAY = 301,
+    SAMPLER = 302,
+    SAMPLERSHADOW = 303,
+    TEXTURE2D = 304,
+    TEXTURE3D = 305,
+    TEXTURECUBE = 306,
+    TEXTURE2DARRAY = 307,
+    ITEXTURE2D = 308,
+    ITEXTURE3D = 309,
+    ITEXTURECUBE = 310,
+    ITEXTURE2DARRAY = 311,
+    UTEXTURE2D = 312,
+    UTEXTURE3D = 313,
+    UTEXTURECUBE = 314,
+    UTEXTURE2DARRAY = 315,
+    ATTRIBUTE = 316,
+    VARYING = 317,
+    FLOAT16_T = 318,
+    FLOAT32_T = 319,
+    DOUBLE = 320,
+    FLOAT64_T = 321,
+    INT64_T = 322,
+    UINT64_T = 323,
+    INT32_T = 324,
+    UINT32_T = 325,
+    INT16_T = 326,
+    UINT16_T = 327,
+    INT8_T = 328,
+    UINT8_T = 329,
+    I64VEC2 = 330,
+    I64VEC3 = 331,
+    I64VEC4 = 332,
+    U64VEC2 = 333,
+    U64VEC3 = 334,
+    U64VEC4 = 335,
+    I32VEC2 = 336,
+    I32VEC3 = 337,
+    I32VEC4 = 338,
+    U32VEC2 = 339,
+    U32VEC3 = 340,
+    U32VEC4 = 341,
+    I16VEC2 = 342,
+    I16VEC3 = 343,
+    I16VEC4 = 344,
+    U16VEC2 = 345,
+    U16VEC3 = 346,
+    U16VEC4 = 347,
+    I8VEC2 = 348,
+    I8VEC3 = 349,
+    I8VEC4 = 350,
+    U8VEC2 = 351,
+    U8VEC3 = 352,
+    U8VEC4 = 353,
+    DVEC2 = 354,
+    DVEC3 = 355,
+    DVEC4 = 356,
+    DMAT2 = 357,
+    DMAT3 = 358,
+    DMAT4 = 359,
+    F16VEC2 = 360,
+    F16VEC3 = 361,
+    F16VEC4 = 362,
+    F16MAT2 = 363,
+    F16MAT3 = 364,
+    F16MAT4 = 365,
+    F32VEC2 = 366,
+    F32VEC3 = 367,
+    F32VEC4 = 368,
+    F32MAT2 = 369,
+    F32MAT3 = 370,
+    F32MAT4 = 371,
+    F64VEC2 = 372,
+    F64VEC3 = 373,
+    F64VEC4 = 374,
+    F64MAT2 = 375,
+    F64MAT3 = 376,
+    F64MAT4 = 377,
+    DMAT2X2 = 378,
+    DMAT2X3 = 379,
+    DMAT2X4 = 380,
+    DMAT3X2 = 381,
+    DMAT3X3 = 382,
+    DMAT3X4 = 383,
+    DMAT4X2 = 384,
+    DMAT4X3 = 385,
+    DMAT4X4 = 386,
+    F16MAT2X2 = 387,
+    F16MAT2X3 = 388,
+    F16MAT2X4 = 389,
+    F16MAT3X2 = 390,
+    F16MAT3X3 = 391,
+    F16MAT3X4 = 392,
+    F16MAT4X2 = 393,
+    F16MAT4X3 = 394,
+    F16MAT4X4 = 395,
+    F32MAT2X2 = 396,
+    F32MAT2X3 = 397,
+    F32MAT2X4 = 398,
+    F32MAT3X2 = 399,
+    F32MAT3X3 = 400,
+    F32MAT3X4 = 401,
+    F32MAT4X2 = 402,
+    F32MAT4X3 = 403,
+    F32MAT4X4 = 404,
+    F64MAT2X2 = 405,
+    F64MAT2X3 = 406,
+    F64MAT2X4 = 407,
+    F64MAT3X2 = 408,
+    F64MAT3X3 = 409,
+    F64MAT3X4 = 410,
+    F64MAT4X2 = 411,
+    F64MAT4X3 = 412,
+    F64MAT4X4 = 413,
+    ATOMIC_UINT = 414,
+    ACCSTRUCTNV = 415,
+    ACCSTRUCTEXT = 416,
+    RAYQUERYEXT = 417,
+    FCOOPMATNV = 418,
+    ICOOPMATNV = 419,
+    UCOOPMATNV = 420,
+    SAMPLERCUBEARRAY = 421,
+    SAMPLERCUBEARRAYSHADOW = 422,
+    ISAMPLERCUBEARRAY = 423,
+    USAMPLERCUBEARRAY = 424,
+    SAMPLER1D = 425,
+    SAMPLER1DARRAY = 426,
+    SAMPLER1DARRAYSHADOW = 427,
+    ISAMPLER1D = 428,
+    SAMPLER1DSHADOW = 429,
+    SAMPLER2DRECT = 430,
+    SAMPLER2DRECTSHADOW = 431,
+    ISAMPLER2DRECT = 432,
+    USAMPLER2DRECT = 433,
+    SAMPLERBUFFER = 434,
+    ISAMPLERBUFFER = 435,
+    USAMPLERBUFFER = 436,
+    SAMPLER2DMS = 437,
+    ISAMPLER2DMS = 438,
+    USAMPLER2DMS = 439,
+    SAMPLER2DMSARRAY = 440,
+    ISAMPLER2DMSARRAY = 441,
+    USAMPLER2DMSARRAY = 442,
+    SAMPLEREXTERNALOES = 443,
+    SAMPLEREXTERNAL2DY2YEXT = 444,
+    ISAMPLER1DARRAY = 445,
+    USAMPLER1D = 446,
+    USAMPLER1DARRAY = 447,
+    F16SAMPLER1D = 448,
+    F16SAMPLER2D = 449,
+    F16SAMPLER3D = 450,
+    F16SAMPLER2DRECT = 451,
+    F16SAMPLERCUBE = 452,
+    F16SAMPLER1DARRAY = 453,
+    F16SAMPLER2DARRAY = 454,
+    F16SAMPLERCUBEARRAY = 455,
+    F16SAMPLERBUFFER = 456,
+    F16SAMPLER2DMS = 457,
+    F16SAMPLER2DMSARRAY = 458,
+    F16SAMPLER1DSHADOW = 459,
+    F16SAMPLER2DSHADOW = 460,
+    F16SAMPLER1DARRAYSHADOW = 461,
+    F16SAMPLER2DARRAYSHADOW = 462,
+    F16SAMPLER2DRECTSHADOW = 463,
+    F16SAMPLERCUBESHADOW = 464,
+    F16SAMPLERCUBEARRAYSHADOW = 465,
+    IMAGE1D = 466,
+    IIMAGE1D = 467,
+    UIMAGE1D = 468,
+    IMAGE2D = 469,
+    IIMAGE2D = 470,
+    UIMAGE2D = 471,
+    IMAGE3D = 472,
+    IIMAGE3D = 473,
+    UIMAGE3D = 474,
+    IMAGE2DRECT = 475,
+    IIMAGE2DRECT = 476,
+    UIMAGE2DRECT = 477,
+    IMAGECUBE = 478,
+    IIMAGECUBE = 479,
+    UIMAGECUBE = 480,
+    IMAGEBUFFER = 481,
+    IIMAGEBUFFER = 482,
+    UIMAGEBUFFER = 483,
+    IMAGE1DARRAY = 484,
+    IIMAGE1DARRAY = 485,
+    UIMAGE1DARRAY = 486,
+    IMAGE2DARRAY = 487,
+    IIMAGE2DARRAY = 488,
+    UIMAGE2DARRAY = 489,
+    IMAGECUBEARRAY = 490,
+    IIMAGECUBEARRAY = 491,
+    UIMAGECUBEARRAY = 492,
+    IMAGE2DMS = 493,
+    IIMAGE2DMS = 494,
+    UIMAGE2DMS = 495,
+    IMAGE2DMSARRAY = 496,
+    IIMAGE2DMSARRAY = 497,
+    UIMAGE2DMSARRAY = 498,
+    F16IMAGE1D = 499,
+    F16IMAGE2D = 500,
+    F16IMAGE3D = 501,
+    F16IMAGE2DRECT = 502,
+    F16IMAGECUBE = 503,
+    F16IMAGE1DARRAY = 504,
+    F16IMAGE2DARRAY = 505,
+    F16IMAGECUBEARRAY = 506,
+    F16IMAGEBUFFER = 507,
+    F16IMAGE2DMS = 508,
+    F16IMAGE2DMSARRAY = 509,
+    TEXTURECUBEARRAY = 510,
+    ITEXTURECUBEARRAY = 511,
+    UTEXTURECUBEARRAY = 512,
+    TEXTURE1D = 513,
+    ITEXTURE1D = 514,
+    UTEXTURE1D = 515,
+    TEXTURE1DARRAY = 516,
+    ITEXTURE1DARRAY = 517,
+    UTEXTURE1DARRAY = 518,
+    TEXTURE2DRECT = 519,
+    ITEXTURE2DRECT = 520,
+    UTEXTURE2DRECT = 521,
+    TEXTUREBUFFER = 522,
+    ITEXTUREBUFFER = 523,
+    UTEXTUREBUFFER = 524,
+    TEXTURE2DMS = 525,
+    ITEXTURE2DMS = 526,
+    UTEXTURE2DMS = 527,
+    TEXTURE2DMSARRAY = 528,
+    ITEXTURE2DMSARRAY = 529,
+    UTEXTURE2DMSARRAY = 530,
+    F16TEXTURE1D = 531,
+    F16TEXTURE2D = 532,
+    F16TEXTURE3D = 533,
+    F16TEXTURE2DRECT = 534,
+    F16TEXTURECUBE = 535,
+    F16TEXTURE1DARRAY = 536,
+    F16TEXTURE2DARRAY = 537,
+    F16TEXTURECUBEARRAY = 538,
+    F16TEXTUREBUFFER = 539,
+    F16TEXTURE2DMS = 540,
+    F16TEXTURE2DMSARRAY = 541,
+    SUBPASSINPUT = 542,
+    SUBPASSINPUTMS = 543,
+    ISUBPASSINPUT = 544,
+    ISUBPASSINPUTMS = 545,
+    USUBPASSINPUT = 546,
+    USUBPASSINPUTMS = 547,
+    F16SUBPASSINPUT = 548,
+    F16SUBPASSINPUTMS = 549,
+    LEFT_OP = 550,
+    RIGHT_OP = 551,
+    INC_OP = 552,
+    DEC_OP = 553,
+    LE_OP = 554,
+    GE_OP = 555,
+    EQ_OP = 556,
+    NE_OP = 557,
+    AND_OP = 558,
+    OR_OP = 559,
+    XOR_OP = 560,
+    MUL_ASSIGN = 561,
+    DIV_ASSIGN = 562,
+    ADD_ASSIGN = 563,
+    MOD_ASSIGN = 564,
+    LEFT_ASSIGN = 565,
+    RIGHT_ASSIGN = 566,
+    AND_ASSIGN = 567,
+    XOR_ASSIGN = 568,
+    OR_ASSIGN = 569,
+    SUB_ASSIGN = 570,
+    STRING_LITERAL = 571,
+    LEFT_PAREN = 572,
+    RIGHT_PAREN = 573,
+    LEFT_BRACKET = 574,
+    RIGHT_BRACKET = 575,
+    LEFT_BRACE = 576,
+    RIGHT_BRACE = 577,
+    DOT = 578,
+    COMMA = 579,
+    COLON = 580,
+    EQUAL = 581,
+    SEMICOLON = 582,
+    BANG = 583,
+    DASH = 584,
+    TILDE = 585,
+    PLUS = 586,
+    STAR = 587,
+    SLASH = 588,
+    PERCENT = 589,
+    LEFT_ANGLE = 590,
+    RIGHT_ANGLE = 591,
+    VERTICAL_BAR = 592,
+    CARET = 593,
+    AMPERSAND = 594,
+    QUESTION = 595,
+    INVARIANT = 596,
+    HIGH_PRECISION = 597,
+    MEDIUM_PRECISION = 598,
+    LOW_PRECISION = 599,
+    PRECISION = 600,
+    PACKED = 601,
+    RESOURCE = 602,
+    SUPERP = 603,
+    FLOATCONSTANT = 604,
+    INTCONSTANT = 605,
+    UINTCONSTANT = 606,
+    BOOLCONSTANT = 607,
+    IDENTIFIER = 608,
+    TYPE_NAME = 609,
+    CENTROID = 610,
+    IN = 611,
+    OUT = 612,
+    INOUT = 613,
+    STRUCT = 614,
+    VOID = 615,
+    WHILE = 616,
+    BREAK = 617,
+    CONTINUE = 618,
+    DO = 619,
+    ELSE = 620,
+    FOR = 621,
+    IF = 622,
+    DISCARD = 623,
+    RETURN = 624,
+    SWITCH = 625,
+    CASE = 626,
+    DEFAULT = 627,
+    UNIFORM = 628,
+    SHARED = 629,
+    BUFFER = 630,
+    FLAT = 631,
+    SMOOTH = 632,
+    LAYOUT = 633,
+    DOUBLECONSTANT = 634,
+    INT16CONSTANT = 635,
+    UINT16CONSTANT = 636,
+    FLOAT16CONSTANT = 637,
+    INT32CONSTANT = 638,
+    UINT32CONSTANT = 639,
+    INT64CONSTANT = 640,
+    UINT64CONSTANT = 641,
+    SUBROUTINE = 642,
+    DEMOTE = 643,
+    PAYLOADNV = 644,
+    PAYLOADINNV = 645,
+    HITATTRNV = 646,
+    CALLDATANV = 647,
+    CALLDATAINNV = 648,
+    PAYLOADEXT = 649,
+    PAYLOADINEXT = 650,
+    HITATTREXT = 651,
+    CALLDATAEXT = 652,
+    CALLDATAINEXT = 653,
+    PATCH = 654,
+    SAMPLE = 655,
+    NONUNIFORM = 656,
+    COHERENT = 657,
+    VOLATILE = 658,
+    RESTRICT = 659,
+    READONLY = 660,
+    WRITEONLY = 661,
+    DEVICECOHERENT = 662,
+    QUEUEFAMILYCOHERENT = 663,
+    WORKGROUPCOHERENT = 664,
+    SUBGROUPCOHERENT = 665,
+    NONPRIVATE = 666,
+    SHADERCALLCOHERENT = 667,
+    NOPERSPECTIVE = 668,
+    EXPLICITINTERPAMD = 669,
+    PERVERTEXNV = 670,
+    PERPRIMITIVENV = 671,
+    PERVIEWNV = 672,
+    PERTASKNV = 673,
+    PRECISE = 674
   };
 #endif
 
@@ -456,7 +470,7 @@
 
 union YYSTYPE
 {
-#line 70 "MachineIndependent/glslang.y" /* yacc.c:1909  */
+#line 97 "glslang.y" /* yacc.c:1909  */
 
     struct {
         glslang::TSourceLoc loc;
@@ -489,9 +503,10 @@
             glslang::TArraySizes* arraySizes;
             glslang::TIdentifierList* identifierList;
         };
+        glslang::TArraySizes* typeParameters;
     } interm;
 
-#line 495 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909  */
+#line 510 "glslang_tab.cpp.h" /* yacc.c:1909  */
 };
 
 typedef union YYSTYPE YYSTYPE;
@@ -503,4 +518,4 @@
 
 int yyparse (glslang::TParseContext* pParseContext);
 
-#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED  */
+#endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED  */
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index f74b90a..593ed6f 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -2,6 +2,7 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2016 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -35,6 +36,8 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
+#ifndef GLSLANG_WEB
+
 #include "localintermediate.h"
 #include "../Include/InfoSink.h"
 
@@ -43,6 +46,7 @@
 #else
 #include <cmath>
 #endif
+#include <cstdint>
 
 namespace {
 
@@ -173,7 +177,7 @@
     case EOpIndexIndirect: out.debug << "indirect index"; break;
     case EOpIndexDirectStruct:
         {
-            bool reference = node->getLeft()->getType().getBasicType() == EbtReference;
+            bool reference = node->getLeft()->getType().isReference();
             const TTypeList *members = reference ? node->getLeft()->getType().getReferentType()->getStruct() : node->getLeft()->getType().getStruct();
             out.debug << (*members)[node->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst()].type->getFieldName();
             out.debug << ": direct index for structure";      break;
@@ -210,6 +214,13 @@
     case EOpLogicalXor: out.debug << "logical-xor"; break;
     case EOpLogicalAnd: out.debug << "logical-and"; break;
 
+    case EOpAbsDifference:          out.debug << "absoluteDifference";    break;
+    case EOpAddSaturate:            out.debug << "addSaturate";           break;
+    case EOpSubSaturate:            out.debug << "subtractSaturate";      break;
+    case EOpAverage:                out.debug << "average";               break;
+    case EOpAverageRounded:         out.debug << "averageRounded";        break;
+    case EOpMul32x16:               out.debug << "multiply32x16";         break;
+
     default: out.debug << "<unknown op>";
     }
 
@@ -236,6 +247,7 @@
     case EOpPostDecrement:  out.debug << "Post-Decrement";       break;
     case EOpPreIncrement:   out.debug << "Pre-Increment";        break;
     case EOpPreDecrement:   out.debug << "Pre-Decrement";        break;
+    case EOpCopyObject:     out.debug << "copy object";          break;
 
     // * -> bool
     case EOpConvInt8ToBool:    out.debug << "Convert int8_t to bool";  break;
@@ -553,6 +565,9 @@
     case EOpFindLSB:                out.debug << "findLSB";               break;
     case EOpFindMSB:                out.debug << "findMSB";               break;
 
+    case EOpCountLeadingZeros:      out.debug << "countLeadingZeros";     break;
+    case EOpCountTrailingZeros:     out.debug << "countTrailingZeros";    break;
+
     case EOpNoise:                  out.debug << "noise";                 break;
 
     case EOpBallot:                 out.debug << "ballot";                break;
@@ -613,7 +628,6 @@
     case EOpSubgroupQuadSwapVertical:        out.debug << "subgroupQuadSwapVertical";        break;
     case EOpSubgroupQuadSwapDiagonal:        out.debug << "subgroupQuadSwapDiagonal";        break;
 
-#ifdef NV_EXTENSIONS
     case EOpSubgroupPartition:                          out.debug << "subgroupPartitionNV";                          break;
     case EOpSubgroupPartitionedAdd:                     out.debug << "subgroupPartitionedAddNV";                     break;
     case EOpSubgroupPartitionedMul:                     out.debug << "subgroupPartitionedMulNV";                     break;
@@ -636,7 +650,6 @@
     case EOpSubgroupPartitionedExclusiveAnd:            out.debug << "subgroupPartitionedExclusiveAndNV";            break;
     case EOpSubgroupPartitionedExclusiveOr:             out.debug << "subgroupPartitionedExclusiveOrNV";             break;
     case EOpSubgroupPartitionedExclusiveXor:            out.debug << "subgroupPartitionedExclusiveXorNV";            break;
-#endif
 
     case EOpClip:                   out.debug << "clip";                  break;
     case EOpIsFinite:               out.debug << "isfinite";              break;
@@ -646,7 +659,6 @@
 
     case EOpSparseTexelsResident:   out.debug << "sparseTexelsResident";  break;
 
-#ifdef AMD_EXTENSIONS
     case EOpMinInvocations:             out.debug << "minInvocations";              break;
     case EOpMaxInvocations:             out.debug << "maxInvocations";              break;
     case EOpAddInvocations:             out.debug << "addInvocations";              break;
@@ -675,7 +687,6 @@
 
     case EOpCubeFaceIndex:          out.debug << "cubeFaceIndex";               break;
     case EOpCubeFaceCoord:          out.debug << "cubeFaceCoord";               break;
-#endif
 
     case EOpSubpassLoad:   out.debug << "subpassLoad";   break;
     case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break;
@@ -817,6 +828,7 @@
     case EOpConstructStruct:  out.debug << "Construct structure";  break;
     case EOpConstructTextureSampler: out.debug << "Construct combined texture-sampler"; break;
     case EOpConstructReference:  out.debug << "Construct reference";  break;
+    case EOpConstructCooperativeMatrix:  out.debug << "Construct cooperative matrix";  break;
 
     case EOpLessThan:         out.debug << "Compare Less Than";             break;
     case EOpGreaterThan:      out.debug << "Compare Greater Than";          break;
@@ -860,7 +872,6 @@
 
     case EOpReadInvocation:             out.debug << "readInvocation";        break;
 
-#ifdef AMD_EXTENSIONS
     case EOpSwizzleInvocations:         out.debug << "swizzleInvocations";       break;
     case EOpSwizzleInvocationsMasked:   out.debug << "swizzleInvocationsMasked"; break;
     case EOpWriteInvocation:            out.debug << "writeInvocation";          break;
@@ -868,9 +879,7 @@
     case EOpMin3:                       out.debug << "min3";                  break;
     case EOpMax3:                       out.debug << "max3";                  break;
     case EOpMid3:                       out.debug << "mid3";                  break;
-
     case EOpTime:                       out.debug << "time";                  break;
-#endif
 
     case EOpAtomicAdd:                  out.debug << "AtomicAdd";             break;
     case EOpAtomicMin:                  out.debug << "AtomicMin";             break;
@@ -907,10 +916,8 @@
     case EOpImageAtomicCompSwap:        out.debug << "imageAtomicCompSwap";   break;
     case EOpImageAtomicLoad:            out.debug << "imageAtomicLoad";       break;
     case EOpImageAtomicStore:           out.debug << "imageAtomicStore";      break;
-#ifdef AMD_EXTENSIONS
     case EOpImageLoadLod:               out.debug << "imageLoadLod";          break;
     case EOpImageStoreLod:              out.debug << "imageStoreLod";         break;
-#endif
 
     case EOpTextureQuerySize:           out.debug << "textureSize";           break;
     case EOpTextureQueryLod:            out.debug << "textureQueryLod";       break;
@@ -937,11 +944,9 @@
     case EOpTextureOffsetClamp:         out.debug << "textureOffsetClamp";    break;
     case EOpTextureGradClamp:           out.debug << "textureGradClamp";      break;
     case EOpTextureGradOffsetClamp:     out.debug << "textureGradOffsetClamp";  break;
-#ifdef AMD_EXTENSIONS
     case EOpTextureGatherLod:           out.debug << "textureGatherLod";        break;
     case EOpTextureGatherLodOffset:     out.debug << "textureGatherLodOffset";  break;
     case EOpTextureGatherLodOffsets:    out.debug << "textureGatherLodOffsets"; break;
-#endif
 
     case EOpSparseTexture:                  out.debug << "sparseTexture";                   break;
     case EOpSparseTextureOffset:            out.debug << "sparseTextureOffset";             break;
@@ -959,19 +964,15 @@
     case EOpSparseTextureOffsetClamp:       out.debug << "sparseTextureOffsetClamp";        break;
     case EOpSparseTextureGradClamp:         out.debug << "sparseTextureGradClamp";          break;
     case EOpSparseTextureGradOffsetClamp:   out.debug << "sparseTextureGradOffsetClam";     break;
-#ifdef AMD_EXTENSIONS
     case EOpSparseTextureGatherLod:         out.debug << "sparseTextureGatherLod";          break;
     case EOpSparseTextureGatherLodOffset:   out.debug << "sparseTextureGatherLodOffset";    break;
     case EOpSparseTextureGatherLodOffsets:  out.debug << "sparseTextureGatherLodOffsets";   break;
     case EOpSparseImageLoadLod:             out.debug << "sparseImageLoadLod";              break;
-#endif
-#ifdef NV_EXTENSIONS
     case EOpImageSampleFootprintNV:             out.debug << "imageSampleFootprintNV";          break;
     case EOpImageSampleFootprintClampNV:        out.debug << "imageSampleFootprintClampNV";     break;
     case EOpImageSampleFootprintLodNV:          out.debug << "imageSampleFootprintLodNV";       break;
     case EOpImageSampleFootprintGradNV:         out.debug << "imageSampleFootprintGradNV";      break;
     case EOpImageSampleFootprintGradClampNV:    out.debug << "mageSampleFootprintGradClampNV";  break;
-#endif
     case EOpAddCarry:                   out.debug << "addCarry";              break;
     case EOpSubBorrow:                  out.debug << "subBorrow";             break;
     case EOpUMulExtended:               out.debug << "uMulExtended";          break;
@@ -985,9 +986,7 @@
 
     case EOpInterpolateAtSample:   out.debug << "interpolateAtSample";    break;
     case EOpInterpolateAtOffset:   out.debug << "interpolateAtOffset";    break;
-#ifdef AMD_EXTENSIONS
     case EOpInterpolateAtVertex:   out.debug << "interpolateAtVertex";    break;
-#endif
 
     case EOpSinCos:                     out.debug << "sincos";                break;
     case EOpGenMul:                     out.debug << "mul";                   break;
@@ -1054,17 +1053,69 @@
     case EOpSubgroupQuadSwapVertical:        out.debug << "subgroupQuadSwapVertical"; break;
     case EOpSubgroupQuadSwapDiagonal:        out.debug << "subgroupQuadSwapDiagonal"; break;
 
+    case EOpSubgroupPartition:                          out.debug << "subgroupPartitionNV";                          break;
+    case EOpSubgroupPartitionedAdd:                     out.debug << "subgroupPartitionedAddNV";                     break;
+    case EOpSubgroupPartitionedMul:                     out.debug << "subgroupPartitionedMulNV";                     break;
+    case EOpSubgroupPartitionedMin:                     out.debug << "subgroupPartitionedMinNV";                     break;
+    case EOpSubgroupPartitionedMax:                     out.debug << "subgroupPartitionedMaxNV";                     break;
+    case EOpSubgroupPartitionedAnd:                     out.debug << "subgroupPartitionedAndNV";                     break;
+    case EOpSubgroupPartitionedOr:                      out.debug << "subgroupPartitionedOrNV";                      break;
+    case EOpSubgroupPartitionedXor:                     out.debug << "subgroupPartitionedXorNV";                     break;
+    case EOpSubgroupPartitionedInclusiveAdd:            out.debug << "subgroupPartitionedInclusiveAddNV";            break;
+    case EOpSubgroupPartitionedInclusiveMul:            out.debug << "subgroupPartitionedInclusiveMulNV";            break;
+    case EOpSubgroupPartitionedInclusiveMin:            out.debug << "subgroupPartitionedInclusiveMinNV";            break;
+    case EOpSubgroupPartitionedInclusiveMax:            out.debug << "subgroupPartitionedInclusiveMaxNV";            break;
+    case EOpSubgroupPartitionedInclusiveAnd:            out.debug << "subgroupPartitionedInclusiveAndNV";            break;
+    case EOpSubgroupPartitionedInclusiveOr:             out.debug << "subgroupPartitionedInclusiveOrNV";             break;
+    case EOpSubgroupPartitionedInclusiveXor:            out.debug << "subgroupPartitionedInclusiveXorNV";            break;
+    case EOpSubgroupPartitionedExclusiveAdd:            out.debug << "subgroupPartitionedExclusiveAddNV";            break;
+    case EOpSubgroupPartitionedExclusiveMul:            out.debug << "subgroupPartitionedExclusiveMulNV";            break;
+    case EOpSubgroupPartitionedExclusiveMin:            out.debug << "subgroupPartitionedExclusiveMinNV";            break;
+    case EOpSubgroupPartitionedExclusiveMax:            out.debug << "subgroupPartitionedExclusiveMaxNV";            break;
+    case EOpSubgroupPartitionedExclusiveAnd:            out.debug << "subgroupPartitionedExclusiveAndNV";            break;
+    case EOpSubgroupPartitionedExclusiveOr:             out.debug << "subgroupPartitionedExclusiveOrNV";             break;
+    case EOpSubgroupPartitionedExclusiveXor:            out.debug << "subgroupPartitionedExclusiveXorNV";            break;
+
     case EOpSubpassLoad:   out.debug << "subpassLoad";   break;
     case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break;
 
-#ifdef NV_EXTENSIONS
-    case EOpTraceNV:                          out.debug << "traceNV"; break;
-    case EOpReportIntersectionNV:             out.debug << "reportIntersectionNV"; break;
-    case EOpIgnoreIntersectionNV:             out.debug << "ignoreIntersectionNV"; break;
-    case EOpTerminateRayNV:                   out.debug << "terminateRayNV"; break;
-    case EOpExecuteCallableNV:                out.debug << "executeCallableNV"; break;
+    case EOpTrace:                            out.debug << "traceNV"; break;
+    case EOpReportIntersection:               out.debug << "reportIntersectionNV"; break;
+    case EOpIgnoreIntersection:               out.debug << "ignoreIntersectionNV"; break;
+    case EOpTerminateRay:                     out.debug << "terminateRayNV"; break;
+    case EOpExecuteCallable:                  out.debug << "executeCallableNV"; break;
     case EOpWritePackedPrimitiveIndices4x8NV: out.debug << "writePackedPrimitiveIndices4x8NV"; break;
-#endif
+
+    case EOpRayQueryInitialize:                                            out.debug << "rayQueryInitializeEXT"; break;
+    case EOpRayQueryTerminate:                                             out.debug << "rayQueryTerminateEXT"; break;
+    case EOpRayQueryGenerateIntersection:                                  out.debug << "rayQueryGenerateIntersectionEXT"; break;
+    case EOpRayQueryConfirmIntersection:                                   out.debug << "rayQueryConfirmIntersectionEXT"; break;
+    case EOpRayQueryProceed:                                               out.debug << "rayQueryProceedEXT"; break;
+    case EOpRayQueryGetIntersectionType:                                   out.debug << "rayQueryGetIntersectionTypeEXT"; break;
+    case EOpRayQueryGetRayTMin:                                            out.debug << "rayQueryGetRayTMinEXT"; break;
+    case EOpRayQueryGetRayFlags:                                           out.debug << "rayQueryGetRayFlagsEXT"; break;
+    case EOpRayQueryGetIntersectionT:                                      out.debug << "rayQueryGetIntersectionTEXT"; break;
+    case EOpRayQueryGetIntersectionInstanceCustomIndex:                    out.debug << "rayQueryGetIntersectionInstanceCustomIndexEXT"; break;
+    case EOpRayQueryGetIntersectionInstanceId:                             out.debug << "rayQueryGetIntersectionInstanceIdEXT"; break;
+    case EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset: out.debug << "rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT"; break;
+    case EOpRayQueryGetIntersectionGeometryIndex:                          out.debug << "rayQueryGetIntersectionGeometryIndexEXT"; break;
+    case EOpRayQueryGetIntersectionPrimitiveIndex:                         out.debug << "rayQueryGetIntersectionPrimitiveIndexEXT"; break;
+    case EOpRayQueryGetIntersectionBarycentrics:                           out.debug << "rayQueryGetIntersectionBarycentricsEXT"; break;
+    case EOpRayQueryGetIntersectionFrontFace:                              out.debug << "rayQueryGetIntersectionFrontFaceEXT"; break;
+    case EOpRayQueryGetIntersectionCandidateAABBOpaque:                    out.debug << "rayQueryGetIntersectionCandidateAABBOpaqueEXT"; break;
+    case EOpRayQueryGetIntersectionObjectRayDirection:                     out.debug << "rayQueryGetIntersectionObjectRayDirectionEXT"; break;
+    case EOpRayQueryGetIntersectionObjectRayOrigin:                        out.debug << "rayQueryGetIntersectionObjectRayOriginEXT"; break;
+    case EOpRayQueryGetWorldRayDirection:                                  out.debug << "rayQueryGetWorldRayDirectionEXT"; break;
+    case EOpRayQueryGetWorldRayOrigin:                                     out.debug << "rayQueryGetWorldRayOriginEXT"; break;
+    case EOpRayQueryGetIntersectionObjectToWorld:                          out.debug << "rayQueryGetIntersectionObjectToWorldEXT"; break;
+    case EOpRayQueryGetIntersectionWorldToObject:                          out.debug << "rayQueryGetIntersectionWorldToObjectEXT"; break;
+
+    case EOpCooperativeMatrixLoad:  out.debug << "Load cooperative matrix";  break;
+    case EOpCooperativeMatrixStore:  out.debug << "Store cooperative matrix";  break;
+    case EOpCooperativeMatrixMulAdd: out.debug << "MulAdd cooperative matrices"; break;
+
+    case EOpIsHelperInvocation: out.debug << "IsHelperInvocation"; break;
+    case EOpDebugPrintf:  out.debug << "Debug printf";  break;
 
     default: out.debug.message(EPrefixError, "Bad aggregation op");
     }
@@ -1157,8 +1208,11 @@
         switch (extra) {
         case TOutputTraverser::BinaryDoubleOutput:
         {
+            uint64_t b;
+            static_assert(sizeof(b) == sizeof(value), "sizeof(uint64_t) != sizeof(double)");
+            memcpy(&b, &value, sizeof(b));
+
             out.debug << " : ";
-            long long b = *reinterpret_cast<long long*>(&value);
             for (size_t i = 0; i < 8 * sizeof(value); ++i, ++b) {
                 out.debug << ((b & 0x8000000000000000) != 0 ? "1" : "0");
                 b <<= 1;
@@ -1357,6 +1411,7 @@
     case EOpContinue:  out.debug << "Branch: Continue";       break;
     case EOpReturn:    out.debug << "Branch: Return";         break;
     case EOpCase:      out.debug << "case: ";                 break;
+    case EOpDemote:    out.debug << "Demote";                 break;
     case EOpDefault:   out.debug << "default: ";              break;
     default:               out.debug << "Branch: Unknown Branch"; break;
     }
@@ -1467,18 +1522,17 @@
             }
             infoSink.debug << "\n";
         }
+        if (interlockOrdering != EioNone)
+            infoSink.debug << "interlock ordering = " << TQualifier::getInterlockOrderingString(interlockOrdering) << "\n";
         break;
 
-#ifdef NV_EXTENSIONS
     case EShLangMeshNV:
         infoSink.debug << "max_vertices = " << vertices << "\n";
         infoSink.debug << "max_primitives = " << primitives << "\n";
         infoSink.debug << "output primitive = " << TQualifier::getGeometryString(outputPrimitive) << "\n";
         // Fall through
-
     case EShLangTaskNV:
         // Fall through
-#endif
     case EShLangCompute:
         infoSink.debug << "local_size = (" << localSize[0] << ", " << localSize[1] << ", " << localSize[2] << ")\n";
         {
@@ -1507,3 +1561,5 @@
 }
 
 } // end namespace glslang
+
+#endif // not GLSLANG_WEB
diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp
index 46c7558..1b2ecc9 100644
--- a/glslang/MachineIndependent/iomapper.cpp
+++ b/glslang/MachineIndependent/iomapper.cpp
@@ -33,16 +33,13 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
+#ifndef GLSLANG_WEB
+
 #include "../Include/Common.h"
 #include "../Include/InfoSink.h"
-#include "iomapper.h"
-#include "LiveTraverser.h"
-#include "localintermediate.h"
 
 #include "gl_types.h"
-
-#include <unordered_set>
-#include <unordered_map>
+#include "iomapper.h"
 
 //
 // Map IO bindings.
@@ -61,60 +58,9 @@
 //    c. implicit dead bindings are left un-bound.
 //
 
-
 namespace glslang {
 
-struct TVarEntryInfo
-{
-    int               id;
-    TIntermSymbol*    symbol;
-    bool              live;
-    int               newBinding;
-    int               newSet;
-    int               newLocation;
-    int               newComponent;
-    int               newIndex;
-
-    struct TOrderById
-    {
-      inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r)
-      {
-        return l.id < r.id;
-      }
-    };
-
-    struct TOrderByPriority
-    {
-        // ordering:
-        // 1) has both binding and set
-        // 2) has binding but no set
-        // 3) has no binding but set
-        // 4) has no binding and no set
-        inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r)
-        {
-            const TQualifier& lq = l.symbol->getQualifier();
-            const TQualifier& rq = r.symbol->getQualifier();
-
-            // simple rules:
-            // has binding gives 2 points
-            // has set gives 1 point
-            // who has the most points is more important.
-            int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0);
-            int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0);
-
-            if (lPoints == rPoints)
-              return l.id < r.id;
-            return lPoints > rPoints;
-        }
-    };
-};
-
-
-
-typedef std::vector<TVarEntryInfo> TVarLiveMap;
-
-class TVarGatherTraverser : public TLiveTraverser
-{
+class TVarGatherTraverser : public TLiveTraverser {
 public:
     TVarGatherTraverser(const TIntermediate& i, bool traverseDeadCode, TVarLiveMap& inList, TVarLiveMap& outList, TVarLiveMap& uniformList)
       : TLiveTraverser(i, traverseDeadCode, true, true, false)
@@ -124,7 +70,6 @@
     {
     }
 
-
     virtual void visitSymbol(TIntermSymbol* base)
     {
         TVarLiveMap* target = nullptr;
@@ -132,16 +77,17 @@
             target = &inputList;
         else if (base->getQualifier().storage == EvqVaryingOut)
             target = &outputList;
-        else if (base->getQualifier().isUniformOrBuffer() && !base->getQualifier().layoutPushConstant)
+        else if (base->getQualifier().isUniformOrBuffer() && !base->getQualifier().isPushConstant())
             target = &uniformList;
-
         if (target) {
-            TVarEntryInfo ent = { base->getId(), base, !traverseAll };
-            TVarLiveMap::iterator at = std::lower_bound(target->begin(), target->end(), ent, TVarEntryInfo::TOrderById());
-            if (at != target->end() && at->id == ent.id)
-              at->live = at->live || !traverseAll; // update live state
+            TVarEntryInfo ent = {base->getId(), base, ! traverseAll};
+            ent.stage = intermediate.getStage();
+            TVarLiveMap::iterator at = target->find(
+                ent.symbol->getName()); // std::lower_bound(target->begin(), target->end(), ent, TVarEntryInfo::TOrderById());
+            if (at != target->end() && at->second.id == ent.id)
+                at->second.live = at->second.live || ! traverseAll; // update live state
             else
-              target->insert(at, ent);
+                (*target)[ent.symbol->getName()] = ent;
         }
     }
 
@@ -162,9 +108,7 @@
     {
     }
 
-
-    virtual void visitSymbol(TIntermSymbol* base)
-    {
+    virtual void visitSymbol(TIntermSymbol* base) {
         const TVarLiveMap* source;
         if (base->getQualifier().storage == EvqVaryingIn)
             source = &inputList;
@@ -176,23 +120,23 @@
             return;
 
         TVarEntryInfo ent = { base->getId() };
-        TVarLiveMap::const_iterator at = std::lower_bound(source->begin(), source->end(), ent, TVarEntryInfo::TOrderById());
+        TVarLiveMap::const_iterator at = source->find(base->getName());
         if (at == source->end())
             return;
 
-        if (at->id != ent.id)
+        if (at->second.id != ent.id)
             return;
 
-        if (at->newBinding != -1)
-            base->getWritableType().getQualifier().layoutBinding = at->newBinding;
-        if (at->newSet != -1)
-            base->getWritableType().getQualifier().layoutSet = at->newSet;
-        if (at->newLocation != -1)
-            base->getWritableType().getQualifier().layoutLocation = at->newLocation;
-        if (at->newComponent != -1)
-            base->getWritableType().getQualifier().layoutComponent = at->newComponent;
-        if (at->newIndex != -1)
-            base->getWritableType().getQualifier().layoutIndex = at->newIndex;
+        if (at->second.newBinding != -1)
+            base->getWritableType().getQualifier().layoutBinding = at->second.newBinding;
+        if (at->second.newSet != -1)
+            base->getWritableType().getQualifier().layoutSet = at->second.newSet;
+        if (at->second.newLocation != -1)
+            base->getWritableType().getQualifier().layoutLocation = at->second.newLocation;
+        if (at->second.newComponent != -1)
+            base->getWritableType().getQualifier().layoutComponent = at->second.newComponent;
+        if (at->second.newIndex != -1)
+            base->getWritableType().getQualifier().layoutIndex = at->second.newIndex;
     }
 
   private:
@@ -210,61 +154,60 @@
       , resolver(r)
     {
     }
-    inline void operator()(TVarEntryInfo& ent)
+
+    inline void operator()(std::pair<const TString, TVarEntryInfo>& entKey)
     {
-        resolver.notifyBinding(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+        resolver.notifyBinding(stage, entKey.second);
     }
+
 private:
-    TNotifyUniformAdaptor& operator=(TNotifyUniformAdaptor&);
+    TNotifyUniformAdaptor& operator=(TNotifyUniformAdaptor&) = delete;
 };
 
 struct TNotifyInOutAdaptor
 {
     EShLanguage stage;
     TIoMapResolver& resolver;
-    inline TNotifyInOutAdaptor(EShLanguage s, TIoMapResolver& r)
+    inline TNotifyInOutAdaptor(EShLanguage s, TIoMapResolver& r) 
       : stage(s)
       , resolver(r)
     {
     }
-    inline void operator()(TVarEntryInfo& ent)
+
+    inline void operator()(std::pair<const TString, TVarEntryInfo>& entKey)
     {
-        resolver.notifyInOut(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+        resolver.notifyInOut(stage, entKey.second);
     }
+
 private:
-    TNotifyInOutAdaptor& operator=(TNotifyInOutAdaptor&);
+    TNotifyInOutAdaptor& operator=(TNotifyInOutAdaptor&) = delete;
 };
 
-struct TResolverUniformAdaptor
-{
-    TResolverUniformAdaptor(EShLanguage s, TIoMapResolver& r, TInfoSink& i, bool& e, TIntermediate& interm)
+struct TResolverUniformAdaptor {
+    TResolverUniformAdaptor(EShLanguage s, TIoMapResolver& r, TInfoSink& i, bool& e)
       : stage(s)
       , resolver(r)
       , infoSink(i)
       , error(e)
-      , intermediate(interm)
     {
     }
 
-    inline void operator()(TVarEntryInfo& ent)
-    {
+    inline void operator()(std::pair<const TString, TVarEntryInfo>& entKey) {
+        TVarEntryInfo& ent = entKey.second;
         ent.newLocation = -1;
         ent.newComponent = -1;
         ent.newBinding = -1;
         ent.newSet = -1;
         ent.newIndex = -1;
-        const bool isValid = resolver.validateBinding(stage, ent.symbol->getName().c_str(), ent.symbol->getType(),
-                                                             ent.live);
+        const bool isValid = resolver.validateBinding(stage, ent);
         if (isValid) {
-            ent.newBinding = resolver.resolveBinding(stage, ent.symbol->getName().c_str(), ent.symbol->getType(),
-                                                            ent.live);
-            ent.newSet = resolver.resolveSet(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
-            ent.newLocation = resolver.resolveUniformLocation(stage, ent.symbol->getName().c_str(),
-                                                                     ent.symbol->getType(), ent.live);
+            resolver.resolveBinding(stage, ent);
+            resolver.resolveSet(stage, ent);
+            resolver.resolveUniformLocation(stage, ent);
 
             if (ent.newBinding != -1) {
                 if (ent.newBinding >= int(TQualifier::layoutBindingEnd)) {
-                    TString err = "mapped binding out of range: " + ent.symbol->getName();
+                    TString err = "mapped binding out of range: " + entKey.first;
 
                     infoSink.info.message(EPrefixInternalError, err.c_str());
                     error = true;
@@ -272,64 +215,52 @@
             }
             if (ent.newSet != -1) {
                 if (ent.newSet >= int(TQualifier::layoutSetEnd)) {
-                    TString err = "mapped set out of range: " + ent.symbol->getName();
+                    TString err = "mapped set out of range: " + entKey.first;
 
                     infoSink.info.message(EPrefixInternalError, err.c_str());
                     error = true;
                 }
             }
         } else {
-            TString errorMsg = "Invalid binding: " + ent.symbol->getName();
+            TString errorMsg = "Invalid binding: " + entKey.first;
             infoSink.info.message(EPrefixInternalError, errorMsg.c_str());
             error = true;
         }
     }
 
+    inline void setStage(EShLanguage s) { stage = s; }
+
     EShLanguage     stage;
     TIoMapResolver& resolver;
     TInfoSink&      infoSink;
     bool&           error;
-    TIntermediate&  intermediate;
 
 private:
-    TResolverUniformAdaptor& operator=(TResolverUniformAdaptor&);
+    TResolverUniformAdaptor& operator=(TResolverUniformAdaptor&) = delete;
 };
 
-struct TResolverInOutAdaptor
-{
-    TResolverInOutAdaptor(EShLanguage s, TIoMapResolver& r, TInfoSink& i, bool& e, TIntermediate& interm)
+struct TResolverInOutAdaptor {
+    TResolverInOutAdaptor(EShLanguage s, TIoMapResolver& r, TInfoSink& i, bool& e)
       : stage(s)
       , resolver(r)
       , infoSink(i)
       , error(e)
-      , intermediate(interm)
     {
     }
 
-    inline void operator()(TVarEntryInfo& ent)
+    inline void operator()(std::pair<const TString, TVarEntryInfo>& entKey)
     {
+        TVarEntryInfo& ent = entKey.second;
         ent.newLocation = -1;
         ent.newComponent = -1;
         ent.newBinding = -1;
         ent.newSet = -1;
         ent.newIndex = -1;
-        const bool isValid = resolver.validateInOut(stage,
-                                                    ent.symbol->getName().c_str(),
-                                                    ent.symbol->getType(),
-                                                    ent.live);
+        const bool isValid = resolver.validateInOut(stage, ent);
         if (isValid) {
-            ent.newLocation = resolver.resolveInOutLocation(stage,
-                                                            ent.symbol->getName().c_str(),
-                                                            ent.symbol->getType(),
-                                                            ent.live);
-            ent.newComponent = resolver.resolveInOutComponent(stage,
-                                                              ent.symbol->getName().c_str(),
-                                                              ent.symbol->getType(),
-                                                              ent.live);
-            ent.newIndex = resolver.resolveInOutIndex(stage,
-                                                      ent.symbol->getName().c_str(),
-                                                      ent.symbol->getType(),
-                                                      ent.live);
+            resolver.resolveInOutLocation(stage, ent);
+            resolver.resolveInOutComponent(stage, ent);
+            resolver.resolveInOutIndex(stage, ent);
         } else {
             TString errorMsg;
             if (ent.symbol->getType().getQualifier().semanticName != nullptr) {
@@ -344,219 +275,640 @@
         }
     }
 
+    inline void setStage(EShLanguage s) { stage = s; }
+
     EShLanguage     stage;
     TIoMapResolver& resolver;
     TInfoSink&      infoSink;
     bool&           error;
-    TIntermediate&  intermediate;
 
 private:
-    TResolverInOutAdaptor& operator=(TResolverInOutAdaptor&);
+    TResolverInOutAdaptor& operator=(TResolverInOutAdaptor&) = delete;
 };
 
-// Base class for shared TIoMapResolver services, used by several derivations.
-struct TDefaultIoResolverBase : public glslang::TIoMapResolver
+// The class is used for reserving explicit uniform locations and ubo/ssbo/opaque bindings
+
+struct TSymbolValidater
 {
-    TDefaultIoResolverBase(const TIntermediate &intermediate) :
-        intermediate(intermediate),
-        nextUniformLocation(intermediate.getUniformLocationBase()),
-        nextInputLocation(0),
-        nextOutputLocation(0)
-    { }
-
-    int getBaseBinding(TResourceType res, unsigned int set) const {
-        return selectBaseBinding(intermediate.getShiftBinding(res), 
-                                 intermediate.getShiftBindingForSet(res, set));
+    TSymbolValidater(TIoMapResolver& r, TInfoSink& i, TVarLiveMap* in[EShLangCount], TVarLiveMap* out[EShLangCount],
+                     TVarLiveMap* uniform[EShLangCount], bool& hadError)
+        : preStage(EShLangCount)
+        , currentStage(EShLangCount)
+        , nextStage(EShLangCount)
+        , resolver(r)
+        , infoSink(i)
+        , hadError(hadError)
+    {
+        memcpy(inVarMaps, in, EShLangCount * (sizeof(TVarLiveMap*)));
+        memcpy(outVarMaps, out, EShLangCount * (sizeof(TVarLiveMap*)));
+        memcpy(uniformVarMap, uniform, EShLangCount * (sizeof(TVarLiveMap*)));
     }
 
-    const std::vector<std::string>& getResourceSetBinding() const { return intermediate.getResourceSetBinding(); }
-
-    bool doAutoBindingMapping() const { return intermediate.getAutoMapBindings(); }
-    bool doAutoLocationMapping() const { return intermediate.getAutoMapLocations(); }
-
-    typedef std::vector<int> TSlotSet;
-    typedef std::unordered_map<int, TSlotSet> TSlotSetMap;
-    TSlotSetMap slots;
-
-    TSlotSet::iterator findSlot(int set, int slot)
-    {
-        return std::lower_bound(slots[set].begin(), slots[set].end(), slot);
-    }
-
-    bool checkEmpty(int set, int slot)
-    {
-        TSlotSet::iterator at = findSlot(set, slot);
-        return !(at != slots[set].end() && *at == slot);
-    }
-
-    int reserveSlot(int set, int slot, int size = 1)
-    {
-        TSlotSet::iterator at = findSlot(set, slot);
-
-        // tolerate aliasing, by not double-recording aliases
-        // (policy about appropriateness of the alias is higher up)
-        for (int i = 0; i < size; i++) {
-                if (at == slots[set].end() || *at != slot + i)
-                        at = slots[set].insert(at, slot + i);
-                ++at;
+    inline void operator()(std::pair<const TString, TVarEntryInfo>& entKey) {
+        TVarEntryInfo& ent1 = entKey.second;
+        TIntermSymbol* base = ent1.symbol;
+        const TType& type = ent1.symbol->getType();
+        const TString& name = entKey.first;
+        TString mangleName1, mangleName2;
+        type.appendMangledName(mangleName1);
+        EShLanguage stage = ent1.stage;
+        if (currentStage != stage) {
+            preStage = currentStage;
+            currentStage = stage;
+            nextStage = EShLangCount;
+            for (int i = currentStage + 1; i < EShLangCount; i++) {
+                if (inVarMaps[i] != nullptr)
+                    nextStage = static_cast<EShLanguage>(i);
+            }
         }
-
-        return slot;
-    }
-
-    int getFreeSlot(int set, int base, int size = 1)
-    {
-        TSlotSet::iterator at = findSlot(set, base);
-        if (at == slots[set].end())
-            return reserveSlot(set, base, size);
-
-        // look for a big enough gap
-        for (; at != slots[set].end(); ++at) {
-            if (*at - base >= size)
-                break;
-            base = *at + 1;
+        if (base->getQualifier().storage == EvqVaryingIn) {
+            // validate stage in;
+            if (preStage == EShLangCount)
+                return;
+            if (outVarMaps[preStage] != nullptr) {
+                auto ent2 = outVarMaps[preStage]->find(name);
+                if (ent2 != outVarMaps[preStage]->end()) {
+                    ent2->second.symbol->getType().appendMangledName(mangleName2);
+                    if (mangleName1 == mangleName2)
+                        return;
+                    else {
+                        TString err = "Invalid In/Out variable type : " + entKey.first;
+                        infoSink.info.message(EPrefixInternalError, err.c_str());
+                        hadError = true;
+                    }
+                }
+                return;
+            }
+        } else if (base->getQualifier().storage == EvqVaryingOut) {
+            // validate stage out;
+            if (nextStage == EShLangCount)
+                return;
+            if (outVarMaps[nextStage] != nullptr) {
+                auto ent2 = inVarMaps[nextStage]->find(name);
+                if (ent2 != inVarMaps[nextStage]->end()) {
+                    ent2->second.symbol->getType().appendMangledName(mangleName2);
+                    if (mangleName1 == mangleName2)
+                        return;
+                    else {
+                        TString err = "Invalid In/Out variable type : " + entKey.first;
+                        infoSink.info.message(EPrefixInternalError, err.c_str());
+                        hadError = true;
+                    }
+                }
+                return;
+            }
+        } else if (base->getQualifier().isUniformOrBuffer() && ! base->getQualifier().isPushConstant()) {
+            // validate uniform type;
+            for (int i = 0; i < EShLangCount; i++) {
+                if (i != currentStage && outVarMaps[i] != nullptr) {
+                    auto ent2 = uniformVarMap[i]->find(name);
+                    if (ent2 != uniformVarMap[i]->end()) {
+                        ent2->second.symbol->getType().appendMangledName(mangleName2);
+                        if (mangleName1 != mangleName2) {
+                            TString err = "Invalid Uniform variable type : " + entKey.first;
+                            infoSink.info.message(EPrefixInternalError, err.c_str());
+                            hadError = true;
+                        }
+                        mangleName2.clear();
+                    }
+                }
+            }
         }
-        return reserveSlot(set, base, size);
     }
+    TVarLiveMap *inVarMaps[EShLangCount], *outVarMaps[EShLangCount], *uniformVarMap[EShLangCount];
+    // Use for mark pre stage, to get more interface symbol information.
+    EShLanguage preStage, currentStage, nextStage;
+    // Use for mark current shader stage for resolver
+    TIoMapResolver& resolver;
+    TInfoSink& infoSink;
+    bool& hadError;
 
-    virtual bool validateBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool /*is_live*/) override = 0;
-
-    virtual int resolveBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool is_live) override = 0;
-
-    int resolveSet(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool /*is_live*/) override
-    {
-        if (type.getQualifier().hasSet())
-            return type.getQualifier().layoutSet;
-
-        // If a command line or API option requested a single descriptor set, use that (if not overrided by spaceN)
-        if (getResourceSetBinding().size() == 1)
-            return atoi(getResourceSetBinding()[0].c_str());
-
-        return 0;
-    }
-    int resolveUniformLocation(EShLanguage /*stage*/, const char* name, const glslang::TType& type, bool /*is_live*/) override
-    {
-        // kick out of not doing this
-        if (!doAutoLocationMapping())
-            return -1;
-
-        // no locations added if already present, a built-in variable, a block, or an opaque
-        if (type.getQualifier().hasLocation() || type.isBuiltIn() ||
-            type.getBasicType() == EbtBlock ||
-            type.getBasicType() == EbtAtomicUint ||
-            (type.containsOpaque() && intermediate.getSpv().openGl == 0))
-            return -1;
-
-        // no locations on blocks of built-in variables
-        if (type.isStruct()) {
-            if (type.getStruct()->size() < 1)
-                return -1;
-            if ((*type.getStruct())[0].type->isBuiltIn())
-                return -1;
-        }
-
-        int location = intermediate.getUniformLocationOverride(name);
-        if (location != -1)
-            return location;
-
-        location = nextUniformLocation;
-
-        nextUniformLocation += TIntermediate::computeTypeUniformLocationSize(type);
-
-        return location;
-    }
-    bool validateInOut(EShLanguage /*stage*/, const char* /*name*/, const TType& /*type*/, bool /*is_live*/) override
-    {
-        return true;
-    }
-    int resolveInOutLocation(EShLanguage stage, const char* /*name*/, const TType& type, bool /*is_live*/) override
-    {
-        // kick out of not doing this
-        if (!doAutoLocationMapping())
-            return -1;
-
-        // no locations added if already present, or a built-in variable
-        if (type.getQualifier().hasLocation() || type.isBuiltIn())
-            return -1;
-
-        // no locations on blocks of built-in variables
-        if (type.isStruct()) {
-            if (type.getStruct()->size() < 1)
-                return -1;
-            if ((*type.getStruct())[0].type->isBuiltIn())
-                return -1;
-        }
-
-        // point to the right input or output location counter
-        int& nextLocation = type.getQualifier().isPipeInput() ? nextInputLocation : nextOutputLocation;
-
-        // Placeholder. This does not do proper cross-stage lining up, nor
-        // work with mixed location/no-location declarations.
-        int location = nextLocation;
-        int typeLocationSize;
-        // Don’t take into account the outer-most array if the stage’s
-        // interface is automatically an array.
-        if (type.getQualifier().isArrayedIo(stage)) {
-                TType elementType(type, 0);
-                typeLocationSize = TIntermediate::computeTypeLocationSize(elementType, stage);
-        } else {
-                typeLocationSize = TIntermediate::computeTypeLocationSize(type, stage);
-        }
-        nextLocation += typeLocationSize;
-
-        return location;
-    }
-    int resolveInOutComponent(EShLanguage /*stage*/, const char* /*name*/, const TType& /*type*/, bool /*is_live*/) override
-    {
-        return -1;
-    }
-    int resolveInOutIndex(EShLanguage /*stage*/, const char* /*name*/, const TType& /*type*/, bool /*is_live*/) override
-    {
-        return -1;
-    }
-
-    void notifyBinding(EShLanguage, const char* /*name*/, const TType&, bool /*is_live*/) override {}
-    void notifyInOut(EShLanguage, const char* /*name*/, const TType&, bool /*is_live*/) override {}
-    void endNotifications(EShLanguage) override {}
-    void beginNotifications(EShLanguage) override {}
-    void beginResolve(EShLanguage) override {}
-    void endResolve(EShLanguage) override {}
-
-protected:
-    TDefaultIoResolverBase(TDefaultIoResolverBase&);
-    TDefaultIoResolverBase& operator=(TDefaultIoResolverBase&);
-
-    const TIntermediate &intermediate;
-    int nextUniformLocation;
-    int nextInputLocation;
-    int nextOutputLocation;
-
-    // Return descriptor set specific base if there is one, and the generic base otherwise.
-    int selectBaseBinding(int base, int descriptorSetBase) const {
-        return descriptorSetBase != -1 ? descriptorSetBase : base;
-    }
-
-    static int getLayoutSet(const glslang::TType& type) {
-        if (type.getQualifier().hasSet())
-            return type.getQualifier().layoutSet;
-        else
-            return 0;
-    }
-
-    static bool isSamplerType(const glslang::TType& type) {
-        return type.getBasicType() == glslang::EbtSampler && type.getSampler().isPureSampler();
-    }
-
-    static bool isTextureType(const glslang::TType& type) {
-        return (type.getBasicType() == glslang::EbtSampler && 
-                (type.getSampler().isTexture() || type.getSampler().isSubpass()));
-    }
-
-    static bool isUboType(const glslang::TType& type) {
-        return type.getQualifier().storage == EvqUniform;
-    }
+private:
+    TSymbolValidater& operator=(TSymbolValidater&) = delete;
 };
 
+struct TSlotCollector {
+    TSlotCollector(TIoMapResolver& r, TInfoSink& i) : resolver(r), infoSink(i) { }
+
+    inline void operator()(std::pair<const TString, TVarEntryInfo>& entKey) {
+        resolver.reserverStorageSlot(entKey.second, infoSink);
+        resolver.reserverResourceSlot(entKey.second, infoSink);
+    }
+    TIoMapResolver& resolver;
+    TInfoSink& infoSink;
+
+private:
+    TSlotCollector& operator=(TSlotCollector&) = delete;
+};
+
+TDefaultIoResolverBase::TDefaultIoResolverBase(const TIntermediate& intermediate)
+    : intermediate(intermediate)
+    , nextUniformLocation(intermediate.getUniformLocationBase())
+    , nextInputLocation(0)
+    , nextOutputLocation(0)
+{
+    memset(stageMask, false, sizeof(bool) * (EShLangCount + 1));
+}
+
+int TDefaultIoResolverBase::getBaseBinding(TResourceType res, unsigned int set) const {
+    return selectBaseBinding(intermediate.getShiftBinding(res), intermediate.getShiftBindingForSet(res, set));
+}
+
+const std::vector<std::string>& TDefaultIoResolverBase::getResourceSetBinding() const {
+    return intermediate.getResourceSetBinding();
+}
+
+bool TDefaultIoResolverBase::doAutoBindingMapping() const { return intermediate.getAutoMapBindings(); }
+
+bool TDefaultIoResolverBase::doAutoLocationMapping() const { return intermediate.getAutoMapLocations(); }
+
+TDefaultIoResolverBase::TSlotSet::iterator TDefaultIoResolverBase::findSlot(int set, int slot) {
+    return std::lower_bound(slots[set].begin(), slots[set].end(), slot);
+}
+
+bool TDefaultIoResolverBase::checkEmpty(int set, int slot) {
+    TSlotSet::iterator at = findSlot(set, slot);
+    return ! (at != slots[set].end() && *at == slot);
+}
+
+int TDefaultIoResolverBase::reserveSlot(int set, int slot, int size) {
+    TSlotSet::iterator at = findSlot(set, slot);
+    // tolerate aliasing, by not double-recording aliases
+    // (policy about appropriateness of the alias is higher up)
+    for (int i = 0; i < size; i++) {
+        if (at == slots[set].end() || *at != slot + i)
+            at = slots[set].insert(at, slot + i);
+        ++at;
+    }
+    return slot;
+}
+
+int TDefaultIoResolverBase::getFreeSlot(int set, int base, int size) {
+    TSlotSet::iterator at = findSlot(set, base);
+    if (at == slots[set].end())
+        return reserveSlot(set, base, size);
+    // look for a big enough gap
+    for (; at != slots[set].end(); ++at) {
+        if (*at - base >= size)
+            break;
+        base = *at + 1;
+    }
+    return reserveSlot(set, base, size);
+}
+
+int TDefaultIoResolverBase::resolveSet(EShLanguage /*stage*/, TVarEntryInfo& ent) {
+    const TType& type = ent.symbol->getType();
+    if (type.getQualifier().hasSet()) {
+        return ent.newSet = type.getQualifier().layoutSet;
+    }
+    // If a command line or API option requested a single descriptor set, use that (if not overrided by spaceN)
+    if (getResourceSetBinding().size() == 1) {
+        return ent.newSet = atoi(getResourceSetBinding()[0].c_str());
+    }
+    return ent.newSet = 0;
+}
+
+int TDefaultIoResolverBase::resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) {
+    const TType& type = ent.symbol->getType();
+    const char* name = ent.symbol->getName().c_str();
+    // kick out of not doing this
+    if (! doAutoLocationMapping()) {
+        return ent.newLocation = -1;
+    }
+    // no locations added if already present, a built-in variable, a block, or an opaque
+    if (type.getQualifier().hasLocation() || type.isBuiltIn() || type.getBasicType() == EbtBlock ||
+        type.isAtomic() || (type.containsOpaque() && intermediate.getSpv().openGl == 0)) {
+        return ent.newLocation = -1;
+    }
+    // no locations on blocks of built-in variables
+    if (type.isStruct()) {
+        if (type.getStruct()->size() < 1) {
+            return ent.newLocation = -1;
+        }
+        if ((*type.getStruct())[0].type->isBuiltIn()) {
+            return ent.newLocation = -1;
+        }
+    }
+    int location = intermediate.getUniformLocationOverride(name);
+    if (location != -1) {
+        return ent.newLocation = location;
+    }
+    location = nextUniformLocation;
+    nextUniformLocation += TIntermediate::computeTypeUniformLocationSize(type);
+    return ent.newLocation = location;
+}
+
+int TDefaultIoResolverBase::resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) {
+    const TType& type = ent.symbol->getType();
+    // kick out of not doing this
+    if (! doAutoLocationMapping()) {
+        return ent.newLocation = -1;
+    }
+
+    // no locations added if already present, or a built-in variable
+    if (type.getQualifier().hasLocation() || type.isBuiltIn()) {
+        return ent.newLocation = -1;
+    }
+
+    // no locations on blocks of built-in variables
+    if (type.isStruct()) {
+        if (type.getStruct()->size() < 1) {
+            return ent.newLocation = -1;
+        }
+        if ((*type.getStruct())[0].type->isBuiltIn()) {
+            return ent.newLocation = -1;
+        }
+    }
+    // point to the right input or output location counter
+    int& nextLocation = type.getQualifier().isPipeInput() ? nextInputLocation : nextOutputLocation;
+    // Placeholder. This does not do proper cross-stage lining up, nor
+    // work with mixed location/no-location declarations.
+    int location = nextLocation;
+    int typeLocationSize;
+    // Don’t take into account the outer-most array if the stage’s
+    // interface is automatically an array.
+    typeLocationSize = computeTypeLocationSize(type, stage);
+    nextLocation += typeLocationSize;
+    return ent.newLocation = location;
+}
+
+int TDefaultIoResolverBase::resolveInOutComponent(EShLanguage /*stage*/, TVarEntryInfo& ent) {
+    return ent.newComponent = -1;
+}
+
+int TDefaultIoResolverBase::resolveInOutIndex(EShLanguage /*stage*/, TVarEntryInfo& ent) { return ent.newIndex = -1; }
+
+uint32_t TDefaultIoResolverBase::computeTypeLocationSize(const TType& type, EShLanguage stage) {
+    int typeLocationSize;
+    // Don’t take into account the outer-most array if the stage’s
+    // interface is automatically an array.
+    if (type.getQualifier().isArrayedIo(stage)) {
+        TType elementType(type, 0);
+        typeLocationSize = TIntermediate::computeTypeLocationSize(elementType, stage);
+    } else {
+        typeLocationSize = TIntermediate::computeTypeLocationSize(type, stage);
+    }
+    return typeLocationSize;
+}
+
+//TDefaultGlslIoResolver
+TResourceType TDefaultGlslIoResolver::getResourceType(const glslang::TType& type) {
+    if (isImageType(type)) {
+        return EResImage;
+    }
+    if (isTextureType(type)) {
+        return EResTexture;
+    }
+    if (isSsboType(type)) {
+        return EResSsbo;
+    }
+    if (isSamplerType(type)) {
+        return EResSampler;
+    }
+    if (isUboType(type)) {
+        return EResUbo;
+    }
+    return EResCount;
+}
+
+TDefaultGlslIoResolver::TDefaultGlslIoResolver(const TIntermediate& intermediate)
+    : TDefaultIoResolverBase(intermediate)
+    , preStage(EShLangCount)
+    , currentStage(EShLangCount)
+{ }
+
+int TDefaultGlslIoResolver::resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) {
+    const TType& type = ent.symbol->getType();
+    const TString& name = IsAnonymous(ent.symbol->getName()) ?
+                            ent.symbol->getType().getTypeName()
+                            :
+                            ent.symbol->getName();
+    if (currentStage != stage) {
+        preStage = currentStage;
+        currentStage = stage;
+    }
+    // kick out of not doing this
+    if (! doAutoLocationMapping()) {
+        return ent.newLocation = -1;
+    }
+    // expand the location to each element if the symbol is a struct or array
+    if (type.getQualifier().hasLocation()) {
+        return ent.newLocation = type.getQualifier().layoutLocation;
+    }
+    // no locations added if already present, or a built-in variable
+    if (type.isBuiltIn()) {
+        return ent.newLocation = -1;
+    }
+    // no locations on blocks of built-in variables
+    if (type.isStruct()) {
+        if (type.getStruct()->size() < 1) {
+            return ent.newLocation = -1;
+        }
+        if ((*type.getStruct())[0].type->isBuiltIn()) {
+            return ent.newLocation = -1;
+        }
+    }
+    int typeLocationSize = computeTypeLocationSize(type, stage);
+    int location = type.getQualifier().layoutLocation;
+    bool hasLocation = false;
+    EShLanguage keyStage(EShLangCount);
+    TStorageQualifier storage;
+    storage = EvqInOut;
+    if (type.getQualifier().isPipeInput()) {
+        // If this symbol is a input, search pre stage's out
+        keyStage = preStage;
+    }
+    if (type.getQualifier().isPipeOutput()) {
+        // If this symbol is a output, search next stage's in
+        keyStage = currentStage;
+    }
+    // The in/out in current stage is not declared with location, but it is possible declared
+    // with explicit location in other stages, find the storageSlotMap firstly to check whether
+    // the in/out has location
+    int resourceKey = buildStorageKey(keyStage, storage);
+    if (! storageSlotMap[resourceKey].empty()) {
+        TVarSlotMap::iterator iter = storageSlotMap[resourceKey].find(name);
+        if (iter != storageSlotMap[resourceKey].end()) {
+            // If interface resource be found, set it has location and this symbol's new location
+            // equal the symbol's explicit location declarated in pre or next stage.
+            //
+            // vs:    out vec4 a;
+            // fs:    layout(..., location = 3,...) in vec4 a;
+            hasLocation = true;
+            location = iter->second;
+            // if we want deal like that:
+            // vs:    layout(location=4) out vec4 a;
+            //        out vec4 b;
+            //
+            // fs:    in vec4 a;
+            //        layout(location = 4) in vec4 b;
+            // we need retraverse the map.
+        }
+        if (! hasLocation) {
+            // If interface resource note found, It's mean the location in two stage are both implicit declarat.
+            // So we should find a new slot for this interface.
+            //
+            // vs: out vec4 a;
+            // fs: in vec4 a;
+            location = getFreeSlot(resourceKey, 0, typeLocationSize);
+            storageSlotMap[resourceKey][name] = location;
+        }
+    } else {
+        // the first interface declarated in a program.
+        TVarSlotMap varSlotMap;
+        location = getFreeSlot(resourceKey, 0, typeLocationSize);
+        varSlotMap[name] = location;
+        storageSlotMap[resourceKey] = varSlotMap;
+    }
+    //Update location
+    return ent.newLocation = location;
+}
+
+int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) {
+    const TType& type = ent.symbol->getType();
+    const TString& name = IsAnonymous(ent.symbol->getName()) ?
+                            ent.symbol->getType().getTypeName()
+                            :
+                            ent.symbol->getName();
+    // kick out of not doing this
+    if (! doAutoLocationMapping()) {
+        return ent.newLocation = -1;
+    }
+    // expand the location to each element if the symbol is a struct or array
+    if (type.getQualifier().hasLocation() && (type.isStruct() || type.isArray())) {
+        return ent.newLocation = type.getQualifier().layoutLocation;
+    } else {
+        // no locations added if already present, a built-in variable, a block, or an opaque
+        if (type.getQualifier().hasLocation() || type.isBuiltIn() || type.getBasicType() == EbtBlock ||
+            type.isAtomic() || (type.containsOpaque() && intermediate.getSpv().openGl == 0)) {
+            return ent.newLocation = -1;
+        }
+        // no locations on blocks of built-in variables
+        if (type.isStruct()) {
+            if (type.getStruct()->size() < 1) {
+                return ent.newLocation = -1;
+            }
+            if ((*type.getStruct())[0].type->isBuiltIn()) {
+                return ent.newLocation = -1;
+            }
+        }
+    }
+    int location = intermediate.getUniformLocationOverride(name.c_str());
+    if (location != -1) {
+        return ent.newLocation = location;
+    }
+
+    int size = TIntermediate::computeTypeUniformLocationSize(type);
+
+    // The uniform in current stage is not declared with location, but it is possible declared
+    // with explicit location in other stages, find the storageSlotMap firstly to check whether
+    // the uniform has location
+    bool hasLocation = false;
+    int resourceKey = buildStorageKey(EShLangCount, EvqUniform);
+    TVarSlotMap& slotMap = storageSlotMap[resourceKey];
+    // Check dose shader program has uniform resource
+    if (! slotMap.empty()) {
+        // If uniform resource not empty, try find a same name uniform
+        TVarSlotMap::iterator iter = slotMap.find(name);
+        if (iter != slotMap.end()) {
+            // If uniform resource be found, set it has location and this symbol's new location
+            // equal the uniform's explicit location declarated in other stage.
+            //
+            // vs:    uniform vec4 a;
+            // fs:    layout(..., location = 3,...) uniform vec4 a;
+            hasLocation = true;
+            location = iter->second;
+        }
+        if (! hasLocation) {
+            // No explicit location declaraten in other stage.
+            // So we should find a new slot for this uniform.
+            //
+            // vs:    uniform vec4 a;
+            // fs:    uniform vec4 a;
+            location = getFreeSlot(resourceKey, 0, computeTypeLocationSize(type, currentStage));
+            storageSlotMap[resourceKey][name] = location;
+        }
+    } else {
+        // the first uniform declarated in a program.
+        TVarSlotMap varSlotMap;
+        location = getFreeSlot(resourceKey, 0, size);
+        varSlotMap[name] = location;
+        storageSlotMap[resourceKey] = varSlotMap;
+    }
+    return ent.newLocation = location;
+}
+
+int TDefaultGlslIoResolver::resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) {
+    const TType& type = ent.symbol->getType();
+    const TString& name = IsAnonymous(ent.symbol->getName()) ?
+                            ent.symbol->getType().getTypeName()
+                            :
+                            ent.symbol->getName();
+    // On OpenGL arrays of opaque types take a seperate binding for each element
+    int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1;
+    TResourceType resource = getResourceType(type);
+    // don't need to handle uniform symbol, it will be handled in resolveUniformLocation
+    if (resource == EResUbo && type.getBasicType() != EbtBlock) {
+        return ent.newBinding = -1;
+    }
+    // There is no 'set' qualifier in OpenGL shading language, each resource has its own
+    // binding name space, so remap the 'set' to resource type which make each resource
+    // binding is valid from 0 to MAX_XXRESOURCE_BINDINGS
+    int set = resource;
+    if (resource < EResCount) {
+        if (type.getQualifier().hasBinding()) {
+            ent.newBinding = reserveSlot(set, getBaseBinding(resource, set) + type.getQualifier().layoutBinding, numBindings);
+            return ent.newBinding;
+        } else if (ent.live && doAutoBindingMapping()) {
+            // The resource in current stage is not declared with binding, but it is possible declared
+            // with explicit binding in other stages, find the resourceSlotMap firstly to check whether
+            // the resource has binding, don't need to allocate if it already has a binding
+            bool hasBinding = false;
+            if (! resourceSlotMap[resource].empty()) {
+                TVarSlotMap::iterator iter = resourceSlotMap[resource].find(name);
+                if (iter != resourceSlotMap[resource].end()) {
+                    hasBinding = true;
+                    ent.newBinding = iter->second;
+                }
+            }
+            if (! hasBinding) {
+                TVarSlotMap varSlotMap;
+                // find free slot, the caller did make sure it passes all vars with binding
+                // first and now all are passed that do not have a binding and needs one
+                int binding = getFreeSlot(resource, getBaseBinding(resource, set), numBindings);
+                varSlotMap[name] = binding;
+                resourceSlotMap[resource] = varSlotMap;
+                ent.newBinding = binding;
+            }
+            return ent.newBinding;
+        }
+    }
+    return ent.newBinding = -1;
+}
+
+void TDefaultGlslIoResolver::beginResolve(EShLanguage stage) {
+    // reset stage state
+    if (stage == EShLangCount)
+        preStage = currentStage = stage;
+    // update stage state
+    else if (currentStage != stage) {
+        preStage = currentStage;
+        currentStage = stage;
+    }
+}
+
+void TDefaultGlslIoResolver::endResolve(EShLanguage /*stage*/) {
+    // TODO nothing
+}
+
+void TDefaultGlslIoResolver::beginCollect(EShLanguage stage) {
+    // reset stage state
+    if (stage == EShLangCount)
+        preStage = currentStage = stage;
+    // update stage state
+    else if (currentStage != stage) {
+        preStage = currentStage;
+        currentStage = stage;
+    }
+}
+
+void TDefaultGlslIoResolver::endCollect(EShLanguage /*stage*/) {
+    // TODO nothing
+}
+
+void TDefaultGlslIoResolver::reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& infoSink) {
+    const TType& type = ent.symbol->getType();
+    const TString& name = IsAnonymous(ent.symbol->getName()) ?
+                            ent.symbol->getType().getTypeName()
+                            :
+                            ent.symbol->getName();
+    TStorageQualifier storage = type.getQualifier().storage;
+    EShLanguage stage(EShLangCount);
+    switch (storage) {
+    case EvqUniform:
+        if (type.getBasicType() != EbtBlock && type.getQualifier().hasLocation()) {
+            //
+            // Reserve the slots for the uniforms who has explicit location
+            int storageKey = buildStorageKey(EShLangCount, EvqUniform);
+            int location = type.getQualifier().layoutLocation;
+            TVarSlotMap& varSlotMap = storageSlotMap[storageKey];
+            TVarSlotMap::iterator iter = varSlotMap.find(name);
+            if (iter == varSlotMap.end()) {
+                int numLocations = TIntermediate::computeTypeUniformLocationSize(type);
+                reserveSlot(storageKey, location, numLocations);
+                varSlotMap[name] = location;
+            } else {
+                // Allocate location by name for OpenGL driver, so the uniform in different
+                // stages should be declared with the same location
+                if (iter->second != location) {
+                    TString errorMsg = "Invalid location: " + name;
+                    infoSink.info.message(EPrefixInternalError, errorMsg.c_str());
+                    hasError = true;
+                }
+            }
+        }
+        break;
+    case EvqVaryingIn:
+    case EvqVaryingOut:
+        //
+        // Reserve the slots for the inout who has explicit location
+        if (type.getQualifier().hasLocation()) {
+            stage = storage == EvqVaryingIn ? preStage : stage;
+            stage = storage == EvqVaryingOut ? currentStage : stage;
+            int storageKey = buildStorageKey(stage, EvqInOut);
+            int location = type.getQualifier().layoutLocation;
+            TVarSlotMap& varSlotMap = storageSlotMap[storageKey];
+            TVarSlotMap::iterator iter = varSlotMap.find(name);
+            if (iter == varSlotMap.end()) {
+                int numLocations = TIntermediate::computeTypeUniformLocationSize(type);
+                reserveSlot(storageKey, location, numLocations);
+                varSlotMap[name] = location;
+            } else {
+                // Allocate location by name for OpenGL driver, so the uniform in different
+                // stages should be declared with the same location
+                if (iter->second != location) {
+                    TString errorMsg = "Invalid location: " + name;
+                    infoSink.info.message(EPrefixInternalError, errorMsg.c_str());
+                    hasError = true;
+                }
+            }
+        }
+        break;
+    default:
+        break;
+    }
+}
+
+void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) {
+    const TType& type = ent.symbol->getType();
+    const TString& name = IsAnonymous(ent.symbol->getName()) ?
+                            ent.symbol->getType().getTypeName()
+                            :
+                            ent.symbol->getName();
+    int resource = getResourceType(type);
+    if (type.getQualifier().hasBinding()) {
+        TVarSlotMap& varSlotMap = resourceSlotMap[resource];
+        TVarSlotMap::iterator iter = varSlotMap.find(name);
+        int binding = type.getQualifier().layoutBinding;
+        if (iter == varSlotMap.end()) {
+            // Reserve the slots for the ubo, ssbo and opaques who has explicit binding
+            int numBindings = type.isSizedArray() ? type.getCumulativeArraySize() : 1;
+            varSlotMap[name] = binding;
+            reserveSlot(resource, binding, numBindings);
+        } else {
+            // Allocate binding by name for OpenGL driver, so the resource in different
+            // stages should be declared with the same binding
+            if (iter->second != binding) {
+                TString errorMsg = "Invalid binding: " + name;
+                infoSink.info.message(EPrefixInternalError, errorMsg.c_str());
+                hasError = true;
+            }
+        }
+    }
+}
+
+//TDefaultGlslIoResolver end
+
 /*
  * Basic implementation of glslang::TIoMapResolver that replaces the
  * previous offset behavior.
@@ -567,69 +919,51 @@
 /*
  * Default resolver
  */
-struct TDefaultIoResolver : public TDefaultIoResolverBase
-{
-    TDefaultIoResolver(const TIntermediate &intermediate) : TDefaultIoResolverBase(intermediate) { }
+struct TDefaultIoResolver : public TDefaultIoResolverBase {
+    TDefaultIoResolver(const TIntermediate& intermediate) : TDefaultIoResolverBase(intermediate) { }
 
-    bool validateBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& /*type*/, bool /*is_live*/) override
-    {
-        return true;
+    bool validateBinding(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; }
+
+    TResourceType getResourceType(const glslang::TType& type) override {
+        if (isImageType(type)) {
+            return EResImage;
+        }
+        if (isTextureType(type)) {
+            return EResTexture;
+        }
+        if (isSsboType(type)) {
+            return EResSsbo;
+        }
+        if (isSamplerType(type)) {
+            return EResSampler;
+        }
+        if (isUboType(type)) {
+            return EResUbo;
+        }
+        return EResCount;
     }
 
-    int resolveBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool is_live) override
-    {
+    int resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) override {
+        const TType& type = ent.symbol->getType();
         const int set = getLayoutSet(type);
         // On OpenGL arrays of opaque types take a seperate binding for each element
         int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1;
-
-        if (type.getQualifier().hasBinding()) {
-            if (isImageType(type))
-                return reserveSlot(set, getBaseBinding(EResImage, set) + type.getQualifier().layoutBinding, numBindings);
-
-            if (isTextureType(type))
-                return reserveSlot(set, getBaseBinding(EResTexture, set) + type.getQualifier().layoutBinding, numBindings);
-
-            if (isSsboType(type))
-                return reserveSlot(set, getBaseBinding(EResSsbo, set) + type.getQualifier().layoutBinding, numBindings);
-
-            if (isSamplerType(type))
-                return reserveSlot(set, getBaseBinding(EResSampler, set) + type.getQualifier().layoutBinding, numBindings);
-
-            if (isUboType(type))
-                return reserveSlot(set, getBaseBinding(EResUbo, set) + type.getQualifier().layoutBinding, numBindings);
-        } else if (is_live && doAutoBindingMapping()) {
-            // find free slot, the caller did make sure it passes all vars with binding
-            // first and now all are passed that do not have a binding and needs one
-
-            if (isImageType(type))
-                return getFreeSlot(set, getBaseBinding(EResImage, set), numBindings);
-
-            if (isTextureType(type))
-                return getFreeSlot(set, getBaseBinding(EResTexture, set), numBindings);
-
-            if (isSsboType(type))
-                return getFreeSlot(set, getBaseBinding(EResSsbo, set), numBindings);
-
-            if (isSamplerType(type))
-                return getFreeSlot(set, getBaseBinding(EResSampler, set), numBindings);
-
-            if (isUboType(type))
-                return getFreeSlot(set, getBaseBinding(EResUbo, set), numBindings);
+        TResourceType resource = getResourceType(type);
+        if (resource < EResCount) {
+            if (type.getQualifier().hasBinding()) {
+                return ent.newBinding = reserveSlot(
+                           set, getBaseBinding(resource, set) + type.getQualifier().layoutBinding, numBindings);
+            } else if (ent.live && doAutoBindingMapping()) {
+                // find free slot, the caller did make sure it passes all vars with binding
+                // first and now all are passed that do not have a binding and needs one
+                return ent.newBinding = getFreeSlot(set, getBaseBinding(resource, set), numBindings);
+            }
         }
-
-        return -1;
-    }
-
-protected:
-    static bool isImageType(const glslang::TType& type) {
-        return type.getBasicType() == glslang::EbtSampler && type.getSampler().isImage();
-    }
-
-    static bool isSsboType(const glslang::TType& type) {
-        return type.getQualifier().storage == EvqBuffer;
+        return ent.newBinding = -1;
     }
 };
 
+#ifdef ENABLE_HLSL
 /********************************************************************************
 The following IO resolver maps types in HLSL register space, as follows:
 
@@ -647,7 +981,7 @@
    BYTEADDRESSBUFFER
    BUFFER
    TBUFFER
-    
+
 s - for samplers
    SAMPLER
    SAMPLER1D
@@ -673,98 +1007,69 @@
    CBUFFER
    CONSTANTBUFFER
  ********************************************************************************/
-struct TDefaultHlslIoResolver : public TDefaultIoResolverBase
-{
-    TDefaultHlslIoResolver(const TIntermediate &intermediate) : TDefaultIoResolverBase(intermediate) { }
+struct TDefaultHlslIoResolver : public TDefaultIoResolverBase {
+    TDefaultHlslIoResolver(const TIntermediate& intermediate) : TDefaultIoResolverBase(intermediate) { }
 
-    bool validateBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& /*type*/, bool /*is_live*/) override
-    {
-        return true;
-    }
+    bool validateBinding(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; }
 
-    int resolveBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool is_live) override
-    {
-        const int set = getLayoutSet(type);
-
-        if (type.getQualifier().hasBinding()) {
-            if (isUavType(type))
-                return reserveSlot(set, getBaseBinding(EResUav, set) + type.getQualifier().layoutBinding);
-
-            if (isSrvType(type))
-                return reserveSlot(set, getBaseBinding(EResTexture, set) + type.getQualifier().layoutBinding);
-
-            if (isSamplerType(type))
-                return reserveSlot(set, getBaseBinding(EResSampler, set) + type.getQualifier().layoutBinding);
-
-            if (isUboType(type))
-                return reserveSlot(set, getBaseBinding(EResUbo, set) + type.getQualifier().layoutBinding);
-        } else if (is_live && doAutoBindingMapping()) {
-            // find free slot, the caller did make sure it passes all vars with binding
-            // first and now all are passed that do not have a binding and needs one
-
-            if (isUavType(type))
-                return getFreeSlot(set, getBaseBinding(EResUav, set));
-
-            if (isSrvType(type))
-                return getFreeSlot(set, getBaseBinding(EResTexture, set));
-
-            if (isSamplerType(type))
-                return getFreeSlot(set, getBaseBinding(EResSampler, set));
-
-            if (isUboType(type))
-                return getFreeSlot(set, getBaseBinding(EResUbo, set));
+    TResourceType getResourceType(const glslang::TType& type) override {
+        if (isUavType(type)) {
+            return EResUav;
         }
-
-        return -1;
+        if (isSrvType(type)) {
+            return EResTexture;
+        }
+        if (isSamplerType(type)) {
+            return EResSampler;
+        }
+        if (isUboType(type)) {
+            return EResUbo;
+        }
+        return EResCount;
     }
 
-protected:
-    // Return true if this is a SRV (shader resource view) type:
-    static bool isSrvType(const glslang::TType& type) {
-        return isTextureType(type) || type.getQualifier().storage == EvqBuffer;
-    }
-
-    // Return true if this is a UAV (unordered access view) type:
-    static bool isUavType(const glslang::TType& type) {
-        if (type.getQualifier().readonly)
-            return false;
-
-        return (type.getBasicType() == glslang::EbtSampler && type.getSampler().isImage()) ||
-            (type.getQualifier().storage == EvqBuffer);
+    int resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) override {
+        const TType& type = ent.symbol->getType();
+        const int set = getLayoutSet(type);
+        TResourceType resource = getResourceType(type);
+        if (resource < EResCount) {
+            if (type.getQualifier().hasBinding()) {
+                return ent.newBinding = reserveSlot(set, getBaseBinding(resource, set) + type.getQualifier().layoutBinding);
+            } else if (ent.live && doAutoBindingMapping()) {
+                // find free slot, the caller did make sure it passes all vars with binding
+                // first and now all are passed that do not have a binding and needs one
+                return ent.newBinding = getFreeSlot(set, getBaseBinding(resource, set));
+            }
+        }
+        return ent.newBinding = -1;
     }
 };
-
+#endif
 
 // Map I/O variables to provided offsets, and make bindings for
 // unbound but live variables.
 //
 // Returns false if the input is too malformed to do this.
-bool TIoMapper::addStage(EShLanguage stage, TIntermediate &intermediate, TInfoSink &infoSink, TIoMapResolver *resolver)
-{
-    bool somethingToDo = !intermediate.getResourceSetBinding().empty() ||
-        intermediate.getAutoMapBindings() ||
-        intermediate.getAutoMapLocations();
-
-    for (int res = 0; res < EResCount; ++res) {
-        somethingToDo = somethingToDo ||
-            (intermediate.getShiftBinding(TResourceType(res)) != 0) ||
-            intermediate.hasShiftBindingForSet(TResourceType(res));
+bool TIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TInfoSink& infoSink, TIoMapResolver* resolver) {
+    bool somethingToDo = ! intermediate.getResourceSetBinding().empty() || intermediate.getAutoMapBindings() ||
+                         intermediate.getAutoMapLocations();
+    // Restrict the stricter condition to further check 'somethingToDo' only if 'somethingToDo' has not been set, reduce
+    // unnecessary or insignificant for-loop operation after 'somethingToDo' have been true.
+    for (int res = 0; (res < EResCount && !somethingToDo); ++res) {
+        somethingToDo = somethingToDo || (intermediate.getShiftBinding(TResourceType(res)) != 0) ||
+                        intermediate.hasShiftBindingForSet(TResourceType(res));
     }
-
-    if (!somethingToDo && resolver == nullptr)
+    if (! somethingToDo && resolver == nullptr)
         return true;
-
     if (intermediate.getNumEntryPoints() != 1 || intermediate.isRecursive())
         return false;
-
     TIntermNode* root = intermediate.getTreeRoot();
     if (root == nullptr)
         return false;
-
     // if no resolver is provided, use the default resolver with the given shifts and auto map settings
     TDefaultIoResolver defaultResolver(intermediate);
+#ifdef ENABLE_HLSL
     TDefaultHlslIoResolver defaultHlslResolver(intermediate);
-
     if (resolver == nullptr) {
         // TODO: use a passed in IO mapper for this
         if (intermediate.usingHlslIoMapping())
@@ -772,47 +1077,191 @@
         else
             resolver = &defaultResolver;
     }
+    resolver->addStage(stage);
+#else
+    resolver = &defaultResolver;
+#endif
 
     TVarLiveMap inVarMap, outVarMap, uniformVarMap;
+    TVarLiveVector inVector, outVector, uniformVector;
     TVarGatherTraverser iter_binding_all(intermediate, true, inVarMap, outVarMap, uniformVarMap);
     TVarGatherTraverser iter_binding_live(intermediate, false, inVarMap, outVarMap, uniformVarMap);
-
     root->traverse(&iter_binding_all);
     iter_binding_live.pushFunction(intermediate.getEntryPointMangledName().c_str());
-
-    while (!iter_binding_live.functions.empty()) {
+    while (! iter_binding_live.functions.empty()) {
         TIntermNode* function = iter_binding_live.functions.back();
         iter_binding_live.functions.pop_back();
         function->traverse(&iter_binding_live);
     }
-
     // sort entries by priority. see TVarEntryInfo::TOrderByPriority for info.
-    std::sort(uniformVarMap.begin(), uniformVarMap.end(), TVarEntryInfo::TOrderByPriority());
-
+    std::for_each(inVarMap.begin(), inVarMap.end(),
+                  [&inVector](TVarLivePair p) { inVector.push_back(p); });
+    std::sort(inVector.begin(), inVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
+        return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
+    });
+    std::for_each(outVarMap.begin(), outVarMap.end(),
+                  [&outVector](TVarLivePair p) { outVector.push_back(p); });
+    std::sort(outVector.begin(), outVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
+        return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
+    });
+    std::for_each(uniformVarMap.begin(), uniformVarMap.end(),
+                  [&uniformVector](TVarLivePair p) { uniformVector.push_back(p); });
+    std::sort(uniformVector.begin(), uniformVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
+        return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
+    });
     bool hadError = false;
     TNotifyInOutAdaptor inOutNotify(stage, *resolver);
     TNotifyUniformAdaptor uniformNotify(stage, *resolver);
-    TResolverUniformAdaptor uniformResolve(stage, *resolver, infoSink, hadError, intermediate);
-    TResolverInOutAdaptor inOutResolve(stage, *resolver, infoSink, hadError, intermediate);
+    TResolverUniformAdaptor uniformResolve(stage, *resolver, infoSink, hadError);
+    TResolverInOutAdaptor inOutResolve(stage, *resolver, infoSink, hadError);
     resolver->beginNotifications(stage);
-    std::for_each(inVarMap.begin(), inVarMap.end(), inOutNotify);
-    std::for_each(outVarMap.begin(), outVarMap.end(), inOutNotify);
-    std::for_each(uniformVarMap.begin(), uniformVarMap.end(), uniformNotify);
+    std::for_each(inVector.begin(), inVector.end(), inOutNotify);
+    std::for_each(outVector.begin(), outVector.end(), inOutNotify);
+    std::for_each(uniformVector.begin(), uniformVector.end(), uniformNotify);
     resolver->endNotifications(stage);
     resolver->beginResolve(stage);
-    std::for_each(inVarMap.begin(), inVarMap.end(), inOutResolve);
-    std::for_each(outVarMap.begin(), outVarMap.end(), inOutResolve);
-    std::for_each(uniformVarMap.begin(), uniformVarMap.end(), uniformResolve);
+    std::for_each(inVector.begin(), inVector.end(), inOutResolve);
+    std::for_each(inVector.begin(), inVector.end(), [&inVarMap](TVarLivePair p) {
+        auto at = inVarMap.find(p.second.symbol->getName());
+        if (at != inVarMap.end())
+            at->second = p.second;
+    });
+    std::for_each(outVector.begin(), outVector.end(), inOutResolve);
+    std::for_each(outVector.begin(), outVector.end(), [&outVarMap](TVarLivePair p) {
+        auto at = outVarMap.find(p.second.symbol->getName());
+        if (at != outVarMap.end())
+            at->second = p.second;
+    });
+    std::for_each(uniformVector.begin(), uniformVector.end(), uniformResolve);
+    std::for_each(uniformVector.begin(), uniformVector.end(), [&uniformVarMap](TVarLivePair p) {
+        auto at = uniformVarMap.find(p.second.symbol->getName());
+        if (at != uniformVarMap.end())
+            at->second = p.second;
+    });
     resolver->endResolve(stage);
-
     if (!hadError) {
-        // sort by id again, so we can use lower bound to find entries
-        std::sort(uniformVarMap.begin(), uniformVarMap.end(), TVarEntryInfo::TOrderById());
         TVarSetTraverser iter_iomap(intermediate, inVarMap, outVarMap, uniformVarMap);
         root->traverse(&iter_iomap);
     }
-
     return !hadError;
 }
 
+// Map I/O variables to provided offsets, and make bindings for
+// unbound but live variables.
+//
+// Returns false if the input is too malformed to do this.
+bool TGlslIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TInfoSink& infoSink, TIoMapResolver* resolver) {
+
+    bool somethingToDo = ! intermediate.getResourceSetBinding().empty() || intermediate.getAutoMapBindings() ||
+                         intermediate.getAutoMapLocations();
+    // Restrict the stricter condition to further check 'somethingToDo' only if 'somethingToDo' has not been set, reduce
+    // unnecessary or insignificant for-loop operation after 'somethingToDo' have been true.
+    for (int res = 0; (res < EResCount && !somethingToDo); ++res) {
+        somethingToDo = somethingToDo || (intermediate.getShiftBinding(TResourceType(res)) != 0) ||
+                        intermediate.hasShiftBindingForSet(TResourceType(res));
+    }
+    if (! somethingToDo && resolver == nullptr) {
+        return true;
+    }
+    if (intermediate.getNumEntryPoints() != 1 || intermediate.isRecursive()) {
+        return false;
+    }
+    TIntermNode* root = intermediate.getTreeRoot();
+    if (root == nullptr) {
+        return false;
+    }
+    // if no resolver is provided, use the default resolver with the given shifts and auto map settings
+    TDefaultGlslIoResolver defaultResolver(intermediate);
+    if (resolver == nullptr) {
+        resolver = &defaultResolver;
+    }
+    resolver->addStage(stage);
+    inVarMaps[stage] = new TVarLiveMap, outVarMaps[stage] = new TVarLiveMap(), uniformVarMap[stage] = new TVarLiveMap();
+    TVarGatherTraverser iter_binding_all(intermediate, true, *inVarMaps[stage], *outVarMaps[stage],
+                                         *uniformVarMap[stage]);
+    TVarGatherTraverser iter_binding_live(intermediate, false, *inVarMaps[stage], *outVarMaps[stage],
+                                          *uniformVarMap[stage]);
+    root->traverse(&iter_binding_all);
+    iter_binding_live.pushFunction(intermediate.getEntryPointMangledName().c_str());
+    while (! iter_binding_live.functions.empty()) {
+        TIntermNode* function = iter_binding_live.functions.back();
+        iter_binding_live.functions.pop_back();
+        function->traverse(&iter_binding_live);
+    }
+    TNotifyInOutAdaptor inOutNotify(stage, *resolver);
+    TNotifyUniformAdaptor uniformNotify(stage, *resolver);
+    // Resolve current stage input symbol location with previous stage output here,
+    // uniform symbol, ubo, ssbo and opaque symbols are per-program resource,
+    // will resolve uniform symbol location and ubo/ssbo/opaque binding in doMap()
+    resolver->beginNotifications(stage);
+    std::for_each(inVarMaps[stage]->begin(), inVarMaps[stage]->end(), inOutNotify);
+    std::for_each(outVarMaps[stage]->begin(), outVarMaps[stage]->end(), inOutNotify);
+    std::for_each(uniformVarMap[stage]->begin(), uniformVarMap[stage]->end(), uniformNotify);
+    resolver->endNotifications(stage);
+    TSlotCollector slotCollector(*resolver, infoSink);
+    resolver->beginCollect(stage);
+    std::for_each(inVarMaps[stage]->begin(), inVarMaps[stage]->end(), slotCollector);
+    std::for_each(outVarMaps[stage]->begin(), outVarMaps[stage]->end(), slotCollector);
+    std::for_each(uniformVarMap[stage]->begin(), uniformVarMap[stage]->end(), slotCollector);
+    resolver->endCollect(stage);
+    intermediates[stage] = &intermediate;
+    return !hadError;
+}
+
+bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) {
+    resolver->endResolve(EShLangCount);
+    if (!hadError) {
+        //Resolve uniform location, ubo/ssbo/opaque bindings across stages
+        TResolverUniformAdaptor uniformResolve(EShLangCount, *resolver, infoSink, hadError);
+        TResolverInOutAdaptor inOutResolve(EShLangCount, *resolver, infoSink, hadError);
+        TSymbolValidater symbolValidater(*resolver, infoSink, inVarMaps, outVarMaps, uniformVarMap, hadError);
+        TVarLiveVector uniformVector;
+        resolver->beginResolve(EShLangCount);
+        for (int stage = EShLangVertex; stage < EShLangCount; stage++) {
+            if (inVarMaps[stage] != nullptr) {
+                inOutResolve.setStage(EShLanguage(stage));
+                std::for_each(inVarMaps[stage]->begin(), inVarMaps[stage]->end(), symbolValidater);
+                std::for_each(inVarMaps[stage]->begin(), inVarMaps[stage]->end(), inOutResolve);
+                std::for_each(outVarMaps[stage]->begin(), outVarMaps[stage]->end(), symbolValidater);
+                std::for_each(outVarMaps[stage]->begin(), outVarMaps[stage]->end(), inOutResolve);
+            }
+            if (uniformVarMap[stage] != nullptr) {
+                uniformResolve.setStage(EShLanguage(stage));
+                // sort entries by priority. see TVarEntryInfo::TOrderByPriority for info.
+                std::for_each(uniformVarMap[stage]->begin(), uniformVarMap[stage]->end(),
+                              [&uniformVector](TVarLivePair p) { uniformVector.push_back(p); });
+            }
+        }
+        std::sort(uniformVector.begin(), uniformVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
+            return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
+        });
+        std::for_each(uniformVector.begin(), uniformVector.end(), symbolValidater);
+        std::for_each(uniformVector.begin(), uniformVector.end(), uniformResolve);
+        std::sort(uniformVector.begin(), uniformVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool {
+            return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
+        });
+        resolver->endResolve(EShLangCount);
+        for (size_t stage = 0; stage < EShLangCount; stage++) {
+            if (intermediates[stage] != nullptr) {
+                // traverse each stage, set new location to each input/output and unifom symbol, set new binding to
+                // ubo, ssbo and opaque symbols
+                TVarLiveMap** pUniformVarMap = uniformVarMap;
+                std::for_each(uniformVector.begin(), uniformVector.end(), [pUniformVarMap, stage](TVarLivePair p) {
+                    auto at = pUniformVarMap[stage]->find(p.second.symbol->getName());
+                    if (at != pUniformVarMap[stage]->end())
+                        at->second = p.second;
+                });
+                TVarSetTraverser iter_iomap(*intermediates[stage], *inVarMaps[stage], *outVarMaps[stage],
+                                            *uniformVarMap[stage]);
+                intermediates[stage]->getTreeRoot()->traverse(&iter_iomap);
+            }
+        }
+        return !hadError;
+    } else {
+        return false;
+    }
+}
+
 } // end namespace glslang
+
+#endif // GLSLANG_WEB
diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h
index 5e0d439..13a8932 100644
--- a/glslang/MachineIndependent/iomapper.h
+++ b/glslang/MachineIndependent/iomapper.h
@@ -33,11 +33,15 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
+#ifndef GLSLANG_WEB
+
 #ifndef _IOMAPPER_INCLUDED
 #define _IOMAPPER_INCLUDED
 
-#include "../Public/ShaderLang.h"
-
+#include <cstdint>
+#include "LiveTraverser.h"
+#include <unordered_map>
+#include <unordered_set>
 //
 // A reflection database and its interface, consistent with the OpenGL API reflection queries.
 //
@@ -47,17 +51,250 @@
 namespace glslang {
 
 class TIntermediate;
+struct TVarEntryInfo {
+    int id;
+    TIntermSymbol* symbol;
+    bool live;
+    int newBinding;
+    int newSet;
+    int newLocation;
+    int newComponent;
+    int newIndex;
+    EShLanguage stage;
+    struct TOrderById {
+        inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) { return l.id < r.id; }
+    };
+
+    struct TOrderByPriority {
+        // ordering:
+        // 1) has both binding and set
+        // 2) has binding but no set
+        // 3) has no binding but set
+        // 4) has no binding and no set
+        inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) {
+            const TQualifier& lq = l.symbol->getQualifier();
+            const TQualifier& rq = r.symbol->getQualifier();
+
+            // simple rules:
+            // has binding gives 2 points
+            // has set gives 1 point
+            // who has the most points is more important.
+            int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0);
+            int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0);
+
+            if (lPoints == rPoints)
+                return l.id < r.id;
+            return lPoints > rPoints;
+        }
+    };
+};
+
+// Base class for shared TIoMapResolver services, used by several derivations.
+struct TDefaultIoResolverBase : public glslang::TIoMapResolver {
+public:
+    TDefaultIoResolverBase(const TIntermediate& intermediate);
+    typedef std::vector<int> TSlotSet;
+    typedef std::unordered_map<int, TSlotSet> TSlotSetMap;
+
+    // grow the reflection stage by stage
+    void notifyBinding(EShLanguage, TVarEntryInfo& /*ent*/) override {}
+    void notifyInOut(EShLanguage, TVarEntryInfo& /*ent*/) override {}
+    void beginNotifications(EShLanguage) override {}
+    void endNotifications(EShLanguage) override {}
+    void beginResolve(EShLanguage) override {}
+    void endResolve(EShLanguage) override {}
+    void beginCollect(EShLanguage) override {}
+    void endCollect(EShLanguage) override {}
+    void reserverResourceSlot(TVarEntryInfo& /*ent*/, TInfoSink& /*infoSink*/) override {}
+    void reserverStorageSlot(TVarEntryInfo& /*ent*/, TInfoSink& /*infoSink*/) override {}
+    int getBaseBinding(TResourceType res, unsigned int set) const;
+    const std::vector<std::string>& getResourceSetBinding() const;
+    virtual TResourceType getResourceType(const glslang::TType& type) = 0;
+    bool doAutoBindingMapping() const;
+    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; }
+    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;
+    int resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
+    int resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) override;
+    int resolveInOutComponent(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
+    int resolveInOutIndex(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
+    void addStage(EShLanguage stage) override {
+        if (stage < EShLangCount)
+            stageMask[stage] = true;
+    }
+    uint32_t computeTypeLocationSize(const TType& type, EShLanguage stage);
+
+    TSlotSetMap slots;
+    bool hasError = false;
+
+protected:
+    TDefaultIoResolverBase(TDefaultIoResolverBase&);
+    TDefaultIoResolverBase& operator=(TDefaultIoResolverBase&);
+    const TIntermediate& intermediate;
+    int nextUniformLocation;
+    int nextInputLocation;
+    int nextOutputLocation;
+    bool stageMask[EShLangCount + 1];
+    // Return descriptor set specific base if there is one, and the generic base otherwise.
+    int selectBaseBinding(int base, int descriptorSetBase) const {
+        return descriptorSetBase != -1 ? descriptorSetBase : base;
+    }
+
+    static int getLayoutSet(const glslang::TType& type) {
+        if (type.getQualifier().hasSet())
+            return type.getQualifier().layoutSet;
+        else
+            return 0;
+    }
+
+    static bool isSamplerType(const glslang::TType& type) {
+        return type.getBasicType() == glslang::EbtSampler && type.getSampler().isPureSampler();
+    }
+
+    static bool isTextureType(const glslang::TType& type) {
+        return (type.getBasicType() == glslang::EbtSampler &&
+                (type.getSampler().isTexture() || type.getSampler().isSubpass()));
+    }
+
+    static bool isUboType(const glslang::TType& type) {
+        return type.getQualifier().storage == EvqUniform;
+    }
+
+    static bool isImageType(const glslang::TType& type) {
+        return type.getBasicType() == glslang::EbtSampler && type.getSampler().isImage();
+    }
+
+    static bool isSsboType(const glslang::TType& type) {
+        return type.getQualifier().storage == EvqBuffer;
+    }
+
+    // Return true if this is a SRV (shader resource view) type:
+    static bool isSrvType(const glslang::TType& type) {
+        return isTextureType(type) || type.getQualifier().storage == EvqBuffer;
+    }
+
+    // Return true if this is a UAV (unordered access view) type:
+    static bool isUavType(const glslang::TType& type) {
+        if (type.getQualifier().isReadOnly())
+            return false;
+        return (type.getBasicType() == glslang::EbtSampler && type.getSampler().isImage()) ||
+                (type.getQualifier().storage == EvqBuffer);
+    }
+};
+
+// Defaulf I/O resolver for OpenGL
+struct TDefaultGlslIoResolver : public TDefaultIoResolverBase {
+public:
+    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; }
+    TResourceType getResourceType(const glslang::TType& type) override;
+    int resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) override;
+    int resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
+    int resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
+    void beginResolve(EShLanguage /*stage*/) override;
+    void endResolve(EShLanguage stage) override;
+    void beginCollect(EShLanguage) override;
+    void endCollect(EShLanguage) override;
+    void reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& infoSink) override;
+    void reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) override;
+    // in/out symbol and uniform symbol are stored in the same resourceSlotMap, the storage key is used to identify each type of symbol.
+    // We use stage and storage qualifier to construct a storage key. it can help us identify the same storage resource used in different stage.
+    // if a resource is a program resource and we don't need know it usage stage, we can use same stage to build storage key.
+    // Note: both stage and type must less then 0xffff.
+    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.
+    EShLanguage preStage;
+    // Use for mark current shader stage for resolver
+    EShLanguage currentStage;
+    // Slot map for storage resource(location of uniform and interface symbol) It's a program share slot
+    TSlotMap resourceSlotMap;
+    // Slot map for other resource(image, ubo, ssbo), It's a program share slot.
+    TSlotMap storageSlotMap;
+};
+
+typedef std::map<TString, TVarEntryInfo> TVarLiveMap;
+
+// override function "operator=", if a vector<const _Kty, _Ty> being sort,
+// when use vc++, the sort function will call :
+// pair& operator=(const pair<_Other1, _Other2>& _Right)
+// {
+//     first = _Right.first;
+//     second = _Right.second;
+//     return (*this);
+// }
+// that will make a const type handing on left.
+// override this function can avoid a compiler error.
+// In the future, if the vc++ compiler can handle such a situation,
+// this part of the code will be removed.
+struct TVarLivePair : std::pair<const TString, TVarEntryInfo> {
+    TVarLivePair(std::pair<const TString, TVarEntryInfo>& _Right) : pair(_Right.first, _Right.second) {}
+    TVarLivePair& operator=(const TVarLivePair& _Right) {
+        const_cast<TString&>(first) = _Right.first;
+        second = _Right.second;
+        return (*this);
+    }
+};
+typedef std::vector<TVarLivePair> TVarLiveVector;
 
 // I/O mapper
 class TIoMapper {
 public:
     TIoMapper() {}
     virtual ~TIoMapper() {}
-
     // grow the reflection stage by stage
-    bool addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*);
+    bool virtual addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*);
+    bool virtual doMap(TIoMapResolver*, TInfoSink&) { return true; }
+};
+
+// I/O mapper for OpenGL
+class TGlslIoMapper : public TIoMapper {
+public:
+    TGlslIoMapper() {
+        memset(inVarMaps,     0, sizeof(TVarLiveMap*)   * EShLangCount);
+        memset(outVarMaps,    0, sizeof(TVarLiveMap*)   * EShLangCount);
+        memset(uniformVarMap, 0, sizeof(TVarLiveMap*)   * EShLangCount);
+        memset(intermediates, 0, sizeof(TIntermediate*) * EShLangCount);
+    }
+    virtual ~TGlslIoMapper() {
+        for (size_t stage = 0; stage < EShLangCount; stage++) {
+            if (inVarMaps[stage] != nullptr) {
+                delete inVarMaps[stage];
+                inVarMaps[stage] = nullptr;
+            }
+            if (outVarMaps[stage] != nullptr) {
+                delete outVarMaps[stage];
+                outVarMaps[stage] = nullptr;
+            }
+            if (uniformVarMap[stage] != nullptr) {
+                delete uniformVarMap[stage];
+                uniformVarMap[stage] = nullptr;
+            }
+            if (intermediates[stage] != nullptr)
+                intermediates[stage] = nullptr;
+        }
+    }
+    // grow the reflection stage by stage
+    bool addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*) override;
+    bool doMap(TIoMapResolver*, TInfoSink&) override;
+    TVarLiveMap *inVarMaps[EShLangCount], *outVarMaps[EShLangCount],
+                *uniformVarMap[EShLangCount];
+    TIntermediate* intermediates[EShLangCount];
+    bool hadError = false;
 };
 
 } // end namespace glslang
 
 #endif // _IOMAPPER_INCLUDED
+
+#endif //  GLSLANG_WEB
diff --git a/glslang/MachineIndependent/limits.cpp b/glslang/MachineIndependent/limits.cpp
index 64d191b..51d9300 100644
--- a/glslang/MachineIndependent/limits.cpp
+++ b/glslang/MachineIndependent/limits.cpp
@@ -187,12 +187,14 @@
 //
 void TParseContext::constantIndexExpressionCheck(TIntermNode* index)
 {
+#ifndef GLSLANG_WEB
     TIndexTraverser it(inductiveLoopIds);
 
     index->traverse(&it);
 
     if (it.bad)
         error(it.badLoc, "Non-constant-index-expression", "limitations", "");
+#endif
 }
 
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
index 977600b..dcb1cc8 100755
--- a/glslang/MachineIndependent/linkValidate.cpp
+++ b/glslang/MachineIndependent/linkValidate.cpp
@@ -56,8 +56,10 @@
 //
 void TIntermediate::error(TInfoSink& infoSink, const char* message)
 {
+#ifndef GLSLANG_WEB
     infoSink.info.prefix(EPrefixError);
     infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n";
+#endif
 
     ++numErrors;
 }
@@ -65,8 +67,10 @@
 // Link-time warning.
 void TIntermediate::warn(TInfoSink& infoSink, const char* message)
 {
+#ifndef GLSLANG_WEB
     infoSink.info.prefix(EPrefixWarning);
     infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n";
+#endif
 }
 
 // TODO: 4.4 offset/align:  "Two blocks linked together in the same program with the same block
@@ -78,9 +82,11 @@
 //
 void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit)
 {
+#ifndef GLSLANG_WEB
     mergeCallGraphs(infoSink, unit);
     mergeModes(infoSink, unit);
     mergeTrees(infoSink, unit);
+#endif
 }
 
 void TIntermediate::mergeCallGraphs(TInfoSink& infoSink, TIntermediate& unit)
@@ -98,6 +104,8 @@
     callGraph.insert(callGraph.end(), unit.callGraph.begin(), unit.callGraph.end());
 }
 
+#ifndef GLSLANG_WEB
+
 #define MERGE_MAX(member) member = std::max(member, unit.member)
 #define MERGE_TRUE(member) if (unit.member) member = unit.member;
 
@@ -106,9 +114,9 @@
     if (language != unit.language)
         error(infoSink, "stages must match when linking into a single stage");
 
-    if (source == EShSourceNone)
-        source = unit.source;
-    if (source != unit.source)
+    if (getSource() == EShSourceNone)
+        setSource(unit.getSource());
+    if (getSource() != unit.getSource())
         error(infoSink, "can't link compilation units from different source languages");
 
     if (treeRoot == nullptr) {
@@ -116,7 +124,7 @@
         version = unit.version;
         requestedExtensions = unit.requestedExtensions;
     } else {
-        if ((profile == EEsProfile) != (unit.profile == EEsProfile))
+        if ((isEsProfile()) != (unit.isEsProfile()))
             error(infoSink, "Cannot cross link ES and desktop profiles");
         else if (unit.profile == ECompatibilityProfile)
             profile = ECompatibilityProfile;
@@ -130,7 +138,11 @@
     MERGE_MAX(spvVersion.openGl);
 
     numErrors += unit.getNumErrors();
-    numPushConstants += unit.numPushConstants;
+    // Only one push_constant is allowed, mergeLinkerObjects() will ensure the push_constant
+    // is the same for all units.
+    if (numPushConstants > 1 || unit.numPushConstants > 1)
+        error(infoSink, "Only one push_constant block is allowed per stage");
+    numPushConstants = std::min(numPushConstants + unit.numPushConstants, 1);
 
     if (unit.invocations != TQualifier::layoutNotSet) {
         if (invocations == TQualifier::layoutNotSet)
@@ -142,18 +154,13 @@
     if (vertices == TQualifier::layoutNotSet)
         vertices = unit.vertices;
     else if (vertices != unit.vertices) {
-        if (language == EShLangGeometry
-#ifdef NV_EXTENSIONS
-            || language == EShLangMeshNV
-#endif
-            )
+        if (language == EShLangGeometry || language == EShLangMeshNV)
             error(infoSink, "Contradictory layout max_vertices values");
         else if (language == EShLangTessControl)
             error(infoSink, "Contradictory layout vertices values");
         else
             assert(0);
     }
-#ifdef NV_EXTENSIONS
     if (primitives == TQualifier::layoutNotSet)
         primitives = unit.primitives;
     else if (primitives != unit.primitives) {
@@ -162,7 +169,6 @@
         else
             assert(0);
     }
-#endif
 
     if (inputPrimitive == ElgNone)
         inputPrimitive = unit.inputPrimitive;
@@ -190,12 +196,14 @@
     MERGE_TRUE(pointMode);
 
     for (int i = 0; i < 3; ++i) {
-        if (localSize[i] > 1)
+        if (!localSizeNotDefault[i] && unit.localSizeNotDefault[i]) {
             localSize[i] = unit.localSize[i];
+            localSizeNotDefault[i] = true;
+        }
         else if (localSize[i] != unit.localSize[i])
             error(infoSink, "Contradictory local size");
 
-        if (localSizeSpecId[i] != TQualifier::layoutNotSet)
+        if (localSizeSpecId[i] == TQualifier::layoutNotSet)
             localSizeSpecId[i] = unit.localSizeSpecId[i];
         else if (localSizeSpecId[i] != unit.localSizeSpecId[i])
             error(infoSink, "Contradictory local size specialization ids");
@@ -222,17 +230,18 @@
         else if (xfbBuffers[b].stride != unit.xfbBuffers[b].stride)
             error(infoSink, "Contradictory xfb_stride");
         xfbBuffers[b].implicitStride = std::max(xfbBuffers[b].implicitStride, unit.xfbBuffers[b].implicitStride);
-        if (unit.xfbBuffers[b].containsDouble)
-            xfbBuffers[b].containsDouble = true;
+        if (unit.xfbBuffers[b].contains64BitType)
+            xfbBuffers[b].contains64BitType = true;
+        if (unit.xfbBuffers[b].contains32BitType)
+            xfbBuffers[b].contains32BitType = true;
+        if (unit.xfbBuffers[b].contains16BitType)
+            xfbBuffers[b].contains16BitType = true;
         // TODO: 4.4 link: enhanced layouts: compare ranges
     }
 
     MERGE_TRUE(multiStream);
-
-#ifdef NV_EXTENSIONS
     MERGE_TRUE(layoutOverrideCoverage);
     MERGE_TRUE(geoPassthroughEXT);
-#endif
 
     for (unsigned int i = 0; i < unit.shiftBinding.size(); ++i) {
         if (unit.shiftBinding[i] > 0)
@@ -281,13 +290,8 @@
     }
 
     // Getting this far means we have two existing trees to merge...
-#ifdef NV_EXTENSIONS
-    numShaderRecordNVBlocks += unit.numShaderRecordNVBlocks;
-#endif
-
-#ifdef NV_EXTENSIONS
+    numShaderRecordBlocks += unit.numShaderRecordBlocks;
     numTaskNVBlocks += unit.numTaskNVBlocks;
-#endif
 
     // Get the top-level globals of each unit
     TIntermSequence& globals = treeRoot->getAsAggregate()->getSequence();
@@ -299,37 +303,52 @@
 
     // Map by global name to unique ID to rationalize the same object having
     // differing IDs in different trees.
-    TMap<TString, int> idMap;
+    TIdMaps idMaps;
     int maxId;
-    seedIdMap(idMap, maxId);
-    remapIds(idMap, maxId + 1, unit);
+    seedIdMap(idMaps, maxId);
+    remapIds(idMaps, maxId + 1, unit);
 
     mergeBodies(infoSink, globals, unitGlobals);
     mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects);
     ioAccessed.insert(unit.ioAccessed.begin(), unit.ioAccessed.end());
 }
 
+#endif
+
+static const TString& getNameForIdMap(TIntermSymbol* symbol)
+{
+    TShaderInterface si = symbol->getType().getShaderInterface();
+    if (si == EsiNone)
+        return symbol->getName();
+    else
+        return symbol->getType().getTypeName();
+}
+
+
+
 // Traverser that seeds an ID map with all built-ins, and tracks the
 // maximum ID used.
 // (It would be nice to put this in a function, but that causes warnings
 // on having no bodies for the copy-constructor/operator=.)
 class TBuiltInIdTraverser : public TIntermTraverser {
 public:
-    TBuiltInIdTraverser(TMap<TString, int>& idMap) : idMap(idMap), maxId(0) { }
+    TBuiltInIdTraverser(TIdMaps& idMaps) : idMaps(idMaps), maxId(0) { }
     // If it's a built in, add it to the map.
     // Track the max ID.
     virtual void visitSymbol(TIntermSymbol* symbol)
     {
         const TQualifier& qualifier = symbol->getType().getQualifier();
-        if (qualifier.builtIn != EbvNone)
-            idMap[symbol->getName()] = symbol->getId();
+        if (qualifier.builtIn != EbvNone) {
+            TShaderInterface si = symbol->getType().getShaderInterface();
+            idMaps[si][getNameForIdMap(symbol)] = symbol->getId();
+        }
         maxId = std::max(maxId, symbol->getId());
     }
     int getMaxId() const { return maxId; }
 protected:
     TBuiltInIdTraverser(TBuiltInIdTraverser&);
     TBuiltInIdTraverser& operator=(TBuiltInIdTraverser&);
-    TMap<TString, int>& idMap;
+    TIdMaps& idMaps;
     int maxId;
 };
 
@@ -338,31 +357,33 @@
 // on having no bodies for the copy-constructor/operator=.)
 class TUserIdTraverser : public TIntermTraverser {
 public:
-    TUserIdTraverser(TMap<TString, int>& idMap) : idMap(idMap) { }
+    TUserIdTraverser(TIdMaps& idMaps) : idMaps(idMaps) { }
     // If its a non-built-in global, add it to the map.
     virtual void visitSymbol(TIntermSymbol* symbol)
     {
         const TQualifier& qualifier = symbol->getType().getQualifier();
-        if (qualifier.builtIn == EbvNone)
-            idMap[symbol->getName()] = symbol->getId();
+        if (qualifier.builtIn == EbvNone) {
+            TShaderInterface si = symbol->getType().getShaderInterface();
+            idMaps[si][getNameForIdMap(symbol)] = symbol->getId();
+        }
     }
 
 protected:
     TUserIdTraverser(TUserIdTraverser&);
     TUserIdTraverser& operator=(TUserIdTraverser&);
-    TMap<TString, int>& idMap; // over biggest id
+    TIdMaps& idMaps; // over biggest id
 };
 
 // Initialize the the ID map with what we know of 'this' AST.
-void TIntermediate::seedIdMap(TMap<TString, int>& idMap, int& maxId)
+void TIntermediate::seedIdMap(TIdMaps& idMaps, int& maxId)
 {
     // all built-ins everywhere need to align on IDs and contribute to the max ID
-    TBuiltInIdTraverser builtInIdTraverser(idMap);
+    TBuiltInIdTraverser builtInIdTraverser(idMaps);
     treeRoot->traverse(&builtInIdTraverser);
     maxId = builtInIdTraverser.getMaxId();
 
     // user variables in the linker object list need to align on ids
-    TUserIdTraverser userIdTraverser(idMap);
+    TUserIdTraverser userIdTraverser(idMaps);
     findLinkerObjects()->traverse(&userIdTraverser);
 }
 
@@ -371,7 +392,7 @@
 // on having no bodies for the copy-constructor/operator=.)
 class TRemapIdTraverser : public TIntermTraverser {
 public:
-    TRemapIdTraverser(const TMap<TString, int>& idMap, int idShift) : idMap(idMap), idShift(idShift) { }
+    TRemapIdTraverser(const TIdMaps& idMaps, int idShift) : idMaps(idMaps), idShift(idShift) { }
     // Do the mapping:
     //  - if the same symbol, adopt the 'this' ID
     //  - otherwise, ensure a unique ID by shifting to a new space
@@ -380,8 +401,9 @@
         const TQualifier& qualifier = symbol->getType().getQualifier();
         bool remapped = false;
         if (qualifier.isLinkable() || qualifier.builtIn != EbvNone) {
-            auto it = idMap.find(symbol->getName());
-            if (it != idMap.end()) {
+            TShaderInterface si = symbol->getType().getShaderInterface();
+            auto it = idMaps[si].find(getNameForIdMap(symbol));
+            if (it != idMaps[si].end()) {
                 symbol->changeId(it->second);
                 remapped = true;
             }
@@ -392,14 +414,14 @@
 protected:
     TRemapIdTraverser(TRemapIdTraverser&);
     TRemapIdTraverser& operator=(TRemapIdTraverser&);
-    const TMap<TString, int>& idMap;
+    const TIdMaps& idMaps;
     int idShift;
 };
 
-void TIntermediate::remapIds(const TMap<TString, int>& idMap, int idShift, TIntermediate& unit)
+void TIntermediate::remapIds(const TIdMaps& idMaps, int idShift, TIntermediate& unit)
 {
     // Remap all IDs to either share or be unique, as dictated by the idMap and idShift.
-    TRemapIdTraverser idTraverser(idMap, idShift);
+    TRemapIdTraverser idTraverser(idMaps, idShift);
     unit.getTreeRoot()->traverse(&idTraverser);
 }
 
@@ -441,7 +463,19 @@
             TIntermSymbol* symbol = linkerObjects[linkObj]->getAsSymbolNode();
             TIntermSymbol* unitSymbol = unitLinkerObjects[unitLinkObj]->getAsSymbolNode();
             assert(symbol && unitSymbol);
-            if (symbol->getName() == unitSymbol->getName()) {
+
+            bool isSameSymbol = false;
+            // If they are both blocks in the same shader interface,
+            // match by the block-name, not the identifier name.
+            if (symbol->getType().getBasicType() == EbtBlock && unitSymbol->getType().getBasicType() == EbtBlock) {
+                if (symbol->getType().getShaderInterface() == unitSymbol->getType().getShaderInterface()) {
+                    isSameSymbol = symbol->getType().getTypeName() == unitSymbol->getType().getTypeName();
+                }
+            }
+            else if (symbol->getName() == unitSymbol->getName())
+                isSameSymbol = true;
+
+            if (isSameSymbol) {
                 // filter out copy
                 merge = false;
 
@@ -460,6 +494,9 @@
                 // Check for consistent types/qualification/initializers etc.
                 mergeErrorCheck(infoSink, *symbol, *unitSymbol, false);
             }
+            // If different symbols, verify they arn't push_constant since there can only be one per stage
+            else if (symbol->getQualifier().isPushConstant() && unitSymbol->getQualifier().isPushConstant())
+                error(infoSink, "Only one push_constant block is allowed per stage");
         }
         if (merge)
             linkerObjects.push_back(unitLinkerObjects[unitLinkObj]);
@@ -496,6 +533,7 @@
 //
 void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol, bool crossStage)
 {
+#ifndef GLSLANG_WEB
     bool writeTypeComparison = false;
 
     // Types have to match
@@ -517,6 +555,22 @@
         writeTypeComparison = true;
     }
 
+    // Uniform and buffer blocks must either both have an instance name, or
+    // must both be anonymous. The names don't need to match though.
+    if (symbol.getQualifier().isUniformOrBuffer() &&
+        (IsAnonymous(symbol.getName()) != IsAnonymous(unitSymbol.getName()))) {
+        error(infoSink, "Matched Uniform or Storage blocks must all be anonymous,"
+                        " or all be named:");
+        writeTypeComparison = true;
+    }
+
+    if (symbol.getQualifier().storage == unitSymbol.getQualifier().storage &&
+        (IsAnonymous(symbol.getName()) != IsAnonymous(unitSymbol.getName()) ||
+         (!IsAnonymous(symbol.getName()) && symbol.getName() != unitSymbol.getName()))) {
+        warn(infoSink, "Matched shader interfaces are using different instance names.");
+        writeTypeComparison = true;
+    }
+
     // Precision...
     if (symbol.getQualifier().precision != unitSymbol.getQualifier().precision) {
         error(infoSink, "Precision qualifiers must match:");
@@ -530,7 +584,7 @@
     }
 
     // Precise...
-    if (! crossStage && symbol.getQualifier().noContraction != unitSymbol.getQualifier().noContraction) {
+    if (! crossStage && symbol.getQualifier().isNoContraction() != unitSymbol.getQualifier().isNoContraction()) {
         error(infoSink, "Presence of precise qualifier must match:");
         writeTypeComparison = true;
     }
@@ -539,9 +593,9 @@
     if (symbol.getQualifier().centroid  != unitSymbol.getQualifier().centroid ||
         symbol.getQualifier().smooth    != unitSymbol.getQualifier().smooth ||
         symbol.getQualifier().flat      != unitSymbol.getQualifier().flat ||
-        symbol.getQualifier().sample    != unitSymbol.getQualifier().sample ||
-        symbol.getQualifier().patch     != unitSymbol.getQualifier().patch ||
-        symbol.getQualifier().nopersp   != unitSymbol.getQualifier().nopersp) {
+        symbol.getQualifier().isSample()!= unitSymbol.getQualifier().isSample() ||
+        symbol.getQualifier().isPatch() != unitSymbol.getQualifier().isPatch() ||
+        symbol.getQualifier().isNonPerspective() != unitSymbol.getQualifier().isNonPerspective()) {
         error(infoSink, "Interpolation and auxiliary storage qualifiers must match:");
         writeTypeComparison = true;
     }
@@ -552,6 +606,7 @@
         symbol.getQualifier().queuefamilycoherent  != unitSymbol.getQualifier().queuefamilycoherent ||
         symbol.getQualifier().workgroupcoherent != unitSymbol.getQualifier().workgroupcoherent ||
         symbol.getQualifier().subgroupcoherent  != unitSymbol.getQualifier().subgroupcoherent ||
+        symbol.getQualifier().shadercallcoherent!= unitSymbol.getQualifier().shadercallcoherent ||
         symbol.getQualifier().nonprivate        != unitSymbol.getQualifier().nonprivate ||
         symbol.getQualifier().volatil           != unitSymbol.getQualifier().volatil ||
         symbol.getQualifier().restrict          != unitSymbol.getQualifier().restrict ||
@@ -586,9 +641,14 @@
         }
     }
 
-    if (writeTypeComparison)
-        infoSink.info << "    " << symbol.getName() << ": \"" << symbol.getType().getCompleteString() << "\" versus \"" <<
-                                                             unitSymbol.getType().getCompleteString() << "\"\n";
+    if (writeTypeComparison) {
+        infoSink.info << "    " << symbol.getName() << ": \"" << symbol.getType().getCompleteString() << "\" versus ";
+        if (symbol.getName() != unitSymbol.getName())
+            infoSink.info << unitSymbol.getName() << ": ";
+
+        infoSink.info << "\"" << unitSymbol.getType().getCompleteString() << "\"\n";
+    }
+#endif
 }
 
 //
@@ -603,15 +663,12 @@
         return;
 
     if (numEntryPoints < 1) {
-        if (source == EShSourceGlsl)
+        if (getSource() == EShSourceGlsl)
             error(infoSink, "Missing entry point: Each stage requires one entry point");
         else
             warn(infoSink, "Entry point not found");
     }
 
-    if (numPushConstants > 1)
-        error(infoSink, "Only one push_constant block is allowed per stage");
-
     // recursion and missing body checking
     checkCallGraphCycles(infoSink);
     checkCallGraphBodies(infoSink, keepUncalled);
@@ -619,6 +676,10 @@
     // overlap/alias/missing I/O, etc.
     inOutLocationCheck(infoSink);
 
+#ifndef GLSLANG_WEB
+    if (getNumPushConstants() > 1)
+        error(infoSink, "Only one push_constant block is allowed per stage");
+
     // invocations
     if (invocations == TQualifier::layoutNotSet)
         invocations = 1;
@@ -634,8 +695,12 @@
         error(infoSink, "Cannot use both gl_FragColor and gl_FragData");
 
     for (size_t b = 0; b < xfbBuffers.size(); ++b) {
-        if (xfbBuffers[b].containsDouble)
+        if (xfbBuffers[b].contains64BitType)
             RoundToPow2(xfbBuffers[b].implicitStride, 8);
+        else if (xfbBuffers[b].contains32BitType)
+            RoundToPow2(xfbBuffers[b].implicitStride, 4);
+        else if (xfbBuffers[b].contains16BitType)
+            RoundToPow2(xfbBuffers[b].implicitStride, 2);
 
         // "It is a compile-time or link-time error to have
         // any xfb_offset that overflows xfb_stride, whether stated on declarations before or after the xfb_stride, or
@@ -650,17 +715,24 @@
             xfbBuffers[b].stride = xfbBuffers[b].implicitStride;
 
         // "If the buffer is capturing any
-        // outputs with double-precision components, the stride must be a multiple of 8, otherwise it must be a
+        // outputs with double-precision or 64-bit integer components, the stride must be a multiple of 8, otherwise it must be a
         // multiple of 4, or a compile-time or link-time error results."
-        if (xfbBuffers[b].containsDouble && ! IsMultipleOfPow2(xfbBuffers[b].stride, 8)) {
-            error(infoSink, "xfb_stride must be multiple of 8 for buffer holding a double:");
+        if (xfbBuffers[b].contains64BitType && ! IsMultipleOfPow2(xfbBuffers[b].stride, 8)) {
+            error(infoSink, "xfb_stride must be multiple of 8 for buffer holding a double or 64-bit integer:");
             infoSink.info.prefix(EPrefixError);
             infoSink.info << "    xfb_buffer " << (unsigned int)b << ", xfb_stride " << xfbBuffers[b].stride << "\n";
-        } else if (! IsMultipleOfPow2(xfbBuffers[b].stride, 4)) {
+        } else if (xfbBuffers[b].contains32BitType && ! IsMultipleOfPow2(xfbBuffers[b].stride, 4)) {
             error(infoSink, "xfb_stride must be multiple of 4:");
             infoSink.info.prefix(EPrefixError);
             infoSink.info << "    xfb_buffer " << (unsigned int)b << ", xfb_stride " << xfbBuffers[b].stride << "\n";
         }
+        // "If the buffer is capturing any
+        // outputs with half-precision or 16-bit integer components, the stride must be a multiple of 2"
+        else if (xfbBuffers[b].contains16BitType && ! IsMultipleOfPow2(xfbBuffers[b].stride, 2)) {
+            error(infoSink, "xfb_stride must be multiple of 2 for buffer holding a half float or 16-bit integer:");
+            infoSink.info.prefix(EPrefixError);
+            infoSink.info << "    xfb_buffer " << (unsigned int)b << ", xfb_stride " << xfbBuffers[b].stride << "\n";
+        }
 
         // "The resulting stride (implicit or explicit), when divided by 4, must be less than or equal to the
         // implementation-dependent constant gl_MaxTransformFeedbackInterleavedComponents."
@@ -679,7 +751,7 @@
             error(infoSink, "At least one shader must specify an output layout(vertices=...)");
         break;
     case EShLangTessEvaluation:
-        if (source == EShSourceGlsl) {
+        if (getSource() == EShSourceGlsl) {
             if (inputPrimitive == ElgNone)
                 error(infoSink, "At least one shader must specify an input layout primitive");
             if (vertexSpacing == EvsNone)
@@ -705,15 +777,13 @@
         break;
     case EShLangCompute:
         break;
-
-#ifdef NV_EXTENSIONS
-    case EShLangRayGenNV:
-    case EShLangIntersectNV:
-    case EShLangAnyHitNV:
-    case EShLangClosestHitNV:
-    case EShLangMissNV:
-    case EShLangCallableNV:
-        if (numShaderRecordNVBlocks > 1)
+    case EShLangRayGen:
+    case EShLangIntersect:
+    case EShLangAnyHit:
+    case EShLangClosestHit:
+    case EShLangMiss:
+    case EShLangCallable:
+        if (numShaderRecordBlocks > 1)
             error(infoSink, "Only one shaderRecordNV buffer block is allowed per stage");
         break;
     case EShLangMeshNV:
@@ -739,8 +809,6 @@
         if (numTaskNVBlocks > 1)
             error(infoSink, "Only one taskNV interface block is allowed per shader");
         break;
-#endif
-
     default:
         error(infoSink, "Unknown Stage.");
         break;
@@ -762,6 +830,7 @@
     } finalLinkTraverser;
 
     treeRoot->traverse(&finalLinkTraverser);
+#endif
 }
 
 //
@@ -948,7 +1017,7 @@
         }
     }
 
-    if (profile == EEsProfile) {
+    if (isEsProfile()) {
         if (numFragOut > 1 && fragOutWithNoLocation)
             error(infoSink, "when more than one fragment shader output, all must have location qualifiers");
     }
@@ -1041,6 +1110,7 @@
     // So, for the case of dvec3, we need two independent ioRanges.
 
     int collision = -1; // no collision
+#ifndef GLSLANG_WEB
     if (size == 2 && type.getBasicType() == EbtDouble && type.getVectorSize() == 3 &&
         (qualifier.isPipeInput() || qualifier.isPipeOutput())) {
         // Dealing with dvec3 in/out split across two locations.
@@ -1067,7 +1137,9 @@
             if (collision < 0)
                 usedIo[set].push_back(range2);
         }
-    } else {
+    } else
+#endif
+    {
         // Not a dvec3 in/out split across two locations, generic path.
         // Need a single IO-range block.
 
@@ -1081,10 +1153,10 @@
         }
 
         // combine location and component ranges
-        TIoRange range(locationRange, componentRange, type.getBasicType(), qualifier.hasIndex() ? qualifier.layoutIndex : 0);
+        TIoRange range(locationRange, componentRange, type.getBasicType(), qualifier.hasIndex() ? qualifier.getIndex() : 0);
 
         // check for collisions, except for vertex inputs on desktop targeting OpenGL
-        if (! (profile != EEsProfile && language == EShLangVertex && qualifier.isPipeInput()) || spvVersion.vulkan > 0)
+        if (! (!isEsProfile() && language == EShLangVertex && qualifier.isPipeInput()) || spvVersion.vulkan > 0)
             collision = checkLocationRange(set, range, type, typeCollision);
 
         if (collision < 0)
@@ -1162,14 +1234,10 @@
         // TODO: perf: this can be flattened by using getCumulativeArraySize(), and a deref that discards all arrayness
         // TODO: are there valid cases of having an unsized array with a location?  If so, running this code too early.
         TType elementType(type, 0);
-        if (type.isSizedArray()
-#ifdef NV_EXTENSIONS
-            && !type.getQualifier().isPerView()
-#endif
-            )
+        if (type.isSizedArray() && !type.getQualifier().isPerView())
             return type.getOuterArraySize() * computeTypeLocationSize(elementType, stage);
         else {
-#ifdef NV_EXTENSIONS
+#ifndef GLSLANG_WEB
             // unset perViewNV attributes for arrayed per-view outputs: "perviewNV vec4 v[MAX_VIEWS][3];"
             elementType.getQualifier().perViewNV = false;
 #endif
@@ -1248,6 +1316,8 @@
     return 1;
 }
 
+#ifndef GLSLANG_WEB
+
 // Accumulate xfb buffer ranges and check for collisions as the accumulation is done.
 //
 // Returns < 0 if no collision, >= 0 if collision and the value returned is a colliding value.
@@ -1260,7 +1330,7 @@
     TXfbBuffer& buffer = xfbBuffers[qualifier.layoutXfbBuffer];
 
     // compute the range
-    unsigned int size = computeTypeXfbSize(type, buffer.containsDouble);
+    unsigned int size = computeTypeXfbSize(type, buffer.contains64BitType, buffer.contains32BitType, buffer.contains16BitType);
     buffer.implicitStride = std::max(buffer.implicitStride, qualifier.layoutXfbOffset + size);
     TRange range(qualifier.layoutXfbOffset, qualifier.layoutXfbOffset + size - 1);
 
@@ -1279,11 +1349,13 @@
 
 // Recursively figure out how many bytes of xfb buffer are used by the given type.
 // Return the size of type, in bytes.
-// Sets containsDouble to true if the type contains a double.
-// N.B. Caller must set containsDouble to false before calling.
-unsigned int TIntermediate::computeTypeXfbSize(const TType& type, bool& containsDouble) const
+// Sets contains64BitType to true if the type contains a 64-bit data type.
+// Sets contains32BitType to true if the type contains a 32-bit data type.
+// Sets contains16BitType to true if the type contains a 16-bit data type.
+// N.B. Caller must set contains64BitType, contains32BitType, and contains16BitType to false before calling.
+unsigned int TIntermediate::computeTypeXfbSize(const TType& type, bool& contains64BitType, bool& contains32BitType, bool& contains16BitType) const
 {
-    // "...if applied to an aggregate containing a double, the offset must also be a multiple of 8,
+    // "...if applied to an aggregate containing a double or 64-bit integer, the offset must also be a multiple of 8,
     // and the space taken in the buffer will be a multiple of 8.
     // ...within the qualified entity, subsequent components are each
     // assigned, in order, to the next available offset aligned to a multiple of
@@ -1294,29 +1366,45 @@
         // TODO: perf: this can be flattened by using getCumulativeArraySize(), and a deref that discards all arrayness
         assert(type.isSizedArray());
         TType elementType(type, 0);
-        return type.getOuterArraySize() * computeTypeXfbSize(elementType, containsDouble);
+        return type.getOuterArraySize() * computeTypeXfbSize(elementType, contains64BitType, contains16BitType, contains16BitType);
     }
 
     if (type.isStruct()) {
         unsigned int size = 0;
-        bool structContainsDouble = false;
+        bool structContains64BitType = false;
+        bool structContains32BitType = false;
+        bool structContains16BitType = false;
         for (int member = 0; member < (int)type.getStruct()->size(); ++member) {
             TType memberType(type, member);
             // "... if applied to
-            // an aggregate containing a double, the offset must also be a multiple of 8,
+            // an aggregate containing a double or 64-bit integer, the offset must also be a multiple of 8,
             // and the space taken in the buffer will be a multiple of 8."
-            bool memberContainsDouble = false;
-            int memberSize = computeTypeXfbSize(memberType, memberContainsDouble);
-            if (memberContainsDouble) {
-                structContainsDouble = true;
+            bool memberContains64BitType = false;
+            bool memberContains32BitType = false;
+            bool memberContains16BitType = false;
+            int memberSize = computeTypeXfbSize(memberType, memberContains64BitType, memberContains32BitType, memberContains16BitType);
+            if (memberContains64BitType) {
+                structContains64BitType = true;
                 RoundToPow2(size, 8);
+            } else if (memberContains32BitType) {
+                structContains32BitType = true;
+                RoundToPow2(size, 4);
+            } else if (memberContains16BitType) {
+                structContains16BitType = true;
+                RoundToPow2(size, 2);
             }
             size += memberSize;
         }
 
-        if (structContainsDouble) {
-            containsDouble = true;
+        if (structContains64BitType) {
+            contains64BitType = true;
             RoundToPow2(size, 8);
+        } else if (structContains32BitType) {
+            contains32BitType = true;
+            RoundToPow2(size, 4);
+        } else if (structContains16BitType) {
+            contains16BitType = true;
+            RoundToPow2(size, 2);
         }
         return size;
     }
@@ -1333,13 +1421,22 @@
         numComponents = 1;
     }
 
-    if (type.getBasicType() == EbtDouble) {
-        containsDouble = true;
+    if (type.getBasicType() == EbtDouble || type.getBasicType() == EbtInt64 || type.getBasicType() == EbtUint64) {
+        contains64BitType = true;
         return 8 * numComponents;
-    } else
+    } else if (type.getBasicType() == EbtFloat16 || type.getBasicType() == EbtInt16 || type.getBasicType() == EbtUint16) {
+        contains16BitType = true;
+        return 2 * numComponents;
+    } else if (type.getBasicType() == EbtInt8 || type.getBasicType() == EbtUint8)
+        return numComponents;
+    else {
+        contains32BitType = true;
         return 4 * numComponents;
+    }
 }
 
+#endif
+
 const int baseAlignmentVec4Std140 = 16;
 
 // Return the size and alignment of a component of the given type.
@@ -1347,6 +1444,10 @@
 // Return value is the alignment..
 int TIntermediate::getBaseAlignmentScalar(const TType& type, int& size)
 {
+#ifdef GLSLANG_WEB
+    size = 4; return 4;
+#endif
+
     switch (type.getBasicType()) {
     case EbtInt64:
     case EbtUint64:
@@ -1605,4 +1706,74 @@
     }
 }
 
+// shared calculation by getOffset and getOffsets
+void TIntermediate::updateOffset(const TType& parentType, const TType& memberType, int& offset, int& memberSize)
+{
+    int dummyStride;
+
+    // modify just the children's view of matrix layout, if there is one for this member
+    TLayoutMatrix subMatrixLayout = memberType.getQualifier().layoutMatrix;
+    int memberAlignment = getMemberAlignment(memberType, memberSize, dummyStride,
+                                             parentType.getQualifier().layoutPacking,
+                                             subMatrixLayout != ElmNone
+                                                 ? subMatrixLayout == ElmRowMajor
+                                                 : parentType.getQualifier().layoutMatrix == ElmRowMajor);
+    RoundToPow2(offset, memberAlignment);
+}
+
+// Lookup or calculate the offset of a block member, using the recursively
+// defined block offset rules.
+int TIntermediate::getOffset(const TType& type, int index)
+{
+    const TTypeList& memberList = *type.getStruct();
+
+    // Don't calculate offset if one is present, it could be user supplied
+    // and different than what would be calculated.  That is, this is faster,
+    // but not just an optimization.
+    if (memberList[index].type->getQualifier().hasOffset())
+        return memberList[index].type->getQualifier().layoutOffset;
+
+    int memberSize = 0;
+    int offset = 0;
+    for (int m = 0; m <= index; ++m) {
+        updateOffset(type, *memberList[m].type, offset, memberSize);
+
+        if (m < index)
+            offset += memberSize;
+    }
+
+    return offset;
+}
+
+// Calculate the block data size.
+// Block arrayness is not taken into account, each element is backed by a separate buffer.
+int TIntermediate::getBlockSize(const TType& blockType)
+{
+    const TTypeList& memberList = *blockType.getStruct();
+    int lastIndex = (int)memberList.size() - 1;
+    int lastOffset = getOffset(blockType, lastIndex);
+
+    int lastMemberSize;
+    int dummyStride;
+    getMemberAlignment(*memberList[lastIndex].type, lastMemberSize, dummyStride,
+                       blockType.getQualifier().layoutPacking,
+                       blockType.getQualifier().layoutMatrix == ElmRowMajor);
+
+    return lastOffset + lastMemberSize;
+}
+
+int TIntermediate::computeBufferReferenceTypeSize(const TType& type)
+{
+    assert(type.isReference());
+    int size = getBlockSize(*type.getReferentType());
+
+    int align = type.getBufferReferenceAlignment();
+
+    if (align) {
+        size = (size + align - 1) & ~(align-1);
+    }
+
+    return size;
+}
+
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
old mode 100755
new mode 100644
index c114f21..66f5a88
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -147,17 +147,25 @@
     TRange offset;
 };
 
+#ifndef GLSLANG_WEB
 // Things that need to be tracked per xfb buffer.
 struct TXfbBuffer {
-    TXfbBuffer() : stride(TQualifier::layoutXfbStrideEnd), implicitStride(0), containsDouble(false) { }
+    TXfbBuffer() : stride(TQualifier::layoutXfbStrideEnd), implicitStride(0), contains64BitType(false),
+                   contains32BitType(false), contains16BitType(false) { }
     std::vector<TRange> ranges;  // byte offsets that have already been assigned
     unsigned int stride;
     unsigned int implicitStride;
-    bool containsDouble;
+    bool contains64BitType;
+    bool contains32BitType;
+    bool contains16BitType;
 };
+#endif
 
 // Track a set of strings describing how the module was processed.
-// Using the form:
+// This includes command line options, transforms, etc., ideally inclusive enough
+// to reproduce the steps used to transform the input source to the output.
+// E.g., see SPIR-V OpModuleProcessed.
+// Each "process" or "transform" uses is expressed in the form:
 //   process arg0 arg1 arg2 ...
 //   process arg0 arg1 arg2 ...
 // where everything is textual, and there can be zero or more arguments
@@ -208,7 +216,6 @@
 class TSymbol;
 class TVariable;
 
-#ifdef NV_EXTENSIONS
 //
 // Texture and Sampler transformation mode.
 //
@@ -217,7 +224,15 @@
     LayoutDerivativeGroupQuads,   // derivative_group_quadsNV
     LayoutDerivativeGroupLinear,  // derivative_group_linearNV
 };
-#endif
+
+class TIdMaps {
+public:
+    TMap<TString, int>& operator[](int i) { return maps[i]; }
+    const TMap<TString, int>& operator[](int i) const { return maps[i]; }
+private:
+    TMap<TString, int> maps[EsiCount];
+};
+
 
 //
 // Set of helper functions to help parse and build the tree.
@@ -225,186 +240,59 @@
 class TIntermediate {
 public:
     explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) :
-        implicitThisName("@this"), implicitCounterName("@count"),
-        language(l), source(EShSourceNone), profile(p), version(v), treeRoot(0),
+        language(l),
+        profile(p), version(v), treeRoot(0),
         numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false),
+        invertY(false),
+        useStorageBuffer(false),
+        nanMinMaxClamp(false),
+        depthReplacing(false)
+#ifndef GLSLANG_WEB
+        ,
+        implicitThisName("@this"), implicitCounterName("@count"),
+        source(EShSourceNone),
+        useVulkanMemoryModel(false),
         invocations(TQualifier::layoutNotSet), vertices(TQualifier::layoutNotSet),
         inputPrimitive(ElgNone), outputPrimitive(ElgNone),
         pixelCenterInteger(false), originUpperLeft(false),
-        vertexSpacing(EvsNone), vertexOrder(EvoNone), pointMode(false), earlyFragmentTests(false),
-        postDepthCoverage(false), depthLayout(EldNone), depthReplacing(false),
+        vertexSpacing(EvsNone), vertexOrder(EvoNone), interlockOrdering(EioNone), pointMode(false), earlyFragmentTests(false),
+        postDepthCoverage(false), depthLayout(EldNone),
         hlslFunctionality1(false),
         blendEquations(0), xfbMode(false), multiStream(false),
-#ifdef NV_EXTENSIONS
         layoutOverrideCoverage(false),
         geoPassthroughEXT(false),
-        numShaderRecordNVBlocks(0),
+        numShaderRecordBlocks(0),
         computeDerivativeMode(LayoutDerivativeNone),
         primitives(TQualifier::layoutNotSet),
         numTaskNVBlocks(0),
-#endif
         autoMapBindings(false),
         autoMapLocations(false),
-        invertY(false),
         flattenUniformArrays(false),
         useUnknownFormat(false),
         hlslOffsets(false),
-        useStorageBuffer(false),
-        useVulkanMemoryModel(false),
         hlslIoMapping(false),
+        useVariablePointers(false),
         textureSamplerTransformMode(EShTexSampTransKeep),
         needToLegalize(false),
         binaryDoubleOutput(false),
         usePhysicalStorageBuffer(false),
         uniformLocationBase(0)
+#endif
     {
         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;
+#ifndef GLSLANG_WEB
         xfbBuffers.resize(TQualifier::layoutXfbBufferEnd);
-
         shiftBinding.fill(0);
+#endif
     }
-    void setLimits(const TBuiltInResource& r) { resources = r; }
-
-    bool postProcess(TIntermNode*, EShLanguage);
-    void output(TInfoSink&, bool tree);
-    void removeTree();
-
-    void setSource(EShSource s) { source = s; }
-    EShSource getSource() const { return source; }
-    void setEntryPointName(const char* ep)
-    {
-        entryPointName = ep;
-        processes.addProcess("entry-point");
-        processes.addArgument(entryPointName);
-    }
-    void setEntryPointMangledName(const char* ep) { entryPointMangledName = ep; }
-    const std::string& getEntryPointName() const { return entryPointName; }
-    const std::string& getEntryPointMangledName() const { return entryPointMangledName; }
-
-    void setShiftBinding(TResourceType res, unsigned int shift)
-    {
-        shiftBinding[res] = shift;
-
-        const char* name = getResourceName(res);
-        if (name != nullptr)
-            processes.addIfNonZero(name, shift);
-    }
-
-    unsigned int getShiftBinding(TResourceType res) const { return shiftBinding[res]; }
-
-    void setShiftBindingForSet(TResourceType res, unsigned int shift, unsigned int set)
-    {
-        if (shift == 0) // ignore if there's no shift: it's a no-op.
-            return;
-
-        shiftBindingForSet[res][set] = shift;
-
-        const char* name = getResourceName(res);
-        if (name != nullptr) {
-            processes.addProcess(name);
-            processes.addArgument(shift);
-            processes.addArgument(set);
-        }
-    }
-
-    int getShiftBindingForSet(TResourceType res, unsigned int set) const
-    {
-        const auto shift = shiftBindingForSet[res].find(set);
-        return shift == shiftBindingForSet[res].end() ? -1 : shift->second;
-    }
-    bool hasShiftBindingForSet(TResourceType res) const { return !shiftBindingForSet[res].empty(); }
-
-    void setResourceSetBinding(const std::vector<std::string>& shift)
-    {
-        resourceSetBinding = shift;
-        if (shift.size() > 0) {
-            processes.addProcess("resource-set-binding");
-            for (int s = 0; s < (int)shift.size(); ++s)
-                processes.addArgument(shift[s]);
-        }
-    }
-    const std::vector<std::string>& getResourceSetBinding() const { return resourceSetBinding; }
-    void setAutoMapBindings(bool map)
-    {
-        autoMapBindings = map;
-        if (autoMapBindings)
-            processes.addProcess("auto-map-bindings");
-    }
-    bool getAutoMapBindings() const { return autoMapBindings; }
-    void setAutoMapLocations(bool map)
-    {
-        autoMapLocations = map;
-        if (autoMapLocations)
-            processes.addProcess("auto-map-locations");
-    }
-    bool getAutoMapLocations() const { return autoMapLocations; }
-    void setInvertY(bool invert)
-    {
-        invertY = invert;
-        if (invertY)
-            processes.addProcess("invert-y");
-    }
-    bool getInvertY() const { return invertY; }
-
-    void setFlattenUniformArrays(bool flatten)
-    {
-        flattenUniformArrays = flatten;
-        if (flattenUniformArrays)
-            processes.addProcess("flatten-uniform-arrays");
-    }
-    bool getFlattenUniformArrays() const { return flattenUniformArrays; }
-    void setNoStorageFormat(bool b)
-    {
-        useUnknownFormat = b;
-        if (useUnknownFormat)
-            processes.addProcess("no-storage-format");
-    }
-    bool getNoStorageFormat() const { return useUnknownFormat; }
-    void setHlslOffsets()
-    {
-        hlslOffsets = true;
-        if (hlslOffsets)
-            processes.addProcess("hlsl-offsets");
-    }
-    bool usingHlslOffsets() const { return hlslOffsets; }
-    void setUseStorageBuffer()
-    {
-        useStorageBuffer = true;
-        processes.addProcess("use-storage-buffer");
-    }
-    bool usingStorageBuffer() const { return useStorageBuffer; }
-    void setHlslIoMapping(bool b)
-    {
-        hlslIoMapping = b;
-        if (hlslIoMapping)
-            processes.addProcess("hlsl-iomap");
-    }
-    bool usingHlslIoMapping() { return hlslIoMapping; }
-    void setUseVulkanMemoryModel()
-    {
-        useVulkanMemoryModel = true;
-        processes.addProcess("use-vulkan-memory-model");
-    }
-    bool usingVulkanMemoryModel() const { return useVulkanMemoryModel; }
-    void setUsePhysicalStorageBuffer()
-    {
-        usePhysicalStorageBuffer = true;
-    }
-    bool usingPhysicalStorageBuffer() const { return usePhysicalStorageBuffer; }
-
-    template<class T> T addCounterBufferName(const T& name) const { return name + implicitCounterName; }
-    bool hasCounterBufferName(const TString& name) const {
-        size_t len = strlen(implicitCounterName);
-        return name.size() > len &&
-               name.compare(name.size() - len, len, implicitCounterName) == 0;
-    }
-
-    void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { textureSamplerTransformMode = mode; }
 
     void setVersion(int v) { version = v; }
     int getVersion() const { return version; }
@@ -420,11 +308,49 @@
         if (spvVersion.openGl > 0)
             processes.addProcess("client opengl100");
 
+        // target SPV
+        switch (spvVersion.spv) {
+        case 0:
+            break;
+        case EShTargetSpv_1_0:
+            break;
+        case EShTargetSpv_1_1:
+            processes.addProcess("target-env spirv1.1");
+            break;
+        case EShTargetSpv_1_2:
+            processes.addProcess("target-env spirv1.2");
+            break;
+        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;
+        }
+
         // target-environment processes
-        if (spvVersion.vulkan > 0)
+        switch (spvVersion.vulkan) {
+        case 0:
+            break;
+        case EShTargetVulkan_1_0:
             processes.addProcess("target-env vulkan1.0");
-        else if (spvVersion.vulkan > 0)
+            break;
+        case EShTargetVulkan_1_1:
+            processes.addProcess("target-env vulkan1.1");
+            break;
+        case EShTargetVulkan_1_2:
+            processes.addProcess("target-env vulkan1.2");
+            break;
+        default:
             processes.addProcess("target-env vulkanUnknown");
+            break;
+        }
         if (spvVersion.openGl > 0)
             processes.addProcess("target-env opengl");
     }
@@ -439,9 +365,35 @@
     int getNumEntryPoints() const { return numEntryPoints; }
     int getNumErrors() const { return numErrors; }
     void addPushConstantCount() { ++numPushConstants; }
-#ifdef NV_EXTENSIONS
-    void addShaderRecordNVCount() { ++numShaderRecordNVBlocks; }
-    void addTaskNVCount() { ++numTaskNVBlocks; }
+    void setLimits(const TBuiltInResource& r) { resources = r; }
+
+    bool postProcess(TIntermNode*, EShLanguage);
+    void removeTree();
+
+    void setEntryPointName(const char* ep)
+    {
+        entryPointName = ep;
+        processes.addProcess("entry-point");
+        processes.addArgument(entryPointName);
+    }
+    void setEntryPointMangledName(const char* ep) { entryPointMangledName = ep; }
+    const std::string& getEntryPointName() const { return entryPointName; }
+    const std::string& getEntryPointMangledName() const { return entryPointMangledName; }
+
+    void setInvertY(bool invert)
+    {
+        invertY = invert;
+        if (invertY)
+            processes.addProcess("invert-y");
+    }
+    bool getInvertY() const { return invertY; }
+
+#ifdef ENABLE_HLSL
+    void setSource(EShSource s) { source = s; }
+    EShSource getSource() const { return source; }
+#else
+    void setSource(EShSource s) { assert(s == EShSourceGlsl); }
+    EShSource getSource() const { return EShSourceGlsl; }
 #endif
 
     bool isRecursive() const { return recursive; }
@@ -450,9 +402,10 @@
     TIntermSymbol* addSymbol(const TVariable&, const TSourceLoc&);
     TIntermSymbol* addSymbol(const TType&, const TSourceLoc&);
     TIntermSymbol* addSymbol(const TIntermSymbol&);
-    TIntermTyped* addConversion(TOperator, const TType&, TIntermTyped*) const;
-    std::tuple<TIntermTyped*, TIntermTyped*> addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1) const;
+    TIntermTyped* addConversion(TOperator, const TType&, TIntermTyped*);
+    std::tuple<TIntermTyped*, TIntermTyped*> addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1);
     TIntermTyped* addUniShapeConversion(TOperator, const TType&, TIntermTyped*);
+    TIntermTyped* addConversion(TBasicType convertTo, TIntermTyped* node) const;
     void addBiShapeConversion(TOperator, TIntermTyped*& lhsNode, TIntermTyped*& rhsNode);
     TIntermTyped* addShapeConversion(const TType&, TIntermTyped*);
     TIntermTyped* addBinaryMath(TOperator, TIntermTyped* left, TIntermTyped* right, TSourceLoc);
@@ -519,6 +472,169 @@
     void addSymbolLinkageNodes(TIntermAggregate*& linkage, EShLanguage, TSymbolTable&);
     void addSymbolLinkageNode(TIntermAggregate*& linkage, const TSymbol&);
 
+    void setUseStorageBuffer()
+    {
+        useStorageBuffer = true;
+        processes.addProcess("use-storage-buffer");
+    }
+    bool usingStorageBuffer() const { return useStorageBuffer; }
+    void setDepthReplacing() { depthReplacing = true; }
+    bool isDepthReplacing() const { return depthReplacing; }
+    bool setLocalSize(int dim, int size)
+    {
+        if (localSizeNotDefault[dim])
+            return size == localSize[dim];
+        localSizeNotDefault[dim] = true;
+        localSize[dim] = size;
+        return true;
+    }
+    unsigned int getLocalSize(int dim) const { return localSize[dim]; }
+    bool setLocalSizeSpecId(int dim, int id)
+    {
+        if (localSizeSpecId[dim] != TQualifier::layoutNotSet)
+            return id == localSizeSpecId[dim];
+        localSizeSpecId[dim] = id;
+        return true;
+    }
+    int getLocalSizeSpecId(int dim) const { return localSizeSpecId[dim]; }
+#ifdef GLSLANG_WEB
+    void output(TInfoSink&, bool tree) { }
+
+    bool isEsProfile() const { return false; }
+    bool getXfbMode() const { return false; }
+    bool isMultiStream() const { return false; }
+    TLayoutGeometry getOutputPrimitive() const { return ElgNone; }
+    bool getPostDepthCoverage() const { return false; }
+    bool getEarlyFragmentTests() const { return false; }
+    TLayoutDepth getDepth() const { return EldNone; }
+    bool getPixelCenterInteger() const { return false; }
+    void setOriginUpperLeft() { }
+    bool getOriginUpperLeft() const { return true; }
+    TInterlockOrdering getInterlockOrdering() const { return EioNone; }
+
+    bool getAutoMapBindings() const { return false; }
+    bool getAutoMapLocations() const { return false; }
+    int getNumPushConstants() const { return 0; }
+    void addShaderRecordCount() { }
+    void addTaskNVCount() { }
+    void setUseVulkanMemoryModel() { }
+    bool usingVulkanMemoryModel() const { return false; }
+    bool usingPhysicalStorageBuffer() const { return false; }
+    bool usingVariablePointers() const { return false; }
+    unsigned getXfbStride(int buffer) const { return 0; }
+    bool hasLayoutDerivativeModeNone() const { return false; }
+    ComputeDerivativeMode getLayoutDerivativeModeNone() const { return LayoutDerivativeNone; }
+#else
+    void output(TInfoSink&, bool tree);
+
+    bool isEsProfile() const { return profile == EEsProfile; }
+
+    void setShiftBinding(TResourceType res, unsigned int shift)
+    {
+        shiftBinding[res] = shift;
+
+        const char* name = getResourceName(res);
+        if (name != nullptr)
+            processes.addIfNonZero(name, shift);
+    }
+
+    unsigned int getShiftBinding(TResourceType res) const { return shiftBinding[res]; }
+
+    void setShiftBindingForSet(TResourceType res, unsigned int shift, unsigned int set)
+    {
+        if (shift == 0) // ignore if there's no shift: it's a no-op.
+            return;
+
+        shiftBindingForSet[res][set] = shift;
+
+        const char* name = getResourceName(res);
+        if (name != nullptr) {
+            processes.addProcess(name);
+            processes.addArgument(shift);
+            processes.addArgument(set);
+        }
+    }
+
+    int getShiftBindingForSet(TResourceType res, unsigned int set) const
+    {
+        const auto shift = shiftBindingForSet[res].find(set);
+        return shift == shiftBindingForSet[res].end() ? -1 : shift->second;
+    }
+    bool hasShiftBindingForSet(TResourceType res) const { return !shiftBindingForSet[res].empty(); }
+
+    void setResourceSetBinding(const std::vector<std::string>& shift)
+    {
+        resourceSetBinding = shift;
+        if (shift.size() > 0) {
+            processes.addProcess("resource-set-binding");
+            for (int s = 0; s < (int)shift.size(); ++s)
+                processes.addArgument(shift[s]);
+        }
+    }
+    const std::vector<std::string>& getResourceSetBinding() const { return resourceSetBinding; }
+    void setAutoMapBindings(bool map)
+    {
+        autoMapBindings = map;
+        if (autoMapBindings)
+            processes.addProcess("auto-map-bindings");
+    }
+    bool getAutoMapBindings() const { return autoMapBindings; }
+    void setAutoMapLocations(bool map)
+    {
+        autoMapLocations = map;
+        if (autoMapLocations)
+            processes.addProcess("auto-map-locations");
+    }
+    bool getAutoMapLocations() const { return autoMapLocations; }
+
+#ifdef ENABLE_HLSL
+    void setFlattenUniformArrays(bool flatten)
+    {
+        flattenUniformArrays = flatten;
+        if (flattenUniformArrays)
+            processes.addProcess("flatten-uniform-arrays");
+    }
+    bool getFlattenUniformArrays() const { return flattenUniformArrays; }
+#endif
+    void setNoStorageFormat(bool b)
+    {
+        useUnknownFormat = b;
+        if (useUnknownFormat)
+            processes.addProcess("no-storage-format");
+    }
+    bool getNoStorageFormat() const { return useUnknownFormat; }
+    void setUseVulkanMemoryModel()
+    {
+        useVulkanMemoryModel = true;
+        processes.addProcess("use-vulkan-memory-model");
+    }
+    bool usingVulkanMemoryModel() const { return useVulkanMemoryModel; }
+    void setUsePhysicalStorageBuffer()
+    {
+        usePhysicalStorageBuffer = true;
+    }
+    bool usingPhysicalStorageBuffer() const { return usePhysicalStorageBuffer; }
+    void setUseVariablePointers()
+    {
+        useVariablePointers = true;
+        processes.addProcess("use-variable-pointers");
+    }
+    bool usingVariablePointers() const { return useVariablePointers; }
+
+#ifdef ENABLE_HLSL
+    template<class T> T addCounterBufferName(const T& name) const { return name + implicitCounterName; }
+    bool hasCounterBufferName(const TString& name) const {
+        size_t len = strlen(implicitCounterName);
+        return name.size() > len &&
+               name.compare(name.size() - len, len, implicitCounterName) == 0;
+    }
+#endif
+
+    void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { textureSamplerTransformMode = mode; }
+    int getNumPushConstants() const { return numPushConstants; }
+    void addShaderRecordCount() { ++numShaderRecordBlocks; }
+    void addTaskNVCount() { ++numTaskNVBlocks; }
+
     bool setInvocations(int i)
     {
         if (invocations != TQualifier::layoutNotSet)
@@ -562,23 +678,14 @@
     void setPointMode() { pointMode = true; }
     bool getPointMode() const { return pointMode; }
 
-    bool setLocalSize(int dim, int size)
+    bool setInterlockOrdering(TInterlockOrdering o)
     {
-        if (localSize[dim] > 1)
-            return size == localSize[dim];
-        localSize[dim] = size;
+        if (interlockOrdering != EioNone)
+            return interlockOrdering == o;
+        interlockOrdering = o;
         return true;
     }
-    unsigned int getLocalSize(int dim) const { return localSize[dim]; }
-
-    bool setLocalSizeSpecId(int dim, int id)
-    {
-        if (localSizeSpecId[dim] != TQualifier::layoutNotSet)
-            return id == localSizeSpecId[dim];
-        localSizeSpecId[dim] = id;
-        return true;
-    }
-    int getLocalSizeSpecId(int dim) const { return localSizeSpecId[dim]; }
+    TInterlockOrdering getInterlockOrdering() const { return interlockOrdering; }
 
     void setXfbMode() { xfbMode = true; }
     bool getXfbMode() const { return xfbMode; }
@@ -592,14 +699,10 @@
         return true;
     }
     TLayoutGeometry getOutputPrimitive() const { return outputPrimitive; }
-    void setOriginUpperLeft() { originUpperLeft = true; }
-    bool getOriginUpperLeft() const { return originUpperLeft; }
-    void setPixelCenterInteger() { pixelCenterInteger = true; }
-    bool getPixelCenterInteger() const { return pixelCenterInteger; }
-    void setEarlyFragmentTests() { earlyFragmentTests = true; }
-    bool getEarlyFragmentTests() const { return earlyFragmentTests; }
     void setPostDepthCoverage() { postDepthCoverage = true; }
     bool getPostDepthCoverage() const { return postDepthCoverage; }
+    void setEarlyFragmentTests() { earlyFragmentTests = true; }
+    bool getEarlyFragmentTests() const { return earlyFragmentTests; }
     bool setDepth(TLayoutDepth d)
     {
         if (depthLayout != EldNone)
@@ -608,29 +711,12 @@
         return true;
     }
     TLayoutDepth getDepth() const { return depthLayout; }
-    void setDepthReplacing() { depthReplacing = true; }
-    bool isDepthReplacing() const { return depthReplacing; }
-
-    void setHlslFunctionality1() { hlslFunctionality1 = true; }
-    bool getHlslFunctionality1() const { return hlslFunctionality1; }
-
+    void setOriginUpperLeft() { originUpperLeft = true; }
+    bool getOriginUpperLeft() const { return originUpperLeft; }
+    void setPixelCenterInteger() { pixelCenterInteger = true; }
+    bool getPixelCenterInteger() const { return pixelCenterInteger; }
     void addBlendEquation(TBlendEquationShift b) { blendEquations |= (1 << b); }
     unsigned int getBlendEquations() const { return blendEquations; }
-
-    void addToCallGraph(TInfoSink&, const TString& caller, const TString& callee);
-    void merge(TInfoSink&, TIntermediate&);
-    void finalCheck(TInfoSink&, bool keepUncalled);
-
-    void addIoAccessed(const TString& name) { ioAccessed.insert(name); }
-    bool inIoAccessed(const TString& name) const { return ioAccessed.find(name) != ioAccessed.end(); }
-
-    int addUsedLocation(const TQualifier&, const TType&, bool& typeCollision);
-    int checkLocationRange(int set, const TIoRange& range, const TType&, bool& typeCollision);
-    int addUsedOffsets(int binding, int offset, int numOffsets);
-    bool addUsedConstantId(int id);
-    static int computeTypeLocationSize(const TType&, EShLanguage);
-    static int computeTypeUniformLocationSize(const TType&);
-
     bool setXfbBufferStride(int buffer, unsigned stride)
     {
         if (xfbBuffers[buffer].stride != TQualifier::layoutXfbStrideEnd)
@@ -640,20 +726,14 @@
     }
     unsigned getXfbStride(int buffer) const { return xfbBuffers[buffer].stride; }
     int addXfbBufferOffset(const TType&);
-    unsigned int computeTypeXfbSize(const TType&, bool& containsDouble) const;
-    static int getBaseAlignmentScalar(const TType&, int& size);
-    static int getBaseAlignment(const TType&, int& size, int& stride, TLayoutPacking layoutPacking, bool rowMajor);
-    static int getScalarAlignment(const TType&, int& size, int& stride, bool rowMajor);
-    static int getMemberAlignment(const TType&, int& size, int& stride, TLayoutPacking layoutPacking, bool rowMajor);
-    static bool improperStraddle(const TType& type, int size, int offset);
-    bool promote(TIntermOperator*);
-
-#ifdef NV_EXTENSIONS
+    unsigned int computeTypeXfbSize(const TType&, bool& contains64BitType, bool& contains32BitType, bool& contains16BitType) const;
+    unsigned int computeTypeXfbSize(const TType&, bool& contains64BitType) const;
     void setLayoutOverrideCoverage() { layoutOverrideCoverage = true; }
     bool getLayoutOverrideCoverage() const { return layoutOverrideCoverage; }
     void setGeoPassthroughEXT() { geoPassthroughEXT = true; }
     bool getGeoPassthroughEXT() const { return geoPassthroughEXT; }
     void setLayoutDerivativeMode(ComputeDerivativeMode mode) { computeDerivativeMode = mode; }
+    bool hasLayoutDerivativeModeNone() const { return computeDerivativeMode != LayoutDerivativeNone; }
     ComputeDerivativeMode getLayoutDerivativeModeNone() const { return computeDerivativeMode; }
     bool setPrimitives(int m)
     {
@@ -663,28 +743,10 @@
         return true;
     }
     int getPrimitives() const { return primitives; }
-#endif
-
     const char* addSemanticName(const TString& name)
     {
         return semanticNameSet.insert(name).first->c_str();
     }
-
-    void setSourceFile(const char* file) { if (file != nullptr) sourceFile = file; }
-    const std::string& getSourceFile() const { return sourceFile; }
-    void addSourceText(const char* text, size_t len) { sourceText.append(text, len); }
-    const std::string& getSourceText() const { return sourceText; }
-    const std::map<std::string, std::string>& getIncludeText() const { return includeText; }
-    void addIncludeText(const char* name, const char* text, size_t len) { includeText[name].assign(text,len); }
-    void addProcesses(const std::vector<std::string>& p)
-    {
-        for (int i = 0; i < (int)p.size(); ++i)
-            processes.addProcess(p[i]);
-    }
-    void addProcess(const std::string& process) { processes.addProcess(process); }
-    void addProcessArgument(const std::string& arg) { processes.addArgument(arg); }
-    const std::vector<std::string>& getProcesses() const { return processes.getProcesses(); }
-
     void addUniformLocationOverride(const char* nameStr, int location)
     {
         std::string name = nameStr;
@@ -709,9 +771,98 @@
 
     void setBinaryDoubleOutput() { binaryDoubleOutput = true; }
     bool getBinaryDoubleOutput() { return binaryDoubleOutput; }
+#endif // GLSLANG_WEB
 
-    const char* const implicitThisName;
-    const char* const implicitCounterName;
+#ifdef ENABLE_HLSL
+    void setHlslFunctionality1() { hlslFunctionality1 = true; }
+    bool getHlslFunctionality1() const { return hlslFunctionality1; }
+    void setHlslOffsets()
+    {
+        hlslOffsets = true;
+        if (hlslOffsets)
+            processes.addProcess("hlsl-offsets");
+    }
+    bool usingHlslOffsets() const { return hlslOffsets; }
+    void setHlslIoMapping(bool b)
+    {
+        hlslIoMapping = b;
+        if (hlslIoMapping)
+            processes.addProcess("hlsl-iomap");
+    }
+    bool usingHlslIoMapping() { return hlslIoMapping; }
+#else
+    bool getHlslFunctionality1() const { return false; }
+    bool usingHlslOffsets() const { return false; }
+    bool usingHlslIoMapping() { return false; }
+#endif
+
+    void addToCallGraph(TInfoSink&, const TString& caller, const TString& callee);
+    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(); }
+
+    int addUsedLocation(const TQualifier&, const TType&, bool& typeCollision);
+    int checkLocationRange(int set, const TIoRange& range, const TType&, bool& typeCollision);
+    int addUsedOffsets(int binding, int offset, int numOffsets);
+    bool addUsedConstantId(int id);
+    static int computeTypeLocationSize(const TType&, EShLanguage);
+    static int computeTypeUniformLocationSize(const TType&);
+
+    static int getBaseAlignmentScalar(const TType&, int& size);
+    static int getBaseAlignment(const TType&, int& size, int& stride, TLayoutPacking layoutPacking, bool rowMajor);
+    static int getScalarAlignment(const TType&, int& size, int& stride, bool rowMajor);
+    static int getMemberAlignment(const TType&, int& size, int& stride, TLayoutPacking layoutPacking, bool rowMajor);
+    static bool improperStraddle(const TType& type, int size, int offset);
+    static void updateOffset(const TType& parentType, const TType& memberType, int& offset, int& memberSize);
+    static int getOffset(const TType& type, int index);
+    static int getBlockSize(const TType& blockType);
+    static int computeBufferReferenceTypeSize(const TType&);
+    bool promote(TIntermOperator*);
+    void setNanMinMaxClamp(bool setting) { nanMinMaxClamp = setting; }
+    bool getNanMinMaxClamp() const { return nanMinMaxClamp; }
+
+    void setSourceFile(const char* file) { if (file != nullptr) sourceFile = file; }
+    const std::string& getSourceFile() const { return sourceFile; }
+    void addSourceText(const char* text, size_t len) { sourceText.append(text, len); }
+    const std::string& getSourceText() const { return sourceText; }
+    const std::map<std::string, std::string>& getIncludeText() const { return includeText; }
+    void addIncludeText(const char* name, const char* text, size_t len) { includeText[name].assign(text,len); }
+    void addProcesses(const std::vector<std::string>& p)
+    {
+        for (int i = 0; i < (int)p.size(); ++i)
+            processes.addProcess(p[i]);
+    }
+    void addProcess(const std::string& process) { processes.addProcess(process); }
+    void addProcessArgument(const std::string& arg) { processes.addArgument(arg); }
+    const std::vector<std::string>& getProcesses() const { return processes.getProcesses(); }
+
+    // Certain explicit conversions are allowed conditionally
+#ifdef GLSLANG_WEB
+    bool getArithemeticInt8Enabled() const { return false; }
+    bool getArithemeticInt16Enabled() const { return false; }
+    bool getArithemeticFloat16Enabled() const { return false; }
+#else
+    bool getArithemeticInt8Enabled() const {
+        return extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
+               extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int8);
+    }
+    bool getArithemeticInt16Enabled() const {
+        return extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
+               extensionRequested(E_GL_AMD_gpu_shader_int16) ||
+               extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16);
+    }
+
+    bool getArithemeticFloat16Enabled() const {
+        return extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
+               extensionRequested(E_GL_AMD_gpu_shader_half_float) ||
+               extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16);
+    }
+#endif
 
 protected:
     TIntermSymbol* addSymbol(int Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&);
@@ -720,8 +871,8 @@
     void mergeCallGraphs(TInfoSink&, TIntermediate&);
     void mergeModes(TInfoSink&, TIntermediate&);
     void mergeTrees(TInfoSink&, TIntermediate&);
-    void seedIdMap(TMap<TString, int>& idMap, int& maxId);
-    void remapIds(const TMap<TString, int>& idMap, int idShift, TIntermediate&);
+    void seedIdMap(TIdMaps& idMaps, int& maxId);
+    void remapIds(const TIdMaps& idMaps, int idShift, TIntermediate&);
     void mergeBodies(TInfoSink&, TIntermSequence& globals, const TIntermSequence& unitGlobals);
     void mergeLinkerObjects(TInfoSink&, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects);
     void mergeImplicitArraySizes(TType&, const TType&);
@@ -742,13 +893,21 @@
     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.
+    // This data structure is just a log to pass on to back ends.
+    // Versioning and extensions are handled in Version.cpp, with a rich
+    // set of functions for querying stages, versions, extension enable/disabled, etc.
+#ifdef GLSLANG_WEB
+    bool extensionRequested(const char *extension) const { return false; }
+#else
     bool extensionRequested(const char *extension) const {return requestedExtensions.find(extension) != requestedExtensions.end();}
+#endif
+
     static const char* getResourceName(TResourceType);
 
     const EShLanguage language;  // stage, known at construction time
-    EShSource source;            // source language, known a bit later
     std::string entryPointName;
     std::string entryPointMangledName;
     typedef std::list<TCall> TGraph;
@@ -764,6 +923,20 @@
     int numErrors;
     int numPushConstants;
     bool recursive;
+    bool invertY;
+    bool useStorageBuffer;
+    bool nanMinMaxClamp;            // true if desiring min/max/clamp to favor non-NaN over NaN
+    bool depthReplacing;
+    int localSize[3];
+    bool localSizeNotDefault[3];
+    int localSizeSpecId[3];
+#ifndef GLSLANG_WEB
+public:
+    const char* const implicitThisName;
+    const char* const implicitCounterName;
+protected:
+    EShSource source;            // source language, known a bit later
+    bool useVulkanMemoryModel;
     int invocations;
     int vertices;
     TLayoutGeometry inputPrimitive;
@@ -772,27 +945,22 @@
     bool originUpperLeft;
     TVertexSpacing vertexSpacing;
     TVertexOrder vertexOrder;
+    TInterlockOrdering interlockOrdering;
     bool pointMode;
-    int localSize[3];
-    int localSizeSpecId[3];
     bool earlyFragmentTests;
     bool postDepthCoverage;
     TLayoutDepth depthLayout;
-    bool depthReplacing;
     bool hlslFunctionality1;
     int blendEquations;        // an 'or'ing of masks of shifts of TBlendEquationShift
     bool xfbMode;
     std::vector<TXfbBuffer> xfbBuffers;     // all the data we need to track per xfb buffer
     bool multiStream;
-
-#ifdef NV_EXTENSIONS
     bool layoutOverrideCoverage;
     bool geoPassthroughEXT;
-    int numShaderRecordNVBlocks;
+    int numShaderRecordBlocks;
     ComputeDerivativeMode computeDerivativeMode;
     int primitives;
     int numTaskNVBlocks;
-#endif
 
     // Base shift values
     std::array<unsigned int, EResCount> shiftBinding;
@@ -803,22 +971,29 @@
     std::vector<std::string> resourceSetBinding;
     bool autoMapBindings;
     bool autoMapLocations;
-    bool invertY;
     bool flattenUniformArrays;
     bool useUnknownFormat;
     bool hlslOffsets;
-    bool useStorageBuffer;
-    bool useVulkanMemoryModel;
     bool hlslIoMapping;
+    bool useVariablePointers;
 
-    std::set<TString> ioAccessed;           // set of names of statically read/written I/O that might need extra checking
-    std::vector<TIoRange> usedIo[4];        // sets of used locations, one for each of in, out, uniform, and buffers
-    std::vector<TOffsetRange> usedAtomics;  // sets of bindings used by atomic counters
-    std::unordered_set<int> usedConstantId; // specialization constant ids used
     std::set<TString> semanticNameSet;
 
     EShTextureSamplerTransformMode textureSamplerTransformMode;
 
+    bool needToLegalize;
+    bool binaryDoubleOutput;
+    bool usePhysicalStorageBuffer;
+
+    std::unordered_map<std::string, int> uniformLocationOverrides;
+    int uniformLocationBase;
+#endif
+
+    std::unordered_set<int> usedConstantId; // specialization constant ids used
+    std::vector<TOffsetRange> usedAtomics;  // sets of bindings used by atomic counters
+    std::vector<TIoRange> usedIo[4];        // sets of used locations, one for each of in, out, uniform, and buffers
+    // set of names of statically read/written I/O that might need extra checking
+    std::set<TString> ioAccessed;
     // source code of shader, useful as part of debug information
     std::string sourceFile;
     std::string sourceText;
@@ -829,13 +1004,6 @@
     // for OpModuleProcessed, or equivalent
     TProcesses processes;
 
-    bool needToLegalize;
-    bool binaryDoubleOutput;
-    bool usePhysicalStorageBuffer;
-
-    std::unordered_map<std::string, int> uniformLocationOverrides;
-    int uniformLocationBase;
-
 private:
     void operator=(TIntermediate&); // prevent assignments
 };
diff --git a/glslang/MachineIndependent/parseConst.cpp b/glslang/MachineIndependent/parseConst.cpp
index 1a8e6d9..7c04743 100644
--- a/glslang/MachineIndependent/parseConst.cpp
+++ b/glslang/MachineIndependent/parseConst.cpp
@@ -165,17 +165,27 @@
                     }
                 }
             } else {
-                // matrix from vector
+                // matrix from vector or scalar
                 int count = 0;
                 const int startIndex = index;
                 int nodeComps = node->getType().computeNumComponents();
                 for (int i = startIndex; i < endIndex; i++) {
                     if (i >= instanceSize)
                         return;
-                    if (i == startIndex || (i - startIndex) % (matrixRows + 1) == 0 )
+                    if (nodeComps == 1) {
+                        // If there is a single scalar parameter to a matrix
+                        // constructor, it is used to initialize all the
+                        // components on the matrix's diagonal, with the
+                        // remaining components initialized to 0.0.
+                        if (i == startIndex || (i - startIndex) % (matrixRows + 1) == 0 )
+                            leftUnionArray[i] = rightUnionArray[count];
+                        else
+                            leftUnionArray[i].setDConst(0.0);
+                    } else {
+                        // construct the matrix in column-major order, from
+                        // the components provided, in order
                         leftUnionArray[i] = rightUnionArray[count];
-                    else
-                        leftUnionArray[i].setDConst(0.0);
+                    }
 
                     index++;
 
diff --git a/glslang/MachineIndependent/parseVersions.h b/glslang/MachineIndependent/parseVersions.h
old mode 100755
new mode 100644
index b5e229a..aa1964f
--- a/glslang/MachineIndependent/parseVersions.h
+++ b/glslang/MachineIndependent/parseVersions.h
@@ -57,26 +57,91 @@
     TParseVersions(TIntermediate& interm, int version, EProfile profile,
                    const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink,
                    bool forwardCompatible, EShMessages messages)
-        : infoSink(infoSink), version(version), profile(profile), language(language),
-          spvVersion(spvVersion), forwardCompatible(forwardCompatible),
-          intermediate(interm), messages(messages), numErrors(0), currentScanner(0) { }
+        :
+#ifndef GLSLANG_WEB
+        forwardCompatible(forwardCompatible),
+        profile(profile),
+#endif
+        infoSink(infoSink), version(version), 
+        language(language),
+        spvVersion(spvVersion), 
+        intermediate(interm), messages(messages), numErrors(0), currentScanner(0) { }
     virtual ~TParseVersions() { }
+    void requireStage(const TSourceLoc&, EShLanguageMask, const char* featureDesc);
+    void requireStage(const TSourceLoc&, EShLanguage, const char* featureDesc);
+#ifdef GLSLANG_WEB
+    const EProfile profile = EEsProfile;
+    bool isEsProfile() const { return true; }
+    void requireProfile(const TSourceLoc& loc, int profileMask, const char* featureDesc)
+    {
+        if (! (EEsProfile & profileMask))
+            error(loc, "not supported with this profile:", featureDesc, ProfileName(profile));
+    }
+    void profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, int numExtensions,
+        const char* const extensions[], const char* featureDesc)
+    {
+        if ((EEsProfile & profileMask) && (minVersion == 0 || version < minVersion))
+            error(loc, "not supported for this version or the enabled extensions", featureDesc, "");
+    }
+    void profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, const char* extension,
+        const char* featureDesc)
+    {
+        profileRequires(loc, profileMask, minVersion, extension ? 1 : 0, &extension, featureDesc);
+    }
+    void initializeExtensionBehavior() { }
+    void checkDeprecated(const TSourceLoc&, int queryProfiles, int depVersion, const char* featureDesc) { }
+    void requireNotRemoved(const TSourceLoc&, int queryProfiles, int removedVersion, const char* featureDesc) { }
+    void requireExtensions(const TSourceLoc&, int numExtensions, const char* const extensions[],
+        const char* featureDesc) { }
+    void ppRequireExtensions(const TSourceLoc&, int numExtensions, const char* const extensions[],
+        const char* featureDesc) { }
+    TExtensionBehavior getExtensionBehavior(const char*) { return EBhMissing; }
+    bool extensionTurnedOn(const char* const extension) { return false; }
+    bool extensionsTurnedOn(int numExtensions, const char* const extensions[]) { return false; }
+    void updateExtensionBehavior(int line, const char* const extension, const char* behavior) { }
+    void updateExtensionBehavior(const char* const extension, TExtensionBehavior) { }
+    void checkExtensionStage(const TSourceLoc&, const char* const extension) { }
+    void fullIntegerCheck(const TSourceLoc&, const char* op) { }
+    void doubleCheck(const TSourceLoc&, const char* op) { }
+    bool float16Arithmetic() { return false; }
+    void requireFloat16Arithmetic(const TSourceLoc& loc, const char* op, const char* featureDesc) { }
+    bool int16Arithmetic() { return false; }
+    void requireInt16Arithmetic(const TSourceLoc& loc, const char* op, const char* featureDesc) { }
+    bool int8Arithmetic() { return false; }
+    void requireInt8Arithmetic(const TSourceLoc& loc, const char* op, const char* featureDesc) { }
+    void int64Check(const TSourceLoc&, const char* op, bool builtIn = false) { }
+    void explicitFloat32Check(const TSourceLoc&, const char* op, bool builtIn = false) { }
+    void explicitFloat64Check(const TSourceLoc&, const char* op, bool builtIn = false) { }
+    bool relaxedErrors()    const { return false; }
+    bool suppressWarnings() const { return true; }
+    bool isForwardCompatible() const { return false; }
+#else
+    bool forwardCompatible;      // true if errors are to be given for use of deprecated features
+    EProfile profile;            // the declared profile in the shader (core by default)
+    bool isEsProfile() const { return profile == EEsProfile; }
+    void requireProfile(const TSourceLoc& loc, int profileMask, const char* featureDesc);
+    void profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, int numExtensions,
+        const char* const extensions[], const char* featureDesc);
+    void profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, const char* extension,
+        const char* featureDesc);
     virtual void initializeExtensionBehavior();
-    virtual void requireProfile(const TSourceLoc&, int queryProfiles, const char* featureDesc);
-    virtual void profileRequires(const TSourceLoc&, int queryProfiles, int minVersion, int numExtensions, const char* const extensions[], const char* featureDesc);
-    virtual void profileRequires(const TSourceLoc&, int queryProfiles, int minVersion, const char* const extension, const char* featureDesc);
-    virtual void requireStage(const TSourceLoc&, EShLanguageMask, const char* featureDesc);
-    virtual void requireStage(const TSourceLoc&, EShLanguage, const char* featureDesc);
     virtual void checkDeprecated(const TSourceLoc&, int queryProfiles, int depVersion, const char* featureDesc);
     virtual void requireNotRemoved(const TSourceLoc&, int queryProfiles, int removedVersion, const char* featureDesc);
-    virtual void unimplemented(const TSourceLoc&, const char* featureDesc);
-    virtual void requireExtensions(const TSourceLoc&, int numExtensions, const char* const extensions[], const char* featureDesc);
-    virtual void ppRequireExtensions(const TSourceLoc&, int numExtensions, const char* const extensions[], const char* featureDesc);
+    virtual void requireExtensions(const TSourceLoc&, int numExtensions, const char* const extensions[],
+        const char* featureDesc);
+    virtual void ppRequireExtensions(const TSourceLoc&, int numExtensions, const char* const extensions[],
+        const char* featureDesc);
     virtual TExtensionBehavior getExtensionBehavior(const char*);
     virtual bool extensionTurnedOn(const char* const extension);
     virtual bool extensionsTurnedOn(int numExtensions, const char* const extensions[]);
     virtual void updateExtensionBehavior(int line, const char* const extension, const char* behavior);
+    virtual void updateExtensionBehavior(const char* const extension, TExtensionBehavior);
+    virtual bool checkExtensionsRequested(const TSourceLoc&, int numExtensions, const char* const extensions[],
+        const char* featureDesc);
+    virtual void checkExtensionStage(const TSourceLoc&, const char* const extension);
     virtual void fullIntegerCheck(const TSourceLoc&, const char* op);
+
+    virtual void unimplemented(const TSourceLoc&, const char* featureDesc);
     virtual void doubleCheck(const TSourceLoc&, const char* op);
     virtual void float16Check(const TSourceLoc&, const char* op, bool builtIn = false);
     virtual void float16ScalarVectorCheck(const TSourceLoc&, const char* op, bool builtIn = false);
@@ -88,23 +153,35 @@
     virtual void int8ScalarVectorCheck(const TSourceLoc&, const char* op, bool builtIn = false);
     virtual bool int8Arithmetic();
     virtual void requireInt8Arithmetic(const TSourceLoc& loc, const char* op, const char* featureDesc);
-#ifdef AMD_EXTENSIONS
     virtual void float16OpaqueCheck(const TSourceLoc&, const char* op, bool builtIn = false);
-#endif
     virtual void int64Check(const TSourceLoc&, const char* op, bool builtIn = false);
     virtual void explicitInt8Check(const TSourceLoc&, const char* op, bool builtIn = false);
     virtual void explicitInt16Check(const TSourceLoc&, const char* op, bool builtIn = false);
     virtual void explicitInt32Check(const TSourceLoc&, const char* op, bool builtIn = false);
     virtual void explicitFloat32Check(const TSourceLoc&, const char* op, bool builtIn = false);
     virtual void explicitFloat64Check(const TSourceLoc&, const char* op, bool builtIn = false);
+    virtual void fcoopmatCheck(const TSourceLoc&, const char* op, bool builtIn = false);
+    virtual void intcoopmatCheck(const TSourceLoc&, const char *op, bool builtIn = false);
+    bool relaxedErrors()    const { return (messages & EShMsgRelaxedErrors) != 0; }
+    bool suppressWarnings() const { return (messages & EShMsgSuppressWarnings) != 0; }
+    bool isForwardCompatible() const { return forwardCompatible; }
+#endif // GLSLANG_WEB
     virtual void spvRemoved(const TSourceLoc&, const char* op);
     virtual void vulkanRemoved(const TSourceLoc&, const char* op);
     virtual void requireVulkan(const TSourceLoc&, const char* op);
     virtual void requireSpv(const TSourceLoc&, const char* op);
-    virtual bool checkExtensionsRequested(const TSourceLoc&, int numExtensions, const char* const extensions[], const char* featureDesc);
-    virtual void updateExtensionBehavior(const char* const extension, TExtensionBehavior);
-    virtual void checkExtensionStage(const TSourceLoc&, const char* const extension);
 
+
+#if defined(GLSLANG_WEB) && !defined(GLSLANG_WEB_DEVEL)
+    void C_DECL   error(const TSourceLoc&, const char* szReason, const char* szToken,
+                        const char* szExtraInfoFormat, ...) { addError(); }
+    void C_DECL    warn(const TSourceLoc&, const char* szReason, const char* szToken,
+                        const char* szExtraInfoFormat, ...) { }
+    void C_DECL ppError(const TSourceLoc&, const char* szReason, const char* szToken,
+                        const char* szExtraInfoFormat, ...) { addError(); }
+    void C_DECL  ppWarn(const TSourceLoc&, const char* szReason, const char* szToken,
+                        const char* szExtraInfoFormat, ...) { }
+#else
     virtual void C_DECL error(const TSourceLoc&, const char* szReason, const char* szToken,
         const char* szExtraInfoFormat, ...) = 0;
     virtual void C_DECL  warn(const TSourceLoc&, const char* szReason, const char* szToken,
@@ -113,6 +190,7 @@
         const char* szExtraInfoFormat, ...) = 0;
     virtual void C_DECL ppWarn(const TSourceLoc&, const char* szReason, const char* szToken,
         const char* szExtraInfoFormat, ...) = 0;
+#endif
 
     void addError() { ++numErrors; }
     int getNumErrors() const { return numErrors; }
@@ -126,20 +204,20 @@
     void setCurrentString(int string) { currentScanner->setString(string); }
 
     void getPreamble(std::string&);
-    bool relaxedErrors()    const { return (messages & EShMsgRelaxedErrors) != 0; }
-    bool suppressWarnings() const { return (messages & EShMsgSuppressWarnings) != 0; }
+#ifdef ENABLE_HLSL
     bool isReadingHLSL()    const { return (messages & EShMsgReadHlsl) == EShMsgReadHlsl; }
     bool hlslEnable16BitTypes() const { return (messages & EShMsgHlslEnable16BitTypes) != 0; }
     bool hlslDX9Compatible() const { return (messages & EShMsgHlslDX9Compatible) != 0; }
+#else
+    bool isReadingHLSL()    const { return false; }
+#endif
 
     TInfoSink& infoSink;
 
     // compilation mode
     int version;                 // version, updated by #version in the shader
-    EProfile profile;            // the declared profile in the shader (core by default)
     EShLanguage language;        // really the stage
     SpvVersion spvVersion;
-    bool forwardCompatible;      // true if errors are to be given for use of deprecated features
     TIntermediate& intermediate; // helper for making and hooking up pieces of the parse tree
 
 protected:
diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp
old mode 100755
new mode 100644
index 3441948..ec39356
--- a/glslang/MachineIndependent/preprocessor/Pp.cpp
+++ b/glslang/MachineIndependent/preprocessor/Pp.cpp
@@ -147,6 +147,10 @@
         }
 
         token = scanToken(ppToken);
+    } else if (token != '\n' && token != EndOfInput && !ppToken->space) {
+        parseContext.ppWarn(ppToken->loc, "missing space after macro name", "#define", "");
+
+        return token;
     }
 
     // record the definition of the macro
@@ -162,29 +166,43 @@
     if (existing != nullptr) {
         if (! existing->undef) {
             // Already defined -- need to make sure they are identical:
-            // "Two replacement lists are identical if and only if the preprocessing tokens in both have the same number,
-            // ordering, spelling, and white-space separation, where all white-space separations are considered identical."
-            if (existing->functionLike != mac.functionLike)
-                parseContext.ppError(defineLoc, "Macro redefined; function-like versus object-like:", "#define", atomStrings.getString(defAtom));
-            else if (existing->args.size() != mac.args.size())
-                parseContext.ppError(defineLoc, "Macro redefined; different number of arguments:", "#define", atomStrings.getString(defAtom));
-            else {
-                if (existing->args != mac.args)
-                    parseContext.ppError(defineLoc, "Macro redefined; different argument names:", "#define", atomStrings.getString(defAtom));
+            // "Two replacement lists are identical if and only if the
+            // preprocessing tokens in both have the same number,
+            // ordering, spelling, and white-space separation, where all
+            // white-space separations are considered identical."
+            if (existing->functionLike != mac.functionLike) {
+                parseContext.ppError(defineLoc, "Macro redefined; function-like versus object-like:", "#define",
+                    atomStrings.getString(defAtom));
+            } else if (existing->args.size() != mac.args.size()) {
+                parseContext.ppError(defineLoc, "Macro redefined; different number of arguments:", "#define",
+                    atomStrings.getString(defAtom));
+            } else {
+                if (existing->args != mac.args) {
+                    parseContext.ppError(defineLoc, "Macro redefined; different argument names:", "#define",
+                       atomStrings.getString(defAtom));
+                }
+                // set up to compare the two
                 existing->body.reset();
                 mac.body.reset();
                 int newToken;
+                bool firstToken = true;
                 do {
                     int oldToken;
                     TPpToken oldPpToken;
                     TPpToken newPpToken;
                     oldToken = existing->body.getToken(parseContext, &oldPpToken);
                     newToken = mac.body.getToken(parseContext, &newPpToken);
+                    // for the first token, preceding spaces don't matter
+                    if (firstToken) {
+                        newPpToken.space = oldPpToken.space;
+                        firstToken = false;
+                    }
                     if (oldToken != newToken || oldPpToken != newPpToken) {
-                        parseContext.ppError(defineLoc, "Macro redefined; different substitutions:", "#define", atomStrings.getString(defAtom));
+                        parseContext.ppError(defineLoc, "Macro redefined; different substitutions:", "#define",
+                            atomStrings.getString(defAtom));
                         break;
                     }
-                } while (newToken > 0);
+                } while (newToken != EndOfInput);
             }
         }
         *existing = mac;
@@ -527,7 +545,7 @@
         case MacroExpandStarted:
             break;
         case MacroExpandUndef:
-            if (! shortCircuit && parseContext.profile == EEsProfile) {
+            if (! shortCircuit && parseContext.isEsProfile()) {
                 const char* message = "undefined macro in expression not allowed in es profile";
                 if (parseContext.relaxedErrors())
                     parseContext.ppWarn(ppToken->loc, message, "preprocessor evaluation", ppToken->name);
@@ -603,14 +621,25 @@
 {
     const TSourceLoc directiveLoc = ppToken->loc;
     bool startWithLocalSearch = true; // to additionally include the extra "" paths
-    int token = scanToken(ppToken);
+    int token;
 
-    // handle <header-name>-style #include
-    if (token == '<') {
+    // Find the first non-whitespace char after #include
+    int ch = getChar();
+    while (ch == ' ' || ch == '\t') {
+        ch = getChar();
+    }
+    if (ch == '<') {
+        // <header-name> style
         startWithLocalSearch = false;
         token = scanHeaderName(ppToken, '>');
+    } else if (ch == '"') {
+        // "header-name" style
+        token = scanHeaderName(ppToken, '"');
+    } else {
+        // unexpected, get the full token to generate the error
+        ungetChar();
+        token = scanToken(ppToken);
     }
-    // otherwise ppToken already has the header name and it was "header-name" style
 
     if (token != PpAtomConstString) {
         parseContext.ppError(directiveLoc, "must be followed by a header name", "#include", "");
@@ -693,7 +722,9 @@
     const char* sourceName = nullptr; // Optional source file name.
     bool lineErr = false;
     bool fileErr = false;
+    disableEscapeSequences = true;
     token = eval(token, MIN_PRECEDENCE, false, lineRes, lineErr, ppToken);
+    disableEscapeSequences = false;
     if (! lineErr) {
         lineToken = lineRes;
         if (token == '\n')
@@ -704,6 +735,7 @@
         parseContext.setCurrentLine(lineRes);
 
         if (token != '\n') {
+#ifndef GLSLANG_WEB
             if (token == PpAtomConstString) {
                 parseContext.ppRequireExtensions(directiveLoc, 1, &E_GL_GOOGLE_cpp_style_line_directive, "filename-based #line");
                 // We need to save a copy of the string instead of pointing
@@ -713,7 +745,9 @@
                 parseContext.setCurrentSourceName(sourceName);
                 hasFile = true;
                 token = scanToken(ppToken);
-            } else {
+            } else
+#endif
+            {
                 token = eval(token, MIN_PRECEDENCE, false, fileRes, fileErr, ppToken);
                 if (! fileErr) {
                     parseContext.setCurrentString(fileRes);
@@ -733,7 +767,9 @@
 // Handle #error
 int TPpContext::CPPerror(TPpToken* ppToken)
 {
+    disableEscapeSequences = true;
     int token = scanToken(ppToken);
+    disableEscapeSequences = false;
     std::string message;
     TSourceLoc loc = ppToken->loc;
 
@@ -774,10 +810,8 @@
         case PpAtomConstUint:
         case PpAtomConstInt64:
         case PpAtomConstUint64:
-#ifdef AMD_EXTENSIONS
         case PpAtomConstInt16:
         case PpAtomConstUint16:
-#endif
         case PpAtomConstFloat:
         case PpAtomConstDouble:
         case PpAtomConstFloat16:
@@ -862,8 +896,7 @@
     if (token != PpAtomIdentifier)
         parseContext.ppError(ppToken->loc, "extension name expected", "#extension", "");
 
-    assert(strlen(ppToken->name) <= MaxTokenLength);
-    strcpy(extensionName, ppToken->name);
+    snprintf(extensionName, sizeof(extensionName), "%s", ppToken->name);
 
     token = scanToken(ppToken);
     if (token != ':') {
@@ -937,18 +970,20 @@
         case PpAtomIfndef:
             token = CPPifdef(0, ppToken);
             break;
+        case PpAtomLine:
+            token = CPPline(ppToken);
+            break;
+#ifndef GLSLANG_WEB
         case PpAtomInclude:
             if(!parseContext.isReadingHLSL()) {
                 parseContext.ppRequireExtensions(ppToken->loc, 1, &E_GL_GOOGLE_include_directive, "#include");
             }
             token = CPPinclude(ppToken);
             break;
-        case PpAtomLine:
-            token = CPPline(ppToken);
-            break;
         case PpAtomPragma:
             token = CPPpragma(ppToken);
             break;
+#endif
         case PpAtomUndef:
             token = CPPundef(ppToken);
             break;
@@ -1023,7 +1058,9 @@
             case MacroExpandNotStarted:
                 break;
             case MacroExpandError:
-                token = EndOfInput;
+                // toss the rest of the pushed-input argument by scanning until tMarkerInput
+                while ((token = scanToken(ppToken)) != tMarkerInput::marker && token != EndOfInput)
+                    ;
                 break;
             case MacroExpandStarted:
             case MacroExpandUndef:
@@ -1035,13 +1072,10 @@
         expandedArg->putToken(token, ppToken);
     }
 
-    if (token == EndOfInput) {
+    if (token != tMarkerInput::marker) {
         // Error, or MacroExpand ate the marker, so had bad input, recover
         delete expandedArg;
         expandedArg = nullptr;
-    } else {
-        // remove the marker
-        popInput();
     }
 
     return expandedArg;
@@ -1258,7 +1292,7 @@
 
             if (token == ')') {
                 // closing paren of call
-                if (in->mac->args.size() == 1 && tokenRecorded == 0)
+                if (in->mac->args.size() == 1 && !tokenRecorded)
                     break;
                 arg++;
                 break;
diff --git a/glslang/MachineIndependent/preprocessor/PpContext.cpp b/glslang/MachineIndependent/preprocessor/PpContext.cpp
old mode 100755
new mode 100644
index cc003a8..1363ce2
--- a/glslang/MachineIndependent/preprocessor/PpContext.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpContext.cpp
@@ -87,7 +87,8 @@
 TPpContext::TPpContext(TParseContextBase& pc, const std::string& rootFileName, TShader::Includer& inclr) :
     preamble(0), strings(0), previous_token('\n'), parseContext(pc), includer(inclr), inComment(false),
     rootFileName(rootFileName),
-    currentSourceFile(rootFileName)
+    currentSourceFile(rootFileName),
+    disableEscapeSequences(false)
 {
     ifdepth = 0;
     for (elsetracker = 0; elsetracker < maxIfNesting; elsetracker++)
diff --git a/glslang/MachineIndependent/preprocessor/PpContext.h b/glslang/MachineIndependent/preprocessor/PpContext.h
old mode 100755
new mode 100644
index 7b8b22e..a60fc75
--- a/glslang/MachineIndependent/preprocessor/PpContext.h
+++ b/glslang/MachineIndependent/preprocessor/PpContext.h
@@ -84,6 +84,7 @@
 #include <sstream>
 
 #include "../ParseHelper.h"
+#include "PpTokens.h"
 
 /* windows only pragma */
 #ifdef _MSC_VER
@@ -212,7 +213,8 @@
         virtual int scan(TPpToken*) = 0;
         virtual int getch() = 0;
         virtual void ungetch() = 0;
-        virtual bool peekPasting() { return false; }          // true when about to see ##
+        virtual bool peekPasting() { return false; }             // true when about to see ##
+        virtual bool peekContinuedPasting(int) { return false; } // true when non-spaced tokens can paste
         virtual bool endOfReplacementList() { return false; } // true when at the end of a macro replacement list (RHS of #define)
         virtual bool isMacroInput() { return false; }
 
@@ -243,24 +245,79 @@
     // From PpTokens.cpp
     //
 
+    // Capture the needed parts of a token stream for macro recording/playback.
     class TokenStream {
     public:
-        TokenStream() : current(0) { }
+        // Manage a stream of these 'Token', which capture the relevant parts
+        // of a TPpToken, plus its atom.
+        class Token {
+        public:
+            Token(int atom, const TPpToken& ppToken) : 
+                atom(atom),
+                space(ppToken.space),
+                i64val(ppToken.i64val),
+                name(ppToken.name) { }
+            int get(TPpToken& ppToken)
+            {
+                ppToken.clear();
+                ppToken.space = space;
+                ppToken.i64val = i64val;
+                snprintf(ppToken.name, sizeof(ppToken.name), "%s", name.c_str());
+                return atom;
+            }
+            bool isAtom(int a) const { return atom == a; }
+            int getAtom() const { return atom; }
+            bool nonSpaced() const { return !space; }
+        protected:
+            Token() {}
+            int atom;
+            bool space;        // did a space precede the token?
+            long long i64val;
+            TString name;
+        };
+
+        TokenStream() : currentPos(0) { }
 
         void putToken(int token, TPpToken* ppToken);
+        bool peekToken(int atom) { return !atEnd() && stream[currentPos].isAtom(atom); }
+        bool peekContinuedPasting(int atom)
+        {
+            // This is basically necessary because, for example, the PP
+            // tokenizer only accepts valid numeric-literals plus suffixes, so
+            // separates numeric-literals plus bad suffix into two tokens, which
+            // should get both pasted together as one token when token pasting.
+            //
+            // The following code is a bit more generalized than the above example.
+            if (!atEnd() && atom == PpAtomIdentifier && stream[currentPos].nonSpaced()) {
+                switch(stream[currentPos].getAtom()) {
+                    case PpAtomConstInt:
+                    case PpAtomConstUint:
+                    case PpAtomConstInt64:
+                    case PpAtomConstUint64:
+                    case PpAtomConstInt16:
+                    case PpAtomConstUint16:
+                    case PpAtomConstFloat:
+                    case PpAtomConstDouble:
+                    case PpAtomConstFloat16:
+                    case PpAtomConstString:
+                    case PpAtomIdentifier:
+                        return true;
+                    default:
+                        break;
+                }
+            }
+
+            return false;
+        }
         int getToken(TParseContextBase&, TPpToken*);
-        bool atEnd() { return current >= data.size(); }
+        bool atEnd() { return currentPos >= stream.size(); }
         bool peekTokenizedPasting(bool lastTokenPastes);
         bool peekUntokenizedPasting();
-        void reset() { current = 0; }
+        void reset() { currentPos = 0; }
 
     protected:
-        void putSubtoken(char);
-        int getSubtoken();
-        void ungetSubtoken();
-
-        TVector<unsigned char> data;
-        size_t current;
+        TVector<Token> stream;
+        size_t currentPos;
     };
 
     //
@@ -320,6 +377,10 @@
     int  getChar() { return inputStack.back()->getch(); }
     void ungetChar() { inputStack.back()->ungetch(); }
     bool peekPasting() { return !inputStack.empty() && inputStack.back()->peekPasting(); }
+    bool peekContinuedPasting(int a)
+    {
+        return !inputStack.empty() && inputStack.back()->peekContinuedPasting(a);
+    }
     bool endOfReplacementList() { return inputStack.empty() || inputStack.back()->endOfReplacementList(); }
     bool isMacroInput() { return inputStack.size() > 0 && inputStack.back()->isMacroInput(); }
 
@@ -344,6 +405,7 @@
         virtual int getch() override { assert(0); return EndOfInput; }
         virtual void ungetch() override { assert(0); }
         bool peekPasting() override { return prepaste; }
+        bool peekContinuedPasting(int a) override { return mac->body.peekContinuedPasting(a); }
         bool endOfReplacementList() override { return mac->body.atEnd(); }
         bool isMacroInput() override { return true; }
 
@@ -418,14 +480,18 @@
 
     class tTokenInput : public tInput {
     public:
-        tTokenInput(TPpContext* pp, TokenStream* t, bool prepasting) : tInput(pp), tokens(t), lastTokenPastes(prepasting) { }
+        tTokenInput(TPpContext* pp, TokenStream* t, bool prepasting) :
+            tInput(pp),
+            tokens(t),
+            lastTokenPastes(prepasting) { }
         virtual int scan(TPpToken *ppToken) override { return tokens->getToken(pp->parseContext, ppToken); }
         virtual int getch() override { assert(0); return EndOfInput; }
         virtual void ungetch() override { assert(0); }
         virtual bool peekPasting() override { return tokens->peekTokenizedPasting(lastTokenPastes); }
+        bool peekContinuedPasting(int a) override { return tokens->peekContinuedPasting(a); }
     protected:
         TokenStream* tokens;
-        bool lastTokenPastes;     // true if the last token in the input is to be pasted, rather than consumed as a token
+        bool lastTokenPastes; // true if the last token in the input is to be pasted, rather than consumed as a token
     };
 
     class tUngotTokenInput : public tInput {
@@ -549,9 +615,9 @@
               scanner.setLine(startLoc.line);
               scanner.setString(startLoc.string);
 
-              scanner.setFile(startLoc.name->c_str(), 0);
-              scanner.setFile(startLoc.name->c_str(), 1);
-              scanner.setFile(startLoc.name->c_str(), 2);
+              scanner.setFile(startLoc.getFilenameStr(), 0);
+              scanner.setFile(startLoc.getFilenameStr(), 1);
+              scanner.setFile(startLoc.getFilenameStr(), 2);
         }
 
         // tInput methods:
@@ -629,6 +695,7 @@
     std::string currentSourceFile;
 
     std::istringstream strtodStream;
+    bool disableEscapeSequences;
 };
 
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
old mode 100755
new mode 100644
index 8dd1036..e0f44f8
--- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
@@ -96,12 +96,19 @@
 /////////////////////////////////// Floating point constants: /////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////////////////
 
-/*
-* lFloatConst() - Scan a single- or double-precision floating point constant.  Assumes that the scanner
-*         has seen at least one digit, followed by either a decimal '.' or the
-*         letter 'e', or a precision ending (e.g., F or LF).
-*/
-
+// 
+// Scan a single- or double-precision floating point constant.
+// Assumes that the scanner has seen at least one digit,
+// followed by either a decimal '.' or the letter 'e', or a
+// precision ending (e.g., F or LF).
+//
+// This is technically not correct, as the preprocessor should just
+// accept the numeric literal along with whatever suffix it has, but
+// currently, it stops on seeing a bad suffix, treating that as the
+// next token. This effects things like token pasting, where it is
+// relevant how many tokens something was broken into.
+//
+// See peekContinuedPasting().
 int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken)
 {
     const auto saveName = [&](int ch) {
@@ -135,6 +142,7 @@
         ch = getChar();
         int firstDecimal = len;
 
+#ifdef ENABLE_HLSL
         // 1.#INF or -1.#INF
         if (ch == '#' && (ifdepth > 0 || parseContext.intermediate.getSource() == EShSourceHlsl)) {
             if ((len <  2) ||
@@ -162,6 +170,7 @@
                 }
             }
         }
+#endif
 
         // Consume leading-zero digits after the decimal point
         while (ch == '0') {
@@ -250,6 +259,7 @@
     // Suffix:
     bool isDouble = false;
     bool isFloat16 = false;
+#ifndef GLSLANG_WEB
     if (ch == 'l' || ch == 'L') {
         if (ifdepth == 0 && parseContext.intermediate.getSource() == EShSourceGlsl)
             parseContext.doubleCheck(ppToken->loc, "double floating-point suffix");
@@ -288,11 +298,15 @@
             saveName(ch);
             isFloat16 = true;
         }
-    } else if (ch == 'f' || ch == 'F') {
+    } else
+#endif
+    if (ch == 'f' || ch == 'F') {
+#ifndef GLSLANG_WEB
         if (ifdepth == 0)
             parseContext.profileRequires(ppToken->loc,  EEsProfile, 300, nullptr, "floating-point suffix");
         if (ifdepth == 0 && !parseContext.relaxedErrors())
             parseContext.profileRequires(ppToken->loc, ~EEsProfile, 120, nullptr, "floating-point suffix");
+#endif
         if (ifdepth == 0 && !hasDecimalOrExponent)
             parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
         saveName(ch);
@@ -435,6 +449,14 @@
 //
 // Scanner used to tokenize source stream.
 //
+// N.B. Invalid numeric suffixes are not consumed.//
+// This is technically not correct, as the preprocessor should just
+// accept the numeric literal along with whatever suffix it has, but
+// currently, it stops on seeing a bad suffix, treating that as the
+// next token. This effects things like token pasting, where it is
+// relevant how many tokens something was broken into.
+// See peekContinuedPasting().
+//
 int TPpContext::tStringInput::scan(TPpToken* ppToken)
 {
     int AlreadyComplained = 0;
@@ -453,9 +475,7 @@
     static const int Num_Int64_Extensions = sizeof(Int64_Extensions) / sizeof(Int64_Extensions[0]);
 
     static const char* const Int16_Extensions[] = {
-#ifdef AMD_EXTENSIONS
         E_GL_AMD_gpu_shader_int16,
-#endif
         E_GL_EXT_shader_explicit_arithmetic_types,
         E_GL_EXT_shader_explicit_arithmetic_types_int16 };
     static const int Num_Int16_Extensions = sizeof(Int16_Extensions) / sizeof(Int16_Extensions[0]);
@@ -564,6 +584,7 @@
                         ppToken->name[len++] = (char)ch;
                     isUnsigned = true;
 
+#ifndef GLSLANG_WEB
                     int nextCh = getch();
                     if (nextCh == 'l' || nextCh == 'L') {
                         if (len < MaxTokenLength)
@@ -572,7 +593,6 @@
                     } else
                         ungetch();
 
-#ifdef AMD_EXTENSIONS
                     nextCh = getch();
                     if ((nextCh == 's' || nextCh == 'S') &&
                             pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
@@ -581,12 +601,10 @@
                         isInt16 = true;
                     } else
                         ungetch();
-#endif
                 } else if (ch == 'l' || ch == 'L') {
                     if (len < MaxTokenLength)
                         ppToken->name[len++] = (char)ch;
                     isInt64 = true;
-#ifdef AMD_EXTENSIONS
                 } else if ((ch == 's' || ch == 'S') &&
                            pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
                     if (len < MaxTokenLength)
@@ -674,6 +692,7 @@
                         ppToken->name[len++] = (char)ch;
                     isUnsigned = true;
 
+#ifndef GLSLANG_WEB
                     int nextCh = getch();
                     if (nextCh == 'l' || nextCh == 'L') {
                         if (len < MaxTokenLength)
@@ -682,7 +701,6 @@
                     } else
                         ungetch();
 
-#ifdef AMD_EXTENSIONS
                     nextCh = getch();
                     if ((nextCh == 's' || nextCh == 'S') && 
                                 pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
@@ -691,12 +709,10 @@
                         isInt16 = true;
                     } else
                         ungetch();
-#endif
                 } else if (ch == 'l' || ch == 'L') {
                     if (len < MaxTokenLength)
                         ppToken->name[len++] = (char)ch;
                     isInt64 = true;
-#ifdef AMD_EXTENSIONS
                 } else if ((ch == 's' || ch == 'S') && 
                                 pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
                     if (len < MaxTokenLength)
@@ -765,6 +781,7 @@
                         ppToken->name[len++] = (char)ch;
                     isUnsigned = true;
 
+#ifndef GLSLANG_WEB
                     int nextCh = getch();
                     if (nextCh == 'l' || nextCh == 'L') {
                         if (len < MaxTokenLength)
@@ -773,7 +790,6 @@
                     } else
                         ungetch();
 
-#ifdef AMD_EXTENSIONS
                     nextCh = getch();
                     if ((nextCh == 's' || nextCh == 'S') &&
                                 pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
@@ -782,12 +798,10 @@
                         isInt16 = true;
                     } else
                         ungetch();
-#endif
                 } else if (ch == 'l' || ch == 'L') {
                     if (len < MaxTokenLength)
                         ppToken->name[len++] = (char)ch;
                     isInt64 = true;
-#ifdef AMD_EXTENSIONS
                 } else if ((ch == 's' || ch == 'S') &&
                                 pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
                     if (len < MaxTokenLength)
@@ -1012,12 +1026,80 @@
         case '\'':
             return pp->characterLiteral(ppToken);
         case '"':
-            // TODO: If this gets enhanced to handle escape sequences, or
-            // anything that is different than what #include needs, then
-            // #include needs to use scanHeaderName() for this.
+            // #include uses scanHeaderName() to ignore these escape sequences.
             ch = getch();
             while (ch != '"' && ch != '\n' && ch != EndOfInput) {
                 if (len < MaxTokenLength) {
+                    if (ch == '\\' && !pp->disableEscapeSequences) {
+                        int nextCh = getch();
+                        switch (nextCh) {
+                        case '\'': ch = 0x27; break;
+                        case '"':  ch = 0x22; break;
+                        case '?':  ch = 0x3f; break;
+                        case '\\': ch = 0x5c; break;
+                        case 'a':  ch = 0x07; break;
+                        case 'b':  ch = 0x08; break;
+                        case 'f':  ch = 0x0c; break;
+                        case 'n':  ch = 0x0a; break;
+                        case 'r':  ch = 0x0d; break;
+                        case 't':  ch = 0x09; break;
+                        case 'v':  ch = 0x0b; break;
+                        case 'x': 
+                            // Hex value, arbitrary number of characters. Terminated by the first
+                            // non-hex digit
+                            {
+                                int numDigits = 0;
+                                ch = 0;
+                                while (true) {
+                                    nextCh = getch();
+                                    if (nextCh >= '0' && nextCh <= '9')
+                                        nextCh -= '0';
+                                    else if (nextCh >= 'A' && nextCh <= 'F')
+                                        nextCh -= 'A' - 10;
+                                    else if (nextCh >= 'a' && nextCh <= 'f')
+                                        nextCh -= 'a' - 10;
+                                    else {
+                                        ungetch();
+                                        break;
+                                    }
+                                    numDigits++;
+                                    ch = ch * 0x10 + nextCh;
+                                }
+                                if (numDigits == 0) {
+                                    pp->parseContext.ppError(ppToken->loc, "Expected hex value in escape sequence", "string", "");
+                                }
+                                break;
+                            }
+                        case '0':
+                        case '1':
+                        case '2':
+                        case '3':
+                        case '4':
+                        case '5':
+                        case '6':
+                        case '7':
+                            // Octal value, up to three octal digits
+                            {
+                                int numDigits = 1;
+                                ch = nextCh - '0';
+                                while (numDigits < 3) {
+                                    nextCh = getch();
+                                    if (nextCh >= '0' && nextCh <= '7')
+                                        nextCh -= '0';
+                                    else {
+                                        ungetch();
+                                        break;
+                                    }
+                                    numDigits++;
+                                    ch = ch * 8 + nextCh;
+                                }
+                                break;
+                            }
+                        default:
+                            pp->parseContext.ppError(ppToken->loc, "Invalid escape sequence", "string", "");
+                            break;
+                        }
+                    }
                     ppToken->name[len] = (char)ch;
                     len++;
                     ch = getch();
@@ -1106,17 +1188,19 @@
                 continue;
             break;
         case PpAtomConstString:
+            // HLSL allows string literals.
+            // GLSL allows string literals with GL_EXT_debug_printf.
             if (ifdepth == 0 && parseContext.intermediate.getSource() != EShSourceHlsl) {
-                // HLSL allows string literals.
-                parseContext.ppError(ppToken.loc, "string literals not supported", "\"\"", "");
-                continue;
+                parseContext.requireExtensions(ppToken.loc, 1, &E_GL_EXT_debug_printf, "string literal");
+                if (!parseContext.extensionTurnedOn(E_GL_EXT_debug_printf))
+                    continue;
             }
             break;
         case '\'':
             parseContext.ppError(ppToken.loc, "character literals not supported", "\'", "");
             continue;
         default:
-            strcpy(ppToken.name, atomStrings.getString(token));
+            snprintf(ppToken.name, sizeof(ppToken.name), "%s", atomStrings.getString(token));
             break;
         }
 
@@ -1153,61 +1237,69 @@
             break;
         }
 
-        // get the token after the ##
-        token = scanToken(&pastedPpToken);
+        // Get the token(s) after the ##.
+        // Because of "space" semantics, and prior tokenization, what
+        // appeared a single token, e.g. "3A", might have been tokenized
+        // into two tokens "3" and "A", but the "A" will have 'space' set to
+        // false.  Accumulate all of these to recreate the original lexical
+        // appearing token.
+        do {
+            token = scanToken(&pastedPpToken);
 
-        // This covers end of argument expansion
-        if (token == tMarkerInput::marker) {
-            parseContext.ppError(ppToken.loc, "unexpected location; end of argument", "##", "");
-            break;
-        }
+            // This covers end of argument expansion
+            if (token == tMarkerInput::marker) {
+                parseContext.ppError(ppToken.loc, "unexpected location; end of argument", "##", "");
+                return resultToken;
+            }
 
-        // get the token text
-        switch (resultToken) {
-        case PpAtomIdentifier:
-            // already have the correct text in token.names
-            break;
-        case '=':
-        case '!':
-        case '-':
-        case '~':
-        case '+':
-        case '*':
-        case '/':
-        case '%':
-        case '<':
-        case '>':
-        case '|':
-        case '^':
-        case '&':
-        case PpAtomRight:
-        case PpAtomLeft:
-        case PpAtomAnd:
-        case PpAtomOr:
-        case PpAtomXor:
-            strcpy(ppToken.name, atomStrings.getString(resultToken));
-            strcpy(pastedPpToken.name, atomStrings.getString(token));
-            break;
-        default:
-            parseContext.ppError(ppToken.loc, "not supported for these tokens", "##", "");
-            return resultToken;
-        }
+            // get the token text
+            switch (resultToken) {
+            case PpAtomIdentifier:
+                // already have the correct text in token.names
+                break;
+            case '=':
+            case '!':
+            case '-':
+            case '~':
+            case '+':
+            case '*':
+            case '/':
+            case '%':
+            case '<':
+            case '>':
+            case '|':
+            case '^':
+            case '&':
+            case PpAtomRight:
+            case PpAtomLeft:
+            case PpAtomAnd:
+            case PpAtomOr:
+            case PpAtomXor:
+                snprintf(ppToken.name, sizeof(ppToken.name), "%s", atomStrings.getString(resultToken));
+                snprintf(pastedPpToken.name, sizeof(pastedPpToken.name), "%s", atomStrings.getString(token));
+                break;
+            default:
+                parseContext.ppError(ppToken.loc, "not supported for these tokens", "##", "");
+                return resultToken;
+            }
 
-        // combine the tokens
-        if (strlen(ppToken.name) + strlen(pastedPpToken.name) > MaxTokenLength) {
-            parseContext.ppError(ppToken.loc, "combined tokens are too long", "##", "");
-            return resultToken;
-        }
-        strncat(ppToken.name, pastedPpToken.name, MaxTokenLength - strlen(ppToken.name));
+            // combine the tokens
+            if (strlen(ppToken.name) + strlen(pastedPpToken.name) > MaxTokenLength) {
+                parseContext.ppError(ppToken.loc, "combined tokens are too long", "##", "");
+                return resultToken;
+            }
+            snprintf(&ppToken.name[0] + strlen(ppToken.name), sizeof(ppToken.name) - strlen(ppToken.name),
+                "%s", pastedPpToken.name);
 
-        // correct the kind of token we are making, if needed (identifiers stay identifiers)
-        if (resultToken != PpAtomIdentifier) {
-            int newToken = atomStrings.getAtom(ppToken.name);
-            if (newToken > 0)
-                resultToken = newToken;
-            else
-                parseContext.ppError(ppToken.loc, "combined token is invalid", "##", "");
-        }
+            // correct the kind of token we are making, if needed (identifiers stay identifiers)
+            if (resultToken != PpAtomIdentifier) {
+                int newToken = atomStrings.getAtom(ppToken.name);
+                if (newToken > 0)
+                    resultToken = newToken;
+                else
+                    parseContext.ppError(ppToken.loc, "combined token is invalid", "##", "");
+            }
+        } while (peekContinuedPasting(resultToken));
     }
 
     return resultToken;
diff --git a/glslang/MachineIndependent/preprocessor/PpTokens.cpp b/glslang/MachineIndependent/preprocessor/PpTokens.cpp
index f8029f5..7ed5870 100755
--- a/glslang/MachineIndependent/preprocessor/PpTokens.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpTokens.cpp
@@ -99,150 +99,34 @@
 
 namespace glslang {
 
-
-namespace {
-
-    // When recording (and playing back) should the backing name string
-    // be saved (restored)?
-    bool SaveName(int atom)
-    {
-        switch (atom) {
-        case PpAtomIdentifier:
-        case PpAtomConstString:
-        case PpAtomConstInt:
-        case PpAtomConstUint:
-        case PpAtomConstInt64:
-        case PpAtomConstUint64:
-    #ifdef AMD_EXTENSIONS
-        case PpAtomConstInt16:
-        case PpAtomConstUint16:
-    #endif
-        case PpAtomConstFloat:
-        case PpAtomConstDouble:
-        case PpAtomConstFloat16:
-            return true;
-        default:
-            return false;
-        }
-    }
-
-    // When recording (and playing back) should the numeric value
-    // be saved (restored)?
-    bool SaveValue(int atom)
-    {
-        switch (atom) {
-        case PpAtomConstInt:
-        case PpAtomConstUint:
-        case PpAtomConstInt64:
-        case PpAtomConstUint64:
-    #ifdef AMD_EXTENSIONS
-        case PpAtomConstInt16:
-        case PpAtomConstUint16:
-    #endif
-        case PpAtomConstFloat:
-        case PpAtomConstDouble:
-        case PpAtomConstFloat16:
-            return true;
-        default:
-            return false;
-        }
-    }
-}
-
-// push onto back of stream
-void TPpContext::TokenStream::putSubtoken(char subtoken)
-{
-    data.push_back(static_cast<unsigned char>(subtoken));
-}
-
-// get the next token in stream
-int TPpContext::TokenStream::getSubtoken()
-{
-    if (current < data.size())
-        return data[current++];
-    else
-        return EndOfInput;
-}
-
-// back up one position in the stream
-void TPpContext::TokenStream::ungetSubtoken()
-{
-    if (current > 0)
-        --current;
-}
-
-// Add a complete token (including backing string) to the end of a list
-// for later playback.
+// Add a token (including backing string) to the end of a macro
+// token stream, for later playback.
 void TPpContext::TokenStream::putToken(int atom, TPpToken* ppToken)
 {
-    // save the atom
-    assert((atom & ~0xff) == 0);
-    putSubtoken(static_cast<char>(atom));
-
-    // save the backing name string
-    if (SaveName(atom)) {
-        const char* s = ppToken->name;
-        while (*s)
-            putSubtoken(*s++);
-        putSubtoken(0);
-    }
-
-    // save the numeric value
-    if (SaveValue(atom)) {
-        const char* n = reinterpret_cast<const char*>(&ppToken->i64val);
-        for (size_t i = 0; i < sizeof(ppToken->i64val); ++i)
-            putSubtoken(*n++);
-    }
+    TokenStream::Token streamToken(atom, *ppToken);
+    stream.push_back(streamToken);
 }
 
-// Read the next token from a token stream.
-// (Not the source stream, but a stream used to hold a tokenized macro).
+// Read the next token from a macro token stream.
 int TPpContext::TokenStream::getToken(TParseContextBase& parseContext, TPpToken *ppToken)
 {
-    // get the atom
-    int atom = getSubtoken();
-    if (atom == EndOfInput)
-        return atom;
+    if (atEnd())
+        return EndOfInput;
 
-    // init the token
-    ppToken->clear();
+    int atom = stream[currentPos++].get(*ppToken);
     ppToken->loc = parseContext.getCurrentLoc();
 
-    // get the backing name string
-    if (SaveName(atom)) {
-        int ch = getSubtoken();
-        int len = 0;
-        while (ch != 0 && ch != EndOfInput) {
-            if (len < MaxTokenLength) {
-                ppToken->name[len] = (char)ch;
-                len++;
-                ch = getSubtoken();
-            } else {
-                parseContext.error(ppToken->loc, "token too long", "", "");
-                break;
-            }
-        }
-        ppToken->name[len] = 0;
-    }
-
+#ifndef GLSLANG_WEB
     // Check for ##, unless the current # is the last character
     if (atom == '#') {
-        if (current < data.size()) {
-            if (getSubtoken() == '#') {
-                parseContext.requireProfile(ppToken->loc, ~EEsProfile, "token pasting (##)");
-                parseContext.profileRequires(ppToken->loc, ~EEsProfile, 130, 0, "token pasting (##)");
-                atom = PpAtomPaste;
-            } else
-                ungetSubtoken();
+        if (peekToken('#')) {
+            parseContext.requireProfile(ppToken->loc, ~EEsProfile, "token pasting (##)");
+            parseContext.profileRequires(ppToken->loc, ~EEsProfile, 130, 0, "token pasting (##)");
+            currentPos++;
+            atom = PpAtomPaste;
         }
     }
-
-    // get the numeric value
-    if (SaveValue(atom)) {
-        char* n = reinterpret_cast<char*>(&ppToken->i64val);
-        for (size_t i = 0; i < sizeof(ppToken->i64val); ++i)
-            *n++ = (char)getSubtoken();
-    }
+#endif
 
     return atom;
 }
@@ -256,15 +140,14 @@
 {
     // 1. preceding ##?
 
-    size_t savePos = current;
-    int subtoken;
+    size_t savePos = currentPos;
     // skip white space
-    do {
-        subtoken = getSubtoken();
-    } while (subtoken == ' ');
-    current = savePos;
-    if (subtoken == PpAtomPaste)
+    while (peekToken(' '))
+        ++currentPos;
+    if (peekToken(PpAtomPaste)) {
+        currentPos = savePos;
         return true;
+    }
 
     // 2. last token and we've been told after this there will be a ##
 
@@ -273,18 +156,18 @@
     // Getting here means the last token will be pasted, after this
 
     // Are we at the last non-whitespace token?
-    savePos = current;
+    savePos = currentPos;
     bool moreTokens = false;
     do {
-        subtoken = getSubtoken();
-        if (subtoken == EndOfInput)
+        if (atEnd())
             break;
-        if (subtoken != ' ') {
+        if (!peekToken(' ')) {
             moreTokens = true;
             break;
         }
+        ++currentPos;
     } while (true);
-    current = savePos;
+    currentPos = savePos;
 
     return !moreTokens;
 }
@@ -293,23 +176,21 @@
 bool TPpContext::TokenStream::peekUntokenizedPasting()
 {
     // don't return early, have to restore this
-    size_t savePos = current;
+    size_t savePos = currentPos;
 
     // skip white-space
-    int subtoken;
-    do {
-        subtoken = getSubtoken();
-    } while (subtoken == ' ');
+    while (peekToken(' '))
+        ++currentPos;
 
     // check for ##
     bool pasting = false;
-    if (subtoken == '#') {
-        subtoken = getSubtoken();
-        if (subtoken == '#')
+    if (peekToken('#')) {
+        ++currentPos;
+        if (peekToken('#'))
             pasting = true;
     }
 
-    current = savePos;
+    currentPos = savePos;
 
     return pasting;
 }
diff --git a/glslang/MachineIndependent/propagateNoContraction.cpp b/glslang/MachineIndependent/propagateNoContraction.cpp
index ae95688..9def592 100644
--- a/glslang/MachineIndependent/propagateNoContraction.cpp
+++ b/glslang/MachineIndependent/propagateNoContraction.cpp
@@ -37,6 +37,8 @@
 // propagate the 'noContraction' qualifier.
 //
 
+#ifndef GLSLANG_WEB
+
 #include "propagateNoContraction.h"
 
 #include <cstdlib>
@@ -79,7 +81,7 @@
 // the node has 'noContraction' qualifier, otherwise false.
 bool isPreciseObjectNode(glslang::TIntermTyped* node)
 {
-    return node->getType().getQualifier().noContraction;
+    return node->getType().getQualifier().isNoContraction();
 }
 
 // Returns true if the opcode is a dereferencing one.
@@ -864,3 +866,5 @@
     }
 }
 };
+
+#endif // GLSLANG_WEB
diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp
index 8cfc2ac..2876933 100644
--- a/glslang/MachineIndependent/reflection.cpp
+++ b/glslang/MachineIndependent/reflection.cpp
@@ -33,6 +33,8 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
+#ifndef GLSLANG_WEB
+
 #include "../Include/Common.h"
 #include "reflection.h"
 #include "LiveTraverser.h"
@@ -93,72 +95,133 @@
             // Use a degenerate (empty) set of dereferences to immediately put as at the end of
             // the dereference change expected by blowUpActiveAggregate.
             TList<TIntermBinary*> derefs;
-            blowUpActiveAggregate(base.getType(), base.getName(), derefs, derefs.end(), -1, -1, 0);
+            blowUpActiveAggregate(base.getType(), base.getName(), derefs, derefs.end(), -1, -1, 0, 0,
+                                  base.getQualifier().storage, true);
         }
     }
 
-    void addAttribute(const TIntermSymbol& base)
+    void addPipeIOVariable(const TIntermSymbol& base)
     {
         if (processedDerefs.find(&base) == processedDerefs.end()) {
             processedDerefs.insert(&base);
 
             const TString &name = base.getName();
             const TType &type = base.getType();
+            const bool input = base.getQualifier().isPipeInput();
 
-            TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name);
-            if (it == reflection.nameToIndex.end()) {
-                reflection.nameToIndex[name] = (int)reflection.indexToAttribute.size();
-                reflection.indexToAttribute.push_back(TObjectReflection(name, type, 0, mapToGlType(type), 0, 0));
+            TReflection::TMapIndexToReflection &ioItems =
+                input ? reflection.indexToPipeInput : reflection.indexToPipeOutput;
+
+
+            TReflection::TNameToIndex &ioMapper =
+                input ? reflection.pipeInNameToIndex : reflection.pipeOutNameToIndex;
+
+            if (reflection.options & EShReflectionUnwrapIOBlocks) {
+                bool anonymous = IsAnonymous(name);
+
+                TString baseName;
+                if (type.getBasicType() == EbtBlock) {
+                    baseName = anonymous ? TString() : type.getTypeName();
+                } else {
+                    baseName = anonymous ? TString() : name;
+                }
+
+                // by convention if this is an arrayed block we ignore the array in the reflection
+                if (type.isArray() && type.getBasicType() == EbtBlock) {
+                    blowUpIOAggregate(input, baseName, TType(type, 0));
+                } else {               
+                    blowUpIOAggregate(input, baseName, type);
+                }
+            } else {
+                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()] = static_cast<int>(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 {
+                    EShLanguageMask& stages = ioItems[it->second].stages;
+                    stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
+                }
             }
         }
     }
 
-    // Lookup or calculate the offset of a block member, using the recursively
+    // Lookup or calculate the offset of all block members at once, using the recursively
     // defined block offset rules.
-    int getOffset(const TType& type, int index)
+    void getOffsets(const TType& type, TVector<int>& offsets)
     {
         const TTypeList& memberList = *type.getStruct();
 
-        // Don't calculate offset if one is present, it could be user supplied
-        // and different than what would be calculated.  That is, this is faster,
-        // but not just an optimization.
-        if (memberList[index].type->getQualifier().hasOffset())
-            return memberList[index].type->getQualifier().layoutOffset;
-
-        int memberSize;
-        int dummyStride;
+        int memberSize = 0;
         int offset = 0;
-        for (int m = 0; m <= index; ++m) {
-            // modify just the children's view of matrix layout, if there is one for this member
-            TLayoutMatrix subMatrixLayout = memberList[m].type->getQualifier().layoutMatrix;
-            int memberAlignment = intermediate.getMemberAlignment(*memberList[m].type, memberSize, dummyStride,
-                                                                  type.getQualifier().layoutPacking,
-                                                                  subMatrixLayout != ElmNone
-                                                                      ? subMatrixLayout == ElmRowMajor
-                                                                      : type.getQualifier().layoutMatrix == ElmRowMajor);
-            RoundToPow2(offset, memberAlignment);
-            if (m < index)
-                offset += memberSize;
-        }
+        for (size_t m = 0; m < offsets.size(); ++m) {
+            // if the user supplied an offset, snap to it now
+            if (memberList[m].type->getQualifier().hasOffset())
+                offset = memberList[m].type->getQualifier().layoutOffset;
 
-        return offset;
+            // calculate the offset of the next member and align the current offset to this member
+            intermediate.updateOffset(type, *memberList[m].type, offset, memberSize);
+
+            // save the offset of this member
+            offsets[m] = offset;
+
+            // update for the next member
+            offset += memberSize;
+        }
     }
 
-    // Calculate the block data size.
-    // Block arrayness is not taken into account, each element is backed by a separate buffer.
-    int getBlockSize(const TType& blockType)
+    // Calculate the stride of an array type
+    int getArrayStride(const TType& baseType, const TType& type)
     {
-        const TTypeList& memberList = *blockType.getStruct();
-        int lastIndex = (int)memberList.size() - 1;
-        int lastOffset = getOffset(blockType, lastIndex);
+        int dummySize;
+        int stride;
 
-        int lastMemberSize;
-        int dummyStride;
-        intermediate.getMemberAlignment(*memberList[lastIndex].type, lastMemberSize, dummyStride,
-                                        blockType.getQualifier().layoutPacking,
-                                        blockType.getQualifier().layoutMatrix == ElmRowMajor);
+        // consider blocks to have 0 stride, so that all offsets are relative to the start of their block
+        if (type.getBasicType() == EbtBlock)
+            return 0;
 
-        return lastOffset + lastMemberSize;
+        TLayoutMatrix subMatrixLayout = type.getQualifier().layoutMatrix;
+        intermediate.getMemberAlignment(type, dummySize, stride,
+                                        baseType.getQualifier().layoutPacking,
+                                        subMatrixLayout != ElmNone
+                                            ? subMatrixLayout == ElmRowMajor
+                                            : baseType.getQualifier().layoutMatrix == ElmRowMajor);
+
+        return stride;
+    }
+
+    // count the total number of leaf members from iterating out of a block type
+    int countAggregateMembers(const TType& parentType)
+    {
+        if (! parentType.isStruct())
+            return 1;
+
+        const bool strictArraySuffix = (reflection.options & EShReflectionStrictArraySuffix);
+
+        bool blockParent = (parentType.getBasicType() == EbtBlock && parentType.getQualifier().storage == EvqBuffer);
+
+        const TTypeList &memberList = *parentType.getStruct();
+
+        int ret = 0;
+
+        for (size_t i = 0; i < memberList.size(); i++)
+        {
+            const TType &memberType = *memberList[i].type;
+            int numMembers = countAggregateMembers(memberType);
+            // for sized arrays of structs, apply logic to expand out the same as we would below in
+            // blowUpActiveAggregate
+            if (memberType.isArray() && ! memberType.getArraySizes()->hasUnsized() && memberType.isStruct()) {
+                if (! strictArraySuffix || ! blockParent)
+                    numMembers *= memberType.getArraySizes()->getCumulativeSize();
+            }
+            ret += numMembers;
+        }
+
+        return ret;
     }
 
     // Traverse the provided deref chain, including the base, and
@@ -169,8 +232,19 @@
     // arraySize tracks, just for the final dereference in the chain, if there was a specific known size.
     // A value of 0 for arraySize will mean to use the full array's size.
     void blowUpActiveAggregate(const TType& baseType, const TString& baseName, const TList<TIntermBinary*>& derefs,
-                               TList<TIntermBinary*>::const_iterator deref, int offset, int blockIndex, int arraySize)
+                               TList<TIntermBinary*>::const_iterator deref, int offset, int blockIndex, int arraySize,
+                               int topLevelArrayStride, TStorageQualifier baseStorage, bool active)
     {
+        // when strictArraySuffix is enabled, we closely follow the rules from ARB_program_interface_query.
+        // Broadly:
+        // * arrays-of-structs always have a [x] suffix.
+        // * with array-of-struct variables in the root of a buffer block, only ever return [0].
+        // * otherwise, array suffixes are added whenever we iterate, even if that means expanding out an array.
+        const bool strictArraySuffix = (reflection.options & EShReflectionStrictArraySuffix);
+
+        // is this variable inside a buffer block. This flag is set back to false after we iterate inside the first array element.
+        bool blockParent = (baseType.getBasicType() == EbtBlock && baseType.getQualifier().storage == EvqBuffer);
+
         // process the part of the dereference chain that was explicit in the shader
         TString name = baseName;
         const TType* terminalType = &baseType;
@@ -179,29 +253,54 @@
             terminalType = &visitNode->getType();
             int index;
             switch (visitNode->getOp()) {
-            case EOpIndexIndirect:
+            case EOpIndexIndirect: {
+                int stride = getArrayStride(baseType, visitNode->getLeft()->getType());
+
+                if (topLevelArrayStride == 0)
+                    topLevelArrayStride = stride;
+
                 // Visit all the indices of this array, and for each one add on the remaining dereferencing
                 for (int i = 0; i < std::max(visitNode->getLeft()->getType().getOuterArraySize(), 1); ++i) {
                     TString newBaseName = name;
-                    if (baseType.getBasicType() != EbtBlock)
+                    if (strictArraySuffix && blockParent)
+                        newBaseName.append(TString("[0]"));
+                    else if (strictArraySuffix || baseType.getBasicType() != EbtBlock)
                         newBaseName.append(TString("[") + String(i) + "]");
                     TList<TIntermBinary*>::const_iterator nextDeref = deref;
                     ++nextDeref;
-                    TType derefType(*terminalType, 0);
-                    blowUpActiveAggregate(derefType, newBaseName, derefs, nextDeref, offset, blockIndex, arraySize);
+                    blowUpActiveAggregate(*terminalType, newBaseName, derefs, nextDeref, offset, blockIndex, arraySize,
+                                          topLevelArrayStride, baseStorage, active);
+
+                    if (offset >= 0)
+                        offset += stride;
                 }
 
                 // it was all completed in the recursive calls above
                 return;
-            case EOpIndexDirect:
+            }
+            case EOpIndexDirect: {
+                int stride = getArrayStride(baseType, visitNode->getLeft()->getType());
+
                 index = visitNode->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst();
-                if (baseType.getBasicType() != EbtBlock)
+                if (strictArraySuffix && blockParent) {
+                    name.append(TString("[0]"));
+                } else if (strictArraySuffix || baseType.getBasicType() != EbtBlock) {
                     name.append(TString("[") + String(index) + "]");
+
+                    if (offset >= 0)
+                        offset += stride * index;
+                }
+
+                if (topLevelArrayStride == 0)
+                    topLevelArrayStride = stride;
+
+                blockParent = false;
                 break;
+            }
             case EOpIndexDirectStruct:
                 index = visitNode->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst();
                 if (offset >= 0)
-                    offset += getOffset(visitNode->getLeft()->getType(), index);
+                    offset += intermediate.getOffset(visitNode->getLeft()->getType(), index);
                 if (name.size() > 0)
                     name.append(".");
                 name.append((*visitNode->getLeft()->getType().getStruct())[index].type->getFieldName());
@@ -213,24 +312,65 @@
 
         // if the terminalType is still too coarse a granularity, this is still an aggregate to expand, expand it...
         if (! isReflectionGranularity(*terminalType)) {
+            // the base offset of this node, that children are relative to
+            int baseOffset = offset;
+
             if (terminalType->isArray()) {
                 // Visit all the indices of this array, and for each one,
                 // fully explode the remaining aggregate to dereference
-                for (int i = 0; i < std::max(terminalType->getOuterArraySize(), 1); ++i) {
+
+                int stride = 0;
+                if (offset >= 0)
+                    stride = getArrayStride(baseType, *terminalType);
+
+                if (topLevelArrayStride == 0)
+                    topLevelArrayStride = stride;
+
+                int arrayIterateSize = std::max(terminalType->getOuterArraySize(), 1);
+
+                // for top-level arrays in blocks, only expand [0] to avoid explosion of items
+                if (strictArraySuffix && blockParent)
+                    arrayIterateSize = 1;
+
+                for (int i = 0; i < arrayIterateSize; ++i) {
                     TString newBaseName = name;
                     newBaseName.append(TString("[") + String(i) + "]");
                     TType derefType(*terminalType, 0);
-                    blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), offset, blockIndex, 0);
+                    if (offset >= 0)
+                        offset = baseOffset + stride * i;
+
+                    blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), offset, blockIndex, 0,
+                                          topLevelArrayStride, baseStorage, active);
                 }
             } else {
                 // Visit all members of this aggregate, and for each one,
                 // fully explode the remaining aggregate to dereference
                 const TTypeList& typeList = *terminalType->getStruct();
+
+                TVector<int> memberOffsets;
+
+                if (baseOffset >= 0) {
+                    memberOffsets.resize(typeList.size());
+                    getOffsets(*terminalType, memberOffsets);
+                }
+
                 for (int i = 0; i < (int)typeList.size(); ++i) {
                     TString newBaseName = name;
-                    newBaseName.append(TString(".") + typeList[i].type->getFieldName());
+                    if (newBaseName.size() > 0)
+                        newBaseName.append(".");
+                    newBaseName.append(typeList[i].type->getFieldName());
                     TType derefType(*terminalType, i);
-                    blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), offset, blockIndex, 0);
+                    if (offset >= 0)
+                        offset = baseOffset + memberOffsets[i];
+
+                    int arrayStride = topLevelArrayStride;
+                    if (terminalType->getBasicType() == EbtBlock && terminalType->getQualifier().storage == EvqBuffer &&
+                        derefType.isArray()) {
+                        arrayStride = getArrayStride(baseType, derefType);
+                    }
+
+                    blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), offset, blockIndex, 0,
+                                          arrayStride, baseStorage, active);
                 }
             }
 
@@ -238,6 +378,10 @@
             return;
         }
 
+        if ((reflection.options & EShReflectionBasicArraySuffix) && terminalType->isArray()) {
+            name.append(TString("[0]"));
+        }
+
         // Finally, add a full string to the reflection database, and update the array size if necessary.
         // If the dereferenced entity to record is an array, compute the size and update the maximum size.
 
@@ -245,15 +389,100 @@
         if (arraySize == 0)
             arraySize = mapToGlArraySize(*terminalType);
 
-        TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name);
+        TReflection::TMapIndexToReflection& variables = reflection.GetVariableMapForStorage(baseStorage);
+
+        TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name.c_str());
         if (it == reflection.nameToIndex.end()) {
-            reflection.nameToIndex[name] = (int)reflection.indexToUniform.size();
-            reflection.indexToUniform.push_back(TObjectReflection(name, *terminalType, offset,
-                                                                  mapToGlType(*terminalType),
-                                                                  arraySize, blockIndex));
-        } else if (arraySize > 1) {
-            int& reflectedArraySize = reflection.indexToUniform[it->second].size;
-            reflectedArraySize = std::max(arraySize, reflectedArraySize);
+            int uniformIndex = (int)variables.size();
+            reflection.nameToIndex[name.c_str()] = uniformIndex;
+            variables.push_back(TObjectReflection(name.c_str(), *terminalType, offset, mapToGlType(*terminalType),
+                                                  arraySize, blockIndex));
+            if (terminalType->isArray()) {
+                variables.back().arrayStride = getArrayStride(baseType, *terminalType);
+                if (topLevelArrayStride == 0)
+                    topLevelArrayStride = variables.back().arrayStride;
+            }
+
+            if ((reflection.options & EShReflectionSeparateBuffers) && terminalType->isAtomic())
+                reflection.atomicCounterUniformIndices.push_back(uniformIndex);
+
+            variables.back().topLevelArrayStride = topLevelArrayStride;
+            
+            if ((reflection.options & EShReflectionAllBlockVariables) && active) {
+                EShLanguageMask& stages = variables.back().stages;
+                stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
+            }
+        } else {
+            if (arraySize > 1) {
+                int& reflectedArraySize = variables[it->second].size;
+                reflectedArraySize = std::max(arraySize, reflectedArraySize);
+            }
+
+            if ((reflection.options & EShReflectionAllBlockVariables) && active) {
+              EShLanguageMask& stages = variables[it->second].stages;
+              stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
+            }
+        }
+    }
+    
+    // similar to blowUpActiveAggregate, but with simpler rules and no dereferences to follow.
+    void blowUpIOAggregate(bool input, const TString &baseName, const TType &type)
+    {
+        TString name = baseName;
+
+        // if the type is still too coarse a granularity, this is still an aggregate to expand, expand it...
+        if (! isReflectionGranularity(type)) {
+            if (type.isArray()) {
+                // Visit all the indices of this array, and for each one,
+                // fully explode the remaining aggregate to dereference
+                for (int i = 0; i < std::max(type.getOuterArraySize(), 1); ++i) {
+                    TString newBaseName = name;
+                    newBaseName.append(TString("[") + String(i) + "]");
+                    TType derefType(type, 0);
+
+                    blowUpIOAggregate(input, newBaseName, derefType);
+                }
+            } else {
+                // Visit all members of this aggregate, and for each one,
+                // fully explode the remaining aggregate to dereference
+                const TTypeList& typeList = *type.getStruct();
+
+                for (int i = 0; i < (int)typeList.size(); ++i) {
+                    TString newBaseName = name;
+                    if (newBaseName.size() > 0)
+                        newBaseName.append(".");
+                    newBaseName.append(typeList[i].type->getFieldName());
+                    TType derefType(type, i);
+
+                    blowUpIOAggregate(input, newBaseName, derefType);
+                }
+            }
+
+            // it was all completed in the recursive calls above
+            return;
+        }
+
+        if ((reflection.options & EShReflectionBasicArraySuffix) && type.isArray()) {
+            name.append(TString("[0]"));
+        }
+
+        TReflection::TMapIndexToReflection &ioItems =
+            input ? reflection.indexToPipeInput : reflection.indexToPipeOutput;
+
+        std::string namespacedName = input ? "in " : "out ";
+        namespacedName += name.c_str();
+
+        TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(namespacedName);
+        if (it == reflection.nameToIndex.end()) {
+            reflection.nameToIndex[namespacedName] = (int)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 {
+            EShLanguageMask& stages = ioItems[it->second].stages;
+            stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
         }
     }
 
@@ -303,6 +532,10 @@
             anonymous = IsAnonymous(base->getName());
 
             const TString& blockName = base->getType().getTypeName();
+            TString baseName;
+            
+            if (! anonymous)
+                baseName = blockName;
 
             if (base->getType().isArray()) {
                 TType derefType(base->getType(), 0);
@@ -310,9 +543,60 @@
                 assert(! anonymous);
                 for (int e = 0; e < base->getType().getCumulativeArraySize(); ++e)
                     blockIndex = addBlockName(blockName + "[" + String(e) + "]", derefType,
-                                              getBlockSize(base->getType()));
+                                              intermediate.getBlockSize(base->getType()));
+                baseName.append(TString("[0]"));
             } else
-                blockIndex = addBlockName(blockName, base->getType(), getBlockSize(base->getType()));
+                blockIndex = addBlockName(blockName, base->getType(), intermediate.getBlockSize(base->getType()));
+
+            if (reflection.options & EShReflectionAllBlockVariables) {
+                // Use a degenerate (empty) set of dereferences to immediately put as at the end of
+                // the dereference change expected by blowUpActiveAggregate.
+                TList<TIntermBinary*> derefs;
+
+                // because we don't have any derefs, the first thing blowUpActiveAggregate will do is iterate over each
+                // member in the struct definition. This will lose any information about whether the parent was a buffer
+                // block. So if we're using strict array rules which don't expand the first child of a buffer block we
+                // instead iterate over the children here.
+                const bool strictArraySuffix = (reflection.options & EShReflectionStrictArraySuffix);
+                bool blockParent = (base->getType().getBasicType() == EbtBlock && base->getQualifier().storage == EvqBuffer);
+
+                if (strictArraySuffix && blockParent) {
+                    TType structDerefType(base->getType(), 0);
+
+                    const TType &structType = base->getType().isArray() ? structDerefType : base->getType();
+                    const TTypeList& typeList = *structType.getStruct();
+
+                    TVector<int> memberOffsets;
+
+                    memberOffsets.resize(typeList.size());
+                    getOffsets(structType, memberOffsets);
+
+                    for (int i = 0; i < (int)typeList.size(); ++i) {
+                        TType derefType(structType, i);
+                        TString name = baseName;
+                        if (name.size() > 0)
+                            name.append(".");
+                        name.append(typeList[i].type->getFieldName());
+
+                        // if this member is an array, store the top-level array stride but start the explosion from
+                        // the inner struct type.
+                        if (derefType.isArray() && derefType.isStruct()) {
+                            name.append("[0]");
+                            blowUpActiveAggregate(TType(derefType, 0), name, derefs, derefs.end(), memberOffsets[i],
+                                                  blockIndex, 0, getArrayStride(structType, derefType),
+                                                  base->getQualifier().storage, false);
+                        } else {
+                            blowUpActiveAggregate(derefType, name, derefs, derefs.end(), memberOffsets[i], blockIndex,
+                                                  0, 0, base->getQualifier().storage, false);
+                        }
+                    }
+                } else {
+                    // otherwise - if we're not using strict array suffix rules, or this isn't a block so we are
+                    // expanding root arrays anyway, just start the iteration from the base block type.
+                    blowUpActiveAggregate(base->getType(), baseName, derefs, derefs.end(), 0, blockIndex, 0, 0,
+                                          base->getQualifier().storage, false);
+                }
+            }
         }
 
         // Process the dereference chain, backward, accumulating the pieces for later forward traversal.
@@ -342,27 +626,39 @@
             else
                 baseName = base->getName();
         }
-        blowUpActiveAggregate(base->getType(), baseName, derefs, derefs.begin(), offset, blockIndex, arraySize);
+        blowUpActiveAggregate(base->getType(), baseName, derefs, derefs.begin(), offset, blockIndex, arraySize, 0,
+                              base->getQualifier().storage, true);
     }
 
     int addBlockName(const TString& name, const TType& type, int size)
     {
+        TReflection::TMapIndexToReflection& blocks = reflection.GetBlockMapForStorage(type.getQualifier().storage);
+
         int blockIndex;
-        TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name);
-        if (reflection.nameToIndex.find(name) == reflection.nameToIndex.end()) {
-            blockIndex = (int)reflection.indexToUniformBlock.size();
-            reflection.nameToIndex[name] = blockIndex;
-            reflection.indexToUniformBlock.push_back(TObjectReflection(name, type, -1, -1, size, -1));
-        } else
+        TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name.c_str());
+        if (reflection.nameToIndex.find(name.c_str()) == reflection.nameToIndex.end()) {
+            blockIndex = (int)blocks.size();
+            reflection.nameToIndex[name.c_str()] = blockIndex;
+            blocks.push_back(TObjectReflection(name.c_str(), type, -1, -1, size, -1));
+
+            blocks.back().numMembers = countAggregateMembers(type);
+
+            EShLanguageMask& stages = blocks.back().stages;
+            stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
+        } else {
             blockIndex = it->second;
 
+            EShLanguageMask& stages = blocks[blockIndex].stages;
+            stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
+        }
+
         return blockIndex;
     }
 
     // Are we at a level in a dereference chain at which individual active uniform queries are made?
     bool isReflectionGranularity(const TType& type)
     {
-        return type.getBasicType() != EbtBlock && type.getBasicType() != EbtStruct;
+        return type.getBasicType() != EbtBlock && type.getBasicType() != EbtStruct && !type.isArrayOfArrays();
     }
 
     // For a binary operation indexing into an aggregate, chase down the base of the aggregate.
@@ -415,7 +711,6 @@
                 case EsdBuffer:
                     return GL_SAMPLER_BUFFER;
                 }
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
                 switch ((int)sampler.dim) {
                 case Esd1D:
@@ -444,7 +739,6 @@
                 case EsdBuffer:
                     return GL_FLOAT16_SAMPLER_BUFFER_AMD;
                 }
-#endif
             case EbtInt:
                 switch ((int)sampler.dim) {
                 case Esd1D:
@@ -507,7 +801,6 @@
                 case EsdBuffer:
                     return GL_IMAGE_BUFFER;
                 }
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
                 switch ((int)sampler.dim) {
                 case Esd1D:
@@ -526,7 +819,6 @@
                 case EsdBuffer:
                     return GL_FLOAT16_IMAGE_BUFFER_AMD;
                 }
-#endif
             case EbtInt:
                 switch ((int)sampler.dim) {
                 case Esd1D:
@@ -592,9 +884,7 @@
             switch (type.getBasicType()) {
             case EbtFloat:      return GL_FLOAT_VEC2                  + offset;
             case EbtDouble:     return GL_DOUBLE_VEC2                 + offset;
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:    return GL_FLOAT16_VEC2_NV             + offset;
-#endif
             case EbtInt:        return GL_INT_VEC2                    + offset;
             case EbtUint:       return GL_UNSIGNED_INT_VEC2           + offset;
             case EbtInt64:      return GL_INT64_ARB                   + offset;
@@ -654,7 +944,6 @@
                     default:   return 0;
                     }
                 }
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
                 switch (type.getMatrixCols()) {
                 case 2:
@@ -679,7 +968,6 @@
                     default:   return 0;
                     }
                 }
-#endif
             default:
                 return 0;
             }
@@ -688,9 +976,7 @@
             switch (type.getBasicType()) {
             case EbtFloat:      return GL_FLOAT;
             case EbtDouble:     return GL_DOUBLE;
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:    return GL_FLOAT16_NV;
-#endif
             case EbtInt:        return GL_INT;
             case EbtUint:       return GL_UNSIGNED_INT;
             case EbtInt64:      return GL_INT64_ARB;
@@ -746,8 +1032,47 @@
     if (base->getQualifier().storage == EvqUniform)
         addUniform(*base);
 
-    if (intermediate.getStage() == EShLangVertex && base->getQualifier().isPipeInput())
-        addAttribute(*base);
+    if ((intermediate.getStage() == reflection.firstStage && base->getQualifier().isPipeInput()) ||
+        (intermediate.getStage() == reflection.lastStage && base->getQualifier().isPipeOutput()))
+        addPipeIOVariable(*base);
+}
+
+//
+// Implement TObjectReflection methods.
+//
+
+TObjectReflection::TObjectReflection(const std::string &pName, const TType &pType, int pOffset, int pGLDefineType,
+                                     int pSize, int pIndex)
+    : name(pName), offset(pOffset), glDefineType(pGLDefineType), size(pSize), index(pIndex), counterIndex(-1),
+      numMembers(-1), arrayStride(0), topLevelArrayStride(0), stages(EShLanguageMask(0)), type(pType.clone())
+{
+}
+
+int TObjectReflection::getBinding() const
+{
+    if (type == nullptr || !type->getQualifier().hasBinding())
+        return -1;
+    return type->getQualifier().layoutBinding;
+}
+
+void TObjectReflection::dump() const
+{
+    printf("%s: offset %d, type %x, size %d, index %d, binding %d, stages %d", name.c_str(), offset, glDefineType, size,
+           index, getBinding(), stages);
+
+    if (counterIndex != -1)
+        printf(", counter %d", counterIndex);
+
+    if (numMembers != -1)
+        printf(", numMembers %d", numMembers);
+
+    if (arrayStride != 0)
+        printf(", arrayStride %d", arrayStride);
+
+    if (topLevelArrayStride != 0)
+        printf(", topLevelArrayStride %d", topLevelArrayStride);
+
+    printf("\n");
 }
 
 //
@@ -768,22 +1093,32 @@
 // build counter block index associations for buffers
 void TReflection::buildCounterIndices(const TIntermediate& intermediate)
 {
+#ifdef ENABLE_HLSL
     // search for ones that have counters
     for (int i = 0; i < int(indexToUniformBlock.size()); ++i) {
-        const TString counterName(intermediate.addCounterBufferName(indexToUniformBlock[i].name));
+        const TString counterName(intermediate.addCounterBufferName(indexToUniformBlock[i].name).c_str());
         const int index = getIndex(counterName);
 
         if (index >= 0)
             indexToUniformBlock[i].counterIndex = index;
     }
+#endif
 }
 
 // build Shader Stages mask for all uniforms
 void TReflection::buildUniformStageMask(const TIntermediate& intermediate)
 {
+    if (options & EShReflectionAllBlockVariables)
+        return;
+
     for (int i = 0; i < int(indexToUniform.size()); ++i) {
         indexToUniform[i].stages = static_cast<EShLanguageMask>(indexToUniform[i].stages | 1 << intermediate.getStage());
     }
+
+    for (int i = 0; i < int(indexToBufferVariable.size()); ++i) {
+        indexToBufferVariable[i].stages =
+            static_cast<EShLanguageMask>(indexToBufferVariable[i].stages | 1 << intermediate.getStage());
+    }
 }
 
 // Merge live symbols from 'intermediate' into the existing reflection database.
@@ -828,9 +1163,24 @@
         indexToUniformBlock[i].dump();
     printf("\n");
 
-    printf("Vertex attribute reflection:\n");
-    for (size_t i = 0; i < indexToAttribute.size(); ++i)
-        indexToAttribute[i].dump();
+    printf("Buffer variable reflection:\n");
+    for (size_t i = 0; i < indexToBufferVariable.size(); ++i)
+      indexToBufferVariable[i].dump();
+    printf("\n");
+
+    printf("Buffer block reflection:\n");
+    for (size_t i = 0; i < indexToBufferBlock.size(); ++i)
+      indexToBufferBlock[i].dump();
+    printf("\n");
+
+    printf("Pipeline input reflection:\n");
+    for (size_t i = 0; i < indexToPipeInput.size(); ++i)
+        indexToPipeInput[i].dump();
+    printf("\n");
+
+    printf("Pipeline output reflection:\n");
+    for (size_t i = 0; i < indexToPipeOutput.size(); ++i)
+        indexToPipeOutput[i].dump();
     printf("\n");
 
     if (getLocalSize(0) > 1) {
@@ -838,7 +1188,7 @@
 
         for (int dim=0; dim<3; ++dim)
             if (getLocalSize(dim) > 1)
-                printf("Local size %s: %d\n", axis[dim], getLocalSize(dim));
+                printf("Local size %s: %u\n", axis[dim], getLocalSize(dim));
 
         printf("\n");
     }
@@ -850,3 +1200,5 @@
 }
 
 } // end namespace glslang
+
+#endif // GLSLANG_WEB
diff --git a/glslang/MachineIndependent/reflection.h b/glslang/MachineIndependent/reflection.h
index 49282c3..0c33de4 100644
--- a/glslang/MachineIndependent/reflection.h
+++ b/glslang/MachineIndependent/reflection.h
@@ -33,6 +33,8 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
+#ifndef GLSLANG_WEB
+
 #ifndef _REFLECTION_INCLUDED
 #define _REFLECTION_INCLUDED
 
@@ -52,50 +54,11 @@
 class TIntermAggregate;
 class TReflectionTraverser;
 
-// Data needed for just a single object at the granularity exchanged by the reflection API
-class TObjectReflection {
-public:
-    TObjectReflection(const TString& pName, const TType& pType, int pOffset, int pGLDefineType, int pSize, int pIndex) :
-        name(pName), offset(pOffset),
-        glDefineType(pGLDefineType), size(pSize), index(pIndex), counterIndex(-1), stages(EShLanguageMask(0)), type(pType.clone()) { }
-
-    const TType* getType() const { return type; }
-    int getBinding() const
-    {
-        if (type == nullptr || !type->getQualifier().hasBinding())
-            return -1;
-        return type->getQualifier().layoutBinding;
-    }
-    void dump() const
-    {
-        printf("%s: offset %d, type %x, size %d, index %d, binding %d, stages %d",
-               name.c_str(), offset, glDefineType, size, index, getBinding(), stages );
-
-        if (counterIndex != -1)
-            printf(", counter %d", counterIndex);
-
-        printf("\n");
-    }
-    static TObjectReflection badReflection() { return TObjectReflection(); }
-
-    TString name;
-    int offset;
-    int glDefineType;
-    int size;         // data size in bytes for a block, array size for a (non-block) object that's an array
-    int index;
-    int counterIndex;
-    EShLanguageMask stages;
-
-protected:
-    TObjectReflection() : offset(-1), glDefineType(-1), size(-1), index(-1), type(nullptr) { }
-
-    const TType* type;
-};
-
 // The full reflection database
 class TReflection {
 public:
-    TReflection() : badReflection(TObjectReflection::badReflection())
+    TReflection(EShReflectionOptions opts, EShLanguage first, EShLanguage last)
+        : options(opts), firstStage(first), lastStage(last), badReflection(TObjectReflection::badReflection())
     { 
         for (int dim=0; dim<3; ++dim)
             localSize[dim] = 0;
@@ -126,17 +89,57 @@
             return badReflection;
     }
 
-    // for mapping an attribute index to the attribute's description
-    int getNumAttributes() { return (int)indexToAttribute.size(); }
-    const TObjectReflection& getAttribute(int i) const
+    // for mapping an pipeline input index to the input's description
+    int getNumPipeInputs() { return (int)indexToPipeInput.size(); }
+    const TObjectReflection& getPipeInput(int i) const
     {
-        if (i >= 0 && i < (int)indexToAttribute.size())
-            return indexToAttribute[i];
+        if (i >= 0 && i < (int)indexToPipeInput.size())
+            return indexToPipeInput[i];
         else
             return badReflection;
     }
 
-    // for mapping any name to its index (block names, uniform names and attribute names)
+    // for mapping an pipeline output index to the output's description
+    int getNumPipeOutputs() { return (int)indexToPipeOutput.size(); }
+    const TObjectReflection& getPipeOutput(int i) const
+    {
+        if (i >= 0 && i < (int)indexToPipeOutput.size())
+            return indexToPipeOutput[i];
+        else
+            return badReflection;
+    }
+
+    // for mapping from an atomic counter to the uniform index
+    int getNumAtomicCounters() const { return (int)atomicCounterUniformIndices.size(); }
+    const TObjectReflection& getAtomicCounter(int i) const
+    {
+        if (i >= 0 && i < (int)atomicCounterUniformIndices.size())
+            return getUniform(atomicCounterUniformIndices[i]);
+        else
+            return badReflection;
+    }
+
+    // for mapping a buffer variable index to a buffer variable object's description
+    int getNumBufferVariables() { return (int)indexToBufferVariable.size(); }
+    const TObjectReflection& getBufferVariable(int i) const
+    {
+        if (i >= 0 && i < (int)indexToBufferVariable.size())
+            return indexToBufferVariable[i];
+        else
+            return badReflection;
+    }
+    
+    // for mapping a storage block index to the storage block's description
+    int getNumStorageBuffers() const { return (int)indexToBufferBlock.size(); }
+    const TObjectReflection&  getStorageBufferBlock(int i) const
+    {
+        if (i >= 0 && i < (int)indexToBufferBlock.size())
+            return indexToBufferBlock[i];
+        else
+            return badReflection;
+    }
+
+    // for mapping any name to its index (block names, uniform names and input/output names)
     int getIndex(const char* name) const
     {
         TNameToIndex::const_iterator it = nameToIndex.find(name);
@@ -149,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; }
 
@@ -162,14 +179,39 @@
     void buildAttributeReflection(EShLanguage, const TIntermediate&);
 
     // Need a TString hash: typedef std::unordered_map<TString, int> TNameToIndex;
-    typedef std::map<TString, int> TNameToIndex;
+    typedef std::map<std::string, int> TNameToIndex;
     typedef std::vector<TObjectReflection> TMapIndexToReflection;
+    typedef std::vector<int> TIndices;
+
+    TMapIndexToReflection& GetBlockMapForStorage(TStorageQualifier storage)
+    {
+        if ((options & EShReflectionSeparateBuffers) && storage == EvqBuffer)
+            return indexToBufferBlock;
+        return indexToUniformBlock;
+    }
+    TMapIndexToReflection& GetVariableMapForStorage(TStorageQualifier storage)
+    {
+        if ((options & EShReflectionSeparateBuffers) && storage == EvqBuffer)
+            return indexToBufferVariable;
+        return indexToUniform;
+    }
+
+    EShReflectionOptions options;
+
+    EShLanguage firstStage;
+    EShLanguage lastStage;
 
     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 indexToAttribute;
+    TMapIndexToReflection indexToBufferVariable;
+    TMapIndexToReflection indexToBufferBlock;
+    TMapIndexToReflection indexToPipeInput;
+    TMapIndexToReflection indexToPipeOutput;
+    TIndices atomicCounterUniformIndices;
 
     unsigned int localSize[3];
 };
@@ -177,3 +219,5 @@
 } // end namespace glslang
 
 #endif // _REFLECTION_INCLUDED
+
+#endif // GLSLANG_WEB
diff --git a/glslang/OSDependent/Unix/CMakeLists.txt b/glslang/OSDependent/Unix/CMakeLists.txt
index e652f45..9994314 100644
--- a/glslang/OSDependent/Unix/CMakeLists.txt
+++ b/glslang/OSDependent/Unix/CMakeLists.txt
@@ -20,6 +20,7 @@
 endif()
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS OSDependent
+    install(TARGETS OSDependent EXPORT OSDependentTargets
             ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+	install(EXPORT OSDependentTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/glslang/OSDependent/Unix/ossource.cpp b/glslang/OSDependent/Unix/ossource.cpp
index f59bbce..3f029f0 100644
--- a/glslang/OSDependent/Unix/ossource.cpp
+++ b/glslang/OSDependent/Unix/ossource.cpp
@@ -45,7 +45,10 @@
 #include <stdint.h>
 #include <cstdio>
 #include <sys/time.h>
+
+#if !defined(__Fuchsia__)
 #include <sys/resource.h>
+#endif
 
 namespace glslang {
 
@@ -70,7 +73,7 @@
 //
 void OS_CleanupThreadData(void)
 {
-#ifdef __ANDROID__
+#if defined(__ANDROID__) || defined(__Fuchsia__)
     DetachThreadLinux(NULL);
 #else
     int old_cancel_state, old_cancel_type;
diff --git a/glslang/OSDependent/Web/CMakeLists.txt b/glslang/OSDependent/Web/CMakeLists.txt
new file mode 100644
index 0000000..697b0b7
--- /dev/null
+++ b/glslang/OSDependent/Web/CMakeLists.txt
@@ -0,0 +1,38 @@
+if(ENABLE_GLSLANG_JS)
+    add_executable(glslang.js "glslang.js.cpp")
+    glslang_set_link_args(glslang.js)
+    target_link_libraries(glslang.js glslang SPIRV)
+
+    # Link library names that start with "-" are treated as link flags.
+    # "-Os" should be OK in MSVC; don't use /Os because CMake won't
+    # treat it as a link flag.
+    target_link_libraries(glslang.js "-Os")
+
+    if(EMSCRIPTEN)
+        set_target_properties(glslang.js PROPERTIES
+            OUTPUT_NAME "glslang"
+            SUFFIX ".js")
+        em_link_pre_js(glslang.js "${CMAKE_CURRENT_SOURCE_DIR}/glslang.pre.js")
+
+        target_link_libraries(glslang.js "--llvm-lto 1")
+        target_link_libraries(glslang.js "--closure 1")
+        target_link_libraries(glslang.js "-s MODULARIZE=1")
+        target_link_libraries(glslang.js "-s ALLOW_MEMORY_GROWTH=1")
+        target_link_libraries(glslang.js "-s FILESYSTEM=0")
+
+        if(ENABLE_EMSCRIPTEN_SINGLE_FILE)
+            target_link_libraries(glslang.js "-s SINGLE_FILE=1")
+        endif(ENABLE_EMSCRIPTEN_SINGLE_FILE)
+
+        if(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)
+            target_link_libraries(glslang.js "-s ENVIRONMENT=node -s BINARYEN_ASYNC_COMPILATION=0")
+        else()
+            target_link_libraries(glslang.js "-s ENVIRONMENT=web,worker")
+        endif()
+
+        if(NOT ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)
+            add_custom_command(TARGET glslang.js POST_BUILD
+                COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/glslang.after.js >> ${CMAKE_CURRENT_BINARY_DIR}/glslang.js)
+        endif()
+    endif(EMSCRIPTEN)
+endif(ENABLE_GLSLANG_JS)
diff --git a/glslang/OSDependent/Web/glslang.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/OSDependent/Web/glslang.js.cpp b/glslang/OSDependent/Web/glslang.js.cpp
new file mode 100644
index 0000000..854d293
--- /dev/null
+++ b/glslang/OSDependent/Web/glslang.js.cpp
@@ -0,0 +1,286 @@
+//
+// Copyright (C) 2019 Google, Inc.
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//    Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+//    Redistributions in binary form must reproduce the above
+//    copyright notice, this list of conditions and the following
+//    disclaimer in the documentation and/or other materials provided
+//    with the distribution.
+//
+//    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
+//    contributors may be used to endorse or promote products derived
+//    from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+
+#include <cstdio>
+#include <cstdint>
+#include <memory>
+
+#ifdef __EMSCRIPTEN__
+#include <emscripten.h>
+#endif
+
+#include "../../../SPIRV/GlslangToSpv.h"
+#include "../../../glslang/Public/ShaderLang.h"
+
+#ifndef __EMSCRIPTEN__
+#define EMSCRIPTEN_KEEPALIVE
+#endif
+
+const TBuiltInResource DefaultTBuiltInResource = {
+    /* .MaxLights = */ 32,
+    /* .MaxClipPlanes = */ 6,
+    /* .MaxTextureUnits = */ 32,
+    /* .MaxTextureCoords = */ 32,
+    /* .MaxVertexAttribs = */ 64,
+    /* .MaxVertexUniformComponents = */ 4096,
+    /* .MaxVaryingFloats = */ 64,
+    /* .MaxVertexTextureImageUnits = */ 32,
+    /* .MaxCombinedTextureImageUnits = */ 80,
+    /* .MaxTextureImageUnits = */ 32,
+    /* .MaxFragmentUniformComponents = */ 4096,
+    /* .MaxDrawBuffers = */ 32,
+    /* .MaxVertexUniformVectors = */ 128,
+    /* .MaxVaryingVectors = */ 8,
+    /* .MaxFragmentUniformVectors = */ 16,
+    /* .MaxVertexOutputVectors = */ 16,
+    /* .MaxFragmentInputVectors = */ 15,
+    /* .MinProgramTexelOffset = */ -8,
+    /* .MaxProgramTexelOffset = */ 7,
+    /* .MaxClipDistances = */ 8,
+    /* .MaxComputeWorkGroupCountX = */ 65535,
+    /* .MaxComputeWorkGroupCountY = */ 65535,
+    /* .MaxComputeWorkGroupCountZ = */ 65535,
+    /* .MaxComputeWorkGroupSizeX = */ 1024,
+    /* .MaxComputeWorkGroupSizeY = */ 1024,
+    /* .MaxComputeWorkGroupSizeZ = */ 64,
+    /* .MaxComputeUniformComponents = */ 1024,
+    /* .MaxComputeTextureImageUnits = */ 16,
+    /* .MaxComputeImageUniforms = */ 8,
+    /* .MaxComputeAtomicCounters = */ 8,
+    /* .MaxComputeAtomicCounterBuffers = */ 1,
+    /* .MaxVaryingComponents = */ 60,
+    /* .MaxVertexOutputComponents = */ 64,
+    /* .MaxGeometryInputComponents = */ 64,
+    /* .MaxGeometryOutputComponents = */ 128,
+    /* .MaxFragmentInputComponents = */ 128,
+    /* .MaxImageUnits = */ 8,
+    /* .MaxCombinedImageUnitsAndFragmentOutputs = */ 8,
+    /* .MaxCombinedShaderOutputResources = */ 8,
+    /* .MaxImageSamples = */ 0,
+    /* .MaxVertexImageUniforms = */ 0,
+    /* .MaxTessControlImageUniforms = */ 0,
+    /* .MaxTessEvaluationImageUniforms = */ 0,
+    /* .MaxGeometryImageUniforms = */ 0,
+    /* .MaxFragmentImageUniforms = */ 8,
+    /* .MaxCombinedImageUniforms = */ 8,
+    /* .MaxGeometryTextureImageUnits = */ 16,
+    /* .MaxGeometryOutputVertices = */ 256,
+    /* .MaxGeometryTotalOutputComponents = */ 1024,
+    /* .MaxGeometryUniformComponents = */ 1024,
+    /* .MaxGeometryVaryingComponents = */ 64,
+    /* .MaxTessControlInputComponents = */ 128,
+    /* .MaxTessControlOutputComponents = */ 128,
+    /* .MaxTessControlTextureImageUnits = */ 16,
+    /* .MaxTessControlUniformComponents = */ 1024,
+    /* .MaxTessControlTotalOutputComponents = */ 4096,
+    /* .MaxTessEvaluationInputComponents = */ 128,
+    /* .MaxTessEvaluationOutputComponents = */ 128,
+    /* .MaxTessEvaluationTextureImageUnits = */ 16,
+    /* .MaxTessEvaluationUniformComponents = */ 1024,
+    /* .MaxTessPatchComponents = */ 120,
+    /* .MaxPatchVertices = */ 32,
+    /* .MaxTessGenLevel = */ 64,
+    /* .MaxViewports = */ 16,
+    /* .MaxVertexAtomicCounters = */ 0,
+    /* .MaxTessControlAtomicCounters = */ 0,
+    /* .MaxTessEvaluationAtomicCounters = */ 0,
+    /* .MaxGeometryAtomicCounters = */ 0,
+    /* .MaxFragmentAtomicCounters = */ 8,
+    /* .MaxCombinedAtomicCounters = */ 8,
+    /* .MaxAtomicCounterBindings = */ 1,
+    /* .MaxVertexAtomicCounterBuffers = */ 0,
+    /* .MaxTessControlAtomicCounterBuffers = */ 0,
+    /* .MaxTessEvaluationAtomicCounterBuffers = */ 0,
+    /* .MaxGeometryAtomicCounterBuffers = */ 0,
+    /* .MaxFragmentAtomicCounterBuffers = */ 1,
+    /* .MaxCombinedAtomicCounterBuffers = */ 1,
+    /* .MaxAtomicCounterBufferSize = */ 16384,
+    /* .MaxTransformFeedbackBuffers = */ 4,
+    /* .MaxTransformFeedbackInterleavedComponents = */ 64,
+    /* .MaxCullDistances = */ 8,
+    /* .MaxCombinedClipAndCullDistances = */ 8,
+    /* .MaxSamples = */ 4,
+    /* .maxMeshOutputVerticesNV = */ 256,
+    /* .maxMeshOutputPrimitivesNV = */ 512,
+    /* .maxMeshWorkGroupSizeX_NV = */ 32,
+    /* .maxMeshWorkGroupSizeY_NV = */ 1,
+    /* .maxMeshWorkGroupSizeZ_NV = */ 1,
+    /* .maxTaskWorkGroupSizeX_NV = */ 32,
+    /* .maxTaskWorkGroupSizeY_NV = */ 1,
+    /* .maxTaskWorkGroupSizeZ_NV = */ 1,
+    /* .maxMeshViewCountNV = */ 4,
+
+    /* .limits = */ {
+        /* .nonInductiveForLoops = */ 1,
+        /* .whileLoops = */ 1,
+        /* .doWhileLoops = */ 1,
+        /* .generalUniformIndexing = */ 1,
+        /* .generalAttributeMatrixVectorIndexing = */ 1,
+        /* .generalVaryingIndexing = */ 1,
+        /* .generalSamplerIndexing = */ 1,
+        /* .generalVariableIndexing = */ 1,
+        /* .generalConstantMatrixVectorIndexing = */ 1,
+    }};
+
+static bool initialized = false;
+
+extern "C" {
+
+/*
+ * Takes in a GLSL shader as a string and converts it to SPIR-V in binary form.
+ *
+ * |glsl|          Null-terminated string containing the shader to be converted.
+ * |stage_int|     Magic number indicating the type of shader being processed.
+*                  Legal values are as follows:
+ *                   Vertex = 0
+ *                   Fragment = 4
+ *                   Compute = 5
+ * |gen_debug|     Flag to indicate if debug information should be generated.
+ * |spirv|         Output parameter for a pointer to the resulting SPIR-V data.
+ * |spirv_len|     Output parameter for the length of the output binary buffer.
+ *
+ * Returns a void* pointer which, if not null, must be destroyed by
+ * destroy_output_buffer.o. (This is not the same pointer returned in |spirv|.)
+ * If null, the compilation failed.
+ */
+EMSCRIPTEN_KEEPALIVE
+void* convert_glsl_to_spirv(const char* glsl,
+                            int stage_int,
+                            bool gen_debug,
+                            glslang::EShTargetLanguageVersion spirv_version,
+                            uint32_t** spirv,
+                            size_t* spirv_len)
+{
+    if (glsl == nullptr) {
+        fprintf(stderr, "Input pointer null\n");
+        return nullptr;
+    }
+    if (spirv == nullptr || spirv_len == nullptr) {
+        fprintf(stderr, "Output pointer null\n");
+        return nullptr;
+    }
+    *spirv = nullptr;
+    *spirv_len = 0;
+
+    if (stage_int != 0 && stage_int != 4 && stage_int != 5) {
+        fprintf(stderr, "Invalid shader stage\n");
+        return nullptr;
+    }
+    EShLanguage stage = static_cast<EShLanguage>(stage_int);
+    switch (spirv_version) {
+        case glslang::EShTargetSpv_1_0:
+        case glslang::EShTargetSpv_1_1:
+        case glslang::EShTargetSpv_1_2:
+        case glslang::EShTargetSpv_1_3:
+        case glslang::EShTargetSpv_1_4:
+        case glslang::EShTargetSpv_1_5:
+            break;
+        default:
+            fprintf(stderr, "Invalid SPIR-V version number\n");
+            return nullptr;
+    }
+
+    if (!initialized) {
+        glslang::InitializeProcess();
+        initialized = true;
+    }
+
+    glslang::TShader shader(stage);
+    shader.setStrings(&glsl, 1);
+    shader.setEnvInput(glslang::EShSourceGlsl, stage, glslang::EShClientVulkan, 100);
+    shader.setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_0);
+    shader.setEnvTarget(glslang::EShTargetSpv, spirv_version);
+    if (!shader.parse(&DefaultTBuiltInResource, 100, true, EShMsgDefault)) {
+        fprintf(stderr, "Parse failed\n");
+        fprintf(stderr, "%s\n", shader.getInfoLog());
+        return nullptr;
+    }
+
+    glslang::TProgram program;
+    program.addShader(&shader);
+    if (!program.link(EShMsgDefault)) {
+        fprintf(stderr, "Link failed\n");
+        fprintf(stderr, "%s\n", program.getInfoLog());
+        return nullptr;
+    }
+
+    glslang::SpvOptions spvOptions;
+    spvOptions.generateDebugInfo = gen_debug;
+    spvOptions.optimizeSize = false;
+    spvOptions.disassemble = false;
+    spvOptions.validate = false;
+
+    std::vector<uint32_t>* output = new std::vector<uint32_t>;
+    glslang::GlslangToSpv(*program.getIntermediate(stage), *output, nullptr, &spvOptions);
+
+    *spirv_len = output->size();
+    *spirv = output->data();
+    return output;
+}
+
+/*
+ * Destroys a buffer created by convert_glsl_to_spirv
+ */
+EMSCRIPTEN_KEEPALIVE
+void destroy_output_buffer(void* p)
+{
+    delete static_cast<std::vector<uint32_t>*>(p);
+}
+
+}  // extern "C"
+
+/*
+ * For non-Emscripten builds we supply a generic main, so that the glslang.js
+ * build target can generate an executable with a trivial use case instead of
+ * generating a WASM binary. This is done so that there is a target that can be
+ * built and output analyzed using desktop tools, since WASM binaries are
+ * specific to the Emscripten toolchain.
+ */
+#ifndef __EMSCRIPTEN__
+int main() {
+    const char* input = R"(#version 310 es
+
+void main() { })";
+
+    uint32_t* output;
+    size_t output_len;
+
+    void* id = convert_glsl_to_spirv(input, 4, false, glslang::EShTargetSpv_1_0, &output, &output_len);
+    assert(output != nullptr);
+    assert(output_len != 0);
+    destroy_output_buffer(id);
+    return 0;
+}
+#endif  // ifndef __EMSCRIPTEN__
diff --git a/glslang/OSDependent/Web/glslang.pre.js b/glslang/OSDependent/Web/glslang.pre.js
new file mode 100644
index 0000000..46a5695
--- /dev/null
+++ b/glslang/OSDependent/Web/glslang.pre.js
@@ -0,0 +1,56 @@
+Module['compileGLSLZeroCopy'] = function(glsl, shader_stage, gen_debug, spirv_version) {
+    gen_debug = !!gen_debug;
+
+    var shader_stage_int; // EShLanguage
+    switch (shader_stage) {
+        case 'vertex':   shader_stage_int = 0; break;
+        case 'fragment': shader_stage_int = 4; break;
+        case 'compute':  shader_stage_int = 5; break;
+        default:
+            throw new Error("shader_stage must be 'vertex', 'fragment', or 'compute'.");
+    }
+
+    spirv_version = spirv_version || '1.0';
+    var spirv_version_int; // EShTargetLanguageVersion
+    switch (spirv_version) {
+        case '1.0': spirv_version_int = (1 << 16) | (0 << 8); break;
+        case '1.1': spirv_version_int = (1 << 16) | (1 << 8); break;
+        case '1.2': spirv_version_int = (1 << 16) | (2 << 8); break;
+        case '1.3': spirv_version_int = (1 << 16) | (3 << 8); break;
+        case '1.4': spirv_version_int = (1 << 16) | (4 << 8); break;
+        case '1.5': spirv_version_int = (1 << 16) | (5 << 8); break;
+        default:
+            throw new Error("spirv_version must be '1.0' ~ '1.5'.");
+    }
+
+    var p_output = Module['_malloc'](4);
+    var p_output_len = Module['_malloc'](4);
+    var id = ccall('convert_glsl_to_spirv',
+        'number',
+        ['string', 'number', 'boolean', 'number', 'number', 'number'],
+        [glsl, shader_stage_int, gen_debug, spirv_version_int, p_output, p_output_len]);
+    var output = getValue(p_output, 'i32');
+    var output_len = getValue(p_output_len, 'i32');
+    Module['_free'](p_output);
+    Module['_free'](p_output_len);
+
+    if (id === 0) {
+        throw new Error('GLSL compilation failed');
+    }
+
+    var ret = {};
+    var outputIndexU32 = output / 4;
+    ret['data'] = Module['HEAPU32'].subarray(outputIndexU32, outputIndexU32 + output_len);
+    ret['free'] = function() {
+        Module['_destroy_output_buffer'](id);
+    };
+
+    return ret;
+};
+
+Module['compileGLSL'] = function(glsl, shader_stage, gen_debug, spirv_version) {
+    var compiled = Module['compileGLSLZeroCopy'](glsl, shader_stage, gen_debug, spirv_version);
+    var ret = compiled['data'].slice()
+    compiled['free']();
+    return ret;
+};
diff --git a/glslang/OSDependent/Windows/CMakeLists.txt b/glslang/OSDependent/Windows/CMakeLists.txt
index f257418..c050ef6 100644
--- a/glslang/OSDependent/Windows/CMakeLists.txt
+++ b/glslang/OSDependent/Windows/CMakeLists.txt
@@ -15,6 +15,7 @@
 endif(WIN32)
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS OSDependent
+    install(TARGETS OSDependent EXPORT OSDependentTargets
             ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+	install(EXPORT OSDependentTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index d73021c..acb2a07 100755
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -53,9 +53,6 @@
 #define SH_IMPORT_EXPORT
 #else
 #define SH_IMPORT_EXPORT
-#ifndef __fastcall
-#define __fastcall
-#endif
 #define C_DECL
 #endif
 
@@ -71,7 +68,7 @@
 // This should always increase, as some paths to do not consume
 // a more major number.
 // It should increment by one when new functionality is added.
-#define GLSLANG_MINOR_VERSION 11
+#define GLSLANG_MINOR_VERSION 13
 
 //
 // Call before doing any other compiler/linker operations.
@@ -83,7 +80,7 @@
 //
 // Call this at process shutdown to clean up memory.
 //
-SH_IMPORT_EXPORT int __fastcall ShFinalize();
+SH_IMPORT_EXPORT int ShFinalize();
 
 //
 // Types of languages the compiler can consume.
@@ -95,15 +92,21 @@
     EShLangGeometry,
     EShLangFragment,
     EShLangCompute,
-    EShLangRayGenNV,
-    EShLangIntersectNV,
-    EShLangAnyHitNV,
-    EShLangClosestHitNV,
-    EShLangMissNV,
-    EShLangCallableNV,
+    EShLangRayGen,
+    EShLangRayGenNV = EShLangRayGen,
+    EShLangIntersect,
+    EShLangIntersectNV = EShLangIntersect,
+    EShLangAnyHit,
+    EShLangAnyHitNV = EShLangAnyHit,
+    EShLangClosestHit,
+    EShLangClosestHitNV = EShLangClosestHit,
+    EShLangMiss,
+    EShLangMissNV = EShLangMiss,
+    EShLangCallable,
+    EShLangCallableNV = EShLangCallable,
     EShLangTaskNV,
     EShLangMeshNV,
-    EShLangCount,
+    LAST_ELEMENT_MARKER(EShLangCount),
 } EShLanguage;         // would be better as stage, but this is ancient now
 
 typedef enum {
@@ -113,14 +116,21 @@
     EShLangGeometryMask       = (1 << EShLangGeometry),
     EShLangFragmentMask       = (1 << EShLangFragment),
     EShLangComputeMask        = (1 << EShLangCompute),
-    EShLangRayGenNVMask       = (1 << EShLangRayGenNV),
-    EShLangIntersectNVMask    = (1 << EShLangIntersectNV),
-    EShLangAnyHitNVMask       = (1 << EShLangAnyHitNV),
-    EShLangClosestHitNVMask   = (1 << EShLangClosestHitNV),
-    EShLangMissNVMask         = (1 << EShLangMissNV),
-    EShLangCallableNVMask     = (1 << EShLangCallableNV),
+    EShLangRayGenMask         = (1 << EShLangRayGen),
+    EShLangRayGenNVMask       = EShLangRayGenMask,
+    EShLangIntersectMask      = (1 << EShLangIntersect),
+    EShLangIntersectNVMask    = EShLangIntersectMask,
+    EShLangAnyHitMask         = (1 << EShLangAnyHit),
+    EShLangAnyHitNVMask       = EShLangAnyHitMask,
+    EShLangClosestHitMask     = (1 << EShLangClosestHit),
+    EShLangClosestHitNVMask   = EShLangClosestHitMask,
+    EShLangMissMask           = (1 << EShLangMiss),
+    EShLangMissNVMask         = EShLangMissMask,
+    EShLangCallableMask       = (1 << EShLangCallable),
+    EShLangCallableNVMask     = EShLangCallableMask,
     EShLangTaskNVMask         = (1 << EShLangTaskNV),
     EShLangMeshNVMask         = (1 << EShLangMeshNV),
+    LAST_ELEMENT_MARKER(EShLanguageMaskCount),
 } EShLanguageMask;
 
 namespace glslang {
@@ -129,36 +139,43 @@
 
 typedef enum {
     EShSourceNone,
-    EShSourceGlsl,
-    EShSourceHlsl,
-} EShSource;                  // if EShLanguage were EShStage, this could be EShLanguage instead
+    EShSourceGlsl,               // GLSL, includes ESSL (OpenGL ES GLSL)
+    EShSourceHlsl,               // HLSL
+    LAST_ELEMENT_MARKER(EShSourceCount),
+} EShSource;                     // if EShLanguage were EShStage, this could be EShLanguage instead
 
 typedef enum {
-    EShClientNone,
+    EShClientNone,               // use when there is no client, e.g. for validation
     EShClientVulkan,
     EShClientOpenGL,
+    LAST_ELEMENT_MARKER(EShClientCount),
 } EShClient;
 
 typedef enum {
     EShTargetNone,
-    EShTargetSpv,                 // preferred spelling
+    EShTargetSpv,                 // SPIR-V (preferred spelling)
     EshTargetSpv = EShTargetSpv,  // legacy spelling
+    LAST_ELEMENT_MARKER(EShTargetCount),
 } EShTargetLanguage;
 
 typedef enum {
-    EShTargetVulkan_1_0 = (1 << 22),
-    EShTargetVulkan_1_1 = (1 << 22) | (1 << 12),
-    EShTargetOpenGL_450 = 450,
+    EShTargetVulkan_1_0 = (1 << 22),                  // Vulkan 1.0
+    EShTargetVulkan_1_1 = (1 << 22) | (1 << 12),      // Vulkan 1.1
+    EShTargetVulkan_1_2 = (1 << 22) | (2 << 12),      // Vulkan 1.2
+    EShTargetOpenGL_450 = 450,                        // OpenGL
+    LAST_ELEMENT_MARKER(EShTargetClientVersionCount),
 } EShTargetClientVersion;
 
 typedef EShTargetClientVersion EshTargetClientVersion;
 
 typedef enum {
-    EShTargetSpv_1_0 = (1 << 16),
-    EShTargetSpv_1_1 = (1 << 16) | (1 << 8),
-    EShTargetSpv_1_2 = (1 << 16) | (2 << 8),
-    EShTargetSpv_1_3 = (1 << 16) | (3 << 8),
-    EShTargetSpv_1_4 = (1 << 16) | (4 << 8),
+    EShTargetSpv_1_0 = (1 << 16),                     // SPIR-V 1.0
+    EShTargetSpv_1_1 = (1 << 16) | (1 << 8),          // SPIR-V 1.1
+    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
+    LAST_ELEMENT_MARKER(EShTargetLanguageVersionCount),
 } EShTargetLanguageVersion;
 
 struct TInputLanguage {
@@ -208,6 +225,7 @@
     EShOptNone,
     EShOptSimple,       // Optimizations that can be done quickly
     EShOptFull,         // Optimizations that will take more time
+    LAST_ELEMENT_MARKER(EshOptLevelCount),
 } EShOptimizationLevel;
 
 //
@@ -216,6 +234,7 @@
 typedef enum {
     EShTexSampTransKeep,   // keep textures and samplers as is (default)
     EShTexSampTransUpgradeTextureRemoveSampler,  // change texture w/o embeded sampler into sampled texture and throw away all samplers
+    LAST_ELEMENT_MARKER(EShTexSampTransCount),
 } EShTextureSamplerTransformMode;
 
 //
@@ -237,9 +256,25 @@
     EShMsgHlslEnable16BitTypes  = (1 << 11), // enable use of 16-bit types in SPIR-V for HLSL
     EShMsgHlslLegalization  = (1 << 12), // enable HLSL Legalization messages
     EShMsgHlslDX9Compatible = (1 << 13), // enable HLSL DX9 compatible mode (right now only for samplers)
+    EShMsgBuiltinSymbolTable = (1 << 14), // print the builtin symbol table
+    LAST_ELEMENT_MARKER(EShMsgCount),
 };
 
 //
+// Options for building reflection
+//
+typedef enum {
+    EShReflectionDefault           = 0,        // default is original behaviour before options were added
+    EShReflectionStrictArraySuffix = (1 << 0), // reflection will follow stricter rules for array-of-structs suffixes
+    EShReflectionBasicArraySuffix  = (1 << 1), // arrays of basic types will be appended with [0] as in GL reflection
+    EShReflectionIntermediateIO    = (1 << 2), // reflect inputs and outputs to program, even with no vertex shader
+    EShReflectionSeparateBuffers   = (1 << 3), // buffer variables and buffer blocks are reflected separately
+    EShReflectionAllBlockVariables = (1 << 4), // reflect all variables in blocks, even if they are inactive
+    EShReflectionUnwrapIOBlocks    = (1 << 5), // unwrap input/output blocks the same as with uniform blocks
+    LAST_ELEMENT_MARKER(EShReflectionCount),
+} EShReflectionOptions;
+
+//
 // Build a table for bindings.  This can be used for locating
 // attributes, uniforms, globals, etc., as needed.
 //
@@ -382,6 +417,8 @@
 //  - optionally call setEnv*(), see below for more detail
 //  - optionally use setPreamble() to set a special shader string that will be
 //    processed before all others but won't affect the validity of #version
+//  - optionally call addProcesses() for each setting/transform,
+//    see comment for class TProcesses
 //  - call parse(): source language and target environment must be selected
 //    either by correct setting of EShMessages sent to parse(), or by
 //    explicitly calling setEnv*()
@@ -421,15 +458,42 @@
     void addUniformLocationOverride(const char* name, int loc);
     void setUniformLocationBase(int base);
     void setInvertY(bool invert);
+#ifdef ENABLE_HLSL
     void setHlslIoMapping(bool hlslIoMap);
     void setFlattenUniformArrays(bool flatten);
+#endif
     void setNoStorageFormat(bool useUnknownFormat);
+    void setNanMinMaxClamp(bool nanMinMaxClamp);
     void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode);
 
     // For setting up the environment (cleared to nothingness in the constructor).
     // These must be called so that parsing is done for the right source language and
     // target environment, either indirectly through TranslateEnvironment() based on
     // EShMessages et. al., or directly by the user.
+    //
+    // setEnvInput:    The input source language and stage. If generating code for a
+    //                 specific client, the input client semantics to use and the
+    //                 version of the that client's input semantics to use, otherwise
+    //                 use EShClientNone and version of 0, e.g. for validation mode.
+    //                 Note 'version' does not describe the target environment,
+    //                 just the version of the source dialect to compile under.
+    //
+    //                 See the definitions of TEnvironment, EShSource, EShLanguage,
+    //                 and EShClient for choices and more detail.
+    //
+    // setEnvClient:   The client that will be hosting the execution, and it's version.
+    //                 Note 'version' is not the version of the languages involved, but
+    //                 the version of the client environment.
+    //                 Use EShClientNone and version of 0 if there is no client, e.g.
+    //                 for validation mode.
+    //
+    //                 See EShTargetClientVersion for choices.
+    //
+    // setEnvTarget:   The language to translate to when generating code, and that
+    //                 language's version.
+    //                 Use EShTargetNone and version of 0 if there is no client, e.g.
+    //                 for validation mode.
+    //
     void setEnvInput(EShSource lang, EShLanguage envStage, EShClient client, int version)
     {
         environment.input.languageFamily = lang;
@@ -447,8 +511,15 @@
         environment.target.language = lang;
         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; }
+#else
+    bool getEnvTargetHlslFunctionality1() const { return false; }
+#endif
 
     // Interface to #include handlers.
     //
@@ -582,11 +653,11 @@
     // stringNames is the optional names for all the strings. If stringNames
     // is null, then none of the strings has name. If a certain element in
     // stringNames is null, then the corresponding string does not have name.
-    const char* const* strings;
+    const char* const* strings;      // explicit code to compile, see previous comment
     const int* lengths;
     const char* const* stringNames;
-    const char* preamble;
-    int numStrings;
+    int numStrings;                  // size of the above arrays
+    const char* preamble;            // string of implicit code to compile before the explicitly provided code
 
     // a function in the source string can be renamed FROM this TO the name given in setEntryPoint.
     std::string sourceEntryPointName;
@@ -599,8 +670,46 @@
     TShader& operator=(TShader&);
 };
 
-class TReflection;
-class TIoMapper;
+#ifndef GLSLANG_WEB
+
+//
+// A reflection database and its interface, consistent with the OpenGL API reflection queries.
+//
+
+// Data needed for just a single object at the granularity exchanged by the reflection API
+class TObjectReflection {
+public:
+    TObjectReflection(const std::string& pName, const TType& pType, int pOffset, int pGLDefineType, int pSize, int pIndex);
+
+    const TType* getType() const { return type; }
+    int getBinding() const;
+    void dump() const;
+    static TObjectReflection badReflection() { return TObjectReflection(); }
+
+    std::string name;
+    int offset;
+    int glDefineType;
+    int size;                   // data size in bytes for a block, array size for a (non-block) object that's an array
+    int index;
+    int counterIndex;
+    int numMembers;
+    int arrayStride;            // stride of an array variable
+    int topLevelArrayStride;    // stride of the top-level variable in a storage buffer member
+    EShLanguageMask stages;
+
+protected:
+    TObjectReflection()
+        : offset(-1), glDefineType(-1), size(-1), index(-1), counterIndex(-1), numMembers(-1), arrayStride(0),
+          topLevelArrayStride(0), stages(EShLanguageMask(0)), type(nullptr)
+    {
+    }
+
+    const TType* type;
+};
+
+class  TReflection;
+class  TIoMapper;
+struct TVarEntryInfo;
 
 // Allows to customize the binding layout after linking.
 // All used uniform variables will invoke at least validateBinding.
@@ -621,53 +730,65 @@
 // notifiy callbacks, this phase ends with a call to endNotifications.
 // Phase two starts directly after the call to endNotifications
 // and calls all other callbacks to validate and to get the
-// bindings, sets, locations, component and color indices. 
+// bindings, sets, locations, component and color indices.
 //
 // NOTE: that still limit checks are applied to bindings and sets
 // and may result in an error.
 class TIoMapResolver
 {
 public:
-  virtual ~TIoMapResolver() {}
+    virtual ~TIoMapResolver() {}
 
-  // Should return true if the resulting/current binding would be okay.
-  // Basic idea is to do aliasing binding checks with this.
-  virtual bool validateBinding(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
-  // Should return a value >= 0 if the current binding should be overridden.
-  // Return -1 if the current binding (including no binding) should be kept.
-  virtual int resolveBinding(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
-  // Should return a value >= 0 if the current set should be overridden.
-  // Return -1 if the current set (including no set) should be kept.
-  virtual int resolveSet(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
-  // Should return a value >= 0 if the current location should be overridden.
-  // Return -1 if the current location (including no location) should be kept.
-  virtual int resolveUniformLocation(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
-  // Should return true if the resulting/current setup would be okay.
-  // Basic idea is to do aliasing checks and reject invalid semantic names.
-  virtual bool validateInOut(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
-  // Should return a value >= 0 if the current location should be overridden.
-  // Return -1 if the current location (including no location) should be kept.
-  virtual int resolveInOutLocation(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
-  // Should return a value >= 0 if the current component index should be overridden.
-  // Return -1 if the current component index (including no index) should be kept.
-  virtual int resolveInOutComponent(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
-  // Should return a value >= 0 if the current color index should be overridden.
-  // Return -1 if the current color index (including no index) should be kept.
-  virtual int resolveInOutIndex(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
-  // Notification of a uniform variable
-  virtual void notifyBinding(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
-  // Notification of a in or out variable
-  virtual void notifyInOut(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
-  // Called by mapIO when it has finished the notify pass
-  virtual void endNotifications(EShLanguage stage) = 0;
-  // Called by mapIO when it starts its notify pass for the given stage
-  virtual void beginNotifications(EShLanguage stage) = 0;
-  // Called by mipIO when it starts its resolve pass for the given stage
-  virtual void beginResolve(EShLanguage stage) = 0;
-  // Called by mapIO when it has finished the resolve pass
-  virtual void endResolve(EShLanguage stage) = 0;
+    // Should return true if the resulting/current binding would be okay.
+    // Basic idea is to do aliasing binding checks with this.
+    virtual bool validateBinding(EShLanguage stage, TVarEntryInfo& ent) = 0;
+    // Should return a value >= 0 if the current binding should be overridden.
+    // Return -1 if the current binding (including no binding) should be kept.
+    virtual int resolveBinding(EShLanguage stage, TVarEntryInfo& ent) = 0;
+    // Should return a value >= 0 if the current set should be overridden.
+    // Return -1 if the current set (including no set) should be kept.
+    virtual int resolveSet(EShLanguage stage, TVarEntryInfo& ent) = 0;
+    // Should return a value >= 0 if the current location should be overridden.
+    // Return -1 if the current location (including no location) should be kept.
+    virtual int resolveUniformLocation(EShLanguage stage, TVarEntryInfo& ent) = 0;
+    // Should return true if the resulting/current setup would be okay.
+    // Basic idea is to do aliasing checks and reject invalid semantic names.
+    virtual bool validateInOut(EShLanguage stage, TVarEntryInfo& ent) = 0;
+    // Should return a value >= 0 if the current location should be overridden.
+    // Return -1 if the current location (including no location) should be kept.
+    virtual int resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) = 0;
+    // Should return a value >= 0 if the current component index should be overridden.
+    // Return -1 if the current component index (including no index) should be kept.
+    virtual int resolveInOutComponent(EShLanguage stage, TVarEntryInfo& ent) = 0;
+    // Should return a value >= 0 if the current color index should be overridden.
+    // Return -1 if the current color index (including no index) should be kept.
+    virtual int resolveInOutIndex(EShLanguage stage, TVarEntryInfo& ent) = 0;
+    // Notification of a uniform variable
+    virtual void notifyBinding(EShLanguage stage, TVarEntryInfo& ent) = 0;
+    // Notification of a in or out variable
+    virtual void notifyInOut(EShLanguage stage, TVarEntryInfo& ent) = 0;
+    // Called by mapIO when it starts its notify pass for the given stage
+    virtual void beginNotifications(EShLanguage stage) = 0;
+    // Called by mapIO when it has finished the notify pass
+    virtual void endNotifications(EShLanguage stage) = 0;
+    // Called by mipIO when it starts its resolve pass for the given stage
+    virtual void beginResolve(EShLanguage stage) = 0;
+    // Called by mapIO when it has finished the resolve pass
+    virtual void endResolve(EShLanguage stage) = 0;
+    // Called by mapIO when it starts its symbol collect for teh given stage
+    virtual void beginCollect(EShLanguage stage) = 0;
+    // Called by mapIO when it has finished the symbol collect
+    virtual void endCollect(EShLanguage stage) = 0;
+    // Called by TSlotCollector to resolve storage locations or bindings
+    virtual void reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& infoSink) = 0;
+    // Called by TSlotCollector to resolve resource locations or bindings
+    virtual void reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) = 0;
+    // Called by mapIO.addStage to set shader stage mask to mark a stage be added to this pipeline
+    virtual void addStage(EShLanguage stage) = 0;
 };
 
+#endif // GLSLANG_WEB
+
 // Make one TProgram per set of shaders that will get linked together.  Add all
 // the shaders that are to be linked together.  After calling shader.parse()
 // for all shaders, call link().
@@ -679,7 +800,7 @@
     TProgram();
     virtual ~TProgram();
     void addShader(TShader* shader) { stages[shader->stage].push_back(shader); }
-
+    std::list<TShader*>& getShaders(EShLanguage stage) { return stages[stage]; }
     // Link Validation interface
     bool link(EShMessages);
     const char* getInfoLog();
@@ -687,36 +808,101 @@
 
     TIntermediate* getIntermediate(EShLanguage stage) const { return intermediate[stage]; }
 
+#ifndef GLSLANG_WEB
+
     // Reflection Interface
-    bool buildReflection();                          // call first, to do liveness analysis, index mapping, etc.; returns false on failure
-    int getNumLiveUniformVariables() const;                // can be used for glGetProgramiv(GL_ACTIVE_UNIFORMS)
-    int getNumLiveUniformBlocks() const;                   // can be used for glGetProgramiv(GL_ACTIVE_UNIFORM_BLOCKS)
-    const char* getUniformName(int index) const;           // can be used for "name" part of glGetActiveUniform()
-    const char* getUniformBlockName(int blockIndex) const; // can be used for glGetActiveUniformBlockName()
-    int getUniformBlockSize(int blockIndex) const;         // can be used for glGetActiveUniformBlockiv(UNIFORM_BLOCK_DATA_SIZE)
-    int getUniformIndex(const char* name) const;           // can be used for glGetUniformIndices()
-    int getUniformBinding(int index) const;                // returns the binding number
-    EShLanguageMask getUniformStages(int index) const;     // returns Shaders Stages where a Uniform is present
-    int getUniformBlockBinding(int index) const;           // returns the block binding number
-    int getUniformBlockIndex(int index) const;             // can be used for glGetActiveUniformsiv(GL_UNIFORM_BLOCK_INDEX)
-    int getUniformBlockCounterIndex(int index) const;      // returns block index of associated counter.
-    int getUniformType(int index) const;                   // can be used for glGetActiveUniformsiv(GL_UNIFORM_TYPE)
-    int getUniformBufferOffset(int index) const;           // can be used for glGetActiveUniformsiv(GL_UNIFORM_OFFSET)
-    int getUniformArraySize(int index) const;              // can be used for glGetActiveUniformsiv(GL_UNIFORM_SIZE)
-    int getNumLiveAttributes() const;                      // can be used for glGetProgramiv(GL_ACTIVE_ATTRIBUTES)
+
+    // call first, to do liveness analysis, index mapping, etc.; returns false on failure
+    bool buildReflection(int opts = EShReflectionDefault);
     unsigned getLocalSize(int dim) const;                  // return dim'th local size
-    const char *getAttributeName(int index) const;         // can be used for glGetActiveAttrib()
-    int getAttributeType(int index) const;                 // can be used for glGetActiveAttrib()
-    const TType* getUniformTType(int index) const;         // returns a TType*
-    const TType* getUniformBlockTType(int index) const;    // returns a TType*
-    const TType* getAttributeTType(int index) const;       // returns a TType*
+    int getReflectionIndex(const char *name) const;
+    int getReflectionPipeIOIndex(const char* name, const bool inOrOut) const;
+    int getNumUniformVariables() const;
+    const TObjectReflection& getUniform(int index) const;
+    int getNumUniformBlocks() const;
+    const TObjectReflection& getUniformBlock(int index) const;
+    int getNumPipeInputs() const;
+    const TObjectReflection& getPipeInput(int index) const;
+    int getNumPipeOutputs() const;
+    const TObjectReflection& getPipeOutput(int index) const;
+    int getNumBufferVariables() const;
+    const TObjectReflection& getBufferVariable(int index) const;
+    int getNumBufferBlocks() const;
+    const TObjectReflection& getBufferBlock(int index) const;
+    int getNumAtomicCounters() const;
+    const TObjectReflection& getAtomicCounter(int index) const;
+
+    // Legacy Reflection Interface - expressed in terms of above interface
+
+    // can be used for glGetProgramiv(GL_ACTIVE_UNIFORMS)
+    int getNumLiveUniformVariables() const             { return getNumUniformVariables(); }
+
+    // can be used for glGetProgramiv(GL_ACTIVE_UNIFORM_BLOCKS)
+    int getNumLiveUniformBlocks() const                { return getNumUniformBlocks(); }
+
+    // can be used for glGetProgramiv(GL_ACTIVE_ATTRIBUTES)
+    int getNumLiveAttributes() const                   { return getNumPipeInputs(); }
+
+    // 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(); }
+
+    // returns the binding number
+    int getUniformBinding(int index) const             { return getUniform(index).getBinding(); }
+
+    // returns Shaders Stages where a Uniform is present
+    EShLanguageMask getUniformStages(int index) const  { return getUniform(index).stages; }
+
+    // can be used for glGetActiveUniformsiv(GL_UNIFORM_BLOCK_INDEX)
+    int getUniformBlockIndex(int index) const          { return getUniform(index).index; }
+
+    // can be used for glGetActiveUniformsiv(GL_UNIFORM_TYPE)
+    int getUniformType(int index) const                { return getUniform(index).glDefineType; }
+
+    // can be used for glGetActiveUniformsiv(GL_UNIFORM_OFFSET)
+    int getUniformBufferOffset(int index) const        { return getUniform(index).offset; }
+
+    // can be used for glGetActiveUniformsiv(GL_UNIFORM_SIZE)
+    int getUniformArraySize(int index) const           { return getUniform(index).size; }
+
+    // returns a TType*
+    const TType *getUniformTType(int index) const      { return getUniform(index).getType(); }
+
+    // can be used for glGetActiveUniformBlockName()
+    const char *getUniformBlockName(int index) const   { return getUniformBlock(index).name.c_str(); }
+
+    // can be used for glGetActiveUniformBlockiv(UNIFORM_BLOCK_DATA_SIZE)
+    int getUniformBlockSize(int index) const           { return getUniformBlock(index).size; }
+
+    // returns the block binding number
+    int getUniformBlockBinding(int index) const        { return getUniformBlock(index).getBinding(); }
+
+    // returns block index of associated counter.
+    int getUniformBlockCounterIndex(int index) const   { return getUniformBlock(index).counterIndex; }
+
+    // returns a TType*
+    const TType *getUniformBlockTType(int index) const { return getUniformBlock(index).getType(); }
+
+    // can be used for glGetActiveAttrib()
+    const char *getAttributeName(int index) const      { return getPipeInput(index).name.c_str(); }
+
+    // can be used for glGetActiveAttrib()
+    int getAttributeType(int index) const              { return getPipeInput(index).glDefineType; }
+
+    // returns a TType*
+    const TType *getAttributeTType(int index) const    { return getPipeInput(index).getType(); }
 
     void dumpReflection();
-
     // I/O mapping: apply base offsets and map live unbound variables
     // If resolver is not provided it uses the previous approach
     // and respects auto assignment and offsets.
-    bool mapIO(TIoMapResolver* resolver = NULL);
+    bool mapIO(TIoMapResolver* pResolver = nullptr, TIoMapper* pIoMapper = nullptr);
+#endif
 
 protected:
     bool linkStage(EShLanguage, EShMessages);
@@ -726,8 +912,9 @@
     TIntermediate* intermediate[EShLangCount];
     bool newedIntermediate[EShLangCount];      // track which intermediate were "new" versus reusing a singleton unit in a stage
     TInfoSink* infoSink;
+#ifndef GLSLANG_WEB
     TReflection* reflection;
-    TIoMapper* ioMapper;
+#endif
     bool linked;
 
 private:
diff --git a/glslang/updateGrammar b/glslang/updateGrammar
index f8fa81d..9384db9 100755
--- a/glslang/updateGrammar
+++ b/glslang/updateGrammar
@@ -1,3 +1,16 @@
-#!/usr/bin/env bash

+#!/bin/bash
+
+if [ "$1" = 'web' ]
+then
+    m4 -P -DGLSLANG_WEB MachineIndependent/glslang.m4 > MachineIndependent/glslang.y
+elif [ "$#" -eq 0 ]
+then
+    m4 -P MachineIndependent/glslang.m4 > MachineIndependent/glslang.y
+else
+    echo usage:
+    echo $0 web
+    echo $0
+    exit
+fi
 
 bison --defines=MachineIndependent/glslang_tab.cpp.h -t MachineIndependent/glslang.y -o MachineIndependent/glslang_tab.cpp
diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp
index 00bb433..5004671 100644
--- a/gtests/AST.FromFile.cpp
+++ b/gtests/AST.FromFile.cpp
@@ -41,26 +41,22 @@
 
 using CompileToAstTest = GlslangTest<::testing::TestWithParam<std::string>>;
 
-#ifdef NV_EXTENSIONS
 using CompileToAstTestNV = GlslangTest<::testing::TestWithParam<std::string>>;
-#endif
 
 TEST_P(CompileToAstTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
+                            Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
                             Target::AST);
 }
 
-#ifdef NV_EXTENSIONS
 // Compiling GLSL to SPIR-V under OpenGL semantics (NV extensions enabled).
 TEST_P(CompileToAstTestNV, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
+                            Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
                             Target::AST);
 }
-#endif
 
 // clang-format off
 INSTANTIATE_TEST_CASE_P(
@@ -93,9 +89,13 @@
         "cppSimple.vert",
         "cppIndent.vert",
         "cppIntMinOverNegativeOne.frag",
+        "cppMerge.frag",
         "cppNest.vert",
         "cppBad.vert",
         "cppBad2.vert",
+        "cppBad3.vert",
+        "cppBad4.vert",
+        "cppBad5.vert",
         "cppComplexExpr.vert",
         "cppDeepNest.frag",
         "cppPassMacroName.frag",
@@ -113,6 +113,7 @@
         "300operations.frag",
         "300block.frag",
         "300samplerExternal.frag",
+        "300samplerExternalYUV.frag",
         "310.comp",
         "310.vert",
         "310.geom",
@@ -120,6 +121,7 @@
         "310.tesc",
         "310.tese",
         "310implicitSizeArrayError.vert",
+        "310.inheritMemory.frag",
         "310AofA.vert",
         "310runtimeArray.vert",
         "320.comp",
@@ -231,12 +233,51 @@
         "precise_struct_block.vert",
         "maxClipDistances.vert",
         "findFunction.frag",
-        "constantUnaryConversion.comp"
+        "constantUnaryConversion.comp",
+        "glsl.450.subgroup.frag",
+        "glsl.450.subgroup.geom",
+        "glsl.450.subgroup.tesc",
+        "glsl.450.subgroup.tese",
+        "glsl.450.subgroup.vert",
+        "glsl.450.subgroupArithmetic.comp",
+        "glsl.450.subgroupBasic.comp",
+        "glsl.450.subgroupBallot.comp",
+        "glsl.450.subgroupBallotNeg.comp",
+        "glsl.450.subgroupClustered.comp",
+        "glsl.450.subgroupClusteredNeg.comp",
+        "glsl.450.subgroupPartitioned.comp",
+        "glsl.450.subgroupShuffle.comp",
+        "glsl.450.subgroupShuffleRelative.comp",
+        "glsl.450.subgroupQuad.comp",
+        "glsl.450.subgroupVote.comp",
+        "glsl.460.subgroup.mesh",
+        "glsl.460.subgroup.task",
+        "glsl.460.subgroup.rahit",
+        "glsl.460.subgroup.rcall",
+        "glsl.460.subgroup.rchit",
+        "glsl.460.subgroup.rgen",
+        "glsl.460.subgroup.rint",
+        "glsl.460.subgroup.rmiss",
+        "glsl.es320.subgroup.frag",
+        "glsl.es320.subgroup.geom",
+        "glsl.es320.subgroup.tesc",
+        "glsl.es320.subgroup.tese",
+        "glsl.es320.subgroup.vert",
+        "glsl.es320.subgroupArithmetic.comp",
+        "glsl.es320.subgroupBasic.comp",
+        "glsl.es320.subgroupBallot.comp",
+        "glsl.es320.subgroupBallotNeg.comp",
+        "glsl.es320.subgroupClustered.comp",
+        "glsl.es320.subgroupClusteredNeg.comp",
+        "glsl.es320.subgroupPartitioned.comp",
+        "glsl.es320.subgroupShuffle.comp",
+        "glsl.es320.subgroupShuffleRelative.comp",
+        "glsl.es320.subgroupQuad.comp",
+        "glsl.es320.subgroupVote.comp",
     })),
     FileNameAsCustomTestSuffix
 );
 
-#ifdef NV_EXTENSIONS
 INSTANTIATE_TEST_CASE_P(
     Glsl, CompileToAstTestNV,
     ::testing::ValuesIn(std::vector<std::string>({
@@ -244,7 +285,6 @@
     })),
     FileNameAsCustomTestSuffix
 );
-#endif
 // clang-format on
 
 }  // anonymous namespace
diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt
index f678cb6..dc53f5c 100644
--- a/gtests/CMakeLists.txt
+++ b/gtests/CMakeLists.txt
@@ -20,10 +20,12 @@
             ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.Vk.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/Pp.FromFile.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/Spv.FromFile.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/Spv.FromFile.cpp)
 
-            # -- Remapper tests
-            ${CMAKE_CURRENT_SOURCE_DIR}/Remap.FromFile.cpp)
+        if(ENABLE_SPVREMAPPER)
+            set(TEST_SOURCES ${TEST_SOURCES}
+                ${CMAKE_CURRENT_SOURCE_DIR}/Remap.FromFile.cpp)
+        endif()
 
         glslang_pch(TEST_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/pch.cpp)
 
@@ -31,8 +33,9 @@
         set_property(TARGET glslangtests PROPERTY FOLDER tests)
         glslang_set_link_args(glslangtests)
         if(ENABLE_GLSLANG_INSTALL)
-            install(TARGETS glslangtests
+            install(TARGETS glslangtests EXPORT glslangtestsTargets
                     RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+			install(EXPORT glslangtestsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
         endif(ENABLE_GLSLANG_INSTALL)
 
         set(GLSLANG_TEST_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../Test")
@@ -48,8 +51,13 @@
                                    ${gtest_SOURCE_DIR}/include)
 
         set(LIBRARIES
-            SPVRemapper glslang OSDependent OGLCompiler glslang
+            glslang OSDependent OGLCompiler glslang
             SPIRV glslang-default-resource-limits)
+
+        if(ENABLE_SPVREMAPPER)
+            set(LIBRARIES ${LIBRARIES} SPVRemapper)
+        endif()
+
         if(ENABLE_HLSL)
             set(LIBRARIES ${LIBRARIES} HLSL)
         endif(ENABLE_HLSL)
diff --git a/gtests/Config.FromFile.cpp b/gtests/Config.FromFile.cpp
index dccf5d6..d6fbf20 100644
--- a/gtests/Config.FromFile.cpp
+++ b/gtests/Config.FromFile.cpp
@@ -100,7 +100,7 @@
     ::testing::ValuesIn(std::vector<TestCaseSpec>({
         {"specExamples.vert", "baseResults/test.conf", "specExamplesConf.vert.out", (EShMessages)(EShMsgAST | EShMsgCascadingErrors)},
         {"100Limits.vert", "100.conf", "100LimitsConf.vert.out", EShMsgCascadingErrors},
-    })),
+    }))
 );
 // clang-format on
 
diff --git a/gtests/HexFloat.cpp b/gtests/HexFloat.cpp
index ddbee1f..ead4fd3 100644
--- a/gtests/HexFloat.cpp
+++ b/gtests/HexFloat.cpp
@@ -127,7 +127,7 @@
         {float(ldexp(1.0, -127) / 2.0 + (ldexp(1.0, -127) / 4.0f)),
          "0x1.8p-128"},
 
-    })),);
+    })));
 
 INSTANTIATE_TEST_CASE_P(
     Float32NanTests, HexFloatTest,
@@ -145,7 +145,7 @@
         {uint32_t(0x7f800c00), "0x1.0018p+128"},     // +nan
         {uint32_t(0x7F80F000), "0x1.01ep+128"},      // +nan
         {uint32_t(0x7FFFFFFF), "0x1.fffffep+128"},   // +nan
-    })),);
+    })));
 
 INSTANTIATE_TEST_CASE_P(
     Float64Tests, HexDoubleTest,
@@ -218,7 +218,7 @@
             {ldexp(1.0, -1023) / 2.0 + (ldexp(1.0, -1023) / 4.0),
              "0x1.8p-1024"},
 
-        })),);
+        })));
 
 INSTANTIATE_TEST_CASE_P(
     Float64NanTests, HexDoubleTest,
@@ -237,7 +237,7 @@
         {uint64_t(0x7FF0000000000001LL), "0x1.0000000000001p+1024"},   // -nan
         {uint64_t(0x7FF0000300000000LL), "0x1.00003p+1024"},           // -nan
         {uint64_t(0x7FFFFFFFFFFFFFFFLL), "0x1.fffffffffffffp+1024"},   // -nan
-    })),);
+    })));
 
 TEST(HexFloatStreamTest, OperatorLeftShiftPreservesFloatAndFill) {
   std::stringstream s;
@@ -282,7 +282,7 @@
         {"0xFFp+0", 255.f},
         {"0x0.8p+0", 0.5f},
         {"0x0.4p+0", 0.25f},
-    })),);
+    })));
 
 INSTANTIATE_TEST_CASE_P(
     Float32DecodeInfTests, DecodeHexFloatTest,
@@ -292,7 +292,7 @@
         {"0x32p+127", uint32_t(0x7F800000)},   // inf
         {"0x32p+500", uint32_t(0x7F800000)},   // inf
         {"-0x32p+127", uint32_t(0xFF800000)},  // -inf
-    })),);
+    })));
 
 INSTANTIATE_TEST_CASE_P(
     Float64DecodeTests, DecodeHexDoubleTest,
@@ -315,7 +315,7 @@
             {"0xFFp+0", 255.},
             {"0x0.8p+0", 0.5},
             {"0x0.4p+0", 0.25},
-        })),);
+        })));
 
 INSTANTIATE_TEST_CASE_P(
     Float64DecodeInfTests, DecodeHexDoubleTest,
@@ -326,7 +326,7 @@
             {"0x32p+1023", uint64_t(0x7FF0000000000000)},   // inf
             {"0x32p+5000", uint64_t(0x7FF0000000000000)},   // inf
             {"-0x32p+1023", uint64_t(0xFFF0000000000000)},  // -inf
-        })),);
+        })));
 
 TEST(FloatProxy, ValidConversion) {
   EXPECT_THAT(FloatProxy<float>(1.f).getAsFloat(), Eq(1.0f));
@@ -495,7 +495,7 @@
 
         {std::numeric_limits<float>::infinity(), "0x1p+128"},
         {-std::numeric_limits<float>::infinity(), "-0x1p+128"},
-    })),);
+    })));
 
 INSTANTIATE_TEST_CASE_P(
     Float64Tests, FloatProxyDoubleTest,
@@ -532,7 +532,7 @@
             {std::numeric_limits<double>::infinity(), "0x1p+1024"},
             {-std::numeric_limits<double>::infinity(), "-0x1p+1024"},
 
-        })),);
+        })));
 
 // double is used so that unbiased_exponent can be used with the output
 // of ldexp directly.
@@ -793,7 +793,7 @@
     {static_cast<float>(ldexp(float_fractions({0, 1, 11, 13}), -129)), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToPositiveInfinity},
     {static_cast<float>(ldexp(float_fractions({0, 1, 11, 13}), -131)), std::make_pair(half_bits_set({0}), false), spvutils::kRoundToNegativeInfinity},
     {static_cast<float>(ldexp(float_fractions({0, 1, 11, 13}), -130)), std::make_pair(half_bits_set({0, 9}), false), spvutils::kRoundToNearestEven},
-  })),);
+  })));
 // clang-format on
 
 struct UpCastSignificandCase {
@@ -837,7 +837,7 @@
     {0x0F00, 0x600000},
     {0x0F01, 0x602000},
     {0x0FFF, 0x7FE000},
-  })),);
+  })));
 
 struct DownCastTest {
   float source_float;
@@ -914,7 +914,7 @@
     {-std::numeric_limits<float>::infinity(), negative_infinity, {spvutils::kRoundToZero, spvutils::kRoundToPositiveInfinity, spvutils::kRoundToNegativeInfinity, spvutils::kRoundToNearestEven}},
 
     // Nans are below because we cannot test for equality.
-  })),);
+  })));
 
 struct UpCastCase{
   uint16_t source_half;
@@ -965,7 +965,7 @@
     // inf
     {0x7C00, std::numeric_limits<float>::infinity()},
     {0xFC00, -std::numeric_limits<float>::infinity()},
-  })),);
+  })));
 
 TEST(HexFloatOperationTests, NanTests) {
   using HF = spvutils::HexFloat<spvutils::FloatProxy<float>>;
@@ -1071,7 +1071,7 @@
         // We can't have -1e40 and negate_value == true since
         // that represents an original case of "--1e40" which
         // is invalid.
-  }),);
+  }));
 
 using ParseNormalFloat16Test =
     ::testing::TestWithParam<FloatParseCase<Float16>>;
@@ -1114,7 +1114,7 @@
         BadFloatParseCase<Float16>("-2.0", true, uint16_t{0}),
         BadFloatParseCase<Float16>("+0.0", true, uint16_t{0}),
         BadFloatParseCase<Float16>("+2.0", true, uint16_t{0}),
-    }),);
+    }));
 
 // A test case for detecting infinities.
 template <typename T>
@@ -1149,7 +1149,7 @@
         {"-1e40", false, -FLT_MAX},
         {"1e400", false, FLT_MAX},
         {"-1e400", false, -FLT_MAX},
-    })),);
+    })));
 
 using FloatProxyParseOverflowDoubleTest =
     ::testing::TestWithParam<OverflowParseCase<double>>;
@@ -1176,7 +1176,7 @@
         {"-1e40", true, -1e40},
         {"1e400", false, DBL_MAX},
         {"-1e400", false, -DBL_MAX},
-    })),);
+    })));
 
 using FloatProxyParseOverflowFloat16Test =
     ::testing::TestWithParam<OverflowParseCase<uint16_t>>;
@@ -1207,7 +1207,7 @@
         {"-1e38", false, uint16_t{0xfbff}},
         {"-1e40", false, uint16_t{0xfbff}},
         {"-1e400", false, uint16_t{0xfbff}},
-    })),);
+    })));
 
 TEST(FloatProxy, Max) {
   EXPECT_THAT(FloatProxy<Float16>::max().getAsFloat().get_value(),
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
old mode 100644
new mode 100755
index a17f470..f483536
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -70,14 +70,14 @@
 TEST_P(HlslCompileTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
-                            Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+                            Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,  glslang::EShTargetSpv_1_0,
                             Target::BothASTAndSpv, true, GetParam().entryPoint);
 }
 
 TEST_P(HlslVulkan1_1CompileTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
-                            Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_1,
+                            Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_1, glslang::EShTargetSpv_1_3,
                             Target::BothASTAndSpv, true, GetParam().entryPoint);
 }
 
@@ -93,7 +93,7 @@
 TEST_P(HlslLegalizeTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
-                            Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+                            Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,  glslang::EShTargetSpv_1_0,
                             Target::Spv, true, GetParam().entryPoint,
                             "/baseLegalResults/", true);
 }
@@ -103,7 +103,7 @@
 TEST_P(HlslDebugTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
-                            Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+                            Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
                             Target::Spv, true, GetParam().entryPoint,
                             "/baseResults/", false, true);
 }
@@ -111,7 +111,8 @@
 TEST_P(HlslDX9CompatibleTest, FromFile)
 {
     loadFileCompileAndCheckWithOptions(GlobalTestSettings.testRoot, GetParam().fileName, Source::HLSL,
-                                       Semantics::Vulkan, glslang::EShTargetVulkan_1_0, Target::BothASTAndSpv, true,
+                                       Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
+                                       Target::BothASTAndSpv, true,
                                        GetParam().entryPoint, "/baseResults/",
                                        EShMessages::EShMsgHlslDX9Compatible);
 }
@@ -122,7 +123,7 @@
 TEST_P(HlslLegalDebugTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
-                            Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+                            Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
                             Target::Spv, true, GetParam().entryPoint,
                             "/baseResults/", true, true);
 }
@@ -185,6 +186,7 @@
         {"hlsl.depthLess.frag", "PixelShaderFunction"},
         {"hlsl.discard.frag", "PixelShaderFunction"},
         {"hlsl.doLoop.frag", "PixelShaderFunction"},
+        {"hlsl.earlydepthstencil.frag", "main"},
         {"hlsl.emptystructreturn.frag", "main"},
         {"hlsl.emptystructreturn.vert", "main"},
         {"hlsl.emptystruct.init.vert", "main"},
@@ -228,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"},
@@ -347,8 +350,10 @@
         {"hlsl.semicolons.frag", "main"},
         {"hlsl.shapeConv.frag", "main"},
         {"hlsl.shapeConvRet.frag", "main"},
+        {"hlsl.singleArgIntPromo.vert", "main"},
         {"hlsl.self_cast.frag", "main"},
         {"hlsl.snorm.uav.comp", "main"},
+        {"hlsl.specConstant.frag", "main"},
         {"hlsl.staticMemberFunction.frag", "main"},
         {"hlsl.staticFuncInit.frag", "main"},
         {"hlsl.store.rwbyteaddressbuffer.type.comp", "main"},
diff --git a/gtests/Link.FromFile.Vk.cpp b/gtests/Link.FromFile.Vk.cpp
old mode 100644
new mode 100755
index 4a88203..a43edcf
--- a/gtests/Link.FromFile.Vk.cpp
+++ b/gtests/Link.FromFile.Vk.cpp
@@ -50,6 +50,7 @@
     const size_t fileCount = fileNames.size();
     const EShMessages controls = DeriveOptions(Source::GLSL, Semantics::Vulkan, Target::AST);
     GlslangResult result;
+    result.validationResult = false;
 
     // Compile each input shader file.
     bool success = true;
@@ -108,7 +109,17 @@
     ::testing::ValuesIn(std::vector<std::vector<std::string>>({
         {"link1.vk.frag", "link2.vk.frag"},
         {"spv.unit1.frag", "spv.unit2.frag", "spv.unit3.frag"},
-    })),
+		{"link.vk.matchingPC.0.0.frag", "link.vk.matchingPC.0.1.frag",
+			"link.vk.matchingPC.0.2.frag"},
+		{"link.vk.differentPC.0.0.frag", "link.vk.differentPC.0.1.frag",
+			"link.vk.differentPC.0.2.frag"},
+		{"link.vk.differentPC.1.0.frag", "link.vk.differentPC.1.1.frag",
+			"link.vk.differentPC.1.2.frag"},
+        {"link.vk.pcNamingValid.0.0.vert", "link.vk.pcNamingValid.0.1.vert"},
+        {"link.vk.pcNamingInvalid.0.0.vert", "link.vk.pcNamingInvalid.0.1.vert"},
+        {"link.vk.multiBlocksValid.0.0.vert", "link.vk.multiBlocksValid.0.1.vert"},
+        {"link.vk.multiBlocksValid.1.0.geom", "link.vk.multiBlocksValid.1.1.geom"},
+    }))
 );
 // clang-format on
 
diff --git a/gtests/Link.FromFile.cpp b/gtests/Link.FromFile.cpp
old mode 100644
new mode 100755
index 49d021a..dc9bb76
--- a/gtests/Link.FromFile.cpp
+++ b/gtests/Link.FromFile.cpp
@@ -100,8 +100,12 @@
         {"150.tesc", "150.tese", "400.tesc", "400.tese", "410.tesc", "420.tesc", "420.tese"},
         {"max_vertices_0.geom"},
         {"es-link1.frag", "es-link2.frag"},
-        {"missingBodies.vert"}
-    })),
+        {"missingBodies.vert"},
+        {"link.multiAnonBlocksInvalid.0.0.vert", "link.multiAnonBlocksInvalid.0.1.vert"},
+        {"link.multiAnonBlocksValid.0.0.vert", "link.multiAnonBlocksValid.0.1.vert"},
+        {"link.multiBlocksInvalid.0.0.vert", "link.multiBlocksInvalid.0.1.vert"},
+        {"link.multiBlocksValid.1.0.vert", "link.multiBlocksValid.1.1.vert"},
+    }))
 );
 // clang-format on
 
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index 170f985..1d061fb 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -1,5 +1,6 @@
  //
 // Copyright (C) 2016 Google, Inc.
+// Copyright (C) 2019 ARM Limited.
 //
 // All rights reserved.
 //
@@ -63,20 +64,18 @@
 }
 
 using CompileVulkanToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
+using CompileVulkanToSpirvDeadCodeElimTest = GlslangTest<::testing::TestWithParam<std::string>>;
 using CompileVulkanToDebugSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
 using CompileVulkan1_1ToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
+using CompileToSpirv14Test = GlslangTest<::testing::TestWithParam<std::string>>;
 using CompileOpenGLToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
 using VulkanSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
 using OpenGLSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
 using VulkanAstSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
 using HlslIoMap = GlslangTest<::testing::TestWithParam<IoMapData>>;
 using GlslIoMap = GlslangTest<::testing::TestWithParam<IoMapData>>;
-#ifdef AMD_EXTENSIONS
 using CompileVulkanToSpirvTestAMD = GlslangTest<::testing::TestWithParam<std::string>>;
-#endif
-#ifdef NV_EXTENSIONS
 using CompileVulkanToSpirvTestNV = GlslangTest<::testing::TestWithParam<std::string>>;
-#endif
 using CompileUpgradeTextureToSampledTextureAndDropSamplersTest = GlslangTest<::testing::TestWithParam<std::string>>;
 
 // Compiling GLSL to SPIR-V under Vulkan semantics. Expected to successfully
@@ -84,7 +83,14 @@
 TEST_P(CompileVulkanToSpirvTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
+                            Target::Spv);
+}
+
+TEST_P(CompileVulkanToSpirvDeadCodeElimTest, FromFile)
+{
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
                             Target::Spv);
 }
 
@@ -94,15 +100,23 @@
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
                             Source::GLSL, Semantics::Vulkan,
-                            glslang::EShTargetVulkan_1_0,
+                            glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
                             Target::Spv, true, "",
                             "/baseResults/", false, true);
 }
 
+
 TEST_P(CompileVulkan1_1ToSpirvTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_1,
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_1, glslang::EShTargetSpv_1_3,
+                            Target::Spv);
+}
+
+TEST_P(CompileToSpirv14Test, FromFile)
+{
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_1, glslang::EShTargetSpv_1_4,
                             Target::Spv);
 }
 
@@ -111,7 +125,7 @@
 TEST_P(CompileOpenGLToSpirvTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
+                            Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
                             Target::Spv);
 }
 
@@ -120,7 +134,7 @@
 TEST_P(VulkanSemantics, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
                             Target::Spv, false);
 }
 
@@ -129,7 +143,7 @@
 TEST_P(OpenGLSemantics, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
+                            Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
                             Target::Spv, false);
 }
 
@@ -137,7 +151,7 @@
 TEST_P(VulkanAstSemantics, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
                             Target::AST);
 }
 
@@ -171,27 +185,23 @@
                                  GetParam().flattenUniforms);
 }
 
-#ifdef AMD_EXTENSIONS
 // Compiling GLSL to SPIR-V under Vulkan semantics (AMD extensions enabled).
 // Expected to successfully generate SPIR-V.
 TEST_P(CompileVulkanToSpirvTestAMD, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
                             Target::Spv);
 }
-#endif
 
-#ifdef NV_EXTENSIONS
 // Compiling GLSL to SPIR-V under Vulkan semantics (NV extensions enabled).
 // Expected to successfully generate SPIR-V.
 TEST_P(CompileVulkanToSpirvTestNV, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
                             Target::Spv);
 }
-#endif
 
 TEST_P(CompileUpgradeTextureToSampledTextureAndDropSamplersTest, FromFile)
 {
@@ -220,6 +230,14 @@
         "spv.while-continue-break.vert",
         "spv.while-simple.vert",
         // vulkan-specific tests
+        "rayQuery.rgen",
+        "rayQuery-no-cse.rgen",
+        "rayQuery-initialize.rgen",
+        "rayQuery-allOps.rgen",
+        "rayQuery-allOps.Error.rgen",
+        "rayQuery-committed.Error.rgen",
+        "rayQuery-allOps.comp",
+        "rayQuery-allOps.frag",
         "spv.set.vert",
         "spv.double.comp",
         "spv.100ops.frag",
@@ -255,12 +273,14 @@
         "spv.8bitstorage_Error-uint.frag",
         "spv.8bitstorage-ubo.vert",
         "spv.8bitstorage-ssbo.vert",
+        "spv.8bit-16bit-construction.frag",
         "spv.accessChain.frag",
         "spv.aggOps.frag",
         "spv.always-discard.frag",
         "spv.always-discard2.frag",
         "spv.arbPostDepthCoverage.frag",
         "spv.arbPostDepthCoverage_Error.frag",
+        "spv.atomicCounter.comp",
         "spv.bitCast.frag",
         "spv.bool.vert",
         "spv.boolInBlock.frag",
@@ -272,6 +292,10 @@
         "spv.bufferhandle13.frag",
         "spv.bufferhandle14.frag",
         "spv.bufferhandle15.frag",
+        "spv.bufferhandle16.frag",
+        "spv.bufferhandle17_Errors.frag",
+        "spv.bufferhandle18.frag",
+        "spv.bufferhandle19_Errors.frag",
         "spv.bufferhandle2.frag",
         "spv.bufferhandle3.frag",
         "spv.bufferhandle4.frag",
@@ -280,15 +304,24 @@
         "spv.bufferhandle7.frag",
         "spv.bufferhandle8.frag",
         "spv.bufferhandle9.frag",
+        "spv.bufferhandleUvec2.frag",
         "spv.bufferhandle_Error.frag",
         "spv.builtInXFB.vert",
+        "spv.conditionalDemote.frag",
         "spv.conditionalDiscard.frag",
+        "spv.constructComposite.comp",
         "spv.constStruct.vert",
+        "spv.constConstruct.vert",
         "spv.controlFlowAttributes.frag",
         "spv.conversion.frag",
+        "spv.coopmat.comp",
+        "spv.coopmat_Error.comp",
         "spv.dataOut.frag",
         "spv.dataOutIndirect.frag",
         "spv.dataOutIndirect.vert",
+        "spv.debugPrintf.frag",
+        "spv.debugPrintf_Error.frag",
+        "spv.demoteDisabled.frag",
         "spv.deepRvalue.frag",
         "spv.depthOut.frag",
         "spv.discard-dce.frag",
@@ -296,6 +329,22 @@
         "spv.earlyReturnDiscard.frag",
         "spv.extPostDepthCoverage.frag",
         "spv.extPostDepthCoverage_Error.frag",
+        "spv.ext.AnyHitShader.rahit",
+        "spv.ext.AnyHitShader_Errors.rahit",
+        "spv.ext.ClosestHitShader.rchit",
+        "spv.ext.ClosestHitShader_Errors.rchit",
+        "spv.ext.IntersectShader.rint",
+        "spv.ext.IntersectShader_Errors.rint",
+        "spv.ext.MissShader.rmiss",
+        "spv.ext.MissShader_Errors.rmiss",
+        "spv.ext.RayCallable.rcall",
+        "spv.ext.RayCallable_Errors.rcall",
+        "spv.ext.RayConstants.rgen",
+        "spv.ext.RayGenShader.rgen",
+        "spv.ext.RayGenShader11.rgen",
+        "spv.ext.RayGenShaderArray.rgen",
+        "spv.float16convertonlyarith.comp",
+        "spv.float16convertonlystorage.comp",
         "spv.flowControl.frag",
         "spv.forLoop.frag",
         "spv.forwardFun.frag",
@@ -303,13 +352,17 @@
         "spv.fragmentDensity.vert",
         "spv.fragmentDensity-es.frag",
         "spv.fragmentDensity-neg.frag",
+        "spv.fsi.frag",
+        "spv.fsi_Error.frag",
         "spv.fullyCovered.frag",
         "spv.functionCall.frag",
         "spv.functionNestedOpaque.vert",
         "spv.functionSemantics.frag",
+        "spv.functionParameterTypes.frag",
         "spv.GeometryShaderPassthrough.geom",
         "spv.interpOps.frag",
         "spv.int64.frag",
+        "spv.intcoopmat.comp",
         "spv.intOps.vert",
         "spv.layoutNested.vert",
         "spv.length.frag",
@@ -327,6 +380,10 @@
         "spv.noDeadDecorations.vert",
         "spv.nonSquare.vert",
         "spv.nonuniform.frag",
+        "spv.nonuniform2.frag",
+        "spv.nonuniform3.frag",
+        "spv.nonuniform4.frag",
+        "spv.nonuniform5.frag",
         "spv.noWorkgroup.comp",
         "spv.offsets.frag",
         "spv.Operations.frag",
@@ -334,6 +391,7 @@
         "spv.precision.frag",
         "spv.precisionNonESSamp.frag",
         "spv.prepost.frag",
+        "spv.privateVariableTypes.frag",
         "spv.qualifiers.vert",
         "spv.sample.frag",
         "spv.sampleId.frag",
@@ -385,12 +443,32 @@
         "spv.storageBuffer.vert",
         "spv.precise.tese",
         "spv.precise.tesc",
+        "spv.volatileAtomic.comp",
         "spv.vulkan100.subgroupArithmetic.comp",
         "spv.vulkan100.subgroupPartitioned.comp",
         "spv.xfb.vert",
         "spv.xfb2.vert",
         "spv.xfb3.vert",
         "spv.samplerlessTextureFunctions.frag",
+        "spv.smBuiltins.vert",
+        "spv.smBuiltins.frag",
+    })),
+    FileNameAsCustomTestSuffix
+);
+
+// Cases with deliberately unreachable code.
+// By default the compiler will aggressively eliminate
+// unreachable merges and continues.
+INSTANTIATE_TEST_CASE_P(
+    GlslWithDeadCode, CompileVulkanToSpirvDeadCodeElimTest,
+    ::testing::ValuesIn(std::vector<std::string>({
+        "spv.dead-after-continue.vert",
+        "spv.dead-after-discard.frag",
+        "spv.dead-after-return.vert",
+        "spv.dead-after-loop-break.vert",
+        "spv.dead-after-switch-break.vert",
+        "spv.dead-complex-continue-after-return.vert",
+        "spv.dead-complex-merge-after-return.vert",
     })),
     FileNameAsCustomTestSuffix
 );
@@ -410,6 +488,7 @@
     ::testing::ValuesIn(std::vector<std::string>({
         "spv.1.3.8bitstorage-ubo.vert",
         "spv.1.3.8bitstorage-ssbo.vert",
+        "spv.1.3.coopmat.comp",
         "spv.deviceGroup.frag",
         "spv.drawParams.vert",
         "spv.int8.frag",
@@ -438,6 +517,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
@@ -445,6 +540,25 @@
 
 // clang-format off
 INSTANTIATE_TEST_CASE_P(
+    Glsl, CompileToSpirv14Test,
+    ::testing::ValuesIn(std::vector<std::string>({
+        "spv.1.4.LoopControl.frag",
+        "spv.1.4.NonWritable.frag",
+        "spv.1.4.OpEntryPoint.frag",
+        "spv.1.4.OpSelect.frag",
+        "spv.1.4.OpCopyLogical.comp",
+        "spv.1.4.OpCopyLogicalBool.comp",
+        "spv.1.4.OpCopyLogical.funcall.frag",
+        "spv.1.4.image.frag",
+        "spv.1.4.sparseTexture.frag",
+        "spv.1.4.texture.frag",
+        "spv.1.4.constructComposite.comp",
+    })),
+    FileNameAsCustomTestSuffix
+);
+
+// clang-format off
+INSTANTIATE_TEST_CASE_P(
     Hlsl, HlslIoMap,
     ::testing::ValuesIn(std::vector<IoMapData>{
         { "spv.register.autoassign.frag", "main_ep", 5, 10, 0, 20, 30, true, false },
@@ -484,6 +598,7 @@
         "spv.glFragColor.frag",
         "spv.rankShift.comp",
         "spv.specConst.vert",
+        "spv.specTexture.frag",
         "spv.OVR_multiview.vert",
         "spv.xfbOffsetOnBlockMembersAssignment.vert",
         "spv.xfbOffsetOnStructMembersAssignment.vert",
@@ -500,6 +615,7 @@
         "vulkan.vert",
         "vulkan.comp",
         "samplerlessTextureFunctions.frag",
+        "spv.specConstArrayCheck.vert",
     })),
     FileNameAsCustomTestSuffix
 );
@@ -524,10 +640,10 @@
     FileNameAsCustomTestSuffix
 );
 
-#ifdef AMD_EXTENSIONS
 INSTANTIATE_TEST_CASE_P(
     Glsl, CompileVulkanToSpirvTestAMD,
     ::testing::ValuesIn(std::vector<std::string>({
+        "spv.16bitxfb.vert",
         "spv.float16.frag",
         "spv.float16Fetch.frag",
         "spv.imageLoadStoreLod.frag",
@@ -539,9 +655,7 @@
     })),
     FileNameAsCustomTestSuffix
 );
-#endif
 
-#ifdef NV_EXTENSIONS
 INSTANTIATE_TEST_CASE_P(
     Glsl, CompileVulkanToSpirvTestNV,
     ::testing::ValuesIn(std::vector<std::string>({
@@ -556,6 +670,7 @@
     "spv.atomicInt64.comp",
     "spv.shadingRate.frag",
     "spv.RayGenShader.rgen",
+    "spv.RayGenShaderArray.rgen",
     "spv.RayGenShader_Errors.rgen",
     "spv.RayConstants.rgen",
     "spv.IntersectShader.rint",
@@ -577,6 +692,7 @@
     "spv.meshShaderUserDefined.mesh",
     "spv.meshShaderPerViewBuiltins.mesh",
     "spv.meshShaderPerViewUserDefined.mesh",
+    "spv.meshShaderPerView_Errors.mesh",
     "spv.meshShaderSharedMem.mesh",
     "spv.meshShaderTaskMem.mesh",
     "spv.320.meshShaderUserDefined.mesh",
@@ -587,7 +703,6 @@
 })),
 FileNameAsCustomTestSuffix
 );
-#endif
 
 INSTANTIATE_TEST_CASE_P(
     Glsl, CompileUpgradeTextureToSampledTextureAndDropSamplersTest,
diff --git a/gtests/TestFixture.cpp b/gtests/TestFixture.cpp
index d899c78..ced6fcc 100644
--- a/gtests/TestFixture.cpp
+++ b/gtests/TestFixture.cpp
@@ -60,24 +60,22 @@
         return EShLangFragment;
     } else if (stage == "comp") {
         return EShLangCompute;
-#ifdef NV_EXTENSIONS
     } else if (stage == "rgen") {
-        return EShLangRayGenNV;
+        return EShLangRayGen;
     } else if (stage == "rint") {
-        return EShLangIntersectNV;
+        return EShLangIntersect;
     } else if (stage == "rahit") {
-        return EShLangAnyHitNV;
+        return EShLangAnyHit;
     } else if (stage == "rchit") {
-        return EShLangClosestHitNV;
+        return EShLangClosestHit;
     } else if (stage == "rmiss") {
-        return EShLangMissNV;
+        return EShLangMiss;
     } else if (stage == "rcall") {
-        return EShLangCallableNV;
+        return EShLangCallable;
     } else if (stage == "task") {
         return EShLangTaskNV;
     } else if (stage == "mesh") {
         return EShLangMeshNV;
-#endif
     } else {
         assert(0 && "Unknown shader stage");
         return EShLangCount;
diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h
old mode 100644
new mode 100755
index 6bca38e..8d2ebd9
--- a/gtests/TestFixture.h
+++ b/gtests/TestFixture.h
@@ -113,7 +113,7 @@
           forceVersionProfile(false),
           isForwardCompatible(false) {
         // Perform validation by default.
-        validatorOptions.validate = true;
+        spirvOptions.validate = true;
     }
 
     // Tries to load the contents from the file at the given |path|. On success,
@@ -212,6 +212,7 @@
             const std::string& shaderName, const std::string& code,
             const std::string& entryPointName, EShMessages controls,
             glslang::EShTargetClientVersion clientTargetVersion,
+            glslang::EShTargetLanguageVersion targetLanguageVersion,
             bool flattenUniformArrays = false,
             EShTextureSamplerTransformMode texSampTransMode = EShTexSampTransKeep,
             bool enableOptimizer = false,
@@ -226,7 +227,9 @@
             shader.setAutoMapBindings(true);
         }
         shader.setTextureSamplerTransformMode(texSampTransMode);
+#ifdef ENABLE_HLSL
         shader.setFlattenUniformArrays(flattenUniformArrays);
+#endif
 
         if (controls & EShMsgSpvRules) {
             if (controls & EShMsgVulkanRules) {
@@ -234,9 +237,7 @@
                                                                : glslang::EShSourceGlsl,
                                     stage, glslang::EShClientVulkan, 100);
                 shader.setEnvClient(glslang::EShClientVulkan, clientTargetVersion);
-                shader.setEnvTarget(glslang::EShTargetSpv,
-                        clientTargetVersion == glslang::EShTargetVulkan_1_1 ? glslang::EShTargetSpv_1_3
-                                                                            : glslang::EShTargetSpv_1_0);
+                shader.setEnvTarget(glslang::EShTargetSpv, targetLanguageVersion);
             } else {
                 shader.setEnvInput((controls & EShMsgReadHlsl) ? glslang::EShSourceHlsl
                                                                : glslang::EShSourceGlsl,
@@ -301,7 +302,9 @@
         shader.setShiftSsboBinding(baseSsboBinding);
         shader.setAutoMapBindings(autoMapBindings);
         shader.setAutoMapLocations(true);
+#ifdef ENABLE_HLSL
         shader.setFlattenUniformArrays(flattenUniformArrays);
+#endif
 
         bool success = compile(&shader, code, entryPointName, controls);
 
@@ -309,7 +312,9 @@
         program.addShader(&shader);
         
         success &= program.link(controls);
+#ifndef GLSLANG_WEB
         success &= program.mapIO();
+#endif
 
         spv::SpvBuildLogger logger;
 
@@ -429,6 +434,7 @@
                                  Source source,
                                  Semantics semantics,
                                  glslang::EShTargetClientVersion clientTargetVersion,
+                                 glslang::EShTargetLanguageVersion targetLanguageVersion,
                                  Target target,
                                  bool automap = true,
                                  const std::string& entryPointName="",
@@ -449,8 +455,8 @@
             controls = static_cast<EShMessages>(controls & ~EShMsgHlslLegalization);
         if (enableDebug)
             controls = static_cast<EShMessages>(controls | EShMsgDebugInfo);
-        GlslangResult result = compileAndLink(testName, input, entryPointName, controls, clientTargetVersion, false,
-                                              EShTexSampTransKeep, enableOptimizer, enableDebug, automap);
+        GlslangResult result = compileAndLink(testName, input, entryPointName, controls, clientTargetVersion,
+            targetLanguageVersion, false, EShTexSampTransKeep, enableOptimizer, enableDebug, automap);
 
         // Generate the hybrid output in the way of glslangValidator.
         std::ostringstream stream;
@@ -460,11 +466,12 @@
                                     expectedOutputFname, result.spirvWarningsErrors);
     }
 
-	void loadFileCompileAndCheckWithOptions(const std::string &testDir, 
-											const std::string &testName, 
-											Source source,
-											Semantics semantics, 
-											glslang::EShTargetClientVersion clientTargetVersion,
+    void loadFileCompileAndCheckWithOptions(const std::string &testDir,
+                                            const std::string &testName,
+                                            Source source,
+                                            Semantics semantics,
+                                            glslang::EShTargetClientVersion clientTargetVersion,
+                                            glslang::EShTargetLanguageVersion targetLanguageVersion,
                                             Target target, bool automap = true, const std::string &entryPointName = "",
                                             const std::string &baseDir = "/baseResults/",
                                             const EShMessages additionalOptions = EShMessages::EShMsgDefault)
@@ -478,15 +485,15 @@
 
         EShMessages controls = DeriveOptions(source, semantics, target);
         controls = static_cast<EShMessages>(controls | additionalOptions);
-        GlslangResult result = compileAndLink(testName, input, entryPointName, controls, clientTargetVersion, false,
-                                              EShTexSampTransKeep, false, automap);
+        GlslangResult result = compileAndLink(testName, input, entryPointName, controls, clientTargetVersion,
+            targetLanguageVersion, false, EShTexSampTransKeep, false, automap);
 
         // Generate the hybrid output in the way of glslangValidator.
         std::ostringstream stream;
         outputResultToStream(&stream, result, controls);
 
         checkEqAndUpdateIfRequested(expectedOutput, stream.str(), expectedOutputFname);
-	}
+    }
 
     void loadFileCompileFlattenUniformsAndCheck(const std::string& testDir,
                                                 const std::string& testName,
@@ -505,7 +512,7 @@
 
         const EShMessages controls = DeriveOptions(source, semantics, target);
         GlslangResult result = compileAndLink(testName, input, entryPointName, controls,
-                                              glslang::EShTargetVulkan_1_0, true);
+                                              glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0, true);
 
         // Generate the hybrid output in the way of glslangValidator.
         std::ostringstream stream;
@@ -675,7 +682,7 @@
 
         const EShMessages controls = DeriveOptions(source, semantics, target);
         GlslangResult result = compileAndLink(testName, input, entryPointName, controls,
-                                              glslang::EShTargetVulkan_1_0, false,
+                                              glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0, false,
                                               EShTexSampTransUpgradeTextureRemoveSampler);
 
         // Generate the hybrid output in the way of glslangValidator.
@@ -686,14 +693,14 @@
                                     expectedOutputFname, result.spirvWarningsErrors);
     }
 
-    glslang::SpvOptions& options() { return validatorOptions; }
+    glslang::SpvOptions& options() { return spirvOptions; }
 
 private:
     const int defaultVersion;
     const EProfile defaultProfile;
     const bool forceVersionProfile;
     const bool isForwardCompatible;
-    glslang::SpvOptions validatorOptions;
+    glslang::SpvOptions spirvOptions;
 };
 
 }  // namespace glslangtest
diff --git a/hlsl/CMakeLists.txt b/hlsl/CMakeLists.txt
index f918d7a..ae0d4d4 100644
--- a/hlsl/CMakeLists.txt
+++ b/hlsl/CMakeLists.txt
@@ -33,11 +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})
+                LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+                RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
     else()
-        install(TARGETS HLSL
+        install(TARGETS HLSL EXPORT HLSLTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endif()
+	install(EXPORT HLSLTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/hlsl/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 277d33a..47ced29
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -1197,7 +1197,7 @@
     TSampler sampler;
     sampler.set(txType.getBasicType(), dim, false, isShadow, false);
 
-	if (!parseContext.setTextureReturnType(sampler, txType, token.loc))
+    if (!parseContext.setTextureReturnType(sampler, txType, token.loc))
         return false;
 
     type.shallowCopy(TType(sampler, EvqUniform, arraySizes));
@@ -1489,7 +1489,7 @@
     case EHTokSampler3d:              // ...
     case EHTokSamplerCube:            // ...
         if (parseContext.hlslDX9Compatible())
-			return acceptSamplerTypeDX9(type);
+            return acceptSamplerTypeDX9(type);
         else
             return acceptSamplerType(type);
         break;
@@ -2516,6 +2516,8 @@
 //
 bool HlslGrammar::acceptFunctionParameters(TFunction& function)
 {
+    parseContext.beginParameterParsing(function);
+
     // LEFT_PAREN
     if (! acceptTokenClass(EHTokLeftParen))
         return false;
@@ -3221,6 +3223,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
index d6dc2e8..2dc173f 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -39,6 +39,7 @@
 #include "hlslGrammar.h"
 #include "hlslAttributes.h"
 
+#include "../glslang/Include/Common.h"
 #include "../glslang/MachineIndependent/Scan.h"
 #include "../glslang/MachineIndependent/preprocessor/PpContext.h"
 
@@ -68,7 +69,8 @@
     clipDistanceOutput(nullptr),
     cullDistanceOutput(nullptr),
     clipDistanceInput(nullptr),
-    cullDistanceInput(nullptr)
+    cullDistanceInput(nullptr),
+    parsingEntrypointParameters(false)
 {
     globalUniformDefaults.clear();
     globalUniformDefaults.layoutMatrix = ElmRowMajor;
@@ -133,7 +135,7 @@
         // Print a message formated such that if you click on the message it will take you right to
         // the line through most UIs.
         const glslang::TSourceLoc& sourceLoc = input.getSourceLoc();
-        infoSink.info << sourceLoc.name->c_str() << "(" << sourceLoc.line << "): error at column " << sourceLoc.column
+        infoSink.info << sourceLoc.getFilenameStr() << "(" << sourceLoc.line << "): error at column " << sourceLoc.column
                       << ", HLSL parsing failed.\n";
         ++numErrors;
         return false;
@@ -653,10 +655,6 @@
         return nullptr;
     }
 
-    // Error check for requiring specific extensions present.
-    if (symbol && symbol->getNumExtensions())
-        requireExtensions(loc, symbol->getNumExtensions(), symbol->getExtensions(), symbol->getName().c_str());
-
     const TVariable* variable = nullptr;
     const TAnonMember* anon = symbol ? symbol->getAsAnonMember() : nullptr;
     TIntermTyped* node = nullptr;
@@ -759,9 +757,6 @@
     // indexStructBufferContent returns nullptr if it isn't a structuredbuffer (SSBO).
     TIntermTyped* sbArray = indexStructBufferContent(loc, base);
     if (sbArray != nullptr) {
-        if (sbArray == nullptr)
-            return nullptr;
-
         // Now we'll apply the [] index to that array
         const TOperator idxOp = (index->getQualifier().storage == EvqConst) ? EOpIndexDirect : EOpIndexIndirect;
 
@@ -819,7 +814,8 @@
                   base->getAsSymbolNode()->getName().c_str(), "");
         else
             error(loc, " left of '[' is not of type array, matrix, or vector ", "expression", "");
-    } else if (base->getType().getQualifier().storage == EvqConst && index->getQualifier().storage == EvqConst) {
+    } else if (base->getType().getQualifier().isFrontEndConstant() && 
+               index->getQualifier().isFrontEndConstant()) {
         // both base and index are front-end constants
         checkIndex(loc, base->getType(), indexValue);
         return intermediate.foldDereference(base, indexValue, loc);
@@ -1872,6 +1868,9 @@
             }
             break;
         }
+        case EatEarlyDepthStencil:
+            intermediate.setEarlyFragmentTests();
+            break;
         case EatBuiltIn:
         case EatLocation:
             // tolerate these because of dual use of entrypoint and type attributes
@@ -1899,13 +1898,16 @@
             // location
             if (it->getInt(value))
                 type.getQualifier().layoutLocation = value;
+            else
+                error(loc, "needs a literal integer", "location", "");
             break;
         case EatBinding:
             // binding
             if (it->getInt(value)) {
                 type.getQualifier().layoutBinding = value;
                 type.getQualifier().layoutSet = 0;
-            }
+            } else
+                error(loc, "needs a literal integer", "binding", "");
             // set
             if (it->getInt(value, 1))
                 type.getQualifier().layoutSet = value;
@@ -1914,7 +1916,9 @@
             // global cbuffer binding
             if (it->getInt(value))
                 globalUniformBinding = value;
-            // global cbuffer binding
+            else
+                error(loc, "needs a literal integer", "global binding", "");
+            // global cbuffer set
             if (it->getInt(value, 1))
                 globalUniformSet = value;
             break;
@@ -1922,6 +1926,8 @@
             // input attachment
             if (it->getInt(value))
                 type.getQualifier().layoutAttachment = value;
+            else
+                error(loc, "needs a literal integer", "input attachment", "");
             break;
         case EatBuiltIn:
             // PointSize built-in
@@ -1942,6 +1948,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", "", "");
@@ -1995,7 +2047,7 @@
     };
 
     // if we aren't in the entry point, fix the IO as such and exit
-    if (userFunction.getName().compare(intermediate.getEntryPointName().c_str()) != 0) {
+    if (! isEntrypointName(userFunction.getName())) {
         remapNonEntryPointIO(userFunction);
         return nullptr;
     }
@@ -3129,7 +3181,7 @@
         if (textureShadowEntry != textureShadowVariant.end())
             newId = textureShadowEntry->second->get(shadowMode);
         else
-            textureShadowVariant[texSymbol->getId()] = new tShadowTextureSymbols;
+            textureShadowVariant[texSymbol->getId()] = NewPoolObject(tShadowTextureSymbols(), 1);
 
         // Sometimes we have to create another symbol (if this texture has been seen before,
         // and we haven't created the form for this shadow mode).
@@ -3208,7 +3260,7 @@
     TType blockType;
     counterBufferType(loc, blockType);
 
-    TString* blockName = new TString(intermediate.addCounterBufferName(name));
+    TString* blockName = NewPoolTString(intermediate.addCounterBufferName(name).c_str());
 
     // Counter buffer is not yet in use
     structBufferCounter[*blockName] = false;
@@ -3255,7 +3307,8 @@
     if (argAggregate) {
         if (argAggregate->getSequence().empty())
             return;
-        bufferObj = argAggregate->getSequence()[0]->getAsTyped();
+        if (argAggregate->getSequence()[0])
+            bufferObj = argAggregate->getSequence()[0]->getAsTyped();
     } else {
         bufferObj = arguments->getAsSymbolNode();
     }
@@ -3754,7 +3807,8 @@
             if (arguments->getAsTyped()->getBasicType() != EbtSampler)
                 return;
         } else {
-            if (argAggregate->getSequence().size() == 0 ||
+            if (argAggregate->getSequence().size() == 0 || 
+                argAggregate->getSequence()[0] == nullptr ||
                 argAggregate->getSequence()[0]->getAsTyped()->getBasicType() != EbtSampler)
                 return;
         }
@@ -4605,7 +4659,7 @@
         if (nullptr == symbol) {
             type.getQualifier().builtIn = builtin;
 
-            TVariable* variable = new TVariable(new TString(name), type);
+            TVariable* variable = new TVariable(NewPoolTString(name), type);
 
             symbolTable.insert(*variable);
 
@@ -5293,7 +5347,7 @@
 
             TIntermTyped* arg0 = nullptr;
 
-            if (aggregate && aggregate->getSequence().size() > 0)
+            if (aggregate && aggregate->getSequence().size() > 0 && aggregate->getSequence()[0])
                 arg0 = aggregate->getSequence()[0]->getAsTyped();
             else if (arguments->getAsSymbolNode())
                 arg0 = arguments->getAsSymbolNode();
@@ -5321,11 +5375,6 @@
             //  - a built-in function not mapped to an operator, or
             //  - a user function.
 
-            // Error check for a function requiring specific extensions present.
-            if (builtIn && fnCandidate->getNumExtensions())
-                requireExtensions(loc, fnCandidate->getNumExtensions(), fnCandidate->getExtensions(),
-                                  fnCandidate->getName().c_str());
-
             // turn an implicit member-function resolution into an explicit call
             TString callerName;
             if (thisDepth == 0)
@@ -5767,7 +5816,7 @@
         std::any_of(aggregate->getSequence().begin(),
                     aggregate->getSequence().end(),
                     [this](const TIntermNode* node) {
-                        return (node->getAsTyped() != nullptr) && hasStructBuffCounter(node->getAsTyped()->getType());
+                        return (node && node->getAsTyped() != nullptr) && hasStructBuffCounter(node->getAsTyped()->getType());
                     });
 
     // Nothing to do, if we didn't find one.
@@ -7520,7 +7569,7 @@
 
         if (args->getAsAggregate()) {
             // Handle aggregates: put all args into the new function call
-            for (int arg=0; arg<int(args->getAsAggregate()->getSequence().size()); ++arg) {
+            for (int arg = 0; arg < int(args->getAsAggregate()->getSequence().size()); ++arg) {
                 // TODO: But for constness, we could avoid the new & shallowCopy, and use the pointer directly.
                 TParameter param = { 0, new TType, nullptr };
                 param.type->shallowCopy(args->getAsAggregate()->getSequence()[arg]->getAsTyped()->getType());
@@ -8697,13 +8746,20 @@
     int nextOffset = qualifier.layoutXfbOffset;
     for (unsigned int member = 0; member < typeList.size(); ++member) {
         TQualifier& memberQualifier = typeList[member].type->getQualifier();
-        bool containsDouble = false;
-        int memberSize = intermediate.computeTypeXfbSize(*typeList[member].type, containsDouble);
+        bool contains64BitType = false;
+        bool contains32BitType = false;
+        bool contains16BitType = false;
+        int memberSize = intermediate.computeTypeXfbSize(*typeList[member].type, contains64BitType, contains32BitType, contains16BitType);
         // see if we need to auto-assign an offset to this member
         if (! memberQualifier.hasXfbOffset()) {
-            // "if applied to an aggregate containing a double, the offset must also be a multiple of 8"
-            if (containsDouble)
+            // "if applied to an aggregate containing a double or 64-bit integer, the offset must also be a multiple of 8"
+            if (contains64BitType)
                 RoundToPow2(nextOffset, 8);
+            else if (contains32BitType)
+                RoundToPow2(nextOffset, 4);
+            // "if applied to an aggregate containing a half float or 16-bit integer, the offset must also be a multiple of 2"
+            else if (contains16BitType)
+                RoundToPow2(nextOffset, 2);
             memberQualifier.layoutXfbOffset = nextOffset;
         } else
             nextOffset = memberQualifier.layoutXfbOffset;
@@ -8826,6 +8882,10 @@
 //
 bool HlslParseContext::handleInputGeometry(const TSourceLoc& loc, const TLayoutGeometry& geometry)
 {
+    // these can be declared on non-entry-points, in which case they lose their meaning
+    if (! parsingEntrypointParameters)
+        return true;
+
     switch (geometry) {
     case ElgPoints:             // fall through
     case ElgLines:              // ...
@@ -8856,6 +8916,10 @@
     if (language != EShLangGeometry)
         return true;
 
+    // these can be declared on non-entry-points, in which case they lose their meaning
+    if (! parsingEntrypointParameters)
+        return true;
+
     switch (geometry) {
     case ElgPoints:
     case ElgLineStrip:
diff --git a/hlsl/hlslParseHelper.h b/hlsl/hlslParseHelper.h
old mode 100755
new mode 100644
index 822de89..6f41661
--- a/hlsl/hlslParseHelper.h
+++ b/hlsl/hlslParseHelper.h
@@ -183,6 +183,11 @@
     void getFullNamespaceName(TString*&) const;
     void addScopeMangler(TString&);
 
+    void beginParameterParsing(TFunction& function)
+    {
+        parsingEntrypointParameters = isEntrypointName(function.getName());
+    }
+
     void pushSwitchSequence(TIntermSequence* sequence) { switchSequenceStack.push_back(sequence); }
     void popSwitchSequence() { switchSequenceStack.pop_back(); }
 
@@ -241,6 +246,7 @@
     TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer, TIntermTyped* scalarInit);
     bool isScalarConstructor(const TIntermNode*);
     TOperator mapAtomicOp(const TSourceLoc& loc, TOperator op, bool isImage);
+    bool isEntrypointName(const TString& name) { return name.compare(intermediate.getEntryPointName().c_str()) == 0; }
 
     // Return true if this node requires L-value conversion (e.g, to an imageStore).
     bool shouldConvertLValue(const TIntermNode*) const;
@@ -494,6 +500,7 @@
     };
 
     TMap<int, tShadowTextureSymbols*> textureShadowVariant;
+    bool parsingEntrypointParameters;
 };
 
 // This is the prefix we use for built-in methods to avoid namespace collisions with
diff --git a/known_good.json b/known_good.json
index e1a1120..9cc8c44 100644
--- a/known_good.json
+++ b/known_good.json
@@ -5,14 +5,14 @@
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Tools",
       "subdir" : "External/spirv-tools",
-      "commit" : "df5bd2d05ac1fd3ec3024439f885ec21cc949b22"
+      "commit" : "fd8e130510a6b002b28eee5885a9505040a9bdc9"
     },
     {
       "name" : "spirv-tools/external/spirv-headers",
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Headers",
       "subdir" : "External/spirv-tools/external/spirv-headers",
-      "commit" : "79b6681aadcb53c27d1052e5f8a0e82a981dbf2f"
+      "commit" : "f8bf11a0253a32375c32cad92c841237b96696c0"
     }
   ]
 }
diff --git a/kokoro/linux-clang-release-bazel/build.sh b/kokoro/linux-clang-release-bazel/build.sh
new file mode 100644
index 0000000..f73162f
--- /dev/null
+++ b/kokoro/linux-clang-release-bazel/build.sh
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+# Copyright (C) 2019 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Linux Build Script.
+
+# Fail on any error.
+set -e
+# Display commands being run.
+set -x
+
+CC=clang
+CXX=clang++
+SRC=$PWD/github/glslang
+cd $SRC
+
+# Bazel limitation: No 'External' directory is allowed!!
+mv External third_party
+
+gsutil cp gs://bazel/0.29.1/release/bazel-0.29.1-linux-x86_64 .
+chmod +x bazel-0.29.1-linux-x86_64
+
+echo $(date): Build everything...
+./bazel-0.29.1-linux-x86_64 build :all
+echo $(date): Build completed.
+
+echo $(date): Starting bazel test...
+./bazel-0.29.1-linux-x86_64 test :all
+echo $(date): Bazel test completed.
diff --git a/kokoro/linux-clang-release-bazel/continuous.cfg b/kokoro/linux-clang-release-bazel/continuous.cfg
new file mode 100644
index 0000000..767556d
--- /dev/null
+++ b/kokoro/linux-clang-release-bazel/continuous.cfg
@@ -0,0 +1,35 @@
+# Copyright (C) 2019 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Continuous build configuration.
+build_file: "glslang/kokoro/linux-clang-release-bazel/build.sh"
diff --git a/kokoro/linux-clang-release-bazel/presubmit.cfg b/kokoro/linux-clang-release-bazel/presubmit.cfg
new file mode 100644
index 0000000..669491f
--- /dev/null
+++ b/kokoro/linux-clang-release-bazel/presubmit.cfg
@@ -0,0 +1,35 @@
+# Copyright (C) 2019 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Presubmit build configuration.
+build_file: "glslang/kokoro/linux-clang-release-bazel/build.sh"
diff --git a/kokoro/macos-clang-release-bazel/build.sh b/kokoro/macos-clang-release-bazel/build.sh
new file mode 100644
index 0000000..cc51fad
--- /dev/null
+++ b/kokoro/macos-clang-release-bazel/build.sh
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+# Copyright (C) 2019 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# macOS Build Script.
+
+# Fail on any error.
+set -e
+# Display commands being run.
+set -x
+
+CC=clang
+CXX=clang++
+SRC=$PWD/github/glslang
+cd $SRC
+
+mv External third_party
+
+# Get bazel 0.29.1.
+gsutil cp gs://bazel/0.29.1/release/bazel-0.29.1-darwin-x86_64 .
+chmod +x bazel-0.29.1-darwin-x86_64
+
+echo $(date): Build everything...
+./bazel-0.29.1-darwin-x86_64 build :all
+echo $(date): Build completed.
+
+echo $(date): Starting bazel test...
+./bazel-0.29.1-darwin-x86_64 test :all
+echo $(date): Bazel test completed.
diff --git a/kokoro/macos-clang-release-bazel/continuous.cfg b/kokoro/macos-clang-release-bazel/continuous.cfg
new file mode 100644
index 0000000..f198079
--- /dev/null
+++ b/kokoro/macos-clang-release-bazel/continuous.cfg
@@ -0,0 +1,35 @@
+# Copyright (C) 2019 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Continuous build configuration.
+build_file: "glslang/kokoro/macos-clang-release-bazel/build.sh"
diff --git a/kokoro/macos-clang-release-bazel/presubmit.cfg b/kokoro/macos-clang-release-bazel/presubmit.cfg
new file mode 100644
index 0000000..daa30be
--- /dev/null
+++ b/kokoro/macos-clang-release-bazel/presubmit.cfg
@@ -0,0 +1,35 @@
+# Copyright (C) 2019 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Presubmit build configuration.
+build_file: "glslang/kokoro/macos-clang-release-bazel/build.sh"
diff --git a/kokoro/windows-msvc-2015-release-bazel/build.bat b/kokoro/windows-msvc-2015-release-bazel/build.bat
new file mode 100644
index 0000000..1a1557c
--- /dev/null
+++ b/kokoro/windows-msvc-2015-release-bazel/build.bat
@@ -0,0 +1,75 @@
+:: Copyright (C) 2019 Google, Inc.
+::
+:: All rights reserved.
+::
+:: Redistribution and use in source and binary forms, with or without
+:: modification, are permitted provided that the following conditions
+:: are met:
+::
+::    Redistributions of source code must retain the above copyright
+::    notice, this list of conditions and the following disclaimer.
+::
+::    Redistributions in binary form must reproduce the above
+::    copyright notice, this list of conditions and the following
+::    disclaimer in the documentation and/or other materials provided
+::    with the distribution.
+::
+::    Neither the name of Google Inc. nor the names of its
+::    contributors may be used to endorse or promote products derived
+::    from this software without specific prior written permission.
+::
+:: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+:: "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+:: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+:: FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+:: COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+:: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+:: BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+:: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+:: CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+:: LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+:: ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+:: POSSIBILITY OF SUCH DAMAGE.
+:: Copyright (c) 2019 Google LLC.
+::
+:: Windows Build Script.
+
+@echo on
+
+set SRC=%cd%\github\glslang
+
+:: Force usage of python 3.6
+set PATH=C:\python36;%PATH%
+cd %SRC%
+
+mv External third_party
+
+:: REM Install Bazel.
+wget -q https://github.com/bazelbuild/bazel/releases/download/0.29.1/bazel-0.29.1-windows-x86_64.zip
+unzip -q bazel-0.29.1-windows-x86_64.zip
+
+:: Set up MSVC
+call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64
+set BAZEL_VS=C:\Program Files (x86)\Microsoft Visual Studio 14.0
+set BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
+set BAZEL_SH=c:\tools\msys64\usr\bin\bash.exe
+set BAZEL_PYTHON=c:\tools\python2\python.exe
+
+:: #########################################
+:: Start building.
+:: #########################################
+echo "Build everything... %DATE% %TIME%"
+bazel.exe build :all
+if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL%
+echo "Build Completed %DATE% %TIME%"
+
+:: ##############
+:: Run the tests
+:: ##############
+echo "Running Tests... %DATE% %TIME%"
+bazel.exe test :all
+if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL%
+echo "Tests Completed %DATE% %TIME%"
+
+exit /b 0
+
diff --git a/kokoro/windows-msvc-2015-release-bazel/continuous.cfg b/kokoro/windows-msvc-2015-release-bazel/continuous.cfg
new file mode 100644
index 0000000..554d29d
--- /dev/null
+++ b/kokoro/windows-msvc-2015-release-bazel/continuous.cfg
@@ -0,0 +1,35 @@
+# Copyright (C) 2019 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Continuous build configuration.
+build_file: "glslang/kokoro/windows-msvc-2015-release-bazel/build.bat"
diff --git a/kokoro/windows-msvc-2015-release-bazel/presubmit.cfg b/kokoro/windows-msvc-2015-release-bazel/presubmit.cfg
new file mode 100644
index 0000000..4980bb6
--- /dev/null
+++ b/kokoro/windows-msvc-2015-release-bazel/presubmit.cfg
@@ -0,0 +1,35 @@
+# Copyright (C) 2019 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Presubmit build configuration.
+build_file: "glslang/kokoro/windows-msvc-2015-release-bazel/build.bat"